@openpresentation/opf 0.13.0 → 0.14.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 (417) hide show
  1. package/README.md +28 -23
  2. package/dist/{catalogs-ywCamd8C.d.ts → catalogs-D-yyQWCQ.d.ts} +86 -208
  3. package/dist/catalogs.d.ts +2 -2
  4. package/dist/catalogs.js +1 -1
  5. package/dist/{chart-data-Cdr6rRVV.d.ts → chart-data-B_3z9VTb.d.ts} +16 -5
  6. package/dist/chunk-4LDGKLUC.js +192 -0
  7. package/dist/{chunk-II5EYKZU.js → chunk-4VJDTF55.js} +2 -92
  8. package/dist/chunk-5ZU6JAPP.js +83 -0
  9. package/dist/{chunk-MPM7NRG7.js → chunk-6OXY2CP3.js} +1716 -744
  10. package/dist/{chunk-IS2CPNVJ.js → chunk-BFLVSVA7.js} +26 -26
  11. package/dist/chunk-CSQHPVGL.js +94 -0
  12. package/dist/{chunk-GJKJL4YY.js → chunk-D3TY4TT6.js} +34 -412
  13. package/dist/chunk-JDJBDYSR.js +4167 -0
  14. package/dist/{chunk-7QBCWNWL.js → chunk-LS2FMPI5.js} +1086 -1092
  15. package/dist/{chunk-ATGDDJPX.js → chunk-Q2TCMN56.js} +3 -3
  16. package/dist/chunk-UPQQD7MA.js +1840 -0
  17. package/dist/{chunk-RAYB46AB.js → chunk-XIZUK2XM.js} +32 -30
  18. package/dist/{chunk-E34DJ5LL.js → chunk-XOZ4KMSR.js} +2427 -10820
  19. package/dist/chunk-Z65B2B77.js +601 -0
  20. package/dist/{composition-D7we69Tr.d.ts → composition-_WEwBe2a.d.ts} +738 -27
  21. package/dist/composition.d.ts +2 -2
  22. package/dist/composition.js +2 -2
  23. package/dist/convert.d.ts +9 -7
  24. package/dist/convert.js +33 -19
  25. package/dist/data.d.ts +4 -4
  26. package/dist/data.js +3 -3
  27. package/dist/diff.d.ts +4 -4
  28. package/dist/diff.js +6 -604
  29. package/dist/docs.js +54 -42
  30. package/dist/examples.d.ts +1 -1
  31. package/dist/examples.js +1366 -2908
  32. package/dist/finding-C_por275.d.ts +212 -0
  33. package/dist/format.d.ts +4 -4
  34. package/dist/format.js +2 -83
  35. package/dist/index.d.ts +318 -284
  36. package/dist/index.js +530 -943
  37. package/dist/markdown.d.ts +28 -27
  38. package/dist/markdown.js +8 -1940
  39. package/dist/pagination-BZpXLvFL.d.ts +119 -0
  40. package/dist/pagination.d.ts +5 -61
  41. package/dist/pagination.js +5 -5
  42. package/dist/patch.d.ts +12 -23
  43. package/dist/patch.js +5 -5
  44. package/dist/{presentation-mG-IYErQ.d.ts → presentation-C5eHkevA.d.ts} +350 -506
  45. package/dist/repo-readme.js +1 -1
  46. package/dist/{schemas-BbPonsTz.d.ts → schemas-DDpqAgyS.d.ts} +31 -17
  47. package/dist/schemas.d.ts +1 -1
  48. package/dist/schemas.js +1 -1
  49. package/dist/spec/README.md +10 -5
  50. package/dist/spec/catalogs/audiences/index.json +2 -50
  51. package/dist/spec/catalogs/chart-types/100pct-stacked-area.json +21 -0
  52. package/dist/spec/catalogs/chart-types/100pct-stacked-bar.json +22 -0
  53. package/dist/spec/catalogs/chart-types/100pct-stacked-column.json +22 -0
  54. package/dist/spec/catalogs/chart-types/area.json +2 -60
  55. package/dist/spec/catalogs/chart-types/bar.json +2 -48
  56. package/dist/spec/catalogs/chart-types/box-and-whisker.json +2 -132
  57. package/dist/spec/catalogs/chart-types/column.json +2 -52
  58. package/dist/spec/catalogs/chart-types/combo.json +37 -0
  59. package/dist/spec/catalogs/chart-types/doughnut.json +2 -40
  60. package/dist/spec/catalogs/chart-types/filled-radar.json +2 -52
  61. package/dist/spec/catalogs/chart-types/funnel.json +2 -46
  62. package/dist/spec/catalogs/chart-types/histogram.json +2 -149
  63. package/dist/spec/catalogs/chart-types/index.json +50 -520
  64. package/dist/spec/catalogs/chart-types/line-with-markers.json +2 -60
  65. package/dist/spec/catalogs/chart-types/line.json +2 -60
  66. package/dist/spec/catalogs/chart-types/pareto.json +2 -50
  67. package/dist/spec/catalogs/chart-types/pie.json +2 -40
  68. package/dist/spec/catalogs/chart-types/radar-with-markers.json +2 -52
  69. package/dist/spec/catalogs/chart-types/radar.json +2 -52
  70. package/dist/spec/catalogs/chart-types/scatter.json +2 -73
  71. package/dist/spec/catalogs/chart-types/stacked-area.json +21 -0
  72. package/dist/spec/catalogs/chart-types/stacked-bar.json +22 -0
  73. package/dist/spec/catalogs/chart-types/stacked-column.json +22 -0
  74. package/dist/spec/catalogs/chart-types/stacked-line-with-markers.json +22 -0
  75. package/dist/spec/catalogs/chart-types/stacked-line.json +21 -0
  76. package/dist/spec/catalogs/chart-types/treemap.json +2 -48
  77. package/dist/spec/catalogs/chart-types/waterfall.json +2 -52
  78. package/dist/spec/catalogs/chart-types/world.json +2 -64
  79. package/dist/spec/catalogs/font-schemes/angsana-new.json +2 -2
  80. package/dist/spec/catalogs/font-schemes/aparajita.json +3 -3
  81. package/dist/spec/catalogs/font-schemes/aptos.json +1 -1
  82. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +2 -2
  83. package/dist/spec/catalogs/font-schemes/arial.json +1 -1
  84. package/dist/spec/catalogs/font-schemes/batang.json +2 -2
  85. package/dist/spec/catalogs/font-schemes/bookman.json +1 -1
  86. package/dist/spec/catalogs/font-schemes/calibri.json +1 -1
  87. package/dist/spec/catalogs/font-schemes/century-schoolbook.json +1 -1
  88. package/dist/spec/catalogs/font-schemes/consolas.json +2 -4
  89. package/dist/spec/catalogs/font-schemes/constantia.json +1 -1
  90. package/dist/spec/catalogs/font-schemes/courier-new.json +2 -4
  91. package/dist/spec/catalogs/font-schemes/daunpenh.json +2 -2
  92. package/dist/spec/catalogs/font-schemes/david.json +2 -2
  93. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +2 -2
  94. package/dist/spec/catalogs/font-schemes/fangsong.json +2 -2
  95. package/dist/spec/catalogs/font-schemes/garamond.json +1 -1
  96. package/dist/spec/catalogs/font-schemes/gautami.json +2 -2
  97. package/dist/spec/catalogs/font-schemes/georgia.json +1 -1
  98. package/dist/spec/catalogs/font-schemes/gisha.json +3 -3
  99. package/dist/spec/catalogs/font-schemes/grandview.json +1 -1
  100. package/dist/spec/catalogs/font-schemes/gungsuh.json +2 -2
  101. package/dist/spec/catalogs/font-schemes/impact.json +1 -1
  102. package/dist/spec/catalogs/font-schemes/index.json +1 -1
  103. package/dist/spec/catalogs/font-schemes/kalinga.json +2 -2
  104. package/dist/spec/catalogs/font-schemes/kartika.json +2 -2
  105. package/dist/spec/catalogs/font-schemes/khmer-ui.json +2 -2
  106. package/dist/spec/catalogs/font-schemes/latha.json +2 -2
  107. package/dist/spec/catalogs/font-schemes/lucida-sans.json +1 -1
  108. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +2 -2
  109. package/dist/spec/catalogs/font-schemes/mangal.json +4 -5
  110. package/dist/spec/catalogs/font-schemes/meiryo.json +2 -2
  111. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +2 -2
  112. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +5 -5
  113. package/dist/spec/catalogs/font-schemes/mingliu.json +2 -2
  114. package/dist/spec/catalogs/font-schemes/miriam.json +2 -2
  115. package/dist/spec/catalogs/font-schemes/montserrat.json +1 -1
  116. package/dist/spec/catalogs/font-schemes/ms-mincho.json +2 -2
  117. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +2 -2
  118. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +2 -2
  119. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +3 -3
  120. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +4 -4
  121. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +2 -2
  122. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +3 -3
  123. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +3 -3
  124. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +2 -2
  125. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +2 -2
  126. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +2 -2
  127. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +2 -2
  128. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +2 -2
  129. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +2 -2
  130. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +2 -2
  131. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +2 -2
  132. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +2 -2
  133. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +2 -2
  134. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +2 -2
  135. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +2 -2
  136. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +5 -5
  137. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +2 -2
  138. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +2 -2
  139. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +2 -2
  140. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +2 -2
  141. package/dist/spec/catalogs/font-schemes/noto-sans.json +5 -5
  142. package/dist/spec/catalogs/font-schemes/nyala.json +2 -2
  143. package/dist/spec/catalogs/font-schemes/open-sans.json +1 -1
  144. package/dist/spec/catalogs/font-schemes/pmingliu.json +2 -2
  145. package/dist/spec/catalogs/font-schemes/poppins.json +1 -1
  146. package/dist/spec/catalogs/font-schemes/pt-serif.json +1 -1
  147. package/dist/spec/catalogs/font-schemes/raavi.json +2 -2
  148. package/dist/spec/catalogs/font-schemes/raleway.json +1 -1
  149. package/dist/spec/catalogs/font-schemes/roboto.json +1 -1
  150. package/dist/spec/catalogs/font-schemes/rockwell.json +1 -1
  151. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +4 -4
  152. package/dist/spec/catalogs/font-schemes/seaford.json +1 -1
  153. package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +1 -1
  154. package/dist/spec/catalogs/font-schemes/segoe-ui.json +1 -1
  155. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +3 -3
  156. package/dist/spec/catalogs/font-schemes/shruti.json +2 -2
  157. package/dist/spec/catalogs/font-schemes/simsun.json +2 -2
  158. package/dist/spec/catalogs/font-schemes/skeena.json +1 -1
  159. package/dist/spec/catalogs/font-schemes/sylfaen.json +3 -3
  160. package/dist/spec/catalogs/font-schemes/tahoma.json +1 -1
  161. package/dist/spec/catalogs/font-schemes/tenorite.json +1 -1
  162. package/dist/spec/catalogs/font-schemes/times-new-roman.json +1 -1
  163. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +4 -4
  164. package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +1 -1
  165. package/dist/spec/catalogs/font-schemes/tunga.json +2 -2
  166. package/dist/spec/catalogs/font-schemes/verdana.json +1 -1
  167. package/dist/spec/catalogs/font-schemes/vrinda.json +2 -2
  168. package/dist/spec/catalogs/font-schemes/yu-gothic.json +2 -2
  169. package/dist/spec/catalogs/layouts/action-plan.json +9 -15
  170. package/dist/spec/catalogs/layouts/agenda.json +8 -15
  171. package/dist/spec/catalogs/layouts/appendix-index.json +7 -15
  172. package/dist/spec/catalogs/layouts/architecture-stack.json +9 -15
  173. package/dist/spec/catalogs/layouts/assumptions-dependencies.json +9 -15
  174. package/dist/spec/catalogs/layouts/before-after.json +9 -15
  175. package/dist/spec/catalogs/layouts/benchmark-target-table.json +9 -15
  176. package/dist/spec/catalogs/layouts/blank.json +11 -1
  177. package/dist/spec/catalogs/layouts/bullet-list.json +9 -15
  178. package/dist/spec/catalogs/layouts/business-model-canvas.json +9 -15
  179. package/dist/spec/catalogs/layouts/capability-map.json +14 -16
  180. package/dist/spec/catalogs/layouts/case-study.json +9 -15
  181. package/dist/spec/catalogs/layouts/chapter-recap.json +8 -15
  182. package/dist/spec/catalogs/layouts/chart-1x.json +15 -0
  183. package/dist/spec/catalogs/layouts/chart-2x.json +15 -0
  184. package/dist/spec/catalogs/layouts/chart-3x.json +15 -0
  185. package/dist/spec/catalogs/layouts/circular-lifecycle.json +9 -15
  186. package/dist/spec/catalogs/layouts/code-1x.json +10 -0
  187. package/dist/spec/catalogs/layouts/comparison.json +9 -15
  188. package/dist/spec/catalogs/layouts/competitive-landscape.json +14 -16
  189. package/dist/spec/catalogs/layouts/customer-journey.json +14 -16
  190. package/dist/spec/catalogs/layouts/customer-logos.json +9 -15
  191. package/dist/spec/catalogs/layouts/dashboard.json +9 -15
  192. package/dist/spec/catalogs/layouts/data-visualization.json +9 -15
  193. package/dist/spec/catalogs/layouts/decision-tree.json +14 -16
  194. package/dist/spec/catalogs/layouts/detailed-data-table.json +9 -15
  195. package/dist/spec/catalogs/layouts/ecosystem-map.json +14 -16
  196. package/dist/spec/catalogs/layouts/executive-decision.json +9 -15
  197. package/dist/spec/catalogs/layouts/executive-summary.json +9 -15
  198. package/dist/spec/catalogs/layouts/extract/canonical.json +8 -8
  199. package/dist/spec/catalogs/layouts/faq.json +9 -15
  200. package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +9 -15
  201. package/dist/spec/catalogs/layouts/forecast-scenario.json +9 -15
  202. package/dist/spec/catalogs/layouts/funnel-pyramid.json +9 -15
  203. package/dist/spec/catalogs/layouts/gantt-project-plan.json +9 -15
  204. package/dist/spec/catalogs/layouts/geographic-map.json +13 -15
  205. package/dist/spec/catalogs/layouts/heatmap-cohort.json +9 -15
  206. package/dist/spec/catalogs/layouts/hub-and-spoke.json +9 -15
  207. package/dist/spec/catalogs/layouts/icon-grid.json +14 -16
  208. package/dist/spec/catalogs/layouts/image-1x.json +11 -1
  209. package/dist/spec/catalogs/layouts/image-2x.json +12 -2
  210. package/dist/spec/catalogs/layouts/image-3x.json +13 -3
  211. package/dist/spec/catalogs/layouts/image-bleed.json +12 -2
  212. package/dist/spec/catalogs/layouts/image-focus.json +14 -16
  213. package/dist/spec/catalogs/layouts/index.json +1 -1
  214. package/dist/spec/catalogs/layouts/key-takeaway.json +8 -15
  215. package/dist/spec/catalogs/layouts/kpi-scorecard.json +9 -15
  216. package/dist/spec/catalogs/layouts/list-1x.json +17 -1
  217. package/dist/spec/catalogs/layouts/list-2x.json +16 -0
  218. package/dist/spec/catalogs/layouts/list-3x.json +16 -0
  219. package/dist/spec/catalogs/layouts/list-4x.json +16 -0
  220. package/dist/spec/catalogs/layouts/list-5x.json +16 -0
  221. package/dist/spec/catalogs/layouts/list-6x.json +16 -0
  222. package/dist/spec/catalogs/layouts/logic-tree.json +9 -15
  223. package/dist/spec/catalogs/layouts/market-size.json +9 -15
  224. package/dist/spec/catalogs/layouts/matrix-quadrant.json +9 -15
  225. package/dist/spec/catalogs/layouts/media-1x.json +11 -1
  226. package/dist/spec/catalogs/layouts/network-dependency-map.json +13 -15
  227. package/dist/spec/catalogs/layouts/number-1x.json +16 -1
  228. package/dist/spec/catalogs/layouts/number-2x.json +15 -0
  229. package/dist/spec/catalogs/layouts/number-3x.json +15 -0
  230. package/dist/spec/catalogs/layouts/number-4x.json +15 -0
  231. package/dist/spec/catalogs/layouts/number-5x.json +15 -0
  232. package/dist/spec/catalogs/layouts/number-6x.json +15 -0
  233. package/dist/spec/catalogs/layouts/one-column-explainer.json +9 -15
  234. package/dist/spec/catalogs/layouts/org-chart.json +9 -15
  235. package/dist/spec/catalogs/layouts/persona-grid.json +14 -16
  236. package/dist/spec/catalogs/layouts/photo-grid.json +17 -19
  237. package/dist/spec/catalogs/layouts/pricing-table.json +9 -15
  238. package/dist/spec/catalogs/layouts/process-flow.json +9 -15
  239. package/dist/spec/catalogs/layouts/product-feature.json +14 -16
  240. package/dist/spec/catalogs/layouts/pros-cons.json +9 -15
  241. package/dist/spec/catalogs/layouts/qa-discussion.json +7 -15
  242. package/dist/spec/catalogs/layouts/quote-1x.json +11 -1
  243. package/dist/spec/catalogs/layouts/quote-highlight.json +9 -15
  244. package/dist/spec/catalogs/layouts/raci-matrix.json +9 -15
  245. package/dist/spec/catalogs/layouts/risk-heatmap.json +9 -15
  246. package/dist/spec/catalogs/layouts/roadmap.json +9 -15
  247. package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +14 -16
  248. package/dist/spec/catalogs/layouts/section-divider.json +8 -15
  249. package/dist/spec/catalogs/layouts/single-message-statement.json +8 -15
  250. package/dist/spec/catalogs/layouts/stats-metrics.json +9 -15
  251. package/dist/spec/catalogs/layouts/status-rag.json +9 -15
  252. package/dist/spec/catalogs/layouts/swimlane-process.json +14 -16
  253. package/dist/spec/catalogs/layouts/swot-analysis.json +9 -15
  254. package/dist/spec/catalogs/layouts/table-1x.json +10 -0
  255. package/dist/spec/catalogs/layouts/team-bio.json +14 -16
  256. package/dist/spec/catalogs/layouts/testimonial-grid.json +9 -15
  257. package/dist/spec/catalogs/layouts/text-1x.json +11 -1
  258. package/dist/spec/catalogs/layouts/text-2x.json +10 -0
  259. package/dist/spec/catalogs/layouts/text-3x.json +10 -0
  260. package/dist/spec/catalogs/layouts/thank-you-cta.json +8 -15
  261. package/dist/spec/catalogs/layouts/three-column.json +9 -15
  262. package/dist/spec/catalogs/layouts/timeline-1x.json +11 -1
  263. package/dist/spec/catalogs/layouts/timeline.json +9 -15
  264. package/dist/spec/catalogs/layouts/title-slide.json +8 -15
  265. package/dist/spec/catalogs/layouts/title-subtitle.json +11 -1
  266. package/dist/spec/catalogs/layouts/title.json +11 -1
  267. package/dist/spec/catalogs/layouts/two-column.json +9 -15
  268. package/dist/spec/catalogs/layouts/venn-overlap.json +9 -15
  269. package/dist/spec/catalogs/layouts/waterfall-bridge.json +9 -15
  270. package/dist/spec/catalogs/layouts/wheel-radial.json +9 -15
  271. package/dist/spec/catalogs/manifest.json +8 -8
  272. package/dist/spec/catalogs/narratives/board-meeting.json +45 -45
  273. package/dist/spec/catalogs/narratives/business-narrative.json +19 -19
  274. package/dist/spec/catalogs/narratives/business-review.json +27 -27
  275. package/dist/spec/catalogs/narratives/capacity-planning.json +19 -19
  276. package/dist/spec/catalogs/narratives/challenge-resolution.json +17 -17
  277. package/dist/spec/catalogs/narratives/change-story.json +13 -13
  278. package/dist/spec/catalogs/narratives/classic-story.json +17 -17
  279. package/dist/spec/catalogs/narratives/company-intro.json +21 -21
  280. package/dist/spec/catalogs/narratives/conference-talk.json +4 -4
  281. package/dist/spec/catalogs/narratives/data-story.json +13 -14
  282. package/dist/spec/catalogs/narratives/early-startup-pitch.json +27 -27
  283. package/dist/spec/catalogs/narratives/educate.json +21 -21
  284. package/dist/spec/catalogs/narratives/employee-review.json +19 -19
  285. package/dist/spec/catalogs/narratives/failure-analysis.json +23 -23
  286. package/dist/spec/catalogs/narratives/focus.json +27 -27
  287. package/dist/spec/catalogs/narratives/golden-circle.json +4 -4
  288. package/dist/spec/catalogs/narratives/heros-journey.json +13 -13
  289. package/dist/spec/catalogs/narratives/index.json +145 -145
  290. package/dist/spec/catalogs/narratives/innovation.json +21 -21
  291. package/dist/spec/catalogs/narratives/justice.json +25 -25
  292. package/dist/spec/catalogs/narratives/marketing-strategy.json +25 -25
  293. package/dist/spec/catalogs/narratives/performance-improvement-plan.json +19 -19
  294. package/dist/spec/catalogs/narratives/performance-review.json +25 -25
  295. package/dist/spec/catalogs/narratives/persuade.json +17 -17
  296. package/dist/spec/catalogs/narratives/persuasive-sales.json +19 -19
  297. package/dist/spec/catalogs/narratives/pitch-deck.json +6 -6
  298. package/dist/spec/catalogs/narratives/problem-solution.json +5 -5
  299. package/dist/spec/catalogs/narratives/product-launch.json +23 -23
  300. package/dist/spec/catalogs/narratives/project-proposal.json +23 -23
  301. package/dist/spec/catalogs/narratives/pyramid-principle.json +9 -9
  302. package/dist/spec/catalogs/narratives/qbr.json +8 -8
  303. package/dist/spec/catalogs/narratives/rags-to-riches.json +17 -17
  304. package/dist/spec/catalogs/narratives/reveal.json +19 -19
  305. package/dist/spec/catalogs/narratives/scqa.json +4 -4
  306. package/dist/spec/catalogs/narratives/situation-complication-resolution.json +11 -11
  307. package/dist/spec/catalogs/narratives/sparkline.json +11 -11
  308. package/dist/spec/catalogs/narratives/star-method.json +11 -11
  309. package/dist/spec/catalogs/narratives/status-update.json +15 -15
  310. package/dist/spec/catalogs/narratives/strategic-advisory.json +17 -17
  311. package/dist/spec/catalogs/narratives/strategic-narrative.json +4 -4
  312. package/dist/spec/catalogs/narratives/survey-analysis.json +23 -23
  313. package/dist/spec/catalogs/narratives/survival-story.json +23 -23
  314. package/dist/spec/catalogs/narratives/transformation-arc.json +4 -4
  315. package/dist/spec/catalogs/narratives/trend-analysis.json +17 -17
  316. package/dist/spec/catalogs/narratives/underdog-victory.json +19 -19
  317. package/dist/spec/catalogs/narratives/venture-pitch.json +27 -27
  318. package/dist/spec/catalogs/narratives/vision-roadmap.json +13 -13
  319. package/dist/spec/catalogs/narratives/weekly-progress.json +23 -23
  320. package/dist/spec/catalogs/narratives/what-so-what-now-what.json +9 -9
  321. package/dist/spec/openapi.yaml +2 -5
  322. package/dist/spec/reference/engine-defaults.json +2 -2
  323. package/dist/spec/schemas/audience.schema.json +1 -1
  324. package/dist/spec/schemas/catalog-index.schema.json +2 -2
  325. package/dist/spec/schemas/chart-type.schema.json +19 -290
  326. package/dist/spec/schemas/color-scheme.schema.json +20 -12
  327. package/dist/spec/schemas/finding.schema.json +191 -0
  328. package/dist/spec/schemas/font-scheme.schema.json +19 -46
  329. package/dist/spec/schemas/layout.schema.json +100 -159
  330. package/dist/spec/schemas/narrative.schema.json +17 -25
  331. package/dist/spec/schemas/opf.schema.json +286 -340
  332. package/dist/spec/schemas/social-platform.schema.json +1 -26
  333. package/dist/spec/schemas/theme.schema.json +4 -1
  334. package/dist/spec-files.d.ts +1 -1
  335. package/dist/spec-files.js +1 -1
  336. package/dist/symbol-font-encodings.js +18448 -1
  337. package/dist/types.d.ts +4 -4
  338. package/dist/validation-types-zh03LeZy.d.ts +276 -0
  339. package/dist/validator.d.ts +60 -4
  340. package/dist/validator.js +4 -4
  341. package/dist/yaml.d.ts +87 -0
  342. package/dist/yaml.js +321 -0
  343. package/package.json +5 -9
  344. package/dist/audit.d.ts +0 -35
  345. package/dist/audit.js +0 -7
  346. package/dist/chunk-7N4VMAT4.js +0 -1694
  347. package/dist/chunk-FYLJVF7X.js +0 -18448
  348. package/dist/chunk-INU7ZNSB.js +0 -670
  349. package/dist/chunk-IYCJUKWD.js +0 -951
  350. package/dist/lint-B7azdiuE.d.ts +0 -197
  351. package/dist/lint.d.ts +0 -7
  352. package/dist/lint.js +0 -6
  353. package/dist/spec/catalogs/audiences/customers.json +0 -27
  354. package/dist/spec/catalogs/audiences/executives.json +0 -27
  355. package/dist/spec/catalogs/audiences/investors.json +0 -27
  356. package/dist/spec/catalogs/audiences/marketing-team.json +0 -27
  357. package/dist/spec/catalogs/audiences/regulators.json +0 -27
  358. package/dist/spec/catalogs/audiences/sales-team.json +0 -27
  359. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +0 -91
  360. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +0 -103
  361. package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +0 -79
  362. package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +0 -91
  363. package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +0 -103
  364. package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +0 -79
  365. package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +0 -105
  366. package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +0 -106
  367. package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +0 -123
  368. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +0 -89
  369. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +0 -100
  370. package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +0 -95
  371. package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +0 -108
  372. package/dist/spec/catalogs/chart-types/australia.json +0 -76
  373. package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +0 -136
  374. package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +0 -168
  375. package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +0 -89
  376. package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +0 -101
  377. package/dist/spec/catalogs/chart-types/bullet-bar.json +0 -77
  378. package/dist/spec/catalogs/chart-types/bullet-column-2x.json +0 -89
  379. package/dist/spec/catalogs/chart-types/bullet-column-3x.json +0 -101
  380. package/dist/spec/catalogs/chart-types/bullet-column.json +0 -77
  381. package/dist/spec/catalogs/chart-types/canada.json +0 -86
  382. package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +0 -89
  383. package/dist/spec/catalogs/chart-types/clustered-column.json +0 -95
  384. package/dist/spec/catalogs/chart-types/dot-plot-2x.json +0 -99
  385. package/dist/spec/catalogs/chart-types/dot-plot-3x.json +0 -124
  386. package/dist/spec/catalogs/chart-types/dot-plot-4x.json +0 -149
  387. package/dist/spec/catalogs/chart-types/dot-plot-5x.json +0 -174
  388. package/dist/spec/catalogs/chart-types/dot-plot-6x.json +0 -199
  389. package/dist/spec/catalogs/chart-types/dot-plot.json +0 -74
  390. package/dist/spec/catalogs/chart-types/dumbbell.json +0 -120
  391. package/dist/spec/catalogs/chart-types/line-2x.json +0 -105
  392. package/dist/spec/catalogs/chart-types/line-3x.json +0 -127
  393. package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +0 -144
  394. package/dist/spec/catalogs/chart-types/line-with-high-low.json +0 -144
  395. package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +0 -106
  396. package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +0 -128
  397. package/dist/spec/catalogs/chart-types/sparkline-2x.json +0 -138
  398. package/dist/spec/catalogs/chart-types/sparkline-3x.json +0 -174
  399. package/dist/spec/catalogs/chart-types/sparkline-4x.json +0 -210
  400. package/dist/spec/catalogs/chart-types/sparkline-5x.json +0 -246
  401. package/dist/spec/catalogs/chart-types/sparkline-6x.json +0 -282
  402. package/dist/spec/catalogs/chart-types/sparkline.json +0 -102
  403. package/dist/spec/catalogs/chart-types/stacked-area-2x.json +0 -106
  404. package/dist/spec/catalogs/chart-types/stacked-area-3x.json +0 -123
  405. package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +0 -89
  406. package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +0 -100
  407. package/dist/spec/catalogs/chart-types/stacked-column-2x.json +0 -95
  408. package/dist/spec/catalogs/chart-types/stacked-column-3x.json +0 -108
  409. package/dist/spec/catalogs/chart-types/stacked-line-2x.json +0 -106
  410. package/dist/spec/catalogs/chart-types/stacked-line-3x.json +0 -123
  411. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +0 -107
  412. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +0 -124
  413. package/dist/spec/catalogs/chart-types/treemap-2x.json +0 -101
  414. package/dist/spec/catalogs/chart-types/treemap-3x.json +0 -122
  415. package/dist/spec/catalogs/chart-types/united-kingdom.json +0 -68
  416. package/dist/spec/catalogs/chart-types/united-states.json +0 -82
  417. package/dist/validator-CIylxoIm.d.ts +0 -172
@@ -33,6 +33,11 @@ interface ChartMapping {
33
33
  x?: string;
34
34
  series?: string[];
35
35
  }
36
+ /** One series of a combo chart: drawn as a clustered column or as a line with markers, against the primary (left) or secondary (right) value axis. */
37
+ interface ChartComboSeries {
38
+ role: 'bar' | 'line';
39
+ axis: 'primary' | 'secondary';
40
+ }
36
41
  /** A text run as table cells and headers hold them (see the schema `TextRun`). */
37
42
  type DataTextRun = string | {
38
43
  text: string;
@@ -52,7 +57,7 @@ interface DataStyledCell {
52
57
  type DataTableCell = DataTableValue | DataStyledCell;
53
58
  /** A table column header: a cell, or a DataColumn. */
54
59
  type DataTableHeader = DataTableCell | DataColumn;
55
- type DataDiagnosticCode = 'chart-value-not-numeric' | 'chart-data-source-unresolved' | 'dataset-unknown' | 'dataset-field-unknown' | 'data-column-duplicate' | 'chart-mapping-unknown-column' | 'chart-mapping-adapted' | 'number-format-invalid';
60
+ type DataDiagnosticCode = 'chart-value-not-numeric' | 'dataset-unknown' | 'dataset-field-unknown' | 'data-column-duplicate' | 'chart-mapping-unknown-column' | 'chart-mapping-adapted' | 'chart-highlight-unknown-name' | 'chart-highlight-adapted' | 'number-format-invalid';
56
61
  interface DataDiagnostic {
57
62
  code: DataDiagnosticCode;
58
63
  severity: 'error' | 'warning';
@@ -80,10 +85,16 @@ type ResolvedChartData = {
80
85
  source?: DataSourceRef;
81
86
  /** The dataset id when the chart references one. */
82
87
  dataset?: string;
88
+ /**
89
+ * Combo charts only (FA-15): how each series is drawn, aligned with the series columns (`columns.slice(1)`). The series
90
+ * are ordered column series first, then the line series on the primary axis, then those on the secondary axis, each in
91
+ * plotted order, so every engine draws, exports and lists them in the legend alike.
92
+ */
93
+ combo?: ChartComboSeries[];
83
94
  diagnostics: DataDiagnostic[];
84
95
  } | {
85
96
  ok: false;
86
- reason: 'data-not-inline' | 'dataset-unknown' | 'no-rows' | 'no-columns';
97
+ reason: 'dataset-unknown' | 'no-rows' | 'no-columns';
87
98
  message: string;
88
99
  diagnostics: DataDiagnostic[];
89
100
  };
@@ -109,9 +120,9 @@ declare function numberFormatError(format: unknown): string | undefined;
109
120
  /** Format a number with a NumberFormat; an absent or invalid format prints the General form (String(value)). */
110
121
  declare function formatDataNumber(value: number, format?: string): string;
111
122
  /** NumberFormat -> Excel format code ("General" when absent or invalid). Literal prefix/suffix text is quoted or escaped; placeholders are written '#' before '0' ("0#" -> "#0"). */
112
- declare function excelNumberFormat(format?: string): string;
123
+ declare function toExcelNumberFormat(format?: string): string;
113
124
  /** Excel format code -> NumberFormat, or undefined when the code has no exact NumberFormat equivalent (General, sections, scaling commas, and placeholder orders Excel reads by position such as "0#" or "0.#0"). */
114
- declare function numberFormatFromExcel(code: string): string | undefined;
125
+ declare function fromExcelNumberFormat(code: string): string | undefined;
115
126
  /** True when the value is a dataset reference (`{ dataset: "<id>" }`). */
116
127
  declare function isDatasetRef(value: unknown): value is DatasetRef;
117
128
  /** Diagnostics of the top-level datasets themselves: duplicate column names and invalid column formats. */
@@ -174,4 +185,4 @@ declare function resolveTableData(table: unknown, document?: unknown, options?:
174
185
  /** Display value of a table cell: a number with a format (cell, else column) becomes formatted text; anything else is returned unchanged. */
175
186
  declare function tableCellDisplayValue(cell: DataTableCell, columnFormat?: string): DataTableCell;
176
187
 
177
- export { numberFormatFromExcel as A, resolveChartData as B, type ChartMapping as C, type DataCellValue as D, resolveTableData as E, suggestChartNumberFix as F, tableCellDisplayValue as G, unusedDatasets as H, type ResolvedChartData as R, type ChartNumberFix as a, type ChartNumberFixOperation as b, type ChartNumberFixOptions as c, type DataColumn as d, type DataDiagnostic as e, type DataDiagnosticCode as f, type DataResolveOptions as g, type DataSourceRef as h, type DataStyledCell as i, type DataTableCell as j, type DataTableHeader as k, type DataTableValue as l, type DataTextRun as m, type Dataset as n, type DatasetRef as o, type ResolvedTableData as p, chartNumber as q, datasetDiagnostics as r, excelNumberFormat as s, formatDataNumber as t, inlineChartData as u, inlineDatasets as v, inlineTableData as w, isDatasetRef as x, isXYChartType as y, numberFormatError as z };
188
+ export { resolveChartData as A, resolveTableData as B, type ChartMapping as C, type DataCellValue as D, suggestChartNumberFix as E, tableCellDisplayValue as F, toExcelNumberFormat as G, unusedDatasets as H, type ChartComboSeries as I, type ResolvedChartData as R, type ChartNumberFix as a, type ChartNumberFixOperation as b, type ChartNumberFixOptions as c, type DataColumn as d, type DataDiagnostic as e, type DataDiagnosticCode as f, type DataResolveOptions as g, type DataSourceRef as h, type DataStyledCell as i, type DataTableCell as j, type DataTableHeader as k, type DataTableValue as l, type DataTextRun as m, type Dataset as n, type DatasetRef as o, type ResolvedTableData as p, chartNumber as q, datasetDiagnostics as r, formatDataNumber as s, fromExcelNumberFormat as t, inlineChartData as u, inlineDatasets as v, inlineTableData as w, isDatasetRef as x, isXYChartType as y, numberFormatError as z };
@@ -0,0 +1,192 @@
1
+ import { isRecord, same } from './chunk-CSQHPVGL.js';
2
+ import { parseDocument, YAMLMap, Scalar, stringify } from 'yaml';
3
+
4
+ function splitLines(source) {
5
+ const lines = [];
6
+ let start = 0;
7
+ let no = 1;
8
+ let i = 0;
9
+ while (i < source.length) {
10
+ const c = source[i];
11
+ if (c === "\n" || c === "\r") {
12
+ lines.push({ text: source.slice(start, i), start, end: i, no: no++ });
13
+ if (c === "\r" && source[i + 1] === "\n") i++;
14
+ i++;
15
+ start = i;
16
+ } else i++;
17
+ }
18
+ if (start < source.length) lines.push({ text: source.slice(start), start, end: source.length, no });
19
+ return lines;
20
+ }
21
+ var Ctx = class {
22
+ constructor(source) {
23
+ this.source = source;
24
+ for (let i = 0; i < source.length; i++) {
25
+ if (source[i] === "\r") {
26
+ if (source[i + 1] === "\n") i++;
27
+ this.lineStarts.push(i + 1);
28
+ } else if (source[i] === "\n") this.lineStarts.push(i + 1);
29
+ }
30
+ }
31
+ source;
32
+ findings = [];
33
+ /** JSON Pointer in the converted document to the source range that produced it. */
34
+ ranges = /* @__PURE__ */ new Map();
35
+ lineStarts = [0];
36
+ location(range) {
37
+ let lo = 0;
38
+ let hi = this.lineStarts.length;
39
+ while (lo + 1 < hi) {
40
+ const mid = lo + hi >> 1;
41
+ if ((this.lineStarts[mid] ?? 0) <= range.start) lo = mid;
42
+ else hi = mid;
43
+ }
44
+ return { offset: range.start, length: Math.max(0, range.end - range.start), line: lo + 1, column: range.start - (this.lineStarts[lo] ?? 0) + 1 };
45
+ }
46
+ report(ruleId, severity, message, help, range, path = "") {
47
+ this.findings.push({ ruleId, severity, category: "format", scope: "document", path, message, help, location: this.location(range) });
48
+ }
49
+ error(rule, message, help, range, path = "") {
50
+ this.report(`markdown/${rule}`, "error", message, help, range, path);
51
+ }
52
+ warn(rule, message, help, range, path = "") {
53
+ this.report(`markdown/${rule}`, "warning", message, help, range, path);
54
+ }
55
+ get errors() {
56
+ return this.findings.filter((d) => d.severity === "error").length;
57
+ }
58
+ /** The source range of a JSON Pointer, falling back to the nearest ancestor that has one. */
59
+ rangeOf(pointer) {
60
+ for (let path = pointer; ; path = path.slice(0, path.lastIndexOf("/"))) {
61
+ const found = this.ranges.get(path);
62
+ if (found) return found;
63
+ if (!path) return void 0;
64
+ }
65
+ }
66
+ };
67
+ var lineRange = (first, last = first) => ({ start: first.start, end: last.end });
68
+ function readYamlMapping(text, base, ctx, rule, context) {
69
+ const keys = /* @__PURE__ */ new Map();
70
+ const doc = parseDocument(text, { schema: "core", uniqueKeys: true, merge: false, prettyErrors: false });
71
+ let ok = true;
72
+ for (const error of doc.errors) {
73
+ ok = false;
74
+ const [start, end] = error.pos;
75
+ ctx.error(rule, `YAML: ${error.message.split("\n")[0]}`, "Fix the YAML syntax. Front matter and embedded blocks hold JSON-compatible YAML: mappings, sequences and scalars, no anchors or tags.", { start: base + start, end: base + Math.max(end, start) });
76
+ }
77
+ if (!ok) return { value: {}, keys, ok };
78
+ if (doc.contents === null) return { value: {}, keys, ok };
79
+ if (!(doc.contents instanceof YAMLMap)) {
80
+ ctx.error(`${rule}-not-mapping`, "Expected a YAML mapping of keys and values.", "Write `key: value` lines; a list or a bare value is not accepted here.", context);
81
+ return { value: {}, keys, ok: false };
82
+ }
83
+ for (const pair of doc.contents.items) {
84
+ const key = pair.key;
85
+ const name = key instanceof Scalar ? String(key.value) : void 0;
86
+ if (name !== void 0 && key?.range) keys.set(name, { start: base + key.range[0], end: base + (pair.value?.range?.[1] ?? key.range[1]) });
87
+ }
88
+ let value;
89
+ try {
90
+ value = doc.toJS({ maxAliasCount: 0 });
91
+ } catch (error) {
92
+ ctx.error(rule, `YAML: ${error.message}`, "Anchors and aliases are not accepted; write each value out.", context);
93
+ return { value: {}, keys, ok: false };
94
+ }
95
+ const bad = nonJson(value);
96
+ if (bad) {
97
+ ctx.error(rule, `YAML value is not JSON-compatible (${bad}).`, "Quote special numbers such as .inf or .nan to keep them as strings.", context);
98
+ return { value: {}, keys, ok: false };
99
+ }
100
+ return { value, keys, ok };
101
+ }
102
+ function nonJson(value) {
103
+ if (typeof value === "number") return Number.isFinite(value) ? void 0 : "a number that is not finite";
104
+ if (value === null || typeof value === "string" || typeof value === "boolean") return void 0;
105
+ if (Array.isArray(value)) return value.map(nonJson).find(Boolean);
106
+ if (isRecord(value)) return Object.values(value).map(nonJson).find(Boolean);
107
+ return `a ${typeof value}`;
108
+ }
109
+ function writeYaml(value) {
110
+ for (const blockQuote of [true, false]) {
111
+ const text = stringify(value, { indent: 2, lineWidth: 0, minContentWidth: 0, blockQuote, defaultStringType: "PLAIN", defaultKeyType: "PLAIN" });
112
+ const doc = parseDocument(text, { schema: "core", uniqueKeys: true, merge: false });
113
+ if (!doc.errors.length && same(doc.toJS({ maxAliasCount: 0 }), value)) return text.endsWith("\n") ? text : `${text}
114
+ `;
115
+ }
116
+ return void 0;
117
+ }
118
+ var DECIMAL = /^-?(?:0|[1-9]\d*)(?:\.\d+)?$/;
119
+ function scalarText(value) {
120
+ if (typeof value === "number") return DECIMAL.test(String(value)) ? String(value) : JSON.stringify(String(value));
121
+ const plain = value !== "" && value === value.trim() && !value.startsWith('"') && !/[\r\n]/.test(value) && !DECIMAL.test(value);
122
+ return plain ? value : JSON.stringify(value);
123
+ }
124
+ function readCsv(text) {
125
+ const rows = [];
126
+ let row = [];
127
+ let i = 0;
128
+ const n = text.length;
129
+ const endRecord = () => {
130
+ rows.push(row);
131
+ row = [];
132
+ };
133
+ while (i < n) {
134
+ while (text[i] === " " || text[i] === " ") i++;
135
+ if (text[i] === '"') {
136
+ let value = "";
137
+ i++;
138
+ for (; ; ) {
139
+ if (i >= n) return { rows, error: "A quoted field is not closed." };
140
+ if (text[i] === '"') {
141
+ if (text[i + 1] === '"') {
142
+ value += '"';
143
+ i += 2;
144
+ continue;
145
+ }
146
+ i++;
147
+ break;
148
+ }
149
+ value += text[i++];
150
+ }
151
+ while (text[i] === " " || text[i] === " ") i++;
152
+ if (i < n && text[i] !== "," && text[i] !== "\n" && text[i] !== "\r") return { rows, error: "Text follows a closing quote." };
153
+ row.push({ value, quoted: true });
154
+ } else {
155
+ let j = i;
156
+ while (j < n && text[j] !== "," && text[j] !== "\n" && text[j] !== "\r") j++;
157
+ row.push({ value: text.slice(i, j).trim(), quoted: false });
158
+ i = j;
159
+ }
160
+ if (text[i] === ",") {
161
+ i++;
162
+ if (i >= n || text[i] === "\n" || text[i] === "\r") row.push({ value: "", quoted: false });
163
+ continue;
164
+ }
165
+ if (text[i] === "\r" && text[i + 1] === "\n") i++;
166
+ i++;
167
+ endRecord();
168
+ }
169
+ if (row.length) endRecord();
170
+ return { rows };
171
+ }
172
+ var needsQuotes = (value) => /[",\r\n]/.test(value) || value !== value.trim() || value === "";
173
+ function csvField(cell, header = false) {
174
+ if (cell === null) return "";
175
+ if (typeof cell === "number") return String(cell);
176
+ if (typeof cell === "boolean") return String(cell);
177
+ const text = String(cell);
178
+ const ambiguous = !header && (DECIMAL.test(text) || /^(?:true|false)$/.test(text));
179
+ return needsQuotes(text) || ambiguous ? `"${text.replaceAll('"', '""')}"` : text;
180
+ }
181
+ var OPFMarkdownError = class extends Error {
182
+ code;
183
+ details;
184
+ constructor(code, message, details = {}) {
185
+ super(message);
186
+ this.name = "OPFMarkdownError";
187
+ this.code = code;
188
+ this.details = details;
189
+ }
190
+ };
191
+
192
+ export { Ctx, DECIMAL, OPFMarkdownError, csvField, lineRange, readCsv, readYamlMapping, scalarText, splitLines, writeYaml };
@@ -1,94 +1,4 @@
1
- import { validatePresentation } from './chunk-IYCJUKWD.js';
2
-
3
- // src/convert/shared.ts
4
- var CONTENT_KEYS = ["text", "items", "bullets", "image", "video", "chart", "table", "code", "metric", "quote", "timeline"];
5
- var SLIDE_ONLY_KEYS = ["title", "subtitle", "tag", "layout", "design", "notes", "section", "hidden", "beat"];
6
- var OPFConversionError = class extends Error {
7
- code;
8
- details;
9
- constructor(code, message, details = {}) {
10
- super(message);
11
- this.name = "OPFConversionError";
12
- this.code = code;
13
- this.details = details;
14
- }
15
- };
16
- var refuse = (message, details = {}) => new OPFConversionError("not-convertible", message, details);
17
- var Loss = class {
18
- list = [];
19
- note(message) {
20
- if (!this.list.includes(message)) this.list.push(message);
21
- }
22
- merge(other) {
23
- for (const message of other) this.note(message);
24
- }
25
- };
26
- var report = (loss) => ({ lossless: loss.length === 0, loss: [...loss] });
27
- var isRecord = (value) => !!value && typeof value === "object" && !Array.isArray(value);
28
- var clone = (value) => structuredClone(value);
29
- var own = (value, key) => Object.hasOwn(value, key);
30
- var same = (a, b) => JSON.stringify(canonical(a)) === JSON.stringify(canonical(b));
31
- function canonical(value) {
32
- if (Array.isArray(value)) return value.map(canonical);
33
- if (isRecord(value)) return Object.fromEntries(Object.keys(value).sort().map((key) => [key, canonical(value[key])]));
34
- return value;
35
- }
36
- var isSlideLike = (payload) => SLIDE_ONLY_KEYS.some((key) => own(payload, key));
37
- var contentKeysOf = (payload) => CONTENT_KEYS.filter((key) => payload[key] !== void 0);
38
- function assertValidOutput(value, as = "block", context = {}) {
39
- const slides = as === "slides" ? value : as === "slide" ? [value] : [{ blocks: [value] }];
40
- const datasets = isRecord(context.datasets) ? context.datasets : void 0;
41
- const result = validatePresentation({ ...datasets ? { datasets } : {}, slides });
42
- const errors = datasets ? result.errors : result.errors.filter((issue) => issue.params.code !== "dataset-unknown" && issue.params.code !== "dataset-field-unknown");
43
- if (errors.length) {
44
- const first = errors[0];
45
- throw new OPFConversionError("invalid-output", `The converted content is not valid OPF: ${first?.message ?? "unknown error"}${first?.path ? ` (${first.path})` : ""}.`, { issues: errors });
46
- }
47
- }
48
- var assertValidOwner = (owner, context = {}) => assertValidOutput(owner, isSlideLike(owner) ? "slide" : "block", context);
49
- var FORMATTING = ["bold", "italic", "underline", "strikethrough", "color", "fontSize", "fontFamily", "link", "superscript", "subscript"];
50
- var isPlainRun = (run) => typeof run === "string" || isRecord(run) && !FORMATTING.some((key) => run[key] !== void 0);
51
- var runText = (run) => typeof run === "string" ? run : run.text ?? "";
52
- var runsOf = (value) => typeof value === "string" ? [value] : Array.isArray(value) ? value : [];
53
- var plainOf = (value) => runsOf(value).map(runText).join("");
54
- var hasFormatting = (value) => runsOf(value).some((run) => !isPlainRun(run));
55
- var NEWLINE = /\r\n|\r|\n/;
56
- function splitRuns(runs) {
57
- const lines = [[]];
58
- for (const run of runs) {
59
- const parts = runText(run).split(NEWLINE);
60
- parts.forEach((part, index) => {
61
- if (index > 0) lines.push([]);
62
- if (part === "") return;
63
- lines[lines.length - 1].push(typeof run === "string" ? part : { ...run, text: part });
64
- });
65
- }
66
- return lines;
67
- }
68
- function mergeRuns(runs) {
69
- const merged = [];
70
- for (const run of runs) {
71
- if (typeof run === "string" && typeof merged.at(-1) === "string") merged[merged.length - 1] += run;
72
- else merged.push(run);
73
- }
74
- return merged;
75
- }
76
- var linePlain = (line) => line.map(runText).join("");
77
- var lineIsPlain = (line) => line.every(isPlainRun);
78
- var lineValue = (line) => lineIsPlain(line) ? linePlain(line) : mergeRuns(line);
79
- function joinLines(lines) {
80
- if (lines.every(lineIsPlain)) return lines.map(linePlain).join("\n");
81
- const runs = [];
82
- lines.forEach((line, index) => {
83
- if (index > 0) runs.push("\n");
84
- runs.push(...line);
85
- });
86
- return mergeRuns(runs);
87
- }
88
- function concatText(a, b) {
89
- if (typeof a === "string" && typeof b === "string") return a + b;
90
- return mergeRuns([...runsOf(a), ...runsOf(b)]);
91
- }
1
+ import { runText } from './chunk-CSQHPVGL.js';
92
2
 
93
3
  // src/convert/text-lines.ts
94
4
  var LIST_PREFIX = /^([ \t]*)(?:([-*•+]|\d{1,3}[.)])[ \t]+)?/;
@@ -197,4 +107,4 @@ function fenceCode(source, language, filename) {
197
107
  return [`${fence}${info}`, ...source.split(/\r\n|\r|\n/), fence];
198
108
  }
199
109
 
200
- export { CONTENT_KEYS, FORMATTING, Loss, OPFConversionError, assertValidOutput, assertValidOwner, clone, concatText, contentKeysOf, fenceCode, hasFormatting, isPlainRun, isRecord, isSlideLike, joinLines, levelsFromIndents, lineIsPlain, linePlain, lineValue, parseCodeFence, parseListLine, parseQuoteLines, plainOf, refuse, report, runText, runsOf, same, splitRuns, splitWhen };
110
+ export { fenceCode, levelsFromIndents, parseCodeFence, parseListLine, parseQuoteLines, splitWhen };
@@ -0,0 +1,83 @@
1
+ import { presentation } from './chunk-LS2FMPI5.js';
2
+
3
+ // src/format.ts
4
+ var OPFFormatError = class extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "OPFFormatError";
8
+ }
9
+ };
10
+ var root = presentation;
11
+ var flattenCache = /* @__PURE__ */ new WeakMap();
12
+ function collect(schema, seen) {
13
+ if (!schema || typeof schema !== "object" || seen.has(schema)) return [];
14
+ seen.add(schema);
15
+ const node = schema;
16
+ const out = [node];
17
+ if (typeof node.$ref === "string" && node.$ref.startsWith("#/$defs/")) out.push(...collect(root.$defs?.[node.$ref.slice("#/$defs/".length)], seen));
18
+ for (const list of [node.oneOf, node.anyOf, node.allOf]) for (const branch of list ?? []) out.push(...collect(branch, seen));
19
+ out.push(...collect(node.then, seen), ...collect(node.else, seen));
20
+ return out;
21
+ }
22
+ function flatten(schema) {
23
+ if (!schema || typeof schema !== "object") return [];
24
+ const cached = flattenCache.get(schema);
25
+ if (cached) return cached;
26
+ const nodes = collect(schema, /* @__PURE__ */ new Set());
27
+ flattenCache.set(schema, nodes);
28
+ return nodes;
29
+ }
30
+ var own = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
31
+ function arrange(value, schemas) {
32
+ if (Array.isArray(value)) {
33
+ const itemSchemas = schemas.flatMap((node) => node.items && typeof node.items === "object" ? flatten(node.items) : []);
34
+ return value.map((item) => arrange(item, itemSchemas));
35
+ }
36
+ if (!value || typeof value !== "object") return value;
37
+ const record = value;
38
+ const declared = [];
39
+ const seen = /* @__PURE__ */ new Set();
40
+ for (const node of schemas) for (const key of Object.keys(node.properties ?? {})) if (!seen.has(key)) {
41
+ seen.add(key);
42
+ declared.push(key);
43
+ }
44
+ const present = Object.keys(record);
45
+ const ordered = [...declared.filter((key) => own(record, key)), ...present.filter((key) => !seen.has(key))];
46
+ const out = {};
47
+ for (const key of ordered) {
48
+ let children = schemas.flatMap((node) => node.properties && own(node.properties, key) ? flatten(node.properties[key]) : []);
49
+ if (!children.length && !seen.has(key)) children = schemas.flatMap((node) => node.additionalProperties && typeof node.additionalProperties === "object" ? flatten(node.additionalProperties) : []);
50
+ Object.defineProperty(out, key, { value: arrange(record[key], children), enumerable: true, configurable: true, writable: true });
51
+ }
52
+ return out;
53
+ }
54
+ function sortPresentationKeys(document) {
55
+ return arrange(document, flatten(root));
56
+ }
57
+ function format(input, options = {}) {
58
+ let document = input;
59
+ if (typeof input === "string") {
60
+ try {
61
+ document = JSON.parse(input.replace(/^/u, ""));
62
+ } catch (error) {
63
+ throw new OPFFormatError(`Invalid JSON: ${error.message}`);
64
+ }
65
+ }
66
+ const indent = options.indent ?? 2;
67
+ if (!Number.isInteger(indent) || indent < 0 || indent > 8) throw new OPFFormatError("indent must be an integer from 0 to 8.");
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);
70
+ if (text === void 0) throw new OPFFormatError("Nothing to format.");
71
+ return options.eol === "crlf" ? `${text.replaceAll("\n", "\r\n")}\r
72
+ ` : `${text}
73
+ `;
74
+ }
75
+ function isFormatted(source, options = {}) {
76
+ try {
77
+ return format(source, options) === source;
78
+ } catch {
79
+ return false;
80
+ }
81
+ }
82
+
83
+ export { OPFFormatError, format, isFormatted, sortPresentationKeys };