@openpresentation/opf 0.14.0 → 0.16.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 (360) hide show
  1. package/README.md +28 -38
  2. package/dist/catalog-refs-_anZs-Qz.d.ts +128 -0
  3. package/dist/catalog-schemas-BZCjgAxu.d.ts +12 -0
  4. package/dist/catalog.d.ts +91 -0
  5. package/dist/{chunk-XOZ4KMSR.js → catalog.js} +17018 -8816
  6. package/dist/{chart-data-B_3z9VTb.d.ts → chart-data-BnNqgnC-.d.ts} +1 -1
  7. package/dist/{chunk-BFLVSVA7.js → chunk-3XDRQYWZ.js} +1 -1
  8. package/dist/{chunk-6OXY2CP3.js → chunk-5PDN7BN6.js} +503 -239
  9. package/dist/{chunk-CSQHPVGL.js → chunk-5TO6I3GB.js} +1 -1
  10. package/dist/{chunk-4LDGKLUC.js → chunk-5UEUAW57.js} +4 -2
  11. package/dist/{chunk-5ZU6JAPP.js → chunk-6OR326EA.js} +1 -1
  12. package/dist/{chunk-XIZUK2XM.js → chunk-BSYQDWT4.js} +15 -3
  13. package/dist/{chunk-UPQQD7MA.js → chunk-FQSIIADJ.js} +15 -6
  14. package/dist/{chunk-D3TY4TT6.js → chunk-HXHOZ7AH.js} +1407 -154
  15. package/dist/chunk-K4DQQIT4.js +319 -0
  16. package/dist/chunk-KINQFU6X.js +51 -0
  17. package/dist/{chunk-4VJDTF55.js → chunk-NAWQR7MN.js} +1 -1
  18. package/dist/{chunk-JDJBDYSR.js → chunk-PX5AWL7Y.js} +333 -857
  19. package/dist/{chunk-Q2TCMN56.js → chunk-SMLMI6IZ.js} +5 -2
  20. package/dist/chunk-SPFV27O5.js +210 -0
  21. package/dist/chunk-TRDXRRQK.js +17 -0
  22. package/dist/{chunk-Z65B2B77.js → chunk-UM24JFUE.js} +2 -2
  23. package/dist/{chunk-LS2FMPI5.js → chunk-WEDGVC5W.js} +969 -886
  24. package/dist/{composition-_WEwBe2a.d.ts → composition-D4ADF5c-.d.ts} +319 -115
  25. package/dist/composition.d.ts +3 -2
  26. package/dist/composition.js +2 -2
  27. package/dist/convert.d.ts +14 -17
  28. package/dist/convert.js +36 -39
  29. package/dist/data.d.ts +28 -11
  30. package/dist/data.js +3 -3
  31. package/dist/deck.d.ts +77 -0
  32. package/dist/deck.js +12 -0
  33. package/dist/diff.d.ts +1 -1
  34. package/dist/diff.js +7 -7
  35. package/dist/docs.js +33 -33
  36. package/dist/examples.d.ts +1 -1
  37. package/dist/examples.js +51761 -4783
  38. package/dist/{finding-C_por275.d.ts → finding-CT_f_vbD.d.ts} +2 -2
  39. package/dist/format.js +2 -2
  40. package/dist/index.d.ts +227 -77
  41. package/dist/index.js +343 -258
  42. package/dist/json-BFSdESOE.d.ts +19 -0
  43. package/dist/markdown.d.ts +20 -9
  44. package/dist/markdown.js +9 -9
  45. package/dist/{pagination-BZpXLvFL.d.ts → pagination-DzZPFheM.d.ts} +31 -31
  46. package/dist/pagination.d.ts +4 -5
  47. package/dist/pagination.js +6 -6
  48. package/dist/patch.d.ts +1 -1
  49. package/dist/patch.js +6 -6
  50. package/dist/{presentation-C5eHkevA.d.ts → presentation-COrFuj2g.d.ts} +398 -558
  51. package/dist/repo-readme.js +1 -1
  52. package/dist/schemas.d.ts +298 -1
  53. package/dist/schemas.js +1 -1
  54. package/dist/spec/README.md +1 -1
  55. package/dist/spec/catalogs/font-schemes/angsana-new.json +1 -1
  56. package/dist/spec/catalogs/font-schemes/aparajita.json +2 -2
  57. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +1 -1
  58. package/dist/spec/catalogs/font-schemes/batang.json +1 -1
  59. package/dist/spec/catalogs/font-schemes/daunpenh.json +1 -1
  60. package/dist/spec/catalogs/font-schemes/david.json +1 -1
  61. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +1 -1
  62. package/dist/spec/catalogs/font-schemes/fangsong.json +1 -1
  63. package/dist/spec/catalogs/font-schemes/gautami.json +1 -1
  64. package/dist/spec/catalogs/font-schemes/gisha.json +2 -2
  65. package/dist/spec/catalogs/font-schemes/gungsuh.json +1 -1
  66. package/dist/spec/catalogs/font-schemes/index.json +1 -1
  67. package/dist/spec/catalogs/font-schemes/kalinga.json +1 -1
  68. package/dist/spec/catalogs/font-schemes/kartika.json +1 -1
  69. package/dist/spec/catalogs/font-schemes/khmer-ui.json +1 -1
  70. package/dist/spec/catalogs/font-schemes/latha.json +1 -1
  71. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +1 -1
  72. package/dist/spec/catalogs/font-schemes/mangal.json +3 -3
  73. package/dist/spec/catalogs/font-schemes/meiryo.json +1 -1
  74. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +1 -1
  75. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +4 -4
  76. package/dist/spec/catalogs/font-schemes/mingliu.json +1 -1
  77. package/dist/spec/catalogs/font-schemes/miriam.json +1 -1
  78. package/dist/spec/catalogs/font-schemes/ms-mincho.json +1 -1
  79. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +1 -1
  80. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +1 -1
  81. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +2 -2
  82. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +3 -3
  83. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +1 -1
  84. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +2 -2
  85. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +2 -2
  86. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +1 -1
  87. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +1 -1
  88. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +1 -1
  89. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +1 -1
  90. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +1 -1
  91. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +1 -1
  92. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +1 -1
  93. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +1 -1
  94. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +1 -1
  95. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +1 -1
  96. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +1 -1
  97. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +1 -1
  98. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +4 -4
  99. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +1 -1
  100. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +1 -1
  101. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +1 -1
  102. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +1 -1
  103. package/dist/spec/catalogs/font-schemes/noto-sans.json +4 -4
  104. package/dist/spec/catalogs/font-schemes/nyala.json +1 -1
  105. package/dist/spec/catalogs/font-schemes/pmingliu.json +1 -1
  106. package/dist/spec/catalogs/font-schemes/raavi.json +1 -1
  107. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +3 -3
  108. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +2 -2
  109. package/dist/spec/catalogs/font-schemes/shruti.json +1 -1
  110. package/dist/spec/catalogs/font-schemes/simsun.json +1 -1
  111. package/dist/spec/catalogs/font-schemes/sylfaen.json +2 -2
  112. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +3 -3
  113. package/dist/spec/catalogs/font-schemes/tunga.json +1 -1
  114. package/dist/spec/catalogs/font-schemes/vrinda.json +1 -1
  115. package/dist/spec/catalogs/font-schemes/yu-gothic.json +1 -1
  116. package/dist/spec/catalogs/layouts/business-model-canvas.json +66 -1
  117. package/dist/spec/catalogs/layouts/capability-map.json +53 -6
  118. package/dist/spec/catalogs/layouts/chart-1x-title-center.json +30 -0
  119. package/dist/spec/catalogs/layouts/chart-2x-title-center.json +36 -0
  120. package/dist/spec/catalogs/layouts/chart-2x-vertical-title-left.json +37 -0
  121. package/dist/spec/catalogs/layouts/chart-2x.json +32 -8
  122. package/dist/spec/catalogs/layouts/chart-3x-bottom-vertical-title-left.json +52 -0
  123. package/dist/spec/catalogs/layouts/chart-3x-left-title-center.json +51 -0
  124. package/dist/spec/catalogs/layouts/chart-3x-left.json +46 -0
  125. package/dist/spec/catalogs/layouts/chart-3x-right-title-center.json +51 -0
  126. package/dist/spec/catalogs/layouts/chart-3x-right.json +46 -0
  127. package/dist/spec/catalogs/layouts/chart-3x-title-center.json +39 -0
  128. package/dist/spec/catalogs/layouts/chart-3x-top-vertical-title-left.json +52 -0
  129. package/dist/spec/catalogs/layouts/chart-3x.json +48 -12
  130. package/dist/spec/catalogs/layouts/competitive-landscape.json +1 -4
  131. package/dist/spec/catalogs/layouts/customer-journey.json +1 -4
  132. package/dist/spec/catalogs/layouts/dashboard.json +37 -5
  133. package/dist/spec/catalogs/layouts/decision-tree.json +1 -4
  134. package/dist/spec/catalogs/layouts/ecosystem-map.json +1 -4
  135. package/dist/spec/catalogs/layouts/extract/canonical.json +0 -9
  136. package/dist/spec/catalogs/layouts/geographic-map.json +1 -4
  137. package/dist/spec/catalogs/layouts/icon-grid.json +1 -4
  138. package/dist/spec/catalogs/layouts/image-1x-crop-title-center.json +32 -0
  139. package/dist/spec/catalogs/layouts/image-1x-crop-title-left.json +32 -0
  140. package/dist/spec/catalogs/layouts/image-1x-crop.json +27 -0
  141. package/dist/spec/catalogs/layouts/image-1x-fit-title-center.json +32 -0
  142. package/dist/spec/catalogs/layouts/image-1x.json +3 -0
  143. package/dist/spec/catalogs/layouts/image-2x-crop-title-center.json +38 -0
  144. package/dist/spec/catalogs/layouts/image-2x-crop-vertical-title-left.json +39 -0
  145. package/dist/spec/catalogs/layouts/image-2x-crop-vertical.json +34 -0
  146. package/dist/spec/catalogs/layouts/image-2x-crop.json +33 -0
  147. package/dist/spec/catalogs/layouts/image-2x-fit-title-center.json +38 -0
  148. package/dist/spec/catalogs/layouts/image-2x-fit-vertical-title-left.json +39 -0
  149. package/dist/spec/catalogs/layouts/image-2x-fit-vertical.json +34 -0
  150. package/dist/spec/catalogs/layouts/image-2x.json +35 -8
  151. package/dist/spec/catalogs/layouts/image-3x-crop-title-center.json +41 -0
  152. package/dist/spec/catalogs/layouts/image-3x-crop-vertical-title-left.json +42 -0
  153. package/dist/spec/catalogs/layouts/image-3x-crop-vertical.json +37 -0
  154. package/dist/spec/catalogs/layouts/image-3x-crop.json +36 -0
  155. package/dist/spec/catalogs/layouts/image-3x-fit-title-center.json +41 -0
  156. package/dist/spec/catalogs/layouts/image-3x-fit-vertical-title-left.json +42 -0
  157. package/dist/spec/catalogs/layouts/image-3x-fit-vertical.json +37 -0
  158. package/dist/spec/catalogs/layouts/image-3x-fit.json +36 -0
  159. package/dist/spec/catalogs/layouts/image-3x.json +51 -12
  160. package/dist/spec/catalogs/layouts/image-focus.json +3 -6
  161. package/dist/spec/catalogs/layouts/image-only-1x-crop-title-center.json +31 -0
  162. package/dist/spec/catalogs/layouts/image-only-1x-fit-title-center.json +31 -0
  163. package/dist/spec/catalogs/layouts/image-only-2x-crop-title-center.json +37 -0
  164. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical-title-left.json +38 -0
  165. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical.json +33 -0
  166. package/dist/spec/catalogs/layouts/image-only-2x-fit-title-center.json +37 -0
  167. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical-title-left.json +38 -0
  168. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical.json +33 -0
  169. package/dist/spec/catalogs/layouts/image-only-3x-crop-title-center.json +40 -0
  170. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical-title-left.json +41 -0
  171. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical.json +36 -0
  172. package/dist/spec/catalogs/layouts/image-only-3x-crop.json +35 -0
  173. package/dist/spec/catalogs/layouts/image-only-3x-fit-title-center.json +40 -0
  174. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical-title-left.json +41 -0
  175. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical.json +36 -0
  176. package/dist/spec/catalogs/layouts/image-only-3x-fit.json +35 -0
  177. package/dist/spec/catalogs/layouts/index.json +1041 -151
  178. package/dist/spec/catalogs/layouts/kpi-scorecard.json +48 -3
  179. package/dist/spec/catalogs/layouts/list-1x-box-title-center.json +32 -0
  180. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-center.json +33 -0
  181. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-left.json +33 -0
  182. package/dist/spec/catalogs/layouts/list-1x-box-vertical.json +28 -0
  183. package/dist/spec/catalogs/layouts/list-1x-box.json +27 -0
  184. package/dist/spec/catalogs/layouts/list-1x-itemimage-title-center.json +32 -0
  185. package/dist/spec/catalogs/layouts/list-1x-itemimage-vertical-title-center.json +33 -0
  186. package/dist/spec/catalogs/layouts/list-1x-title-center.json +31 -0
  187. package/dist/spec/catalogs/layouts/list-1x-vertical-title-center.json +32 -0
  188. package/dist/spec/catalogs/layouts/list-2x-box-title-center.json +38 -0
  189. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-center.json +39 -0
  190. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-left.json +39 -0
  191. package/dist/spec/catalogs/layouts/list-2x-box-vertical.json +34 -0
  192. package/dist/spec/catalogs/layouts/list-2x-box.json +33 -0
  193. package/dist/spec/catalogs/layouts/list-2x-itemimage-title-center.json +38 -0
  194. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-center.json +39 -0
  195. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-left.json +39 -0
  196. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical.json +34 -0
  197. package/dist/spec/catalogs/layouts/list-2x-title-center.json +37 -0
  198. package/dist/spec/catalogs/layouts/list-2x-vertical-title-center.json +38 -0
  199. package/dist/spec/catalogs/layouts/list-2x-vertical-title-left.json +38 -0
  200. package/dist/spec/catalogs/layouts/list-2x-vertical.json +33 -0
  201. package/dist/spec/catalogs/layouts/list-3x-box-title-center.json +41 -0
  202. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-center.json +42 -0
  203. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-left.json +42 -0
  204. package/dist/spec/catalogs/layouts/list-3x-box-vertical.json +37 -0
  205. package/dist/spec/catalogs/layouts/list-3x-box.json +36 -0
  206. package/dist/spec/catalogs/layouts/list-3x-itemimage-title-center.json +41 -0
  207. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-center.json +42 -0
  208. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-left.json +42 -0
  209. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical.json +37 -0
  210. package/dist/spec/catalogs/layouts/list-3x-itemimage.json +36 -0
  211. package/dist/spec/catalogs/layouts/list-3x-title-center.json +40 -0
  212. package/dist/spec/catalogs/layouts/list-3x-vertical-title-center.json +41 -0
  213. package/dist/spec/catalogs/layouts/list-3x-vertical-title-left.json +41 -0
  214. package/dist/spec/catalogs/layouts/list-3x-vertical.json +36 -0
  215. package/dist/spec/catalogs/layouts/list-4x-box-title-center.json +45 -0
  216. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-center.json +45 -0
  217. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-left.json +45 -0
  218. package/dist/spec/catalogs/layouts/list-4x-box-vertical.json +40 -0
  219. package/dist/spec/catalogs/layouts/list-4x-box.json +40 -0
  220. package/dist/spec/catalogs/layouts/list-4x-itemimage-title-center.json +45 -0
  221. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-center.json +45 -0
  222. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-left.json +45 -0
  223. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical.json +40 -0
  224. package/dist/spec/catalogs/layouts/list-4x-title-center.json +44 -0
  225. package/dist/spec/catalogs/layouts/list-4x-vertical-title-center.json +44 -0
  226. package/dist/spec/catalogs/layouts/list-4x-vertical-title-left.json +44 -0
  227. package/dist/spec/catalogs/layouts/list-4x-vertical.json +39 -0
  228. package/dist/spec/catalogs/layouts/list-5x-box-title-center.json +48 -0
  229. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-center.json +50 -0
  230. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-left.json +50 -0
  231. package/dist/spec/catalogs/layouts/list-5x-box-vertical.json +45 -0
  232. package/dist/spec/catalogs/layouts/list-5x-box.json +43 -0
  233. package/dist/spec/catalogs/layouts/list-5x-itemimage-title-center.json +48 -0
  234. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-center.json +48 -0
  235. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-left.json +48 -0
  236. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical.json +43 -0
  237. package/dist/spec/catalogs/layouts/list-5x-title-center.json +47 -0
  238. package/dist/spec/catalogs/layouts/list-5x-vertical-title-center.json +47 -0
  239. package/dist/spec/catalogs/layouts/list-5x-vertical-title-left.json +47 -0
  240. package/dist/spec/catalogs/layouts/list-5x-vertical.json +42 -0
  241. package/dist/spec/catalogs/layouts/list-6x-box-title-center.json +51 -0
  242. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-center.json +53 -0
  243. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-left.json +53 -0
  244. package/dist/spec/catalogs/layouts/list-6x-box-vertical.json +48 -0
  245. package/dist/spec/catalogs/layouts/list-6x-box.json +46 -0
  246. package/dist/spec/catalogs/layouts/list-6x-itemimage-title-center.json +51 -0
  247. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-center.json +51 -0
  248. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-left.json +51 -0
  249. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical.json +46 -0
  250. package/dist/spec/catalogs/layouts/list-6x-title-center.json +50 -0
  251. package/dist/spec/catalogs/layouts/list-6x-vertical-title-center.json +50 -0
  252. package/dist/spec/catalogs/layouts/list-6x-vertical-title-left.json +50 -0
  253. package/dist/spec/catalogs/layouts/list-6x-vertical.json +45 -0
  254. package/dist/spec/catalogs/layouts/logic-tree.json +69 -0
  255. package/dist/spec/catalogs/layouts/market-size.json +26 -2
  256. package/dist/spec/catalogs/layouts/network-dependency-map.json +1 -4
  257. package/dist/spec/catalogs/layouts/number-1x-box-title-center.json +30 -0
  258. package/dist/spec/catalogs/layouts/number-1x-box.json +25 -0
  259. package/dist/spec/catalogs/layouts/number-1x-title-center.json +29 -0
  260. package/dist/spec/catalogs/layouts/number-2x-box-title-center.json +36 -0
  261. package/dist/spec/catalogs/layouts/number-2x-box.json +31 -0
  262. package/dist/spec/catalogs/layouts/number-2x-title-center.json +35 -0
  263. package/dist/spec/catalogs/layouts/number-3x-box-title-center.json +39 -0
  264. package/dist/spec/catalogs/layouts/number-3x-box.json +34 -0
  265. package/dist/spec/catalogs/layouts/number-3x-title-center.json +38 -0
  266. package/dist/spec/catalogs/layouts/number-4x-box-title-center.json +43 -0
  267. package/dist/spec/catalogs/layouts/number-4x-box.json +38 -0
  268. package/dist/spec/catalogs/layouts/number-4x-title-center.json +42 -0
  269. package/dist/spec/catalogs/layouts/number-5x-box-title-center.json +46 -0
  270. package/dist/spec/catalogs/layouts/number-5x-box.json +41 -0
  271. package/dist/spec/catalogs/layouts/number-5x-title-center.json +45 -0
  272. package/dist/spec/catalogs/layouts/number-6x-box-title-center.json +49 -0
  273. package/dist/spec/catalogs/layouts/number-6x-box.json +44 -0
  274. package/dist/spec/catalogs/layouts/number-6x-title-center.json +48 -0
  275. package/dist/spec/catalogs/layouts/org-chart.json +53 -6
  276. package/dist/spec/catalogs/layouts/persona-grid.json +1 -4
  277. package/dist/spec/catalogs/layouts/photo-grid.json +1 -4
  278. package/dist/spec/catalogs/layouts/product-feature.json +1 -4
  279. package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +1 -4
  280. package/dist/spec/catalogs/layouts/swimlane-process.json +1 -4
  281. package/dist/spec/catalogs/layouts/team-bio.json +1 -4
  282. package/dist/spec/catalogs/layouts/text-1x-box-title-center.json +31 -0
  283. package/dist/spec/catalogs/layouts/text-1x-box-title-left.json +31 -0
  284. package/dist/spec/catalogs/layouts/text-1x-center-box-title-center.json +31 -0
  285. package/dist/spec/catalogs/layouts/text-1x-center-box-title-left.json +31 -0
  286. package/dist/spec/catalogs/layouts/text-1x-center-box.json +26 -0
  287. package/dist/spec/catalogs/layouts/text-1x-center-title-center.json +30 -0
  288. package/dist/spec/catalogs/layouts/text-1x-center-title-left.json +30 -0
  289. package/dist/spec/catalogs/layouts/text-1x-center.json +25 -0
  290. package/dist/spec/catalogs/layouts/text-1x-left-box.json +26 -0
  291. package/dist/spec/catalogs/layouts/text-1x-title-center.json +30 -0
  292. package/dist/spec/catalogs/layouts/text-2x-box-title-center.json +37 -0
  293. package/dist/spec/catalogs/layouts/text-2x-box-vertical-title-left.json +37 -0
  294. package/dist/spec/catalogs/layouts/text-2x-center-box-title-center.json +37 -0
  295. package/dist/spec/catalogs/layouts/text-2x-center-box-vertical-title-left.json +37 -0
  296. package/dist/spec/catalogs/layouts/text-2x-center-box.json +32 -0
  297. package/dist/spec/catalogs/layouts/text-2x-center-title-center.json +36 -0
  298. package/dist/spec/catalogs/layouts/text-2x-center-vertical-title-left.json +36 -0
  299. package/dist/spec/catalogs/layouts/text-2x-center.json +31 -0
  300. package/dist/spec/catalogs/layouts/text-2x-left-box.json +32 -0
  301. package/dist/spec/catalogs/layouts/text-2x-title-center.json +36 -0
  302. package/dist/spec/catalogs/layouts/text-2x-vertical-title-left.json +36 -0
  303. package/dist/spec/catalogs/layouts/text-3x-box-title-center.json +40 -0
  304. package/dist/spec/catalogs/layouts/text-3x-box-vertical-title-left.json +41 -0
  305. package/dist/spec/catalogs/layouts/text-3x-center-box-title-center.json +40 -0
  306. package/dist/spec/catalogs/layouts/text-3x-center-box-vertical-title-left.json +41 -0
  307. package/dist/spec/catalogs/layouts/text-3x-center-box.json +35 -0
  308. package/dist/spec/catalogs/layouts/text-3x-center-title-center.json +39 -0
  309. package/dist/spec/catalogs/layouts/text-3x-center-vertical-title-left.json +40 -0
  310. package/dist/spec/catalogs/layouts/text-3x-center.json +34 -0
  311. package/dist/spec/catalogs/layouts/text-3x-left-box.json +35 -0
  312. package/dist/spec/catalogs/layouts/text-3x-left.json +34 -0
  313. package/dist/spec/catalogs/layouts/text-3x-title-center.json +39 -0
  314. package/dist/spec/catalogs/layouts/text-3x-vertical-title-left.json +40 -0
  315. package/dist/spec/catalogs/layouts/title-center-box.json +27 -0
  316. package/dist/spec/catalogs/layouts/title-center-image-bottom.json +34 -0
  317. package/dist/spec/catalogs/layouts/title-center-image-top.json +34 -0
  318. package/dist/spec/catalogs/layouts/title-center.json +26 -0
  319. package/dist/spec/catalogs/layouts/title-left-image-bottom.json +34 -0
  320. package/dist/spec/catalogs/layouts/title-left-image-left.json +34 -0
  321. package/dist/spec/catalogs/layouts/title-left-image-right.json +34 -0
  322. package/dist/spec/catalogs/layouts/title-left-image-top.json +34 -0
  323. package/dist/spec/catalogs/manifest.json +18 -18
  324. package/dist/spec/catalogs/narratives/heros-journey.json +1 -1
  325. package/dist/spec/catalogs/narratives/index.json +1 -1
  326. package/dist/spec/openapi.yaml +3 -3
  327. package/dist/spec/reference/engine-defaults.json +22 -30
  328. package/dist/spec/reference/engine-vocabularies.json +1577 -0
  329. package/dist/spec/schemas/audience.schema.json +5 -26
  330. package/dist/spec/schemas/catalog-manifest.schema.json +3 -3
  331. package/dist/spec/schemas/chart-type.schema.json +2 -35
  332. package/dist/spec/schemas/color-scheme.schema.json +3 -24
  333. package/dist/spec/schemas/finding.schema.json +1 -1
  334. package/dist/spec/schemas/font-scheme.schema.json +6 -37
  335. package/dist/spec/schemas/language.schema.json +7 -28
  336. package/dist/spec/schemas/layout.schema.json +227 -55
  337. package/dist/spec/schemas/narrative.schema.json +4 -24
  338. package/dist/spec/schemas/opf.schema.json +410 -374
  339. package/dist/spec/schemas/purpose.schema.json +5 -26
  340. package/dist/spec/schemas/social-platform.schema.json +2 -23
  341. package/dist/spec/schemas/theme.schema.json +9 -37
  342. package/dist/spec/schemas/tone.schema.json +4 -25
  343. package/dist/spec-files.d.ts +1 -1
  344. package/dist/spec-files.js +1 -1
  345. package/dist/types.d.ts +1103 -4
  346. package/dist/{validation-types-zh03LeZy.d.ts → validation-types-HxIgJfKx.d.ts} +7 -7
  347. package/dist/validator.d.ts +15 -12
  348. package/dist/validator.js +5 -5
  349. package/dist/yaml.d.ts +22 -7
  350. package/dist/yaml.js +9 -321
  351. package/package.json +9 -9
  352. package/dist/catalogs-D-yyQWCQ.d.ts +0 -1343
  353. package/dist/catalogs.d.ts +0 -2
  354. package/dist/catalogs.js +0 -2
  355. package/dist/chunk-PIQXLBBJ.js +0 -445
  356. package/dist/chunk-S5W34SIJ.js +0 -1
  357. package/dist/previews.d.ts +0 -40
  358. package/dist/previews.js +0 -1
  359. package/dist/schemas-DDpqAgyS.d.ts +0 -284
  360. package/dist/spec/catalogs/layouts/image-bleed.json +0 -20
package/dist/index.js CHANGED
@@ -1,23 +1,314 @@
1
- export { specFileEntries, specFileKinds, specFilePaths } from './chunk-D3TY4TT6.js';
2
- export { getLayoutPreview, hasLayoutPreview, layoutPreviewIndex, layoutPreviewSlugs, layoutPreviews } from './chunk-PIQXLBBJ.js';
3
- export { OPFDataImportError, importData, parseTabularData } from './chunk-Q2TCMN56.js';
4
- export { fromMarkdown, toMarkdown } from './chunk-UPQQD7MA.js';
5
- export { OPFMarkdownError } from './chunk-4LDGKLUC.js';
6
- export { diff, merge } from './chunk-Z65B2B77.js';
7
- export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-BFLVSVA7.js';
8
- export { OPFFormatError, format } from './chunk-5ZU6JAPP.js';
9
- export { OPFPaginationError, paginate, paginateSlide } from './chunk-XIZUK2XM.js';
10
- import './chunk-4VJDTF55.js';
11
- import './chunk-CSQHPVGL.js';
12
- export { DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-JDJBDYSR.js';
13
- import { isRecord, DEFAULT_FONT_SCHEME, visitContentPayloads, listVariables, resolveFontSchemeReference, resolveFontFamilies, resolveCanvasDimensions, bareIdPattern } from './chunk-6OXY2CP3.js';
14
- export { DEFAULT_VARIABLE_DATE_FORMAT, OPFVariableError, VARIABLE_KINDS, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, resolveChartData, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unusedDatasets, variableDeclarations } from './chunk-6OXY2CP3.js';
15
- import './chunk-S5W34SIJ.js';
16
- import { catalogs, catalogEntries } from './chunk-XOZ4KMSR.js';
17
- export { audiences, catalogEntries, catalogIndexes, catalogKinds, catalogSchemaNames, catalogs, chartTypes, colorSchemes, fontSchemes, languages, layouts, narratives, purposes, socialPlatforms, themes, tones } from './chunk-XOZ4KMSR.js';
18
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-LS2FMPI5.js';
1
+ export { specFileEntries, specFileKinds, specFilePaths } from './chunk-HXHOZ7AH.js';
2
+ export { OPFDataImportError, importData, parseTabularData } from './chunk-SMLMI6IZ.js';
3
+ export { DECK_FORMATS, deckFormatOf, readDeck, writeDeck } from './chunk-KINQFU6X.js';
4
+ export { fromMarkdown, toMarkdown } from './chunk-FQSIIADJ.js';
5
+ import './chunk-K4DQQIT4.js';
6
+ export { OPFMarkdownError } from './chunk-5UEUAW57.js';
7
+ export { diff, merge } from './chunk-UM24JFUE.js';
8
+ export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-3XDRQYWZ.js';
9
+ export { OPFFormatError, format } from './chunk-6OR326EA.js';
10
+ export { OPFPaginationError, paginate, paginateSlide } from './chunk-BSYQDWT4.js';
11
+ import './chunk-NAWQR7MN.js';
12
+ import './chunk-5TO6I3GB.js';
13
+ export { DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-PX5AWL7Y.js';
14
+ import { isRecord, visitContentPayloads, listVariables, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-5PDN7BN6.js';
15
+ export { CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, OPFVariableError, SOCIAL_PLATFORMS, VARIABLE_KINDS, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unusedDatasets, variableDeclarations } from './chunk-5PDN7BN6.js';
16
+ export { catalogDisplayKinds, catalogSchemaNames } from './chunk-TRDXRRQK.js';
17
+ import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN } from './chunk-SPFV27O5.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-WEDGVC5W.js';
19
20
  export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-WXSPETQ6.js';
20
21
 
22
+ // src/catalog-helpers.ts
23
+ var isRec = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
24
+ var rec = (value) => isRec(value) ? value : {};
25
+ function canonical(value) {
26
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
27
+ if (isRec(value))
28
+ return `{${Object.keys(value).filter((key) => value[key] !== void 0).sort().map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`).join(",")}}`;
29
+ return JSON.stringify(value);
30
+ }
31
+ function sameRecord(a, b) {
32
+ return canonical(embeddedCopy(a)) === canonical(embeddedCopy(b));
33
+ }
34
+ function setAt(root, path, value) {
35
+ let node = root;
36
+ for (const part of path.slice(0, -1)) node = node[part];
37
+ node[path[path.length - 1]] = value;
38
+ }
39
+ var kindsOf = (group, kind) => {
40
+ if (!isRec(group[kind])) group[kind] = {};
41
+ return group[kind];
42
+ };
43
+ function embed(document, options = {}) {
44
+ const catalogs = { catalogs: checkCatalogsOption(options.catalogs, "embed") };
45
+ const out = structuredClone(rec(document));
46
+ const added = [];
47
+ const unresolved = [];
48
+ const queue = catalogReferenceSites(out);
49
+ const reported = /* @__PURE__ */ new Set();
50
+ while (queue.length) {
51
+ const site = queue.shift();
52
+ const parsed = parseReference(site.reference);
53
+ if (parsed?.group !== void 0 && !catalogGroupDeclared(out, parsed.group)) continue;
54
+ const found = resolveReference(out, site.kind, site.reference, { ...catalogs, ...site.group !== void 0 ? { group: site.group } : {} });
55
+ if (!found) {
56
+ const path = dottedPath(site.path);
57
+ if (!reported.has(path)) {
58
+ reported.add(path);
59
+ unresolved.push(unresolvedReference(out, site.kind, site.reference, path, catalogs));
60
+ }
61
+ continue;
62
+ }
63
+ if (found.origin === "document") continue;
64
+ if (!isRec(out.catalogs)) out.catalogs = {};
65
+ const groups = out.catalogs;
66
+ if (!isRec(groups[found.group])) groups[found.group] = {};
67
+ const group = groups[found.group];
68
+ if (found.group !== "custom" && typeof group.source !== "string" && found.source !== void 0) {
69
+ const rest = { ...group };
70
+ for (const key of Object.keys(group)) delete group[key];
71
+ Object.assign(group, { source: found.source }, rest);
72
+ }
73
+ const copy = embeddedCopy(found.record);
74
+ kindsOf(group, site.kind)[found.id] = copy;
75
+ added.push({ group: found.group, kind: site.kind, id: found.id, ...found.source !== void 0 ? { source: found.source } : {} });
76
+ queue.push(...recordReferenceSites(site.kind, copy, ["catalogs", found.group, site.kind, found.id], found.group));
77
+ }
78
+ return { document: out, added, unresolved };
79
+ }
80
+ function groupNameFor(source) {
81
+ const base = source.startsWith("pkg:") ? source.slice(4).replace(/^@/, "").split("/").slice(0, 2).join("-") : (() => {
82
+ try {
83
+ return new URL(source).hostname.replace(/^www\./, "");
84
+ } catch {
85
+ return source;
86
+ }
87
+ })();
88
+ const name = base.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
89
+ return /^[a-z]/.test(name) ? name : `catalog-${name || "source"}`;
90
+ }
91
+ function copySlides(from, to, indexes, options = {}) {
92
+ const catalogs = { catalogs: checkCatalogsOption(options.catalogs, "copySlides") };
93
+ const source = rec(from);
94
+ const target = structuredClone(rec(to));
95
+ const sourceSlides = Array.isArray(source.slides) ? source.slides : [];
96
+ const targetSlides = Array.isArray(target.slides) ? target.slides : [];
97
+ for (const index of indexes)
98
+ if (!Number.isInteger(index) || index < 0 || index >= sourceSlides.length) throw new RangeError(`Slide index ${String(index)} is outside the source presentation's ${sourceSlides.length} slides.`);
99
+ const at = options.at ?? targetSlides.length;
100
+ if (!Number.isInteger(at) || at < 0 || at > targetSlides.length) throw new RangeError(`Insertion index ${String(at)} is outside the target presentation's ${targetSlides.length + 1} positions.`);
101
+ const renamed = [];
102
+ const addedGroups = [];
103
+ const added = [];
104
+ const unresolved = [];
105
+ const hadCatalogs = isRec(target.catalogs);
106
+ const groups = () => {
107
+ if (!isRec(target.catalogs)) target.catalogs = {};
108
+ return target.catalogs;
109
+ };
110
+ const memo = /* @__PURE__ */ new Map();
111
+ const targetGroupFor = (catalogSource, sourceGroupName) => {
112
+ for (const [name2, value] of Object.entries(rec(target.catalogs))) if (name2 !== "custom" && isRec(value) && value.source === catalogSource) return name2;
113
+ if (rec(target.catalogs).default !== false && catalogGroupSource(target, "default", catalogs) === catalogSource) return "default";
114
+ let name = sourceGroupName === "default" || sourceGroupName === "custom" ? groupNameFor(catalogSource) : sourceGroupName;
115
+ for (let n = 2; catalogGroupDeclared(target, name) || name === "default" || name === "custom"; n++) name = `${sourceGroupName === "default" ? groupNameFor(catalogSource) : sourceGroupName}-${n}`;
116
+ groups()[name] = { source: catalogSource };
117
+ addedGroups.push({ name, source: catalogSource });
118
+ return name;
119
+ };
120
+ const bareTaken = (kind, id) => resolveReference(target, kind, id, catalogs) !== void 0;
121
+ const addCustom = (kind, wanted, record, renamed2 = false) => {
122
+ const custom = rec(rec(target.catalogs).custom);
123
+ const existing = rec(custom[kind]);
124
+ for (const [id2, value] of Object.entries(existing)) if ((!renamed2 && id2 === wanted || /^-\d+$/.test(id2.slice(wanted.length))) && id2.startsWith(wanted) && sameRecord(value, record)) return { id: id2, reused: true };
125
+ let n = renamed2 ? 2 : 1;
126
+ let id = renamed2 ? `${wanted}-2` : wanted;
127
+ while (Object.hasOwn(existing, id) || bareTaken(kind, id)) id = `${wanted}-${++n}`;
128
+ if (!isRec(groups().custom)) groups().custom = {};
129
+ kindsOf(groups().custom, kind)[id] = record;
130
+ added.push({ group: "custom", kind, id });
131
+ return { id, reused: false };
132
+ };
133
+ const referenceTo = (kind, group, id, holder) => {
134
+ const found = resolveReference(target, kind, id, { ...catalogs, ...holder !== void 0 ? { group: holder } : {} });
135
+ return found && found.group === group && found.id === id ? id : `${group}:${id}`;
136
+ };
137
+ const place = (kind, reference2, path, holder) => {
138
+ const found = resolveReference(source, kind, reference2, { ...catalogs, ...holder !== void 0 ? { group: holder } : {} });
139
+ if (!found) {
140
+ unresolved.push(unresolvedReference(source, kind, reference2, path, catalogs));
141
+ return void 0;
142
+ }
143
+ const key = `${kind}\0${found.group}\0${found.source ?? ""}\0${found.id}`;
144
+ const known = memo.get(key);
145
+ if (known) return known;
146
+ const incoming = embeddedCopy(found.record);
147
+ const catalogSource = found.group === "custom" ? void 0 : found.source;
148
+ const group = catalogSource === void 0 ? "custom" : targetGroupFor(catalogSource, found.group);
149
+ const inner = recordReferenceSites(kind, incoming, []).map((site) => ({ site, placed: place(site.kind, site.reference, `${path} -> ${site.path.join(".")}`, found.group) }));
150
+ const rewrite = (holderGroup) => {
151
+ const copy = structuredClone(incoming);
152
+ for (const { site, placed: placed2 } of inner) if (placed2) setAt(copy, site.path, referenceTo(site.kind, placed2.group, placed2.id, holderGroup));
153
+ return copy;
154
+ };
155
+ let placed;
156
+ if (group === "custom") {
157
+ const result = addCustom(kind, found.id, rewrite("custom"));
158
+ if (result.id !== found.id && !result.reused) renamed.push({ kind, from: reference2, to: result.id, reason: "custom-conflict" });
159
+ placed = { group: "custom", id: result.id };
160
+ } else {
161
+ const record = rewrite(group);
162
+ const embedded = rec(rec(rec(target.catalogs)[group])[kind]);
163
+ const current = Object.hasOwn(embedded, found.id) ? embedded[found.id] : registeredCatalog(catalogGroupSource(target, group, catalogs), catalogs)?.[kind]?.[found.id];
164
+ if (current === void 0 || sameRecord(current, record)) {
165
+ if (!Object.hasOwn(embedded, found.id)) {
166
+ if (!isRec(groups()[group])) groups()[group] = {};
167
+ const holder2 = groups()[group];
168
+ if (typeof holder2.source !== "string" && catalogSource !== void 0) {
169
+ const rest = { ...holder2 };
170
+ for (const key2 of Object.keys(holder2)) delete holder2[key2];
171
+ Object.assign(holder2, { source: catalogSource }, rest);
172
+ }
173
+ kindsOf(holder2, kind)[found.id] = record;
174
+ added.push({ group, kind, id: found.id, ...catalogSource !== void 0 ? { source: catalogSource } : {} });
175
+ }
176
+ placed = { group, id: found.id };
177
+ } else {
178
+ const { id, reused } = addCustom(kind, found.id, rewrite("custom"), true);
179
+ if (!reused) renamed.push({ kind, from: reference2, to: id, reason: "catalog-revision" });
180
+ placed = { group: "custom", id };
181
+ }
182
+ }
183
+ memo.set(key, placed);
184
+ return placed;
185
+ };
186
+ const copied = [];
187
+ for (const index of indexes) {
188
+ const slide = structuredClone(sourceSlides[index]);
189
+ const holder = { slides: [slide] };
190
+ for (const site of catalogReferenceSites(holder, { records: false })) {
191
+ const placed = place(site.kind, site.reference, `slides.${index}.${site.path.slice(2).join(".")}`);
192
+ if (placed) setAt(holder, site.path, referenceTo(site.kind, placed.group, placed.id));
193
+ }
194
+ copied.push(holder.slides[0]);
195
+ }
196
+ targetSlides.splice(at, 0, ...copied);
197
+ target.slides = targetSlides;
198
+ if (!hadCatalogs && isRec(target.catalogs) && Object.keys(target.catalogs).length === 0) delete target.catalogs;
199
+ return { document: target, slides: copied.map((_, offset) => at + offset), renamed, addedGroups, added, unresolved };
200
+ }
201
+ var pointerPart = (part) => part.replaceAll("~", "~0").replaceAll("/", "~1");
202
+ function updateFromCatalog(document, catalogs, refs) {
203
+ const options = { catalogs: checkCatalogsOption(catalogs, "updateFromCatalog") };
204
+ const groups = rec(rec(document).catalogs);
205
+ const wanted = refs?.map((ref) => {
206
+ const parsed = parseReference(ref.reference);
207
+ return parsed ? { kind: ref.kind, group: parsed.group ?? "default", id: parsed.id } : void 0;
208
+ });
209
+ const changes = [];
210
+ for (const [group, value] of Object.entries(groups)) {
211
+ if (group === "custom" || !isRec(value)) continue;
212
+ const catalogSource = catalogGroupSource(document, group, options);
213
+ const registered = registeredCatalog(catalogSource, options);
214
+ if (!registered || catalogSource === void 0) continue;
215
+ for (const kind of catalogKinds)
216
+ for (const [id, embedded] of Object.entries(rec(value[kind]))) {
217
+ if (wanted && !wanted.some((entry) => entry && entry.kind === kind && entry.group === group && entry.id === id)) continue;
218
+ const current = registered[kind]?.[id];
219
+ if (current === void 0 || sameRecord(embedded, current)) continue;
220
+ changes.push({ kind, reference: group === "default" ? id : `${group}:${id}`, group, id, source: catalogSource, embedded: rec(embedded), current: embeddedCopy(current) });
221
+ }
222
+ }
223
+ return {
224
+ changes,
225
+ patch: changes.map((change) => ({ op: "replace", path: `/catalogs/${pointerPart(change.group)}/${change.kind}/${pointerPart(change.id)}`, value: change.current }))
226
+ };
227
+ }
228
+ var OPFMoveToCustomError = class extends Error {
229
+ code;
230
+ constructor(code, message) {
231
+ super(message);
232
+ this.name = "OPFMoveToCustomError";
233
+ this.code = code;
234
+ }
235
+ };
236
+ var pointerOf = (path) => `/${path.map((part) => pointerPart(String(part))).join("/")}`;
237
+ function moveToCustom(document, ref, options = {}) {
238
+ const catalogs = { catalogs: checkCatalogsOption(options.catalogs, "moveToCustom") };
239
+ const parsed = parseReference(ref.reference);
240
+ if (!parsed || !catalogKinds.includes(ref.kind)) throw new OPFMoveToCustomError("invalid-reference", `moveToCustom: ${JSON.stringify(ref.reference)} is not a ${String(ref.kind)} reference (an id or name:id).`);
241
+ const { kind } = ref;
242
+ const fromGroup = parsed.group ?? "default";
243
+ if (fromGroup === "custom") throw new OPFMoveToCustomError("already-custom", `moveToCustom: ${ref.reference} already names a record of catalogs.custom.`);
244
+ const before = rec(document);
245
+ const records = rec(rec(rec(before.catalogs)[fromGroup])[kind]);
246
+ if (!Object.hasOwn(records, parsed.id)) throw new OPFMoveToCustomError("not-embedded", `moveToCustom: catalogs.${fromGroup}.${kind} does not embed ${JSON.stringify(parsed.id)}.`);
247
+ const fromId = parsed.id;
248
+ const record = rec(records[fromId]);
249
+ const sites = catalogReferenceSites(before);
250
+ const targets = sites.map((site) => resolveReference(before, site.kind, site.reference, { ...catalogs, ...site.group !== void 0 ? { group: site.group } : {} }));
251
+ const isMoved = (found) => found?.origin === "document" && found.kind === kind && found.group === fromGroup && found.id === fromId;
252
+ const inMoved = (site) => site.path.length >= 4 && site.path[0] === "catalogs" && site.path[1] === fromGroup && site.path[2] === kind && site.path[3] === fromId;
253
+ const after = structuredClone(before);
254
+ const groups = after.catalogs;
255
+ const custom = rec(groups.custom);
256
+ const existing = rec(custom[kind]);
257
+ const moved = structuredClone(record);
258
+ const ownSites = sites.map((site, index) => ({ site, found: targets[index] })).filter(({ site }) => inMoved(site));
259
+ if (options.id !== void 0 && (typeof options.id !== "string" || !CATALOG_GROUP_PATTERN.test(options.id))) throw new OPFMoveToCustomError("invalid-id", `moveToCustom: the new id ${JSON.stringify(options.id)} is not a lowercase kebab-case id.`);
260
+ const wanted = options.id ?? fromId;
261
+ let toId = wanted;
262
+ for (let n = 2; Object.hasOwn(existing, toId) && !sameRecord(existing[toId], moved); n++) toId = `${wanted}-${n}`;
263
+ const reused = Object.hasOwn(existing, toId);
264
+ const patch = [];
265
+ const fromRecords = groups[fromGroup][kind];
266
+ delete fromRecords[fromId];
267
+ patch.push({ op: "remove", path: pointerOf(["catalogs", fromGroup, kind, fromId]) });
268
+ if (Object.keys(fromRecords).length === 0) {
269
+ delete groups[fromGroup][kind];
270
+ patch.push({ op: "remove", path: pointerOf(["catalogs", fromGroup, kind]) });
271
+ }
272
+ if (!isRec(groups.custom)) {
273
+ groups.custom = {};
274
+ patch.push({ op: "add", path: pointerOf(["catalogs", "custom"]), value: {} });
275
+ }
276
+ if (!isRec(groups.custom[kind])) {
277
+ groups.custom[kind] = {};
278
+ patch.push({ op: "add", path: pointerOf(["catalogs", "custom", kind]), value: {} });
279
+ }
280
+ const referenceTo = (targetKind, group, id, holder) => {
281
+ const found = resolveReference(after, targetKind, id, { ...catalogs, ...holder !== void 0 ? { group: holder } : {} });
282
+ return found && found.group === group && found.id === id ? id : `${group}:${id}`;
283
+ };
284
+ if (!reused) {
285
+ groups.custom[kind][toId] = moved;
286
+ for (const { site, found } of ownSites) {
287
+ if (!found) continue;
288
+ const target = isMoved(found) ? { group: "custom", id: toId } : { group: found.group, id: found.id };
289
+ setAt(moved, site.path.slice(4), referenceTo(site.kind, target.group, target.id, "custom"));
290
+ }
291
+ patch.push({ op: "add", path: pointerOf(["catalogs", "custom", kind, toId]), value: structuredClone(moved) });
292
+ }
293
+ const references = [];
294
+ sites.forEach((site, index) => {
295
+ if (inMoved(site) || !isMoved(targets[index])) return;
296
+ const written = referenceTo(kind, "custom", toId, site.group);
297
+ if (written === site.reference) return;
298
+ setAt(after, site.path, written);
299
+ references.push(pointerOf(site.path));
300
+ patch.push({ op: "replace", path: pointerOf(site.path), value: written });
301
+ });
302
+ return {
303
+ document: after,
304
+ from: { kind, group: fromGroup, id: fromId, reference: fromGroup === "default" ? fromId : `${fromGroup}:${fromId}` },
305
+ to: { kind, group: "custom", id: toId, reference: toId },
306
+ references,
307
+ patch,
308
+ ...toId !== wanted ? { renamed: { from: wanted, to: toId } } : {}
309
+ };
310
+ }
311
+
21
312
  // src/stats.ts
22
313
  var DEFAULT_WORDS_PER_MINUTE = 130;
23
314
  var KIND_ORDER = ["text", "items", "bullets", "quote", "metric", "code", "timeline", "chart", "table", "image", "video"];
@@ -55,20 +346,12 @@ var embeddedBytes = (src) => {
55
346
  return Math.max(0, Math.floor(payload.length * 3 / 4) - padding);
56
347
  };
57
348
  var srcOf = (asset) => typeof asset === "string" ? asset : isRecord(asset) && typeof asset.src === "string" ? asset.src : void 0;
58
- var lookup = (deck, kind, id) => {
59
- const inline = deck.catalogs?.[kind]?.records;
60
- const found = (Array.isArray(inline) ? inline : []).find((record) => record?.id === id) ?? catalogs[kind].find((record) => record.id === id);
61
- return isRecord(found) ? found : void 0;
62
- };
63
- var themeRecord = (deck, value) => {
64
- if (typeof value === "string") return lookup(deck, "themes", value) ?? {};
65
- if (isRecord(value)) return { ...typeof value.id === "string" ? lookup(deck, "themes", value.id) : void 0, ...value };
66
- return {};
67
- };
68
- function slideSize(deck) {
349
+ function slideSize(deck, catalogs) {
69
350
  const design = isRecord(deck.design) ? deck.design : {};
70
- const theme2 = themeRecord(deck, design.theme ?? "minimal");
71
- const source = design.dimensions !== void 0 ? "design" : theme2.dimensions !== void 0 ? "theme" : "default";
351
+ const records = resolveDesignRecords(deck, void 0, catalogs);
352
+ const theme2 = records.theme;
353
+ const themed = typeof design.theme === "string" && !records.diagnostics.some((diagnostic) => diagnostic.kind === "themes");
354
+ const source = design.dimensions !== void 0 ? "design" : themed && theme2.dimensions !== void 0 ? "theme" : "default";
72
355
  const dimensions = design.dimensions ?? theme2.dimensions;
73
356
  let width = 40 / 3, height = 7.5;
74
357
  try {
@@ -110,6 +393,7 @@ function visitRuns(value, visit) {
110
393
  }
111
394
  }
112
395
  function stats(presentation2, options = {}) {
396
+ const catalogs = { catalogs: checkCatalogsOption(options.catalogs, "stats") };
113
397
  if (!isRecord(presentation2)) throw new TypeError("stats needs a presentation object.");
114
398
  const deck = presentation2;
115
399
  const wordsPerMinute = options.wordsPerMinute ?? DEFAULT_WORDS_PER_MINUTE;
@@ -178,8 +462,9 @@ function stats(presentation2, options = {}) {
178
462
  return srcOf(value) !== void 0;
179
463
  };
180
464
  const backgroundImage = (value) => {
181
- if (!isRecord(value) || value.type !== "image" || !isRecord(value.image)) return false;
182
- useAsset(value.image);
465
+ const picture = imageBackground(value);
466
+ if (!picture) return false;
467
+ useAsset(picture.src);
183
468
  return true;
184
469
  };
185
470
  const furnitureImages = (value) => {
@@ -193,7 +478,7 @@ function stats(presentation2, options = {}) {
193
478
  }
194
479
  };
195
480
  const designAssets = (value, scope) => {
196
- if (!isRecord(value)) return 0;
481
+ if (!isRecord(value)) return;
197
482
  logoImages(value.logo);
198
483
  if (watermarkOf(value.watermark)) {
199
484
  if (scope === "deck") images.watermarks.deck = true;
@@ -205,7 +490,6 @@ function stats(presentation2, options = {}) {
205
490
  }
206
491
  furnitureImages(value.header);
207
492
  furnitureImages(value.footer);
208
- return contentImage(value.slideImage);
209
493
  };
210
494
  const organizations = list(deck.organization).filter(isRecord).map((entry) => {
211
495
  const hasLogo = srcOf(entry.logo) !== void 0;
@@ -232,7 +516,7 @@ function stats(presentation2, options = {}) {
232
516
  filename: str(deck.filename),
233
517
  author: list(deck.author).filter((entry) => typeof entry === "string"),
234
518
  language: reference(deck.language),
235
- slideSize: slideSize(deck),
519
+ slideSize: slideSize(deck, catalogs),
236
520
  template: deck.template === true,
237
521
  tags: Array.isArray(deck.tags) ? deck.tags.filter((tag) => typeof tag === "string") : [],
238
522
  takeaways: list(deck.takeaway).filter((entry) => typeof entry === "string").length,
@@ -246,7 +530,7 @@ function stats(presentation2, options = {}) {
246
530
  const datasetRecords = isRecord(deck.datasets) ? Object.entries(deck.datasets).filter(([, value]) => isRecord(value)) : [];
247
531
  const datasetUse = /* @__PURE__ */ new Map();
248
532
  const payloadCounts = { text: 0, items: 0, bullets: 0, quote: 0, metric: 0, code: 0, timeline: 0, chart: 0, table: 0, image: 0, video: 0, blocks: 0, regions: 0, groups: 0, maxDepth: 0 };
249
- const layouts2 = /* @__PURE__ */ new Map(), chartTypes2 = /* @__PURE__ */ new Map(), extensions = /* @__PURE__ */ new Set();
533
+ const layouts = /* @__PURE__ */ new Map(), chartTypes = /* @__PURE__ */ new Map(), extensions = /* @__PURE__ */ new Set();
250
534
  const chartData = { inline: 0, dataset: 0, source: 0 };
251
535
  const tableItems = [];
252
536
  let tableRows = 0, tableColumns = 0, datasetBackedTables = 0, chartTotal = 0, captions = 0;
@@ -256,9 +540,7 @@ function stats(presentation2, options = {}) {
256
540
  const total = { citations: 0, footnotes: 0, links: 0, cited: /* @__PURE__ */ new Set(), families: /* @__PURE__ */ new Set() };
257
541
  const perSlide = [];
258
542
  const contentPerSlide = [];
259
- const schemeReferences = [];
260
- const deckTheme = themeRecord(deck, design.theme ?? "minimal");
261
- schemeReferences.push(design.fontScheme ?? deckTheme.fontScheme ?? DEFAULT_FONT_SCHEME);
543
+ const schemeDesigns = [void 0];
262
544
  slides.forEach((slide, index) => {
263
545
  const id = str(slide.id);
264
546
  const ref = { index, id };
@@ -334,7 +616,7 @@ function stats(presentation2, options = {}) {
334
616
  if (isRecord(node.chart)) {
335
617
  chartTotal++;
336
618
  slideCharts++;
337
- bump(chartTypes2, str(node.chart.type) ?? "unknown");
619
+ bump(chartTypes, str(node.chart.type) ?? "unknown");
338
620
  const data = node.chart.data;
339
621
  if (isRecord(data)) {
340
622
  if (typeof data.dataset === "string") {
@@ -397,7 +679,7 @@ function stats(presentation2, options = {}) {
397
679
  if (slide.beat !== void 0) withBeat++;
398
680
  if (slide.hidden === true) hidden.push(ref);
399
681
  const layout2 = str(slide.layout);
400
- if (layout2) bump(layouts2, layout2);
682
+ if (layout2) bump(layouts, layout2);
401
683
  else withoutLayout++;
402
684
  const section = str(slide.section);
403
685
  if (section !== null && section !== "") {
@@ -407,13 +689,12 @@ function stats(presentation2, options = {}) {
407
689
  } else unsectioned++;
408
690
  if (slideDesign) {
409
691
  withOwnDesign++;
410
- slideImages += designAssets(slideDesign, "slide");
692
+ designAssets(slideDesign, "slide");
411
693
  for (const kind of ["header", "footer"]) {
412
694
  if (slideDesign[kind] === false) headerOverrides[`${kind}Suppressed`]++;
413
695
  else if (isRecord(slideDesign[kind])) headerOverrides[kind]++;
414
696
  }
415
- if (slideDesign.fontScheme !== void 0) schemeReferences.push(slideDesign.fontScheme);
416
- else if (slideDesign.theme !== void 0 && design.fontScheme === void 0) schemeReferences.push(themeRecord(deck, slideDesign.theme).fontScheme ?? DEFAULT_FONT_SCHEME);
697
+ if (slideDesign.fontScheme !== void 0 || slideDesign.theme !== void 0 && design.fontScheme === void 0) schemeDesigns.push(index);
417
698
  }
418
699
  if (options.perSlide)
419
700
  perSlide.push({
@@ -459,24 +740,26 @@ function stats(presentation2, options = {}) {
459
740
  unused: variables.filter((variable) => variable.uses.length === 0).map((variable) => variable.id)
460
741
  };
461
742
  const families = new Set(total.families), schemeIds = /* @__PURE__ */ new Set(), unresolved = /* @__PURE__ */ new Set();
462
- const addScheme = (value) => {
463
- const resolved = resolveFontSchemeReference(value, (id2) => lookup(deck, "fontSchemes", id2));
464
- if (resolved.diagnostic) unresolved.add(resolved.diagnostic.id);
465
- const id = typeof value === "string" ? value : isRecord(value) && typeof value.id === "string" ? value.id : void 0;
466
- if (id !== void 0) schemeIds.add(id);
467
- const scheme = resolved.scheme;
743
+ const addScheme = (slideIndex) => {
744
+ const resolved = resolveDesignRecords(deck, slideIndex, catalogs);
745
+ for (const diagnostic of resolved.diagnostics) if (diagnostic.kind === "fontSchemes") unresolved.add(diagnostic.reference);
746
+ if (resolved.fontSchemeReference !== void 0) schemeIds.add(resolved.fontSchemeReference);
747
+ const scheme = resolved.fontScheme;
468
748
  const named = resolveFontFamilies(scheme);
469
749
  families.add(named.heading);
470
750
  families.add(named.body);
471
751
  if (scheme.code !== void 0) families.add(named.code);
472
752
  if (named.accent) families.add(named.accent);
473
753
  };
474
- for (const entry of schemeReferences) addScheme(entry);
475
- const catalogOverrides = {};
754
+ for (const entry of schemeDesigns) addScheme(entry);
755
+ const catalogGroups = {};
476
756
  if (isRecord(deck.catalogs))
477
- for (const kind of Object.keys(deck.catalogs).sort()) {
478
- const entry = deck.catalogs[kind];
479
- if (isRecord(entry)) catalogOverrides[kind] = { records: Array.isArray(entry.records) ? entry.records.length : 0, source: str(entry.source) };
757
+ for (const group of Object.keys(deck.catalogs).sort()) {
758
+ const entry = deck.catalogs[group];
759
+ if (!isRecord(entry)) continue;
760
+ const records = {};
761
+ for (const kind of catalogKinds) if (isRecord(entry[kind])) records[kind] = Object.keys(entry[kind]).length;
762
+ catalogGroups[group] = { source: str(entry.source), records };
480
763
  }
481
764
  const colorVariables = variables.filter((variable) => variable.kind === "color").map((variable) => ({ id: variable.id, value: typeof variable.value === "string" ? variable.value : null, uses: variable.uses.length }));
482
765
  const contentMean = slides.length ? decimals(contentWords / slides.length, 1) : 0;
@@ -491,7 +774,7 @@ function stats(presentation2, options = {}) {
491
774
  withBeat,
492
775
  sections,
493
776
  unsectioned,
494
- layouts: sortedCounts(layouts2),
777
+ layouts: sortedCounts(layouts),
495
778
  withoutLayout,
496
779
  withOwnDesign
497
780
  },
@@ -505,7 +788,7 @@ function stats(presentation2, options = {}) {
505
788
  notes: { withNotes, withoutNotes },
506
789
  speakingTime: { basis: "estimate", wordsPerMinute, notesWords, minutes: decimals(notesWords / wordsPerMinute, 1), declaredMinutes: deckFacts.declaredMinutes },
507
790
  images,
508
- charts: { total: chartTotal, byType: sortedCounts(chartTypes2), data: chartData },
791
+ charts: { total: chartTotal, byType: sortedCounts(chartTypes), data: chartData },
509
792
  tables: { total: tableItems.length, datasetBacked: datasetBackedTables, rows: tableRows, columns: tableColumns, items: tableItems },
510
793
  datasets: { count: datasetItems.length, withSource: datasetItems.filter((item) => item.source !== null).length, items: datasetItems },
511
794
  citations: { references: references.length, cited, citations: total.citations, footnotes: total.footnotes, captions, links: total.links },
@@ -519,208 +802,10 @@ function stats(presentation2, options = {}) {
519
802
  fonts: { families: sorted(families), schemeIds: sorted(schemeIds), unresolvedSchemeIds: sorted(unresolved), runOverrides: sorted(total.families) },
520
803
  colors: { variables: colorVariables },
521
804
  extensions: sorted(extensions),
522
- catalogOverrides
805
+ catalogs: catalogGroups
523
806
  };
524
807
  if (options.perSlide) result.perSlide = perSlide;
525
808
  return result;
526
809
  }
527
810
 
528
- // src/bundle.ts
529
- function reportKey(kind, id) {
530
- return `${kind}:${id}`;
531
- }
532
- function referenceId(value) {
533
- if (typeof value === "string" && bareIdPattern.test(value)) return value;
534
- if (isRecord(value) && typeof value.id === "string" && bareIdPattern.test(value.id)) return value.id;
535
- return void 0;
536
- }
537
- function addReference(collector, kind, value, reportable) {
538
- const id = referenceId(value);
539
- if (!id) return;
540
- if (reportable) collector.reportable.add(reportKey(kind, id));
541
- let ids = collector.referenced.get(kind);
542
- if (!ids) {
543
- ids = /* @__PURE__ */ new Set();
544
- collector.referenced.set(kind, ids);
545
- }
546
- if (ids.has(id)) return;
547
- ids.add(id);
548
- collector.queue.push({ kind, id });
549
- }
550
- function collectDesignReferences(collector, design) {
551
- if (!isRecord(design)) return;
552
- addReference(collector, "themes", design.theme, true);
553
- addReference(collector, "colorSchemes", design.colorScheme, true);
554
- addReference(collector, "fontSchemes", design.fontScheme, true);
555
- if (isRecord(design.theme)) {
556
- addReference(collector, "colorSchemes", design.theme.colorScheme, true);
557
- addReference(collector, "fontSchemes", design.theme.fontScheme, true);
558
- }
559
- }
560
- function collectChartReference(collector, payload) {
561
- if (!isRecord(payload.chart)) return;
562
- addReference(collector, "chartTypes", payload.chart.type, typeof payload.chart.type === "string");
563
- }
564
- function collectSocialReferences(collector, holder) {
565
- const entries = Array.isArray(holder) ? holder : [holder];
566
- for (const entry of entries) {
567
- if (!isRecord(entry) || !isRecord(entry.socials)) continue;
568
- for (const key of Object.keys(entry.socials)) addReference(collector, "socialPlatforms", key, false);
569
- }
570
- }
571
- function collectBeatReferences(collector, narrative2) {
572
- if (!isRecord(narrative2) || !Array.isArray(narrative2.beats)) return;
573
- for (const beat of narrative2.beats) {
574
- if (isRecord(beat)) addReference(collector, "layouts", beat.layout, false);
575
- }
576
- }
577
- function collectLanguageReferences(collector, language2) {
578
- addReference(collector, "languages", language2, false);
579
- if (!isRecord(language2)) return;
580
- addReference(collector, "fontSchemes", language2.fontScheme, false);
581
- addReference(collector, "fontSchemes", language2.googleFontScheme, false);
582
- }
583
- function collectDocumentReferences(collector, document) {
584
- addReference(collector, "narratives", document.narrative, typeof document.narrative === "string");
585
- addReference(collector, "tones", document.tone, false);
586
- addReference(collector, "purposes", document.purpose, false);
587
- collectLanguageReferences(collector, document.language);
588
- if (Array.isArray(document.audience)) {
589
- for (const entry of document.audience) addReference(collector, "audiences", entry, true);
590
- } else if (isRecord(document.audience)) {
591
- addReference(collector, "audiences", document.audience, true);
592
- } else {
593
- addReference(collector, "audiences", document.audience, typeof document.audience === "string");
594
- }
595
- collectDesignReferences(collector, document.design);
596
- collectSocialReferences(collector, document.organization);
597
- collectSocialReferences(collector, document.speaker);
598
- if (!Array.isArray(document.slides)) return;
599
- for (const slide of document.slides) {
600
- if (!isRecord(slide)) continue;
601
- addReference(collector, "layouts", slide.layout, false);
602
- collectDesignReferences(collector, slide.design);
603
- collectChartReference(collector, slide);
604
- visitContentPayloads(slide, "", (payload) => {
605
- collectChartReference(collector, payload);
606
- });
607
- }
608
- }
609
- function collectRecordReferences(collector, kind, record) {
610
- if (kind === "themes") {
611
- addReference(collector, "colorSchemes", record.colorScheme, false);
612
- addReference(collector, "fontSchemes", record.fontScheme, false);
613
- } else if (kind === "narratives") {
614
- collectBeatReferences(collector, record);
615
- } else if (kind === "languages") {
616
- addReference(collector, "fontSchemes", record.fontScheme, false);
617
- addReference(collector, "fontSchemes", record.googleFontScheme, false);
618
- }
619
- }
620
- var bundledIndex;
621
- function bundledCatalogIndex() {
622
- if (bundledIndex) return bundledIndex;
623
- const index = /* @__PURE__ */ new Map();
624
- for (const entry of catalogEntries) {
625
- const records = /* @__PURE__ */ new Map();
626
- for (const record of entry.records) {
627
- if (isRecord(record) && typeof record.id === "string") records.set(record.id, record);
628
- }
629
- index.set(entry.kind, records);
630
- }
631
- bundledIndex = index;
632
- return index;
633
- }
634
- function bundledRecord(kind, id) {
635
- const record = bundledCatalogIndex().get(kind)?.get(id);
636
- if (!record) return void 0;
637
- const clone = structuredClone(record);
638
- delete clone.$schema;
639
- return clone;
640
- }
641
- function readKindState(catalogsField, kind) {
642
- const entry = catalogsField[kind];
643
- const inline = /* @__PURE__ */ new Map();
644
- if (!isRecord(entry)) return { customSource: false, inline };
645
- if (Array.isArray(entry.records)) {
646
- for (const record of entry.records) {
647
- if (isRecord(record) && typeof record.id === "string") inline.set(record.id, record);
648
- }
649
- }
650
- const customSource = typeof entry.source === "string" || Array.isArray(entry.source) && entry.source.length > 0;
651
- return { customSource, inline };
652
- }
653
- function kindState(states, catalogsField, kind) {
654
- const cached = states.get(kind);
655
- if (cached) return cached;
656
- const state = readKindState(catalogsField, kind);
657
- states.set(kind, state);
658
- return state;
659
- }
660
- function pushReportId(map, kind, id) {
661
- const list2 = map[kind];
662
- if (list2) list2.push(id);
663
- else map[kind] = [id];
664
- }
665
- function bundle(value) {
666
- const report = { added: {}, alreadyInline: {}, keptSources: [], unresolved: {} };
667
- if (!isRecord(value)) {
668
- return { presentation: value, report };
669
- }
670
- const presentation2 = structuredClone(value);
671
- if (presentation2.catalogs !== void 0 && !isRecord(presentation2.catalogs)) {
672
- return { presentation: presentation2, report };
673
- }
674
- const catalogsField = isRecord(presentation2.catalogs) ? presentation2.catalogs : {};
675
- const collector = { queue: [], referenced: /* @__PURE__ */ new Map(), reportable: /* @__PURE__ */ new Set() };
676
- collectDocumentReferences(collector, presentation2);
677
- const states = /* @__PURE__ */ new Map();
678
- const resolved = /* @__PURE__ */ new Map();
679
- for (let index = 0; index < collector.queue.length; index += 1) {
680
- const pending = collector.queue[index];
681
- if (!pending) continue;
682
- const { kind, id } = pending;
683
- const state = kindState(states, catalogsField, kind);
684
- const inlineRecord = state.inline.get(id);
685
- if (inlineRecord) {
686
- collectRecordReferences(collector, kind, inlineRecord);
687
- continue;
688
- }
689
- if (state.customSource) continue;
690
- const record = bundledRecord(kind, id);
691
- if (!record) continue;
692
- let kindRecords = resolved.get(kind);
693
- if (!kindRecords) {
694
- kindRecords = /* @__PURE__ */ new Map();
695
- resolved.set(kind, kindRecords);
696
- }
697
- kindRecords.set(id, record);
698
- collectRecordReferences(collector, kind, record);
699
- }
700
- for (const [kind, ids] of collector.referenced) {
701
- const state = kindState(states, catalogsField, kind);
702
- if (state.customSource) report.keptSources.push(kind);
703
- const kindResolved = resolved.get(kind);
704
- const addedIds = [];
705
- for (const id of [...ids].sort()) {
706
- if (state.inline.has(id)) pushReportId(report.alreadyInline, kind, id);
707
- else if (kindResolved?.has(id)) addedIds.push(id);
708
- else if (!state.customSource && collector.reportable.has(reportKey(kind, id))) {
709
- pushReportId(report.unresolved, kind, id);
710
- }
711
- }
712
- if (!addedIds.length) continue;
713
- if (!isRecord(presentation2.catalogs)) presentation2.catalogs = {};
714
- const catalogs2 = presentation2.catalogs;
715
- if (!isRecord(catalogs2[kind])) catalogs2[kind] = {};
716
- const entry = catalogs2[kind];
717
- if (!Array.isArray(entry.records)) entry.records = [];
718
- const records = entry.records;
719
- for (const id of addedIds) records.push(kindResolved?.get(id));
720
- report.added[kind] = addedIds;
721
- }
722
- report.keptSources.sort();
723
- return { presentation: presentation2, report };
724
- }
725
-
726
- export { bundle, stats };
811
+ export { OPFMoveToCustomError, copySlides, embed, moveToCustom, sameRecord, stats, updateFromCatalog };