@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './chart-data-
|
|
1
|
+
import './chart-data-B_3z9VTb.js';
|
|
2
2
|
|
|
3
3
|
/** Canonical table grid. No renderer, fonts, DOM or network dependencies. */
|
|
4
4
|
interface TableBorder {
|
|
@@ -43,6 +43,110 @@ declare function tableGrid(value: unknown, path?: string): TableGrid;
|
|
|
43
43
|
/** Row boundaries that preserve every vertical merge, used by pagination. */
|
|
44
44
|
declare function tableRowBoundaries(value: unknown): number[];
|
|
45
45
|
|
|
46
|
+
/** The `design` keys that a layout record, the deck and a slide all share and that composition resolves per key. */
|
|
47
|
+
declare const DESIGN_HINT_KEYS: readonly ["titleAlignment", "contentAlignment", "contentBox", "contentDirection", "chartPrimary", "imageFill", "listBullet"];
|
|
48
|
+
type DesignHintKey = typeof DESIGN_HINT_KEYS[number];
|
|
49
|
+
/** Where an effective design hint came from: the slide's own `design`, the deck's `design`, or the slide's layout record. */
|
|
50
|
+
type DesignHintSource = 'slide' | 'deck' | 'layout';
|
|
51
|
+
/** The effective value of every shared design key. A key nobody sets is absent, so the engine default applies. */
|
|
52
|
+
interface DesignHints {
|
|
53
|
+
titleAlignment?: 'left' | 'center' | 'right';
|
|
54
|
+
contentAlignment?: 'left' | 'center' | 'right';
|
|
55
|
+
contentBox?: boolean;
|
|
56
|
+
contentDirection?: 'horizontal' | 'vertical';
|
|
57
|
+
chartPrimary?: 'none' | 'top' | 'bottom' | 'left' | 'right';
|
|
58
|
+
imageFill?: 'crop' | 'fit';
|
|
59
|
+
listBullet?: 'character' | 'image';
|
|
60
|
+
}
|
|
61
|
+
/** The effective hints plus which level supplied each key and the document path that names it. */
|
|
62
|
+
interface ResolvedDesignHints extends DesignHints {
|
|
63
|
+
/** The level that supplied each key that is set. */
|
|
64
|
+
sources: {
|
|
65
|
+
[K in DesignHintKey]?: DesignHintSource;
|
|
66
|
+
};
|
|
67
|
+
/** Path of the supplying value: `slides.N.design.key`, `design.key`, or for a layout `slides.N.layout` (the reference that selected the record). */
|
|
68
|
+
paths: {
|
|
69
|
+
[K in DesignHintKey]?: string;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
interface ResolveDesignHintsOptions {
|
|
73
|
+
/** The slide, for its own `design`. */
|
|
74
|
+
slide?: unknown;
|
|
75
|
+
/** The slide's resolved layout record, for its `design`. */
|
|
76
|
+
layout?: unknown;
|
|
77
|
+
/** The document, for the deck's `design`. */
|
|
78
|
+
presentation?: unknown;
|
|
79
|
+
/** Index used in the reported paths; defaults to 0. */
|
|
80
|
+
slideIndex?: number;
|
|
81
|
+
/** Host-resolved deck-level values. They rank with the deck's `design`, above it, and below the slide's. */
|
|
82
|
+
deck?: DesignHints;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Resolves the shared design keys with one merge, per key, the slide winning: the slide's `design`, then the
|
|
86
|
+
* deck's `design` (or the host's `deck` values), then the resolved layout record's `design`. A key none of them
|
|
87
|
+
* sets stays absent. A value the schema does not allow for its key is skipped, so the next level answers. Composition, the renderer, the PPTX exporter and the audit all take their values from here
|
|
88
|
+
* (`SlideComposition.design`), so they cannot disagree.
|
|
89
|
+
*/
|
|
90
|
+
declare function resolveDesignHints(options?: ResolveDesignHintsOptions): ResolvedDesignHints;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Metric trend mark (RR-07, FA-06): the arrow and colour that show `metric.trend` and
|
|
94
|
+
* `metric.sentiment` in the SVG preview and the PPTX export. Core's metric layout places the trend word (up, down, flat) as ordinary
|
|
95
|
+
* text; this derives, from that accepted line geometry, one arrow beside it so both engines draw
|
|
96
|
+
* the same shape in the same place and colour. The word stays the text alternative: the arrow
|
|
97
|
+
* adds a visual cue and an `ariaLabel`, never rewritten source text. The arrow always points the
|
|
98
|
+
* way the trend does; its colour (and the trend and delta text colour) follows the sentiment, which
|
|
99
|
+
* defaults to the conventional reading of the trend (up positive, down negative, flat neutral).
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
type MetricTrend = 'up' | 'down' | 'flat';
|
|
103
|
+
/** Whether a change is good news: the colour of the trend mark. */
|
|
104
|
+
type MetricSentiment = 'positive' | 'negative' | 'neutral';
|
|
105
|
+
/** The DrawingML preset geometry that draws each trend (`a:prstGeom prst`). */
|
|
106
|
+
declare const METRIC_TREND_SHAPES: Readonly<Record<MetricTrend, 'upArrow' | 'downArrow' | 'rightArrow'>>;
|
|
107
|
+
declare const METRIC_TREND_MIN_CONTRAST = 4.5;
|
|
108
|
+
interface MetricTrendColorOptions {
|
|
109
|
+
/** The slide background the metric text sits on. */
|
|
110
|
+
background: string;
|
|
111
|
+
/** Neutral colour for a neutral sentiment (the deck's muted text). */
|
|
112
|
+
neutral?: string;
|
|
113
|
+
/** Whether the change is good news; absent, the trend's default (up positive, down negative, flat neutral). */
|
|
114
|
+
sentiment?: MetricSentiment;
|
|
115
|
+
}
|
|
116
|
+
/** The colour of a trend (or, with `options.sentiment`, of its sentiment), kept at >= 4.5:1 against the slide background. */
|
|
117
|
+
declare function metricTrendColor(trend: MetricTrend, options: MetricTrendColorOptions): string;
|
|
118
|
+
interface MetricTrendMark {
|
|
119
|
+
trend: MetricTrend;
|
|
120
|
+
/** The sentiment the colour follows: the metric's own, else the default for the trend. */
|
|
121
|
+
sentiment: MetricSentiment;
|
|
122
|
+
/** DrawingML preset name for native export. */
|
|
123
|
+
shape: 'upArrow' | 'downArrow' | 'rightArrow';
|
|
124
|
+
/** Arrow bounding box in layout pixels (96 per inch). */
|
|
125
|
+
box: {
|
|
126
|
+
x: number;
|
|
127
|
+
y: number;
|
|
128
|
+
width: number;
|
|
129
|
+
height: number;
|
|
130
|
+
};
|
|
131
|
+
/** The arrow outline as polygon points in layout pixels: the preset geometry at default adjustments. */
|
|
132
|
+
points: [number, number][];
|
|
133
|
+
color: string;
|
|
134
|
+
/** Text alternative for the arrow. */
|
|
135
|
+
ariaLabel: string;
|
|
136
|
+
/** Path of the trend field the mark belongs to. */
|
|
137
|
+
path: string;
|
|
138
|
+
}
|
|
139
|
+
/** Outline of the DrawingML upArrow, downArrow or rightArrow preset (adj1 = adj2 = 50000) in `box`. */
|
|
140
|
+
declare function metricTrendPoints(shape: MetricTrendMark['shape'], box: MetricTrendMark['box']): [number, number][];
|
|
141
|
+
/**
|
|
142
|
+
* The arrow for a laid-out metric, or undefined when the metric has no (visible) trend or the
|
|
143
|
+
* arrow has no room. It is square, as tall as the trend word's capitals, on the baseline, and
|
|
144
|
+
* sits after the word for left-aligned metrics and before it for centred or right-aligned ones,
|
|
145
|
+
* so it grows away from the alignment edge. It never leaves the trend field's box. The colour
|
|
146
|
+
* follows `options.sentiment`, else the layout's own (`metric.sentiment`), else the trend's default.
|
|
147
|
+
*/
|
|
148
|
+
declare function metricTrendMark(layout: MetricLayout, options: MetricTrendColorOptions): MetricTrendMark | undefined;
|
|
149
|
+
|
|
46
150
|
/** A positioned thing whose reading position is wanted. */
|
|
47
151
|
interface ReadingBox {
|
|
48
152
|
box: {
|
|
@@ -62,7 +166,7 @@ interface ReadingBox {
|
|
|
62
166
|
* The boxes are read as given: pass them in logical (unmirrored) coordinates and the order is the reading
|
|
63
167
|
* order of both a left-to-right and a right-to-left deck, because mirroring a deck moves where an item is
|
|
64
168
|
* drawn and where a line starts together. For boxes that are already mirrored, pass `direction: 'rtl'` to
|
|
65
|
-
* order each row from right to left. composeSlide uses this for promoted regions and `opf
|
|
169
|
+
* order each row from right to left. composeSlide uses this for promoted regions and `opf/reading-order` uses it to
|
|
66
170
|
* check the composed order, so the two cannot drift apart.
|
|
67
171
|
*/
|
|
68
172
|
declare function visualReadingOrder<T extends ReadingBox>(items: readonly T[], direction?: 'ltr' | 'rtl'): T[];
|
|
@@ -218,7 +322,7 @@ declare function formatSlideNumber(format: string, current: number, total: numbe
|
|
|
218
322
|
|
|
219
323
|
/** Normalize a literal hex color to uppercase #RRGGBB. */
|
|
220
324
|
declare function normalizeHexColor(value: unknown): string | undefined;
|
|
221
|
-
type ResolveColorRefRoles = Partial<Record<'primary' | 'secondary' | 'accent' | 'background' | 'surface' | 'text' | 'textSecondary', string>>;
|
|
325
|
+
type ResolveColorRefRoles = Partial<Record<'primary' | 'secondary' | 'accent' | 'background' | 'surface' | 'surfaceAlt' | 'text' | 'textSecondary', string>>;
|
|
222
326
|
interface ResolveColorRefOptions {
|
|
223
327
|
/** Effective color scheme after design resolution (OOXML slots plus optional role hex overrides). */
|
|
224
328
|
colorScheme: Record<string, unknown>;
|
|
@@ -231,6 +335,52 @@ interface ResolveColorRefOptions {
|
|
|
231
335
|
}
|
|
232
336
|
/** Resolve a ColorRef or TextRun.color string to a literal hex color. */
|
|
233
337
|
declare function resolveColorRef(reference: string, options: ResolveColorRefOptions): string;
|
|
338
|
+
/** WCAG relative luminance below which a slide background counts as dark (the point where white and black text contrast equally). */
|
|
339
|
+
declare const DARK_BACKGROUND_LUMINANCE = 0.179;
|
|
340
|
+
/** True when text on this color should be light: its relative luminance is under {@link DARK_BACKGROUND_LUMINANCE}. An unreadable color is not dark. */
|
|
341
|
+
declare function isDarkColor(color: unknown): boolean;
|
|
342
|
+
/**
|
|
343
|
+
* The slide background a color scheme implies when the design names no single-color background: the scheme's
|
|
344
|
+
* `background` role override, else its light1 slot, else white. Gradient and picture backgrounds use it too.
|
|
345
|
+
*/
|
|
346
|
+
declare function defaultSlideBackground(colorScheme: Record<string, unknown>): string;
|
|
347
|
+
interface ResolvedColorRoles {
|
|
348
|
+
/** Role override, else accent1. */
|
|
349
|
+
primary: string;
|
|
350
|
+
/** Role override, else accent2. */
|
|
351
|
+
secondary: string;
|
|
352
|
+
/** Role override, else accent3. */
|
|
353
|
+
accent: string;
|
|
354
|
+
/** The slide background: the resolved single-color background of the slide, else {@link defaultSlideBackground}. */
|
|
355
|
+
background: string;
|
|
356
|
+
/** Role override, else dark2 on a dark background and light2 on a light one. */
|
|
357
|
+
surface: string;
|
|
358
|
+
/** The alternate surface of banded table rows: {@link surfaceAltColor} of `surface` and `text`, always distinguishable from `surface`. */
|
|
359
|
+
surfaceAlt: string;
|
|
360
|
+
/** Default text. On a dark background light1. On a light background the `text` role override, else dark1. */
|
|
361
|
+
text: string;
|
|
362
|
+
/** Role override, else light2 on a dark background and dark2 on a light one. */
|
|
363
|
+
textSecondary: string;
|
|
364
|
+
/** The color of a link run that sets no color of its own: the scheme's hyperlink slot (OOXML hlink), unless that has under 4.5:1 contrast against the slide background, then the slide `text` color. */
|
|
365
|
+
hyperlink: string;
|
|
366
|
+
/** Followed-hyperlink slot (OOXML folHlink). */
|
|
367
|
+
followedHyperlink: string;
|
|
368
|
+
/** Whether the slide background is dark; text, surface and textSecondary defaults follow it. */
|
|
369
|
+
dark: boolean;
|
|
370
|
+
}
|
|
371
|
+
interface ResolveColorRolesOptions {
|
|
372
|
+
/** The slide's resolved single-color background (solid, theme-slot or pattern background color). Omit for a gradient, picture or no background. */
|
|
373
|
+
background?: string | null;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Resolve a color scheme's abstract roles for one slide: the single definition the opf-render preview, the
|
|
377
|
+
* PPTX export and the audit share, so the same deck draws the same colors in all three. Role overrides on the
|
|
378
|
+
* scheme (`primary`, `secondary`, `accent`, `background`, `surface`, `text`, `textSecondary`) win over the slots they
|
|
379
|
+
* default to. The background-dependent roles follow {@link isDarkColor} of the slide background; a `text`
|
|
380
|
+
* override applies only on a light background, so a dark slide always gets readable light1 text.
|
|
381
|
+
* Values are uppercase #RRGGBB, or #RRGGBBAA where the scheme color carries an alpha byte.
|
|
382
|
+
*/
|
|
383
|
+
declare function resolveColorRoles(colorScheme: Record<string, unknown>, options?: ResolveColorRolesOptions): ResolvedColorRoles;
|
|
234
384
|
declare function colorContrast(foreground: string, background: string): number | undefined;
|
|
235
385
|
/** Keep an inherited text color at >=4.5:1; otherwise select black or white.
|
|
236
386
|
* Callers must preserve explicit text-color overrides before using this fallback.
|
|
@@ -274,12 +424,424 @@ declare const CHART_SERIES_MIN_DIFFERENCE = 12;
|
|
|
274
424
|
* and preview and export (which both call this function) draw the same ones.
|
|
275
425
|
*/
|
|
276
426
|
declare function chartPaletteForFill(fill: string, palette: readonly string[]): string[];
|
|
427
|
+
/** Share of the text colour mixed into the surface to make the muted colour of a highlighted chart. */
|
|
428
|
+
declare const CHART_HIGHLIGHT_MUTED_MIX = 0.3;
|
|
429
|
+
/** Smallest contrast the muted colour keeps against the surface: recessive, but still a visible mark. */
|
|
430
|
+
declare const CHART_HIGHLIGHT_MUTED_MIN_CONTRAST = 1.6;
|
|
431
|
+
/**
|
|
432
|
+
* The two colours of a chart that highlights marks (`chart.highlight`), derived from the theme only: `accent` for the highlighted
|
|
433
|
+
* marks, `muted` for every other mark.
|
|
434
|
+
*
|
|
435
|
+
* - `accent` is the deck's primary colour, kept at >= 3:1 against the surface by `chartColorForFill` (a primary that already has
|
|
436
|
+
* that contrast is returned unchanged).
|
|
437
|
+
* - `muted` is the surface mixed {@link CHART_HIGHLIGHT_MUTED_MIX} of the way towards the text colour: a light grey on a light surface
|
|
438
|
+
* and a dim grey on a dark one, in the surface's own hue. When that falls below {@link CHART_HIGHLIGHT_MUTED_MIN_CONTRAST} against
|
|
439
|
+
* the surface (a surface and text that are close together) the mix moves towards the text colour until it holds.
|
|
440
|
+
*
|
|
441
|
+
* Pure arithmetic on opaque colours: the preview and the PPTX export both call it with the chart panel, the primary and the label
|
|
442
|
+
* colour, so they draw and write the same two colours. An unresolved colour is replaced by white (surface), the surface's own
|
|
443
|
+
* best contrast partner (text) or black (primary).
|
|
444
|
+
*/
|
|
445
|
+
declare function chartHighlightColors(surface: string, primary: string, text: string): {
|
|
446
|
+
accent: string;
|
|
447
|
+
muted: string;
|
|
448
|
+
};
|
|
449
|
+
/** Share of the text colour mixed into the surface for the `surfaceAlt` role. */
|
|
450
|
+
declare const SURFACE_ALT_MIX = 0.1;
|
|
451
|
+
/** Smallest contrast `surfaceAlt` keeps against `surface`, so a band is visible next to a plain row. */
|
|
452
|
+
declare const SURFACE_ALT_MIN_CONTRAST = 1.1;
|
|
453
|
+
/**
|
|
454
|
+
* The `surfaceAlt` colour role: the fill of the banded rows of a table whose other body rows take `surface`. It is the surface
|
|
455
|
+
* mixed {@link SURFACE_ALT_MIX} of the way towards the text colour (a slightly darker band on a light table, a slightly lighter one
|
|
456
|
+
* on a dark table), moved further until it differs from the surface by {@link SURFACE_ALT_MIN_CONTRAST}, while the text keeps
|
|
457
|
+
* 4.5:1 on it. When mixing towards the text cannot keep both (a surface and text that are close together), the band moves the
|
|
458
|
+
* other way, away from the text, which only raises the text contrast. Pure arithmetic on opaque colours, so the preview and
|
|
459
|
+
* the PPTX export, which both resolve the `surfaceAlt` ColorRef from their own `surface` and `text` roles, draw and write the
|
|
460
|
+
* same colour. An unresolved surface is white; an unresolved text colour is the surface's best contrast partner.
|
|
461
|
+
*/
|
|
462
|
+
declare function surfaceAltColor(surface: string, text: string): string;
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Language/script font model (font-fidelity-everywhere FF-18).
|
|
466
|
+
*
|
|
467
|
+
* Resolves, for a presentation's language and effective font scheme, the font
|
|
468
|
+
* family for each OOXML script slot (`a:latin`, `a:ea`, `a:cs`) of the major
|
|
469
|
+
* (heading) and minor (body) theme fonts, plus the language tags and base
|
|
470
|
+
* direction. Pure: no DOM, fonts, network or mutation. Catalog references
|
|
471
|
+
* resolve against inline `catalogs.<kind>.records[]` first and the bundled
|
|
472
|
+
* catalogs second; a custom `source` is not fetched.
|
|
473
|
+
*
|
|
474
|
+
* Catalog ids and catalog tags resolve deterministically from vendored tables.
|
|
475
|
+
* Only a tag that matches no catalog record may consult the runtime's ICU
|
|
476
|
+
* likely subtags (`Intl.Locale#maximize`) to find its script.
|
|
477
|
+
*
|
|
478
|
+
* Design: docs/programs/font-fidelity-everywhere/script-font-model.md.
|
|
479
|
+
*/
|
|
480
|
+
/** OOXML script slot a writing system uses: `a:latin`, `a:ea` or `a:cs`. */
|
|
481
|
+
type ScriptRole = "latin" | "eastAsian" | "complexScript";
|
|
482
|
+
/** FontScheme.languageFamily as written: the short OOXML names and the long slot names are one value. */
|
|
483
|
+
type LanguageFamilyName = "latin" | "ea" | "cs" | "eastAsian" | "complexScript";
|
|
484
|
+
/**
|
|
485
|
+
* Read a FontScheme `languageFamily` as one of three values. `eastAsian` is `ea` and `complexScript` is
|
|
486
|
+
* `cs`; anything that is not one of the five names returns undefined.
|
|
487
|
+
*/
|
|
488
|
+
declare function normalizeLanguageFamily(value: unknown): "latin" | "ea" | "cs" | undefined;
|
|
489
|
+
/** Target application whose language font-scheme defaults apply. */
|
|
490
|
+
type ScriptFontApp = "powerpoint" | "google-slides";
|
|
491
|
+
/** Font family per OOXML script slot for one theme font (major or minor). */
|
|
492
|
+
interface ScriptFontSlots {
|
|
493
|
+
latin: string;
|
|
494
|
+
eastAsian: string;
|
|
495
|
+
complexScript: string;
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Where a resolved eastAsian/complexScript family came from:
|
|
499
|
+
* - `fontScheme`: an explicit `eastAsian`/`complexScript` slot on the effective design font scheme.
|
|
500
|
+
* - `schemeFamily`: the design font scheme's own major/minor, because its `languageFamily` names this
|
|
501
|
+
* slot and its `languages` list is empty or names the presentation language.
|
|
502
|
+
* - `language`: the presentation language's font scheme (`fontScheme`, or `googleFontScheme` for Google Slides).
|
|
503
|
+
* - `latin`: no script-specific choice exists, so the slot repeats the latin family.
|
|
504
|
+
*/
|
|
505
|
+
type ScriptFontSource = "fontScheme" | "schemeFamily" | "language" | "latin";
|
|
506
|
+
/** A per-script supplemental theme font, as in OOXML `<a:font script="Jpan" typeface="..."/>`. */
|
|
507
|
+
interface ScriptFontSupplement {
|
|
508
|
+
/** OOXML theme script tag (ISO 15924, except Korean uses `Hang`). */
|
|
509
|
+
script: string;
|
|
510
|
+
heading: string;
|
|
511
|
+
body: string;
|
|
512
|
+
}
|
|
513
|
+
interface ResolveScriptFontsOptions {
|
|
514
|
+
/** Which language font-scheme default applies. Defaults to `powerpoint` (`language.fontScheme`); `google-slides` prefers `language.googleFontScheme`. */
|
|
515
|
+
app?: ScriptFontApp;
|
|
516
|
+
/** Merge `slides[slideIndex].design` over the deck design, per field, before resolving the font scheme. */
|
|
517
|
+
slideIndex?: number;
|
|
518
|
+
/** Language reference to resolve instead of the document's `language` (catalog id, BCP-47 tag or Language object). */
|
|
519
|
+
language?: unknown;
|
|
520
|
+
/** Language tag used when neither the document nor `options.language` names a resolvable language. Defaults to `en-US`. */
|
|
521
|
+
defaultLanguage?: string;
|
|
522
|
+
}
|
|
523
|
+
interface ResolvedScriptFonts extends ScriptFontSlots {
|
|
524
|
+
/**
|
|
525
|
+
* Tag for OOXML `a:rPr/@lang` (and `a:endParaRPr/@lang`): an authored tag that carries a region,
|
|
526
|
+
* else the language record's curated `ooxmlLang`, else the canonical BCP-47 tag.
|
|
527
|
+
*/
|
|
528
|
+
lang: string;
|
|
529
|
+
/** Canonically cased BCP-47 tag for HTML/SVG `lang`: the authored tag, else the record's `bcp47`. */
|
|
530
|
+
bcp47: string;
|
|
531
|
+
/** Matched languages catalog record id, when one matched. */
|
|
532
|
+
languageId?: string;
|
|
533
|
+
/** `default` when the tag came from `defaultLanguage` because no language resolved. */
|
|
534
|
+
languageSource: "document" | "option" | "default";
|
|
535
|
+
/** ISO 15924 script (`Zzzz` when it cannot be determined). */
|
|
536
|
+
script: string;
|
|
537
|
+
/** Script slot the language's own text uses. */
|
|
538
|
+
scriptRole: ScriptRole;
|
|
539
|
+
direction: "ltr" | "rtl";
|
|
540
|
+
rtl: boolean;
|
|
541
|
+
/** Major (heading) theme font slots. */
|
|
542
|
+
heading: ScriptFontSlots;
|
|
543
|
+
/** Minor (body) theme font slots. The top-level latin/eastAsian/complexScript repeat these. */
|
|
544
|
+
body: ScriptFontSlots;
|
|
545
|
+
/**
|
|
546
|
+
* Supplemental theme font for the language's script. Present only when an explicit slot, the
|
|
547
|
+
* design scheme's own script family or the language's font scheme supplies one; absent for
|
|
548
|
+
* Latin, Cyrillic, Greek and for scripts with no script font. For Armenian, Georgian and
|
|
549
|
+
* Ethiopic (latin slot) an explicit `complexScript` slot or a design `cs` scheme that serves the
|
|
550
|
+
* language replaces the language's own font scheme.
|
|
551
|
+
*/
|
|
552
|
+
supplement?: ScriptFontSupplement;
|
|
553
|
+
sources: {
|
|
554
|
+
eastAsian: ScriptFontSource;
|
|
555
|
+
complexScript: ScriptFontSource;
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/** The OOXML script slot for an ISO 15924 script code. Unknown scripts use the latin slot. */
|
|
560
|
+
declare function scriptFontRole(script: string): ScriptRole;
|
|
561
|
+
/**
|
|
562
|
+
* Resolve the per-script theme fonts, language tags and direction for a
|
|
563
|
+
* presentation (or a `{ design, language, catalogs }` subset of one).
|
|
564
|
+
*
|
|
565
|
+
* The latin slot follows the effective design font scheme exactly as
|
|
566
|
+
* `resolveFontFamilies` does; when nothing names a font scheme it falls back to
|
|
567
|
+
* the shared `DEFAULT_FONT_SCHEME`. Each of the eastAsian and complexScript slots
|
|
568
|
+
* takes, in order: the design font scheme's explicit slot; the scheme's own
|
|
569
|
+
* families when its `languageFamily` names the slot and its `languages` list
|
|
570
|
+
* is empty or names the language; the language's font scheme when the
|
|
571
|
+
* language's script uses the slot; otherwise the latin family.
|
|
572
|
+
*/
|
|
573
|
+
declare function resolveScriptFonts(input: unknown, options?: ResolveScriptFontsOptions): ResolvedScriptFonts;
|
|
574
|
+
/**
|
|
575
|
+
* The deck base direction composition lays a slide out in: the direction of the presentation language's script
|
|
576
|
+
* (`rtl` for Arabic, Hebrew and the other right-to-left scripts), `ltr` when the document names no language or
|
|
577
|
+
* the language does not resolve. Layout, preview and export all read this one value (RR-05).
|
|
578
|
+
*/
|
|
579
|
+
declare function resolveSlideDirection(presentation: unknown, slideIndex?: number): "ltr" | "rtl";
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Deterministic syntax highlighting shared by the SVG preview and the PPTX export (RR-07).
|
|
583
|
+
*
|
|
584
|
+
* `tokenizeCode(source, language)` returns coloured token ranges over the exact source
|
|
585
|
+
* string; everything between tokens is plain. `codeSyntaxPalette` derives one colour per
|
|
586
|
+
* token kind from the deck theme and keeps each at WCAG contrast >= 4.5:1 against the code
|
|
587
|
+
* panel. The scanner is a small hand-written one (no dependency, no network, no locale or
|
|
588
|
+
* clock input): it recognises comments, strings, numbers, keywords, definition names, calls,
|
|
589
|
+
* capitalised types and the structure of JSON, YAML, TOML, HTML/XML and CSS. It never edits
|
|
590
|
+
* the text: callers colour ranges of `code.source` and the concatenated runs equal the source.
|
|
591
|
+
* An unknown or missing language yields no tokens (plain text).
|
|
592
|
+
*/
|
|
593
|
+
type CodeTokenKind = 'comment' | 'keyword' | 'string' | 'number' | 'function' | 'type' | 'property';
|
|
594
|
+
interface CodeToken {
|
|
595
|
+
start: number;
|
|
596
|
+
end: number;
|
|
597
|
+
kind: CodeTokenKind;
|
|
598
|
+
}
|
|
599
|
+
/** A slice of one source line: `kind` is absent for plain text. */
|
|
600
|
+
interface CodeRun {
|
|
601
|
+
start: number;
|
|
602
|
+
end: number;
|
|
603
|
+
kind?: CodeTokenKind;
|
|
604
|
+
}
|
|
605
|
+
type CodeSyntaxPalette = Record<CodeTokenKind | 'plain', string>;
|
|
606
|
+
/** Source longer than this is left plain: highlighting must stay bounded. */
|
|
607
|
+
declare const CODE_HIGHLIGHT_MAX_LENGTH = 200000;
|
|
608
|
+
/** Contrast the palette keeps against the code panel. */
|
|
609
|
+
declare const CODE_SYNTAX_MIN_CONTRAST = 4.5;
|
|
610
|
+
/** The code panel colour the preview and the PPTX export both draw. */
|
|
611
|
+
declare const CODE_PANEL_BACKGROUND = "#111827";
|
|
612
|
+
declare const CODE_PANEL_FOREGROUND = "#E5E7EB";
|
|
613
|
+
/** Language ids with a scanner (the keys the aliases resolve to). */
|
|
614
|
+
declare const CODE_HIGHLIGHT_LANGUAGES: readonly string[];
|
|
615
|
+
/** The scanner id for a `code.language` value, or undefined when the language is not highlighted. */
|
|
616
|
+
declare function resolveCodeLanguage(language: unknown): string | undefined;
|
|
617
|
+
/**
|
|
618
|
+
* Token ranges of `source` for a `code.language` value, sorted and non-overlapping. Empty for
|
|
619
|
+
* an unknown language, a missing language, or source longer than CODE_HIGHLIGHT_MAX_LENGTH.
|
|
620
|
+
*/
|
|
621
|
+
declare function tokenizeCode(source: string, language?: unknown): CodeToken[];
|
|
622
|
+
/**
|
|
623
|
+
* The runs of one source line `[start, end)`: consecutive slices that cover the line exactly.
|
|
624
|
+
* A token that crosses the line boundary is clipped, so each native text line can be coloured
|
|
625
|
+
* on its own while concatenating the runs returns the line text unchanged. With `source`, a tab
|
|
626
|
+
* character is always its own plain run, as in the preview where a tab is a measured segment: a
|
|
627
|
+
* token (a multi-line string, say) never colours a tab stop.
|
|
628
|
+
*/
|
|
629
|
+
declare function codeLineRuns(tokens: readonly CodeToken[], start: number, end: number, source?: string): CodeRun[];
|
|
630
|
+
interface CodeSyntaxPaletteOptions {
|
|
631
|
+
background?: string;
|
|
632
|
+
foreground?: string;
|
|
633
|
+
minimumContrast?: number;
|
|
634
|
+
}
|
|
635
|
+
interface CodeSyntaxPaletteTheme {
|
|
636
|
+
primary?: string;
|
|
637
|
+
secondary?: string;
|
|
638
|
+
accent?: string;
|
|
639
|
+
mutedText?: string;
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* One colour per token kind from the deck theme: keyword = primary, string = accent,
|
|
643
|
+
* number = secondary, comment = a fixed slate; function, type and property take fixed hues
|
|
644
|
+
* (blue, cyan, pink) rotated away from any theme colour they would collide with. Every
|
|
645
|
+
* colour is lightened until it keeps `minimumContrast` (4.5:1) against the code panel, so a
|
|
646
|
+
* dark theme colour is raised rather than dropped. Deterministic for a given theme.
|
|
647
|
+
*/
|
|
648
|
+
declare function codeSyntaxPalette(theme?: CodeSyntaxPaletteTheme, options?: CodeSyntaxPaletteOptions): CodeSyntaxPalette;
|
|
649
|
+
/**
|
|
650
|
+
* The palette for a resolved colour scheme record (`primary`, `secondary`, `accent`, or the
|
|
651
|
+
* `accent1` to `accent3` slots they default to). The preview and the PPTX export both call this
|
|
652
|
+
* with the scheme they resolved, so they cannot disagree on the inputs.
|
|
653
|
+
*/
|
|
654
|
+
declare function codeSyntaxPaletteForScheme(scheme: unknown, options?: CodeSyntaxPaletteOptions): CodeSyntaxPalette;
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Timeline event status (FA-11): how a `done`, `current` or `planned` event looks in the SVG
|
|
658
|
+
* preview and in the PPTX export. Core's timeline layout places the markers and the text and
|
|
659
|
+
* records each event's status on them (see `TimelineLayout.markers` and `TimelineTextPart.status`).
|
|
660
|
+
* This derives, from that geometry and the deck's colors, the shapes and text colors to draw, so
|
|
661
|
+
* both engines draw the same marker in the same place and colors.
|
|
662
|
+
*
|
|
663
|
+
* - no status, `done`: a filled marker in the primary color, normal text (today's marker).
|
|
664
|
+
* - `current` ("we are here"): the same filled marker inside a ring, and the label is bold
|
|
665
|
+
* (layout sets the weight, so the measured line breaks already include it).
|
|
666
|
+
* - `planned`: a hollow marker (primary-color outline over the slide background) and muted text.
|
|
667
|
+
*
|
|
668
|
+
* Text colors are kept at 4.5:1 against the slide background, outlines and rings at 3:1.
|
|
669
|
+
*/
|
|
670
|
+
|
|
671
|
+
declare const TIMELINE_STATUSES: readonly ["done", "current", "planned"];
|
|
672
|
+
declare const TIMELINE_TEXT_MIN_CONTRAST = 4.5;
|
|
673
|
+
declare const TIMELINE_OUTLINE_MIN_CONTRAST = 3;
|
|
674
|
+
interface TimelineStatusColors {
|
|
675
|
+
/** The slide background the timeline sits on. */
|
|
676
|
+
background: string;
|
|
677
|
+
/** The marker color (the deck's primary color). */
|
|
678
|
+
primary: string;
|
|
679
|
+
/** The color of normal timeline text. */
|
|
680
|
+
text: string;
|
|
681
|
+
/** The muted color of planned events' text (the deck's secondary text). */
|
|
682
|
+
mutedText: string;
|
|
683
|
+
}
|
|
684
|
+
interface TimelineMarkerShape {
|
|
685
|
+
/** `marker` is the event's dot (or hollow circle), `ring` the circle around a current event's dot. */
|
|
686
|
+
role: 'marker' | 'ring';
|
|
687
|
+
/** DrawingML preset name for native export. */
|
|
688
|
+
shape: 'ellipse';
|
|
689
|
+
cx: number;
|
|
690
|
+
cy: number;
|
|
691
|
+
/** Radius of the drawn ellipse (the marker's `radius`, or the ring's `ring.radius`, 1.6 times it). An outline is centered on the edge, so it reaches half its width beyond. */
|
|
692
|
+
radius: number;
|
|
693
|
+
/** Fill color; undefined means no fill (nothing draws inside the shape). */
|
|
694
|
+
fill?: string;
|
|
695
|
+
/** Outline; undefined means no outline. */
|
|
696
|
+
stroke?: {
|
|
697
|
+
color: string;
|
|
698
|
+
width: number;
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
/** The shapes of one marker from `layout.markers`, back to front: the ring (current only), then the marker. */
|
|
702
|
+
declare function timelineMarkerShapes(marker: TimelineLayout['markers'][number], colors: TimelineStatusColors): TimelineMarkerShape[];
|
|
703
|
+
/** The color of one timeline text part: muted for a planned event, the normal text color otherwise, kept at >= 4.5:1. */
|
|
704
|
+
declare function timelineTextColor(part: Pick<TimelineTextPart, 'status'>, colors: TimelineStatusColors): string;
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* Line emphasis for code blocks (`code.highlight`), shared by the SVG preview, the PPTX export and the
|
|
708
|
+
* validator so they cannot disagree.
|
|
709
|
+
*
|
|
710
|
+
* `code.highlight` lists 1-based source lines: a line number or an inclusive `[start, end]` range.
|
|
711
|
+
* Lines are counted by line break in `code.source`, so a soft-wrapped line is still one line and every
|
|
712
|
+
* displayed line of it takes the same number (`codeLineNumbers`). Engines draw one band behind each
|
|
713
|
+
* run of marked displayed lines (`codeHighlightBands`) and set the unmarked lines in a slightly dimmed
|
|
714
|
+
* colour (`codeHighlightColors`); both colour sets keep WCAG contrast >= 4.5:1 against what they sit on.
|
|
715
|
+
* Everything here is deterministic: no clock, locale or network.
|
|
716
|
+
*/
|
|
717
|
+
|
|
718
|
+
/** One `code.highlight` entry: a line number or an inclusive `[start, end]` range. */
|
|
719
|
+
type CodeHighlightEntry = number | [number, number];
|
|
720
|
+
interface CodeHighlightIssue {
|
|
721
|
+
code: 'code-highlight-out-of-range' | 'code-highlight-range-reversed' | 'code-highlight-invalid';
|
|
722
|
+
/** Index of the entry in `code.highlight`. */
|
|
723
|
+
index: number;
|
|
724
|
+
message: string;
|
|
725
|
+
}
|
|
726
|
+
interface CodeHighlightLines {
|
|
727
|
+
/** Lines in the source (a final empty line after a trailing line break is not counted). */
|
|
728
|
+
lineCount: number;
|
|
729
|
+
/** The marked lines inside the source, ascending and unique. Empty when nothing is marked. */
|
|
730
|
+
lines: number[];
|
|
731
|
+
/** Entries that are ignored: past the last line, written end before start, or not line numbers. */
|
|
732
|
+
issues: CodeHighlightIssue[];
|
|
733
|
+
}
|
|
734
|
+
/** Resolve `code.highlight` against its source: the marked lines, and the entries that are ignored. */
|
|
735
|
+
declare function codeHighlightLines(highlight: unknown, source: string): CodeHighlightLines;
|
|
736
|
+
/** The source line number (from 1) of every displayed line; wrapped lines repeat their line's number. */
|
|
737
|
+
declare function codeLineNumbers(sourceLines: readonly {
|
|
738
|
+
boundary: 'soft' | 'hard' | 'end';
|
|
739
|
+
}[]): number[];
|
|
740
|
+
/** A run of consecutive displayed lines (indexes into `sourceLines`, inclusive) whose source lines are marked. */
|
|
741
|
+
interface CodeHighlightBand {
|
|
742
|
+
first: number;
|
|
743
|
+
last: number;
|
|
744
|
+
}
|
|
745
|
+
/** One band per run of consecutive displayed lines that belong to a marked line. */
|
|
746
|
+
declare function codeHighlightBands(sourceLines: readonly {
|
|
747
|
+
boundary: 'soft' | 'hard' | 'end';
|
|
748
|
+
}[], lines: readonly number[]): CodeHighlightBand[];
|
|
749
|
+
interface CodeHighlightColors {
|
|
750
|
+
/** The band behind marked lines: the panel colour tinted with the theme's primary colour. */
|
|
751
|
+
band: string;
|
|
752
|
+
/** Marked lines: the syntax palette, each colour at least 4.5:1 on `band`. */
|
|
753
|
+
lit: CodeSyntaxPalette;
|
|
754
|
+
/** Unmarked lines: the syntax palette moved toward the panel, never below 4.5:1 on it. */
|
|
755
|
+
dim: CodeSyntaxPalette;
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* The highlight colours for a resolved colour scheme record. The band takes the scheme's `primary`
|
|
759
|
+
* (or `accent1`); the palette is `codeSyntaxPaletteForScheme(scheme)` so highlighted lines keep their syntax
|
|
760
|
+
* colours. Preview and export call this with the scheme they resolved.
|
|
761
|
+
*/
|
|
762
|
+
declare function codeHighlightColors(scheme: unknown, palette?: CodeSyntaxPalette): CodeHighlightColors;
|
|
763
|
+
|
|
764
|
+
/**
|
|
765
|
+
* Geometry of a text watermark (`design.watermark = { text, opacity }`), shared by the SVG preview and the
|
|
766
|
+
* PPTX export so both draw the same stamp.
|
|
767
|
+
*
|
|
768
|
+
* The stamp is one line of text, centered on the slide and rotated 30 degrees counterclockwise (rising to
|
|
769
|
+
* the right), the usual diagonal DRAFT or CONFIDENTIAL mark. It is sized so the line spans at most 70% of the
|
|
770
|
+
* slide width and its height is at most 30% of the shorter slide edge, which keeps the rotated line inside
|
|
771
|
+
* every preset from 9:16 portrait to 16:9 widescreen.
|
|
772
|
+
*/
|
|
773
|
+
|
|
774
|
+
interface WatermarkTextOptions {
|
|
775
|
+
/** The heading family of the design. Defaults to `sans-serif`. */
|
|
776
|
+
fontFamily?: string;
|
|
777
|
+
/** Defaults to 700. */
|
|
778
|
+
fontWeight?: number;
|
|
779
|
+
textMeasurement?: TextMeasurement;
|
|
780
|
+
}
|
|
781
|
+
interface WatermarkTextLayout {
|
|
782
|
+
/** The text as drawn: line breaks become spaces and the ends are trimmed. */
|
|
783
|
+
text: string;
|
|
784
|
+
fontFamily: string;
|
|
785
|
+
fontWeight: number;
|
|
786
|
+
/** The resolved text style (the host's font registry may rename the family). */
|
|
787
|
+
style: TextStyle;
|
|
788
|
+
/** In the unit of the size passed in (reference pixels for a composed slide). */
|
|
789
|
+
fontSize: number;
|
|
790
|
+
/** Measured width of the line at `fontSize`. */
|
|
791
|
+
textWidth: number;
|
|
792
|
+
/** The unrotated text box, centered on the slide; PPTX rotates it about its center. */
|
|
793
|
+
box: {
|
|
794
|
+
x: number;
|
|
795
|
+
y: number;
|
|
796
|
+
width: number;
|
|
797
|
+
height: number;
|
|
798
|
+
};
|
|
799
|
+
/** Rotation about the slide center in degrees, clockwise positive. */
|
|
800
|
+
rotation: number;
|
|
801
|
+
}
|
|
802
|
+
/** Lay out a text watermark on a slide of `size`; undefined when the text is empty. */
|
|
803
|
+
declare function layoutWatermark(text: unknown, size: {
|
|
804
|
+
width: number;
|
|
805
|
+
height: number;
|
|
806
|
+
}, options?: WatermarkTextOptions): WatermarkTextLayout | undefined;
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* DrawingML preset pattern fills (ECMA-376 20.1.10.51 ST_PresetPatternVal) as 8x8 bitmaps,
|
|
810
|
+
* shared by the SVG preview (RR-07) and the PPTX export, which writes the same names as native
|
|
811
|
+
* `a:pattFill prst="..."`.
|
|
812
|
+
*
|
|
813
|
+
* ECMA-376 names the 54 presets but does not define their pixels. These tiles are MEASURED from
|
|
814
|
+
* desktop PowerPoint (Office 365, Windows, 2026-10-01): each preset was exported as a full-slide
|
|
815
|
+
* pattern background (black on white) to a 1280 x 720 PNG and opf-render's
|
|
816
|
+
* `scripts/derive-pattern-bitmaps.mjs` voted every pixel into its (x mod 8, y mod 8) cell; every
|
|
817
|
+
* tile was uniform across all repeats (confidence 1.00) at one image pixel per pattern pixel, so a
|
|
818
|
+
* pattern pixel is one 1/96 inch unit. The tile is anchored at the slide's top-left corner (the
|
|
819
|
+
* phase of the line, grid and diagonal presets matched at no shift). Measured pixel data is
|
|
820
|
+
* committed as data; no third-party table was used. A tile is one row per line, '#' = foreground,
|
|
821
|
+
* '.' = background, top to bottom, left to right.
|
|
822
|
+
*/
|
|
823
|
+
/** ST_PresetPatternVal, in specification order. */
|
|
824
|
+
declare const PATTERN_PRESETS: readonly string[];
|
|
825
|
+
/** Engine ids that are not DrawingML names, with the preset they draw and export as. */
|
|
826
|
+
declare const PATTERN_PRESET_ALIASES: Readonly<Record<string, string>>;
|
|
827
|
+
/** The pattern size PowerPoint tiles: 8 x 8 units, one unit per 1/96 inch. */
|
|
828
|
+
declare const PATTERN_TILE_SIZE = 8;
|
|
829
|
+
/** The DrawingML preset a pattern id draws as: a preset name, an alias (diagStripe), or undefined. */
|
|
830
|
+
declare function resolvePatternPreset(preset: unknown): string | undefined;
|
|
831
|
+
/** Eight row bytes, top to bottom, most significant bit = leftmost pixel; undefined for an unknown id. */
|
|
832
|
+
declare function patternBitmap(preset: unknown): readonly number[] | undefined;
|
|
833
|
+
/** Horizontal runs of set pixels (`x`, `y`, `width` in tile units), in reading order. */
|
|
834
|
+
declare function patternRuns(preset: unknown): {
|
|
835
|
+
x: number;
|
|
836
|
+
y: number;
|
|
837
|
+
width: number;
|
|
838
|
+
}[] | undefined;
|
|
277
839
|
|
|
278
840
|
/**
|
|
279
841
|
* Footnotes, citations and captions (RR-34).
|
|
280
842
|
*
|
|
281
843
|
* - A TextRun may `cite` one or more ids of the deck's top-level `references`, or carry an inline
|
|
282
|
-
* `footnote`. Markers are numbered per deck in reading order of first use (slides, then regions,
|
|
844
|
+
* `footnote`. Markers are numbered per deck in reading order of first use (slides: the heading group tag, title, subtitle, then regions,
|
|
283
845
|
* blocks and runs); the same reference id keeps its number, every footnote takes a new one. A run's
|
|
284
846
|
* marker is a superscript fragment drawn directly after the run (`1`, or `1,2` for several ids);
|
|
285
847
|
* `richTextLayouter` emits it from `RichTextOptions.citationMarker`, so it wraps with its word and
|
|
@@ -345,8 +907,9 @@ interface AnnotatedRun {
|
|
|
345
907
|
footnote?: RichText;
|
|
346
908
|
}
|
|
347
909
|
/**
|
|
348
|
-
* Visit every rich-text run of a slide that can carry a citation (
|
|
349
|
-
* in reading order:
|
|
910
|
+
* Visit every rich-text run of a slide that can carry a citation (the slide tag, title and subtitle, then
|
|
911
|
+
* text, bullets, list item and quote runs), in reading order: the heading group first (tag, title, subtitle),
|
|
912
|
+
* then promoted regions (sorted keys), then blocks (recursively), then the root payload.
|
|
350
913
|
* `basePath` is the slide's dotted path (`slides.3`).
|
|
351
914
|
*/
|
|
352
915
|
declare function walkCitationRuns(slide: unknown, basePath: string, visit: (entry: AnnotatedRun) => void): void;
|
|
@@ -490,7 +1053,8 @@ interface ReferencesSlideOptions {
|
|
|
490
1053
|
declare function referencesSlide(presentation: unknown, options?: ReferencesSlideOptions): Record<string, unknown>;
|
|
491
1054
|
|
|
492
1055
|
/** The chart constructs the engines draw. Every catalog chart type id resolves to one (see `chartOptionTarget`). */
|
|
493
|
-
|
|
1056
|
+
/** `combo` (FA-15) draws clustered columns and line series in one plot, the lines optionally on a secondary value axis. */
|
|
1057
|
+
type ChartOptionKind = 'bar' | 'line' | 'area' | 'pie' | 'doughnut' | 'scatter' | 'radar' | 'treemap' | 'histogram' | 'pareto' | 'box' | 'waterfall' | 'funnel' | 'map' | 'combo';
|
|
494
1058
|
interface ChartOptionTarget {
|
|
495
1059
|
kind: ChartOptionKind;
|
|
496
1060
|
/** Stacked and 100% stacked columns, bars, lines and areas: their data labels have no outside-end position. */
|
|
@@ -501,7 +1065,7 @@ type ChartLabelContent = 'category' | 'value' | 'percent';
|
|
|
501
1065
|
type ChartLabelPosition = 'center' | 'inside-end' | 'inside-base' | 'outside-end' | 'above' | 'below' | 'left' | 'right';
|
|
502
1066
|
interface ChartOptionDiagnostic {
|
|
503
1067
|
code: 'chart-option-adapted';
|
|
504
|
-
/** The option that was adapted: `axisTitles.category`, `axisTitles.value`, `legend`, `dataLabels`, `dataLabels.content`, `dataLabels.position` or `
|
|
1068
|
+
/** The option that was adapted: `axisTitles.category`, `axisTitles.value`, `axisTitles.secondary`, `legend`, `dataLabels`, `dataLabels.content`, `dataLabels.position`, `dataLabels.separator`, `line`, `secondaryAxis`, `highlight.series` or `highlight.categories`. */
|
|
505
1069
|
option: string;
|
|
506
1070
|
reason: 'unsupported-type' | 'unsupported-content' | 'unsupported-position';
|
|
507
1071
|
message: string;
|
|
@@ -509,34 +1073,57 @@ interface ChartOptionDiagnostic {
|
|
|
509
1073
|
interface ResolvedChartDataLabels {
|
|
510
1074
|
/** Canonical order: category, value, percent. Never empty. */
|
|
511
1075
|
content: ChartLabelContent[];
|
|
512
|
-
/** The concrete position, or null for a construct whose labels have no position choice (area, doughnut, radar, treemap). */
|
|
1076
|
+
/** The concrete position, or null for a construct whose labels have no position choice (area, doughnut, radar, treemap). On a combo chart, the column series' position. */
|
|
513
1077
|
position: ChartLabelPosition | null;
|
|
1078
|
+
/** Combo charts only: the concrete position of the line series' labels (`position` is the column series' one). */
|
|
1079
|
+
linePosition?: ChartLabelPosition;
|
|
514
1080
|
separator: string;
|
|
515
1081
|
}
|
|
1082
|
+
/** FA-14: the series and category names `chart.highlight` keeps for a chart type (what the type cannot highlight is dropped, with a diagnostic). */
|
|
1083
|
+
interface ResolvedChartHighlight {
|
|
1084
|
+
/** Series (column) names whose marks take the accent colour. */
|
|
1085
|
+
series: string[];
|
|
1086
|
+
/** Category (row label) names whose marks take the accent colour. */
|
|
1087
|
+
categories: string[];
|
|
1088
|
+
}
|
|
516
1089
|
interface ResolvedChartOptions {
|
|
517
1090
|
/** True when the chart carries at least one option (after adaptation); false means every engine keeps today's output. */
|
|
518
1091
|
active: boolean;
|
|
1092
|
+
/** `secondary` titles the secondary value axis of a combo chart. */
|
|
519
1093
|
axisTitles: {
|
|
520
1094
|
category?: string;
|
|
521
1095
|
value?: string;
|
|
1096
|
+
secondary?: string;
|
|
522
1097
|
};
|
|
523
1098
|
/** Undefined = no legend option: each engine keeps its default (a right legend on multi-series, pie and doughnut charts). */
|
|
524
1099
|
legend?: ChartLegendPosition;
|
|
525
1100
|
dataLabels?: ResolvedChartDataLabels;
|
|
526
1101
|
/** True when `dataLabels: false` switches off the labels a construct draws by default (funnel values, treemap category names). */
|
|
527
1102
|
dataLabelsOff?: boolean;
|
|
1103
|
+
/**
|
|
1104
|
+
* FA-14: the names `chart.highlight` keeps; undefined when the chart has no highlight or its type can highlight nothing it names.
|
|
1105
|
+
* It does not make `active` true: a highlight changes the colours of marks, never the geometry or the reserved space.
|
|
1106
|
+
*/
|
|
1107
|
+
highlight?: ResolvedChartHighlight;
|
|
528
1108
|
diagnostics: ChartOptionDiagnostic[];
|
|
529
1109
|
}
|
|
530
1110
|
interface ChartOptionSupport {
|
|
1111
|
+
/** `secondary`: the construct can have a secondary value axis (a combo chart whose `secondaryAxis` names a line series). */
|
|
531
1112
|
axisTitles: {
|
|
532
1113
|
category: boolean;
|
|
533
1114
|
value: boolean;
|
|
1115
|
+
secondary: boolean;
|
|
534
1116
|
};
|
|
535
1117
|
legend: boolean;
|
|
1118
|
+
/** FA-14: what `chart.highlight` can name: series (a whole series' marks) and categories (one category's marks, or a pie slice). */
|
|
1119
|
+
highlight: {
|
|
1120
|
+
series: boolean;
|
|
1121
|
+
categories: boolean;
|
|
1122
|
+
};
|
|
536
1123
|
dataLabels: {
|
|
537
1124
|
supported: boolean;
|
|
538
1125
|
content: readonly ChartLabelContent[];
|
|
539
|
-
/** Empty when labels have no position choice. */
|
|
1126
|
+
/** Empty when labels have no position choice. A combo chart lists the column positions, then the line-only ones. */
|
|
540
1127
|
positions: readonly ChartLabelPosition[];
|
|
541
1128
|
/** The position `auto` resolves to; null with no positions. */
|
|
542
1129
|
defaultPosition: ChartLabelPosition | null;
|
|
@@ -546,7 +1133,7 @@ interface ChartOptionSupport {
|
|
|
546
1133
|
}
|
|
547
1134
|
/** What a chart construct can show. The table the docs, the validator, the preview and the exporter all follow. */
|
|
548
1135
|
declare function chartOptionSupport(target: ChartOptionTarget): ChartOptionSupport;
|
|
549
|
-
/** The option target for a catalog chart type id
|
|
1136
|
+
/** The option target for a catalog chart type id; undefined for an id outside the catalog. */
|
|
550
1137
|
declare function chartOptionTarget(typeId: unknown): ChartOptionTarget | undefined;
|
|
551
1138
|
declare const DEFAULT_CHART_LABEL_SEPARATOR = ", ";
|
|
552
1139
|
/**
|
|
@@ -564,6 +1151,53 @@ declare function chartLabelText(parts: {
|
|
|
564
1151
|
value?: string;
|
|
565
1152
|
percent?: string;
|
|
566
1153
|
}, content: readonly ChartLabelContent[], separator?: string): string;
|
|
1154
|
+
/** Which marks of a chart a highlight names, in the order of the resolved chart data. */
|
|
1155
|
+
interface ChartHighlightMarks {
|
|
1156
|
+
/** One flag per plotted series (the columns after the category and X columns): its marks are highlighted. */
|
|
1157
|
+
series: boolean[];
|
|
1158
|
+
/** One flag per data row: the marks of that category are highlighted. */
|
|
1159
|
+
categories: boolean[];
|
|
1160
|
+
}
|
|
1161
|
+
/**
|
|
1162
|
+
* FA-14: which series and categories of a chart are highlighted. `highlight` is `resolveChartOptions(...).highlight` and `data` the
|
|
1163
|
+
* chart's `resolveChartData` result (its `columns`, `hasX` and `rows`). A mark is highlighted when its series OR its category is
|
|
1164
|
+
* named: a column or bar of series s in row i takes the accent colour when `series[s] || categories[i]`; every other mark takes the muted
|
|
1165
|
+
* colour (`chartHighlightColors`). Category names match the row labels as text (a number label `2024` matches `"2024"`, an empty label
|
|
1166
|
+
* matches `""`), every row that carries the label. Returns undefined when there is no highlight or it names nothing the chart plots (a
|
|
1167
|
+
* name that matches no column or label is the `chart-highlight-unknown-name` validation error), so the engines then draw the chart as if
|
|
1168
|
+
* it had none.
|
|
1169
|
+
*/
|
|
1170
|
+
declare function chartHighlightMarks(highlight: ResolvedChartHighlight | undefined, data: {
|
|
1171
|
+
columns: readonly string[];
|
|
1172
|
+
hasX?: boolean;
|
|
1173
|
+
rows: readonly (readonly unknown[])[];
|
|
1174
|
+
}): ChartHighlightMarks | undefined;
|
|
1175
|
+
|
|
1176
|
+
/** Placeholder kinds that hold slide content (everything except the three heading kinds). */
|
|
1177
|
+
declare const LAYOUT_BODY_KINDS: readonly ["text", "list", "image", "video", "chart", "table", "code", "metric", "quote", "timeline"];
|
|
1178
|
+
type LayoutBodyKind = typeof LAYOUT_BODY_KINDS[number];
|
|
1179
|
+
/** What a layout record holds, derived from its placeholders. */
|
|
1180
|
+
interface LayoutContent {
|
|
1181
|
+
/** The most frequent body placeholder kind (a tie goes to the kind that appears first in placeholder order), or 'title' when the layout has no body placeholder. */
|
|
1182
|
+
kind: LayoutBodyKind | 'title';
|
|
1183
|
+
/** The number of body placeholders. */
|
|
1184
|
+
count: number;
|
|
1185
|
+
/** Which heading placeholders the layout has. */
|
|
1186
|
+
heading: {
|
|
1187
|
+
title: boolean;
|
|
1188
|
+
subtitle: boolean;
|
|
1189
|
+
tag: boolean;
|
|
1190
|
+
};
|
|
1191
|
+
}
|
|
1192
|
+
/**
|
|
1193
|
+
* Derives what a layout holds from its `placeholders`, which are the single source of truth: the content kind,
|
|
1194
|
+
* the number of body regions and which headings it has are never stored on the record.
|
|
1195
|
+
*/
|
|
1196
|
+
declare function layoutContent(record: {
|
|
1197
|
+
placeholders?: ReadonlyArray<{
|
|
1198
|
+
type?: string;
|
|
1199
|
+
} | null | undefined>;
|
|
1200
|
+
} | null | undefined): LayoutContent;
|
|
567
1201
|
|
|
568
1202
|
/** Portable layout geometry. No fonts, DOM, renderer, or network dependencies. */
|
|
569
1203
|
interface Composition {
|
|
@@ -599,6 +1233,8 @@ interface TextStyle {
|
|
|
599
1233
|
italic?: boolean;
|
|
600
1234
|
path?: string;
|
|
601
1235
|
fontFace?: FontFaceSelection;
|
|
1236
|
+
/** BCP-47 tag of a run that overrides the deck language (`TextRun.lang`); absent when the deck language applies. */
|
|
1237
|
+
lang?: string;
|
|
602
1238
|
}
|
|
603
1239
|
/** Role families. `accent` is present only when the scheme defines an accent role; the slide tag and quote body use it. */
|
|
604
1240
|
interface FontFamilies {
|
|
@@ -637,7 +1273,7 @@ declare function resolveFontSchemeReference(reference: unknown, lookup: (id: str
|
|
|
637
1273
|
* A scheme that names no heading or body family gets the DEFAULT_FONT_SCHEME families (Aptos Display, Aptos).
|
|
638
1274
|
* `code` comes from the scheme's `code` role, which catalog records such as consolas and courier-new
|
|
639
1275
|
* carry; otherwise it is Roboto Mono. Heading and body families are never reused for code.
|
|
640
|
-
* `accent` is returned only when the scheme defines an `accent` role (a family string
|
|
1276
|
+
* `accent` is returned only when the scheme defines an `accent` role (a family name string);
|
|
641
1277
|
* the slide tag and the quote body use it in place of the body and heading families. */
|
|
642
1278
|
declare function resolveFontFamilies(input: unknown): FontFamilies;
|
|
643
1279
|
interface TextMeasurement {
|
|
@@ -647,6 +1283,14 @@ interface TextMeasurement {
|
|
|
647
1283
|
* Null means no outline. These are not hinted/antialiased raster bounds. */
|
|
648
1284
|
outlineBounds?: (text: string, fontSize: number, style: TextStyle) => LayoutBox | null;
|
|
649
1285
|
}
|
|
1286
|
+
/**
|
|
1287
|
+
* The fonts handle every deck-level verb takes as `{ fonts }`. Core reads only `textMeasurement`: how wide the
|
|
1288
|
+
* host's real fonts draw a string. The renderer's `loadFonts()` returns a richer handle (embedded fonts, font
|
|
1289
|
+
* files, registry, manifest) that extends this one, so the same object goes to every verb.
|
|
1290
|
+
*/
|
|
1291
|
+
interface Fonts {
|
|
1292
|
+
textMeasurement?: TextMeasurement;
|
|
1293
|
+
}
|
|
650
1294
|
type MeasureTextWidth = (text: string, fontSize: number) => number;
|
|
651
1295
|
declare function resolveTextStyle(style: TextStyle, measurement?: TextMeasurement): TextStyle;
|
|
652
1296
|
declare function textWidthMeasurer(style: TextStyle, measurement?: TextMeasurement): MeasureTextWidth;
|
|
@@ -725,15 +1369,15 @@ interface ComposedItem {
|
|
|
725
1369
|
composition: Composition;
|
|
726
1370
|
/**
|
|
727
1371
|
* Resolved horizontal text alignment for this item: titleAlignment for the
|
|
728
|
-
* title, contentAlignment for every other item (slide design,
|
|
729
|
-
*
|
|
1372
|
+
* title, contentAlignment for every other item (slide design, deck design, layout design,
|
|
1373
|
+
* then left). Engines anchor native and preview text to this value.
|
|
730
1374
|
*/
|
|
731
1375
|
alignment: 'left' | 'center' | 'right';
|
|
732
1376
|
}
|
|
733
1377
|
/**
|
|
734
1378
|
* Slide-level image resolved from design.slideImage. It is active when the slide sets its own
|
|
735
|
-
* design.slideImage, or when the deck sets one and either the slide's layout record
|
|
736
|
-
* slideImage
|
|
1379
|
+
* design.slideImage, or when the deck sets one and either the slide's layout record sets
|
|
1380
|
+
* design.slideImage, or the slide's root image is the same source.
|
|
737
1381
|
* Content composes in the part of the slide the image does not occupy; 'background' leaves the whole slide.
|
|
738
1382
|
*/
|
|
739
1383
|
interface ComposedSlideImage {
|
|
@@ -882,6 +1526,12 @@ interface SlideComposition {
|
|
|
882
1526
|
composition: Composition;
|
|
883
1527
|
/** Repeated furniture is measured separately from body pagination leaves. */
|
|
884
1528
|
furniture?: FurnitureLayout;
|
|
1529
|
+
/**
|
|
1530
|
+
* Effective shared design hints of this slide: slide design, then deck design, then the layout record's design,
|
|
1531
|
+
* per key. Renderers and exporters read titleAlignment, contentAlignment, contentBox, imageFill and
|
|
1532
|
+
* listBullet here instead of re-deriving them from the document.
|
|
1533
|
+
*/
|
|
1534
|
+
design: ResolvedDesignHints;
|
|
885
1535
|
/** Active slide-level image; absent when design.slideImage does not apply to this slide. */
|
|
886
1536
|
slideImage?: ComposedSlideImage;
|
|
887
1537
|
/** Deck logo on a cover or section slide; absent on content slides and when no logo resolves. */
|
|
@@ -908,8 +1558,12 @@ interface ComposeSlideOptions {
|
|
|
908
1558
|
contentDirection?: unknown;
|
|
909
1559
|
chartPrimary?: unknown;
|
|
910
1560
|
listBullet?: unknown;
|
|
1561
|
+
titleAlignment?: unknown;
|
|
1562
|
+
contentAlignment?: unknown;
|
|
1563
|
+
contentBox?: unknown;
|
|
911
1564
|
};
|
|
912
1565
|
organization?: unknown;
|
|
1566
|
+
speaker?: unknown;
|
|
913
1567
|
slides?: unknown;
|
|
914
1568
|
catalogs?: unknown;
|
|
915
1569
|
references?: unknown;
|
|
@@ -936,7 +1590,7 @@ interface ComposeSlideOptions {
|
|
|
936
1590
|
* consults a clock; without this option a current date is reported as unresolved content.
|
|
937
1591
|
*/
|
|
938
1592
|
date?: string;
|
|
939
|
-
|
|
1593
|
+
fontFamilies?: Partial<FontFamilies>;
|
|
940
1594
|
/**
|
|
941
1595
|
* Deck base direction (RR-05). Defaults to the direction of the presentation language's script. In a right-to-left deck
|
|
942
1596
|
* composition mirrors the arrangement (the first column or `left` region is drawn at the right, slide images, logos and
|
|
@@ -944,12 +1598,12 @@ interface ComposeSlideOptions {
|
|
|
944
1598
|
* reports each paragraph's direction. Alignment stays logical: `left` is the start edge.
|
|
945
1599
|
*/
|
|
946
1600
|
direction?: TextDirection;
|
|
947
|
-
/**
|
|
1601
|
+
/** Deck-level alignment a host resolved itself. It ranks with `presentation.design`, above the layout record's design and below the slide's own design; hosts normally omit it because composition reads `presentation.design` and the layout. */
|
|
948
1602
|
contentAlignment?: 'left' | 'center' | 'right';
|
|
949
1603
|
titleAlignment?: 'left' | 'center' | 'right';
|
|
950
1604
|
/** Unscaled reference pixels around provided vector outlines; defaults to 1 for body text and 2 for furniture. Explicit values apply to both. */
|
|
951
1605
|
textRasterPadding?: number;
|
|
952
|
-
/**
|
|
1606
|
+
/** Deck-level body cards a host resolved itself, ranked like contentAlignment. A slide's explicit design.contentBox overrides this value. */
|
|
953
1607
|
contentBox?: boolean;
|
|
954
1608
|
textMeasurement?: TextMeasurement;
|
|
955
1609
|
width?: number;
|
|
@@ -993,7 +1647,7 @@ declare function resolveLogo(presentation: unknown, slide: unknown, options?: Re
|
|
|
993
1647
|
interface FurniturePartBase {
|
|
994
1648
|
kind: 'header' | 'footer';
|
|
995
1649
|
zone: 'left' | 'center' | 'right';
|
|
996
|
-
field: 'text' | 'image' | 'logo' | 'organization' | 'socials' | 'section' | 'slideNumber' | 'date';
|
|
1650
|
+
field: 'text' | 'image' | 'logo' | 'organization' | 'speaker' | 'socials' | 'section' | 'slideNumber' | 'date';
|
|
997
1651
|
/** Literal field or controlling flag, with the actual inherited/local path. */
|
|
998
1652
|
path: string;
|
|
999
1653
|
/** String/asset source, when different from a generated field's flag. */
|
|
@@ -1091,9 +1745,12 @@ declare const FONT_SIZE_GRID_PER_PX = 75;
|
|
|
1091
1745
|
declare function snapFontSizeDown(px: number): number;
|
|
1092
1746
|
/** Smallest grid size not below `px`. Used for readability floors, so a floor is never undercut. */
|
|
1093
1747
|
declare function snapFontSizeUp(px: number): number;
|
|
1748
|
+
/** `text` is a string or TextRun[] (FA-10); attribution, role and source stay plain strings. */
|
|
1094
1749
|
interface QuoteContent {
|
|
1095
|
-
text: string;
|
|
1750
|
+
text: string | readonly (string | RichTextRun)[];
|
|
1096
1751
|
attribution?: string;
|
|
1752
|
+
role?: string;
|
|
1753
|
+
photo?: unknown;
|
|
1097
1754
|
source?: string;
|
|
1098
1755
|
}
|
|
1099
1756
|
/** Source and displayed-text ranges are half-open UTF-16 offsets. Added punctuation has no source range. */
|
|
@@ -1115,24 +1772,46 @@ interface QuoteTextPart {
|
|
|
1115
1772
|
minFontSize: number;
|
|
1116
1773
|
requestedStyle: TextStyle;
|
|
1117
1774
|
style: TextStyle;
|
|
1118
|
-
/**
|
|
1119
|
-
|
|
1775
|
+
/**
|
|
1776
|
+
* The displayed runs of a rich quote body (FA-10): the quote's TextRun[] with the quotation marks joined to its first and
|
|
1777
|
+
* last run, so a run's index and a citation marker's position never shift. Absent for a string body and for the footer.
|
|
1778
|
+
*/
|
|
1779
|
+
runs?: (string | RichTextRun)[];
|
|
1780
|
+
/** Absent when the available box is invalid; never fit against an invented one-pixel box. A rich body reports a RichTextFit. */
|
|
1781
|
+
fit?: TextFit | RichTextFit;
|
|
1120
1782
|
}
|
|
1121
1783
|
interface QuoteLayoutDiagnostic extends LayoutDiagnostic {
|
|
1122
|
-
reason: 'invalid-part-box' | 'part-outside-cell' | 'text-fit' | 'part-overlap';
|
|
1784
|
+
reason: 'invalid-part-box' | 'part-outside-cell' | 'text-fit' | 'part-overlap' | 'photo-fit';
|
|
1123
1785
|
parts: QuoteTextPart['role'][];
|
|
1124
1786
|
}
|
|
1787
|
+
/**
|
|
1788
|
+
* The attributed person's headshot (FA-12): a circle at the start edge of the footer row, beside the
|
|
1789
|
+
* attribution and role lines (the left in a left-to-right deck, the right in a right-to-left one). Its diameter is
|
|
1790
|
+
* three times the footer font size, so it follows the text when the footer shrinks toward the readability floor.
|
|
1791
|
+
*/
|
|
1792
|
+
interface QuotePhoto {
|
|
1793
|
+
/** Path of the photo value, `<quote path>.photo`. */
|
|
1794
|
+
path: string;
|
|
1795
|
+
/** Asset value (string or Asset object) that engines resolve like any other image; crop to cover the frame. */
|
|
1796
|
+
value: unknown;
|
|
1797
|
+
/** Square frame, in reference pixels. */
|
|
1798
|
+
box: LayoutBox;
|
|
1799
|
+
/** Circle mask: the `ellipse` DrawingML preset and the same outline as an SVG path, as design.slideImage shape 'circle'. */
|
|
1800
|
+
shape: SlideImageShape;
|
|
1801
|
+
}
|
|
1125
1802
|
interface QuoteLayout {
|
|
1126
1803
|
algorithm: 'quote-flow-v1';
|
|
1127
1804
|
textMeasurement: 'estimated' | 'provided';
|
|
1128
1805
|
parts: QuoteTextPart[];
|
|
1806
|
+
/** Present when the quote has a photo; absent otherwise, and then the layout is the footer-only layout. */
|
|
1807
|
+
photo?: QuotePhoto;
|
|
1129
1808
|
diagnostics: QuoteLayoutDiagnostic[];
|
|
1130
1809
|
overflow: boolean;
|
|
1131
1810
|
}
|
|
1132
1811
|
interface QuoteLayoutOptions {
|
|
1133
1812
|
/** Canvas short edge divided by 720. Insets retain the current 18 reference-pixel contract. */
|
|
1134
1813
|
scale?: number;
|
|
1135
|
-
|
|
1814
|
+
fontFamilies?: Partial<FontFamilies>;
|
|
1136
1815
|
/** Readability floor in reference pixels, before canvas scaling. */
|
|
1137
1816
|
minFontSize?: number;
|
|
1138
1817
|
overflow?: Composition['overflow'];
|
|
@@ -1140,6 +1819,8 @@ interface QuoteLayoutOptions {
|
|
|
1140
1819
|
textMeasurement?: TextMeasurement;
|
|
1141
1820
|
/** Deck direction; in a right-to-left deck every part fit reports its paragraphs' directions (RR-05). */
|
|
1142
1821
|
direction?: TextDirection;
|
|
1822
|
+
/** Marker text for a rich body run by its dotted path (`<path>.text.<runIndex>`); composeSlide supplies the deck numbering. */
|
|
1823
|
+
citationMarker?: (runPath: string) => string | undefined;
|
|
1143
1824
|
}
|
|
1144
1825
|
/**
|
|
1145
1826
|
* Allocate and measure quote body/footer space for composition, rendering and export. Callers must
|
|
@@ -1153,7 +1834,11 @@ interface MetricContent {
|
|
|
1153
1834
|
unit?: string;
|
|
1154
1835
|
delta?: string | number;
|
|
1155
1836
|
trend?: 'up' | 'down' | 'flat';
|
|
1837
|
+
/** Whether the change is good news; colours the trend arrow, trend word and delta text (see metricTrendColor). */
|
|
1838
|
+
sentiment?: MetricSentiment;
|
|
1156
1839
|
}
|
|
1840
|
+
/** The text fields of a metric, each laid out as its own part. `sentiment` is metadata, not text. */
|
|
1841
|
+
type MetricTextRole = Exclude<keyof MetricContent, 'sentiment'>;
|
|
1157
1842
|
/** Ranges address String(sourceValue), not the numeric token spelling in serialized JSON. */
|
|
1158
1843
|
interface MetricTextSource {
|
|
1159
1844
|
path: string;
|
|
@@ -1162,7 +1847,7 @@ interface MetricTextSource {
|
|
|
1162
1847
|
end: number;
|
|
1163
1848
|
}
|
|
1164
1849
|
interface MetricTextPart {
|
|
1165
|
-
role:
|
|
1850
|
+
role: MetricTextRole;
|
|
1166
1851
|
path: string;
|
|
1167
1852
|
text: string;
|
|
1168
1853
|
sources: MetricTextSource[];
|
|
@@ -1190,6 +1875,8 @@ interface MetricLayout {
|
|
|
1190
1875
|
alignment: 'left' | 'center' | 'right';
|
|
1191
1876
|
textMeasurement: 'estimated' | 'provided';
|
|
1192
1877
|
arrangement: 'inline-unit' | 'stacked';
|
|
1878
|
+
/** The metric's `sentiment`, passed through for metricTrendMark; omitted when the content has none. */
|
|
1879
|
+
sentiment?: MetricSentiment;
|
|
1193
1880
|
/** At most 48 arrangements; value fitting is bounded by 77 reference-size trials per arrangement. */
|
|
1194
1881
|
attempts: number;
|
|
1195
1882
|
parts: MetricTextPart[];
|
|
@@ -1208,10 +1895,13 @@ interface MetricLayoutOptions extends QuoteLayoutOptions {
|
|
|
1208
1895
|
* beside it from these accepted parts. Consumers must reuse these accepted parts and source ranges.
|
|
1209
1896
|
*/
|
|
1210
1897
|
declare function layoutMetric(value: string | number | MetricContent, box: LayoutBox, options?: MetricLayoutOptions): MetricLayout;
|
|
1898
|
+
/** Progress of a timeline event (FA-11). Engines draw it from the deck's colors; see `timelineMarkerShapes`. */
|
|
1899
|
+
type TimelineStatus = 'done' | 'current' | 'planned';
|
|
1211
1900
|
interface TimelineEvent {
|
|
1212
1901
|
when?: string;
|
|
1213
1902
|
what: string;
|
|
1214
1903
|
description?: string;
|
|
1904
|
+
status?: TimelineStatus;
|
|
1215
1905
|
}
|
|
1216
1906
|
interface TimelineContent {
|
|
1217
1907
|
name?: string;
|
|
@@ -1221,6 +1911,8 @@ interface TimelineContent {
|
|
|
1221
1911
|
interface TimelineTextPart {
|
|
1222
1912
|
role: 'name' | 'description' | 'when' | 'what' | 'event-description';
|
|
1223
1913
|
eventIndex?: number;
|
|
1914
|
+
/** The event's status; absent for metadata parts and for events without a status. */
|
|
1915
|
+
status?: TimelineStatus;
|
|
1224
1916
|
path: string;
|
|
1225
1917
|
text: string;
|
|
1226
1918
|
sources: {
|
|
@@ -1247,12 +1939,23 @@ interface TimelineLayout {
|
|
|
1247
1939
|
textMeasurement: 'provided' | 'estimated';
|
|
1248
1940
|
textOutlines: 'provided' | 'unavailable';
|
|
1249
1941
|
parts: TimelineTextPart[];
|
|
1942
|
+
/**
|
|
1943
|
+
* One marker per event. `radius` is the marker's own radius; `status` repeats the event's status
|
|
1944
|
+
* (absent without one). A 'current' marker also has `ring.radius`, 1.6 times `radius`, and a
|
|
1945
|
+
* 'current' or 'planned' marker has the `strokeWidth` of its outline and ring. Every radius is that
|
|
1946
|
+
* of the drawn ellipse; an outline is centered on the ellipse edge, so it reaches half a stroke beyond.
|
|
1947
|
+
*/
|
|
1250
1948
|
markers: {
|
|
1251
1949
|
path: string;
|
|
1252
1950
|
eventIndex: number;
|
|
1253
1951
|
x: number;
|
|
1254
1952
|
y: number;
|
|
1255
1953
|
radius: number;
|
|
1954
|
+
status?: TimelineStatus;
|
|
1955
|
+
ring?: {
|
|
1956
|
+
radius: number;
|
|
1957
|
+
};
|
|
1958
|
+
strokeWidth?: number;
|
|
1256
1959
|
}[];
|
|
1257
1960
|
connector: {
|
|
1258
1961
|
x1: number;
|
|
@@ -1347,6 +2050,10 @@ interface RichTextRun {
|
|
|
1347
2050
|
link?: string;
|
|
1348
2051
|
superscript?: boolean;
|
|
1349
2052
|
subscript?: boolean;
|
|
2053
|
+
/** Inline code: the run takes the design's code font (`RichTextOptions.codeFontFamily`) unless it names its own `fontFamily`. */
|
|
2054
|
+
code?: boolean;
|
|
2055
|
+
/** BCP-47 tag that overrides the deck language for this run; it reaches the fragment style as `style.lang`. */
|
|
2056
|
+
lang?: string;
|
|
1350
2057
|
/** RR-34: reference ids this run cites (a marker follows the run; the deck's `references` list resolves them). */
|
|
1351
2058
|
cite?: string | string[];
|
|
1352
2059
|
/** RR-34: an inline footnote for this run (a marker follows the run; the note is listed in the slide's footnote area). */
|
|
@@ -1385,6 +2092,8 @@ interface RichTextFit extends TextFit {
|
|
|
1385
2092
|
}
|
|
1386
2093
|
interface RichTextOptions {
|
|
1387
2094
|
style: TextStyle;
|
|
2095
|
+
/** The design's code family for runs with `code: true`; `monospace` when absent. */
|
|
2096
|
+
codeFontFamily?: string;
|
|
1388
2097
|
textMeasurement?: TextMeasurement;
|
|
1389
2098
|
/** Use one measured line advance for every line, as native table cells do. */
|
|
1390
2099
|
uniformLineHeight?: boolean;
|
|
@@ -1472,6 +2181,8 @@ interface TableLayoutOptions {
|
|
|
1472
2181
|
scale?: number;
|
|
1473
2182
|
minFontSize?: number;
|
|
1474
2183
|
fontFamily?: string;
|
|
2184
|
+
/** The design's code family for cell runs with `code: true`. */
|
|
2185
|
+
codeFontFamily?: string;
|
|
1475
2186
|
textMeasurement?: TextMeasurement;
|
|
1476
2187
|
path?: string;
|
|
1477
2188
|
/** RR-54: the document, for a dataset-backed table (`{ dataset }`): its headers, rows and column formats come from `datasets`. */
|
|
@@ -1527,4 +2238,4 @@ declare function resolveCanvasDimensions(input: unknown): {
|
|
|
1527
2238
|
height: number;
|
|
1528
2239
|
};
|
|
1529
2240
|
|
|
1530
|
-
export {
|
|
2241
|
+
export { type CodeRun as $, type AnnotatedRun as A, type ChartHighlightMarks as B, type ComposeSlideOptions as C, type ChartLabelContent as D, type ChartLabelPosition as E, type FontFamilies as F, type ChartLegendPosition as G, type ChartOptionDiagnostic as H, type ChartOptionKind as I, type ChartOptionSupport as J, type ChartOptionTarget as K, type LanguageFamilyName as L, type MeasureTextWidth as M, type CitationMarker as N, type CitationNote as O, type CodeContent as P, type CodeHighlightBand as Q, type CodeHighlightColors as R, type CodeHighlightEntry as S, type TextMeasurement as T, type CodeHighlightIssue as U, type CodeHighlightLines as V, type CodeLayout as W, type CodeLayoutDiagnostic as X, type CodeLayoutOptions as Y, type CodeLineSegment as Z, type CodeLineSource as _, type FontSchemeDiagnostic as a, type MetricLayoutDiagnostic as a$, type CodeSyntaxPalette as a0, type CodeSyntaxPaletteOptions as a1, type CodeSyntaxPaletteTheme as a2, type CodeTextFit as a3, type CodeTextPart as a4, type CodeToken as a5, type CodeTokenKind as a6, type ComposedCaption as a7, type ComposedFlow as a8, type ComposedFootnoteEntry as a9, type FurnitureImagePart as aA, type FurnitureLayout as aB, type FurniturePart as aC, type FurniturePartBase as aD, type FurnitureSocialLink as aE, type FurnitureTextExtras as aF, type FurnitureTextPart as aG, LAYOUT_BODY_KINDS as aH, type LayoutBodyKind as aI, type LayoutBox as aJ, type LayoutContent as aK, type ListBulletImage as aL, type ListEntryLayout as aM, type ListFit as aN, type ListFitOptions as aO, type ListNumber as aP, type ListText as aQ, type ListValue as aR, type LogoSlot as aS, MAX_COMPOSITION_DEPTH as aT, MAX_NUMBERING_LEVELS as aU, MAX_NUMBERING_VALUE as aV, MAX_ROMAN_VALUE as aW, METRIC_TREND_MIN_CONTRAST as aX, METRIC_TREND_SHAPES as aY, type MetricContent as aZ, type MetricLayout as a_, type ComposedFootnotes as aa, type ComposedGroup as ab, type ComposedItem as ac, type ComposedLogo as ad, type ComposedSlideImage as ae, type Composition as af, type CompositionCandidate as ag, type CompositionDecision as ah, type CompositionExplanation as ai, type CompositionPenalties as aj, type CompositionTrack as ak, DARK_BACKGROUND_LUMINANCE as al, DEFAULT_CHART_LABEL_SEPARATOR as am, DEFAULT_FONT_SCHEME as an, DEFAULT_FURNITURE_DATE_FORMAT as ao, DEFAULT_SLIDE_NUMBER_FORMAT as ap, DESIGN_HINT_KEYS as aq, type DeckCitations as ar, type DesignHintKey as as, type DesignHintSource as at, type DesignHints as au, FONT_SIZE_GRID_PER_PX as av, FOOTNOTE_MAX_RATIO as aw, type FontFaceSelection as ax, type FootnoteLayoutOptions as ay, type FurnitureField as az, type Fonts as b, TIMELINE_OUTLINE_MIN_CONTRAST as b$, type MetricLayoutOptions as b0, type MetricSentiment as b1, type MetricTextPart as b2, type MetricTextSource as b3, type MetricTrend as b4, type MetricTrendColorOptions as b5, type MetricTrendMark as b6, NUMBERING_STYLES as b7, NUMBERING_SUFFIXES as b8, type Numbering as b9, type ResolvedChartHighlight as bA, type ResolvedChartOptions as bB, type ResolvedColorRoles as bC, type ResolvedDesignHints as bD, type ResolvedFontScheme as bE, type ResolvedLogo as bF, type ResolvedNumbering as bG, type ResolvedScriptFonts as bH, type RichText as bI, type RichTextFit as bJ, type RichTextFragment as bK, type RichTextLine as bL, type RichTextOptions as bM, type RichTextRun as bN, SURFACE_ALT_MIN_CONTRAST as bO, SURFACE_ALT_MIX as bP, type ScriptFontApp as bQ, type ScriptFontSlots as bR, type ScriptFontSource as bS, type ScriptFontSupplement as bT, type ScriptRole as bU, type SlideCitations as bV, type SlideComposition as bW, type SlideImageShape as bX, type SocialPlatformRecord as bY, type SocialProfile as bZ, type SourceTextFit as b_, type NumberingInput as ba, type NumberingStyleName as bb, type NumberingSuffix as bc, OPFCompositionError as bd, PATTERN_PRESETS as be, PATTERN_PRESET_ALIASES as bf, PATTERN_TILE_SIZE as bg, PICTURE_BULLET_SCALE as bh, type PhysicalAlignment as bi, type QuoteContent as bj, type QuoteLayout as bk, type QuoteLayoutDiagnostic as bl, type QuoteLayoutOptions as bm, type QuotePhoto as bn, type QuoteTextPart as bo, type QuoteTextSource as bp, type ReadingBox as bq, type Reference as br, type ReferencesSlideOptions as bs, type ResolveColorRefOptions as bt, type ResolveColorRefRoles as bu, type ResolveColorRolesOptions as bv, type ResolveDesignHintsOptions as bw, type ResolveLogoOptions as bx, type ResolveScriptFontsOptions as by, type ResolvedChartDataLabels as bz, type LayoutDiagnostic as c, layoutFurniture as c$, TIMELINE_STATUSES as c0, TIMELINE_TEXT_MIN_CONTRAST as c1, type TableBorder as c2, type TableCellLayout as c3, type TableCellStyle as c4, type TableGrid as c5, type TableGridCell as c6, type TableGridIssue as c7, type TableLayout as c8, type TableLayoutOptions as c9, chartOptionTarget as cA, chartPaletteForFill as cB, citationMarkerText as cC, codeHighlightBands as cD, codeHighlightColors as cE, codeHighlightLines as cF, codeLineNumbers as cG, codeLineRuns as cH, codeSyntaxPalette as cI, codeSyntaxPaletteForScheme as cJ, collectCitations as cK, colorContrast as cL, composeSlide as cM, defaultSlideBackground as cN, fitList as cO, fitRichText as cP, fitText as cQ, formatChartLabelNumber as cR, formatChartLabelPercent as cS, formatFurnitureDate as cT, formatListNumber as cU, formatSlideNumber as cV, isDarkColor as cW, layoutCaption as cX, layoutCode as cY, layoutContent as cZ, layoutFootnotes as c_, type TableRowLayout as ca, type TextDirection as cb, type TextFit as cc, type TextLineInk as cd, type TextLineSegment as ce, type TextLineSource as cf, type TextPlacement as cg, type TextPlacementLine as ch, type TimelineContent as ci, type TimelineEvent as cj, type TimelineLayout as ck, type TimelineLayoutDiagnostic as cl, type TimelineLayoutOptions as cm, type TimelineMarkerShape as cn, type TimelineStatus as co, type TimelineStatusColors as cp, type TimelineTextPart as cq, type WatermarkTextLayout as cr, type WatermarkTextOptions as cs, annotationText as ct, captionSettings as cu, chartColorForFill as cv, chartHighlightColors as cw, chartHighlightMarks as cx, chartLabelText as cy, chartOptionSupport as cz, type TextStyle as d, layoutMetric as d0, layoutQuote as d1, layoutTable as d2, layoutTimeline as d3, layoutWatermark as d4, listNumbers as d5, measureText as d6, measureTextOutline as d7, metricTrendColor as d8, metricTrendMark as d9, resolveTextStyle as dA, scriptFontRole as dB, sliceNumberedItems as dC, slideCitations as dD, slideImageShape as dE, snapFontSizeDown as dF, snapFontSizeUp as dG, surfaceAltColor as dH, tableGrid as dI, tableRowBoundaries as dJ, textColorForFill as dK, textWidthMeasurer as dL, timelineMarkerShapes as dM, timelineTextColor as dN, tokenizeCode as dO, visualReadingOrder as dP, walkCitationRuns as dQ, wrapText as dR, metricTrendPoints as da, normalizeHexColor as db, numberingAtLevel as dc, numberingStyleDraws as dd, paragraphDirection as de, paragraphDirectionAt as df, patternBitmap as dg, patternRuns as dh, physicalAlignment as di, placeTextLines as dj, referencesSlide as dk, resolveCanvasDimensions as dl, resolveChartOptions as dm, resolveCodeLanguage as dn, resolveColorRef as dp, resolveColorRoles as dq, resolveDesignHints as dr, resolveFontFamilies as ds, resolveFontSchemeReference as dt, resolveLogo as du, resolveNumbering as dv, resolvePatternPreset as dw, resolveScriptFonts as dx, resolveSlideDirection as dy, resolveSocialProfile as dz, type AnnotationFitter as e, type AnnotationLayoutOptions as f, CAPTIONABLE_FIELDS as g, CAPTION_FONT_RATIO as h, CAPTION_MAX_RATIO as i, CHART_HIGHLIGHT_MUTED_MIN_CONTRAST as j, CHART_HIGHLIGHT_MUTED_MIX as k, CHART_SERIES_MIN_DIFFERENCE as l, CHART_SERIES_MIN_LIGHTNESS_STEP as m, normalizeLanguageFamily as n, CITATION_MARKER_RAISE as o, CITATION_MARKER_SCALE as p, CODE_HIGHLIGHT_LANGUAGES as q, CODE_HIGHLIGHT_MAX_LENGTH as r, CODE_PANEL_BACKGROUND as s, CODE_PANEL_FOREGROUND as t, CODE_SYNTAX_MIN_CONTRAST as u, type Caption as v, type CaptionAlignment as w, type CaptionObject as x, type CaptionPosition as y, type CaptionSettings as z };
|