@openpresentation/opf 0.11.2 → 0.11.4

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 (236) hide show
  1. package/dist/{catalogs-DJ-B5ZyD.d.ts → catalogs-CUClB3nl.d.ts} +202 -5
  2. package/dist/catalogs.d.ts +1 -1
  3. package/dist/catalogs.js +1 -1
  4. package/dist/{chunk-BVLWFMDX.js → chunk-3H2U7FDR.js} +224 -26
  5. package/dist/{chunk-K7IWYODS.js → chunk-3OJN7QAW.js} +17 -4
  6. package/dist/{chunk-7LF37SG3.js → chunk-AEUSVEUY.js} +4915 -1640
  7. package/dist/{chunk-DJRZMGKY.js → chunk-FDCWQHWO.js} +143 -68
  8. package/dist/{chunk-SDETQV7Y.js → chunk-HJL64ETN.js} +505 -0
  9. package/dist/{chunk-LTSDDBNW.js → chunk-KJKASEPE.js} +262 -23
  10. package/dist/{chunk-SMYEM3HV.js → chunk-NSVVQ52O.js} +7 -6
  11. package/dist/{chunk-KZ6BT5UG.js → chunk-RXNFDGPC.js} +5 -5
  12. package/dist/{composition-DzLwY-Mi.d.ts → composition-Dl-d9FRj.d.ts} +93 -6
  13. package/dist/composition.d.ts +1 -1
  14. package/dist/composition.js +1 -1
  15. package/dist/docs.js +21 -15
  16. package/dist/examples.d.ts +1 -1
  17. package/dist/font-policy.js +1 -1
  18. package/dist/index.d.ts +4 -4
  19. package/dist/index.js +11 -11
  20. package/dist/lint.d.ts +2 -2
  21. package/dist/lint.js +5 -5
  22. package/dist/pagination.d.ts +1 -1
  23. package/dist/pagination.js +5 -5
  24. package/dist/{presentation-bceTClm8.d.ts → presentation-j5PVrqfV.d.ts} +41 -29
  25. package/dist/repo-readme.js +1 -1
  26. package/dist/schemas.js +1 -1
  27. package/dist/spec/README.md +3 -2
  28. package/dist/spec/catalogs/audiences/index.json +2 -0
  29. package/dist/spec/catalogs/chart-types/box-and-whisker.json +101 -49
  30. package/dist/spec/catalogs/chart-types/histogram.json +130 -108
  31. package/dist/spec/catalogs/chart-types/index.json +2 -0
  32. package/dist/spec/catalogs/chart-types/pareto.json +22 -106
  33. package/dist/spec/catalogs/color-schemes/black-and-white.json +10 -1
  34. package/dist/spec/catalogs/color-schemes/bold-red.json +10 -1
  35. package/dist/spec/catalogs/color-schemes/boost.json +10 -1
  36. package/dist/spec/catalogs/color-schemes/burnt-orange.json +10 -1
  37. package/dist/spec/catalogs/color-schemes/cool-horizon.json +10 -1
  38. package/dist/spec/catalogs/color-schemes/corporate-blue.json +10 -1
  39. package/dist/spec/catalogs/color-schemes/deep-purple.json +10 -1
  40. package/dist/spec/catalogs/color-schemes/forest-green.json +10 -1
  41. package/dist/spec/catalogs/color-schemes/golden-yellow.json +10 -1
  42. package/dist/spec/catalogs/color-schemes/index.json +2 -0
  43. package/dist/spec/catalogs/color-schemes/luxury.json +10 -1
  44. package/dist/spec/catalogs/color-schemes/pastel-red.json +10 -1
  45. package/dist/spec/catalogs/color-schemes/slate-gray.json +10 -1
  46. package/dist/spec/catalogs/color-schemes/steel-blue.json +10 -1
  47. package/dist/spec/catalogs/color-schemes/vibes.json +10 -1
  48. package/dist/spec/catalogs/font-schemes/angsana-new.json +2 -1
  49. package/dist/spec/catalogs/font-schemes/aparajita.json +2 -1
  50. package/dist/spec/catalogs/font-schemes/aptos.json +2 -1
  51. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +2 -1
  52. package/dist/spec/catalogs/font-schemes/arial.json +2 -1
  53. package/dist/spec/catalogs/font-schemes/batang.json +2 -1
  54. package/dist/spec/catalogs/font-schemes/bookman.json +2 -1
  55. package/dist/spec/catalogs/font-schemes/calibri.json +2 -1
  56. package/dist/spec/catalogs/font-schemes/century-schoolbook.json +2 -1
  57. package/dist/spec/catalogs/font-schemes/consolas.json +2 -1
  58. package/dist/spec/catalogs/font-schemes/constantia.json +2 -1
  59. package/dist/spec/catalogs/font-schemes/courier-new.json +2 -1
  60. package/dist/spec/catalogs/font-schemes/daunpenh.json +2 -1
  61. package/dist/spec/catalogs/font-schemes/david.json +2 -1
  62. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +2 -1
  63. package/dist/spec/catalogs/font-schemes/fangsong.json +2 -1
  64. package/dist/spec/catalogs/font-schemes/garamond.json +2 -1
  65. package/dist/spec/catalogs/font-schemes/gautami.json +2 -1
  66. package/dist/spec/catalogs/font-schemes/georgia.json +2 -1
  67. package/dist/spec/catalogs/font-schemes/gisha.json +2 -1
  68. package/dist/spec/catalogs/font-schemes/grandview.json +2 -1
  69. package/dist/spec/catalogs/font-schemes/gungsuh.json +2 -1
  70. package/dist/spec/catalogs/font-schemes/impact.json +2 -1
  71. package/dist/spec/catalogs/font-schemes/index.json +236 -234
  72. package/dist/spec/catalogs/font-schemes/kalinga.json +2 -1
  73. package/dist/spec/catalogs/font-schemes/kartika.json +2 -1
  74. package/dist/spec/catalogs/font-schemes/khmer-ui.json +2 -1
  75. package/dist/spec/catalogs/font-schemes/latha.json +2 -1
  76. package/dist/spec/catalogs/font-schemes/lucida-sans.json +2 -1
  77. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +2 -1
  78. package/dist/spec/catalogs/font-schemes/mangal.json +2 -1
  79. package/dist/spec/catalogs/font-schemes/meiryo.json +2 -1
  80. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +2 -1
  81. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +2 -1
  82. package/dist/spec/catalogs/font-schemes/mingliu.json +2 -1
  83. package/dist/spec/catalogs/font-schemes/miriam.json +2 -1
  84. package/dist/spec/catalogs/font-schemes/montserrat.json +2 -1
  85. package/dist/spec/catalogs/font-schemes/ms-mincho.json +2 -1
  86. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +2 -1
  87. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +2 -1
  88. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +2 -1
  89. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +2 -1
  90. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +2 -1
  91. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +2 -1
  92. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +2 -1
  93. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +2 -1
  94. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +2 -1
  95. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +2 -1
  96. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +2 -1
  97. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +2 -1
  98. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +2 -1
  99. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +2 -1
  100. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +2 -1
  101. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +2 -1
  102. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +2 -1
  103. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +2 -1
  104. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +2 -1
  105. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +2 -1
  106. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +2 -1
  107. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +2 -1
  108. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +2 -1
  109. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +2 -1
  110. package/dist/spec/catalogs/font-schemes/noto-sans.json +2 -1
  111. package/dist/spec/catalogs/font-schemes/nyala.json +2 -1
  112. package/dist/spec/catalogs/font-schemes/open-sans.json +2 -1
  113. package/dist/spec/catalogs/font-schemes/pmingliu.json +2 -1
  114. package/dist/spec/catalogs/font-schemes/poppins.json +2 -1
  115. package/dist/spec/catalogs/font-schemes/pt-serif.json +2 -1
  116. package/dist/spec/catalogs/font-schemes/raavi.json +2 -1
  117. package/dist/spec/catalogs/font-schemes/raleway.json +2 -1
  118. package/dist/spec/catalogs/font-schemes/roboto.json +2 -1
  119. package/dist/spec/catalogs/font-schemes/rockwell.json +2 -1
  120. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +2 -1
  121. package/dist/spec/catalogs/font-schemes/seaford.json +2 -1
  122. package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +2 -1
  123. package/dist/spec/catalogs/font-schemes/segoe-ui.json +2 -1
  124. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +2 -1
  125. package/dist/spec/catalogs/font-schemes/shruti.json +2 -1
  126. package/dist/spec/catalogs/font-schemes/simsun.json +2 -1
  127. package/dist/spec/catalogs/font-schemes/skeena.json +2 -1
  128. package/dist/spec/catalogs/font-schemes/sylfaen.json +2 -1
  129. package/dist/spec/catalogs/font-schemes/tahoma.json +2 -1
  130. package/dist/spec/catalogs/font-schemes/tenorite.json +2 -1
  131. package/dist/spec/catalogs/font-schemes/times-new-roman.json +2 -1
  132. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +2 -1
  133. package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +2 -1
  134. package/dist/spec/catalogs/font-schemes/tunga.json +2 -1
  135. package/dist/spec/catalogs/font-schemes/verdana.json +2 -1
  136. package/dist/spec/catalogs/font-schemes/vrinda.json +2 -1
  137. package/dist/spec/catalogs/font-schemes/yu-gothic.json +2 -1
  138. package/dist/spec/catalogs/languages/index.json +2 -0
  139. package/dist/spec/catalogs/layouts/action-plan.json +35 -0
  140. package/dist/spec/catalogs/layouts/agenda.json +35 -0
  141. package/dist/spec/catalogs/layouts/appendix-index.json +38 -0
  142. package/dist/spec/catalogs/layouts/architecture-stack.json +35 -0
  143. package/dist/spec/catalogs/layouts/assumptions-dependencies.json +35 -0
  144. package/dist/spec/catalogs/layouts/before-after.json +41 -0
  145. package/dist/spec/catalogs/layouts/benchmark-target-table.json +35 -0
  146. package/dist/spec/catalogs/layouts/bullet-list.json +38 -0
  147. package/dist/spec/catalogs/layouts/business-model-canvas.json +35 -0
  148. package/dist/spec/catalogs/layouts/capability-map.json +35 -0
  149. package/dist/spec/catalogs/layouts/case-study.json +35 -0
  150. package/dist/spec/catalogs/layouts/chapter-recap.json +35 -0
  151. package/dist/spec/catalogs/layouts/circular-lifecycle.json +35 -0
  152. package/dist/spec/catalogs/layouts/comparison.json +41 -0
  153. package/dist/spec/catalogs/layouts/competitive-landscape.json +35 -0
  154. package/dist/spec/catalogs/layouts/customer-journey.json +35 -0
  155. package/dist/spec/catalogs/layouts/customer-logos.json +38 -0
  156. package/dist/spec/catalogs/layouts/dashboard.json +41 -0
  157. package/dist/spec/catalogs/layouts/data-visualization.json +45 -0
  158. package/dist/spec/catalogs/layouts/decision-tree.json +35 -0
  159. package/dist/spec/catalogs/layouts/detailed-data-table.json +41 -0
  160. package/dist/spec/catalogs/layouts/ecosystem-map.json +35 -0
  161. package/dist/spec/catalogs/layouts/executive-decision.json +38 -0
  162. package/dist/spec/catalogs/layouts/executive-summary.json +38 -0
  163. package/dist/spec/catalogs/layouts/faq.json +35 -0
  164. package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +35 -0
  165. package/dist/spec/catalogs/layouts/forecast-scenario.json +45 -0
  166. package/dist/spec/catalogs/layouts/funnel-pyramid.json +38 -0
  167. package/dist/spec/catalogs/layouts/gantt-project-plan.json +38 -0
  168. package/dist/spec/catalogs/layouts/geographic-map.json +35 -0
  169. package/dist/spec/catalogs/layouts/heatmap-cohort.json +38 -0
  170. package/dist/spec/catalogs/layouts/hub-and-spoke.json +35 -0
  171. package/dist/spec/catalogs/layouts/icon-grid.json +35 -0
  172. package/dist/spec/catalogs/layouts/image-focus.json +35 -0
  173. package/dist/spec/catalogs/layouts/index.json +352 -0
  174. package/dist/spec/catalogs/layouts/key-takeaway.json +32 -0
  175. package/dist/spec/catalogs/layouts/kpi-scorecard.json +44 -0
  176. package/dist/spec/catalogs/layouts/logic-tree.json +35 -0
  177. package/dist/spec/catalogs/layouts/market-size.json +35 -0
  178. package/dist/spec/catalogs/layouts/matrix-quadrant.json +48 -0
  179. package/dist/spec/catalogs/layouts/network-dependency-map.json +35 -0
  180. package/dist/spec/catalogs/layouts/one-column-explainer.json +35 -0
  181. package/dist/spec/catalogs/layouts/org-chart.json +45 -0
  182. package/dist/spec/catalogs/layouts/persona-grid.json +35 -0
  183. package/dist/spec/catalogs/layouts/photo-grid.json +48 -0
  184. package/dist/spec/catalogs/layouts/pricing-table.json +35 -0
  185. package/dist/spec/catalogs/layouts/process-flow.json +35 -0
  186. package/dist/spec/catalogs/layouts/product-feature.json +35 -0
  187. package/dist/spec/catalogs/layouts/pros-cons.json +41 -0
  188. package/dist/spec/catalogs/layouts/qa-discussion.json +38 -0
  189. package/dist/spec/catalogs/layouts/quote-highlight.json +35 -0
  190. package/dist/spec/catalogs/layouts/raci-matrix.json +35 -0
  191. package/dist/spec/catalogs/layouts/risk-heatmap.json +35 -0
  192. package/dist/spec/catalogs/layouts/roadmap.json +35 -0
  193. package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +35 -0
  194. package/dist/spec/catalogs/layouts/section-divider.json +35 -0
  195. package/dist/spec/catalogs/layouts/single-message-statement.json +32 -0
  196. package/dist/spec/catalogs/layouts/stats-metrics.json +45 -0
  197. package/dist/spec/catalogs/layouts/status-rag.json +35 -0
  198. package/dist/spec/catalogs/layouts/swimlane-process.json +35 -0
  199. package/dist/spec/catalogs/layouts/swot-analysis.json +48 -0
  200. package/dist/spec/catalogs/layouts/team-bio.json +35 -0
  201. package/dist/spec/catalogs/layouts/testimonial-grid.json +44 -0
  202. package/dist/spec/catalogs/layouts/thank-you-cta.json +35 -0
  203. package/dist/spec/catalogs/layouts/three-column.json +45 -0
  204. package/dist/spec/catalogs/layouts/timeline.json +38 -0
  205. package/dist/spec/catalogs/layouts/title-slide.json +35 -0
  206. package/dist/spec/catalogs/layouts/two-column.json +42 -0
  207. package/dist/spec/catalogs/layouts/venn-overlap.json +35 -0
  208. package/dist/spec/catalogs/layouts/waterfall-bridge.json +45 -0
  209. package/dist/spec/catalogs/layouts/wheel-radial.json +35 -0
  210. package/dist/spec/catalogs/manifest.json +111 -0
  211. package/dist/spec/catalogs/narratives/index.json +746 -144
  212. package/dist/spec/catalogs/purposes/index.json +2 -0
  213. package/dist/spec/catalogs/social-platforms/index.json +2 -1
  214. package/dist/spec/catalogs/themes/index.json +10 -8
  215. package/dist/spec/catalogs/tones/index.json +2 -0
  216. package/dist/spec/reference/font-policy.json +5 -5
  217. package/dist/spec/schemas/audience.schema.json +21 -0
  218. package/dist/spec/schemas/catalog-index.schema.json +40 -3
  219. package/dist/spec/schemas/catalog-manifest.schema.json +83 -0
  220. package/dist/spec/schemas/chart-type.schema.json +5 -0
  221. package/dist/spec/schemas/color-scheme.schema.json +21 -0
  222. package/dist/spec/schemas/font-scheme.schema.json +21 -0
  223. package/dist/spec/schemas/language.schema.json +21 -0
  224. package/dist/spec/schemas/layout.schema.json +21 -0
  225. package/dist/spec/schemas/narrative.schema.json +21 -0
  226. package/dist/spec/schemas/opf.schema.json +22 -18
  227. package/dist/spec/schemas/purpose.schema.json +21 -0
  228. package/dist/spec/schemas/social-platform.schema.json +26 -5
  229. package/dist/spec/schemas/theme.schema.json +21 -0
  230. package/dist/spec/schemas/tone.schema.json +21 -0
  231. package/dist/spec-files.d.ts +2 -2
  232. package/dist/spec-files.js +1 -1
  233. package/dist/types.d.ts +2 -2
  234. package/dist/validator.d.ts +2 -2
  235. package/dist/validator.js +4 -4
  236. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { P as Presentation } from './presentation-bceTClm8.js';
1
+ import { P as Presentation } from './presentation-j5PVrqfV.js';
2
2
 
3
3
  interface ExampleRecord {
4
4
  /** Filename slug, without the `.opf.json` suffix. */
@@ -1 +1 @@
1
- export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-KZ6BT5UG.js';
1
+ export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-RXNFDGPC.js';
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  export { S as SchemaEntry, a as SchemaName, b as audience, c as chartType, d as colorScheme, f as fontScheme, l as language, e as layout, n as narrative, p as presentation, g as purpose, s as schemaEntries, h as schemaNames, i as schemas, j as socialPlatform, t as theme, k as tone } from './schemas-X_NniU4A.js';
2
- import { C as CatalogKind } from './catalogs-DJ-B5ZyD.js';
3
- export { A as Audience, a as CatalogEntry, b as CatalogIndex, c as CatalogIndexRecord, d as CatalogRecord, e as ChartType, f as ColorScheme, F as FontScheme, L as Language, g as Layout, N as Narrative, P as Purpose, S as SocialPlatform, T as Theme, h as Tone, i as audiences, j as catalogEntries, k as catalogIndexes, l as catalogKinds, m as catalogSchemaNames, n as catalogs, o as chartTypes, p as colorSchemes, q as fontSchemes, r as languages, s as layouts, t as narratives, u as purposes, v as socialPlatforms, w as themes, x as tones } from './catalogs-DJ-B5ZyD.js';
2
+ import { C as CatalogKind } from './catalogs-CUClB3nl.js';
3
+ export { A as Audience, a as CatalogEntry, b as CatalogIndex, c as CatalogIndexRecord, d as CatalogRecord, e as ChartType, f as ColorScheme, F as FontScheme, L as Language, g as Layout, N as Narrative, P as Purpose, S as SocialPlatform, T as Theme, h as Tone, i as audiences, j as catalogEntries, k as catalogIndexes, l as catalogKinds, m as catalogSchemaNames, n as catalogs, o as chartTypes, p as colorSchemes, q as fontSchemes, r as languages, s as layouts, t as narratives, u as purposes, v as socialPlatforms, w as themes, x as tones } from './catalogs-CUClB3nl.js';
4
4
  export { OPFValidationError, ValidationIssue, ValidationResult, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './validator.js';
5
5
  export { SpecFileEntry, SpecFileKind, SpecFilePath, specFileEntries, specFileKinds, specFilePaths } from './spec-files.js';
6
6
  export { LayoutPreviewIndex, LayoutPreviewRecord, getLayoutPreview, hasLayoutPreview, layoutPreviewIndex, layoutPreviewSlugs, layoutPreviews } from './previews.js';
7
- export { P as Presentation } from './presentation-bceTClm8.js';
7
+ export { P as Presentation } from './presentation-j5PVrqfV.js';
8
8
  export { LintContract, LintDiagnostic, LintLocation, LintOptions, LintReport, LintSeverity, LintSuggestion, lintPresentation, lintSource } from './lint.js';
9
- export { a as CodeContent, b as CodeLayout, c as CodeLayoutDiagnostic, d as CodeLayoutOptions, e as CodeLineSegment, f as CodeLineSource, g as CodeTextFit, h as CodeTextPart, C as ComposeSlideOptions, i as ComposedFlow, j as ComposedGroup, k as ComposedItem, l as ComposedSlideImage, m as Composition, n as CompositionCandidate, o as CompositionDecision, p as CompositionExplanation, q as CompositionPenalties, r as CompositionTrack, D as DEFAULT_FONT_SCHEME, s as DEFAULT_FURNITURE_DATE_FORMAT, t as DEFAULT_SLIDE_NUMBER_FORMAT, u as FontFamilies, F as FontSchemeDiagnostic, v as FurnitureField, w as FurnitureImagePart, x as FurnitureLayout, y as FurniturePart, z as FurniturePartBase, A as FurnitureSocialLink, B as FurnitureTextExtras, E as FurnitureTextPart, G as LayoutBox, L as LayoutDiagnostic, H as ListEntryLayout, I as ListFit, J as ListText, K as ListValue, M as MAX_COMPOSITION_DEPTH, N as MeasureTextWidth, O as MetricContent, P as MetricLayout, Q as MetricLayoutDiagnostic, R as MetricLayoutOptions, S as MetricTextPart, U as MetricTextSource, V as OPFCompositionError, W as QuoteContent, X as QuoteLayout, Y as QuoteLayoutDiagnostic, Z as QuoteLayoutOptions, _ as QuoteTextPart, $ as QuoteTextSource, a0 as ResolveColorRefOptions, a1 as ResolveColorRefRoles, a2 as ResolvedFontScheme, a3 as RichTextFit, a4 as RichTextFragment, a5 as RichTextLine, a6 as RichTextOptions, a7 as RichTextRun, a8 as SlideComposition, a9 as SlideImageShape, aa as SocialPlatformRecord, ab as SocialProfile, ac as TextFit, ad as TextLineInk, T as TextMeasurement, ae as TextPlacement, af as TextPlacementLine, ag as TextStyle, ah as TimelineContent, ai as TimelineEvent, aj as TimelineLayout, ak as TimelineLayoutDiagnostic, al as TimelineLayoutOptions, am as TimelineTextPart, an as chartColorForFill, ao as colorContrast, ap as composeSlide, aq as fitList, ar as fitRichText, as as fitText, at as formatFurnitureDate, au as formatSlideNumber, av as layoutCode, aw as layoutFurniture, ax as layoutMetric, ay as layoutQuote, az as layoutTimeline, aA as measureText, aB as measureTextOutline, aC as normalizeHexColor, aD as placeTextLines, aE as resolveCanvasDimensions, aF as resolveColorRef, aG as resolveFontFamilies, aH as resolveFontSchemeReference, aI as resolveSocialProfile, aJ as resolveTextStyle, aK as textColorForFill, aL as textWidthMeasurer, aM as wrapText } from './composition-DzLwY-Mi.js';
9
+ export { a as CodeContent, b as CodeLayout, c as CodeLayoutDiagnostic, d as CodeLayoutOptions, e as CodeLineSegment, f as CodeLineSource, g as CodeTextFit, h as CodeTextPart, C as ComposeSlideOptions, i as ComposedFlow, j as ComposedGroup, k as ComposedItem, l as ComposedLogo, m as ComposedSlideImage, n as Composition, o as CompositionCandidate, p as CompositionDecision, q as CompositionExplanation, r as CompositionPenalties, s as CompositionTrack, D as DEFAULT_FONT_SCHEME, t as DEFAULT_FURNITURE_DATE_FORMAT, u as DEFAULT_SLIDE_NUMBER_FORMAT, v as FontFamilies, F as FontSchemeDiagnostic, w as FurnitureField, x as FurnitureImagePart, y as FurnitureLayout, z as FurniturePart, A as FurniturePartBase, B as FurnitureSocialLink, E as FurnitureTextExtras, G as FurnitureTextPart, H as LayoutBox, L as LayoutDiagnostic, I as ListBulletImage, J as ListEntryLayout, K as ListFit, M as ListFitOptions, N as ListText, O as ListValue, P as LogoSlot, Q as MAX_COMPOSITION_DEPTH, R as MeasureTextWidth, S as MetricContent, U as MetricLayout, V as MetricLayoutDiagnostic, W as MetricLayoutOptions, X as MetricTextPart, Y as MetricTextSource, Z as OPFCompositionError, _ as PICTURE_BULLET_SCALE, $ as QuoteContent, a0 as QuoteLayout, a1 as QuoteLayoutDiagnostic, a2 as QuoteLayoutOptions, a3 as QuoteTextPart, a4 as QuoteTextSource, a5 as ResolveColorRefOptions, a6 as ResolveColorRefRoles, a7 as ResolveLogoOptions, a8 as ResolvedFontScheme, a9 as ResolvedLogo, aa as RichTextFit, ab as RichTextFragment, ac as RichTextLine, ad as RichTextOptions, ae as RichTextRun, af as SlideComposition, ag as SlideImageShape, ah as SocialPlatformRecord, ai as SocialProfile, aj as TextFit, ak as TextLineInk, T as TextMeasurement, al as TextPlacement, am as TextPlacementLine, an as TextStyle, ao as TimelineContent, ap as TimelineEvent, aq as TimelineLayout, ar as TimelineLayoutDiagnostic, as as TimelineLayoutOptions, at as TimelineTextPart, au as chartColorForFill, av as colorContrast, aw as composeSlide, ax as fitList, ay as fitRichText, az as fitText, aA as formatFurnitureDate, aB as formatSlideNumber, aC as layoutCode, aD as layoutFurniture, aE as layoutMetric, aF as layoutQuote, aG as layoutTimeline, aH as measureText, aI as measureTextOutline, aJ as normalizeHexColor, aK as placeTextLines, aL as resolveCanvasDimensions, aM as resolveColorRef, aN as resolveFontFamilies, aO as resolveFontSchemeReference, aP as resolveLogo, aQ as resolveSocialProfile, aR as resolveTextStyle, aS as textColorForFill, aT as textWidthMeasurer, aU as wrapText } from './composition-Dl-d9FRj.js';
10
10
  export { OPFPaginationError, PaginatedPage, PaginationMapping, PaginationOptions, PaginationResult, PresentationPaginationOptions, PresentationPaginationResult, paginatePresentation, paginateSlide } from './pagination.js';
11
11
  export { DataCell, DataContentOptions, DataImportOptions, OPFDataImportError, TabularData, createDataContent, parseTabularData } from './data.js';
12
12
  export { FONT_POLICY, FontAvailability, FontAvailabilityCode, FontAvailabilityDiagnostic, FontLicenseClass, FontPolicyDecision, FontPolicyEntry, FontPolicyTable, FontReplacement, FontReplacementCompatibility, FontReplacementMeasurement, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './font-policy.js';
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
- export { specFileEntries, specFileKinds, specFilePaths } from './chunk-SDETQV7Y.js';
1
+ export { specFileEntries, specFileKinds, specFilePaths } from './chunk-HJL64ETN.js';
2
2
  export { getLayoutPreview, hasLayoutPreview, layoutPreviewIndex, layoutPreviewSlugs, layoutPreviews } from './chunk-PIQXLBBJ.js';
3
- export { lintPresentation, lintSource } from './chunk-K7IWYODS.js';
4
- export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-KZ6BT5UG.js';
3
+ export { lintPresentation, lintSource } from './chunk-3OJN7QAW.js';
4
+ export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-RXNFDGPC.js';
5
5
  export { OPFDataImportError, createDataContent, parseTabularData } from './chunk-SOSOBKQ2.js';
6
- export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-SMYEM3HV.js';
7
- import { isRecord, visitContentPayloads, bareIdPattern } from './chunk-DJRZMGKY.js';
8
- export { OPFValidationError, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './chunk-DJRZMGKY.js';
9
- import { resolveFontSchemeReference, DEFAULT_FONT_SCHEME, resolveFontFamilies } from './chunk-BVLWFMDX.js';
10
- export { DEFAULT_FONT_SCHEME, DEFAULT_FURNITURE_DATE_FORMAT, DEFAULT_SLIDE_NUMBER_FORMAT, MAX_COMPOSITION_DEPTH, OPFCompositionError, chartColorForFill, colorContrast, composeSlide, fitList, fitRichText, fitText, formatFurnitureDate, formatSlideNumber, layoutCode, layoutFurniture, layoutMetric, layoutQuote, layoutTimeline, measureText, measureTextOutline, normalizeHexColor, placeTextLines, resolveCanvasDimensions, resolveColorRef, resolveFontFamilies, resolveFontSchemeReference, resolveSocialProfile, resolveTextStyle, textColorForFill, textWidthMeasurer, wrapText } from './chunk-BVLWFMDX.js';
11
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-LTSDDBNW.js';
12
- import { catalogs, catalogEntries } from './chunk-7LF37SG3.js';
13
- export { audiences, catalogEntries, catalogIndexes, catalogKinds, catalogSchemaNames, catalogs, chartTypes, colorSchemes, fontSchemes, languages, layouts, narratives, purposes, socialPlatforms, themes, tones } from './chunk-7LF37SG3.js';
6
+ export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-NSVVQ52O.js';
7
+ import { isRecord, visitContentPayloads, bareIdPattern } from './chunk-FDCWQHWO.js';
8
+ export { OPFValidationError, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './chunk-FDCWQHWO.js';
9
+ import { resolveFontSchemeReference, DEFAULT_FONT_SCHEME, resolveFontFamilies } from './chunk-3H2U7FDR.js';
10
+ export { DEFAULT_FONT_SCHEME, DEFAULT_FURNITURE_DATE_FORMAT, DEFAULT_SLIDE_NUMBER_FORMAT, MAX_COMPOSITION_DEPTH, OPFCompositionError, PICTURE_BULLET_SCALE, chartColorForFill, colorContrast, composeSlide, fitList, fitRichText, fitText, formatFurnitureDate, formatSlideNumber, layoutCode, layoutFurniture, layoutMetric, layoutQuote, layoutTimeline, measureText, measureTextOutline, normalizeHexColor, placeTextLines, resolveCanvasDimensions, resolveColorRef, resolveFontFamilies, resolveFontSchemeReference, resolveLogo, resolveSocialProfile, resolveTextStyle, textColorForFill, textWidthMeasurer, wrapText } from './chunk-3H2U7FDR.js';
11
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-KJKASEPE.js';
12
+ import { catalogs, catalogEntries } from './chunk-AEUSVEUY.js';
13
+ export { audiences, catalogEntries, catalogIndexes, catalogKinds, catalogSchemaNames, catalogs, chartTypes, colorSchemes, fontSchemes, languages, layouts, narratives, purposes, socialPlatforms, themes, tones } from './chunk-AEUSVEUY.js';
14
14
 
15
15
  // src/bundle.ts
16
16
  function reportKey(kind, id) {
package/dist/lint.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { C as CatalogKind } from './catalogs-DJ-B5ZyD.js';
1
+ import { C as CatalogKind } from './catalogs-CUClB3nl.js';
2
2
  import { ValidationIssue } from './validator.js';
3
3
  import { J as JsonPrimitive } from './schemas-X_NniU4A.js';
4
- import './presentation-bceTClm8.js';
4
+ import './presentation-j5PVrqfV.js';
5
5
 
6
6
  type LintSeverity = 'error' | 'warning' | 'info';
7
7
  interface LintLocation {
package/dist/lint.js CHANGED
@@ -1,5 +1,5 @@
1
- export { lintPresentation, lintSource } from './chunk-K7IWYODS.js';
2
- import './chunk-DJRZMGKY.js';
3
- import './chunk-BVLWFMDX.js';
4
- import './chunk-LTSDDBNW.js';
5
- import './chunk-7LF37SG3.js';
1
+ export { lintPresentation, lintSource } from './chunk-3OJN7QAW.js';
2
+ import './chunk-FDCWQHWO.js';
3
+ import './chunk-3H2U7FDR.js';
4
+ import './chunk-KJKASEPE.js';
5
+ import './chunk-AEUSVEUY.js';
@@ -1,4 +1,4 @@
1
- import { L as LayoutDiagnostic, C as ComposeSlideOptions, T as TextMeasurement, F as FontSchemeDiagnostic } from './composition-DzLwY-Mi.js';
1
+ import { L as LayoutDiagnostic, C as ComposeSlideOptions, T as TextMeasurement, F as FontSchemeDiagnostic } from './composition-Dl-d9FRj.js';
2
2
 
3
3
  interface PaginationOptions extends ComposeSlideOptions {
4
4
  /** Readability floor used while choosing page breaks. Default 24 reference pixels. */
@@ -1,5 +1,5 @@
1
- export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-SMYEM3HV.js';
2
- import './chunk-DJRZMGKY.js';
3
- import './chunk-BVLWFMDX.js';
4
- import './chunk-LTSDDBNW.js';
5
- import './chunk-7LF37SG3.js';
1
+ export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-NSVVQ52O.js';
2
+ import './chunk-FDCWQHWO.js';
3
+ import './chunk-3H2U7FDR.js';
4
+ import './chunk-KJKASEPE.js';
5
+ import './chunk-AEUSVEUY.js';
@@ -542,7 +542,7 @@ type ContentPayload = {
542
542
  /**
543
543
  * Catalog source location. Accepts:
544
544
  * - A bare URL pointing at a catalog directory (e.g. 'https://acme.com/decks/narratives'); record ids resolve to '<base>/<id>.json'.
545
- * - A URL pointing at an index file (e.g. 'https://acme.com/decks/narratives/index.json'); records are resolved relative to the index file's directory and the index entries describe what's available.
545
+ * - A URL pointing at an index file (e.g. 'https://acme.com/decks/narratives/index.json'); records are resolved relative to the index file's directory and the index entries describe what's available. Index files follow https://openpresentation.org/schema/opf-catalog-index/v1; the default catalog's index is https://www.pptx.gallery/<kind>/index.json.
546
546
  * - A package reference of the form 'pkg:<package>[/<subpath>]'; resolved through a locally-installed package on the engine's package path.
547
547
  *
548
548
  * This interface was referenced by `Presentation`'s JSON-Schema
@@ -552,7 +552,7 @@ type CatalogSource = string;
552
552
  /**
553
553
  * Open-source JSON format for describing PowerPoint presentations. Agents describe narratives, content, audience, reusable assets, and design — the engine handles OOXML complexity.
554
554
  *
555
- * Fields that reference catalog records (narrative, language, tone, audience, purpose, design.theme / design.theme.id, design.colorScheme / design.colorScheme.id, design.fontScheme / design.fontScheme.id, Slide.layout, Chart.type, Organization.socials / Speaker.socials) resolve through the catalog system: inline 'catalogs.<kind>.records[]' on the document → 'catalogs.<kind>.source' on the document → engine defaults → the default catalog at https://www.pptx.gallery/<kind>. Every reference resolves to the catalog record's 'id' field. When an OPF document omits a reference entirely, the engine falls back to engine defaults (see /spec/reference/engine-defaults.json for a reference example). The defaults file is engine configuration; it is not part of the OPF document contract and has no JSON Schema.
555
+ * Fields that reference catalog records (narrative, language, tone, audience, purpose, design.theme / design.theme.id, design.colorScheme / design.colorScheme.id, design.fontScheme / design.fontScheme.id, Slide.layout, Chart.type, Organization.socials / Speaker.socials) resolve through the catalog system: inline 'catalogs.<kind>.records[]' on the document → 'catalogs.<kind>.source' on the document → engine defaults → the default catalog at https://www.pptx.gallery/<kind>. The default catalog is published by pptx.gallery: the index at https://www.pptx.gallery/<kind>/index.json (also GET https://www.pptx.gallery/<kind> with Accept: application/json) and each record at https://www.pptx.gallery/<kind>/<id>.json. Engines resolve it from the pinned snapshot bundled in @openpresentation/opf (spec/catalogs, pinned by spec/catalogs/manifest.json) and never fetch it at run time; fetching a document's catalogs.<kind>.source is an explicit opt-in by the caller. Every reference resolves to the catalog record's 'id' field. When an OPF document omits a reference entirely, the engine falls back to engine defaults (see /spec/reference/engine-defaults.json for a reference example). The defaults file is engine configuration; it is not part of the OPF document contract and has no JSON Schema.
556
556
  *
557
557
  * Most catalog references accept the bare 'id' as a string for the common case (e.g. narrative = 'classic-story', design.colorScheme = 'cool-horizon'). Audience, purpose, tone, design, and language object forms use 'id' as a base catalog reference plus inline overrides. Asset references use 'asset:<id>' strings that point into the top-level assets registry, and content color fields (rich-text runs, styled table cells) accept hex values, color-scheme slot/role names, or 'var:<id>' references into the top-level variables map.
558
558
  */
@@ -678,7 +678,7 @@ interface Organization {
678
678
  */
679
679
  legalName?: string;
680
680
  /**
681
- * Source for the organization's logo image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are SVG (preferred for vector logos), PNG (with transparency), or JPG. The primary organization's logo is used by default for cover-slide and footer branding; design.logo overrides the source.
681
+ * Source for the organization's logo image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are SVG (preferred for vector logos), PNG (with transparency), or JPG. The primary organization's logo (role 'primary', else the first organization) is the fallback source wherever the deck logo is drawn: a slide's design.logo, then design.logo, then this value. It is therefore drawn on cover and section slides and by header/footer zones with logo: true, exactly as design.logo would be (see design.logo and docs/design-resolution.md).
682
682
  */
683
683
  logo?: (string | {
684
684
  /**
@@ -758,7 +758,7 @@ interface Speaker {
758
758
  */
759
759
  title?: string;
760
760
  /**
761
- * Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Used on cover and bio slides.
761
+ * Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Authoring metadata for hosts and layouts (cover and bio slides built by a host): the reference renderer and exporter do not draw it, because no slide field or layout slot places a speaker; it round-trips through PPTX provenance.
762
762
  */
763
763
  photo?: (string | {
764
764
  /**
@@ -853,7 +853,7 @@ interface Design {
853
853
  */
854
854
  background?: (BackgroundShortcut | Background);
855
855
  /**
856
- * Deck logo assets used by layouts, covers, section dividers, headers, and footers. A string is the default logo source; object form provides light/dark, stacked, icon, and wordmark variants. When omitted, the renderer falls back to the primary organization logo.
856
+ * Deck logo assets used by covers, section dividers, headers, footers and picture bullets. A string or Asset object is the default logo source; the LogoSet object form provides light/dark, stacked, icon, and wordmark variants (see LogoSet for the selection order). Source precedence: a slide's design.logo, then this value, then the primary organization's logo; absence inherits. Placement (reference engines, vetoable): on a cover or section slide (no body payload on a heading-only layout such as title, title-subtitle or section-divider, or no layout) the lockup variant is drawn at the top-left of the free area, inside the slide padding and below any header furniture, in a box 56 reference pixels tall and at most four times as wide; the tag/title/subtitle group then centers in the remaining span. Content slides never get an automatic logo. Header and footer zones draw the icon variant when they set logo: true, and design.listBullet 'image' draws it as the picture bullet. composeSlide returns the cover box as geometry.logo.
857
857
  */
858
858
  logo?: (Asset | LogoSet);
859
859
  /**
@@ -973,11 +973,11 @@ interface Design {
973
973
  };
974
974
  });
975
975
  /**
976
- * Axis along which parallel body/content regions are arranged.
976
+ * Axis along which parallel body content is arranged. Sets the root arrangement mode of blocks and root payloads when no composition.mode is set on the slide or on its layout record: 'vertical' is column, 'horizontal' is row. Precedence: composition.mode (the slide's own, else the layout record's geometry contract), then this value (slide design, then deck design), then the layout record's slideLayoutDirection, then automatic selection. A layout that carries a composition.mode keeps its grid or direction whatever this value says. Promoted regions (left, top:left, ...) keep their explicit geometry and nested groups keep their own composition.
977
977
  */
978
978
  contentDirection?: ("horizontal" | "vertical");
979
979
  /**
980
- * For chart layouts, where the primary chart sits relative to supporting content. 'none' means chart regions have equal weight.
980
+ * Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's contentTypeChartPrimary. When the slide has no promoted regions and no composition.mode of its own, and its root nodes mix at least one chart with other content, the first chart becomes a primary track and the other nodes form one synthetic sub-grid: 'left'/'right' is a two-track row and 'top'/'bottom' a two-track column, weighted 3:2 in favor of the chart; explicit root columns and weights are ignored while it applies. 'none' (the default) keeps the ordinary automatic grid with equal weight.
981
981
  */
982
982
  chartPrimary?: ("none" | "top" | "bottom" | "left" | "right");
983
983
  /**
@@ -985,7 +985,7 @@ interface Design {
985
985
  */
986
986
  imageFill?: ("crop" | "fit");
987
987
  /**
988
- * Default bullet rendering style for list layouts.
988
+ * Marker style for items and bullets lists. 'character' (the default) draws the glyph marker. 'image' draws the deck's icon logo (a slide's design.logo, then design.logo, then the primary organization's logo; light variants on dark backgrounds) as a picture bullet: a square of the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field.
989
989
  */
990
990
  listBullet?: ("character" | "image");
991
991
  [k: string]: unknown;
@@ -1256,7 +1256,7 @@ interface Font1 {
1256
1256
  [k: string]: unknown;
1257
1257
  }
1258
1258
  /**
1259
- * Abstract role: font used for accent text such as quotes or callouts. No direct OOXML slot.
1259
+ * Abstract role: font used for accent text. When set, the slide tag (eyebrow) and the quote body use this family instead of the body and heading families; nothing else changes. resolveFontFamilies() returns it as accent only when the scheme defines it. No direct OOXML slot: PPTX export writes it on those runs, and the theme fonts stay major/minor.
1260
1260
  */
1261
1261
  interface Font2 {
1262
1262
  /**
@@ -1325,7 +1325,7 @@ interface SolidBackground {
1325
1325
  */
1326
1326
  type: "solid";
1327
1327
  /**
1328
- * Fixed solid fill color, usually a hex string. Use { type: 'theme', slot: ... } for PowerPoint's four theme-controlled background choices.
1328
+ * Fixed solid fill color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef, resolved against the effective color scheme and the deck variables). Use { type: 'theme', slot: ... } for PowerPoint's four theme-controlled background choices.
1329
1329
  */
1330
1330
  color: string;
1331
1331
  /**
@@ -1360,7 +1360,7 @@ interface GradientBackground {
1360
1360
  */
1361
1361
  stops?: {
1362
1362
  /**
1363
- * Stop color as a hex string.
1363
+ * Stop color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1364
1364
  */
1365
1365
  color: string;
1366
1366
  /**
@@ -1428,11 +1428,11 @@ interface PatternBackground {
1428
1428
  */
1429
1429
  preset: string;
1430
1430
  /**
1431
- * Foreground color for the pattern, usually a hex string.
1431
+ * Foreground color for the pattern: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1432
1432
  */
1433
1433
  foregroundColor?: string;
1434
1434
  /**
1435
- * Background color behind the pattern, usually a hex string.
1435
+ * Background color behind the pattern: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1436
1436
  */
1437
1437
  backgroundColor?: string;
1438
1438
  [k: string]: unknown;
@@ -1462,7 +1462,7 @@ interface Dimensions {
1462
1462
  [k: string]: unknown;
1463
1463
  }
1464
1464
  /**
1465
- * Deck logo variants surfaced by layouts, covers, section dividers, headers, and footers. Organization identity lives in organization; this object only controls visual rendering assets. Renderer convention: on dark backgrounds prefer the 'light' variant, on light backgrounds prefer the 'dark' variant, and in square/vertical slots prefer the stacked family when present.
1465
+ * Deck logo variants surfaced by covers, section dividers, headers, footers and picture bullets. Organization identity lives in organization; this object only controls visual rendering assets. Engines select one variant per slot and background tone (resolveLogo in @openpresentation/opf): same-tone variants first, neutral ones next, the opposite tone last. Lockup on a dark background: light, default, stackedLight, stacked, wordmarkLight, wordmark, iconLight, icon, then dark, stackedDark, wordmarkDark, iconDark; on a light background: dark, default, stackedDark, stacked, wordmarkDark, wordmark, iconDark, icon, then light, stackedLight, wordmarkLight, iconLight. The icon slot (headers, footers, picture bullets) tries iconLight or iconDark for the tone, then icon, then the lockup chain; the stacked slot tries stackedLight or stackedDark, then stacked, then the lockup chain.
1466
1466
  *
1467
1467
  * This interface was referenced by `Presentation`'s JSON-Schema
1468
1468
  * via the `definition` "LogoSet".
@@ -1849,6 +1849,10 @@ interface HeaderFooter {
1849
1849
  * Left-aligned header/footer content.
1850
1850
  */
1851
1851
  interface HeaderFooterItem {
1852
+ /**
1853
+ * Whether to render the deck's icon logo in this zone: a slide's design.logo, then design.logo, then the primary organization's logo (LogoSet icon variants first, light ones on dark backgrounds). It is a generated image part in the same box as image; without a logo the engine reports unresolved-content at this field. Use image for a literal picture that is not the deck logo.
1854
+ */
1855
+ logo?: boolean;
1852
1856
  /**
1853
1857
  * Literal text rendered in this zone.
1854
1858
  */
@@ -1916,6 +1920,10 @@ interface HeaderFooterItem {
1916
1920
  * Centered header/footer content.
1917
1921
  */
1918
1922
  interface HeaderFooterItem1 {
1923
+ /**
1924
+ * Whether to render the deck's icon logo in this zone: a slide's design.logo, then design.logo, then the primary organization's logo (LogoSet icon variants first, light ones on dark backgrounds). It is a generated image part in the same box as image; without a logo the engine reports unresolved-content at this field. Use image for a literal picture that is not the deck logo.
1925
+ */
1926
+ logo?: boolean;
1919
1927
  /**
1920
1928
  * Literal text rendered in this zone.
1921
1929
  */
@@ -1983,6 +1991,10 @@ interface HeaderFooterItem1 {
1983
1991
  * Right-aligned header/footer content.
1984
1992
  */
1985
1993
  interface HeaderFooterItem2 {
1994
+ /**
1995
+ * Whether to render the deck's icon logo in this zone: a slide's design.logo, then design.logo, then the primary organization's logo (LogoSet icon variants first, light ones on dark backgrounds). It is a generated image part in the same box as image; without a logo the engine reports unresolved-content at this field. Use image for a literal picture that is not the deck logo.
1996
+ */
1997
+ logo?: boolean;
1986
1998
  /**
1987
1999
  * Literal text rendered in this zone.
1988
2000
  */
@@ -2727,7 +2739,7 @@ interface Design1 {
2727
2739
  */
2728
2740
  background?: (BackgroundShortcut | Background);
2729
2741
  /**
2730
- * Deck logo assets used by layouts, covers, section dividers, headers, and footers. A string is the default logo source; object form provides light/dark, stacked, icon, and wordmark variants. When omitted, the renderer falls back to the primary organization logo.
2742
+ * Deck logo assets used by covers, section dividers, headers, footers and picture bullets. A string or Asset object is the default logo source; the LogoSet object form provides light/dark, stacked, icon, and wordmark variants (see LogoSet for the selection order). Source precedence: a slide's design.logo, then this value, then the primary organization's logo; absence inherits. Placement (reference engines, vetoable): on a cover or section slide (no body payload on a heading-only layout such as title, title-subtitle or section-divider, or no layout) the lockup variant is drawn at the top-left of the free area, inside the slide padding and below any header furniture, in a box 56 reference pixels tall and at most four times as wide; the tag/title/subtitle group then centers in the remaining span. Content slides never get an automatic logo. Header and footer zones draw the icon variant when they set logo: true, and design.listBullet 'image' draws it as the picture bullet. composeSlide returns the cover box as geometry.logo.
2731
2743
  */
2732
2744
  logo?: (Asset | LogoSet);
2733
2745
  /**
@@ -2847,11 +2859,11 @@ interface Design1 {
2847
2859
  };
2848
2860
  });
2849
2861
  /**
2850
- * Axis along which parallel body/content regions are arranged.
2862
+ * Axis along which parallel body content is arranged. Sets the root arrangement mode of blocks and root payloads when no composition.mode is set on the slide or on its layout record: 'vertical' is column, 'horizontal' is row. Precedence: composition.mode (the slide's own, else the layout record's geometry contract), then this value (slide design, then deck design), then the layout record's slideLayoutDirection, then automatic selection. A layout that carries a composition.mode keeps its grid or direction whatever this value says. Promoted regions (left, top:left, ...) keep their explicit geometry and nested groups keep their own composition.
2851
2863
  */
2852
2864
  contentDirection?: ("horizontal" | "vertical");
2853
2865
  /**
2854
- * For chart layouts, where the primary chart sits relative to supporting content. 'none' means chart regions have equal weight.
2866
+ * Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's contentTypeChartPrimary. When the slide has no promoted regions and no composition.mode of its own, and its root nodes mix at least one chart with other content, the first chart becomes a primary track and the other nodes form one synthetic sub-grid: 'left'/'right' is a two-track row and 'top'/'bottom' a two-track column, weighted 3:2 in favor of the chart; explicit root columns and weights are ignored while it applies. 'none' (the default) keeps the ordinary automatic grid with equal weight.
2855
2867
  */
2856
2868
  chartPrimary?: ("none" | "top" | "bottom" | "left" | "right");
2857
2869
  /**
@@ -2859,7 +2871,7 @@ interface Design1 {
2859
2871
  */
2860
2872
  imageFill?: ("crop" | "fit");
2861
2873
  /**
2862
- * Default bullet rendering style for list layouts.
2874
+ * Marker style for items and bullets lists. 'character' (the default) draws the glyph marker. 'image' draws the deck's icon logo (a slide's design.logo, then design.logo, then the primary organization's logo; light variants on dark backgrounds) as a picture bullet: a square of the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field.
2863
2875
  */
2864
2876
  listBullet?: ("character" | "image");
2865
2877
  [k: string]: unknown;
@@ -2931,7 +2943,7 @@ interface Catalogs {
2931
2943
  */
2932
2944
  interface CatalogEntry {
2933
2945
  /**
2934
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
2946
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
2935
2947
  */
2936
2948
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
2937
2949
  /**
@@ -2947,7 +2959,7 @@ interface CatalogEntry {
2947
2959
  */
2948
2960
  interface CatalogEntry1 {
2949
2961
  /**
2950
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
2962
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
2951
2963
  */
2952
2964
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
2953
2965
  /**
@@ -2963,7 +2975,7 @@ interface CatalogEntry1 {
2963
2975
  */
2964
2976
  interface CatalogEntry2 {
2965
2977
  /**
2966
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
2978
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
2967
2979
  */
2968
2980
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
2969
2981
  /**
@@ -2979,7 +2991,7 @@ interface CatalogEntry2 {
2979
2991
  */
2980
2992
  interface CatalogEntry3 {
2981
2993
  /**
2982
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
2994
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
2983
2995
  */
2984
2996
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
2985
2997
  /**
@@ -2995,7 +3007,7 @@ interface CatalogEntry3 {
2995
3007
  */
2996
3008
  interface CatalogEntry4 {
2997
3009
  /**
2998
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3010
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
2999
3011
  */
3000
3012
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3001
3013
  /**
@@ -3011,7 +3023,7 @@ interface CatalogEntry4 {
3011
3023
  */
3012
3024
  interface CatalogEntry5 {
3013
3025
  /**
3014
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3026
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3015
3027
  */
3016
3028
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3017
3029
  /**
@@ -3027,7 +3039,7 @@ interface CatalogEntry5 {
3027
3039
  */
3028
3040
  interface CatalogEntry6 {
3029
3041
  /**
3030
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3042
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3031
3043
  */
3032
3044
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3033
3045
  /**
@@ -3043,7 +3055,7 @@ interface CatalogEntry6 {
3043
3055
  */
3044
3056
  interface CatalogEntry7 {
3045
3057
  /**
3046
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3058
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3047
3059
  */
3048
3060
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3049
3061
  /**
@@ -3059,7 +3071,7 @@ interface CatalogEntry7 {
3059
3071
  */
3060
3072
  interface CatalogEntry8 {
3061
3073
  /**
3062
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3074
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3063
3075
  */
3064
3076
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3065
3077
  /**
@@ -3075,7 +3087,7 @@ interface CatalogEntry8 {
3075
3087
  */
3076
3088
  interface CatalogEntry9 {
3077
3089
  /**
3078
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3090
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3079
3091
  */
3080
3092
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3081
3093
  /**
@@ -3091,7 +3103,7 @@ interface CatalogEntry9 {
3091
3103
  */
3092
3104
  interface CatalogEntry10 {
3093
3105
  /**
3094
- * Single source or an ordered search path of sources. When omitted, the engine falls back to https://www.pptx.gallery/<kind>.
3106
+ * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3095
3107
  */
3096
3108
  source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3097
3109
  /**
@@ -1,5 +1,5 @@
1
1
  // src/generated/repo-readme.ts
2
- var repoReadmeRaw = '# Open Presentation Format (OPF)\n\n[![npm version](https://img.shields.io/npm/v/@openpresentation/opf?label=npm)](https://www.npmjs.com/package/@openpresentation/opf)\n[![npm downloads](https://img.shields.io/npm/dw/@openpresentation/opf)](https://www.npmjs.com/package/@openpresentation/opf)\n[![license](https://img.shields.io/npm/l/@openpresentation/opf)](./LICENSE)\n\nPublic npm package: [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf) (`npm install @openpresentation/opf`).\n\nOpen Presentation Format is the portable, human-readable JSON document format for slide decks.\n\nThis repository is the canonical home for the OPF **spec**, **JSON Schemas**, **catalog presets**, examples, generated developer types, local validation tooling, and integration docs for the render/edit/convert toolkit. OpenPresentation publishes open-source code and documentation only; it does not provide hosted APIs, hosted rendering functions, queues, storage, authentication, jobs, previews, SLAs, telemetry, or managed infrastructure.\n\nFor AI agents, use the [OPF skill set](docs/agent-skills.md) for authoring, layout, presets, editing, export, and schema inspection.\n\nPublished CLI 0.9.0 installs all six skills into your project with `npx @openpresentation/cli@0.9.0 skills install`. It uses local copies, preserves existing instructions and refuses to overwrite customized skills. See the [installation and update guide](docs/agent-skills.md) for personal or agent-specific targets and source development.\n\nFor a fresh Node 24 project that installs **published** packages (not this\ncheckout), follow the [developer quickstart](docs/quickstart.md) and the\n[compatibility matrix](docs/compatibility-matrix.md).\n\nFor LLM authoring, start with [the authoring guide](docs/llm-authoring.md), [dynamic composition](docs/dynamic-composition.md), and [local ecosystem verification](docs/ecosystem-development.md).\n\n## File naming\n\nOpen Presentation Format documents are JSON files. Use `*.opf.json` for complete OPF presentation documents, for example `board-review.opf.json` or `deck.opf.json`.\n\nAvoid using bare `*.opf` for OPF JSON. The `.opf` extension is already used by other document and project formats, while `.opf.json` keeps the OPF identity and still makes the underlying JSON format clear to editors, validators, agents, and version-control tooling.\n\n## Naming and reuse\n\nThe format name is **Open Presentation Format**. The schemas, catalogs, packages, and local tooling in this repository are free and open source under the MIT license, so third-party tools may read, write, validate, render, convert, and describe support for Open Presentation Format without adopting any product-specific branding.\n\n## Why OPF\n\n`.pptx` is a zipped bundle of XML. Humans can\'t diff it, LLMs can\'t read or write it reliably, and git can\'t track it meaningfully. Every change looks like a binary blob.\n\nOPF is plain JSON. A human can open it in an editor. A model can read and write it without guessing at schema-by-example. Decks live in git like the rest of your work.\n\nThat\'s the shift that lets LLMs actually *author* decks. When the format stops fighting them, models can do the work that matters \u2014 narrative structure, persuasive framing, data analysis, chart recommendations, ruthless revision passes \u2014 instead of wrestling with `<p:sp>` tags.\n\nAnd they don\'t start from a blank canvas. [pptx.gallery](https://pptx.gallery) is the human-browsable reference for OPF catalog presets: layouts, themes, color schemes, font schemes, chart types, narratives, audiences, purposes, tones, languages, and social platforms.\n\n## Start in three steps\n\n1. **Install the coordinated published packages** on Node 24. See [the developer quickstart](docs/quickstart.md) for the current pin set: core 0.11.0, renderer 0.9.0, editor 0.8.0, PPTX 0.9.1 and CLI 0.9.0.\n2. **Author, lint, paginate, preview and export.** Copy [`docs/quickstart/developer-quickstart.opf.json`](./docs/quickstart/developer-quickstart.opf.json) and run the commands in that guide. `validatePresentation` / `opf validate` is local schema checking, not visual verification.\n3. **Know the limits.** The [compatibility matrix](docs/compatibility-matrix.md) lists shipped APIs versus renderer issue 24, native PowerPoint issue 87, and other deferred work. Browse presets at [pptx.gallery](https://pptx.gallery).\n\nYour deck can live in git from the first commit. After installing dependencies and supplying referenced assets, these commands run locally without a model provider, account or hosted OPF API.\n\n## JavaScript and TypeScript\n\nThe canonical JavaScript/TypeScript package is published at [`packages/javascript`](./packages/javascript) as [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf). The schema is pre-stable (0.x \u2014 expect breaking changes between minor versions until 1.0). Its responsibility is local and format-level only:\n\n- export the canonical schemas from [`spec/`](./spec)\n- export bundled catalog records from [`spec/`](./spec)\n- export a typed raw spec file manifest for package-addressable `spec/` content\n- generate TypeScript types, with `Presentation` as the top-level type\n- validate OPF JSON and catalog records locally\n\nIt does not render `.pptx`, parse `.pptx`, generate content with AI, fetch remote catalogs, call hosted APIs, or provide managed services. Render/edit/convert packages live in separate MIT repos that depend on `@openpresentation/opf`. The format package also exposes pure composition geometry so those packages share layout behavior.\n\n## Toolkit libraries\n\nThe local toolkit lives in sibling repositories. See [ecosystem development](docs/ecosystem-development.md) for coordinated builds and verification, and [dynamic composition](docs/dynamic-composition.md) for portable layout rules.\n\n| Repo | Role | Boundary |\n|---|---|---|\n| `opf-render` | OPF to SVG/PNG/PDF | Local and embeddable rendering library |\n| `opf-editor` | WYSIWYG bindings/components | Headless editor primitives plus optional UI components |\n| `opf-pptx` | OPF to PPTX and PPTX to OPF | Pure local import/export library for browser and server use where supported |\n\nThese repos provide OSS primitives only. Downstream applications own hosting, auth, storage, collaboration, queues, previews, analytics, support, and workflow UX.\n\n## Usage\n\nInstall from npm:\n\n```sh\npnpm add @openpresentation/opf\n# or: npm install @openpresentation/opf\n```\n\nTo work on the package itself, clone this repo and build the workspace:\n\n```sh\npnpm install\npnpm build\n```\n\nUse the format package from JavaScript or TypeScript:\n\n```ts\nimport {\n presentation,\n audiences,\n purposes,\n tones,\n validatePresentation,\n} from "@openpresentation/opf";\n\nimport type { Presentation } from "@openpresentation/opf";\n\nconst deck: Presentation = {\n name: "Quarterly Review",\n slides: [{ title: "Quarterly Review", items: ["Revenue", "Product", "Hiring"] }],\n};\n\nconst result = validatePresentation(deck);\nconsole.log(result.valid); // schema correctness\nconsole.log(result.warnings); // advisory issues, e.g. unknown catalog ids\nconsole.log(audiences.length, purposes.length, tones.length);\n```\n\nUse focused imports when you only need one surface:\n\n```ts\nimport { presentation } from "@openpresentation/opf/schemas";\nimport { audiences, purposes } from "@openpresentation/opf/catalogs";\nimport { specFileEntries } from "@openpresentation/opf/spec-files";\nimport { validate } from "@openpresentation/opf/validator";\nimport type { Presentation } from "@openpresentation/opf/types";\n```\n\nUse raw JSON when an engine or resolver needs package-addressable files:\n\n```ts\nimport presentationSchema from "@openpresentation/opf/spec/schemas/opf.schema.json" with {\n type: "json",\n};\n```\n\nUse the [installable OPF CLI](./packages/cli/README.md) to create, validate, and edit files locally:\n\n```sh\npnpm --filter @openpresentation/cli build\nnode packages/cli/dist/index.js create deck.opf.json --title "Decision brief"\nnode packages/cli/dist/index.js validate deck.opf.json\nnode packages/cli/dist/index.js edit deck.opf.json --patch changes.json --in-place\n```\n\nSee [CSV and JSON data import](./docs/data-import.md) for editable tables and charts in the editor, CLI, and package API.\n\n## Layout\n\n| Path | Contents |\n|---|---|\n| [`spec/schemas/opf.schema.json`](./spec/schemas/opf.schema.json) | Canonical JSON Schema for top-level OPF `Presentation` documents. |\n| [`docs/how-opf-works.md`](./docs/how-opf-works.md) | Conceptual introduction: the document model, content shapes, catalog resolution, and the validation philosophy. Start here. |\n| [`docs/design-resolution.md`](./docs/design-resolution.md) | The design precedence algorithm (slide design \u2192 deck design \u2192 resolved theme \u2192 engine defaults) with worked examples. |\n| [`docs/schema-reference.md`](./docs/schema-reference.md) | Author-facing reference for top-level OPF fields and every presentation schema `$defs` object/type. |\n| [`docs/catalog-schema-reference.md`](./docs/catalog-schema-reference.md) | Author-facing reference for every companion catalog schema. |\n| [`docs/content-payloads.md`](./docs/content-payloads.md) | Author-facing notes for slide and region content payloads, including chart and table object shapes. |\n| [`docs/examples.md`](./docs/examples.md) | Guide to the expanded scenario-oriented examples under `examples/gallery/`. |\n| [`docs/live-editor.md`](./docs/live-editor.md) | Browser canvas, live OPF editing, font loading, published packages, and current fidelity limits. |\n| [`docs/release-process.md`](./docs/release-process.md) | Maintainer runbook for tagging, trusted npm publishing, verification, and GitHub release notes. |\n| [`spec/schemas/*.schema.json`](./spec/schemas) | Companion schemas for catalog records and sub-objects. |\n| [`spec/catalogs/<catalog-kind>/`](./spec/catalogs) | Canonical bundled catalog records. |\n| [`spec/openapi.yaml`](./spec/openapi.yaml) | Optional reference OpenAPI contract for downstream services that choose to expose OPF over HTTP. OpenPresentation does not host this API. |\n| [`examples/technical/`](./examples/technical) | Focused OPF fixtures for validator, renderer, catalog-resolution, design, content-payload, and region behavior. |\n| [`examples/gallery/`](./examples/gallery) | Broader OPF example decks organized by industry, function, education, government, presentation type, international, and design/media scenarios. |\n| [`packages/javascript/`](./packages/javascript) | Public pre-stable source for `@openpresentation/opf`. |\n| [`packages/cli/`](./packages/cli) | Installable local CLI for creating, validating, editing, and inspecting OPF. |\n| [`legacy/`](./legacy) | Tombstone for service-specific clients, CLIs, tool integrations, and workflows removed from the OpenPresentation OSS repo. |\n\n## OpenPresentation Boundary\n\nOpenPresentation defines the format, bundled presets, local validation, examples, docs, and planned local render/edit/convert libraries. It does not provide hosted functions or managed product surfaces.\n\nFuture non-JavaScript OPF packages should follow the same local-first boundary: Python and Go packages should expose schemas, types/models, catalogs, validation, and package-addressable assets. Future toolkit packages should expose embeddable library APIs with no required network calls, hosted callbacks, hidden telemetry, or managed infrastructure assumptions.\n\nThe published JavaScript package copies package-addressable OPF schemas, catalogs, reference assets, and the optional reference `spec/openapi.yaml` from `spec/`. It intentionally remains `@openpresentation/opf` instead of introducing a separate `@openpresentation/opf-spec` package so downstream imports can advance by semver-pinning one canonical package.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n';
2
+ var repoReadmeRaw = '# Open Presentation Format (OPF)\n\n[![npm version](https://img.shields.io/npm/v/@openpresentation/opf?label=npm)](https://www.npmjs.com/package/@openpresentation/opf)\n[![npm downloads](https://img.shields.io/npm/dw/@openpresentation/opf)](https://www.npmjs.com/package/@openpresentation/opf)\n[![license](https://img.shields.io/npm/l/@openpresentation/opf)](./LICENSE)\n\nPublic npm package: [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf) (`npm install @openpresentation/opf`).\n\nOpen Presentation Format is the portable, human-readable JSON document format for slide decks.\n\nThis repository is the canonical home for the OPF **spec**, **JSON Schemas**, **catalog presets**, examples, generated developer types, local validation tooling, and integration docs for the render/edit/convert toolkit. OpenPresentation publishes open-source code and documentation only; it does not provide hosted APIs, hosted rendering functions, queues, storage, authentication, jobs, previews, SLAs, telemetry, or managed infrastructure.\n\nFor AI agents, use the [OPF skill set](docs/agent-skills.md) for authoring, layout, presets, editing, export, and schema inspection.\n\nPublished CLI 0.9.1 installs all six skills into your project with `npx @openpresentation/cli@0.9.1 skills install`. It uses local copies, preserves existing instructions and refuses to overwrite customized skills. See the [installation and update guide](docs/agent-skills.md) for personal or agent-specific targets and source development.\n\nFor a fresh Node 24 project that installs **published** packages (not this\ncheckout), follow the [developer quickstart](docs/quickstart.md) and the\n[compatibility matrix](docs/compatibility-matrix.md).\n\nFor LLM authoring, start with [the authoring guide](docs/llm-authoring.md), [dynamic composition](docs/dynamic-composition.md), and [local ecosystem verification](docs/ecosystem-development.md).\n\n## File naming\n\nOpen Presentation Format documents are JSON files. Use `*.opf.json` for complete OPF presentation documents, for example `board-review.opf.json` or `deck.opf.json`.\n\nAvoid using bare `*.opf` for OPF JSON. The `.opf` extension is already used by other document and project formats, while `.opf.json` keeps the OPF identity and still makes the underlying JSON format clear to editors, validators, agents, and version-control tooling.\n\n## Naming and reuse\n\nThe format name is **Open Presentation Format**. The schemas, catalogs, packages, and local tooling in this repository are free and open source under the MIT license, so third-party tools may read, write, validate, render, convert, and describe support for Open Presentation Format without adopting any product-specific branding.\n\n## Why OPF\n\n`.pptx` is a zipped bundle of XML. Humans can\'t diff it, LLMs can\'t read or write it reliably, and git can\'t track it meaningfully. Every change looks like a binary blob.\n\nOPF is plain JSON. A human can open it in an editor. A model can read and write it without guessing at schema-by-example. Decks live in git like the rest of your work.\n\nThat\'s the shift that lets LLMs actually *author* decks. When the format stops fighting them, models can do the work that matters \u2014 narrative structure, persuasive framing, data analysis, chart recommendations, ruthless revision passes \u2014 instead of wrestling with `<p:sp>` tags.\n\nAnd they don\'t start from a blank canvas. [pptx.gallery](https://pptx.gallery) is the human-browsable reference for OPF catalog presets: layouts, themes, color schemes, font schemes, chart types, narratives, audiences, purposes, tones, languages, and social platforms.\n\n## Start in three steps\n\n1. **Install the coordinated published packages** on Node 24. See [the developer quickstart](docs/quickstart.md) for the current pin set: core 0.11.3, renderer 0.11.8, editor 0.10.5, PPTX 0.11.6 and CLI 0.9.1.\n2. **Author, lint, paginate, preview and export.** Copy [`docs/quickstart/developer-quickstart.opf.json`](./docs/quickstart/developer-quickstart.opf.json) and run the commands in that guide. `validatePresentation` / `opf validate` is local schema checking, not visual verification.\n3. **Know the limits.** The [compatibility matrix](docs/compatibility-matrix.md) lists shipped APIs versus renderer issue 24, native PowerPoint issue 87, and other deferred work. Browse presets at [pptx.gallery](https://pptx.gallery).\n\nYour deck can live in git from the first commit. After installing dependencies and supplying referenced assets, these commands run locally without a model provider, account or hosted OPF API.\n\n## JavaScript and TypeScript\n\nThe canonical JavaScript/TypeScript package is published at [`packages/javascript`](./packages/javascript) as [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf). The schema is pre-stable (0.x \u2014 expect breaking changes between minor versions until 1.0). Its responsibility is local and format-level only:\n\n- export the canonical schemas from [`spec/`](./spec)\n- export bundled catalog records from [`spec/`](./spec)\n- export a typed raw spec file manifest for package-addressable `spec/` content\n- generate TypeScript types, with `Presentation` as the top-level type\n- validate OPF JSON and catalog records locally\n\nIt does not render `.pptx`, parse `.pptx`, generate content with AI, fetch remote catalogs, call hosted APIs, or provide managed services. Render/edit/convert packages live in separate MIT repos that depend on `@openpresentation/opf`. The format package also exposes pure composition geometry so those packages share layout behavior.\n\n## Toolkit libraries\n\nThe local toolkit lives in sibling repositories. See [ecosystem development](docs/ecosystem-development.md) for coordinated builds and verification, and [dynamic composition](docs/dynamic-composition.md) for portable layout rules.\n\n| Repo | Role | Boundary |\n|---|---|---|\n| `opf-render` | OPF to SVG/PNG/PDF | Local and embeddable rendering library |\n| `opf-editor` | WYSIWYG bindings/components | Headless editor primitives plus optional UI components |\n| `opf-pptx` | OPF to PPTX and PPTX to OPF | Pure local import/export library for browser and server use where supported |\n\nThese repos provide OSS primitives only. Downstream applications own hosting, auth, storage, collaboration, queues, previews, analytics, support, and workflow UX.\n\n## Usage\n\nInstall from npm:\n\n```sh\npnpm add @openpresentation/opf\n# or: npm install @openpresentation/opf\n```\n\nTo work on the package itself, clone this repo and build the workspace:\n\n```sh\npnpm install\npnpm build\n```\n\nUse the format package from JavaScript or TypeScript:\n\n```ts\nimport {\n presentation,\n audiences,\n purposes,\n tones,\n validatePresentation,\n} from "@openpresentation/opf";\n\nimport type { Presentation } from "@openpresentation/opf";\n\nconst deck: Presentation = {\n name: "Quarterly Review",\n slides: [{ title: "Quarterly Review", items: ["Revenue", "Product", "Hiring"] }],\n};\n\nconst result = validatePresentation(deck);\nconsole.log(result.valid); // schema correctness\nconsole.log(result.warnings); // advisory issues, e.g. unknown catalog ids\nconsole.log(audiences.length, purposes.length, tones.length);\n```\n\nUse focused imports when you only need one surface:\n\n```ts\nimport { presentation } from "@openpresentation/opf/schemas";\nimport { audiences, purposes } from "@openpresentation/opf/catalogs";\nimport { specFileEntries } from "@openpresentation/opf/spec-files";\nimport { validate } from "@openpresentation/opf/validator";\nimport type { Presentation } from "@openpresentation/opf/types";\n```\n\nUse raw JSON when an engine or resolver needs package-addressable files:\n\n```ts\nimport presentationSchema from "@openpresentation/opf/spec/schemas/opf.schema.json" with {\n type: "json",\n};\n```\n\nUse the [installable OPF CLI](./packages/cli/README.md) to create, validate, and edit files locally:\n\n```sh\npnpm --filter @openpresentation/cli build\nnode packages/cli/dist/index.js create deck.opf.json --title "Decision brief"\nnode packages/cli/dist/index.js validate deck.opf.json\nnode packages/cli/dist/index.js edit deck.opf.json --patch changes.json --in-place\n```\n\nSee [CSV and JSON data import](./docs/data-import.md) for editable tables and charts in the editor, CLI, and package API.\n\n## Layout\n\n| Path | Contents |\n|---|---|\n| [`spec/schemas/opf.schema.json`](./spec/schemas/opf.schema.json) | Canonical JSON Schema for top-level OPF `Presentation` documents. |\n| [`docs/how-opf-works.md`](./docs/how-opf-works.md) | Conceptual introduction: the document model, content shapes, catalog resolution, and the validation philosophy. Start here. |\n| [`docs/design-resolution.md`](./docs/design-resolution.md) | The design precedence algorithm (slide design \u2192 deck design \u2192 resolved theme \u2192 engine defaults) with worked examples. |\n| [`docs/schema-reference.md`](./docs/schema-reference.md) | Author-facing reference for top-level OPF fields and every presentation schema `$defs` object/type. |\n| [`docs/catalog-schema-reference.md`](./docs/catalog-schema-reference.md) | Author-facing reference for every companion catalog schema. |\n| [`docs/content-payloads.md`](./docs/content-payloads.md) | Author-facing notes for slide and region content payloads, including chart and table object shapes. |\n| [`docs/examples.md`](./docs/examples.md) | Guide to the expanded scenario-oriented examples under `examples/gallery/`. |\n| [`docs/live-editor.md`](./docs/live-editor.md) | Browser canvas, live OPF editing, font loading, published packages, and current fidelity limits. |\n| [`docs/release-process.md`](./docs/release-process.md) | Maintainer runbook for tagging, trusted npm publishing, verification, and GitHub release notes. |\n| [`spec/schemas/*.schema.json`](./spec/schemas) | Companion schemas for catalog records and sub-objects. |\n| [`spec/catalogs/<catalog-kind>/`](./spec/catalogs) | Canonical bundled catalog records. |\n| [`spec/openapi.yaml`](./spec/openapi.yaml) | Optional reference OpenAPI contract for downstream services that choose to expose OPF over HTTP. OpenPresentation does not host this API. |\n| [`examples/technical/`](./examples/technical) | Focused OPF fixtures for validator, renderer, catalog-resolution, design, content-payload, and region behavior. |\n| [`examples/gallery/`](./examples/gallery) | Broader OPF example decks organized by industry, function, education, government, presentation type, international, and design/media scenarios. |\n| [`packages/javascript/`](./packages/javascript) | Public pre-stable source for `@openpresentation/opf`. |\n| [`packages/cli/`](./packages/cli) | Installable local CLI for creating, validating, editing, and inspecting OPF. |\n| [`legacy/`](./legacy) | Tombstone for service-specific clients, CLIs, tool integrations, and workflows removed from the OpenPresentation OSS repo. |\n\n## OpenPresentation Boundary\n\nOpenPresentation defines the format, bundled presets, local validation, examples, docs, and planned local render/edit/convert libraries. It does not provide hosted functions or managed product surfaces.\n\nFuture non-JavaScript OPF packages should follow the same local-first boundary: Python and Go packages should expose schemas, types/models, catalogs, validation, and package-addressable assets. Future toolkit packages should expose embeddable library APIs with no required network calls, hosted callbacks, hidden telemetry, or managed infrastructure assumptions.\n\nThe published JavaScript package copies package-addressable OPF schemas, catalogs, reference assets, and the optional reference `spec/openapi.yaml` from `spec/`. It intentionally remains `@openpresentation/opf` instead of introducing a separate `@openpresentation/opf-spec` package so downstream imports can advance by semver-pinning one canonical package.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n';
3
3
 
4
4
  // src/repo-readme.ts
5
5
  var repoReadme = repoReadmeRaw;
package/dist/schemas.js CHANGED
@@ -1 +1 @@
1
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-LTSDDBNW.js';
1
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-KJKASEPE.js';
@@ -9,8 +9,9 @@ New to the format? Read [`docs/how-opf-works.md`](../docs/how-opf-works.md) firs
9
9
  | Path | Contents |
10
10
  |---|---|
11
11
  | [`schemas/opf.schema.json`](./schemas/opf.schema.json) | Canonical JSON Schema for top-level OPF `Presentation` documents (`$id: https://openpresentation.org/schema/opf/v1`). |
12
- | [`schemas/*.schema.json`](./schemas) | Companion schemas for catalog records. Each has a stable `$id` of the form `https://openpresentation.org/schema/opf-<kind>/v1` (e.g. `opf-narrative`, `opf-theme`, `opf-chart-type`). Two schemas in this directory — `catalog-index.schema.json` and `layout-preview-index.schema.json` — describe repo-internal *index* files instead (see rows below); they are not OPF document or catalog-record schemas and are intentionally excluded from the package's published/typed schema surface (`schemaNames` / generated types). |
13
- | [`catalogs/<kind>/`](./catalogs) | Bundled catalog records, one JSON file per record plus an `index.json` per kind. These are the same records served from `https://www.pptx.gallery/<kind>`. Every `index.json` validates against `schemas/catalog-index.schema.json` (`$id: https://openpresentation.org/schema/opf-catalog-index/v1`), a generic shape shared across all 11 kinds. |
12
+ | [`schemas/*.schema.json`](./schemas) | Companion schemas for catalog records. Each has a stable `$id` of the form `https://openpresentation.org/schema/opf-<kind>/v1` (e.g. `opf-narrative`, `opf-theme`, `opf-chart-type`). Three schemas in this directory — `catalog-index.schema.json`, `catalog-manifest.schema.json`, and `layout-preview-index.schema.json` — describe repo-internal index and manifest files instead (see rows below); they are not OPF document or catalog-record schemas and are intentionally excluded from the package's published/typed schema surface (`schemaNames` / generated types). |
13
+ | [`catalogs/<kind>/`](./catalogs) | Bundled catalog records, one JSON file per record plus an `index.json` per kind. They are a pinned snapshot of the default catalog that pptx.gallery publishes at `https://www.pptx.gallery/<kind>/index.json`: engines resolve the default catalog from these files and never fetch it at run time. Every `index.json` validates against `schemas/catalog-index.schema.json` (`$id: https://openpresentation.org/schema/opf-catalog-index/v1`), a generic shape shared across all 11 kinds, and carries a `contentSha256` of its records. Do not edit these files by hand; change the gallery and run `scripts/sync-gallery-catalog.mjs` (see [`docs/default-catalog.md`](../docs/default-catalog.md)). |
14
+ | [`catalogs/manifest.json`](./catalogs/manifest.json) | Pins the snapshot: the pptx-gallery commit it came from and, per kind, `mirror`/`subset` mode, record count and content hash. Validates against `schemas/catalog-manifest.schema.json` (`$id: https://openpresentation.org/schema/opf-catalog-manifest/v1`). `check:spec` fails when the bundled records no longer match it. |
14
15
  | [`previews/layouts/`](./previews/layouts) | Vendored HTML previews for the **slide archetype gallery** (e.g. `swot-analysis`, `agenda`, `org-chart`) — see "Preview gallery vs. layout catalog" below. Its `index.json` validates against `schemas/layout-preview-index.schema.json` (`$id: https://openpresentation.org/schema/opf-layout-preview-index/v1`). |
15
16
  | [`reference/engine-defaults.json`](./reference/engine-defaults.json) | Reference example of engine-side defaults. Engine configuration, not part of the OPF document contract; it has no JSON Schema. |
16
17
  | [`openapi.yaml`](./openapi.yaml) | Optional reference OpenAPI 3.1 contract for downstream services that choose to expose OPF operations (validate, parse, convert, generate, render) over HTTP. OpenPresentation does not host this API; implementers can use it as a starting point for their own hosted or internal services. Local format tooling never needs it. |
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
+ "kind": "audiences",
3
4
  "version": "1",
4
5
  "description": "Catalog of presentation audiences available in the openpresentation.org catalog. Each entry is a lightweight summary; full audience records (seniority, technical fluency, decision power, attention budget, recommended narratives and tones) live in the per-id JSON files alongside this index. Audiences are referenced from OPF documents via audience. The singular ids from executive onward match the audience pages on pptx.gallery and carry its recommendations; they coexist with the older team-shaped archetypes (executives, investors, customers, and so on), and both sets stay valid.",
6
+ "contentSha256": "90ab1b5a3c55ff36ec8c05595a2b0f90a18c108af82c959b33f204f077ee4e51",
5
7
  "records": [
6
8
  {
7
9
  "id": "executives",