@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.
- package/README.md +28 -23
- package/dist/{catalogs-ywCamd8C.d.ts → catalogs-D-yyQWCQ.d.ts} +86 -208
- package/dist/catalogs.d.ts +2 -2
- package/dist/catalogs.js +1 -1
- package/dist/{chart-data-Cdr6rRVV.d.ts → chart-data-B_3z9VTb.d.ts} +16 -5
- package/dist/chunk-4LDGKLUC.js +192 -0
- package/dist/{chunk-II5EYKZU.js → chunk-4VJDTF55.js} +2 -92
- package/dist/chunk-5ZU6JAPP.js +83 -0
- package/dist/{chunk-MPM7NRG7.js → chunk-6OXY2CP3.js} +1716 -744
- package/dist/{chunk-IS2CPNVJ.js → chunk-BFLVSVA7.js} +26 -26
- package/dist/chunk-CSQHPVGL.js +94 -0
- package/dist/{chunk-GJKJL4YY.js → chunk-D3TY4TT6.js} +34 -412
- package/dist/chunk-JDJBDYSR.js +4167 -0
- package/dist/{chunk-7QBCWNWL.js → chunk-LS2FMPI5.js} +1086 -1092
- package/dist/{chunk-ATGDDJPX.js → chunk-Q2TCMN56.js} +3 -3
- package/dist/chunk-UPQQD7MA.js +1840 -0
- package/dist/{chunk-RAYB46AB.js → chunk-XIZUK2XM.js} +32 -30
- package/dist/{chunk-E34DJ5LL.js → chunk-XOZ4KMSR.js} +2427 -10820
- package/dist/chunk-Z65B2B77.js +601 -0
- package/dist/{composition-D7we69Tr.d.ts → composition-_WEwBe2a.d.ts} +738 -27
- package/dist/composition.d.ts +2 -2
- package/dist/composition.js +2 -2
- package/dist/convert.d.ts +9 -7
- package/dist/convert.js +33 -19
- package/dist/data.d.ts +4 -4
- package/dist/data.js +3 -3
- package/dist/diff.d.ts +4 -4
- package/dist/diff.js +6 -604
- package/dist/docs.js +54 -42
- package/dist/examples.d.ts +1 -1
- package/dist/examples.js +1366 -2908
- package/dist/finding-C_por275.d.ts +212 -0
- package/dist/format.d.ts +4 -4
- package/dist/format.js +2 -83
- package/dist/index.d.ts +318 -284
- package/dist/index.js +530 -943
- package/dist/markdown.d.ts +28 -27
- package/dist/markdown.js +8 -1940
- package/dist/pagination-BZpXLvFL.d.ts +119 -0
- package/dist/pagination.d.ts +5 -61
- package/dist/pagination.js +5 -5
- package/dist/patch.d.ts +12 -23
- package/dist/patch.js +5 -5
- package/dist/{presentation-mG-IYErQ.d.ts → presentation-C5eHkevA.d.ts} +350 -506
- package/dist/repo-readme.js +1 -1
- package/dist/{schemas-BbPonsTz.d.ts → schemas-DDpqAgyS.d.ts} +31 -17
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.js +1 -1
- package/dist/spec/README.md +10 -5
- package/dist/spec/catalogs/audiences/index.json +2 -50
- package/dist/spec/catalogs/chart-types/100pct-stacked-area.json +21 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar.json +22 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-column.json +22 -0
- package/dist/spec/catalogs/chart-types/area.json +2 -60
- package/dist/spec/catalogs/chart-types/bar.json +2 -48
- package/dist/spec/catalogs/chart-types/box-and-whisker.json +2 -132
- package/dist/spec/catalogs/chart-types/column.json +2 -52
- package/dist/spec/catalogs/chart-types/combo.json +37 -0
- package/dist/spec/catalogs/chart-types/doughnut.json +2 -40
- package/dist/spec/catalogs/chart-types/filled-radar.json +2 -52
- package/dist/spec/catalogs/chart-types/funnel.json +2 -46
- package/dist/spec/catalogs/chart-types/histogram.json +2 -149
- package/dist/spec/catalogs/chart-types/index.json +50 -520
- package/dist/spec/catalogs/chart-types/line-with-markers.json +2 -60
- package/dist/spec/catalogs/chart-types/line.json +2 -60
- package/dist/spec/catalogs/chart-types/pareto.json +2 -50
- package/dist/spec/catalogs/chart-types/pie.json +2 -40
- package/dist/spec/catalogs/chart-types/radar-with-markers.json +2 -52
- package/dist/spec/catalogs/chart-types/radar.json +2 -52
- package/dist/spec/catalogs/chart-types/scatter.json +2 -73
- package/dist/spec/catalogs/chart-types/stacked-area.json +21 -0
- package/dist/spec/catalogs/chart-types/stacked-bar.json +22 -0
- package/dist/spec/catalogs/chart-types/stacked-column.json +22 -0
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers.json +22 -0
- package/dist/spec/catalogs/chart-types/stacked-line.json +21 -0
- package/dist/spec/catalogs/chart-types/treemap.json +2 -48
- package/dist/spec/catalogs/chart-types/waterfall.json +2 -52
- package/dist/spec/catalogs/chart-types/world.json +2 -64
- package/dist/spec/catalogs/font-schemes/angsana-new.json +2 -2
- package/dist/spec/catalogs/font-schemes/aparajita.json +3 -3
- package/dist/spec/catalogs/font-schemes/aptos.json +1 -1
- package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +2 -2
- package/dist/spec/catalogs/font-schemes/arial.json +1 -1
- package/dist/spec/catalogs/font-schemes/batang.json +2 -2
- package/dist/spec/catalogs/font-schemes/bookman.json +1 -1
- package/dist/spec/catalogs/font-schemes/calibri.json +1 -1
- package/dist/spec/catalogs/font-schemes/century-schoolbook.json +1 -1
- package/dist/spec/catalogs/font-schemes/consolas.json +2 -4
- package/dist/spec/catalogs/font-schemes/constantia.json +1 -1
- package/dist/spec/catalogs/font-schemes/courier-new.json +2 -4
- package/dist/spec/catalogs/font-schemes/daunpenh.json +2 -2
- package/dist/spec/catalogs/font-schemes/david.json +2 -2
- package/dist/spec/catalogs/font-schemes/dilleniaupc.json +2 -2
- package/dist/spec/catalogs/font-schemes/fangsong.json +2 -2
- package/dist/spec/catalogs/font-schemes/garamond.json +1 -1
- package/dist/spec/catalogs/font-schemes/gautami.json +2 -2
- package/dist/spec/catalogs/font-schemes/georgia.json +1 -1
- package/dist/spec/catalogs/font-schemes/gisha.json +3 -3
- package/dist/spec/catalogs/font-schemes/grandview.json +1 -1
- package/dist/spec/catalogs/font-schemes/gungsuh.json +2 -2
- package/dist/spec/catalogs/font-schemes/impact.json +1 -1
- package/dist/spec/catalogs/font-schemes/index.json +1 -1
- package/dist/spec/catalogs/font-schemes/kalinga.json +2 -2
- package/dist/spec/catalogs/font-schemes/kartika.json +2 -2
- package/dist/spec/catalogs/font-schemes/khmer-ui.json +2 -2
- package/dist/spec/catalogs/font-schemes/latha.json +2 -2
- package/dist/spec/catalogs/font-schemes/lucida-sans.json +1 -1
- package/dist/spec/catalogs/font-schemes/malgun-gothic.json +2 -2
- package/dist/spec/catalogs/font-schemes/mangal.json +4 -5
- package/dist/spec/catalogs/font-schemes/meiryo.json +2 -2
- package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +2 -2
- package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +5 -5
- package/dist/spec/catalogs/font-schemes/mingliu.json +2 -2
- package/dist/spec/catalogs/font-schemes/miriam.json +2 -2
- package/dist/spec/catalogs/font-schemes/montserrat.json +1 -1
- package/dist/spec/catalogs/font-schemes/ms-mincho.json +2 -2
- package/dist/spec/catalogs/font-schemes/nirmala-ui.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +3 -3
- package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +4 -4
- package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +3 -3
- package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +3 -3
- package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +5 -5
- package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +2 -2
- package/dist/spec/catalogs/font-schemes/noto-sans.json +5 -5
- package/dist/spec/catalogs/font-schemes/nyala.json +2 -2
- package/dist/spec/catalogs/font-schemes/open-sans.json +1 -1
- package/dist/spec/catalogs/font-schemes/pmingliu.json +2 -2
- package/dist/spec/catalogs/font-schemes/poppins.json +1 -1
- package/dist/spec/catalogs/font-schemes/pt-serif.json +1 -1
- package/dist/spec/catalogs/font-schemes/raavi.json +2 -2
- package/dist/spec/catalogs/font-schemes/raleway.json +1 -1
- package/dist/spec/catalogs/font-schemes/roboto.json +1 -1
- package/dist/spec/catalogs/font-schemes/rockwell.json +1 -1
- package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +4 -4
- package/dist/spec/catalogs/font-schemes/seaford.json +1 -1
- package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +1 -1
- package/dist/spec/catalogs/font-schemes/segoe-ui.json +1 -1
- package/dist/spec/catalogs/font-schemes/shonar-bangla.json +3 -3
- package/dist/spec/catalogs/font-schemes/shruti.json +2 -2
- package/dist/spec/catalogs/font-schemes/simsun.json +2 -2
- package/dist/spec/catalogs/font-schemes/skeena.json +1 -1
- package/dist/spec/catalogs/font-schemes/sylfaen.json +3 -3
- package/dist/spec/catalogs/font-schemes/tahoma.json +1 -1
- package/dist/spec/catalogs/font-schemes/tenorite.json +1 -1
- package/dist/spec/catalogs/font-schemes/times-new-roman.json +1 -1
- package/dist/spec/catalogs/font-schemes/traditional-arabic.json +4 -4
- package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +1 -1
- package/dist/spec/catalogs/font-schemes/tunga.json +2 -2
- package/dist/spec/catalogs/font-schemes/verdana.json +1 -1
- package/dist/spec/catalogs/font-schemes/vrinda.json +2 -2
- package/dist/spec/catalogs/font-schemes/yu-gothic.json +2 -2
- package/dist/spec/catalogs/layouts/action-plan.json +9 -15
- package/dist/spec/catalogs/layouts/agenda.json +8 -15
- package/dist/spec/catalogs/layouts/appendix-index.json +7 -15
- package/dist/spec/catalogs/layouts/architecture-stack.json +9 -15
- package/dist/spec/catalogs/layouts/assumptions-dependencies.json +9 -15
- package/dist/spec/catalogs/layouts/before-after.json +9 -15
- package/dist/spec/catalogs/layouts/benchmark-target-table.json +9 -15
- package/dist/spec/catalogs/layouts/blank.json +11 -1
- package/dist/spec/catalogs/layouts/bullet-list.json +9 -15
- package/dist/spec/catalogs/layouts/business-model-canvas.json +9 -15
- package/dist/spec/catalogs/layouts/capability-map.json +14 -16
- package/dist/spec/catalogs/layouts/case-study.json +9 -15
- package/dist/spec/catalogs/layouts/chapter-recap.json +8 -15
- package/dist/spec/catalogs/layouts/chart-1x.json +15 -0
- package/dist/spec/catalogs/layouts/chart-2x.json +15 -0
- package/dist/spec/catalogs/layouts/chart-3x.json +15 -0
- package/dist/spec/catalogs/layouts/circular-lifecycle.json +9 -15
- package/dist/spec/catalogs/layouts/code-1x.json +10 -0
- package/dist/spec/catalogs/layouts/comparison.json +9 -15
- package/dist/spec/catalogs/layouts/competitive-landscape.json +14 -16
- package/dist/spec/catalogs/layouts/customer-journey.json +14 -16
- package/dist/spec/catalogs/layouts/customer-logos.json +9 -15
- package/dist/spec/catalogs/layouts/dashboard.json +9 -15
- package/dist/spec/catalogs/layouts/data-visualization.json +9 -15
- package/dist/spec/catalogs/layouts/decision-tree.json +14 -16
- package/dist/spec/catalogs/layouts/detailed-data-table.json +9 -15
- package/dist/spec/catalogs/layouts/ecosystem-map.json +14 -16
- package/dist/spec/catalogs/layouts/executive-decision.json +9 -15
- package/dist/spec/catalogs/layouts/executive-summary.json +9 -15
- package/dist/spec/catalogs/layouts/extract/canonical.json +8 -8
- package/dist/spec/catalogs/layouts/faq.json +9 -15
- package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +9 -15
- package/dist/spec/catalogs/layouts/forecast-scenario.json +9 -15
- package/dist/spec/catalogs/layouts/funnel-pyramid.json +9 -15
- package/dist/spec/catalogs/layouts/gantt-project-plan.json +9 -15
- package/dist/spec/catalogs/layouts/geographic-map.json +13 -15
- package/dist/spec/catalogs/layouts/heatmap-cohort.json +9 -15
- package/dist/spec/catalogs/layouts/hub-and-spoke.json +9 -15
- package/dist/spec/catalogs/layouts/icon-grid.json +14 -16
- package/dist/spec/catalogs/layouts/image-1x.json +11 -1
- package/dist/spec/catalogs/layouts/image-2x.json +12 -2
- package/dist/spec/catalogs/layouts/image-3x.json +13 -3
- package/dist/spec/catalogs/layouts/image-bleed.json +12 -2
- package/dist/spec/catalogs/layouts/image-focus.json +14 -16
- package/dist/spec/catalogs/layouts/index.json +1 -1
- package/dist/spec/catalogs/layouts/key-takeaway.json +8 -15
- package/dist/spec/catalogs/layouts/kpi-scorecard.json +9 -15
- package/dist/spec/catalogs/layouts/list-1x.json +17 -1
- package/dist/spec/catalogs/layouts/list-2x.json +16 -0
- package/dist/spec/catalogs/layouts/list-3x.json +16 -0
- package/dist/spec/catalogs/layouts/list-4x.json +16 -0
- package/dist/spec/catalogs/layouts/list-5x.json +16 -0
- package/dist/spec/catalogs/layouts/list-6x.json +16 -0
- package/dist/spec/catalogs/layouts/logic-tree.json +9 -15
- package/dist/spec/catalogs/layouts/market-size.json +9 -15
- package/dist/spec/catalogs/layouts/matrix-quadrant.json +9 -15
- package/dist/spec/catalogs/layouts/media-1x.json +11 -1
- package/dist/spec/catalogs/layouts/network-dependency-map.json +13 -15
- package/dist/spec/catalogs/layouts/number-1x.json +16 -1
- package/dist/spec/catalogs/layouts/number-2x.json +15 -0
- package/dist/spec/catalogs/layouts/number-3x.json +15 -0
- package/dist/spec/catalogs/layouts/number-4x.json +15 -0
- package/dist/spec/catalogs/layouts/number-5x.json +15 -0
- package/dist/spec/catalogs/layouts/number-6x.json +15 -0
- package/dist/spec/catalogs/layouts/one-column-explainer.json +9 -15
- package/dist/spec/catalogs/layouts/org-chart.json +9 -15
- package/dist/spec/catalogs/layouts/persona-grid.json +14 -16
- package/dist/spec/catalogs/layouts/photo-grid.json +17 -19
- package/dist/spec/catalogs/layouts/pricing-table.json +9 -15
- package/dist/spec/catalogs/layouts/process-flow.json +9 -15
- package/dist/spec/catalogs/layouts/product-feature.json +14 -16
- package/dist/spec/catalogs/layouts/pros-cons.json +9 -15
- package/dist/spec/catalogs/layouts/qa-discussion.json +7 -15
- package/dist/spec/catalogs/layouts/quote-1x.json +11 -1
- package/dist/spec/catalogs/layouts/quote-highlight.json +9 -15
- package/dist/spec/catalogs/layouts/raci-matrix.json +9 -15
- package/dist/spec/catalogs/layouts/risk-heatmap.json +9 -15
- package/dist/spec/catalogs/layouts/roadmap.json +9 -15
- package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +14 -16
- package/dist/spec/catalogs/layouts/section-divider.json +8 -15
- package/dist/spec/catalogs/layouts/single-message-statement.json +8 -15
- package/dist/spec/catalogs/layouts/stats-metrics.json +9 -15
- package/dist/spec/catalogs/layouts/status-rag.json +9 -15
- package/dist/spec/catalogs/layouts/swimlane-process.json +14 -16
- package/dist/spec/catalogs/layouts/swot-analysis.json +9 -15
- package/dist/spec/catalogs/layouts/table-1x.json +10 -0
- package/dist/spec/catalogs/layouts/team-bio.json +14 -16
- package/dist/spec/catalogs/layouts/testimonial-grid.json +9 -15
- package/dist/spec/catalogs/layouts/text-1x.json +11 -1
- package/dist/spec/catalogs/layouts/text-2x.json +10 -0
- package/dist/spec/catalogs/layouts/text-3x.json +10 -0
- package/dist/spec/catalogs/layouts/thank-you-cta.json +8 -15
- package/dist/spec/catalogs/layouts/three-column.json +9 -15
- package/dist/spec/catalogs/layouts/timeline-1x.json +11 -1
- package/dist/spec/catalogs/layouts/timeline.json +9 -15
- package/dist/spec/catalogs/layouts/title-slide.json +8 -15
- package/dist/spec/catalogs/layouts/title-subtitle.json +11 -1
- package/dist/spec/catalogs/layouts/title.json +11 -1
- package/dist/spec/catalogs/layouts/two-column.json +9 -15
- package/dist/spec/catalogs/layouts/venn-overlap.json +9 -15
- package/dist/spec/catalogs/layouts/waterfall-bridge.json +9 -15
- package/dist/spec/catalogs/layouts/wheel-radial.json +9 -15
- package/dist/spec/catalogs/manifest.json +8 -8
- package/dist/spec/catalogs/narratives/board-meeting.json +45 -45
- package/dist/spec/catalogs/narratives/business-narrative.json +19 -19
- package/dist/spec/catalogs/narratives/business-review.json +27 -27
- package/dist/spec/catalogs/narratives/capacity-planning.json +19 -19
- package/dist/spec/catalogs/narratives/challenge-resolution.json +17 -17
- package/dist/spec/catalogs/narratives/change-story.json +13 -13
- package/dist/spec/catalogs/narratives/classic-story.json +17 -17
- package/dist/spec/catalogs/narratives/company-intro.json +21 -21
- package/dist/spec/catalogs/narratives/conference-talk.json +4 -4
- package/dist/spec/catalogs/narratives/data-story.json +13 -14
- package/dist/spec/catalogs/narratives/early-startup-pitch.json +27 -27
- package/dist/spec/catalogs/narratives/educate.json +21 -21
- package/dist/spec/catalogs/narratives/employee-review.json +19 -19
- package/dist/spec/catalogs/narratives/failure-analysis.json +23 -23
- package/dist/spec/catalogs/narratives/focus.json +27 -27
- package/dist/spec/catalogs/narratives/golden-circle.json +4 -4
- package/dist/spec/catalogs/narratives/heros-journey.json +13 -13
- package/dist/spec/catalogs/narratives/index.json +145 -145
- package/dist/spec/catalogs/narratives/innovation.json +21 -21
- package/dist/spec/catalogs/narratives/justice.json +25 -25
- package/dist/spec/catalogs/narratives/marketing-strategy.json +25 -25
- package/dist/spec/catalogs/narratives/performance-improvement-plan.json +19 -19
- package/dist/spec/catalogs/narratives/performance-review.json +25 -25
- package/dist/spec/catalogs/narratives/persuade.json +17 -17
- package/dist/spec/catalogs/narratives/persuasive-sales.json +19 -19
- package/dist/spec/catalogs/narratives/pitch-deck.json +6 -6
- package/dist/spec/catalogs/narratives/problem-solution.json +5 -5
- package/dist/spec/catalogs/narratives/product-launch.json +23 -23
- package/dist/spec/catalogs/narratives/project-proposal.json +23 -23
- package/dist/spec/catalogs/narratives/pyramid-principle.json +9 -9
- package/dist/spec/catalogs/narratives/qbr.json +8 -8
- package/dist/spec/catalogs/narratives/rags-to-riches.json +17 -17
- package/dist/spec/catalogs/narratives/reveal.json +19 -19
- package/dist/spec/catalogs/narratives/scqa.json +4 -4
- package/dist/spec/catalogs/narratives/situation-complication-resolution.json +11 -11
- package/dist/spec/catalogs/narratives/sparkline.json +11 -11
- package/dist/spec/catalogs/narratives/star-method.json +11 -11
- package/dist/spec/catalogs/narratives/status-update.json +15 -15
- package/dist/spec/catalogs/narratives/strategic-advisory.json +17 -17
- package/dist/spec/catalogs/narratives/strategic-narrative.json +4 -4
- package/dist/spec/catalogs/narratives/survey-analysis.json +23 -23
- package/dist/spec/catalogs/narratives/survival-story.json +23 -23
- package/dist/spec/catalogs/narratives/transformation-arc.json +4 -4
- package/dist/spec/catalogs/narratives/trend-analysis.json +17 -17
- package/dist/spec/catalogs/narratives/underdog-victory.json +19 -19
- package/dist/spec/catalogs/narratives/venture-pitch.json +27 -27
- package/dist/spec/catalogs/narratives/vision-roadmap.json +13 -13
- package/dist/spec/catalogs/narratives/weekly-progress.json +23 -23
- package/dist/spec/catalogs/narratives/what-so-what-now-what.json +9 -9
- package/dist/spec/openapi.yaml +2 -5
- package/dist/spec/reference/engine-defaults.json +2 -2
- package/dist/spec/schemas/audience.schema.json +1 -1
- package/dist/spec/schemas/catalog-index.schema.json +2 -2
- package/dist/spec/schemas/chart-type.schema.json +19 -290
- package/dist/spec/schemas/color-scheme.schema.json +20 -12
- package/dist/spec/schemas/finding.schema.json +191 -0
- package/dist/spec/schemas/font-scheme.schema.json +19 -46
- package/dist/spec/schemas/layout.schema.json +100 -159
- package/dist/spec/schemas/narrative.schema.json +17 -25
- package/dist/spec/schemas/opf.schema.json +286 -340
- package/dist/spec/schemas/social-platform.schema.json +1 -26
- package/dist/spec/schemas/theme.schema.json +4 -1
- package/dist/spec-files.d.ts +1 -1
- package/dist/spec-files.js +1 -1
- package/dist/symbol-font-encodings.js +18448 -1
- package/dist/types.d.ts +4 -4
- package/dist/validation-types-zh03LeZy.d.ts +276 -0
- package/dist/validator.d.ts +60 -4
- package/dist/validator.js +4 -4
- package/dist/yaml.d.ts +87 -0
- package/dist/yaml.js +321 -0
- package/package.json +5 -9
- package/dist/audit.d.ts +0 -35
- package/dist/audit.js +0 -7
- package/dist/chunk-7N4VMAT4.js +0 -1694
- package/dist/chunk-FYLJVF7X.js +0 -18448
- package/dist/chunk-INU7ZNSB.js +0 -670
- package/dist/chunk-IYCJUKWD.js +0 -951
- package/dist/lint-B7azdiuE.d.ts +0 -197
- package/dist/lint.d.ts +0 -7
- package/dist/lint.js +0 -6
- package/dist/spec/catalogs/audiences/customers.json +0 -27
- package/dist/spec/catalogs/audiences/executives.json +0 -27
- package/dist/spec/catalogs/audiences/investors.json +0 -27
- package/dist/spec/catalogs/audiences/marketing-team.json +0 -27
- package/dist/spec/catalogs/audiences/regulators.json +0 -27
- package/dist/spec/catalogs/audiences/sales-team.json +0 -27
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +0 -91
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +0 -103
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +0 -79
- package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +0 -91
- package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +0 -103
- package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +0 -79
- package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +0 -105
- package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +0 -106
- package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +0 -123
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +0 -89
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +0 -100
- package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +0 -95
- package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +0 -108
- package/dist/spec/catalogs/chart-types/australia.json +0 -76
- package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +0 -136
- package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +0 -168
- package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +0 -89
- package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +0 -101
- package/dist/spec/catalogs/chart-types/bullet-bar.json +0 -77
- package/dist/spec/catalogs/chart-types/bullet-column-2x.json +0 -89
- package/dist/spec/catalogs/chart-types/bullet-column-3x.json +0 -101
- package/dist/spec/catalogs/chart-types/bullet-column.json +0 -77
- package/dist/spec/catalogs/chart-types/canada.json +0 -86
- package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +0 -89
- package/dist/spec/catalogs/chart-types/clustered-column.json +0 -95
- package/dist/spec/catalogs/chart-types/dot-plot-2x.json +0 -99
- package/dist/spec/catalogs/chart-types/dot-plot-3x.json +0 -124
- package/dist/spec/catalogs/chart-types/dot-plot-4x.json +0 -149
- package/dist/spec/catalogs/chart-types/dot-plot-5x.json +0 -174
- package/dist/spec/catalogs/chart-types/dot-plot-6x.json +0 -199
- package/dist/spec/catalogs/chart-types/dot-plot.json +0 -74
- package/dist/spec/catalogs/chart-types/dumbbell.json +0 -120
- package/dist/spec/catalogs/chart-types/line-2x.json +0 -105
- package/dist/spec/catalogs/chart-types/line-3x.json +0 -127
- package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +0 -144
- package/dist/spec/catalogs/chart-types/line-with-high-low.json +0 -144
- package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +0 -106
- package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +0 -128
- package/dist/spec/catalogs/chart-types/sparkline-2x.json +0 -138
- package/dist/spec/catalogs/chart-types/sparkline-3x.json +0 -174
- package/dist/spec/catalogs/chart-types/sparkline-4x.json +0 -210
- package/dist/spec/catalogs/chart-types/sparkline-5x.json +0 -246
- package/dist/spec/catalogs/chart-types/sparkline-6x.json +0 -282
- package/dist/spec/catalogs/chart-types/sparkline.json +0 -102
- package/dist/spec/catalogs/chart-types/stacked-area-2x.json +0 -106
- package/dist/spec/catalogs/chart-types/stacked-area-3x.json +0 -123
- package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +0 -89
- package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +0 -100
- package/dist/spec/catalogs/chart-types/stacked-column-2x.json +0 -95
- package/dist/spec/catalogs/chart-types/stacked-column-3x.json +0 -108
- package/dist/spec/catalogs/chart-types/stacked-line-2x.json +0 -106
- package/dist/spec/catalogs/chart-types/stacked-line-3x.json +0 -123
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +0 -107
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +0 -124
- package/dist/spec/catalogs/chart-types/treemap-2x.json +0 -101
- package/dist/spec/catalogs/chart-types/treemap-3x.json +0 -122
- package/dist/spec/catalogs/chart-types/united-kingdom.json +0 -68
- package/dist/spec/catalogs/chart-types/united-states.json +0 -82
- package/dist/validator-CIylxoIm.d.ts +0 -172
|
@@ -17,7 +17,7 @@ var presentation = {
|
|
|
17
17
|
},
|
|
18
18
|
"name": {
|
|
19
19
|
"type": "string",
|
|
20
|
-
"description": "Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides.",
|
|
20
|
+
"description": "Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides. Also the built-in variable 'deck.name'.",
|
|
21
21
|
"examples": [
|
|
22
22
|
"Q4 2026 Business Review",
|
|
23
23
|
"Series B Pitch \u2014 Acme",
|
|
@@ -26,14 +26,14 @@ var presentation = {
|
|
|
26
26
|
},
|
|
27
27
|
"description": {
|
|
28
28
|
"type": "string",
|
|
29
|
-
"description": "Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the 'Comments' field in File \u2192 Properties).",
|
|
29
|
+
"description": "Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the 'Comments' field in File \u2192 Properties). Also the built-in variable 'deck.description'.",
|
|
30
30
|
"examples": [
|
|
31
31
|
"Quarterly business review covering revenue, product, and hiring milestones for the executive team."
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
"filename": {
|
|
35
35
|
"type": "string",
|
|
36
|
-
"description": "Optional base filename for exports (without extension).
|
|
36
|
+
"description": "Optional base filename for exports (without extension). The opf CLI (render, export) and the editor strip a trailing .pptx, .pdf, .png, or .svg (case-insensitive) and append the target format's extension. When omitted, they slugify name; with no usable name the CLI uses the input file name and the editor uses 'presentation'. See /docs/opf for full validation rules.",
|
|
37
37
|
"examples": [
|
|
38
38
|
"q4-2026-business-review",
|
|
39
39
|
"acme-series-b-pitch"
|
|
@@ -52,7 +52,7 @@ var presentation = {
|
|
|
52
52
|
"minItems": 1
|
|
53
53
|
}
|
|
54
54
|
],
|
|
55
|
-
"description": "Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (
|
|
55
|
+
"description": "Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (Organization.role 'primary', else the first item) supplies the default deck logo, the 'organization' and 'socials' header/footer fields and the 'organization.<field>' built-in variables; the others are available by id as 'organization.<id>.<field>' and are not drawn automatically."
|
|
56
56
|
},
|
|
57
57
|
"speaker": {
|
|
58
58
|
"oneOf": [
|
|
@@ -67,7 +67,7 @@ var presentation = {
|
|
|
67
67
|
"minItems": 1
|
|
68
68
|
}
|
|
69
69
|
],
|
|
70
|
-
"description": "Person presenting the deck. Array form supports panels and multi-speaker decks.
|
|
70
|
+
"description": "Person presenting the deck. Array form supports panels and multi-speaker decks. The first speaker is the primary speaker: the built-in variables 'speaker.<field>' and the 'speaker' header/footer field read it, 'speakers' lists every name, and 'speaker.<id>.<field>' addresses one by id. A speaker is drawn nowhere else."
|
|
71
71
|
},
|
|
72
72
|
"author": {
|
|
73
73
|
"oneOf": [
|
|
@@ -82,7 +82,7 @@ var presentation = {
|
|
|
82
82
|
"minItems": 1
|
|
83
83
|
}
|
|
84
84
|
],
|
|
85
|
-
"description": "Optional credit for the person who authored or contributed to the deck, distinct from speaker. Array form supports multiple contributors. Round-trips to OOXML 'docProps/core.xml' as '<dc:creator>' (semicolon-joined when multiple) and seeds '<cp:lastModifiedBy>' on first write; subsequent edits in PowerPoint overwrite '<cp:lastModifiedBy>' with the editing user.",
|
|
85
|
+
"description": "Optional credit for the person who authored or contributed to the deck, distinct from speaker. Array form supports multiple contributors. Round-trips to OOXML 'docProps/core.xml' as '<dc:creator>' (semicolon-joined when multiple) and seeds '<cp:lastModifiedBy>' on first write; subsequent edits in PowerPoint overwrite '<cp:lastModifiedBy>' with the editing user. Also the built-in variable 'deck.author' (an array joined with ', ').",
|
|
86
86
|
"examples": [
|
|
87
87
|
"Bob Lee",
|
|
88
88
|
[
|
|
@@ -96,6 +96,9 @@ var presentation = {
|
|
|
96
96
|
{
|
|
97
97
|
"type": "string"
|
|
98
98
|
},
|
|
99
|
+
{
|
|
100
|
+
"$ref": "#/$defs/Audience"
|
|
101
|
+
},
|
|
99
102
|
{
|
|
100
103
|
"type": "array",
|
|
101
104
|
"items": {
|
|
@@ -111,7 +114,7 @@ var presentation = {
|
|
|
111
114
|
"minItems": 1
|
|
112
115
|
}
|
|
113
116
|
],
|
|
114
|
-
"description": "Intended audiences for the presentation. Accepts
|
|
117
|
+
"description": "Intended audiences for the presentation. Accepts any of:\n- A single string shorthand: free-form description ('Series B investors'), an audiences catalog id ('executive'), an HTTPS URL, or a 'pkg:' reference.\n- A single inline Audience object, like purpose and tone, for custom audience metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-audience/v1 without '$schema'.\n- An array of string shorthands and/or inline Audience objects, for more than one audience.\n\nResolution order for catalog ids and references: inline catalogs.audiences.records[] \u2192 catalogs.audiences.source \u2192 default catalog at https://www.pptx.gallery/audiences.",
|
|
115
118
|
"examples": [
|
|
116
119
|
"executive",
|
|
117
120
|
"Biology Students and Wildlife Enthusiasts",
|
|
@@ -122,6 +125,10 @@ var presentation = {
|
|
|
122
125
|
"board",
|
|
123
126
|
"c-suite"
|
|
124
127
|
],
|
|
128
|
+
{
|
|
129
|
+
"id": "executive",
|
|
130
|
+
"attentionBudgetMinutes": 20
|
|
131
|
+
},
|
|
125
132
|
[
|
|
126
133
|
"Series B investors",
|
|
127
134
|
"https://acme.com/decks/audiences/acme-board.json"
|
|
@@ -259,7 +266,7 @@ var presentation = {
|
|
|
259
266
|
"duration": {
|
|
260
267
|
"type": "integer",
|
|
261
268
|
"minimum": 1,
|
|
262
|
-
"description": "Target presentation duration, as an integer number of minutes.
|
|
269
|
+
"description": "Target presentation duration, as an integer number of minutes. The opf-render presenter view counts the elapsed time against it, and core validate warns when it lies outside the resolved narrative's 'duration' range. Agents can also use it to set pace and depth. Nothing else reads it: the preview and the PPTX export draw no duration."
|
|
263
270
|
},
|
|
264
271
|
"tags": {
|
|
265
272
|
"type": "array",
|
|
@@ -286,7 +293,7 @@ var presentation = {
|
|
|
286
293
|
},
|
|
287
294
|
"variables": {
|
|
288
295
|
"$ref": "#/$defs/Variables",
|
|
289
|
-
"description": "Optional named variables: deck colors referenced as 'var:<id>' (the original use), and typed content variables (text, number, date, image, url, list) referenced inline as '{{<id>}}' or whole as 'var:<id>'. Variables are what makes a deck a fillable template when combined with 'template': true. Color variables complement the color scheme: scheme slots and roles stay the primary vocabulary; variables cover deck-specific named colors that have no scheme slot."
|
|
296
|
+
"description": "Optional named variables: deck colors referenced as 'var:<id>' (the original use), and typed content variables (text, number, date, image, url, list) referenced inline as '{{<id>}}' or whole as 'var:<id>'. Variables are what makes a deck a fillable template when combined with 'template': true. Color variables complement the color scheme: scheme slots and roles stay the primary vocabulary; variables cover deck-specific named colors that have no scheme slot. Built-in variables ('{{speaker.name}}', 'var:organization.logo', 'deck.name', ...) need no declaration; see Variables."
|
|
290
297
|
},
|
|
291
298
|
"template": {
|
|
292
299
|
"type": "boolean",
|
|
@@ -294,42 +301,13 @@ var presentation = {
|
|
|
294
301
|
"default": false
|
|
295
302
|
},
|
|
296
303
|
"narrative": {
|
|
297
|
-
"
|
|
298
|
-
|
|
299
|
-
"type": "string"
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
"$ref": "#/$defs/Narrative"
|
|
303
|
-
}
|
|
304
|
-
],
|
|
305
|
-
"description": `Structured storyline describing the deck's arc and beats. Resolves to the 'id' of a 'narratives' catalog record.
|
|
306
|
-
|
|
307
|
-
Accepts two forms:
|
|
308
|
-
- String shorthand for the common case: 'narrative = "classic-story"'. Accepts a bare id (lowercase kebab-case), an HTTPS URL pointing at a record file, or a 'pkg:' reference to a locally-installed package.
|
|
309
|
-
- Object form for inline overrides or fully custom narratives: 'narrative = { id: "classic-story", beats: [...] }'. The object shape mirrors https://openpresentation.org/schema/opf-narrative/v1 (sans '$schema'), so a library record and an inline narrative are interchangeable.
|
|
310
|
-
|
|
311
|
-
Resolution order: inline catalogs.narratives.records[] \u2192 catalogs.narratives.source \u2192 default catalog at https://www.pptx.gallery/narratives. Unknown ids produce a validation warning, not an error.
|
|
312
|
-
|
|
313
|
-
Deck-level concerns that aren't part of the storyline (audience, tone, takeaway, duration) live as siblings on the presentation root rather than inside the narrative object.`,
|
|
304
|
+
"type": "string",
|
|
305
|
+
"description": "The deck's narrative plan, by reference: the 'id' of a 'narratives' catalog record, an HTTPS URL pointing at a record file, or a 'pkg:' reference to a locally-installed package. The deck holds only this pointer; the plan (the arc, its beats and what each beat must do) lives in the catalog record, which validates against https://openpresentation.org/schema/opf-narrative/v1. A custom narrative is a record in catalogs.narratives.records, referenced here by its id.\n\nSlides link themselves to beats with slides[].beat. Core validate warns about a slides[].beat id the resolved narrative does not define and about a root 'duration' outside its 'duration' range, and reports a beat that no slide references. The preview and the PPTX export draw nothing from the narrative; opf-pptx stores the reference for round-trip.\n\nResolution order: inline catalogs.narratives.records[] \u2192 catalogs.narratives.source \u2192 default catalog at https://www.pptx.gallery/narratives. Unknown ids produce a validation warning, not an error.\n\nDeck-level concerns that are not part of the storyline (audience, tone, takeaway, duration) live as siblings on the presentation root.",
|
|
314
306
|
"examples": [
|
|
315
307
|
"classic-story",
|
|
316
308
|
"problem-solution",
|
|
317
309
|
"scqa",
|
|
318
310
|
"pitch-deck",
|
|
319
|
-
{
|
|
320
|
-
"id": "custom-pitch",
|
|
321
|
-
"name": "Custom Pitch",
|
|
322
|
-
"beats": [
|
|
323
|
-
{
|
|
324
|
-
"id": "hook",
|
|
325
|
-
"name": "Hook"
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
"id": "ask",
|
|
329
|
-
"name": "Ask"
|
|
330
|
-
}
|
|
331
|
-
]
|
|
332
|
-
},
|
|
333
311
|
"https://acme.com/decks/narratives/founder-pitch.json",
|
|
334
312
|
"pkg:@acme/decks/narratives/founder-pitch"
|
|
335
313
|
]
|
|
@@ -347,7 +325,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
347
325
|
"items": {
|
|
348
326
|
"$ref": "#/$defs/Reference"
|
|
349
327
|
},
|
|
350
|
-
"description": "Sources that text runs cite with 'cite'. Ids are unique. A cited reference is listed in the footnote area of every slide that cites it, with a marker number assigned per deck in order of first use; a reference no run cites is
|
|
328
|
+
"description": "Sources that text runs cite with 'cite'. Ids are unique. A cited reference is listed in the footnote area of every slide that cites it, with a marker number assigned per deck in order of first use; a reference no run cites is the warning opf/unused-reference. referencesSlide() turns the cited references into an ordinary list slide.",
|
|
351
329
|
"examples": [
|
|
352
330
|
[
|
|
353
331
|
{
|
|
@@ -360,7 +338,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
360
338
|
},
|
|
361
339
|
"datasets": {
|
|
362
340
|
"$ref": "#/$defs/Datasets",
|
|
363
|
-
"description": `Optional shared data tables, keyed by id. A chart ('chart.data': { "dataset": "<id>" }) or a table ('table': { "dataset": "<id>" }) references one instead of holding its own copy; engines inline the reference before composing, rendering or exporting. A dataset nothing references is
|
|
341
|
+
"description": `Optional shared data tables, keyed by id. A chart ('chart.data': { "dataset": "<id>" }) or a table ('table': { "dataset": "<id>" }) references one instead of holding its own copy; engines inline the reference before composing, rendering or exporting. A dataset nothing references is the warning opf/unused-dataset. See docs/chart-table-data.md.`
|
|
364
342
|
},
|
|
365
343
|
"assets": {
|
|
366
344
|
"$ref": "#/$defs/Assets",
|
|
@@ -394,13 +372,13 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
394
372
|
},
|
|
395
373
|
"revenue": {
|
|
396
374
|
"src": "./data/revenue.csv",
|
|
397
|
-
"
|
|
375
|
+
"mediaType": "text/csv"
|
|
398
376
|
}
|
|
399
377
|
}
|
|
400
378
|
]
|
|
401
379
|
},
|
|
402
380
|
"Asset": {
|
|
403
|
-
"description": `Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title
|
|
381
|
+
"description": `Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.`,
|
|
404
382
|
"oneOf": [
|
|
405
383
|
{
|
|
406
384
|
"type": "string",
|
|
@@ -450,20 +428,6 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
450
428
|
"text/csv",
|
|
451
429
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
452
430
|
]
|
|
453
|
-
},
|
|
454
|
-
"format": {
|
|
455
|
-
"type": "string",
|
|
456
|
-
"description": "Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.",
|
|
457
|
-
"examples": [
|
|
458
|
-
"csv",
|
|
459
|
-
"tsv",
|
|
460
|
-
"json",
|
|
461
|
-
"xlsx",
|
|
462
|
-
"svg",
|
|
463
|
-
"png",
|
|
464
|
-
"jpg",
|
|
465
|
-
"webp"
|
|
466
|
-
]
|
|
467
431
|
}
|
|
468
432
|
}
|
|
469
433
|
}
|
|
@@ -837,7 +801,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
837
801
|
},
|
|
838
802
|
"Organization": {
|
|
839
803
|
"type": "object",
|
|
840
|
-
"description": "An organization associated with the presentation
|
|
804
|
+
"description": "An organization associated with the presentation, typically the presenting company, but also hosts, partners, clients, or sponsors. The primary organization (role 'primary', else the first one) supplies the default deck logo (unless design.logo overrides it), the 'organization' header/footer field (its name) and the 'socials' field (its socials). Every field is also a built-in variable ('{{organization.name}}', 'var:organization.logo', 'organization.<id>.<field>'). Nothing else about an organization is drawn automatically. See docs/templates-and-variables.md.",
|
|
841
805
|
"required": [
|
|
842
806
|
"id",
|
|
843
807
|
"name"
|
|
@@ -846,7 +810,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
846
810
|
"id": {
|
|
847
811
|
"type": "string",
|
|
848
812
|
"pattern": "^[a-zA-Z0-9_-]+$",
|
|
849
|
-
"description": "Stable identifier for the organization, used to reference it from Speaker.organizationId. Must be unique
|
|
813
|
+
"description": "Stable identifier for the organization, used to reference it from Speaker.organizationId and to address it in built-in variables as 'organization.<id>.<field>'. Must be unique among organizations (a duplicate is a validation error).",
|
|
850
814
|
"examples": [
|
|
851
815
|
"acme",
|
|
852
816
|
"acme-corp",
|
|
@@ -855,7 +819,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
855
819
|
},
|
|
856
820
|
"name": {
|
|
857
821
|
"type": "string",
|
|
858
|
-
"description": "Display name
|
|
822
|
+
"description": "Display name. Drawn by the 'organization' header/footer field for the primary organization; the built-in variable 'organization.name' (or 'organization.<id>.name') carries it into any string.",
|
|
859
823
|
"examples": [
|
|
860
824
|
"Acme Corp",
|
|
861
825
|
"DevConf 2026",
|
|
@@ -864,7 +828,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
864
828
|
},
|
|
865
829
|
"legalName": {
|
|
866
830
|
"type": "string",
|
|
867
|
-
"description": "Optional legal entity name when it differs from the display name.",
|
|
831
|
+
"description": "Optional legal entity name when it differs from the display name. Never drawn automatically; available as the built-in variable 'organization.legalName'.",
|
|
868
832
|
"examples": [
|
|
869
833
|
"Acme Corporation, Inc.",
|
|
870
834
|
"Beta Industries, LLC"
|
|
@@ -872,7 +836,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
872
836
|
},
|
|
873
837
|
"logo": {
|
|
874
838
|
"$ref": "#/$defs/Asset",
|
|
875
|
-
"description": "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).",
|
|
839
|
+
"description": "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). It is also the built-in image variable 'organization.logo' (or 'organization.<id>.logo'), placed with 'var:organization.logo' in an image field.",
|
|
876
840
|
"examples": [
|
|
877
841
|
"https://cdn.acme.com/logo.svg",
|
|
878
842
|
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9V3iWggAAAAASUVORK5CYII=",
|
|
@@ -882,7 +846,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
882
846
|
},
|
|
883
847
|
"domain": {
|
|
884
848
|
"type": "string",
|
|
885
|
-
"description": "Bare internet domain for the organization.
|
|
849
|
+
"description": "Bare internet domain for the organization. Never drawn automatically and not used to look up assets; available as the built-in variable 'organization.domain'.",
|
|
886
850
|
"examples": [
|
|
887
851
|
"acme.com",
|
|
888
852
|
"beta-industries.io",
|
|
@@ -892,7 +856,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
892
856
|
"email": {
|
|
893
857
|
"type": "string",
|
|
894
858
|
"format": "email",
|
|
895
|
-
"description": "General contact email for the organization.
|
|
859
|
+
"description": "General contact email for the organization. Never drawn automatically; available as the built-in variable 'organization.email'.",
|
|
896
860
|
"examples": [
|
|
897
861
|
"hello@acme.com",
|
|
898
862
|
"sales@acme.com",
|
|
@@ -901,7 +865,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
901
865
|
},
|
|
902
866
|
"phone": {
|
|
903
867
|
"type": "string",
|
|
904
|
-
"description": "Main contact phone number for the organization. E.164 format is recommended.",
|
|
868
|
+
"description": "Main contact phone number for the organization. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'organization.phone'.",
|
|
905
869
|
"examples": [
|
|
906
870
|
"+14155551234",
|
|
907
871
|
"+442071838750"
|
|
@@ -909,7 +873,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
909
873
|
},
|
|
910
874
|
"tagline": {
|
|
911
875
|
"type": "string",
|
|
912
|
-
"description": "Short tagline
|
|
876
|
+
"description": "Short tagline. Never drawn automatically (cover slides do not show it); available as the built-in variable 'organization.tagline', for example in a footer 'text' of '{{organization.tagline}}'.",
|
|
913
877
|
"examples": [
|
|
914
878
|
"Build the future of work",
|
|
915
879
|
"Infrastructure for AI agents",
|
|
@@ -925,7 +889,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
925
889
|
"sponsor",
|
|
926
890
|
"host"
|
|
927
891
|
],
|
|
928
|
-
"description": "Role of the organization relative to the presentation.
|
|
892
|
+
"description": "Role of the organization relative to the presentation. Only 'primary' has behavior: it selects the primary organization (deck logo, 'organization' and 'socials' header/footer fields, and the 'organization.<field>' built-ins). When no organization has role 'primary', the first one is primary. 'partner', 'client', 'sponsor' and 'host' are descriptive labels that change nothing."
|
|
929
893
|
},
|
|
930
894
|
"socials": {
|
|
931
895
|
"$ref": "#/$defs/Socials",
|
|
@@ -935,7 +899,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
935
899
|
},
|
|
936
900
|
"Speaker": {
|
|
937
901
|
"type": "object",
|
|
938
|
-
"description": "A person presenting the deck.
|
|
902
|
+
"description": "A person presenting the deck. A speaker is drawn only through built-in variables ('{{speaker.name}}' inside any string, 'var:speaker.photo' as a whole image field) and the 'speaker' header/footer field (the first speaker's name and title). No layout, cover or bio slide places a speaker on its own. See docs/templates-and-variables.md.",
|
|
939
903
|
"required": [
|
|
940
904
|
"id",
|
|
941
905
|
"name"
|
|
@@ -944,7 +908,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
944
908
|
"id": {
|
|
945
909
|
"type": "string",
|
|
946
910
|
"pattern": "^[a-zA-Z0-9_-]+$",
|
|
947
|
-
"description": "Stable identifier for the speaker
|
|
911
|
+
"description": "Stable identifier for the speaker. Must be unique among speakers (a duplicate is a validation error). Addresses this speaker in built-in variables as 'speaker.<id>.<field>', such as '{{speaker.alice.title}}'.",
|
|
948
912
|
"examples": [
|
|
949
913
|
"alice",
|
|
950
914
|
"alice-chen",
|
|
@@ -953,7 +917,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
953
917
|
},
|
|
954
918
|
"name": {
|
|
955
919
|
"type": "string",
|
|
956
|
-
"description": "Display name.",
|
|
920
|
+
"description": "Display name. Built-in variable 'speaker.name' (first speaker) or 'speaker.<id>.name'; the first speaker's name is also drawn by the 'speaker' header/footer field and every name is listed by 'speakers'.",
|
|
957
921
|
"examples": [
|
|
958
922
|
"Alice Chen",
|
|
959
923
|
"Bob Lee",
|
|
@@ -962,7 +926,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
962
926
|
},
|
|
963
927
|
"title": {
|
|
964
928
|
"type": "string",
|
|
965
|
-
"description": "Role or title.
|
|
929
|
+
"description": "Role or title. Built-in variable 'speaker.title'; the 'speaker' header/footer field draws it after the name ('Alice Chen, VP of Engineering').",
|
|
966
930
|
"examples": [
|
|
967
931
|
"VP of Engineering",
|
|
968
932
|
"Founder & CEO",
|
|
@@ -972,7 +936,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
972
936
|
},
|
|
973
937
|
"photo": {
|
|
974
938
|
"$ref": "#/$defs/Asset",
|
|
975
|
-
"description": "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.
|
|
939
|
+
"description": "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. Never drawn automatically: it is the built-in image variable 'speaker.photo' (or 'speaker.<id>.photo'), placed with 'var:speaker.photo' in a slide's image field. It also round-trips through PPTX provenance.",
|
|
976
940
|
"examples": [
|
|
977
941
|
"https://cdn.acme.com/headshots/alice.jpg",
|
|
978
942
|
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAr/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AJ//2Q==",
|
|
@@ -983,7 +947,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
983
947
|
"email": {
|
|
984
948
|
"type": "string",
|
|
985
949
|
"format": "email",
|
|
986
|
-
"description": "Contact email
|
|
950
|
+
"description": "Contact email. Never drawn automatically; available as the built-in variable 'speaker.email'.",
|
|
987
951
|
"examples": [
|
|
988
952
|
"alice@acme.com",
|
|
989
953
|
"alice.chen@acme.com"
|
|
@@ -991,7 +955,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
991
955
|
},
|
|
992
956
|
"phone": {
|
|
993
957
|
"type": "string",
|
|
994
|
-
"description": "Contact phone number for the speaker. E.164 format is recommended.",
|
|
958
|
+
"description": "Contact phone number for the speaker. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'speaker.phone'.",
|
|
995
959
|
"examples": [
|
|
996
960
|
"+14155551234",
|
|
997
961
|
"+442071838750"
|
|
@@ -999,14 +963,14 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
999
963
|
},
|
|
1000
964
|
"bio": {
|
|
1001
965
|
"type": "string",
|
|
1002
|
-
"description": "Short biographical paragraph for bio or 'about the speaker'
|
|
966
|
+
"description": "Short biographical paragraph. Never drawn automatically; available as the built-in variable 'speaker.bio', for a bio or 'about the speaker' slide you write.",
|
|
1003
967
|
"examples": [
|
|
1004
968
|
"Alice leads engineering at Acme, where she's spent the last six years scaling distributed systems from prototype to billions of requests per day. Previously, she was a staff engineer at Google."
|
|
1005
969
|
]
|
|
1006
970
|
},
|
|
1007
971
|
"organizationId": {
|
|
1008
972
|
"type": "string",
|
|
1009
|
-
"description": "Reference to an Organization.id in organization
|
|
973
|
+
"description": "Reference to an Organization.id in organization; it must name an existing organization (a validation error otherwise). Attribution metadata for hosts: no engine draws it or changes which organization is primary because of it.",
|
|
1010
974
|
"examples": [
|
|
1011
975
|
"acme",
|
|
1012
976
|
"beta",
|
|
@@ -1015,7 +979,7 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
1015
979
|
},
|
|
1016
980
|
"socials": {
|
|
1017
981
|
"$ref": "#/$defs/Socials",
|
|
1018
|
-
"description": "Optional social media handles or URLs for the speaker. Authoring metadata: no header/footer field
|
|
982
|
+
"description": "Optional social media handles or URLs for the speaker. Authoring metadata only: nothing draws speaker socials and there is no built-in variable for them (the 'socials' header/footer field draws the primary organization's socials)."
|
|
1019
983
|
}
|
|
1020
984
|
}
|
|
1021
985
|
},
|
|
@@ -1043,211 +1007,6 @@ Deck-level concerns that aren't part of the storyline (audience, tone, takeaway,
|
|
|
1043
1007
|
"description": "Platform id (lowercase kebab-case). Common ids include 'linkedin', 'x', 'github', 'youtube', 'instagram', 'facebook', 'tiktok', 'threads', 'mastodon', 'bluesky'."
|
|
1044
1008
|
}
|
|
1045
1009
|
},
|
|
1046
|
-
"Narrative": {
|
|
1047
|
-
"type": "object",
|
|
1048
|
-
"description": "Structured storyline used by AI to shape generated content. Mirrors the OPF Narrative Template record at https://openpresentation.org/schema/opf-narrative/v1 (sans '$schema'), so a library record and an inline narrative are interchangeable.\n\nNarrative declares the deck's intended story arc; slides may opt into beats via Slide.beat. The narrative does not constrain slide structure \u2014 validators warn on drift (orphan slides, unused beats) but never error. Slides are the source of truth; narrative is intent that travels with the deck.\n\nWhen 'id' matches a record in the resolved 'narratives' catalog, the inline fields override matching fields on the catalog record (beats merge by beat 'id'). When 'id' doesn't match, this object defines a fully custom inline narrative.\n\nDeck-level concerns that aren't part of the storyline (audience, tone, takeaway, duration) live as siblings on the presentation root rather than inside this object.",
|
|
1049
|
-
"properties": {
|
|
1050
|
-
"id": {
|
|
1051
|
-
"type": "string",
|
|
1052
|
-
"pattern": "^[a-z][a-z0-9-]*$",
|
|
1053
|
-
"description": "Stable slug identifying this narrative. When it matches a record in the resolved 'narratives' catalog, the catalog record's beats and metadata seed this narrative; inline fields override per-key. When it doesn't match, this is a fully custom inline narrative. Lowercase kebab-case.",
|
|
1054
|
-
"examples": [
|
|
1055
|
-
"classic-story",
|
|
1056
|
-
"problem-solution",
|
|
1057
|
-
"scqa",
|
|
1058
|
-
"pitch-deck",
|
|
1059
|
-
"qbr",
|
|
1060
|
-
"weekly-progress",
|
|
1061
|
-
"custom-pitch"
|
|
1062
|
-
]
|
|
1063
|
-
},
|
|
1064
|
-
"name": {
|
|
1065
|
-
"type": "string",
|
|
1066
|
-
"description": "Human-readable narrative name.",
|
|
1067
|
-
"examples": [
|
|
1068
|
-
"Classic Story",
|
|
1069
|
-
"Problem \u2192 Solution",
|
|
1070
|
-
"SCQA",
|
|
1071
|
-
"Founder Pitch"
|
|
1072
|
-
]
|
|
1073
|
-
},
|
|
1074
|
-
"summary": {
|
|
1075
|
-
"type": "string",
|
|
1076
|
-
"description": "One-sentence description of when and why to use this narrative."
|
|
1077
|
-
},
|
|
1078
|
-
"description": {
|
|
1079
|
-
"type": "string",
|
|
1080
|
-
"description": "Longer prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction.",
|
|
1081
|
-
"examples": [
|
|
1082
|
-
"Open with the cost of slow agentic workflows, contrast with what becomes possible at sub-second latency, then walk through our architecture and benchmark results, ending with a concrete adoption ask."
|
|
1083
|
-
]
|
|
1084
|
-
},
|
|
1085
|
-
"audienceFit": {
|
|
1086
|
-
"type": "array",
|
|
1087
|
-
"items": {
|
|
1088
|
-
"type": "string"
|
|
1089
|
-
},
|
|
1090
|
-
"description": "Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids.",
|
|
1091
|
-
"examples": [
|
|
1092
|
-
[
|
|
1093
|
-
"executive",
|
|
1094
|
-
"investor",
|
|
1095
|
-
"customer"
|
|
1096
|
-
]
|
|
1097
|
-
]
|
|
1098
|
-
},
|
|
1099
|
-
"durationRange": {
|
|
1100
|
-
"type": "object",
|
|
1101
|
-
"description": "Typical talk-length window this narrative suits. Compared by validators against duration.",
|
|
1102
|
-
"properties": {
|
|
1103
|
-
"minMinutes": {
|
|
1104
|
-
"type": "number",
|
|
1105
|
-
"exclusiveMinimum": 0
|
|
1106
|
-
},
|
|
1107
|
-
"maxMinutes": {
|
|
1108
|
-
"type": "number",
|
|
1109
|
-
"exclusiveMinimum": 0
|
|
1110
|
-
}
|
|
1111
|
-
}
|
|
1112
|
-
},
|
|
1113
|
-
"tags": {
|
|
1114
|
-
"type": "array",
|
|
1115
|
-
"items": {
|
|
1116
|
-
"type": "string"
|
|
1117
|
-
},
|
|
1118
|
-
"description": "Free-form labels for filtering and search.",
|
|
1119
|
-
"examples": [
|
|
1120
|
-
[
|
|
1121
|
-
"business",
|
|
1122
|
-
"pitch",
|
|
1123
|
-
"internal"
|
|
1124
|
-
]
|
|
1125
|
-
]
|
|
1126
|
-
},
|
|
1127
|
-
"preview": {
|
|
1128
|
-
"type": "object",
|
|
1129
|
-
"description": "Visual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional.",
|
|
1130
|
-
"properties": {
|
|
1131
|
-
"src": {
|
|
1132
|
-
"type": "string",
|
|
1133
|
-
"format": "uri",
|
|
1134
|
-
"description": "Main preview image (PNG/JPG)."
|
|
1135
|
-
},
|
|
1136
|
-
"thumbnailSrc": {
|
|
1137
|
-
"type": "string",
|
|
1138
|
-
"format": "uri",
|
|
1139
|
-
"description": "Smaller thumbnail preview for dense grid views."
|
|
1140
|
-
},
|
|
1141
|
-
"vectorSrc": {
|
|
1142
|
-
"type": "string",
|
|
1143
|
-
"format": "uri",
|
|
1144
|
-
"description": "SVG / vector preview for crisp scaling at any size."
|
|
1145
|
-
}
|
|
1146
|
-
}
|
|
1147
|
-
},
|
|
1148
|
-
"beats": {
|
|
1149
|
-
"type": "array",
|
|
1150
|
-
"items": {
|
|
1151
|
-
"$ref": "#/$defs/NarrativeBeat"
|
|
1152
|
-
},
|
|
1153
|
-
"description": "Ordered list of beats that make up the narrative arc. When 'id' matches a catalog record, beats here override or extend matching catalog beats by their own 'id'. Beat IDs must be unique within the narrative."
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
},
|
|
1157
|
-
"NarrativeBeat": {
|
|
1158
|
-
"type": "object",
|
|
1159
|
-
"description": "A single narrative beat \u2014 a labeled segment of the story arc with a specific dramatic purpose (e.g. 'hook', 'problem', 'evidence', 'ask'). Slides reference beats via Slide.beat. Beats may also carry slide-blueprint hints (slideType, layoutHint, thoughtCues, instructions) that guide the assigned slide.\n\nMirrors the Beat definition in narrative.schema.json (https://openpresentation.org/schema/opf-narrative/v1) so library entries and inline OPF beats are interchangeable.",
|
|
1160
|
-
"required": [
|
|
1161
|
-
"id",
|
|
1162
|
-
"name"
|
|
1163
|
-
],
|
|
1164
|
-
"properties": {
|
|
1165
|
-
"id": {
|
|
1166
|
-
"type": "string",
|
|
1167
|
-
"pattern": "^[a-z][a-z0-9-]*$",
|
|
1168
|
-
"description": "Stable slug used by Slide.beat to reference this beat. Lowercase kebab-case.",
|
|
1169
|
-
"examples": [
|
|
1170
|
-
"hook",
|
|
1171
|
-
"problem",
|
|
1172
|
-
"evidence",
|
|
1173
|
-
"ask",
|
|
1174
|
-
"next-steps"
|
|
1175
|
-
]
|
|
1176
|
-
},
|
|
1177
|
-
"name": {
|
|
1178
|
-
"type": "string",
|
|
1179
|
-
"description": "Human-readable beat name.",
|
|
1180
|
-
"examples": [
|
|
1181
|
-
"The Hook",
|
|
1182
|
-
"The Problem",
|
|
1183
|
-
"Why Now",
|
|
1184
|
-
"The Ask"
|
|
1185
|
-
]
|
|
1186
|
-
},
|
|
1187
|
-
"description": {
|
|
1188
|
-
"type": "string",
|
|
1189
|
-
"description": "Curator-written prose that explains what this beat should accomplish.",
|
|
1190
|
-
"examples": [
|
|
1191
|
-
"Quantify the pain customers feel today, with one striking stat the audience can repeat afterward."
|
|
1192
|
-
]
|
|
1193
|
-
},
|
|
1194
|
-
"instructions": {
|
|
1195
|
-
"type": "string",
|
|
1196
|
-
"description": "Short author-facing instruction for the beat \u2014 typically one phrase. Complements 'description' with a concise directive.",
|
|
1197
|
-
"examples": [
|
|
1198
|
-
"Capture audience attention",
|
|
1199
|
-
"Introduce problem",
|
|
1200
|
-
"Detail implementation",
|
|
1201
|
-
"Inspire & conclude"
|
|
1202
|
-
]
|
|
1203
|
-
},
|
|
1204
|
-
"slideCount": {
|
|
1205
|
-
"type": "integer",
|
|
1206
|
-
"minimum": 1,
|
|
1207
|
-
"description": "Optional explicit slide count for this beat. Defaults to 1 when omitted; values >1 are reserved for beats that intentionally span multiple slides. Prefer decomposing a heavy beat into multiple beats over setting a high slideCount. The validator emits a warning if the deck's actual count differs significantly."
|
|
1208
|
-
},
|
|
1209
|
-
"slideType": {
|
|
1210
|
-
"type": "string",
|
|
1211
|
-
"enum": [
|
|
1212
|
-
"text",
|
|
1213
|
-
"list",
|
|
1214
|
-
"image",
|
|
1215
|
-
"chart",
|
|
1216
|
-
"table",
|
|
1217
|
-
"video",
|
|
1218
|
-
"code",
|
|
1219
|
-
"metric",
|
|
1220
|
-
"quote",
|
|
1221
|
-
"timeline"
|
|
1222
|
-
],
|
|
1223
|
-
"description": "Default content kind for the beat's slide. Mirrors ContentPayload.type and helps engines choose a sensible layout when only the beat is specified."
|
|
1224
|
-
},
|
|
1225
|
-
"layoutHint": {
|
|
1226
|
-
"type": "string",
|
|
1227
|
-
"description": "Suggested layout id for the beat's opening slide. Resolves the same way as Slide.layout \u2014 against catalogs.layouts and the default catalog at https://www.pptx.gallery/layouts.",
|
|
1228
|
-
"examples": [
|
|
1229
|
-
"section-divider",
|
|
1230
|
-
"title-slide",
|
|
1231
|
-
"title-left",
|
|
1232
|
-
"two-column",
|
|
1233
|
-
"text-left"
|
|
1234
|
-
]
|
|
1235
|
-
},
|
|
1236
|
-
"thoughtCues": {
|
|
1237
|
-
"type": "array",
|
|
1238
|
-
"items": {
|
|
1239
|
-
"type": "string"
|
|
1240
|
-
},
|
|
1241
|
-
"description": "Optional speaker or thinking cues attached to the beat. Surfaced in presenter notes.",
|
|
1242
|
-
"examples": [
|
|
1243
|
-
[
|
|
1244
|
-
"What pain is the audience feeling right now?",
|
|
1245
|
-
"Why hasn't anyone solved this yet?"
|
|
1246
|
-
]
|
|
1247
|
-
]
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
},
|
|
1251
1010
|
"Design": {
|
|
1252
1011
|
"type": "object",
|
|
1253
1012
|
"description": "Visual design system applied to the presentation; individual slides may override fields via Slide.design.",
|
|
@@ -1327,10 +1086,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1327
1086
|
"tenorite",
|
|
1328
1087
|
{
|
|
1329
1088
|
"id": "aptos",
|
|
1330
|
-
"heading":
|
|
1331
|
-
"family": "Inter",
|
|
1332
|
-
"weight": 700
|
|
1333
|
-
}
|
|
1089
|
+
"heading": "Inter"
|
|
1334
1090
|
}
|
|
1335
1091
|
]
|
|
1336
1092
|
},
|
|
@@ -1403,13 +1159,17 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1403
1159
|
"$ref": "#/$defs/Watermark"
|
|
1404
1160
|
}
|
|
1405
1161
|
],
|
|
1406
|
-
"description": "Optional decorative watermark applied across slides. Use false to suppress an inherited watermark in slide-level design; a string is
|
|
1162
|
+
"description": "Optional decorative watermark applied across slides: an image or a text stamp, in the fixed frame and at the opacity described on Watermark. Use false to suppress an inherited watermark in slide-level design; a string or Asset is the image at opacity 0.08.",
|
|
1407
1163
|
"examples": [
|
|
1408
1164
|
false,
|
|
1409
1165
|
"asset:watermark",
|
|
1410
1166
|
{
|
|
1411
1167
|
"src": "asset:watermark",
|
|
1412
1168
|
"opacity": 0.08
|
|
1169
|
+
},
|
|
1170
|
+
{
|
|
1171
|
+
"text": "DRAFT",
|
|
1172
|
+
"opacity": 0.1
|
|
1413
1173
|
}
|
|
1414
1174
|
]
|
|
1415
1175
|
},
|
|
@@ -1469,7 +1229,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1469
1229
|
"center",
|
|
1470
1230
|
"right"
|
|
1471
1231
|
],
|
|
1472
|
-
"description": "Default horizontal alignment for title placeholders in resolved layouts."
|
|
1232
|
+
"description": "Default horizontal alignment for title placeholders in resolved layouts. Effective value: the slide's design, then the deck's design, then the layout record's design.titleAlignment, then the engine default."
|
|
1473
1233
|
},
|
|
1474
1234
|
"contentAlignment": {
|
|
1475
1235
|
"type": "string",
|
|
@@ -1478,11 +1238,11 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1478
1238
|
"center",
|
|
1479
1239
|
"right"
|
|
1480
1240
|
],
|
|
1481
|
-
"description": "Default horizontal alignment for body/content regions in resolved layouts."
|
|
1241
|
+
"description": "Default horizontal alignment for body/content regions in resolved layouts. Effective value: the slide's design, then the deck's design, then the layout record's design.contentAlignment, then the engine default. A cover's tag and subtitle follow titleAlignment unless the slide's own design sets contentAlignment."
|
|
1482
1242
|
},
|
|
1483
1243
|
"contentBox": {
|
|
1484
1244
|
"type": "boolean",
|
|
1485
|
-
"description": "Whether body/content regions are rendered inside a visible card or surface."
|
|
1245
|
+
"description": "Whether body/content regions are rendered inside a visible card or surface. Effective value: the slide's design, then the deck's design, then the layout record's design.contentBox, then the engine default."
|
|
1486
1246
|
},
|
|
1487
1247
|
"slideImage": {
|
|
1488
1248
|
"oneOf": [
|
|
@@ -1651,7 +1411,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1651
1411
|
}
|
|
1652
1412
|
}
|
|
1653
1413
|
],
|
|
1654
|
-
"description": "Optional slide-level image, separate from content images. It applies to a slide that sets its own design.slideImage, and to slides whose layout
|
|
1414
|
+
"description": "Optional slide-level image, separate from content images. It applies to a slide that sets its own design.slideImage, and to slides whose layout record sets design.slideImage or whose root image is the same source as a deck-level value. A root image with the same source becomes the slide image instead of a content item. Blur, shadows, soft edges, background removal and device artwork are not part of the treatment vocabulary; see docs/image-treatments.md."
|
|
1655
1415
|
},
|
|
1656
1416
|
"contentDirection": {
|
|
1657
1417
|
"type": "string",
|
|
@@ -1659,7 +1419,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1659
1419
|
"horizontal",
|
|
1660
1420
|
"vertical"
|
|
1661
1421
|
],
|
|
1662
|
-
"description": "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
|
|
1422
|
+
"description": "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 the effective value (slide design, then deck design, then the layout record's design.contentDirection), 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."
|
|
1663
1423
|
},
|
|
1664
1424
|
"chartPrimary": {
|
|
1665
1425
|
"type": "string",
|
|
@@ -1670,7 +1430,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1670
1430
|
"left",
|
|
1671
1431
|
"right"
|
|
1672
1432
|
],
|
|
1673
|
-
"description": "Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's
|
|
1433
|
+
"description": "Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's design.chartPrimary. 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."
|
|
1674
1434
|
},
|
|
1675
1435
|
"imageFill": {
|
|
1676
1436
|
"type": "string",
|
|
@@ -1678,7 +1438,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1678
1438
|
"crop",
|
|
1679
1439
|
"fit"
|
|
1680
1440
|
],
|
|
1681
|
-
"description": "How
|
|
1441
|
+
"description": "How images fill their allocated region: crop covers the region, fit shows the whole image. Effective value: the slide's design, then the deck's design, then the layout record's design.imageFill, then the engine default."
|
|
1682
1442
|
},
|
|
1683
1443
|
"listBullet": {
|
|
1684
1444
|
"type": "string",
|
|
@@ -1686,7 +1446,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1686
1446
|
"character",
|
|
1687
1447
|
"image"
|
|
1688
1448
|
],
|
|
1689
|
-
"description": "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."
|
|
1449
|
+
"description": "Marker style for items and bullets lists. Effective value: the slide's design, then the deck's design, then the layout record's design.listBullet, then 'character'. '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."
|
|
1690
1450
|
}
|
|
1691
1451
|
}
|
|
1692
1452
|
},
|
|
@@ -1756,10 +1516,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1756
1516
|
"aptos",
|
|
1757
1517
|
{
|
|
1758
1518
|
"id": "aptos",
|
|
1759
|
-
"heading":
|
|
1760
|
-
"family": "Inter",
|
|
1761
|
-
"weight": 700
|
|
1762
|
-
}
|
|
1519
|
+
"heading": "Inter"
|
|
1763
1520
|
}
|
|
1764
1521
|
]
|
|
1765
1522
|
},
|
|
@@ -1810,7 +1567,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1810
1567
|
},
|
|
1811
1568
|
"ColorScheme": {
|
|
1812
1569
|
"type": "object",
|
|
1813
|
-
"description": "Color palette used by the design system. The slot fields (accent1-accent6, dark1, dark2, light1, light2, hyperlink, followedHyperlink) mirror color-scheme.schema.json (https://openpresentation.org/schema/opf-color-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields.\n\nTwo parallel models are supported and may be mixed:\n- OOXML slots - the 12-slot PowerPoint theme model that round-trips directly to OOXML. Use these for full control over the palette as PowerPoint sees it.\n- Abstract roles (primary, secondary, accent, background, surface, text, textSecondary
|
|
1570
|
+
"description": "Color palette used by the design system. Every slot and role is a hex color ('#RGB', '#RRGGBB' or '#RRGGBBAA'); a color-scheme name or a 'var:<id>' reference is not valid here, because those resolve through the scheme. The slot fields (accent1-accent6, dark1, dark2, light1, light2, hyperlink, followedHyperlink) mirror color-scheme.schema.json (https://openpresentation.org/schema/opf-color-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields.\n\nTwo parallel models are supported and may be mixed:\n- OOXML slots - the 12-slot PowerPoint theme model that round-trips directly to OOXML. Use these for full control over the palette as PowerPoint sees it.\n- Abstract roles (primary, secondary, accent, background, surface, text, textSecondary) - OPF-specific semantic aliases the engine maps onto the OOXML slots. Convenient for inline overrides without thinking in slot numbers; not part of the catalog record schema.\n\nIn design.colorScheme, 'id' resolves a colorSchemes catalog record as the base; slot and role overrides on the same object take precedence over the resolved scheme. The string shorthand on design.colorScheme is equivalent to setting only 'id'.",
|
|
1814
1571
|
"properties": {
|
|
1815
1572
|
"id": {
|
|
1816
1573
|
"type": "string",
|
|
@@ -1826,7 +1583,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1826
1583
|
]
|
|
1827
1584
|
},
|
|
1828
1585
|
"accent1": {
|
|
1829
|
-
"
|
|
1586
|
+
"$ref": "#/$defs/HexColor",
|
|
1830
1587
|
"description": "Accent 1 color (hex). Mirrors the OOXML accent1 slot.",
|
|
1831
1588
|
"examples": [
|
|
1832
1589
|
"#2874A6",
|
|
@@ -1835,7 +1592,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1835
1592
|
]
|
|
1836
1593
|
},
|
|
1837
1594
|
"accent2": {
|
|
1838
|
-
"
|
|
1595
|
+
"$ref": "#/$defs/HexColor",
|
|
1839
1596
|
"description": "Accent 2 color (hex). Mirrors the OOXML accent2 slot.",
|
|
1840
1597
|
"examples": [
|
|
1841
1598
|
"#1B4F72",
|
|
@@ -1844,7 +1601,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1844
1601
|
]
|
|
1845
1602
|
},
|
|
1846
1603
|
"accent3": {
|
|
1847
|
-
"
|
|
1604
|
+
"$ref": "#/$defs/HexColor",
|
|
1848
1605
|
"description": "Accent 3 color (hex). Mirrors the OOXML accent3 slot.",
|
|
1849
1606
|
"examples": [
|
|
1850
1607
|
"#5499C7",
|
|
@@ -1853,7 +1610,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1853
1610
|
]
|
|
1854
1611
|
},
|
|
1855
1612
|
"accent4": {
|
|
1856
|
-
"
|
|
1613
|
+
"$ref": "#/$defs/HexColor",
|
|
1857
1614
|
"description": "Accent 4 color (hex). Mirrors the OOXML accent4 slot.",
|
|
1858
1615
|
"examples": [
|
|
1859
1616
|
"#7BDBB2",
|
|
@@ -1862,7 +1619,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1862
1619
|
]
|
|
1863
1620
|
},
|
|
1864
1621
|
"accent5": {
|
|
1865
|
-
"
|
|
1622
|
+
"$ref": "#/$defs/HexColor",
|
|
1866
1623
|
"description": "Accent 5 color (hex). Mirrors the OOXML accent5 slot.",
|
|
1867
1624
|
"examples": [
|
|
1868
1625
|
"#3AC67A",
|
|
@@ -1871,7 +1628,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1871
1628
|
]
|
|
1872
1629
|
},
|
|
1873
1630
|
"accent6": {
|
|
1874
|
-
"
|
|
1631
|
+
"$ref": "#/$defs/HexColor",
|
|
1875
1632
|
"description": "Accent 6 color (hex). Mirrors the OOXML accent6 slot.",
|
|
1876
1633
|
"examples": [
|
|
1877
1634
|
"#24A89E",
|
|
@@ -1880,14 +1637,14 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1880
1637
|
]
|
|
1881
1638
|
},
|
|
1882
1639
|
"dark1": {
|
|
1883
|
-
"
|
|
1640
|
+
"$ref": "#/$defs/HexColor",
|
|
1884
1641
|
"description": "Dark 1 color (hex). Typically the deepest neutral; OOXML dark1.",
|
|
1885
1642
|
"examples": [
|
|
1886
1643
|
"#000000"
|
|
1887
1644
|
]
|
|
1888
1645
|
},
|
|
1889
1646
|
"dark2": {
|
|
1890
|
-
"
|
|
1647
|
+
"$ref": "#/$defs/HexColor",
|
|
1891
1648
|
"description": "Dark 2 color (hex). Secondary dark; OOXML dark2.",
|
|
1892
1649
|
"examples": [
|
|
1893
1650
|
"#011842",
|
|
@@ -1895,14 +1652,14 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1895
1652
|
]
|
|
1896
1653
|
},
|
|
1897
1654
|
"light1": {
|
|
1898
|
-
"
|
|
1655
|
+
"$ref": "#/$defs/HexColor",
|
|
1899
1656
|
"description": "Light 1 color (hex). Typically the slide canvas; OOXML lt1.",
|
|
1900
1657
|
"examples": [
|
|
1901
1658
|
"#FFFFFF"
|
|
1902
1659
|
]
|
|
1903
1660
|
},
|
|
1904
1661
|
"light2": {
|
|
1905
|
-
"
|
|
1662
|
+
"$ref": "#/$defs/HexColor",
|
|
1906
1663
|
"description": "Light 2 color (hex). Secondary light surface; OOXML lt2.",
|
|
1907
1664
|
"examples": [
|
|
1908
1665
|
"#F0F0F0",
|
|
@@ -1910,15 +1667,15 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1910
1667
|
]
|
|
1911
1668
|
},
|
|
1912
1669
|
"hyperlink": {
|
|
1913
|
-
"
|
|
1914
|
-
"description": "Hyperlink color (hex). OOXML hlink.",
|
|
1670
|
+
"$ref": "#/$defs/HexColor",
|
|
1671
|
+
"description": "Hyperlink color (hex). OOXML hlink. Link runs with no color of their own are drawn underlined in it, in the preview and in PowerPoint, unless it has under 4.5:1 contrast against the slide background, then in the slide text color.",
|
|
1915
1672
|
"examples": [
|
|
1916
1673
|
"#0563C1",
|
|
1917
1674
|
"#0066CC"
|
|
1918
1675
|
]
|
|
1919
1676
|
},
|
|
1920
1677
|
"followedHyperlink": {
|
|
1921
|
-
"
|
|
1678
|
+
"$ref": "#/$defs/HexColor",
|
|
1922
1679
|
"description": "Followed-hyperlink color (hex). OOXML folHlink.",
|
|
1923
1680
|
"examples": [
|
|
1924
1681
|
"#954F72",
|
|
@@ -1926,7 +1683,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1926
1683
|
]
|
|
1927
1684
|
},
|
|
1928
1685
|
"primary": {
|
|
1929
|
-
"
|
|
1686
|
+
"$ref": "#/$defs/HexColor",
|
|
1930
1687
|
"description": "Abstract role: primary brand color (hex). The engine maps this onto an OOXML accent slot when serializing.",
|
|
1931
1688
|
"examples": [
|
|
1932
1689
|
"#1E40AF",
|
|
@@ -1934,7 +1691,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1934
1691
|
]
|
|
1935
1692
|
},
|
|
1936
1693
|
"secondary": {
|
|
1937
|
-
"
|
|
1694
|
+
"$ref": "#/$defs/HexColor",
|
|
1938
1695
|
"description": "Abstract role: secondary brand color (hex).",
|
|
1939
1696
|
"examples": [
|
|
1940
1697
|
"#3B82F6",
|
|
@@ -1942,7 +1699,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1942
1699
|
]
|
|
1943
1700
|
},
|
|
1944
1701
|
"accent": {
|
|
1945
|
-
"
|
|
1702
|
+
"$ref": "#/$defs/HexColor",
|
|
1946
1703
|
"description": "Abstract role: accent color used for highlights and emphasis (hex).",
|
|
1947
1704
|
"examples": [
|
|
1948
1705
|
"#F59E0B",
|
|
@@ -1950,56 +1707,42 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
1950
1707
|
]
|
|
1951
1708
|
},
|
|
1952
1709
|
"background": {
|
|
1953
|
-
"
|
|
1954
|
-
"description": "Abstract role: default slide background color (hex)
|
|
1710
|
+
"$ref": "#/$defs/HexColor",
|
|
1711
|
+
"description": "Abstract role: default slide background color (hex), used when the design names no single-color background (and for gradient and picture backgrounds). Overrides light1 as that default.",
|
|
1955
1712
|
"examples": [
|
|
1956
1713
|
"#FFFFFF",
|
|
1957
1714
|
"#0B1220"
|
|
1958
1715
|
]
|
|
1959
1716
|
},
|
|
1960
1717
|
"surface": {
|
|
1961
|
-
"
|
|
1962
|
-
"description": "Abstract role: color for elevated surfaces such as cards and panels (hex).",
|
|
1718
|
+
"$ref": "#/$defs/HexColor",
|
|
1719
|
+
"description": "Abstract role: color for elevated surfaces such as cards and panels (hex). Overrides the default of light2 (dark2 on a dark slide).",
|
|
1963
1720
|
"examples": [
|
|
1964
1721
|
"#F8FAFC",
|
|
1965
1722
|
"#1E293B"
|
|
1966
1723
|
]
|
|
1967
1724
|
},
|
|
1968
1725
|
"text": {
|
|
1969
|
-
"
|
|
1970
|
-
"description": "Abstract role: primary body text color (hex).",
|
|
1726
|
+
"$ref": "#/$defs/HexColor",
|
|
1727
|
+
"description": "Abstract role: primary body text color (hex). Overrides dark1 on a light slide only; a dark slide always uses light1.",
|
|
1971
1728
|
"examples": [
|
|
1972
1729
|
"#0F172A",
|
|
1973
1730
|
"#F8FAFC"
|
|
1974
1731
|
]
|
|
1975
1732
|
},
|
|
1976
1733
|
"textSecondary": {
|
|
1977
|
-
"
|
|
1978
|
-
"description": "Abstract role: secondary or muted text color used for captions and supporting copy (hex).",
|
|
1734
|
+
"$ref": "#/$defs/HexColor",
|
|
1735
|
+
"description": "Abstract role: secondary or muted text color used for captions and supporting copy (hex). Overrides the default of dark2 (light2 on a dark slide).",
|
|
1979
1736
|
"examples": [
|
|
1980
1737
|
"#475569",
|
|
1981
1738
|
"#94A3B8"
|
|
1982
1739
|
]
|
|
1983
|
-
},
|
|
1984
|
-
"custom": {
|
|
1985
|
-
"type": "object",
|
|
1986
|
-
"additionalProperties": {
|
|
1987
|
-
"type": "string"
|
|
1988
|
-
},
|
|
1989
|
-
"description": "Map of custom named colors for advanced or theme-specific use.",
|
|
1990
|
-
"examples": [
|
|
1991
|
-
{
|
|
1992
|
-
"success": "#10B981",
|
|
1993
|
-
"warning": "#F59E0B",
|
|
1994
|
-
"danger": "#EF4444"
|
|
1995
|
-
}
|
|
1996
|
-
]
|
|
1997
1740
|
}
|
|
1998
1741
|
}
|
|
1999
1742
|
},
|
|
2000
1743
|
"FontScheme": {
|
|
2001
1744
|
"type": "object",
|
|
2002
|
-
"description": "Typography selections used by the design system. The pair fields (major, minor) and refinement fields (type, app, languageFamily) mirror font-scheme.schema.json (https://openpresentation.org/schema/opf-font-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields.\n\nTwo parallel models are supported and may be mixed:\n- OOXML pairs (major, minor) - heading and body family names that round-trip directly to PowerPoint majorFont/minorFont entries.\n- Abstract roles (heading, body, accent, code) - OPF-specific
|
|
1745
|
+
"description": "Typography selections used by the design system. The pair fields (major, minor) and refinement fields (type, app, languageFamily) mirror font-scheme.schema.json (https://openpresentation.org/schema/opf-font-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields.\n\nTwo parallel models are supported and may be mixed:\n- OOXML pairs (major, minor) - heading and body family names that round-trip directly to PowerPoint majorFont/minorFont entries.\n- Abstract roles (heading, body, accent, code) - OPF-specific font family names the engine maps onto the OOXML pair when serializing. Convenient for inline overrides and for adding accent/code roles that don't have a direct OOXML slot. Catalog records may also carry 'code' (for example the consolas and courier-new records); heading, body and accent are not part of the catalog record schema. A role is a family name only: weight, style and tracking come from the text styles, and PowerPoint has no numeric weight.\n\nIn design.fontScheme, 'id' resolves a fontSchemes catalog record as the base; pair and role overrides on the same object take precedence over the resolved scheme. The string shorthand on design.fontScheme is equivalent to setting only 'id'.",
|
|
2003
1746
|
"properties": {
|
|
2004
1747
|
"id": {
|
|
2005
1748
|
"type": "string",
|
|
@@ -2099,72 +1842,54 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2099
1842
|
"app": {
|
|
2100
1843
|
"type": "string",
|
|
2101
1844
|
"enum": [
|
|
2102
|
-
"
|
|
2103
|
-
"
|
|
1845
|
+
"powerpoint",
|
|
1846
|
+
"google-slides"
|
|
2104
1847
|
],
|
|
2105
|
-
"description": "Target application this font pairing is intended for."
|
|
1848
|
+
"description": "Target application this font pairing is intended for. Metadata for pickers and catalog filters: no engine changes its output by it."
|
|
2106
1849
|
},
|
|
2107
1850
|
"languageFamily": {
|
|
2108
1851
|
"type": "string",
|
|
2109
1852
|
"enum": [
|
|
2110
1853
|
"latin",
|
|
2111
1854
|
"ea",
|
|
2112
|
-
"cs"
|
|
1855
|
+
"cs",
|
|
1856
|
+
"eastAsian",
|
|
1857
|
+
"complexScript"
|
|
2113
1858
|
],
|
|
2114
|
-
"description": "
|
|
1859
|
+
"description": "Font-language family this scheme is intended for: 'latin' for Latin-script content, 'ea' (or 'eastAsian', the same value) for East Asian scripts, 'cs' (or 'complexScript', the same value) for Complex Scripts. The long names match the 'eastAsian' and 'complexScript' slot keys; the short names match the OOXML a:ea and a:cs elements; core reads both spellings as one value. As the design font scheme, an 'ea'/'eastAsian' or 'cs'/'complexScript' scheme also fills that script slot with its own major/minor families when its languages list is empty or names the presentation language."
|
|
2115
1860
|
},
|
|
2116
1861
|
"heading": {
|
|
2117
|
-
"
|
|
2118
|
-
"description": "Abstract role: font used for slide titles and headings. Maps onto the OOXML major slot when serializing."
|
|
1862
|
+
"type": "string",
|
|
1863
|
+
"description": "Abstract role: font family name used for slide titles and headings. Maps onto the OOXML major slot when serializing."
|
|
2119
1864
|
},
|
|
2120
1865
|
"body": {
|
|
2121
|
-
"
|
|
2122
|
-
"description": "Abstract role: font used for body copy. Maps onto the OOXML minor slot when serializing."
|
|
1866
|
+
"type": "string",
|
|
1867
|
+
"description": "Abstract role: font family name used for body copy. Maps onto the OOXML minor slot when serializing."
|
|
2123
1868
|
},
|
|
2124
1869
|
"accent": {
|
|
2125
|
-
"
|
|
2126
|
-
"description": "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."
|
|
1870
|
+
"type": "string",
|
|
1871
|
+
"description": "Abstract role: font family name 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."
|
|
2127
1872
|
},
|
|
2128
1873
|
"code": {
|
|
2129
|
-
"
|
|
2130
|
-
"description": "Abstract role: monospaced font used for code blocks and inline code. No direct OOXML slot. Resolution: this override, then the resolved catalog record's 'code' (for example Consolas for the consolas scheme), then the engine fallback Roboto Mono. Heading and body families are never used as the code fallback."
|
|
1874
|
+
"type": "string",
|
|
1875
|
+
"description": "Abstract role: monospaced font family name used for code blocks and for inline code runs (TextRun.code). No direct OOXML slot. Resolution: this override, then the resolved catalog record's 'code' (for example Consolas for the consolas scheme), then the engine fallback Roboto Mono. Heading and body families are never used as the code fallback."
|
|
2131
1876
|
}
|
|
2132
1877
|
}
|
|
2133
1878
|
},
|
|
2134
|
-
"
|
|
2135
|
-
"
|
|
2136
|
-
"
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
],
|
|
2140
|
-
"properties": {
|
|
2141
|
-
"family": {
|
|
2142
|
-
"type": "string",
|
|
2143
|
-
"description": "Font family name.",
|
|
2144
|
-
"examples": [
|
|
2145
|
-
"Inter",
|
|
2146
|
-
"Roboto",
|
|
2147
|
-
"Source Serif Pro",
|
|
2148
|
-
"JetBrains Mono"
|
|
2149
|
-
]
|
|
2150
|
-
},
|
|
2151
|
-
"weight": {
|
|
2152
|
-
"type": "number",
|
|
2153
|
-
"description": "Numeric font weight (e.g., 400 for regular, 700 for bold)."
|
|
2154
|
-
},
|
|
2155
|
-
"style": {
|
|
2156
|
-
"type": "string",
|
|
2157
|
-
"enum": [
|
|
2158
|
-
"normal",
|
|
2159
|
-
"italic"
|
|
2160
|
-
],
|
|
2161
|
-
"description": "Font style."
|
|
1879
|
+
"SlideDesign": {
|
|
1880
|
+
"description": "A slide's design: every Design field except dimensions. A PPTX has one slide size, so the size is set once, on the deck's design.dimensions (or its theme), and a slide's design cannot set it. A slide-level theme whose resolved dimensions differ from the deck's is a validate warning (opf/slide-theme-dimensions); exporting such a deck to PPTX fails with mixed-slide-dimensions.",
|
|
1881
|
+
"allOf": [
|
|
1882
|
+
{
|
|
1883
|
+
"$ref": "#/$defs/Design"
|
|
2162
1884
|
},
|
|
2163
|
-
|
|
2164
|
-
"
|
|
2165
|
-
|
|
1885
|
+
{
|
|
1886
|
+
"not": {
|
|
1887
|
+
"required": [
|
|
1888
|
+
"dimensions"
|
|
1889
|
+
]
|
|
1890
|
+
}
|
|
2166
1891
|
}
|
|
2167
|
-
|
|
1892
|
+
]
|
|
2168
1893
|
},
|
|
2169
1894
|
"DimensionPreset": {
|
|
2170
1895
|
"type": "string",
|
|
@@ -2172,12 +1897,15 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2172
1897
|
"16:9",
|
|
2173
1898
|
"4:3",
|
|
2174
1899
|
"16:10",
|
|
1900
|
+
"1:1",
|
|
1901
|
+
"4:5",
|
|
1902
|
+
"9:16",
|
|
2175
1903
|
"letter",
|
|
2176
1904
|
"a4",
|
|
2177
1905
|
"widescreen",
|
|
2178
1906
|
"standard"
|
|
2179
1907
|
],
|
|
2180
|
-
"description": "Named dimension preset; chooses both aspect ratio and physical size. 'widescreen' is an alias for 16:9 in PowerPoint widescreen size; 'standard' is an alias for 4:3 in PowerPoint standard size."
|
|
1908
|
+
"description": "Named dimension preset; chooses both aspect ratio and physical size. 'widescreen' is an alias for 16:9 in PowerPoint widescreen size; 'standard' is an alias for 4:3 in PowerPoint standard size. The social-feed ratios keep the widescreen short edge of 7.5 in: 1:1 is 7.5 x 7.5 in, 4:5 is 7.5 x 9.375 in and 9:16 is 7.5 x 13.333 in (portrait)."
|
|
2181
1909
|
},
|
|
2182
1910
|
"Dimensions": {
|
|
2183
1911
|
"type": "object",
|
|
@@ -2243,6 +1971,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2243
1971
|
"accent",
|
|
2244
1972
|
"background",
|
|
2245
1973
|
"surface",
|
|
1974
|
+
"surfaceAlt",
|
|
2246
1975
|
"text",
|
|
2247
1976
|
"textSecondary"
|
|
2248
1977
|
]
|
|
@@ -2252,7 +1981,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2252
1981
|
"pattern": "^var:[a-z][a-z0-9-]*$"
|
|
2253
1982
|
}
|
|
2254
1983
|
],
|
|
2255
|
-
"description": "A color value or reference, enforced on styled table cell fill and text colors and
|
|
1984
|
+
"description": "A color value or reference, enforced on styled table cell fill and text colors, cell border colors, solid background colors, gradient stop colors and pattern foreground and background colors. Three forms:\n- Literal hex: '#RGB', '#RRGGBB', or '#RRGGBBAA'.\n- Color-scheme name, resolved through the effective color scheme after design resolution: an OOXML slot ('accent1'-'accent6', 'dark1', 'dark2', 'light1', 'light2', 'hyperlink', 'followedHyperlink') or an abstract role ('primary', 'secondary', 'accent', 'background', 'surface', 'surfaceAlt', 'text', 'textSecondary'). Roles resolve through the same role-to-slot mapping engines already apply to color schemes. 'surfaceAlt' has no slot: it is the alternate surface of banded table rows, derived from 'surface' and 'text' (the surface mixed a tenth of the way towards the text color, further when needed, so it always differs visibly from 'surface' and keeps 4.5:1 text contrast; core surfaceAltColor).\n- Variable reference: 'var:<id>' into the top-level variables map.\n\nNames keep content theme-portable: re-theming the deck updates every named reference, where a literal hex stays frozen. Unknown 'var:' ids produce a validation warning, never an error, and engines fall back to their default text color. TextRun.color documents the same three forms but remains an open string so imported decks with unrecognized run colors stay valid; validators warn there instead of erroring.",
|
|
2256
1985
|
"examples": [
|
|
2257
1986
|
"#0F4C81",
|
|
2258
1987
|
"accent2",
|
|
@@ -2268,7 +1997,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2268
1997
|
"additionalProperties": {
|
|
2269
1998
|
"$ref": "#/$defs/Variable"
|
|
2270
1999
|
},
|
|
2271
|
-
"description": "Named variables, keyed by stable kebab-case id. A variable is a typed, named value the deck declares once and uses in many places: a color ('var:<id>' in color fields, the original use), or content that fills a template (text, number, date, image, url, list). Content is referenced inline as '{{<id>}}' inside any string, or whole as 'var:<id>' in a field of the matching type; '\\{{' writes a literal '{{'. A hex string is shorthand for a color variable. A variable with no 'value' is unfilled: expected in a template (root 'template': true), an error in a normal deck. Engines resolve variables with resolveVariables() before composing, rendering or exporting, so a template plus its values previews and exports exactly like the equivalent hand-written deck. See docs/templates-and-variables.md.",
|
|
2000
|
+
"description": "Named variables, keyed by stable kebab-case id. A variable is a typed, named value the deck declares once and uses in many places: a color ('var:<id>' in color fields, the original use), or content that fills a template (text, number, date, image, url, list). Content is referenced inline as '{{<id>}}' inside any string, or whole as 'var:<id>' in a field of the matching type; '\\{{' writes a literal '{{'. A hex string is shorthand for a color variable. A variable with no 'value' is unfilled: expected in a template (root 'template': true), an error in a normal deck. Engines resolve variables with resolveVariables() before composing, rendering or exporting, so a template plus its values previews and exports exactly like the equivalent hand-written deck. Read-only built-in variables come from the deck's own metadata and use dotted names that a user id can never take: 'deck.name', 'deck.description', 'deck.author', 'speaker.name|title|email|phone|bio|photo' (first speaker), 'speakers' (every speaker's name, a list), 'organization.name|legalName|tagline|domain|email|phone|logo' (primary organization), and 'speaker.<id>.<field>' / 'organization.<id>.<field>' by id. They are written the same two ways ('{{speaker.name}}', 'var:speaker.photo'), are never declared, and an unknown built-in path is a validation error; a known one with no source value resolves to nothing with a warning. The id 'speakers' is reserved. See docs/templates-and-variables.md.",
|
|
2272
2001
|
"examples": [
|
|
2273
2002
|
{
|
|
2274
2003
|
"risk": "#B42318",
|
|
@@ -2721,7 +2450,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2721
2450
|
"description": "Fixed solid background fill."
|
|
2722
2451
|
},
|
|
2723
2452
|
"color": {
|
|
2724
|
-
"
|
|
2453
|
+
"$ref": "#/$defs/ColorRef",
|
|
2725
2454
|
"description": "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.",
|
|
2726
2455
|
"examples": [
|
|
2727
2456
|
"#FFFFFF",
|
|
@@ -2760,7 +2489,8 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2760
2489
|
},
|
|
2761
2490
|
"stops": {
|
|
2762
2491
|
"type": "array",
|
|
2763
|
-
"
|
|
2492
|
+
"minItems": 2,
|
|
2493
|
+
"description": "Ordered list of color stops along the gradient. A gradient needs at least two stops.",
|
|
2764
2494
|
"items": {
|
|
2765
2495
|
"type": "object",
|
|
2766
2496
|
"description": "Color stop along the gradient.",
|
|
@@ -2770,7 +2500,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2770
2500
|
],
|
|
2771
2501
|
"properties": {
|
|
2772
2502
|
"color": {
|
|
2773
|
-
"
|
|
2503
|
+
"$ref": "#/$defs/ColorRef",
|
|
2774
2504
|
"description": "Stop color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).",
|
|
2775
2505
|
"examples": [
|
|
2776
2506
|
"#1E40AF",
|
|
@@ -2875,14 +2605,14 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2875
2605
|
]
|
|
2876
2606
|
},
|
|
2877
2607
|
"foregroundColor": {
|
|
2878
|
-
"
|
|
2608
|
+
"$ref": "#/$defs/ColorRef",
|
|
2879
2609
|
"description": "Foreground color for the pattern: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).",
|
|
2880
2610
|
"examples": [
|
|
2881
2611
|
"#0F172A"
|
|
2882
2612
|
]
|
|
2883
2613
|
},
|
|
2884
2614
|
"backgroundColor": {
|
|
2885
|
-
"
|
|
2615
|
+
"$ref": "#/$defs/ColorRef",
|
|
2886
2616
|
"description": "Background color behind the pattern: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).",
|
|
2887
2617
|
"examples": [
|
|
2888
2618
|
"#FFFFFF"
|
|
@@ -2955,15 +2685,36 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2955
2685
|
},
|
|
2956
2686
|
"Watermark": {
|
|
2957
2687
|
"type": "object",
|
|
2958
|
-
"description": "Decorative watermark image and
|
|
2688
|
+
"description": "Decorative watermark: an image ('src') or a text stamp ('text'), exactly one of the two, with its opacity. An image is drawn once per slide, contained and centered in a fixed frame (the middle 40% of the slide width and height, from 30% to 70% on each axis). A text watermark is one line of text in the heading font and the theme text color at the given opacity, centered on the slide and rotated 30 degrees counterclockwise (rising to the right), sized to span at most 70% of the slide width and at most 30% of the shorter slide edge in height; it is drawn behind the slide content and above the background and slide image. There is no option to move, scale, rotate or tile either form. PPTX export writes one native picture (image) or one native text box (text) per slide with the opacity as alpha, and import restores the watermark. A string or Asset (no opacity) is the image watermark at opacity 0.08. A watermark object needs opacity and exactly one of src and text; use a plain string or Asset for an image at the default opacity. Use design.watermark = false to disable an inherited watermark.",
|
|
2959
2689
|
"additionalProperties": false,
|
|
2960
2690
|
"required": [
|
|
2961
2691
|
"opacity"
|
|
2962
2692
|
],
|
|
2693
|
+
"oneOf": [
|
|
2694
|
+
{
|
|
2695
|
+
"required": [
|
|
2696
|
+
"src"
|
|
2697
|
+
]
|
|
2698
|
+
},
|
|
2699
|
+
{
|
|
2700
|
+
"required": [
|
|
2701
|
+
"text"
|
|
2702
|
+
]
|
|
2703
|
+
}
|
|
2704
|
+
],
|
|
2963
2705
|
"properties": {
|
|
2964
2706
|
"src": {
|
|
2965
2707
|
"type": "string",
|
|
2966
|
-
"description": "Source for the watermark image."
|
|
2708
|
+
"description": "Source for the watermark image: an 'asset:<id>' reference, HTTPS URL, data URI, relative path or local path, as for Asset.src. Exactly one of src and text is set."
|
|
2709
|
+
},
|
|
2710
|
+
"text": {
|
|
2711
|
+
"type": "string",
|
|
2712
|
+
"minLength": 1,
|
|
2713
|
+
"description": "Text for a text watermark, such as DRAFT or CONFIDENTIAL; line breaks are drawn as spaces. Exactly one of src and text is set.",
|
|
2714
|
+
"examples": [
|
|
2715
|
+
"DRAFT",
|
|
2716
|
+
"CONFIDENTIAL"
|
|
2717
|
+
]
|
|
2967
2718
|
},
|
|
2968
2719
|
"opacity": {
|
|
2969
2720
|
"type": "number",
|
|
@@ -2993,7 +2744,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
2993
2744
|
},
|
|
2994
2745
|
"HeaderFooterItem": {
|
|
2995
2746
|
"type": "object",
|
|
2996
|
-
"description": "One header/footer zone. Every configured field renders; fields in one zone stack top to bottom in the order logo, image, text, organization, socials, section, slide number, date. Put a date and a slide number in different zones to keep each on the zone's single line.",
|
|
2747
|
+
"description": "One header/footer zone. Every configured field renders; fields in one zone stack top to bottom in the order logo, image, text, organization, speaker, socials, section, slide number, date. Put a date and a slide number in different zones to keep each on the zone's single line.",
|
|
2997
2748
|
"properties": {
|
|
2998
2749
|
"logo": {
|
|
2999
2750
|
"type": "boolean",
|
|
@@ -3059,7 +2810,11 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3059
2810
|
},
|
|
3060
2811
|
"organization": {
|
|
3061
2812
|
"type": "boolean",
|
|
3062
|
-
"description": "Whether to render the primary organization name from organization."
|
|
2813
|
+
"description": "Whether to render the primary organization's name from organization (role 'primary', else the first organization)."
|
|
2814
|
+
},
|
|
2815
|
+
"speaker": {
|
|
2816
|
+
"type": "boolean",
|
|
2817
|
+
"description": "Whether to render the primary (first) speaker's name and title from speaker, joined as 'Ada Lovelace, CTO' (just the name when the speaker has no title). It is generated text: without a named speaker the engine reports unresolved-content at this field. PPTX export writes it as static text and import restores the flag from the file's furniture provenance."
|
|
3063
2818
|
},
|
|
3064
2819
|
"section": {
|
|
3065
2820
|
"type": "boolean",
|
|
@@ -3114,11 +2869,11 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3114
2869
|
}
|
|
3115
2870
|
}
|
|
3116
2871
|
],
|
|
3117
|
-
"description": "Optional reference to one or more narrative
|
|
2872
|
+
"description": "Optional reference to one or more beats of the deck's narrative (each value is the id of a beat in the narrative record that the root 'narrative' resolves to). A single string declares the slide's primary beat; an array declares that one slide covers multiple beats. Declares the slide's role in the story arc; does not constrain ordering or structure. Core validate warns about a beat id the resolved narrative does not define, and reports a beat that no slide references. Slides without a beat are valid; multiple slides may share a beat."
|
|
3118
2873
|
},
|
|
3119
2874
|
"layout": {
|
|
3120
2875
|
"type": "string",
|
|
3121
|
-
"description": "Optional
|
|
2876
|
+
"description": "Optional. Resolves to the 'id' of a 'layouts' catalog record. When omitted, or when it names an id that no inline record, host catalog or default catalog defines, the slide is composed with no layout record: engines arrange title, subtitle, tag and content automatically, a slide with no body payload is a cover (vertically centered), and design hints apply. A layout never changes what a slide contains. An unresolved id is an `unresolved-layout` diagnostic and a `catalog-reference` warning, never an error. Engines must not substitute a different layout for an omitted one. Accepts a bare id (lowercase kebab-case, e.g. 'title-subtitle'), an HTTPS URL pointing at a record file, or a 'pkg:' reference.\n\nResolution order: inline catalogs.layouts.records[] \u2192 catalogs.layouts.source \u2192 default catalog at https://www.pptx.gallery/layouts.",
|
|
3122
2877
|
"examples": [
|
|
3123
2878
|
"title",
|
|
3124
2879
|
"title-subtitle",
|
|
@@ -3131,25 +2886,62 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3131
2886
|
]
|
|
3132
2887
|
},
|
|
3133
2888
|
"title": {
|
|
3134
|
-
"
|
|
3135
|
-
|
|
2889
|
+
"oneOf": [
|
|
2890
|
+
{
|
|
2891
|
+
"type": "string"
|
|
2892
|
+
},
|
|
2893
|
+
{
|
|
2894
|
+
"type": "array",
|
|
2895
|
+
"items": {
|
|
2896
|
+
"$ref": "#/$defs/TextRun"
|
|
2897
|
+
}
|
|
2898
|
+
}
|
|
2899
|
+
],
|
|
2900
|
+
"description": "Slide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there. Use a string for plain text or TextRun[] for inline rich text (a colored word, bold, a link, a citation or footnote marker); the heading keeps its size and fitting rules either way, and run colors resolve like body text.",
|
|
3136
2901
|
"examples": [
|
|
3137
2902
|
"Quarterly Review",
|
|
3138
2903
|
"Why Now",
|
|
3139
|
-
"Next Steps"
|
|
2904
|
+
"Next Steps",
|
|
2905
|
+
[
|
|
2906
|
+
"Revenue grew ",
|
|
2907
|
+
{
|
|
2908
|
+
"text": "28%",
|
|
2909
|
+
"color": "accent1"
|
|
2910
|
+
}
|
|
2911
|
+
]
|
|
3140
2912
|
]
|
|
3141
2913
|
},
|
|
3142
2914
|
"subtitle": {
|
|
3143
|
-
"
|
|
3144
|
-
|
|
2915
|
+
"oneOf": [
|
|
2916
|
+
{
|
|
2917
|
+
"type": "string"
|
|
2918
|
+
},
|
|
2919
|
+
{
|
|
2920
|
+
"type": "array",
|
|
2921
|
+
"items": {
|
|
2922
|
+
"$ref": "#/$defs/TextRun"
|
|
2923
|
+
}
|
|
2924
|
+
}
|
|
2925
|
+
],
|
|
2926
|
+
"description": "Slide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there. Use a string for plain text or TextRun[] for inline rich text (a colored word, bold, a link, a citation or footnote marker); the heading keeps its size and fitting rules either way, and run colors resolve like body text.",
|
|
3145
2927
|
"examples": [
|
|
3146
2928
|
"Prepared for the board",
|
|
3147
2929
|
"Three signals changed this quarter"
|
|
3148
2930
|
]
|
|
3149
2931
|
},
|
|
3150
2932
|
"tag": {
|
|
3151
|
-
"
|
|
3152
|
-
|
|
2933
|
+
"oneOf": [
|
|
2934
|
+
{
|
|
2935
|
+
"type": "string"
|
|
2936
|
+
},
|
|
2937
|
+
{
|
|
2938
|
+
"type": "array",
|
|
2939
|
+
"items": {
|
|
2940
|
+
"$ref": "#/$defs/TextRun"
|
|
2941
|
+
}
|
|
2942
|
+
}
|
|
2943
|
+
],
|
|
2944
|
+
"description": "Small slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there. Use a string for plain text or TextRun[] for inline rich text (a colored word, bold, a link, a citation or footnote marker); the heading keeps its size and fitting rules either way, and run colors resolve like body text.",
|
|
3153
2945
|
"examples": [
|
|
3154
2946
|
"Intro",
|
|
3155
2947
|
"Confidential",
|
|
@@ -3211,7 +3003,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3211
3003
|
},
|
|
3212
3004
|
"video": {
|
|
3213
3005
|
"$ref": "#/$defs/Asset",
|
|
3214
|
-
"description": "Full-slide video source. Presence of this field infers type 'video'."
|
|
3006
|
+
"description": "Full-slide video source. Presence of this field infers type 'video'. Engines do not play video: the preview draws a placeholder (a play badge with the asset's title or source as its caption), and PPTX export draws the same placeholder as native shapes linked to an http(s) source, with no embedded media. Native playback is out of scope (docs/programs/release-readiness)."
|
|
3215
3007
|
},
|
|
3216
3008
|
"chart": {
|
|
3217
3009
|
"$ref": "#/$defs/Chart",
|
|
@@ -3244,7 +3036,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3244
3036
|
"$ref": "#/$defs/Metric"
|
|
3245
3037
|
}
|
|
3246
3038
|
],
|
|
3247
|
-
"description": `Full-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and
|
|
3039
|
+
"description": `Full-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, trend, and sentiment metadata. Numeric values remain numbers; renderers format them for display. Presence of this field infers type 'metric'.`
|
|
3248
3040
|
},
|
|
3249
3041
|
"quote": {
|
|
3250
3042
|
"oneOf": [
|
|
@@ -3273,7 +3065,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3273
3065
|
"description": "Layout-agnostic content blocks rendered together as a composed payload when exact placement is unspecified. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for equivalent blocks."
|
|
3274
3066
|
},
|
|
3275
3067
|
"design": {
|
|
3276
|
-
"$ref": "#/$defs/
|
|
3068
|
+
"$ref": "#/$defs/SlideDesign",
|
|
3277
3069
|
"description": "Slide-level design applied on top of the deck-wide design."
|
|
3278
3070
|
},
|
|
3279
3071
|
"left": {
|
|
@@ -3440,7 +3232,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3440
3232
|
},
|
|
3441
3233
|
"hidden": {
|
|
3442
3234
|
"type": "boolean",
|
|
3443
|
-
"description": "Whether the slide is hidden from the presented sequence."
|
|
3235
|
+
"description": "Whether the slide is hidden from the presented sequence. The player skips it, the PPTX export writes it as a hidden slide, and per-slide image and PDF output skips it unless the caller asks to include hidden slides (opf CLI: --include-hidden; the deck-level renderSvg: the opt-in skipHidden). A slide named explicitly (opf render --slides, renderSvg slideIndex) is still rendered."
|
|
3444
3236
|
},
|
|
3445
3237
|
"composition": {
|
|
3446
3238
|
"$ref": "#/$defs/Composition"
|
|
@@ -3581,7 +3373,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3581
3373
|
},
|
|
3582
3374
|
"video": {
|
|
3583
3375
|
"$ref": "#/$defs/Asset",
|
|
3584
|
-
"description": "Source for a video item.",
|
|
3376
|
+
"description": "Source for a video item. Engines do not play video: the preview draws a placeholder (a play badge with the asset's title or source as its caption), and PPTX export draws the same placeholder as native shapes linked to an http(s) source, with no embedded media. Native playback is out of scope (docs/programs/release-readiness).",
|
|
3585
3377
|
"examples": [
|
|
3586
3378
|
"asset:demo-video",
|
|
3587
3379
|
"./media/demo.mp4"
|
|
@@ -3626,7 +3418,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3626
3418
|
"$ref": "#/$defs/Metric"
|
|
3627
3419
|
}
|
|
3628
3420
|
],
|
|
3629
|
-
"description": 'Metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and
|
|
3421
|
+
"description": 'Metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, trend, and sentiment metadata. Numeric values remain numbers; renderers format them for display.',
|
|
3630
3422
|
"examples": [
|
|
3631
3423
|
"98%",
|
|
3632
3424
|
42,
|
|
@@ -3648,7 +3440,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3648
3440
|
"$ref": "#/$defs/Quote"
|
|
3649
3441
|
}
|
|
3650
3442
|
],
|
|
3651
|
-
"description": 'Quote payload. A string is shorthand for { "text": value }; object form carries optional attribution and source metadata.',
|
|
3443
|
+
"description": 'Quote payload. A string is shorthand for { "text": value }; object form carries optional attribution, role, photo and source metadata.',
|
|
3652
3444
|
"examples": [
|
|
3653
3445
|
"This changed how our team handles reviews.",
|
|
3654
3446
|
{
|
|
@@ -3967,29 +3759,70 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3967
3759
|
},
|
|
3968
3760
|
"Quote": {
|
|
3969
3761
|
"type": "object",
|
|
3970
|
-
"description": `Quote content with optional attribution metadata. Use 'text' for the quoted text, 'attribution' for the credited person or organization, and 'source' for a citation or URL. A string value in a quote field is shorthand for { "text": value }.`,
|
|
3762
|
+
"description": `Quote content with optional attribution metadata. Use 'text' for the quoted text, 'attribution' for the credited person or organization, 'role' for that person's title and organization, 'photo' for their headshot and 'source' for a citation or URL. A string value in a quote field is shorthand for { "text": value }.`,
|
|
3971
3763
|
"additionalProperties": false,
|
|
3972
3764
|
"required": [
|
|
3973
3765
|
"text"
|
|
3974
3766
|
],
|
|
3975
3767
|
"properties": {
|
|
3976
3768
|
"text": {
|
|
3977
|
-
"
|
|
3978
|
-
|
|
3769
|
+
"oneOf": [
|
|
3770
|
+
{
|
|
3771
|
+
"type": "string"
|
|
3772
|
+
},
|
|
3773
|
+
{
|
|
3774
|
+
"type": "array",
|
|
3775
|
+
"items": {
|
|
3776
|
+
"$ref": "#/$defs/TextRun"
|
|
3777
|
+
}
|
|
3778
|
+
}
|
|
3779
|
+
],
|
|
3780
|
+
"description": "Quoted text: a string, or TextRun[] for inline rich text (a colored phrase, bold, a link, or a citation or footnote marker). The engine draws the surrounding quotation marks.",
|
|
3979
3781
|
"examples": [
|
|
3980
|
-
"This changed how our team handles reviews."
|
|
3782
|
+
"This changed how our team handles reviews.",
|
|
3783
|
+
[
|
|
3784
|
+
"Cut review time by ",
|
|
3785
|
+
{
|
|
3786
|
+
"text": "40%",
|
|
3787
|
+
"bold": true
|
|
3788
|
+
},
|
|
3789
|
+
{
|
|
3790
|
+
"text": " in a quarter",
|
|
3791
|
+
"cite": "acme-case-study"
|
|
3792
|
+
}
|
|
3793
|
+
]
|
|
3981
3794
|
]
|
|
3982
3795
|
},
|
|
3983
3796
|
"attribution": {
|
|
3984
3797
|
"type": "string",
|
|
3985
|
-
"description": "Person or organization credited for the quote.",
|
|
3798
|
+
"description": "Person or organization credited for the quote. Drawn after the quote text, in the muted text color.",
|
|
3986
3799
|
"examples": [
|
|
3987
|
-
"
|
|
3800
|
+
"Priya Raman",
|
|
3801
|
+
"Acme Corp"
|
|
3802
|
+
]
|
|
3803
|
+
},
|
|
3804
|
+
"role": {
|
|
3805
|
+
"type": "string",
|
|
3806
|
+
"description": "Title and organization of the attributed person. Drawn on its own line under the attribution; without an attribution it stands alone. It does not replace the attribution, so the person's name belongs in 'attribution'.",
|
|
3807
|
+
"examples": [
|
|
3808
|
+
"VP Operations, Acme",
|
|
3809
|
+
"Head of Platform"
|
|
3810
|
+
]
|
|
3811
|
+
},
|
|
3812
|
+
"photo": {
|
|
3813
|
+
"$ref": "#/$defs/Asset",
|
|
3814
|
+
"description": "Headshot of the attributed person, drawn as a circle beside the attribution and role lines (on the end side in a right-to-left deck). Give it alt text (validate's opf/missing-alt-text rule checks it). A raster photograph works best; an SVG exports as its PNG raster because the circular mask is not confirmed on SVG pictures in PowerPoint. An unresolved source draws the ordinary image placeholder.",
|
|
3815
|
+
"examples": [
|
|
3816
|
+
"./assets/priya-raman.jpg",
|
|
3817
|
+
{
|
|
3818
|
+
"src": "asset:priya-raman",
|
|
3819
|
+
"alt": "Priya Raman"
|
|
3820
|
+
}
|
|
3988
3821
|
]
|
|
3989
3822
|
},
|
|
3990
3823
|
"source": {
|
|
3991
3824
|
"type": "string",
|
|
3992
|
-
"description": "Optional quote source, citation, or URL.",
|
|
3825
|
+
"description": "Optional quote source, citation, or URL. Follows the attribution and role after ' - '.",
|
|
3993
3826
|
"examples": [
|
|
3994
3827
|
"Customer interview, March 2026",
|
|
3995
3828
|
"https://acme.com/case-study"
|
|
@@ -3999,7 +3832,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
3999
3832
|
},
|
|
4000
3833
|
"Code": {
|
|
4001
3834
|
"type": "object",
|
|
4002
|
-
"description": `Code content with optional rendering metadata. Use 'source' for the code text, 'language' for syntax highlighting,
|
|
3835
|
+
"description": `Code content with optional rendering metadata. Use 'source' for the code text, 'language' for syntax highlighting, 'filename' when the rendered block should show a file label, and 'highlight' to emphasize lines. A string value in a code field is shorthand for { "source": value }.`,
|
|
4003
3836
|
"additionalProperties": false,
|
|
4004
3837
|
"required": [
|
|
4005
3838
|
"source"
|
|
@@ -4034,12 +3867,52 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4034
3867
|
"components/Button.tsx",
|
|
4035
3868
|
"terraform/main.tf"
|
|
4036
3869
|
]
|
|
3870
|
+
},
|
|
3871
|
+
"highlight": {
|
|
3872
|
+
"type": "array",
|
|
3873
|
+
"minItems": 1,
|
|
3874
|
+
"items": {
|
|
3875
|
+
"oneOf": [
|
|
3876
|
+
{
|
|
3877
|
+
"type": "integer",
|
|
3878
|
+
"minimum": 1
|
|
3879
|
+
},
|
|
3880
|
+
{
|
|
3881
|
+
"type": "array",
|
|
3882
|
+
"minItems": 2,
|
|
3883
|
+
"maxItems": 2,
|
|
3884
|
+
"items": {
|
|
3885
|
+
"type": "integer",
|
|
3886
|
+
"minimum": 1
|
|
3887
|
+
}
|
|
3888
|
+
}
|
|
3889
|
+
]
|
|
3890
|
+
},
|
|
3891
|
+
"description": "Source lines to emphasize, 1-based: each entry is a line number or an inclusive [start, end] range, so [3, [5, 7]] marks lines 3 and 5 to 7. Lines are counted by line break in 'source', so a line that wraps stays one line. Engines draw a theme-derived band behind the marked lines and dim the other lines slightly, keeping every line at least 4.5:1 against its background; PPTX export draws one native rectangle behind the line text boxes and import restores the list. A line number past the last line, or a range written end before start, gets a validation warning (code-highlight-out-of-range, code-highlight-range-reversed) and is ignored. When a code block is paginated across slides each page keeps the lines that fall on it, renumbered from 1.",
|
|
3892
|
+
"examples": [
|
|
3893
|
+
[
|
|
3894
|
+
3
|
|
3895
|
+
],
|
|
3896
|
+
[
|
|
3897
|
+
3,
|
|
3898
|
+
[
|
|
3899
|
+
5,
|
|
3900
|
+
7
|
|
3901
|
+
]
|
|
3902
|
+
],
|
|
3903
|
+
[
|
|
3904
|
+
[
|
|
3905
|
+
2,
|
|
3906
|
+
4
|
|
3907
|
+
]
|
|
3908
|
+
]
|
|
3909
|
+
]
|
|
4037
3910
|
}
|
|
4038
3911
|
}
|
|
4039
3912
|
},
|
|
4040
3913
|
"Metric": {
|
|
4041
3914
|
"type": "object",
|
|
4042
|
-
"description": `Metric content with optional display metadata. Use 'value' for the primary value, 'label' for the metric name, 'description' for supporting context, 'unit' for a suffix/currency marker, 'delta' for change, and '
|
|
3915
|
+
"description": `Metric content with optional display metadata. Use 'value' for the primary value, 'label' for the metric name, 'description' for supporting context, 'unit' for a suffix/currency marker, 'delta' for change, 'trend' for direction, and 'sentiment' for whether the change is good news. A string or number value in a metric field is shorthand for { "value": value }; numeric values remain numbers and are formatted by renderers.`,
|
|
4043
3916
|
"additionalProperties": false,
|
|
4044
3917
|
"required": [
|
|
4045
3918
|
"value"
|
|
@@ -4109,7 +3982,16 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4109
3982
|
"down",
|
|
4110
3983
|
"flat"
|
|
4111
3984
|
],
|
|
4112
|
-
"description": "Metric trend direction."
|
|
3985
|
+
"description": "Metric trend direction. The preview and the PowerPoint export draw an arrow beside the trend word that always points the way the trend does (up, down or flat) and colour the arrow, the trend word and the delta text by `sentiment`."
|
|
3986
|
+
},
|
|
3987
|
+
"sentiment": {
|
|
3988
|
+
"type": "string",
|
|
3989
|
+
"enum": [
|
|
3990
|
+
"positive",
|
|
3991
|
+
"negative",
|
|
3992
|
+
"neutral"
|
|
3993
|
+
],
|
|
3994
|
+
"description": "Whether the change is good news. Positive draws the trend arrow and the trend and delta text in green, negative in red and neutral in the neutral text colour, each kept at 4.5:1 contrast or more against the slide background. When absent the colour follows the trend: up is positive, down is negative and flat is neutral. Set it when the direction is not the verdict, for example positive on a falling churn, cost or latency trend. The arrow always keeps the direction of `trend`. Only the trend arrow and the trend and delta text take the colour, so sentiment has no visible effect on a metric without a trend."
|
|
4113
3995
|
}
|
|
4114
3996
|
}
|
|
4115
3997
|
},
|
|
@@ -4189,6 +4071,20 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4189
4071
|
"examples": [
|
|
4190
4072
|
"Launch with the first operations team."
|
|
4191
4073
|
]
|
|
4074
|
+
},
|
|
4075
|
+
"status": {
|
|
4076
|
+
"type": "string",
|
|
4077
|
+
"enum": [
|
|
4078
|
+
"done",
|
|
4079
|
+
"current",
|
|
4080
|
+
"planned"
|
|
4081
|
+
],
|
|
4082
|
+
"description": "Progress of the event, drawn from the deck's own colors by both the SVG renderer and the PPTX exporter. Absent means no status and the event is drawn as a plain filled marker with normal text, which is also how 'done' looks. 'done' is a filled marker in the primary color with normal text. 'current' marks 'we are here': the filled marker is surrounded by a ring and the event label (`what`) is bold. 'planned' is an outlined, hollow marker (primary-color outline over the slide background) with muted secondary text. Text colors keep a 4.5:1 contrast against the slide background. In PPTX the markers are native ellipses (the ring is a second ellipse), and PPTX import restores the status the export recorded. Status describes progress only; schedule health such as at risk or blocked belongs in the event text.",
|
|
4083
|
+
"examples": [
|
|
4084
|
+
"done",
|
|
4085
|
+
"current",
|
|
4086
|
+
"planned"
|
|
4087
|
+
]
|
|
4192
4088
|
}
|
|
4193
4089
|
}
|
|
4194
4090
|
},
|
|
@@ -4448,19 +4344,36 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4448
4344
|
},
|
|
4449
4345
|
"fontFamily": {
|
|
4450
4346
|
"type": "string",
|
|
4451
|
-
"description": "Run font family override.",
|
|
4347
|
+
"description": "Run font family override. It wins over the code font a run with 'code' takes.",
|
|
4452
4348
|
"examples": [
|
|
4453
4349
|
"Inter",
|
|
4454
4350
|
"Source Serif Pro",
|
|
4455
4351
|
"JetBrains Mono"
|
|
4456
4352
|
]
|
|
4457
4353
|
},
|
|
4354
|
+
"code": {
|
|
4355
|
+
"type": "boolean",
|
|
4356
|
+
"description": "Whether the run is an inline code span: it is drawn in the design's code font (design.fontScheme.code, else the resolved font scheme's code family, else Roboto Mono), unless the run names its own fontFamily. Only the font changes; there is no background, because a PPTX run cannot have one. Markdown backticks read and write code runs."
|
|
4357
|
+
},
|
|
4358
|
+
"lang": {
|
|
4359
|
+
"type": "string",
|
|
4360
|
+
"pattern": "^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$",
|
|
4361
|
+
"description": "BCP-47 language tag of the run, such as 'fr-FR' or 'ja-JP', when it differs from the deck language. It sets the proofing language (PPTX a:rPr lang) and the language the run's script fonts and glyph variants follow (for example the Japanese or the Simplified Chinese face for Han characters); without it the run follows the deck language.",
|
|
4362
|
+
"examples": [
|
|
4363
|
+
"fr-FR",
|
|
4364
|
+
"ja-JP",
|
|
4365
|
+
"de"
|
|
4366
|
+
]
|
|
4367
|
+
},
|
|
4458
4368
|
"link": {
|
|
4459
4369
|
"type": "string",
|
|
4460
|
-
"
|
|
4370
|
+
"pattern": "^(https?://|mailto:|tel:)\\S+$",
|
|
4371
|
+
"description": "URL to link the run text to: an http(s) URL, a 'mailto:' address or a 'tel:' number, without whitespace. The preview draws it as a link and PPTX export writes a native hyperlink for all three; any other scheme is not valid.",
|
|
4461
4372
|
"examples": [
|
|
4462
4373
|
"https://acme.com",
|
|
4463
|
-
"https://acme.com/case-studies/beta"
|
|
4374
|
+
"https://acme.com/case-studies/beta",
|
|
4375
|
+
"mailto:hello@acme.com",
|
|
4376
|
+
"tel:+15551234567"
|
|
4464
4377
|
]
|
|
4465
4378
|
},
|
|
4466
4379
|
"superscript": {
|
|
@@ -4486,7 +4399,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4486
4399
|
}
|
|
4487
4400
|
}
|
|
4488
4401
|
],
|
|
4489
|
-
"description": "One or more ids from the top-level references list that this run cites. Engines draw a superscript marker ('1', or '1,2' for several ids) directly after the run and list '<n> <reference text>' in the slide's footnote area; markers are numbered per deck in order of first use, and the same id keeps its number. An id missing from references is a validation error (cite-unknown-reference). Supported in text, bullets and list item runs.",
|
|
4402
|
+
"description": "One or more ids from the top-level references list that this run cites. Engines draw a superscript marker ('1', or '1,2' for several ids) directly after the run and list '<n> <reference text>' in the slide's footnote area; markers are numbered per deck in order of first use, and the same id keeps its number. An id missing from references is a validation error (cite-unknown-reference). Supported in text, bullets and list item runs, in the slide title, subtitle and tag, and in the quote text.",
|
|
4490
4403
|
"examples": [
|
|
4491
4404
|
"gartner-2026",
|
|
4492
4405
|
[
|
|
@@ -4509,7 +4422,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4509
4422
|
}
|
|
4510
4423
|
}
|
|
4511
4424
|
],
|
|
4512
|
-
"description": "An inline note for this run, without a references entry. Engines draw a superscript marker after the run and list the note in the slide's footnote area; every footnote takes a new number in the deck's marker sequence. Supported in text, bullets and list item runs.",
|
|
4425
|
+
"description": "An inline note for this run, without a references entry. Engines draw a superscript marker after the run and list the note in the slide's footnote area; every footnote takes a new number in the deck's marker sequence. Supported in text, bullets and list item runs, in the slide title, subtitle and tag, and in the quote text.",
|
|
4513
4426
|
"examples": [
|
|
4514
4427
|
"Excludes the discontinued hardware line."
|
|
4515
4428
|
]
|
|
@@ -4632,7 +4545,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4632
4545
|
"properties": {
|
|
4633
4546
|
"type": {
|
|
4634
4547
|
"type": "string",
|
|
4635
|
-
"description": "Chart type id. Resolves to the id of a chartTypes catalog record; renderers map that record through mappings.openxml and any renderer-specific mapping they understand. The bundled catalog covers the chart types Aspose.Slides officially supports
|
|
4548
|
+
"description": "Chart type id. Resolves to the id of a chartTypes catalog record; renderers map that record through mappings.openxml and any renderer-specific mapping they understand. The bundled catalog covers the chart types Aspose.Slides officially supports, plus 'combo' (clustered columns with line series, see 'line' and 'secondaryAxis').",
|
|
4636
4549
|
"examples": [
|
|
4637
4550
|
"column",
|
|
4638
4551
|
"bar",
|
|
@@ -4645,7 +4558,8 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4645
4558
|
"waterfall",
|
|
4646
4559
|
"funnel",
|
|
4647
4560
|
"treemap",
|
|
4648
|
-
"stacked-column
|
|
4561
|
+
"stacked-column",
|
|
4562
|
+
"combo"
|
|
4649
4563
|
]
|
|
4650
4564
|
},
|
|
4651
4565
|
"data": {
|
|
@@ -4653,22 +4567,47 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4653
4567
|
{
|
|
4654
4568
|
"$ref": "#/$defs/ChartData"
|
|
4655
4569
|
},
|
|
4656
|
-
{
|
|
4657
|
-
"$ref": "#/$defs/ChartDataSource"
|
|
4658
|
-
},
|
|
4659
4570
|
{
|
|
4660
4571
|
"$ref": "#/$defs/DatasetRef"
|
|
4661
4572
|
}
|
|
4662
4573
|
],
|
|
4663
|
-
"description":
|
|
4574
|
+
"description": 'Chart data. Inline data uses a tabular columns/rows shape; renderers convert rows to chart series internally. A DatasetRef ({ "dataset": "<id>" }) plots a top-level dataset instead. Data from a spreadsheet or file is imported into inline columns and rows, and its origin is recorded in data.source.'
|
|
4664
4575
|
},
|
|
4665
4576
|
"mapping": {
|
|
4666
4577
|
"$ref": "#/$defs/ChartMapping",
|
|
4667
4578
|
"description": "Optional series mapping by column name: which column is the category, which is the X column of a scatter chart, and which columns are plotted, in order. Absent keeps the positional rule (first column the category, then the X column for scatter, every other column a series)."
|
|
4668
4579
|
},
|
|
4580
|
+
"line": {
|
|
4581
|
+
"type": "array",
|
|
4582
|
+
"items": {
|
|
4583
|
+
"type": "string"
|
|
4584
|
+
},
|
|
4585
|
+
"minItems": 1,
|
|
4586
|
+
"uniqueItems": true,
|
|
4587
|
+
"description": "Combo charts only (type 'combo'): the plotted series, by column name, that are drawn as lines with markers; every other plotted series is drawn as clustered columns. Absent: the last plotted series is the line. A combo chart keeps at least one column series, so a list that names every series draws the first one as columns. Column series are drawn, exported and listed in the legend first, then the line series on the primary axis, then those on the secondary axis, each in plotted order. A name that is not a column is a 'chart-mapping-unknown-column' error; a column that is not plotted is a 'chart-mapping-adapted' warning. On any other chart type it is ignored with a 'chart-option-adapted' warning.",
|
|
4588
|
+
"examples": [
|
|
4589
|
+
[
|
|
4590
|
+
"Margin"
|
|
4591
|
+
]
|
|
4592
|
+
]
|
|
4593
|
+
},
|
|
4594
|
+
"secondaryAxis": {
|
|
4595
|
+
"type": "array",
|
|
4596
|
+
"items": {
|
|
4597
|
+
"type": "string"
|
|
4598
|
+
},
|
|
4599
|
+
"minItems": 1,
|
|
4600
|
+
"uniqueItems": true,
|
|
4601
|
+
"description": "Combo charts only: line series, by column name, plotted against a secondary value axis at the right of the plot. That axis has its own scale, and its tick labels use the number format of the first secondary series' column (DataColumn.format), for example '0%' for a margin. Absent: every series shares the primary value axis at the left. A name that is not a line series (see 'line') stays on the primary axis with a 'chart-mapping-adapted' warning; an unknown column is a 'chart-mapping-unknown-column' error. On any other chart type it is ignored with a 'chart-option-adapted' warning.",
|
|
4602
|
+
"examples": [
|
|
4603
|
+
[
|
|
4604
|
+
"Margin"
|
|
4605
|
+
]
|
|
4606
|
+
]
|
|
4607
|
+
},
|
|
4669
4608
|
"axisTitles": {
|
|
4670
4609
|
"$ref": "#/$defs/ChartAxisTitles",
|
|
4671
|
-
"description": "Optional axis titles. Absent keeps today's untitled axes. Supported on the chart types that have a category/value (or X/Y) axis pair (column, bar, line, area, scatter, and the histogram, pareto, waterfall and box-and-whisker constructs; the funnel construct takes a category title only); a title on a type without that axis (pie, doughnut, radar, treemap, map) is dropped with a 'chart-option-adapted' diagnostic by renderers and exporters."
|
|
4610
|
+
"description": "Optional axis titles. Absent keeps today's untitled axes. Supported on the chart types that have a category/value (or X/Y) axis pair (column, bar, line, area, scatter, and the histogram, pareto, waterfall and box-and-whisker constructs; the funnel construct takes a category title only; a combo chart also takes 'secondary' when it plots a series on the secondary axis); a title on a type without that axis (pie, doughnut, radar, treemap, map) is dropped with a 'chart-option-adapted' diagnostic by renderers and exporters."
|
|
4672
4611
|
},
|
|
4673
4612
|
"legend": {
|
|
4674
4613
|
"type": "string",
|
|
@@ -4691,13 +4630,24 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4691
4630
|
}
|
|
4692
4631
|
],
|
|
4693
4632
|
"description": "Optional data labels. true shows value labels at each type's default position, false (or absent) shows none, which is today's behaviour. Use the object form for the label content, position and separator."
|
|
4633
|
+
},
|
|
4634
|
+
"alt": {
|
|
4635
|
+
"type": "string",
|
|
4636
|
+
"description": "Text alternative for the chart: what the data shows (the point and the key numbers), not 'a chart' or 'bar chart'. The preview exposes it as the chart's accessible name (role img with aria-label) and the PowerPoint export writes it as the chart frame's alternative text (descr); import reads it back. An empty string marks the chart decorative, with the same meaning as an empty Asset alt, but it is a reviewed choice that opf/chart-text-alternative still reports as info (a chart almost always carries a message). When absent, validate accepts text beside the chart instead.",
|
|
4637
|
+
"examples": [
|
|
4638
|
+
"Revenue grew from $12M in Q1 to $18M in Q2, with the steepest rise in the West region."
|
|
4639
|
+
]
|
|
4640
|
+
},
|
|
4641
|
+
"highlight": {
|
|
4642
|
+
"$ref": "#/$defs/ChartHighlight",
|
|
4643
|
+
"description": "Optional emphasis: the series and/or categories that carry the message. The engines draw the highlighted marks in the deck's primary (accent) color and every other mark in a muted neutral derived from the theme (a light grey on a light chart panel, a dim grey on a dark one); there is no color field. A mark is highlighted when its series OR its category is named. Absent keeps today's colors exactly. Supported on column, bar and line charts (series and categories; on a line a category highlight marks that category's points), pie and doughnut charts (categories, one per slice), and area, scatter and radar charts (series); the histogram, pareto, waterfall, funnel, treemap, box-and-whisker, map and combo constructs drop the option with a 'chart-option-adapted' diagnostic, as does a part the type cannot highlight. A name that matches no column or row label is a 'chart-highlight-unknown-name' error."
|
|
4694
4644
|
}
|
|
4695
4645
|
}
|
|
4696
4646
|
},
|
|
4697
4647
|
"ChartAxisTitles": {
|
|
4698
4648
|
"type": "object",
|
|
4699
4649
|
"additionalProperties": false,
|
|
4700
|
-
"description": "Titles for the
|
|
4650
|
+
"description": "Titles for the axes of a chart. 'category' is the axis that carries the row labels (the horizontal axis of a column or line chart, the vertical axis of a bar chart, the X axis of a scatter chart); 'value' is the other axis; 'secondary' is the secondary value axis of a combo chart.",
|
|
4701
4651
|
"properties": {
|
|
4702
4652
|
"category": {
|
|
4703
4653
|
"type": "string",
|
|
@@ -4709,14 +4659,69 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4709
4659
|
},
|
|
4710
4660
|
"value": {
|
|
4711
4661
|
"type": "string",
|
|
4712
|
-
"description": "Title of the value (Y) axis.",
|
|
4662
|
+
"description": "Title of the value (Y) axis. On a combo chart, the primary (left) value axis.",
|
|
4713
4663
|
"examples": [
|
|
4714
4664
|
"Revenue ($M)",
|
|
4715
4665
|
"Customers"
|
|
4716
4666
|
]
|
|
4667
|
+
},
|
|
4668
|
+
"secondary": {
|
|
4669
|
+
"type": "string",
|
|
4670
|
+
"description": "Combo charts only: title of the secondary value axis at the right of the plot, drawn rotated like the primary value axis title. Dropped with a 'chart-option-adapted' diagnostic on any other chart type and on a combo chart without 'secondaryAxis'.",
|
|
4671
|
+
"examples": [
|
|
4672
|
+
"Margin (%)"
|
|
4673
|
+
]
|
|
4717
4674
|
}
|
|
4718
4675
|
}
|
|
4719
4676
|
},
|
|
4677
|
+
"ChartHighlight": {
|
|
4678
|
+
"type": "object",
|
|
4679
|
+
"additionalProperties": false,
|
|
4680
|
+
"minProperties": 1,
|
|
4681
|
+
"description": "Which series and categories a chart emphasizes. Names are matched exactly: series by data column name (after any 'fields' selection; a series is a plotted value column), categories by row label (the first column, or mapping.category), as text. A category label shared by several rows highlights each of them.",
|
|
4682
|
+
"properties": {
|
|
4683
|
+
"series": {
|
|
4684
|
+
"type": "array",
|
|
4685
|
+
"items": {
|
|
4686
|
+
"type": "string"
|
|
4687
|
+
},
|
|
4688
|
+
"minItems": 1,
|
|
4689
|
+
"uniqueItems": true,
|
|
4690
|
+
"description": "Series (value columns) to highlight: all marks of each named series. A name that is not a column is a 'chart-highlight-unknown-name' error; a column that is not plotted as a series (the category or X column, or one mapping.series leaves out) highlights nothing and is a 'chart-highlight-adapted' warning.",
|
|
4691
|
+
"examples": [
|
|
4692
|
+
[
|
|
4693
|
+
"Revenue"
|
|
4694
|
+
]
|
|
4695
|
+
]
|
|
4696
|
+
},
|
|
4697
|
+
"categories": {
|
|
4698
|
+
"type": "array",
|
|
4699
|
+
"items": {
|
|
4700
|
+
"type": "string"
|
|
4701
|
+
},
|
|
4702
|
+
"minItems": 1,
|
|
4703
|
+
"uniqueItems": true,
|
|
4704
|
+
"description": "Categories (row labels) to highlight: the marks of each named category (a column or bar of every series, a line's points, a pie or doughnut slice). A label no row has is a 'chart-highlight-unknown-name' error.",
|
|
4705
|
+
"examples": [
|
|
4706
|
+
[
|
|
4707
|
+
"Q3"
|
|
4708
|
+
]
|
|
4709
|
+
]
|
|
4710
|
+
}
|
|
4711
|
+
},
|
|
4712
|
+
"examples": [
|
|
4713
|
+
{
|
|
4714
|
+
"series": [
|
|
4715
|
+
"Revenue"
|
|
4716
|
+
]
|
|
4717
|
+
},
|
|
4718
|
+
{
|
|
4719
|
+
"categories": [
|
|
4720
|
+
"Q3"
|
|
4721
|
+
]
|
|
4722
|
+
}
|
|
4723
|
+
]
|
|
4724
|
+
},
|
|
4720
4725
|
"ChartDataLabels": {
|
|
4721
4726
|
"type": "object",
|
|
4722
4727
|
"additionalProperties": false,
|
|
@@ -4749,7 +4754,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
4749
4754
|
"left",
|
|
4750
4755
|
"right"
|
|
4751
4756
|
],
|
|
4752
|
-
"description": "Where a label sits relative to its mark. 'auto' (the default) is the type's default: outside-end for clustered columns and bars, pie slices and the histogram, pareto and waterfall constructs; center for stacked columns and bars; above for line and scatter points. Clustered columns and bars and the histogram, pareto and waterfall constructs take center, inside-end, inside-base and outside-end; stacked columns and bars take center, inside-end and inside-base; pie takes center, inside-end and outside-end; line and scatter points take above, below, left, right and center. Area, doughnut and radar charts and the funnel and treemap constructs take only 'auto' (the box-and-whisker and map constructs have no data labels). An unsupported position falls back to 'auto' with a 'chart-option-adapted' diagnostic."
|
|
4757
|
+
"description": "Where a label sits relative to its mark. 'auto' (the default) is the type's default: outside-end for clustered columns and bars, pie slices and the histogram, pareto and waterfall constructs; center for stacked columns and bars; above for line and scatter points. Clustered columns and bars and the histogram, pareto and waterfall constructs take center, inside-end, inside-base and outside-end; stacked columns and bars take center, inside-end and inside-base; pie takes center, inside-end and outside-end; line and scatter points take above, below, left, right and center. Area, doughnut and radar charts and the funnel and treemap constructs take only 'auto' (the box-and-whisker and map constructs have no data labels). A combo chart places the labels of its column series like clustered columns and those of its line series like line points; a position only one part takes applies to that part, and the other part keeps its default (outside-end, above). An unsupported position falls back to 'auto' with a 'chart-option-adapted' diagnostic."
|
|
4753
4758
|
},
|
|
4754
4759
|
"separator": {
|
|
4755
4760
|
"type": "string",
|
|
@@ -5274,60 +5279,6 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
5274
5279
|
}
|
|
5275
5280
|
]
|
|
5276
5281
|
},
|
|
5277
|
-
"ChartDataSource": {
|
|
5278
|
-
"type": "object",
|
|
5279
|
-
"description": "Chart data sourced from an asset reference, URL, data URI, relative path, or local path such as CSV, TSV, JSON, or XLSX. The source is interpreted as a table; optional columns select or order fields from that table.",
|
|
5280
|
-
"additionalProperties": false,
|
|
5281
|
-
"required": [
|
|
5282
|
-
"src"
|
|
5283
|
-
],
|
|
5284
|
-
"properties": {
|
|
5285
|
-
"src": {
|
|
5286
|
-
"type": "string",
|
|
5287
|
-
"description": "Data source. Use 'asset:<id>' to reference the top-level assets registry, or provide an HTTPS URL, data URI, relative path, or local filesystem path.",
|
|
5288
|
-
"examples": [
|
|
5289
|
-
"asset:revenue",
|
|
5290
|
-
"asset:pipeline-csv",
|
|
5291
|
-
"./data/revenue.csv",
|
|
5292
|
-
"https://cdn.acme.com/data/revenue.csv"
|
|
5293
|
-
]
|
|
5294
|
-
},
|
|
5295
|
-
"sheet": {
|
|
5296
|
-
"type": "string",
|
|
5297
|
-
"description": "Optional sheet name or table name for spreadsheet-like assets.",
|
|
5298
|
-
"examples": [
|
|
5299
|
-
"Sheet1",
|
|
5300
|
-
"Revenue"
|
|
5301
|
-
]
|
|
5302
|
-
},
|
|
5303
|
-
"range": {
|
|
5304
|
-
"type": "string",
|
|
5305
|
-
"description": "Optional A1-style range or engine-defined range selector for spreadsheet-like assets.",
|
|
5306
|
-
"examples": [
|
|
5307
|
-
"A1:D8",
|
|
5308
|
-
"Revenue!A1:D8"
|
|
5309
|
-
]
|
|
5310
|
-
},
|
|
5311
|
-
"columns": {
|
|
5312
|
-
"type": "array",
|
|
5313
|
-
"items": {
|
|
5314
|
-
"type": "string"
|
|
5315
|
-
},
|
|
5316
|
-
"description": "Optional ordered columns or fields to read from the source. When omitted, renderers may use the source's own header row or schema.",
|
|
5317
|
-
"examples": [
|
|
5318
|
-
[
|
|
5319
|
-
"Quarter",
|
|
5320
|
-
"Revenue"
|
|
5321
|
-
],
|
|
5322
|
-
[
|
|
5323
|
-
"Month",
|
|
5324
|
-
"Revenue",
|
|
5325
|
-
"Costs"
|
|
5326
|
-
]
|
|
5327
|
-
]
|
|
5328
|
-
}
|
|
5329
|
-
}
|
|
5330
|
-
},
|
|
5331
5282
|
"ChartDataCell": {
|
|
5332
5283
|
"oneOf": [
|
|
5333
5284
|
{
|
|
@@ -5528,7 +5479,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
5528
5479
|
"properties": {
|
|
5529
5480
|
"narratives": {
|
|
5530
5481
|
"$ref": "#/$defs/CatalogEntry",
|
|
5531
|
-
"description": "Catalog of narrative templates. Records validate against https://openpresentation.org/schema/opf-narrative/v1. Default source: https://www.pptx.gallery/narratives."
|
|
5482
|
+
"description": "Catalog of narrative templates. Records validate against https://openpresentation.org/schema/opf-narrative/v1. A custom narrative goes in 'catalogs.narratives.records' and is referenced by its id from the root 'narrative'. Default source: https://www.pptx.gallery/narratives."
|
|
5532
5483
|
},
|
|
5533
5484
|
"themes": {
|
|
5534
5485
|
"$ref": "#/$defs/CatalogEntry",
|
|
@@ -5590,7 +5541,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
5590
5541
|
"description": "Ordered search path of sources. The engine tries each in order; first match wins. The default catalog for the kind is appended implicitly at the end."
|
|
5591
5542
|
}
|
|
5592
5543
|
],
|
|
5593
|
-
"description": "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.
|
|
5544
|
+
"description": "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. Engines never fetch a source. The host loads the records itself and passes them to the renderer and exporter as a 'catalogSources' map from the source string to its records; a source with no entry in that map contributes no records, except the default catalog's own URL and the '@openpresentation/opf' package, which resolve from the bundled snapshot."
|
|
5594
5545
|
},
|
|
5595
5546
|
"records": {
|
|
5596
5547
|
"type": "array",
|
|
@@ -5603,7 +5554,7 @@ Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.
|
|
|
5603
5554
|
},
|
|
5604
5555
|
"CatalogSource": {
|
|
5605
5556
|
"type": "string",
|
|
5606
|
-
"description": "Catalog source location. Accepts:\n- A bare URL pointing at a catalog directory (e.g. 'https://acme.com/decks/narratives'); record ids resolve to '<base>/<id>.json'.\n- 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.\n- A package reference of the form 'pkg:<package>[/<subpath>]';
|
|
5557
|
+
"description": "Catalog source location. Accepts:\n- A bare URL pointing at a catalog directory (e.g. 'https://acme.com/decks/narratives'); record ids resolve to '<base>/<id>.json'.\n- 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.\n- A package reference of the form 'pkg:<package>[/<subpath>]'. 'pkg:@openpresentation/opf/...' resolves from the bundled snapshot; any other package reference needs the host to supply its records in 'catalogSources'.\n\nEngines never fetch or install anything for a source: the host supplies the records of every source other than the bundled default, as a 'catalogSources' map from the source string to its records.",
|
|
5607
5558
|
"examples": [
|
|
5608
5559
|
"https://www.pptx.gallery/narratives",
|
|
5609
5560
|
"https://acme.com/decks/narratives/index.json",
|
|
@@ -5795,7 +5746,7 @@ var audience = {
|
|
|
5795
5746
|
"attentionBudgetMinutes": {
|
|
5796
5747
|
"type": "number",
|
|
5797
5748
|
"exclusiveMinimum": 0,
|
|
5798
|
-
"description": "Realistic upper bound on this audience's focused attention for a single presentation, in minutes. Used as a hint when comparing against duration and the resolved narrative's
|
|
5749
|
+
"description": "Realistic upper bound on this audience's focused attention for a single presentation, in minutes. Used as a hint when comparing against duration and the resolved narrative's duration range."
|
|
5799
5750
|
},
|
|
5800
5751
|
"recommendedNarratives": {
|
|
5801
5752
|
"type": "array",
|
|
@@ -6288,6 +6239,9 @@ var theme = {
|
|
|
6288
6239
|
"16:9",
|
|
6289
6240
|
"4:3",
|
|
6290
6241
|
"16:10",
|
|
6242
|
+
"1:1",
|
|
6243
|
+
"4:5",
|
|
6244
|
+
"9:16",
|
|
6291
6245
|
"letter",
|
|
6292
6246
|
"a4",
|
|
6293
6247
|
"widescreen",
|
|
@@ -6298,6 +6252,9 @@ var theme = {
|
|
|
6298
6252
|
"16:9",
|
|
6299
6253
|
"4:3",
|
|
6300
6254
|
"16:10",
|
|
6255
|
+
"1:1",
|
|
6256
|
+
"4:5",
|
|
6257
|
+
"9:16",
|
|
6301
6258
|
"letter",
|
|
6302
6259
|
"a4",
|
|
6303
6260
|
"widescreen",
|
|
@@ -6459,159 +6416,16 @@ var layout = {
|
|
|
6459
6416
|
"Two equal-width columns under a left-aligned slide title. Use when comparing two ideas, before/after pairs, or paired text + image content."
|
|
6460
6417
|
]
|
|
6461
6418
|
},
|
|
6462
|
-
"
|
|
6463
|
-
"
|
|
6464
|
-
"
|
|
6465
|
-
"Title",
|
|
6466
|
-
"Text",
|
|
6467
|
-
"List",
|
|
6468
|
-
"Image",
|
|
6469
|
-
"Number",
|
|
6470
|
-
"Metric",
|
|
6471
|
-
"Chart",
|
|
6472
|
-
"Table",
|
|
6473
|
-
"Code",
|
|
6474
|
-
"Video",
|
|
6475
|
-
"Quote",
|
|
6476
|
-
"Timeline"
|
|
6477
|
-
],
|
|
6478
|
-
"description": "Primary kind of content the layout holds. Drives pickers and AI placement decisions. Metric is the canonical numeric/KPI category; Number remains an accepted legacy label."
|
|
6479
|
-
},
|
|
6480
|
-
"contentMultiple": {
|
|
6481
|
-
"type": "string",
|
|
6482
|
-
"enum": [
|
|
6483
|
-
"None",
|
|
6484
|
-
"1x",
|
|
6485
|
-
"2x",
|
|
6486
|
-
"3x",
|
|
6487
|
-
"4x",
|
|
6488
|
-
"5x",
|
|
6489
|
-
"6x"
|
|
6490
|
-
],
|
|
6491
|
-
"description": "How many parallel content blocks the layout exposes ('2x' = two-column, '3x' = three-up, etc.)."
|
|
6492
|
-
},
|
|
6493
|
-
"contentAlignment": {
|
|
6494
|
-
"type": "string",
|
|
6495
|
-
"enum": [
|
|
6496
|
-
"None",
|
|
6497
|
-
"Left",
|
|
6498
|
-
"Center"
|
|
6499
|
-
],
|
|
6500
|
-
"description": "Default horizontal alignment of the content area."
|
|
6501
|
-
},
|
|
6502
|
-
"contentBox": {
|
|
6503
|
-
"type": "boolean",
|
|
6504
|
-
"description": "Whether the content area is rendered inside a visible box / card.",
|
|
6505
|
-
"examples": [
|
|
6506
|
-
false,
|
|
6507
|
-
true
|
|
6508
|
-
]
|
|
6509
|
-
},
|
|
6510
|
-
"contentTypeChartPrimary": {
|
|
6511
|
-
"type": "string",
|
|
6512
|
-
"enum": [
|
|
6513
|
-
"None",
|
|
6514
|
-
"Top",
|
|
6515
|
-
"Bottom",
|
|
6516
|
-
"Left",
|
|
6517
|
-
"Right"
|
|
6518
|
-
],
|
|
6519
|
-
"description": "For chart layouts, where the primary chart sits relative to the rest of the content."
|
|
6520
|
-
},
|
|
6521
|
-
"contentTypeImageFill": {
|
|
6522
|
-
"type": "string",
|
|
6523
|
-
"enum": [
|
|
6524
|
-
"None",
|
|
6525
|
-
"Crop",
|
|
6526
|
-
"Fit"
|
|
6527
|
-
],
|
|
6528
|
-
"description": "For image layouts, how the image fills its slot."
|
|
6529
|
-
},
|
|
6530
|
-
"contentTypeListBullet": {
|
|
6531
|
-
"type": "string",
|
|
6532
|
-
"enum": [
|
|
6533
|
-
"None",
|
|
6534
|
-
"Character",
|
|
6535
|
-
"Image"
|
|
6536
|
-
],
|
|
6537
|
-
"description": "For list layouts, how bullets are rendered."
|
|
6538
|
-
},
|
|
6539
|
-
"contentTypeListHeading": {
|
|
6540
|
-
"type": "boolean",
|
|
6541
|
-
"description": "For list layouts, whether each list item carries a heading.",
|
|
6542
|
-
"examples": [
|
|
6543
|
-
false,
|
|
6544
|
-
true
|
|
6545
|
-
]
|
|
6546
|
-
},
|
|
6547
|
-
"slideTag": {
|
|
6548
|
-
"type": "boolean",
|
|
6549
|
-
"description": "Whether the layout includes a small slide-level tag / label region above or near the title.",
|
|
6550
|
-
"examples": [
|
|
6551
|
-
false,
|
|
6552
|
-
true
|
|
6553
|
-
]
|
|
6554
|
-
},
|
|
6555
|
-
"slideTitle": {
|
|
6556
|
-
"type": "boolean",
|
|
6557
|
-
"description": "Whether the layout includes a slide title region.",
|
|
6558
|
-
"examples": [
|
|
6559
|
-
true,
|
|
6560
|
-
false
|
|
6561
|
-
]
|
|
6562
|
-
},
|
|
6563
|
-
"slideSubtitle": {
|
|
6564
|
-
"type": "boolean",
|
|
6565
|
-
"description": "Whether the layout includes a slide-level subtitle or supporting-description region. When placeholders is present, this is true exactly when the layout exposes a placeholder with type 'subtitle'.",
|
|
6566
|
-
"examples": [
|
|
6567
|
-
false,
|
|
6568
|
-
true
|
|
6569
|
-
]
|
|
6570
|
-
},
|
|
6571
|
-
"slideTitleAlignment": {
|
|
6572
|
-
"type": "string",
|
|
6573
|
-
"enum": [
|
|
6574
|
-
"None",
|
|
6575
|
-
"Left",
|
|
6576
|
-
"Center"
|
|
6577
|
-
],
|
|
6578
|
-
"description": "Horizontal alignment of the slide title region."
|
|
6579
|
-
},
|
|
6580
|
-
"slideImage": {
|
|
6581
|
-
"type": "boolean",
|
|
6582
|
-
"description": "Whether the layout includes a dedicated slide-level image region (separate from any content image).",
|
|
6583
|
-
"examples": [
|
|
6584
|
-
false,
|
|
6585
|
-
true
|
|
6586
|
-
]
|
|
6587
|
-
},
|
|
6588
|
-
"slideImageAlignment": {
|
|
6589
|
-
"type": "string",
|
|
6590
|
-
"enum": [
|
|
6591
|
-
"None",
|
|
6592
|
-
"Top",
|
|
6593
|
-
"Bottom",
|
|
6594
|
-
"Left",
|
|
6595
|
-
"Right",
|
|
6596
|
-
"Background"
|
|
6597
|
-
],
|
|
6598
|
-
"description": "Where the slide-level image sits relative to the content."
|
|
6599
|
-
},
|
|
6600
|
-
"slideLayoutDirection": {
|
|
6601
|
-
"type": "string",
|
|
6602
|
-
"enum": [
|
|
6603
|
-
"None",
|
|
6604
|
-
"Horizontal",
|
|
6605
|
-
"Vertical"
|
|
6606
|
-
],
|
|
6607
|
-
"description": "Axis along which the layout's primary regions are arranged."
|
|
6419
|
+
"design": {
|
|
6420
|
+
"$ref": "#/$defs/DesignHints",
|
|
6421
|
+
"description": "The layout's design hints, with the same keys and values as the deck's design and a slide's design (a slide overrides exactly what its layout sets, by the same name). An absent key means the layout has no opinion. Every key is applied from the record as the lowest-precedence default, per key: the slide's design, then the deck's design, then this record's design, then the engine default, so a layout value nobody overrides is honored without copying it anywhere (a layout's composition.mode still ranks above contentDirection; slideImage.position is the fallback position of a slide image the layout reserves). Composition, the renderer and the PPTX exporter all read the one result."
|
|
6608
6422
|
},
|
|
6609
6423
|
"placeholders": {
|
|
6610
6424
|
"type": "array",
|
|
6611
6425
|
"items": {
|
|
6612
6426
|
"$ref": "#/$defs/Placeholder"
|
|
6613
6427
|
},
|
|
6614
|
-
"description": "Ordered regions the layout exposes. The engine fills 'title', 'subtitle'
|
|
6428
|
+
"description": "Ordered regions the layout exposes. This is the single source of truth for what the layout holds: the content kind, the number of body regions and whether it has a title, subtitle or tag are derived from it (layoutContent in @openpresentation/opf), never stored separately. The engine fills 'title', 'subtitle' and 'tag' placeholders from Slide.title, Slide.subtitle and Slide.tag. The other placeholders are content-kind regions that composition uses to size the body and that pickers use to match layouts. Slide content itself lives either in root payload fields or promoted region keys on Slide. Chrome (slide number, footer, date) is not included here; it is owned by Design.header / Design.footer."
|
|
6615
6429
|
},
|
|
6616
6430
|
"tags": {
|
|
6617
6431
|
"type": "array",
|
|
@@ -6643,7 +6457,7 @@ var layout = {
|
|
|
6643
6457
|
"format": "uri",
|
|
6644
6458
|
"description": "Main preview image (PNG/JPG). Used as the primary visual in picker UIs and previews of the record.",
|
|
6645
6459
|
"examples": [
|
|
6646
|
-
"https://
|
|
6460
|
+
"https://example.com/layouts/title-subtitle.png"
|
|
6647
6461
|
]
|
|
6648
6462
|
},
|
|
6649
6463
|
"thumbnailSrc": {
|
|
@@ -6651,7 +6465,7 @@ var layout = {
|
|
|
6651
6465
|
"format": "uri",
|
|
6652
6466
|
"description": "Smaller thumbnail preview suited to dense grid views.",
|
|
6653
6467
|
"examples": [
|
|
6654
|
-
"https://
|
|
6468
|
+
"https://example.com/layouts/title-subtitle.thumbnail.png"
|
|
6655
6469
|
]
|
|
6656
6470
|
},
|
|
6657
6471
|
"vectorSrc": {
|
|
@@ -6659,7 +6473,7 @@ var layout = {
|
|
|
6659
6473
|
"format": "uri",
|
|
6660
6474
|
"description": "SVG / vector preview for crisp scaling at any size.",
|
|
6661
6475
|
"examples": [
|
|
6662
|
-
"https://www.pptx.gallery/
|
|
6476
|
+
"https://www.pptx.gallery/layout-previews/title-subtitle.svg"
|
|
6663
6477
|
]
|
|
6664
6478
|
}
|
|
6665
6479
|
}
|
|
@@ -6674,7 +6488,7 @@ var layout = {
|
|
|
6674
6488
|
"required": [
|
|
6675
6489
|
"type"
|
|
6676
6490
|
],
|
|
6677
|
-
"description": "A single region inside a slide layout. Title, subtitle, and tag placeholders bind to the corresponding Slide fields; other
|
|
6491
|
+
"description": "A single region inside a slide layout. Title, subtitle, and tag placeholders bind to the corresponding Slide fields; every other placeholder describes the content kind that region holds. The array order in the surrounding 'placeholders' field preserves layout region order.",
|
|
6678
6492
|
"properties": {
|
|
6679
6493
|
"type": {
|
|
6680
6494
|
"type": "string",
|
|
@@ -6683,18 +6497,102 @@ var layout = {
|
|
|
6683
6497
|
"subtitle",
|
|
6684
6498
|
"tag",
|
|
6685
6499
|
"text",
|
|
6686
|
-
"metric",
|
|
6687
|
-
"quote",
|
|
6688
|
-
"timeline",
|
|
6689
6500
|
"list",
|
|
6501
|
+
"image",
|
|
6502
|
+
"video",
|
|
6690
6503
|
"chart",
|
|
6691
|
-
"picture",
|
|
6692
6504
|
"table",
|
|
6693
|
-
"
|
|
6694
|
-
"
|
|
6695
|
-
"
|
|
6505
|
+
"code",
|
|
6506
|
+
"metric",
|
|
6507
|
+
"quote",
|
|
6508
|
+
"timeline"
|
|
6509
|
+
],
|
|
6510
|
+
"description": "The content kind of the region. This is the one OPF content-kind vocabulary: the same words name a slide's payload fields (text, items, image, video, chart, table, code, metric, quote, timeline). 'title', 'subtitle' and 'tag' are the heading kinds and bind to Slide.title, Slide.subtitle and Slide.tag. 'text' holds text and bullets; 'list' holds items. 'image' is filled by an image payload and 'video' by a video payload. 'metric', 'quote', 'timeline', 'chart', 'table' and 'code' are filled by the payload of the same name; a metric region shows the metric payload with its optional label, description, unit, delta, trend and sentiment."
|
|
6511
|
+
}
|
|
6512
|
+
}
|
|
6513
|
+
},
|
|
6514
|
+
"DesignHints": {
|
|
6515
|
+
"type": "object",
|
|
6516
|
+
"additionalProperties": false,
|
|
6517
|
+
"description": "Design hints a layout carries. The keys and lowercase values are those of the deck's design and a slide's design in opf.schema.json (Design), so a slide overrides a layout by the same name and layout.design can be copied into slide.design unchanged. An absent key means the layout has no opinion. Only the keys the layout sets are stored. scripts/check-spec-integrity.mjs verifies that every key here has the same type and values as its Design counterpart.",
|
|
6518
|
+
"properties": {
|
|
6519
|
+
"titleAlignment": {
|
|
6520
|
+
"type": "string",
|
|
6521
|
+
"enum": [
|
|
6522
|
+
"left",
|
|
6523
|
+
"center",
|
|
6524
|
+
"right"
|
|
6525
|
+
],
|
|
6526
|
+
"description": "Horizontal alignment of the title placeholder."
|
|
6527
|
+
},
|
|
6528
|
+
"contentAlignment": {
|
|
6529
|
+
"type": "string",
|
|
6530
|
+
"enum": [
|
|
6531
|
+
"left",
|
|
6532
|
+
"center",
|
|
6533
|
+
"right"
|
|
6534
|
+
],
|
|
6535
|
+
"description": "Horizontal alignment of the body regions."
|
|
6536
|
+
},
|
|
6537
|
+
"contentBox": {
|
|
6538
|
+
"type": "boolean",
|
|
6539
|
+
"description": "Whether the body regions are drawn inside a visible card or surface."
|
|
6540
|
+
},
|
|
6541
|
+
"contentDirection": {
|
|
6542
|
+
"type": "string",
|
|
6543
|
+
"enum": [
|
|
6544
|
+
"horizontal",
|
|
6545
|
+
"vertical"
|
|
6696
6546
|
],
|
|
6697
|
-
"description": "
|
|
6547
|
+
"description": "Axis along which parallel body content is arranged: 'vertical' is a column, 'horizontal' a row. Composition applies it when neither the slide nor this layout's composition sets a mode, below the slide's and the deck's design.contentDirection and above automatic selection."
|
|
6548
|
+
},
|
|
6549
|
+
"chartPrimary": {
|
|
6550
|
+
"type": "string",
|
|
6551
|
+
"enum": [
|
|
6552
|
+
"none",
|
|
6553
|
+
"top",
|
|
6554
|
+
"bottom",
|
|
6555
|
+
"left",
|
|
6556
|
+
"right"
|
|
6557
|
+
],
|
|
6558
|
+
"description": "Where the primary chart sits relative to the other body content. Composition applies it below the slide's and the deck's design.chartPrimary, with the semantics described there."
|
|
6559
|
+
},
|
|
6560
|
+
"imageFill": {
|
|
6561
|
+
"type": "string",
|
|
6562
|
+
"enum": [
|
|
6563
|
+
"crop",
|
|
6564
|
+
"fit"
|
|
6565
|
+
],
|
|
6566
|
+
"description": "How images fill their region: 'crop' covers the region, 'fit' shows the whole image."
|
|
6567
|
+
},
|
|
6568
|
+
"listBullet": {
|
|
6569
|
+
"type": "string",
|
|
6570
|
+
"enum": [
|
|
6571
|
+
"character",
|
|
6572
|
+
"image"
|
|
6573
|
+
],
|
|
6574
|
+
"description": "Marker style of lists: 'character' draws the glyph, 'image' draws the deck's icon logo as a picture bullet."
|
|
6575
|
+
},
|
|
6576
|
+
"slideImage": {
|
|
6577
|
+
"type": "object",
|
|
6578
|
+
"additionalProperties": false,
|
|
6579
|
+
"required": [
|
|
6580
|
+
"position"
|
|
6581
|
+
],
|
|
6582
|
+
"description": "A slide-level image region the layout reserves, separate from any content image. Its presence is what lets a deck-wide design.slideImage apply to slides on this layout. The image itself comes from the slide or the deck design.",
|
|
6583
|
+
"properties": {
|
|
6584
|
+
"position": {
|
|
6585
|
+
"type": "string",
|
|
6586
|
+
"enum": [
|
|
6587
|
+
"background",
|
|
6588
|
+
"top",
|
|
6589
|
+
"bottom",
|
|
6590
|
+
"left",
|
|
6591
|
+
"right"
|
|
6592
|
+
],
|
|
6593
|
+
"description": "Where the slide-level image sits relative to the content. 'background' is a full-bleed image behind the content; the other positions give the image a band along that edge. Used when the slide's or deck's design.slideImage gives no position."
|
|
6594
|
+
}
|
|
6595
|
+
}
|
|
6698
6596
|
}
|
|
6699
6597
|
}
|
|
6700
6598
|
},
|
|
@@ -6764,7 +6662,7 @@ var chartType = {
|
|
|
6764
6662
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
6765
6663
|
"$id": "https://openpresentation.org/schema/opf-chart-type/v1",
|
|
6766
6664
|
"title": "Chart Type",
|
|
6767
|
-
"description":
|
|
6665
|
+
"description": `Schema for chart-type records in the pptx.gallery catalog. The bundled catalog holds one record per chart type that Aspose.Slides officially supports (see mappings.renderers["aspose-slides"].chartType), plus the column-and-line combination 'combo' (mappings.openxml.composition "mixed"). Each record names a chart variant, its Open XML mapping, how many data series it expects and how pickers group it. Chart types are referenced from OPF chart content payloads; the engine resolves the reference against catalogs.chartTypes (inline) -> catalogs.chartTypes.source -> the default catalog at https://www.pptx.gallery/chart-types.`,
|
|
6768
6666
|
"type": "object",
|
|
6769
6667
|
"additionalProperties": false,
|
|
6770
6668
|
"patternProperties": {
|
|
@@ -6787,29 +6685,19 @@ var chartType = {
|
|
|
6787
6685
|
"id": {
|
|
6788
6686
|
"type": "string",
|
|
6789
6687
|
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
6790
|
-
"description": "Stable slug used by OPF documents to reference this chart type. Lowercase kebab-case. Chart type ids may start with a digit (e.g., '100pct-stacked-column', '3d-column') to mirror conventional chart naming.",
|
|
6688
|
+
"description": "Stable slug used by OPF documents to reference this chart type (`chart.type`). Lowercase kebab-case. Chart type ids may start with a digit (e.g., '100pct-stacked-column', '3d-column') to mirror conventional chart naming.",
|
|
6791
6689
|
"examples": [
|
|
6792
6690
|
"column",
|
|
6793
6691
|
"bar",
|
|
6794
|
-
"stacked-column
|
|
6692
|
+
"stacked-column",
|
|
6795
6693
|
"doughnut",
|
|
6796
6694
|
"treemap",
|
|
6797
|
-
"100pct-stacked-column
|
|
6695
|
+
"100pct-stacked-column"
|
|
6798
6696
|
]
|
|
6799
6697
|
},
|
|
6800
6698
|
"name": {
|
|
6801
6699
|
"type": "string",
|
|
6802
|
-
"description": "
|
|
6803
|
-
"examples": [
|
|
6804
|
-
"COLUMN",
|
|
6805
|
-
"STACKED_COLUMN_3X",
|
|
6806
|
-
"DOUGHNUT",
|
|
6807
|
-
"TREEMAP"
|
|
6808
|
-
]
|
|
6809
|
-
},
|
|
6810
|
-
"label": {
|
|
6811
|
-
"type": "string",
|
|
6812
|
-
"description": "Human-readable label shown in chart pickers.",
|
|
6700
|
+
"description": "Human-readable name of the chart type, as a chart picker shows it.",
|
|
6813
6701
|
"examples": [
|
|
6814
6702
|
"Column",
|
|
6815
6703
|
"Stacked Column",
|
|
@@ -6822,14 +6710,14 @@ var chartType = {
|
|
|
6822
6710
|
"description": "One-sentence positioning: when to reach for this chart variant.",
|
|
6823
6711
|
"examples": [
|
|
6824
6712
|
"Single-series vertical column chart for comparing values across categories.",
|
|
6825
|
-
"
|
|
6713
|
+
"Stacked column chart that shows how the parts of each category add up to its total."
|
|
6826
6714
|
]
|
|
6827
6715
|
},
|
|
6828
6716
|
"description": {
|
|
6829
6717
|
"type": "string",
|
|
6830
6718
|
"description": "Longer prose describing the chart and ideal use cases.",
|
|
6831
6719
|
"examples": [
|
|
6832
|
-
"Use a
|
|
6720
|
+
"Use a stacked column when you want to compare totals across categories and also show how each series contributes \u2014 e.g., revenue by quarter split by product line. Best with 2\u20134 series and \u226412 categories."
|
|
6833
6721
|
]
|
|
6834
6722
|
},
|
|
6835
6723
|
"mappings": {
|
|
@@ -6838,11 +6726,11 @@ var chartType = {
|
|
|
6838
6726
|
},
|
|
6839
6727
|
"deprecation": {
|
|
6840
6728
|
"$ref": "#/$defs/ChartTypeDeprecation",
|
|
6841
|
-
"description": "Present when this chart type is deprecated.
|
|
6729
|
+
"description": "Present when this chart type is deprecated. A deprecated record stays resolvable so existing documents keep validating, validators warn when a document references it, and pickers and generators should not offer it. The bundled default catalog holds no deprecated records; a publisher or an inline `catalogs.chartTypes.records` entry can still use the field."
|
|
6842
6730
|
},
|
|
6843
6731
|
"group": {
|
|
6844
6732
|
"type": "string",
|
|
6845
|
-
"description": "Top-level grouping in the chart picker
|
|
6733
|
+
"description": "Top-level grouping in the chart picker.",
|
|
6846
6734
|
"examples": [
|
|
6847
6735
|
"Column",
|
|
6848
6736
|
"Bar",
|
|
@@ -6853,9 +6741,8 @@ var chartType = {
|
|
|
6853
6741
|
"Histogram",
|
|
6854
6742
|
"XY (Scatter)",
|
|
6855
6743
|
"Treemap",
|
|
6856
|
-
"Bullet",
|
|
6857
|
-
"Sparkline",
|
|
6858
6744
|
"Map",
|
|
6745
|
+
"Combo",
|
|
6859
6746
|
"Other"
|
|
6860
6747
|
]
|
|
6861
6748
|
},
|
|
@@ -6877,155 +6764,18 @@ var chartType = {
|
|
|
6877
6764
|
"hierarchical",
|
|
6878
6765
|
"normalized"
|
|
6879
6766
|
],
|
|
6880
|
-
"description": "Shape of the underlying data: a flat series ('simple'), one with engine-side calculation ('calculated'), parent-child rows ('hierarchical'), or pre-normalized rows ('normalized')."
|
|
6767
|
+
"description": "Shape of the underlying data: a flat series ('simple'), one with engine-side calculation ('calculated'), parent-child rows ('hierarchical'), or pre-normalized rows ('normalized'). The editor offers only 'simple' types as switch targets for a chart's existing data."
|
|
6881
6768
|
},
|
|
6882
6769
|
"series": {
|
|
6883
6770
|
"type": "integer",
|
|
6884
6771
|
"minimum": 0,
|
|
6885
|
-
"description": "Number of data series this chart type expects.",
|
|
6886
|
-
"examples": [
|
|
6887
|
-
1,
|
|
6888
|
-
2,
|
|
6889
|
-
3,
|
|
6890
|
-
4
|
|
6891
|
-
]
|
|
6892
|
-
},
|
|
6893
|
-
"categories": {
|
|
6894
|
-
"type": "integer",
|
|
6895
|
-
"minimum": 0,
|
|
6896
|
-
"description": "Number of category labels this chart type expects on the primary axis.",
|
|
6897
|
-
"examples": [
|
|
6898
|
-
4,
|
|
6899
|
-
6,
|
|
6900
|
-
8,
|
|
6901
|
-
12
|
|
6902
|
-
]
|
|
6903
|
-
},
|
|
6904
|
-
"seriesGroups": {
|
|
6905
|
-
"type": "integer",
|
|
6906
|
-
"minimum": 1,
|
|
6907
|
-
"description": "Number of series groups (axis bands) this chart type uses; >1 for combo or banded charts.",
|
|
6772
|
+
"description": "Number of data series this chart type expects: exactly that many, except that a stacked or percent-stacked type and a combination (composition 'mixed', such as combo) expect at least that many. The editor offers a type that expects more than one series only for data with a fitting number of value columns; a one-series type fits one value column, and column, bar, line, area and radar types fit any number.",
|
|
6908
6773
|
"examples": [
|
|
6909
6774
|
1,
|
|
6910
6775
|
2,
|
|
6911
6776
|
3
|
|
6912
6777
|
]
|
|
6913
6778
|
},
|
|
6914
|
-
"useSecondaryCategories": {
|
|
6915
|
-
"type": "boolean",
|
|
6916
|
-
"description": "Whether the chart type uses a secondary category axis.",
|
|
6917
|
-
"examples": [
|
|
6918
|
-
false,
|
|
6919
|
-
true
|
|
6920
|
-
]
|
|
6921
|
-
},
|
|
6922
|
-
"workbookRange": {
|
|
6923
|
-
"type": "string",
|
|
6924
|
-
"description": "A1 reference to the source range in the embedded workbook.",
|
|
6925
|
-
"examples": [
|
|
6926
|
-
"Sheet1!$A$1:$I$2",
|
|
6927
|
-
"Sheet1!$A$1:$G$3"
|
|
6928
|
-
]
|
|
6929
|
-
},
|
|
6930
|
-
"columns": {
|
|
6931
|
-
"type": "array",
|
|
6932
|
-
"items": {
|
|
6933
|
-
"type": "string"
|
|
6934
|
-
},
|
|
6935
|
-
"description": "Column header names of the embedded workbook, in left-to-right order.",
|
|
6936
|
-
"examples": [
|
|
6937
|
-
[
|
|
6938
|
-
"Series 1",
|
|
6939
|
-
"Value"
|
|
6940
|
-
],
|
|
6941
|
-
[
|
|
6942
|
-
"Series 1",
|
|
6943
|
-
"Value 1",
|
|
6944
|
-
"Value 2"
|
|
6945
|
-
]
|
|
6946
|
-
]
|
|
6947
|
-
},
|
|
6948
|
-
"dataColumns": {
|
|
6949
|
-
"type": "array",
|
|
6950
|
-
"items": {
|
|
6951
|
-
"$ref": "#/$defs/ChartDataColumn"
|
|
6952
|
-
},
|
|
6953
|
-
"description": "Per-column metadata describing the role and position of each column in the workbook source.",
|
|
6954
|
-
"examples": [
|
|
6955
|
-
[
|
|
6956
|
-
{
|
|
6957
|
-
"name": "Series 1",
|
|
6958
|
-
"role": "categoryLabel",
|
|
6959
|
-
"type": "string",
|
|
6960
|
-
"position": "row0_col0"
|
|
6961
|
-
},
|
|
6962
|
-
{
|
|
6963
|
-
"name": "Value 1",
|
|
6964
|
-
"role": "series",
|
|
6965
|
-
"type": "number",
|
|
6966
|
-
"position": "row1_col0"
|
|
6967
|
-
},
|
|
6968
|
-
{
|
|
6969
|
-
"name": "Value 2",
|
|
6970
|
-
"role": "series",
|
|
6971
|
-
"type": "number",
|
|
6972
|
-
"position": "row2_col0"
|
|
6973
|
-
}
|
|
6974
|
-
]
|
|
6975
|
-
]
|
|
6976
|
-
},
|
|
6977
|
-
"helperColumns": {
|
|
6978
|
-
"type": "array",
|
|
6979
|
-
"items": {
|
|
6980
|
-
"type": "string"
|
|
6981
|
-
},
|
|
6982
|
-
"description": "Optional auxiliary column names used by calculated or banded charts (e.g., 'Excellent', 'Good', 'Fair', 'Poor' for a bullet chart).",
|
|
6983
|
-
"examples": [
|
|
6984
|
-
[
|
|
6985
|
-
"Excellent",
|
|
6986
|
-
"Good",
|
|
6987
|
-
"Fair",
|
|
6988
|
-
"Poor"
|
|
6989
|
-
],
|
|
6990
|
-
[
|
|
6991
|
-
"Band"
|
|
6992
|
-
]
|
|
6993
|
-
]
|
|
6994
|
-
},
|
|
6995
|
-
"sampleData": {
|
|
6996
|
-
"$ref": "#/$defs/ChartSampleData",
|
|
6997
|
-
"description": "Inline sample dataset for previews and pickers.",
|
|
6998
|
-
"examples": [
|
|
6999
|
-
{
|
|
7000
|
-
"headers": [
|
|
7001
|
-
"Series 1",
|
|
7002
|
-
"Q1 2024",
|
|
7003
|
-
"Q2 2024",
|
|
7004
|
-
"Q3 2024",
|
|
7005
|
-
"Q4 2024"
|
|
7006
|
-
],
|
|
7007
|
-
"rows": [
|
|
7008
|
-
[
|
|
7009
|
-
"Value",
|
|
7010
|
-
93810,
|
|
7011
|
-
24592,
|
|
7012
|
-
13278,
|
|
7013
|
-
46048
|
|
7014
|
-
]
|
|
7015
|
-
]
|
|
7016
|
-
}
|
|
7017
|
-
]
|
|
7018
|
-
},
|
|
7019
|
-
"slideNumber": {
|
|
7020
|
-
"type": "integer",
|
|
7021
|
-
"minimum": 1,
|
|
7022
|
-
"description": "Source slide number in the original chart-gallery deck. Carried for traceability.",
|
|
7023
|
-
"examples": [
|
|
7024
|
-
1,
|
|
7025
|
-
2,
|
|
7026
|
-
48
|
|
7027
|
-
]
|
|
7028
|
-
},
|
|
7029
6779
|
"tags": {
|
|
7030
6780
|
"type": "array",
|
|
7031
6781
|
"items": {
|
|
@@ -7038,9 +6788,8 @@ var chartType = {
|
|
|
7038
6788
|
"comparison"
|
|
7039
6789
|
],
|
|
7040
6790
|
[
|
|
7041
|
-
"
|
|
7042
|
-
"
|
|
7043
|
-
"benchmark"
|
|
6791
|
+
"stacked",
|
|
6792
|
+
"composition"
|
|
7044
6793
|
]
|
|
7045
6794
|
]
|
|
7046
6795
|
},
|
|
@@ -7053,7 +6802,7 @@ var chartType = {
|
|
|
7053
6802
|
"format": "uri",
|
|
7054
6803
|
"description": "Main preview image (PNG/JPG). Used as the primary visual in picker UIs and previews of the record.",
|
|
7055
6804
|
"examples": [
|
|
7056
|
-
"https://www.pptx.gallery/chart-types/
|
|
6805
|
+
"https://www.pptx.gallery/chart-types/column.png"
|
|
7057
6806
|
]
|
|
7058
6807
|
},
|
|
7059
6808
|
"thumbnailSrc": {
|
|
@@ -7061,7 +6810,7 @@ var chartType = {
|
|
|
7061
6810
|
"format": "uri",
|
|
7062
6811
|
"description": "Smaller thumbnail preview suited to dense grid views.",
|
|
7063
6812
|
"examples": [
|
|
7064
|
-
"https://www.pptx.gallery/chart-types/
|
|
6813
|
+
"https://www.pptx.gallery/chart-types/column.thumbnail.png"
|
|
7065
6814
|
]
|
|
7066
6815
|
},
|
|
7067
6816
|
"vectorSrc": {
|
|
@@ -7069,7 +6818,7 @@ var chartType = {
|
|
|
7069
6818
|
"format": "uri",
|
|
7070
6819
|
"description": "SVG / vector preview for crisp scaling at any size.",
|
|
7071
6820
|
"examples": [
|
|
7072
|
-
"https://www.pptx.gallery/chart-types/
|
|
6821
|
+
"https://www.pptx.gallery/chart-types/column.svg"
|
|
7073
6822
|
]
|
|
7074
6823
|
}
|
|
7075
6824
|
}
|
|
@@ -7089,7 +6838,7 @@ var chartType = {
|
|
|
7089
6838
|
"description": "Id of the non-deprecated chart type that documents should reference instead.",
|
|
7090
6839
|
"examples": [
|
|
7091
6840
|
"column",
|
|
7092
|
-
"stacked-column
|
|
6841
|
+
"stacked-column"
|
|
7093
6842
|
]
|
|
7094
6843
|
},
|
|
7095
6844
|
"reason": {
|
|
@@ -7118,7 +6867,7 @@ var chartType = {
|
|
|
7118
6867
|
},
|
|
7119
6868
|
"renderers": {
|
|
7120
6869
|
"type": "object",
|
|
7121
|
-
"description": 'Optional renderer-specific mappings. Keys are renderer ids; values are intentionally opaque to OPF. The bundled catalog records the matching Aspose.Slides ChartType enumeration member under the "aspose-slides" key, e.g. {"aspose-slides": {"chartType": "StackedColumn"}}.',
|
|
6870
|
+
"description": 'Optional renderer-specific mappings. Keys are renderer ids; values are intentionally opaque to OPF. The bundled catalog records the matching Aspose.Slides ChartType enumeration member under the "aspose-slides" key, e.g. {"aspose-slides": {"chartType": "StackedColumn"}}; a mixed composition names the ChartType it starts from and the series type it switches series to, e.g. {"chartType": "ClusteredColumn", "lineSeriesType": "LineWithMarkers"}.',
|
|
7122
6871
|
"additionalProperties": {
|
|
7123
6872
|
"type": "object",
|
|
7124
6873
|
"additionalProperties": true
|
|
@@ -7217,171 +6966,49 @@ var chartType = {
|
|
|
7217
6966
|
"description": "Short implementation note for mappings that need renderer interpretation."
|
|
7218
6967
|
}
|
|
7219
6968
|
}
|
|
6969
|
+
}
|
|
6970
|
+
}
|
|
6971
|
+
};
|
|
6972
|
+
var narrative = {
|
|
6973
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
6974
|
+
"$id": "https://openpresentation.org/schema/opf-narrative/v1",
|
|
6975
|
+
"title": "Narrative Template",
|
|
6976
|
+
"description": "Schema for narrative template files in the openpresentation.org catalog. A narrative is a plan: a named story arc (e.g. 'problem-solution', 'scqa') as an ordered list of beats, each saying what its slide must do. A document points at one with the string 'narrative' (a catalog id, an HTTPS URL or a 'pkg:' reference) and links its slides to beats with 'slides[].beat'. A custom narrative is a record in 'catalogs.narratives.records'. Core validate warns about a 'slides[].beat' id the resolved narrative does not define (opf/unknown-beat) and about a root 'duration' outside this record's 'duration' range (opf/duration-outside-narrative), and reports a beat no slide references (opf/unused-beat).",
|
|
6977
|
+
"type": "object",
|
|
6978
|
+
"required": [
|
|
6979
|
+
"$schema",
|
|
6980
|
+
"id",
|
|
6981
|
+
"name",
|
|
6982
|
+
"beats"
|
|
6983
|
+
],
|
|
6984
|
+
"properties": {
|
|
6985
|
+
"$schema": {
|
|
6986
|
+
"type": "string",
|
|
6987
|
+
"const": "https://openpresentation.org/schema/opf-narrative/v1"
|
|
6988
|
+
},
|
|
6989
|
+
"id": {
|
|
6990
|
+
"type": "string",
|
|
6991
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
6992
|
+
"description": "Stable slug used by OPF documents to reference this template, e.g. 'problem-solution'. Lowercase kebab-case."
|
|
6993
|
+
},
|
|
6994
|
+
"name": {
|
|
6995
|
+
"type": "string",
|
|
6996
|
+
"description": "Human-readable template name, e.g. 'Problem \u2192 Solution'."
|
|
7220
6997
|
},
|
|
7221
|
-
"
|
|
6998
|
+
"deprecation": {
|
|
7222
6999
|
"type": "object",
|
|
7223
|
-
"
|
|
7000
|
+
"additionalProperties": false,
|
|
7224
7001
|
"required": [
|
|
7225
|
-
"
|
|
7226
|
-
"role",
|
|
7227
|
-
"type"
|
|
7002
|
+
"replacedBy"
|
|
7228
7003
|
],
|
|
7004
|
+
"description": "Present when this narrative is deprecated, for example an alias kept for backward compatibility. Deprecated records stay resolvable so existing documents keep validating and rendering unchanged, but pickers and default listings exclude them and validators warn when a document references them. Same shape as the chart-type deprecation.",
|
|
7229
7005
|
"properties": {
|
|
7230
|
-
"
|
|
7006
|
+
"replacedBy": {
|
|
7231
7007
|
"type": "string",
|
|
7232
|
-
"
|
|
7233
|
-
"
|
|
7234
|
-
"Series 1",
|
|
7235
|
-
"Value",
|
|
7236
|
-
"Level1",
|
|
7237
|
-
"Level2"
|
|
7238
|
-
]
|
|
7008
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
7009
|
+
"description": "Id of the non-deprecated narrative record that documents should reference instead."
|
|
7239
7010
|
},
|
|
7240
|
-
"
|
|
7241
|
-
"type": "string",
|
|
7242
|
-
"enum": [
|
|
7243
|
-
"categoryLabel",
|
|
7244
|
-
"series",
|
|
7245
|
-
"helper"
|
|
7246
|
-
],
|
|
7247
|
-
"description": "Role this column plays: a category label (axis tick), a series (plotted values), or a helper (calculated/auxiliary)."
|
|
7248
|
-
},
|
|
7249
|
-
"type": {
|
|
7250
|
-
"type": "string",
|
|
7251
|
-
"enum": [
|
|
7252
|
-
"string",
|
|
7253
|
-
"number"
|
|
7254
|
-
],
|
|
7255
|
-
"description": "Cell value type for the column."
|
|
7256
|
-
},
|
|
7257
|
-
"position": {
|
|
7258
|
-
"type": "string",
|
|
7259
|
-
"pattern": "^row[0-9]+_col[0-9]+$",
|
|
7260
|
-
"description": "Grid position of the column header in the source workbook, as 'row<N>_col<M>' (zero-indexed).",
|
|
7261
|
-
"examples": [
|
|
7262
|
-
"row0_col0",
|
|
7263
|
-
"row1_col0",
|
|
7264
|
-
"row2_col0"
|
|
7265
|
-
]
|
|
7266
|
-
}
|
|
7267
|
-
}
|
|
7268
|
-
},
|
|
7269
|
-
"ChartSampleData": {
|
|
7270
|
-
"type": "object",
|
|
7271
|
-
"description": "Inline sample dataset for previews. Mirrors a small workbook with header row plus data rows.",
|
|
7272
|
-
"required": [
|
|
7273
|
-
"headers",
|
|
7274
|
-
"rows"
|
|
7275
|
-
],
|
|
7276
|
-
"properties": {
|
|
7277
|
-
"headers": {
|
|
7278
|
-
"type": "array",
|
|
7279
|
-
"items": {
|
|
7280
|
-
"type": "string"
|
|
7281
|
-
},
|
|
7282
|
-
"description": "Header row labels. The first cell typically labels the series column; the rest are category labels.",
|
|
7283
|
-
"examples": [
|
|
7284
|
-
[
|
|
7285
|
-
"Series 1",
|
|
7286
|
-
"Q1 2024",
|
|
7287
|
-
"Q2 2024",
|
|
7288
|
-
"Q3 2024",
|
|
7289
|
-
"Q4 2024",
|
|
7290
|
-
"Q1 2025",
|
|
7291
|
-
"Q2 2025",
|
|
7292
|
-
"Q3 2025",
|
|
7293
|
-
"Q4 2025"
|
|
7294
|
-
]
|
|
7295
|
-
]
|
|
7296
|
-
},
|
|
7297
|
-
"rows": {
|
|
7298
|
-
"type": "array",
|
|
7299
|
-
"items": {
|
|
7300
|
-
"type": "array",
|
|
7301
|
-
"items": {
|
|
7302
|
-
"type": [
|
|
7303
|
-
"string",
|
|
7304
|
-
"number"
|
|
7305
|
-
]
|
|
7306
|
-
}
|
|
7307
|
-
},
|
|
7308
|
-
"description": "Two-dimensional sample data. Each row aligns by index with the headers \u2014 first cell is the row label, remaining cells are values.",
|
|
7309
|
-
"examples": [
|
|
7310
|
-
[
|
|
7311
|
-
[
|
|
7312
|
-
"Value",
|
|
7313
|
-
93810,
|
|
7314
|
-
24592,
|
|
7315
|
-
13278,
|
|
7316
|
-
46048,
|
|
7317
|
-
42098,
|
|
7318
|
-
39256,
|
|
7319
|
-
28289,
|
|
7320
|
-
23434
|
|
7321
|
-
]
|
|
7322
|
-
],
|
|
7323
|
-
[
|
|
7324
|
-
[
|
|
7325
|
-
"Value 1",
|
|
7326
|
-
98696,
|
|
7327
|
-
81482,
|
|
7328
|
-
21395,
|
|
7329
|
-
87397
|
|
7330
|
-
],
|
|
7331
|
-
[
|
|
7332
|
-
"Value 2",
|
|
7333
|
-
38657,
|
|
7334
|
-
40495,
|
|
7335
|
-
76237,
|
|
7336
|
-
88907
|
|
7337
|
-
]
|
|
7338
|
-
]
|
|
7339
|
-
]
|
|
7340
|
-
}
|
|
7341
|
-
}
|
|
7342
|
-
}
|
|
7343
|
-
}
|
|
7344
|
-
};
|
|
7345
|
-
var narrative = {
|
|
7346
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
7347
|
-
"$id": "https://openpresentation.org/schema/opf-narrative/v1",
|
|
7348
|
-
"title": "Narrative Template",
|
|
7349
|
-
"description": "Schema for narrative template files in the openpresentation.org catalog. Each template describes a named story arc (e.g. 'problem-solution', 'scqa') as an ordered list of beats. Templates are referenced from OPF documents via narrative \u2014 either as a bare id string (e.g. 'classic-story') or as an inline object whose shape matches this schema (sans '$schema').",
|
|
7350
|
-
"type": "object",
|
|
7351
|
-
"required": [
|
|
7352
|
-
"$schema",
|
|
7353
|
-
"id",
|
|
7354
|
-
"name",
|
|
7355
|
-
"beats"
|
|
7356
|
-
],
|
|
7357
|
-
"properties": {
|
|
7358
|
-
"$schema": {
|
|
7359
|
-
"type": "string",
|
|
7360
|
-
"const": "https://openpresentation.org/schema/opf-narrative/v1"
|
|
7361
|
-
},
|
|
7362
|
-
"id": {
|
|
7363
|
-
"type": "string",
|
|
7364
|
-
"pattern": "^[a-z][a-z0-9-]*$",
|
|
7365
|
-
"description": "Stable slug used by OPF documents to reference this template, e.g. 'problem-solution'. Lowercase kebab-case."
|
|
7366
|
-
},
|
|
7367
|
-
"name": {
|
|
7368
|
-
"type": "string",
|
|
7369
|
-
"description": "Human-readable template name, e.g. 'Problem \u2192 Solution'."
|
|
7370
|
-
},
|
|
7371
|
-
"deprecation": {
|
|
7372
|
-
"type": "object",
|
|
7373
|
-
"additionalProperties": false,
|
|
7374
|
-
"required": [
|
|
7375
|
-
"replacedBy"
|
|
7376
|
-
],
|
|
7377
|
-
"description": "Present when this narrative is deprecated, for example an alias kept for backward compatibility. Deprecated records stay resolvable so existing documents keep validating and rendering unchanged, but pickers and default listings exclude them and validators warn when a document references them. Same shape as the chart-type deprecation.",
|
|
7378
|
-
"properties": {
|
|
7379
|
-
"replacedBy": {
|
|
7380
|
-
"type": "string",
|
|
7381
|
-
"pattern": "^[a-z][a-z0-9-]*$",
|
|
7382
|
-
"description": "Id of the non-deprecated narrative record that documents should reference instead."
|
|
7383
|
-
},
|
|
7384
|
-
"reason": {
|
|
7011
|
+
"reason": {
|
|
7385
7012
|
"type": "string",
|
|
7386
7013
|
"description": "Why the record is deprecated."
|
|
7387
7014
|
},
|
|
@@ -7409,17 +7036,20 @@ var narrative = {
|
|
|
7409
7036
|
},
|
|
7410
7037
|
"description": "Audiences this narrative works well for, e.g. ['executive', 'investor', 'customer']."
|
|
7411
7038
|
},
|
|
7412
|
-
"
|
|
7039
|
+
"duration": {
|
|
7413
7040
|
"type": "object",
|
|
7414
|
-
"
|
|
7041
|
+
"additionalProperties": false,
|
|
7042
|
+
"description": "Typical talk length this narrative suits, as a range in minutes. A deck's own target is the root 'duration' (one number); core validate warns when that target lies outside this range, and when 'min' is greater than 'max'.",
|
|
7415
7043
|
"properties": {
|
|
7416
|
-
"
|
|
7044
|
+
"min": {
|
|
7417
7045
|
"type": "number",
|
|
7418
|
-
"exclusiveMinimum": 0
|
|
7046
|
+
"exclusiveMinimum": 0,
|
|
7047
|
+
"description": "Shortest talk length, in minutes, this narrative suits."
|
|
7419
7048
|
},
|
|
7420
|
-
"
|
|
7049
|
+
"max": {
|
|
7421
7050
|
"type": "number",
|
|
7422
|
-
"exclusiveMinimum": 0
|
|
7051
|
+
"exclusiveMinimum": 0,
|
|
7052
|
+
"description": "Longest talk length, in minutes, this narrative suits."
|
|
7423
7053
|
}
|
|
7424
7054
|
}
|
|
7425
7055
|
},
|
|
@@ -7472,7 +7102,7 @@ var narrative = {
|
|
|
7472
7102
|
"$defs": {
|
|
7473
7103
|
"Beat": {
|
|
7474
7104
|
"type": "object",
|
|
7475
|
-
"description": "A single narrative beat \u2014 a labeled segment of the story arc with a specific dramatic purpose.
|
|
7105
|
+
"description": "A single narrative beat \u2014 a labeled segment of the story arc with a specific dramatic purpose. One beat is one slide: 'type' is that slide's Slide.type and 'layout' is its Slide.layout, so a planner copies them straight into a skeleton deck. Split a heavy beat into several beats rather than giving it several slides.",
|
|
7476
7106
|
"required": [
|
|
7477
7107
|
"id",
|
|
7478
7108
|
"name"
|
|
@@ -7517,36 +7147,25 @@ var narrative = {
|
|
|
7517
7147
|
"Inspire & conclude"
|
|
7518
7148
|
]
|
|
7519
7149
|
},
|
|
7520
|
-
"
|
|
7521
|
-
"type": "integer",
|
|
7522
|
-
"minimum": 1,
|
|
7523
|
-
"description": "Optional explicit slide count for this beat. Defaults to 1 when omitted; values >1 are reserved for beats that intentionally span multiple slides. Prefer decomposing a heavy beat into multiple beats over setting a high slideCount. The validator emits a warning if the deck's actual count differs significantly.",
|
|
7524
|
-
"examples": [
|
|
7525
|
-
1,
|
|
7526
|
-
2,
|
|
7527
|
-
3
|
|
7528
|
-
]
|
|
7529
|
-
},
|
|
7530
|
-
"slideType": {
|
|
7150
|
+
"type": {
|
|
7531
7151
|
"type": "string",
|
|
7532
7152
|
"enum": [
|
|
7533
7153
|
"text",
|
|
7534
7154
|
"list",
|
|
7535
7155
|
"image",
|
|
7536
|
-
"
|
|
7156
|
+
"video",
|
|
7537
7157
|
"chart",
|
|
7538
7158
|
"table",
|
|
7539
|
-
"video",
|
|
7540
7159
|
"code",
|
|
7541
7160
|
"metric",
|
|
7542
7161
|
"quote",
|
|
7543
7162
|
"timeline"
|
|
7544
7163
|
],
|
|
7545
|
-
"description": "Default content kind for the beat's slide
|
|
7164
|
+
"description": "Default content kind for the beat's slide: the same values as Slide.type. Helps engines and planners choose a layout when only the beat is known."
|
|
7546
7165
|
},
|
|
7547
|
-
"
|
|
7166
|
+
"layout": {
|
|
7548
7167
|
"type": "string",
|
|
7549
|
-
"description": "Suggested layout id for the beat's
|
|
7168
|
+
"description": "Suggested layout id for the beat's slide, e.g. 'section-divider', 'title-slide', 'text-left'. Resolves the same way as Slide.layout \u2014 against catalogs.layouts and the default catalog at https://www.pptx.gallery/layouts.",
|
|
7550
7169
|
"examples": [
|
|
7551
7170
|
"section-divider",
|
|
7552
7171
|
"title-slide",
|
|
@@ -7560,7 +7179,7 @@ var narrative = {
|
|
|
7560
7179
|
"items": {
|
|
7561
7180
|
"type": "string"
|
|
7562
7181
|
},
|
|
7563
|
-
"description": "Optional speaker or thinking cues
|
|
7182
|
+
"description": "Optional speaker or thinking cues for the beat: questions the slide should answer. A planner or author turns them into the slide's notes; no engine copies them there on its own.",
|
|
7564
7183
|
"examples": [
|
|
7565
7184
|
[
|
|
7566
7185
|
"What pain is the audience feeling right now?",
|
|
@@ -7576,7 +7195,7 @@ var socialPlatform = {
|
|
|
7576
7195
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
7577
7196
|
"$id": "https://openpresentation.org/schema/opf-social-platform/v1",
|
|
7578
7197
|
"title": "Social Platform",
|
|
7579
|
-
"description": "Schema for social-platform records in the pptx.gallery library. Each record describes a single social-media platform \u2014 its base URL, profile-URL pattern, handle prefix, brand color
|
|
7198
|
+
"description": "Schema for social-platform records in the pptx.gallery library. Each record describes a single social-media platform \u2014 its base URL, profile-URL pattern, handle prefix, and brand color. Records are referenced from OPF documents indirectly: the property keys of any Socials object (Organization.socials, Speaker.socials) match record ids, and engines use the catalog record's URL patterns and handle prefix to format and link the profile URL. The brand color is catalog metadata for authoring UIs: engines (opf-render, opf-pptx) render the profile URL, not brand colors. The engine resolves references against catalogs.socialPlatforms (inline) \u2192 catalogs.socialPlatforms.source \u2192 the default catalog at https://www.pptx.gallery/social-platforms.",
|
|
7580
7199
|
"type": "object",
|
|
7581
7200
|
"required": [
|
|
7582
7201
|
"$schema",
|
|
@@ -7719,31 +7338,6 @@ var socialPlatform = {
|
|
|
7719
7338
|
"#FF0000"
|
|
7720
7339
|
]
|
|
7721
7340
|
},
|
|
7722
|
-
"icon": {
|
|
7723
|
-
"type": "string",
|
|
7724
|
-
"description": "Default icon source. Accepts an HTTPS URL, data URI, relative path, or asset reference. Used as the fallback when a themed (Light/Dark) variant isn't set. Catalog metadata for authoring UIs: engines do not draw icons.",
|
|
7725
|
-
"examples": [
|
|
7726
|
-
"https://www.pptx.gallery/social-platforms/linkedin.svg",
|
|
7727
|
-
"./assets/social-platforms/linkedin.svg",
|
|
7728
|
-
"asset:social-linkedin"
|
|
7729
|
-
]
|
|
7730
|
-
},
|
|
7731
|
-
"iconLight": {
|
|
7732
|
-
"type": "string",
|
|
7733
|
-
"description": "Light-colored icon variant intended for authoring UIs that draw the icon on dark backgrounds (engines do not draw icons).",
|
|
7734
|
-
"examples": [
|
|
7735
|
-
"https://www.pptx.gallery/social-platforms/linkedin-light.svg",
|
|
7736
|
-
"./assets/social-platforms/linkedin-light.svg"
|
|
7737
|
-
]
|
|
7738
|
-
},
|
|
7739
|
-
"iconDark": {
|
|
7740
|
-
"type": "string",
|
|
7741
|
-
"description": "Dark-colored icon variant intended for authoring UIs that draw the icon on light backgrounds (engines do not draw icons).",
|
|
7742
|
-
"examples": [
|
|
7743
|
-
"https://www.pptx.gallery/social-platforms/linkedin-dark.svg",
|
|
7744
|
-
"./assets/social-platforms/linkedin-dark.svg"
|
|
7745
|
-
]
|
|
7746
|
-
},
|
|
7747
7341
|
"tags": {
|
|
7748
7342
|
"type": "array",
|
|
7749
7343
|
"items": {
|
|
@@ -8016,6 +7610,18 @@ var colorScheme = {
|
|
|
8016
7610
|
"id",
|
|
8017
7611
|
"name"
|
|
8018
7612
|
],
|
|
7613
|
+
"$defs": {
|
|
7614
|
+
"HexColor": {
|
|
7615
|
+
"type": "string",
|
|
7616
|
+
"pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
|
|
7617
|
+
"description": "Hex color: '#RGB', '#RRGGBB' or '#RRGGBBAA'. The same definition as HexColor in opf.schema.json.",
|
|
7618
|
+
"examples": [
|
|
7619
|
+
"#fff",
|
|
7620
|
+
"#2874A6",
|
|
7621
|
+
"#0F172AFF"
|
|
7622
|
+
]
|
|
7623
|
+
}
|
|
7624
|
+
},
|
|
8019
7625
|
"properties": {
|
|
8020
7626
|
"$schema": {
|
|
8021
7627
|
"type": "string",
|
|
@@ -8082,7 +7688,7 @@ var colorScheme = {
|
|
|
8082
7688
|
]
|
|
8083
7689
|
},
|
|
8084
7690
|
"accent1": {
|
|
8085
|
-
"
|
|
7691
|
+
"$ref": "#/$defs/HexColor",
|
|
8086
7692
|
"description": "Accent 1 color (hex). Mirrors the OOXML accent1 slot.",
|
|
8087
7693
|
"examples": [
|
|
8088
7694
|
"#2874A6",
|
|
@@ -8091,7 +7697,7 @@ var colorScheme = {
|
|
|
8091
7697
|
]
|
|
8092
7698
|
},
|
|
8093
7699
|
"accent2": {
|
|
8094
|
-
"
|
|
7700
|
+
"$ref": "#/$defs/HexColor",
|
|
8095
7701
|
"description": "Accent 2 color (hex). Mirrors the OOXML accent2 slot.",
|
|
8096
7702
|
"examples": [
|
|
8097
7703
|
"#1B4F72",
|
|
@@ -8100,7 +7706,7 @@ var colorScheme = {
|
|
|
8100
7706
|
]
|
|
8101
7707
|
},
|
|
8102
7708
|
"accent3": {
|
|
8103
|
-
"
|
|
7709
|
+
"$ref": "#/$defs/HexColor",
|
|
8104
7710
|
"description": "Accent 3 color (hex). Mirrors the OOXML accent3 slot.",
|
|
8105
7711
|
"examples": [
|
|
8106
7712
|
"#5499C7",
|
|
@@ -8109,7 +7715,7 @@ var colorScheme = {
|
|
|
8109
7715
|
]
|
|
8110
7716
|
},
|
|
8111
7717
|
"accent4": {
|
|
8112
|
-
"
|
|
7718
|
+
"$ref": "#/$defs/HexColor",
|
|
8113
7719
|
"description": "Accent 4 color (hex). Mirrors the OOXML accent4 slot.",
|
|
8114
7720
|
"examples": [
|
|
8115
7721
|
"#7BDBB2",
|
|
@@ -8118,7 +7724,7 @@ var colorScheme = {
|
|
|
8118
7724
|
]
|
|
8119
7725
|
},
|
|
8120
7726
|
"accent5": {
|
|
8121
|
-
"
|
|
7727
|
+
"$ref": "#/$defs/HexColor",
|
|
8122
7728
|
"description": "Accent 5 color (hex). Mirrors the OOXML accent5 slot.",
|
|
8123
7729
|
"examples": [
|
|
8124
7730
|
"#3AC67A",
|
|
@@ -8127,7 +7733,7 @@ var colorScheme = {
|
|
|
8127
7733
|
]
|
|
8128
7734
|
},
|
|
8129
7735
|
"accent6": {
|
|
8130
|
-
"
|
|
7736
|
+
"$ref": "#/$defs/HexColor",
|
|
8131
7737
|
"description": "Accent 6 color (hex). Mirrors the OOXML accent6 slot.",
|
|
8132
7738
|
"examples": [
|
|
8133
7739
|
"#24A89E",
|
|
@@ -8136,42 +7742,42 @@ var colorScheme = {
|
|
|
8136
7742
|
]
|
|
8137
7743
|
},
|
|
8138
7744
|
"dark1": {
|
|
8139
|
-
"
|
|
7745
|
+
"$ref": "#/$defs/HexColor",
|
|
8140
7746
|
"description": "Dark 1 color (hex). Typically the deepest neutral; OOXML dark1.",
|
|
8141
7747
|
"examples": [
|
|
8142
7748
|
"#000000"
|
|
8143
7749
|
]
|
|
8144
7750
|
},
|
|
8145
7751
|
"dark2": {
|
|
8146
|
-
"
|
|
7752
|
+
"$ref": "#/$defs/HexColor",
|
|
8147
7753
|
"description": "Dark 2 color (hex). Secondary dark; OOXML dark2.",
|
|
8148
7754
|
"examples": [
|
|
8149
7755
|
"#011842"
|
|
8150
7756
|
]
|
|
8151
7757
|
},
|
|
8152
7758
|
"light1": {
|
|
8153
|
-
"
|
|
7759
|
+
"$ref": "#/$defs/HexColor",
|
|
8154
7760
|
"description": "Light 1 color (hex). Typically the slide canvas; OOXML lt1.",
|
|
8155
7761
|
"examples": [
|
|
8156
7762
|
"#FFFFFF"
|
|
8157
7763
|
]
|
|
8158
7764
|
},
|
|
8159
7765
|
"light2": {
|
|
8160
|
-
"
|
|
7766
|
+
"$ref": "#/$defs/HexColor",
|
|
8161
7767
|
"description": "Light 2 color (hex). Secondary light surface; OOXML lt2.",
|
|
8162
7768
|
"examples": [
|
|
8163
7769
|
"#F0F0F0"
|
|
8164
7770
|
]
|
|
8165
7771
|
},
|
|
8166
7772
|
"hyperlink": {
|
|
8167
|
-
"
|
|
7773
|
+
"$ref": "#/$defs/HexColor",
|
|
8168
7774
|
"description": "Hyperlink color (hex). OOXML hlink.",
|
|
8169
7775
|
"examples": [
|
|
8170
7776
|
"#0563C1"
|
|
8171
7777
|
]
|
|
8172
7778
|
},
|
|
8173
7779
|
"followedHyperlink": {
|
|
8174
|
-
"
|
|
7780
|
+
"$ref": "#/$defs/HexColor",
|
|
8175
7781
|
"description": "Followed-hyperlink color (hex). OOXML folHlink.",
|
|
8176
7782
|
"examples": [
|
|
8177
7783
|
"#954F72"
|
|
@@ -8232,7 +7838,7 @@ var fontScheme = {
|
|
|
8232
7838
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
8233
7839
|
"$id": "https://openpresentation.org/schema/opf-font-scheme/v1",
|
|
8234
7840
|
"title": "Font Scheme",
|
|
8235
|
-
"description": "Schema for font-scheme records in the pptx.gallery library. Each scheme pairs a major (heading) and minor (body) font family in the OOXML majorFont/minorFont sense, scoped to a target app (
|
|
7841
|
+
"description": "Schema for font-scheme records in the pptx.gallery library. Each scheme pairs a major (heading) and minor (body) font family in the OOXML majorFont/minorFont sense, scoped to a target app (powerpoint or google-slides) and a language family (Latin, East Asian, or Complex Script). Font schemes are referenced from OPF documents via design.fontScheme or design.fontScheme.id; the engine resolves the reference against catalogs.fontSchemes (inline) \u2192 catalogs.fontSchemes.source \u2192 the default catalog at https://www.pptx.gallery/font-schemes. Role overrides on design.fontScheme (heading, body, accent, code), each a font family name, take precedence over the resolved scheme.",
|
|
8236
7842
|
"type": "object",
|
|
8237
7843
|
"required": [
|
|
8238
7844
|
"$schema",
|
|
@@ -8312,41 +7918,11 @@ var fontScheme = {
|
|
|
8312
7918
|
]
|
|
8313
7919
|
},
|
|
8314
7920
|
"code": {
|
|
8315
|
-
"type": "
|
|
8316
|
-
"description": "Optional monospaced font for code blocks and inline code. It has the same shape as the OPF FontScheme 'code' role, so a record and an inline design.fontScheme override are interchangeable. OOXML has no code slot, so exporters write this family on code runs. When neither design.fontScheme nor the resolved record defines 'code', engines fall back to Roboto Mono.",
|
|
8317
|
-
"required": [
|
|
8318
|
-
"family"
|
|
8319
|
-
],
|
|
8320
|
-
"properties": {
|
|
8321
|
-
"family": {
|
|
8322
|
-
"type": "string",
|
|
8323
|
-
"description": "Monospaced font family name.",
|
|
8324
|
-
"examples": [
|
|
8325
|
-
"Consolas",
|
|
8326
|
-
"Courier New"
|
|
8327
|
-
]
|
|
8328
|
-
},
|
|
8329
|
-
"weight": {
|
|
8330
|
-
"type": "number",
|
|
8331
|
-
"description": "Numeric font weight (e.g., 400 for regular, 700 for bold)."
|
|
8332
|
-
},
|
|
8333
|
-
"style": {
|
|
8334
|
-
"type": "string",
|
|
8335
|
-
"enum": [
|
|
8336
|
-
"normal",
|
|
8337
|
-
"italic"
|
|
8338
|
-
],
|
|
8339
|
-
"description": "Font style."
|
|
8340
|
-
},
|
|
8341
|
-
"letterSpacing": {
|
|
8342
|
-
"type": "number",
|
|
8343
|
-
"description": "Letter spacing (tracking) in ems."
|
|
8344
|
-
}
|
|
8345
|
-
},
|
|
7921
|
+
"type": "string",
|
|
7922
|
+
"description": "Optional monospaced font family name for code blocks and for inline code runs (TextRun.code). It has the same shape as the OPF FontScheme 'code' role, so a record and an inline design.fontScheme override are interchangeable. OOXML has no code slot, so exporters write this family on code runs. When neither design.fontScheme nor the resolved record defines 'code', engines fall back to Roboto Mono.",
|
|
8346
7923
|
"examples": [
|
|
8347
|
-
|
|
8348
|
-
|
|
8349
|
-
}
|
|
7924
|
+
"Consolas",
|
|
7925
|
+
"Courier New"
|
|
8350
7926
|
]
|
|
8351
7927
|
},
|
|
8352
7928
|
"eastAsian": {
|
|
@@ -8413,32 +7989,35 @@ var fontScheme = {
|
|
|
8413
7989
|
"app": {
|
|
8414
7990
|
"type": "string",
|
|
8415
7991
|
"enum": [
|
|
8416
|
-
"
|
|
8417
|
-
"
|
|
7992
|
+
"powerpoint",
|
|
7993
|
+
"google-slides"
|
|
8418
7994
|
],
|
|
8419
|
-
"description": "Target application this font pairing is intended for."
|
|
7995
|
+
"description": "Target application this font pairing is intended for. Metadata for pickers and catalog filters: no engine changes its output by it."
|
|
8420
7996
|
},
|
|
8421
7997
|
"languageFamily": {
|
|
8422
7998
|
"type": "string",
|
|
8423
7999
|
"enum": [
|
|
8424
8000
|
"latin",
|
|
8425
8001
|
"ea",
|
|
8426
|
-
"cs"
|
|
8002
|
+
"cs",
|
|
8003
|
+
"eastAsian",
|
|
8004
|
+
"complexScript"
|
|
8427
8005
|
],
|
|
8428
|
-
"description": "
|
|
8006
|
+
"description": "Font-language family this scheme is intended for: 'latin' for Latin-script content, 'ea' (or 'eastAsian', the same value) for East Asian scripts, 'cs' (or 'complexScript', the same value) for Complex Scripts. The long names match the 'eastAsian' and 'complexScript' slot keys; the short names match the OOXML a:ea and a:cs elements; core reads both spellings as one value. As the design font scheme, an 'ea'/'eastAsian' or 'cs'/'complexScript' scheme also fills that script slot with its own major/minor families when its languages list is empty or names the presentation language."
|
|
8429
8007
|
},
|
|
8430
8008
|
"languages": {
|
|
8431
8009
|
"type": "array",
|
|
8432
8010
|
"items": {
|
|
8433
|
-
"type": "string"
|
|
8011
|
+
"type": "string",
|
|
8012
|
+
"pattern": "^[a-z][a-z0-9-]*$"
|
|
8434
8013
|
},
|
|
8435
|
-
"description": "Optional list of
|
|
8014
|
+
"description": "Optional list of languages catalog ids (see the languages catalog, https://www.pptx.gallery/languages) this scheme is curated for. Useful for picker UIs that group fonts by language coverage. As the design font scheme, an 'ea' or 'cs' scheme fills its script slot only when this list is empty or names the presentation language by id.",
|
|
8436
8015
|
"examples": [
|
|
8437
8016
|
[
|
|
8438
|
-
"
|
|
8439
|
-
"
|
|
8440
|
-
"
|
|
8441
|
-
"
|
|
8017
|
+
"chinese-simplified",
|
|
8018
|
+
"chinese-traditional",
|
|
8019
|
+
"japanese",
|
|
8020
|
+
"korean"
|
|
8442
8021
|
]
|
|
8443
8022
|
]
|
|
8444
8023
|
},
|
|
@@ -8515,6 +8094,418 @@ var fontScheme = {
|
|
|
8515
8094
|
}
|
|
8516
8095
|
}
|
|
8517
8096
|
};
|
|
8097
|
+
var finding = {
|
|
8098
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
8099
|
+
"$id": "https://openpresentation.org/schema/opf-finding/v1",
|
|
8100
|
+
"title": "Finding Report",
|
|
8101
|
+
"description": "The report format every OPF tool shares. A finding is one thing a checker found at one place in a presentation: a stable rule id, a severity, a category, a JSON Pointer path, a message, and optionally source positions, the measured numbers behind it and suggested fixes as JSON Patch. `validate` in `@openpresentation/opf`, the Markdown and YAML converters, the editor's Review panel and hosted reviewers such as pptx.dev's AI review all produce this shape, so a host shows and applies findings from any of them the same way. A report lists findings, tells whether any has severity `error` (`valid`) and counts them by severity; `validate` adds `schemaValid`, `checks` and variable fields on top of it. Core's checks are deterministic and run locally; findings from other producers use their own rule-id prefix and say so in `source`.",
|
|
8102
|
+
"type": "object",
|
|
8103
|
+
"required": [
|
|
8104
|
+
"valid",
|
|
8105
|
+
"findings",
|
|
8106
|
+
"counts"
|
|
8107
|
+
],
|
|
8108
|
+
"properties": {
|
|
8109
|
+
"valid": {
|
|
8110
|
+
"type": "boolean",
|
|
8111
|
+
"description": "True when no finding has severity `error`."
|
|
8112
|
+
},
|
|
8113
|
+
"findings": {
|
|
8114
|
+
"type": "array",
|
|
8115
|
+
"description": "Every finding, in report order.",
|
|
8116
|
+
"items": {
|
|
8117
|
+
"$ref": "#/$defs/Finding"
|
|
8118
|
+
}
|
|
8119
|
+
},
|
|
8120
|
+
"counts": {
|
|
8121
|
+
"type": "object",
|
|
8122
|
+
"description": "How many findings each severity has.",
|
|
8123
|
+
"required": [
|
|
8124
|
+
"error",
|
|
8125
|
+
"warning",
|
|
8126
|
+
"info"
|
|
8127
|
+
],
|
|
8128
|
+
"additionalProperties": false,
|
|
8129
|
+
"properties": {
|
|
8130
|
+
"error": {
|
|
8131
|
+
"type": "integer",
|
|
8132
|
+
"minimum": 0
|
|
8133
|
+
},
|
|
8134
|
+
"warning": {
|
|
8135
|
+
"type": "integer",
|
|
8136
|
+
"minimum": 0
|
|
8137
|
+
},
|
|
8138
|
+
"info": {
|
|
8139
|
+
"type": "integer",
|
|
8140
|
+
"minimum": 0
|
|
8141
|
+
}
|
|
8142
|
+
}
|
|
8143
|
+
}
|
|
8144
|
+
},
|
|
8145
|
+
"$defs": {
|
|
8146
|
+
"FindingSeverity": {
|
|
8147
|
+
"type": "string",
|
|
8148
|
+
"enum": [
|
|
8149
|
+
"error",
|
|
8150
|
+
"warning",
|
|
8151
|
+
"info"
|
|
8152
|
+
],
|
|
8153
|
+
"description": "`error` makes a report invalid. `warning` is a problem the author should fix. `info` is advisory."
|
|
8154
|
+
},
|
|
8155
|
+
"FindingCategory": {
|
|
8156
|
+
"description": "What kind of question the finding answers. Core uses `format` (is it well-formed OPF), `references` (does everything it points at resolve), `policy` (host house rules), `accessibility`, `layout` (will it present as authored) and `content` (is anything left unfinished). Other producers may use their own category names, such as `narrative` or `audience-fit`.",
|
|
8157
|
+
"anyOf": [
|
|
8158
|
+
{
|
|
8159
|
+
"type": "string",
|
|
8160
|
+
"enum": [
|
|
8161
|
+
"format",
|
|
8162
|
+
"references",
|
|
8163
|
+
"policy",
|
|
8164
|
+
"accessibility",
|
|
8165
|
+
"layout",
|
|
8166
|
+
"content"
|
|
8167
|
+
]
|
|
8168
|
+
},
|
|
8169
|
+
{
|
|
8170
|
+
"type": "string",
|
|
8171
|
+
"minLength": 1
|
|
8172
|
+
}
|
|
8173
|
+
]
|
|
8174
|
+
},
|
|
8175
|
+
"FindingLocation": {
|
|
8176
|
+
"type": "object",
|
|
8177
|
+
"description": "A range in the checked text: UTF-16 offset and length from the start, and the one-based line and column of the start. Present when the finding was produced from text (JSON, Markdown or YAML).",
|
|
8178
|
+
"required": [
|
|
8179
|
+
"offset",
|
|
8180
|
+
"length",
|
|
8181
|
+
"line",
|
|
8182
|
+
"column"
|
|
8183
|
+
],
|
|
8184
|
+
"additionalProperties": false,
|
|
8185
|
+
"properties": {
|
|
8186
|
+
"offset": {
|
|
8187
|
+
"type": "integer",
|
|
8188
|
+
"minimum": 0
|
|
8189
|
+
},
|
|
8190
|
+
"length": {
|
|
8191
|
+
"type": "integer",
|
|
8192
|
+
"minimum": 0
|
|
8193
|
+
},
|
|
8194
|
+
"line": {
|
|
8195
|
+
"type": "integer",
|
|
8196
|
+
"minimum": 1
|
|
8197
|
+
},
|
|
8198
|
+
"column": {
|
|
8199
|
+
"type": "integer",
|
|
8200
|
+
"minimum": 1
|
|
8201
|
+
}
|
|
8202
|
+
}
|
|
8203
|
+
},
|
|
8204
|
+
"JsonPatchOperation": {
|
|
8205
|
+
"description": "One RFC 6902 JSON Patch operation. Paths are JSON Pointers into the checked presentation.",
|
|
8206
|
+
"oneOf": [
|
|
8207
|
+
{
|
|
8208
|
+
"type": "object",
|
|
8209
|
+
"required": [
|
|
8210
|
+
"op",
|
|
8211
|
+
"path",
|
|
8212
|
+
"value"
|
|
8213
|
+
],
|
|
8214
|
+
"additionalProperties": false,
|
|
8215
|
+
"properties": {
|
|
8216
|
+
"op": {
|
|
8217
|
+
"type": "string",
|
|
8218
|
+
"enum": [
|
|
8219
|
+
"add",
|
|
8220
|
+
"replace",
|
|
8221
|
+
"test"
|
|
8222
|
+
]
|
|
8223
|
+
},
|
|
8224
|
+
"path": {
|
|
8225
|
+
"type": "string"
|
|
8226
|
+
},
|
|
8227
|
+
"value": {}
|
|
8228
|
+
}
|
|
8229
|
+
},
|
|
8230
|
+
{
|
|
8231
|
+
"type": "object",
|
|
8232
|
+
"required": [
|
|
8233
|
+
"op",
|
|
8234
|
+
"path"
|
|
8235
|
+
],
|
|
8236
|
+
"additionalProperties": false,
|
|
8237
|
+
"properties": {
|
|
8238
|
+
"op": {
|
|
8239
|
+
"type": "string",
|
|
8240
|
+
"const": "remove"
|
|
8241
|
+
},
|
|
8242
|
+
"path": {
|
|
8243
|
+
"type": "string"
|
|
8244
|
+
}
|
|
8245
|
+
}
|
|
8246
|
+
},
|
|
8247
|
+
{
|
|
8248
|
+
"type": "object",
|
|
8249
|
+
"required": [
|
|
8250
|
+
"op",
|
|
8251
|
+
"from",
|
|
8252
|
+
"path"
|
|
8253
|
+
],
|
|
8254
|
+
"additionalProperties": false,
|
|
8255
|
+
"properties": {
|
|
8256
|
+
"op": {
|
|
8257
|
+
"type": "string",
|
|
8258
|
+
"enum": [
|
|
8259
|
+
"move",
|
|
8260
|
+
"copy"
|
|
8261
|
+
]
|
|
8262
|
+
},
|
|
8263
|
+
"from": {
|
|
8264
|
+
"type": "string"
|
|
8265
|
+
},
|
|
8266
|
+
"path": {
|
|
8267
|
+
"type": "string"
|
|
8268
|
+
}
|
|
8269
|
+
}
|
|
8270
|
+
}
|
|
8271
|
+
]
|
|
8272
|
+
},
|
|
8273
|
+
"FindingFocus": {
|
|
8274
|
+
"type": "object",
|
|
8275
|
+
"description": "The field an author has to fill in, for a fix that cannot be written as a patch.",
|
|
8276
|
+
"required": [
|
|
8277
|
+
"path",
|
|
8278
|
+
"field"
|
|
8279
|
+
],
|
|
8280
|
+
"additionalProperties": false,
|
|
8281
|
+
"properties": {
|
|
8282
|
+
"path": {
|
|
8283
|
+
"type": "string",
|
|
8284
|
+
"description": "JSON Pointer of the field to edit."
|
|
8285
|
+
},
|
|
8286
|
+
"field": {
|
|
8287
|
+
"type": "string",
|
|
8288
|
+
"description": "What the field is, such as `alt`, `title`, `text`, `link`, `language` or `fontSize`."
|
|
8289
|
+
},
|
|
8290
|
+
"value": {
|
|
8291
|
+
"type": [
|
|
8292
|
+
"string",
|
|
8293
|
+
"number",
|
|
8294
|
+
"boolean",
|
|
8295
|
+
"null",
|
|
8296
|
+
"array",
|
|
8297
|
+
"object"
|
|
8298
|
+
],
|
|
8299
|
+
"description": "The field's current value, when it has one."
|
|
8300
|
+
}
|
|
8301
|
+
}
|
|
8302
|
+
},
|
|
8303
|
+
"FindingFix": {
|
|
8304
|
+
"type": "object",
|
|
8305
|
+
"description": "A suggested repair. Core never applies it: the host shows it and applies it through its own undoable edit path. A `patch` fix carries JSON Patch operations; a `focus` fix only names the field the author has to fill in.",
|
|
8306
|
+
"required": [
|
|
8307
|
+
"title"
|
|
8308
|
+
],
|
|
8309
|
+
"additionalProperties": false,
|
|
8310
|
+
"properties": {
|
|
8311
|
+
"title": {
|
|
8312
|
+
"type": "string",
|
|
8313
|
+
"minLength": 1,
|
|
8314
|
+
"description": "What applying the fix does, in a few words."
|
|
8315
|
+
},
|
|
8316
|
+
"id": {
|
|
8317
|
+
"type": "string",
|
|
8318
|
+
"description": "Stable id within one finding, such as `focus-alt` or `use-readable-color`."
|
|
8319
|
+
},
|
|
8320
|
+
"kind": {
|
|
8321
|
+
"type": "string",
|
|
8322
|
+
"enum": [
|
|
8323
|
+
"patch",
|
|
8324
|
+
"focus"
|
|
8325
|
+
],
|
|
8326
|
+
"default": "patch",
|
|
8327
|
+
"description": "`patch` fixes carry `patch`; `focus` fixes carry `focus`."
|
|
8328
|
+
},
|
|
8329
|
+
"safe": {
|
|
8330
|
+
"type": "boolean",
|
|
8331
|
+
"description": "True when applying the fix cannot change what the content says or how it looks beyond the repair, such as switching a failing colour to the one the theme chose. False fixes need a deliberate choice."
|
|
8332
|
+
},
|
|
8333
|
+
"patch": {
|
|
8334
|
+
"type": "array",
|
|
8335
|
+
"description": "RFC 6902 JSON Patch operations that apply the fix to the checked presentation.",
|
|
8336
|
+
"items": {
|
|
8337
|
+
"$ref": "#/$defs/JsonPatchOperation"
|
|
8338
|
+
}
|
|
8339
|
+
},
|
|
8340
|
+
"focus": {
|
|
8341
|
+
"$ref": "#/$defs/FindingFocus"
|
|
8342
|
+
}
|
|
8343
|
+
}
|
|
8344
|
+
},
|
|
8345
|
+
"FindingSuggestion": {
|
|
8346
|
+
"type": "object",
|
|
8347
|
+
"description": "A value the author could use instead, such as a catalog record that exists. Suggestions name records actually present in the checked context and never replace authored values silently.",
|
|
8348
|
+
"required": [
|
|
8349
|
+
"value",
|
|
8350
|
+
"label",
|
|
8351
|
+
"origin"
|
|
8352
|
+
],
|
|
8353
|
+
"additionalProperties": false,
|
|
8354
|
+
"properties": {
|
|
8355
|
+
"value": {
|
|
8356
|
+
"type": [
|
|
8357
|
+
"string",
|
|
8358
|
+
"number",
|
|
8359
|
+
"boolean",
|
|
8360
|
+
"null"
|
|
8361
|
+
]
|
|
8362
|
+
},
|
|
8363
|
+
"label": {
|
|
8364
|
+
"type": "string"
|
|
8365
|
+
},
|
|
8366
|
+
"origin": {
|
|
8367
|
+
"type": "string",
|
|
8368
|
+
"description": "Where the suggestion comes from: `schema`, `built-in`, `loaded`, `document` or `contract`."
|
|
8369
|
+
},
|
|
8370
|
+
"definition": {
|
|
8371
|
+
"type": "string",
|
|
8372
|
+
"description": "Where the suggested record or constraint is defined."
|
|
8373
|
+
}
|
|
8374
|
+
}
|
|
8375
|
+
},
|
|
8376
|
+
"ValidationIssue": {
|
|
8377
|
+
"type": "object",
|
|
8378
|
+
"description": "The raw schema or semantic issue behind a finding, kept with every union alternative so a host can inspect the exact constraint.",
|
|
8379
|
+
"required": [
|
|
8380
|
+
"path",
|
|
8381
|
+
"message",
|
|
8382
|
+
"keyword",
|
|
8383
|
+
"schemaPath",
|
|
8384
|
+
"params"
|
|
8385
|
+
],
|
|
8386
|
+
"additionalProperties": false,
|
|
8387
|
+
"properties": {
|
|
8388
|
+
"path": {
|
|
8389
|
+
"type": "string"
|
|
8390
|
+
},
|
|
8391
|
+
"message": {
|
|
8392
|
+
"type": "string"
|
|
8393
|
+
},
|
|
8394
|
+
"keyword": {
|
|
8395
|
+
"type": "string",
|
|
8396
|
+
"description": "The JSON Schema keyword that failed, or `opf` for a rule the schema cannot express."
|
|
8397
|
+
},
|
|
8398
|
+
"schemaPath": {
|
|
8399
|
+
"type": "string"
|
|
8400
|
+
},
|
|
8401
|
+
"params": {
|
|
8402
|
+
"type": "object",
|
|
8403
|
+
"additionalProperties": true
|
|
8404
|
+
}
|
|
8405
|
+
}
|
|
8406
|
+
},
|
|
8407
|
+
"Finding": {
|
|
8408
|
+
"type": "object",
|
|
8409
|
+
"description": "One thing a checker found at one place in a presentation.",
|
|
8410
|
+
"required": [
|
|
8411
|
+
"ruleId",
|
|
8412
|
+
"severity",
|
|
8413
|
+
"category",
|
|
8414
|
+
"path",
|
|
8415
|
+
"message"
|
|
8416
|
+
],
|
|
8417
|
+
"additionalProperties": false,
|
|
8418
|
+
"properties": {
|
|
8419
|
+
"ruleId": {
|
|
8420
|
+
"type": "string",
|
|
8421
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*/[A-Za-z0-9][A-Za-z0-9._-]*$",
|
|
8422
|
+
"description": "Stable `<producer>/<rule>` id, such as `opf/text-contrast` for core or `pptx.dev/narrative-gap` for a hosted reviewer. Ids do not change between releases."
|
|
8423
|
+
},
|
|
8424
|
+
"source": {
|
|
8425
|
+
"type": "string",
|
|
8426
|
+
"description": "The producer: `opf` (the default) for core, or the name of another tool such as `pptx.dev/review`."
|
|
8427
|
+
},
|
|
8428
|
+
"severity": {
|
|
8429
|
+
"$ref": "#/$defs/FindingSeverity"
|
|
8430
|
+
},
|
|
8431
|
+
"category": {
|
|
8432
|
+
"$ref": "#/$defs/FindingCategory"
|
|
8433
|
+
},
|
|
8434
|
+
"path": {
|
|
8435
|
+
"type": "string",
|
|
8436
|
+
"description": "JSON Pointer to the value the finding is about, such as `/slides/4/title`. Empty for the whole document, or for a value in a supplied context such as a loaded catalog."
|
|
8437
|
+
},
|
|
8438
|
+
"scope": {
|
|
8439
|
+
"type": "string",
|
|
8440
|
+
"enum": [
|
|
8441
|
+
"document",
|
|
8442
|
+
"context"
|
|
8443
|
+
],
|
|
8444
|
+
"description": "`document` (the default) when `path` points into the checked presentation, `context` when it points into host-supplied context such as loaded catalog records."
|
|
8445
|
+
},
|
|
8446
|
+
"message": {
|
|
8447
|
+
"type": "string",
|
|
8448
|
+
"minLength": 1,
|
|
8449
|
+
"description": "What is wrong, in a sentence."
|
|
8450
|
+
},
|
|
8451
|
+
"help": {
|
|
8452
|
+
"type": "string",
|
|
8453
|
+
"description": "What to do about it."
|
|
8454
|
+
},
|
|
8455
|
+
"slide": {
|
|
8456
|
+
"type": "integer",
|
|
8457
|
+
"minimum": 0,
|
|
8458
|
+
"description": "Zero-based index of the slide the finding belongs to."
|
|
8459
|
+
},
|
|
8460
|
+
"slideId": {
|
|
8461
|
+
"type": "string",
|
|
8462
|
+
"description": "The id of that slide, when it has one."
|
|
8463
|
+
},
|
|
8464
|
+
"location": {
|
|
8465
|
+
"$ref": "#/$defs/FindingLocation"
|
|
8466
|
+
},
|
|
8467
|
+
"definition": {
|
|
8468
|
+
"type": "string",
|
|
8469
|
+
"description": "A link to the rule's documentation or to the schema constraint or catalog record the finding is about."
|
|
8470
|
+
},
|
|
8471
|
+
"lookup": {
|
|
8472
|
+
"type": "array",
|
|
8473
|
+
"items": {
|
|
8474
|
+
"type": "string"
|
|
8475
|
+
},
|
|
8476
|
+
"description": "Arguments for the `opf schema` or `opf catalog` command that shows the definition, as an argument list rather than a shell string."
|
|
8477
|
+
},
|
|
8478
|
+
"suggestions": {
|
|
8479
|
+
"type": "array",
|
|
8480
|
+
"items": {
|
|
8481
|
+
"$ref": "#/$defs/FindingSuggestion"
|
|
8482
|
+
}
|
|
8483
|
+
},
|
|
8484
|
+
"measured": {
|
|
8485
|
+
"type": "object",
|
|
8486
|
+
"description": 'The numbers behind the finding, such as `{ "ratio": 2.1, "needed": 4.5 }`.',
|
|
8487
|
+
"additionalProperties": {
|
|
8488
|
+
"type": [
|
|
8489
|
+
"number",
|
|
8490
|
+
"string",
|
|
8491
|
+
"boolean",
|
|
8492
|
+
"null"
|
|
8493
|
+
]
|
|
8494
|
+
}
|
|
8495
|
+
},
|
|
8496
|
+
"fixes": {
|
|
8497
|
+
"type": "array",
|
|
8498
|
+
"items": {
|
|
8499
|
+
"$ref": "#/$defs/FindingFix"
|
|
8500
|
+
}
|
|
8501
|
+
},
|
|
8502
|
+
"validation": {
|
|
8503
|
+
"$ref": "#/$defs/ValidationIssue"
|
|
8504
|
+
}
|
|
8505
|
+
}
|
|
8506
|
+
}
|
|
8507
|
+
}
|
|
8508
|
+
};
|
|
8518
8509
|
var schemas = {
|
|
8519
8510
|
presentation,
|
|
8520
8511
|
audience,
|
|
@@ -8527,7 +8518,8 @@ var schemas = {
|
|
|
8527
8518
|
socialPlatform,
|
|
8528
8519
|
language,
|
|
8529
8520
|
colorScheme,
|
|
8530
|
-
fontScheme
|
|
8521
|
+
fontScheme,
|
|
8522
|
+
finding
|
|
8531
8523
|
};
|
|
8532
8524
|
var schemaNames = [
|
|
8533
8525
|
"presentation",
|
|
@@ -8541,7 +8533,8 @@ var schemaNames = [
|
|
|
8541
8533
|
"socialPlatform",
|
|
8542
8534
|
"language",
|
|
8543
8535
|
"colorScheme",
|
|
8544
|
-
"fontScheme"
|
|
8536
|
+
"fontScheme",
|
|
8537
|
+
"finding"
|
|
8545
8538
|
];
|
|
8546
8539
|
var schemaEntries = [
|
|
8547
8540
|
{ name: "presentation", file: "schemas/opf.schema.json", schema: presentation },
|
|
@@ -8555,7 +8548,8 @@ var schemaEntries = [
|
|
|
8555
8548
|
{ name: "socialPlatform", file: "schemas/social-platform.schema.json", schema: socialPlatform },
|
|
8556
8549
|
{ name: "language", file: "schemas/language.schema.json", schema: language },
|
|
8557
8550
|
{ name: "colorScheme", file: "schemas/color-scheme.schema.json", schema: colorScheme },
|
|
8558
|
-
{ name: "fontScheme", file: "schemas/font-scheme.schema.json", schema: fontScheme }
|
|
8551
|
+
{ name: "fontScheme", file: "schemas/font-scheme.schema.json", schema: fontScheme },
|
|
8552
|
+
{ name: "finding", file: "schemas/finding.schema.json", schema: finding }
|
|
8559
8553
|
];
|
|
8560
8554
|
|
|
8561
8555
|
export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone };
|