@openpresentation/opf 0.12.2 → 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-BnI7JKcn.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-B_3z9VTb.d.ts +188 -0
- package/dist/chunk-4LDGKLUC.js +192 -0
- package/dist/{chunk-V2537ENL.js → chunk-4VJDTF55.js} +2 -90
- package/dist/chunk-5ZU6JAPP.js +83 -0
- package/dist/{chunk-HOBSL7AJ.js → chunk-6OXY2CP3.js} +3604 -1644
- package/dist/{chunk-RUC7L5DJ.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-4LAM3N6S.js → chunk-LS2FMPI5.js} +1497 -1097
- package/dist/{chunk-SOSOBKQ2.js → chunk-Q2TCMN56.js} +6 -7
- package/dist/chunk-UPQQD7MA.js +1840 -0
- package/dist/{chunk-AUM5MXBR.js → chunk-XIZUK2XM.js} +36 -32
- package/dist/{chunk-E34DJ5LL.js → chunk-XOZ4KMSR.js} +2427 -10820
- package/dist/chunk-Z65B2B77.js +601 -0
- package/dist/{composition-DWbCiMwF.d.ts → composition-_WEwBe2a.d.ts} +744 -26
- package/dist/composition.d.ts +2 -1
- package/dist/composition.js +2 -2
- package/dist/convert.d.ts +9 -4
- package/dist/convert.js +57 -26
- package/dist/data.d.ts +5 -4
- package/dist/data.js +3 -1
- package/dist/diff.d.ts +5 -5
- package/dist/diff.js +6 -603
- package/dist/docs.js +70 -52
- package/dist/examples.d.ts +1 -1
- package/dist/examples.js +1466 -2963
- 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 -281
- package/dist/index.js +530 -943
- package/dist/markdown.d.ts +28 -25
- package/dist/markdown.js +8 -1940
- package/dist/pagination-BZpXLvFL.d.ts +119 -0
- package/dist/pagination.d.ts +5 -60
- package/dist/pagination.js +5 -5
- package/dist/patch.d.ts +12 -23
- package/dist/patch.js +5 -5
- package/dist/{presentation-DcF-MZcz.d.ts → presentation-C5eHkevA.d.ts} +516 -499
- package/dist/repo-readme.js +1 -1
- package/dist/{schemas-BSjlG8-R.d.ts → schemas-DDpqAgyS.d.ts} +49 -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 +11 -11
- 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 +503 -339
- 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 +6 -10
- package/dist/audit.d.ts +0 -156
- package/dist/audit.js +0 -7
- package/dist/chunk-6LZK2IZB.js +0 -1690
- package/dist/chunk-FYLJVF7X.js +0 -18448
- package/dist/chunk-JKVKYVWL.js +0 -1332
- package/dist/chunk-MWPMJE6P.js +0 -622
- package/dist/lint.d.ts +0 -70
- 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-DfG9yxba.d.ts +0 -172
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import './chart-data-B_3z9VTb.js';
|
|
2
|
+
|
|
1
3
|
/** Canonical table grid. No renderer, fonts, DOM or network dependencies. */
|
|
2
4
|
interface TableBorder {
|
|
3
5
|
color: string;
|
|
@@ -41,6 +43,110 @@ declare function tableGrid(value: unknown, path?: string): TableGrid;
|
|
|
41
43
|
/** Row boundaries that preserve every vertical merge, used by pagination. */
|
|
42
44
|
declare function tableRowBoundaries(value: unknown): number[];
|
|
43
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
|
+
|
|
44
150
|
/** A positioned thing whose reading position is wanted. */
|
|
45
151
|
interface ReadingBox {
|
|
46
152
|
box: {
|
|
@@ -60,7 +166,7 @@ interface ReadingBox {
|
|
|
60
166
|
* The boxes are read as given: pass them in logical (unmirrored) coordinates and the order is the reading
|
|
61
167
|
* order of both a left-to-right and a right-to-left deck, because mirroring a deck moves where an item is
|
|
62
168
|
* drawn and where a line starts together. For boxes that are already mirrored, pass `direction: 'rtl'` to
|
|
63
|
-
* 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
|
|
64
170
|
* check the composed order, so the two cannot drift apart.
|
|
65
171
|
*/
|
|
66
172
|
declare function visualReadingOrder<T extends ReadingBox>(items: readonly T[], direction?: 'ltr' | 'rtl'): T[];
|
|
@@ -216,7 +322,7 @@ declare function formatSlideNumber(format: string, current: number, total: numbe
|
|
|
216
322
|
|
|
217
323
|
/** Normalize a literal hex color to uppercase #RRGGBB. */
|
|
218
324
|
declare function normalizeHexColor(value: unknown): string | undefined;
|
|
219
|
-
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>>;
|
|
220
326
|
interface ResolveColorRefOptions {
|
|
221
327
|
/** Effective color scheme after design resolution (OOXML slots plus optional role hex overrides). */
|
|
222
328
|
colorScheme: Record<string, unknown>;
|
|
@@ -229,6 +335,52 @@ interface ResolveColorRefOptions {
|
|
|
229
335
|
}
|
|
230
336
|
/** Resolve a ColorRef or TextRun.color string to a literal hex color. */
|
|
231
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;
|
|
232
384
|
declare function colorContrast(foreground: string, background: string): number | undefined;
|
|
233
385
|
/** Keep an inherited text color at >=4.5:1; otherwise select black or white.
|
|
234
386
|
* Callers must preserve explicit text-color overrides before using this fallback.
|
|
@@ -272,12 +424,424 @@ declare const CHART_SERIES_MIN_DIFFERENCE = 12;
|
|
|
272
424
|
* and preview and export (which both call this function) draw the same ones.
|
|
273
425
|
*/
|
|
274
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;
|
|
275
839
|
|
|
276
840
|
/**
|
|
277
841
|
* Footnotes, citations and captions (RR-34).
|
|
278
842
|
*
|
|
279
843
|
* - A TextRun may `cite` one or more ids of the deck's top-level `references`, or carry an inline
|
|
280
|
-
* `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,
|
|
281
845
|
* blocks and runs); the same reference id keeps its number, every footnote takes a new one. A run's
|
|
282
846
|
* marker is a superscript fragment drawn directly after the run (`1`, or `1,2` for several ids);
|
|
283
847
|
* `richTextLayouter` emits it from `RichTextOptions.citationMarker`, so it wraps with its word and
|
|
@@ -343,8 +907,9 @@ interface AnnotatedRun {
|
|
|
343
907
|
footnote?: RichText;
|
|
344
908
|
}
|
|
345
909
|
/**
|
|
346
|
-
* Visit every rich-text run of a slide that can carry a citation (
|
|
347
|
-
* 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.
|
|
348
913
|
* `basePath` is the slide's dotted path (`slides.3`).
|
|
349
914
|
*/
|
|
350
915
|
declare function walkCitationRuns(slide: unknown, basePath: string, visit: (entry: AnnotatedRun) => void): void;
|
|
@@ -488,7 +1053,8 @@ interface ReferencesSlideOptions {
|
|
|
488
1053
|
declare function referencesSlide(presentation: unknown, options?: ReferencesSlideOptions): Record<string, unknown>;
|
|
489
1054
|
|
|
490
1055
|
/** The chart constructs the engines draw. Every catalog chart type id resolves to one (see `chartOptionTarget`). */
|
|
491
|
-
|
|
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';
|
|
492
1058
|
interface ChartOptionTarget {
|
|
493
1059
|
kind: ChartOptionKind;
|
|
494
1060
|
/** Stacked and 100% stacked columns, bars, lines and areas: their data labels have no outside-end position. */
|
|
@@ -499,7 +1065,7 @@ type ChartLabelContent = 'category' | 'value' | 'percent';
|
|
|
499
1065
|
type ChartLabelPosition = 'center' | 'inside-end' | 'inside-base' | 'outside-end' | 'above' | 'below' | 'left' | 'right';
|
|
500
1066
|
interface ChartOptionDiagnostic {
|
|
501
1067
|
code: 'chart-option-adapted';
|
|
502
|
-
/** 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`. */
|
|
503
1069
|
option: string;
|
|
504
1070
|
reason: 'unsupported-type' | 'unsupported-content' | 'unsupported-position';
|
|
505
1071
|
message: string;
|
|
@@ -507,34 +1073,57 @@ interface ChartOptionDiagnostic {
|
|
|
507
1073
|
interface ResolvedChartDataLabels {
|
|
508
1074
|
/** Canonical order: category, value, percent. Never empty. */
|
|
509
1075
|
content: ChartLabelContent[];
|
|
510
|
-
/** 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. */
|
|
511
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;
|
|
512
1080
|
separator: string;
|
|
513
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
|
+
}
|
|
514
1089
|
interface ResolvedChartOptions {
|
|
515
1090
|
/** True when the chart carries at least one option (after adaptation); false means every engine keeps today's output. */
|
|
516
1091
|
active: boolean;
|
|
1092
|
+
/** `secondary` titles the secondary value axis of a combo chart. */
|
|
517
1093
|
axisTitles: {
|
|
518
1094
|
category?: string;
|
|
519
1095
|
value?: string;
|
|
1096
|
+
secondary?: string;
|
|
520
1097
|
};
|
|
521
1098
|
/** Undefined = no legend option: each engine keeps its default (a right legend on multi-series, pie and doughnut charts). */
|
|
522
1099
|
legend?: ChartLegendPosition;
|
|
523
1100
|
dataLabels?: ResolvedChartDataLabels;
|
|
524
1101
|
/** True when `dataLabels: false` switches off the labels a construct draws by default (funnel values, treemap category names). */
|
|
525
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;
|
|
526
1108
|
diagnostics: ChartOptionDiagnostic[];
|
|
527
1109
|
}
|
|
528
1110
|
interface ChartOptionSupport {
|
|
1111
|
+
/** `secondary`: the construct can have a secondary value axis (a combo chart whose `secondaryAxis` names a line series). */
|
|
529
1112
|
axisTitles: {
|
|
530
1113
|
category: boolean;
|
|
531
1114
|
value: boolean;
|
|
1115
|
+
secondary: boolean;
|
|
532
1116
|
};
|
|
533
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
|
+
};
|
|
534
1123
|
dataLabels: {
|
|
535
1124
|
supported: boolean;
|
|
536
1125
|
content: readonly ChartLabelContent[];
|
|
537
|
-
/** 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. */
|
|
538
1127
|
positions: readonly ChartLabelPosition[];
|
|
539
1128
|
/** The position `auto` resolves to; null with no positions. */
|
|
540
1129
|
defaultPosition: ChartLabelPosition | null;
|
|
@@ -544,7 +1133,7 @@ interface ChartOptionSupport {
|
|
|
544
1133
|
}
|
|
545
1134
|
/** What a chart construct can show. The table the docs, the validator, the preview and the exporter all follow. */
|
|
546
1135
|
declare function chartOptionSupport(target: ChartOptionTarget): ChartOptionSupport;
|
|
547
|
-
/** 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. */
|
|
548
1137
|
declare function chartOptionTarget(typeId: unknown): ChartOptionTarget | undefined;
|
|
549
1138
|
declare const DEFAULT_CHART_LABEL_SEPARATOR = ", ";
|
|
550
1139
|
/**
|
|
@@ -562,6 +1151,53 @@ declare function chartLabelText(parts: {
|
|
|
562
1151
|
value?: string;
|
|
563
1152
|
percent?: string;
|
|
564
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;
|
|
565
1201
|
|
|
566
1202
|
/** Portable layout geometry. No fonts, DOM, renderer, or network dependencies. */
|
|
567
1203
|
interface Composition {
|
|
@@ -597,6 +1233,8 @@ interface TextStyle {
|
|
|
597
1233
|
italic?: boolean;
|
|
598
1234
|
path?: string;
|
|
599
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;
|
|
600
1238
|
}
|
|
601
1239
|
/** Role families. `accent` is present only when the scheme defines an accent role; the slide tag and quote body use it. */
|
|
602
1240
|
interface FontFamilies {
|
|
@@ -635,7 +1273,7 @@ declare function resolveFontSchemeReference(reference: unknown, lookup: (id: str
|
|
|
635
1273
|
* A scheme that names no heading or body family gets the DEFAULT_FONT_SCHEME families (Aptos Display, Aptos).
|
|
636
1274
|
* `code` comes from the scheme's `code` role, which catalog records such as consolas and courier-new
|
|
637
1275
|
* carry; otherwise it is Roboto Mono. Heading and body families are never reused for code.
|
|
638
|
-
* `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);
|
|
639
1277
|
* the slide tag and the quote body use it in place of the body and heading families. */
|
|
640
1278
|
declare function resolveFontFamilies(input: unknown): FontFamilies;
|
|
641
1279
|
interface TextMeasurement {
|
|
@@ -645,6 +1283,14 @@ interface TextMeasurement {
|
|
|
645
1283
|
* Null means no outline. These are not hinted/antialiased raster bounds. */
|
|
646
1284
|
outlineBounds?: (text: string, fontSize: number, style: TextStyle) => LayoutBox | null;
|
|
647
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
|
+
}
|
|
648
1294
|
type MeasureTextWidth = (text: string, fontSize: number) => number;
|
|
649
1295
|
declare function resolveTextStyle(style: TextStyle, measurement?: TextMeasurement): TextStyle;
|
|
650
1296
|
declare function textWidthMeasurer(style: TextStyle, measurement?: TextMeasurement): MeasureTextWidth;
|
|
@@ -723,15 +1369,15 @@ interface ComposedItem {
|
|
|
723
1369
|
composition: Composition;
|
|
724
1370
|
/**
|
|
725
1371
|
* Resolved horizontal text alignment for this item: titleAlignment for the
|
|
726
|
-
* title, contentAlignment for every other item (slide design,
|
|
727
|
-
*
|
|
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.
|
|
728
1374
|
*/
|
|
729
1375
|
alignment: 'left' | 'center' | 'right';
|
|
730
1376
|
}
|
|
731
1377
|
/**
|
|
732
1378
|
* Slide-level image resolved from design.slideImage. It is active when the slide sets its own
|
|
733
|
-
* design.slideImage, or when the deck sets one and either the slide's layout record
|
|
734
|
-
* 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.
|
|
735
1381
|
* Content composes in the part of the slide the image does not occupy; 'background' leaves the whole slide.
|
|
736
1382
|
*/
|
|
737
1383
|
interface ComposedSlideImage {
|
|
@@ -880,6 +1526,12 @@ interface SlideComposition {
|
|
|
880
1526
|
composition: Composition;
|
|
881
1527
|
/** Repeated furniture is measured separately from body pagination leaves. */
|
|
882
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;
|
|
883
1535
|
/** Active slide-level image; absent when design.slideImage does not apply to this slide. */
|
|
884
1536
|
slideImage?: ComposedSlideImage;
|
|
885
1537
|
/** Deck logo on a cover or section slide; absent on content slides and when no logo resolves. */
|
|
@@ -906,11 +1558,16 @@ interface ComposeSlideOptions {
|
|
|
906
1558
|
contentDirection?: unknown;
|
|
907
1559
|
chartPrimary?: unknown;
|
|
908
1560
|
listBullet?: unknown;
|
|
1561
|
+
titleAlignment?: unknown;
|
|
1562
|
+
contentAlignment?: unknown;
|
|
1563
|
+
contentBox?: unknown;
|
|
909
1564
|
};
|
|
910
1565
|
organization?: unknown;
|
|
1566
|
+
speaker?: unknown;
|
|
911
1567
|
slides?: unknown;
|
|
912
1568
|
catalogs?: unknown;
|
|
913
1569
|
references?: unknown;
|
|
1570
|
+
datasets?: unknown;
|
|
914
1571
|
};
|
|
915
1572
|
/**
|
|
916
1573
|
* Whether the slide background is dark, by the host's own luminance test. Selects the light logo
|
|
@@ -933,7 +1590,7 @@ interface ComposeSlideOptions {
|
|
|
933
1590
|
* consults a clock; without this option a current date is reported as unresolved content.
|
|
934
1591
|
*/
|
|
935
1592
|
date?: string;
|
|
936
|
-
|
|
1593
|
+
fontFamilies?: Partial<FontFamilies>;
|
|
937
1594
|
/**
|
|
938
1595
|
* Deck base direction (RR-05). Defaults to the direction of the presentation language's script. In a right-to-left deck
|
|
939
1596
|
* composition mirrors the arrangement (the first column or `left` region is drawn at the right, slide images, logos and
|
|
@@ -941,12 +1598,12 @@ interface ComposeSlideOptions {
|
|
|
941
1598
|
* reports each paragraph's direction. Alignment stays logical: `left` is the start edge.
|
|
942
1599
|
*/
|
|
943
1600
|
direction?: TextDirection;
|
|
944
|
-
/**
|
|
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. */
|
|
945
1602
|
contentAlignment?: 'left' | 'center' | 'right';
|
|
946
1603
|
titleAlignment?: 'left' | 'center' | 'right';
|
|
947
1604
|
/** Unscaled reference pixels around provided vector outlines; defaults to 1 for body text and 2 for furniture. Explicit values apply to both. */
|
|
948
1605
|
textRasterPadding?: number;
|
|
949
|
-
/**
|
|
1606
|
+
/** Deck-level body cards a host resolved itself, ranked like contentAlignment. A slide's explicit design.contentBox overrides this value. */
|
|
950
1607
|
contentBox?: boolean;
|
|
951
1608
|
textMeasurement?: TextMeasurement;
|
|
952
1609
|
width?: number;
|
|
@@ -990,7 +1647,7 @@ declare function resolveLogo(presentation: unknown, slide: unknown, options?: Re
|
|
|
990
1647
|
interface FurniturePartBase {
|
|
991
1648
|
kind: 'header' | 'footer';
|
|
992
1649
|
zone: 'left' | 'center' | 'right';
|
|
993
|
-
field: 'text' | 'image' | 'logo' | 'organization' | 'socials' | 'section' | 'slideNumber' | 'date';
|
|
1650
|
+
field: 'text' | 'image' | 'logo' | 'organization' | 'speaker' | 'socials' | 'section' | 'slideNumber' | 'date';
|
|
994
1651
|
/** Literal field or controlling flag, with the actual inherited/local path. */
|
|
995
1652
|
path: string;
|
|
996
1653
|
/** String/asset source, when different from a generated field's flag. */
|
|
@@ -1088,9 +1745,12 @@ declare const FONT_SIZE_GRID_PER_PX = 75;
|
|
|
1088
1745
|
declare function snapFontSizeDown(px: number): number;
|
|
1089
1746
|
/** Smallest grid size not below `px`. Used for readability floors, so a floor is never undercut. */
|
|
1090
1747
|
declare function snapFontSizeUp(px: number): number;
|
|
1748
|
+
/** `text` is a string or TextRun[] (FA-10); attribution, role and source stay plain strings. */
|
|
1091
1749
|
interface QuoteContent {
|
|
1092
|
-
text: string;
|
|
1750
|
+
text: string | readonly (string | RichTextRun)[];
|
|
1093
1751
|
attribution?: string;
|
|
1752
|
+
role?: string;
|
|
1753
|
+
photo?: unknown;
|
|
1094
1754
|
source?: string;
|
|
1095
1755
|
}
|
|
1096
1756
|
/** Source and displayed-text ranges are half-open UTF-16 offsets. Added punctuation has no source range. */
|
|
@@ -1112,24 +1772,46 @@ interface QuoteTextPart {
|
|
|
1112
1772
|
minFontSize: number;
|
|
1113
1773
|
requestedStyle: TextStyle;
|
|
1114
1774
|
style: TextStyle;
|
|
1115
|
-
/**
|
|
1116
|
-
|
|
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;
|
|
1117
1782
|
}
|
|
1118
1783
|
interface QuoteLayoutDiagnostic extends LayoutDiagnostic {
|
|
1119
|
-
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';
|
|
1120
1785
|
parts: QuoteTextPart['role'][];
|
|
1121
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
|
+
}
|
|
1122
1802
|
interface QuoteLayout {
|
|
1123
1803
|
algorithm: 'quote-flow-v1';
|
|
1124
1804
|
textMeasurement: 'estimated' | 'provided';
|
|
1125
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;
|
|
1126
1808
|
diagnostics: QuoteLayoutDiagnostic[];
|
|
1127
1809
|
overflow: boolean;
|
|
1128
1810
|
}
|
|
1129
1811
|
interface QuoteLayoutOptions {
|
|
1130
1812
|
/** Canvas short edge divided by 720. Insets retain the current 18 reference-pixel contract. */
|
|
1131
1813
|
scale?: number;
|
|
1132
|
-
|
|
1814
|
+
fontFamilies?: Partial<FontFamilies>;
|
|
1133
1815
|
/** Readability floor in reference pixels, before canvas scaling. */
|
|
1134
1816
|
minFontSize?: number;
|
|
1135
1817
|
overflow?: Composition['overflow'];
|
|
@@ -1137,6 +1819,8 @@ interface QuoteLayoutOptions {
|
|
|
1137
1819
|
textMeasurement?: TextMeasurement;
|
|
1138
1820
|
/** Deck direction; in a right-to-left deck every part fit reports its paragraphs' directions (RR-05). */
|
|
1139
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;
|
|
1140
1824
|
}
|
|
1141
1825
|
/**
|
|
1142
1826
|
* Allocate and measure quote body/footer space for composition, rendering and export. Callers must
|
|
@@ -1150,7 +1834,11 @@ interface MetricContent {
|
|
|
1150
1834
|
unit?: string;
|
|
1151
1835
|
delta?: string | number;
|
|
1152
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;
|
|
1153
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'>;
|
|
1154
1842
|
/** Ranges address String(sourceValue), not the numeric token spelling in serialized JSON. */
|
|
1155
1843
|
interface MetricTextSource {
|
|
1156
1844
|
path: string;
|
|
@@ -1159,7 +1847,7 @@ interface MetricTextSource {
|
|
|
1159
1847
|
end: number;
|
|
1160
1848
|
}
|
|
1161
1849
|
interface MetricTextPart {
|
|
1162
|
-
role:
|
|
1850
|
+
role: MetricTextRole;
|
|
1163
1851
|
path: string;
|
|
1164
1852
|
text: string;
|
|
1165
1853
|
sources: MetricTextSource[];
|
|
@@ -1187,6 +1875,8 @@ interface MetricLayout {
|
|
|
1187
1875
|
alignment: 'left' | 'center' | 'right';
|
|
1188
1876
|
textMeasurement: 'estimated' | 'provided';
|
|
1189
1877
|
arrangement: 'inline-unit' | 'stacked';
|
|
1878
|
+
/** The metric's `sentiment`, passed through for metricTrendMark; omitted when the content has none. */
|
|
1879
|
+
sentiment?: MetricSentiment;
|
|
1190
1880
|
/** At most 48 arrangements; value fitting is bounded by 77 reference-size trials per arrangement. */
|
|
1191
1881
|
attempts: number;
|
|
1192
1882
|
parts: MetricTextPart[];
|
|
@@ -1205,10 +1895,13 @@ interface MetricLayoutOptions extends QuoteLayoutOptions {
|
|
|
1205
1895
|
* beside it from these accepted parts. Consumers must reuse these accepted parts and source ranges.
|
|
1206
1896
|
*/
|
|
1207
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';
|
|
1208
1900
|
interface TimelineEvent {
|
|
1209
1901
|
when?: string;
|
|
1210
1902
|
what: string;
|
|
1211
1903
|
description?: string;
|
|
1904
|
+
status?: TimelineStatus;
|
|
1212
1905
|
}
|
|
1213
1906
|
interface TimelineContent {
|
|
1214
1907
|
name?: string;
|
|
@@ -1218,6 +1911,8 @@ interface TimelineContent {
|
|
|
1218
1911
|
interface TimelineTextPart {
|
|
1219
1912
|
role: 'name' | 'description' | 'when' | 'what' | 'event-description';
|
|
1220
1913
|
eventIndex?: number;
|
|
1914
|
+
/** The event's status; absent for metadata parts and for events without a status. */
|
|
1915
|
+
status?: TimelineStatus;
|
|
1221
1916
|
path: string;
|
|
1222
1917
|
text: string;
|
|
1223
1918
|
sources: {
|
|
@@ -1244,12 +1939,23 @@ interface TimelineLayout {
|
|
|
1244
1939
|
textMeasurement: 'provided' | 'estimated';
|
|
1245
1940
|
textOutlines: 'provided' | 'unavailable';
|
|
1246
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
|
+
*/
|
|
1247
1948
|
markers: {
|
|
1248
1949
|
path: string;
|
|
1249
1950
|
eventIndex: number;
|
|
1250
1951
|
x: number;
|
|
1251
1952
|
y: number;
|
|
1252
1953
|
radius: number;
|
|
1954
|
+
status?: TimelineStatus;
|
|
1955
|
+
ring?: {
|
|
1956
|
+
radius: number;
|
|
1957
|
+
};
|
|
1958
|
+
strokeWidth?: number;
|
|
1253
1959
|
}[];
|
|
1254
1960
|
connector: {
|
|
1255
1961
|
x1: number;
|
|
@@ -1344,6 +2050,10 @@ interface RichTextRun {
|
|
|
1344
2050
|
link?: string;
|
|
1345
2051
|
superscript?: boolean;
|
|
1346
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;
|
|
1347
2057
|
/** RR-34: reference ids this run cites (a marker follows the run; the deck's `references` list resolves them). */
|
|
1348
2058
|
cite?: string | string[];
|
|
1349
2059
|
/** RR-34: an inline footnote for this run (a marker follows the run; the note is listed in the slide's footnote area). */
|
|
@@ -1382,6 +2092,8 @@ interface RichTextFit extends TextFit {
|
|
|
1382
2092
|
}
|
|
1383
2093
|
interface RichTextOptions {
|
|
1384
2094
|
style: TextStyle;
|
|
2095
|
+
/** The design's code family for runs with `code: true`; `monospace` when absent. */
|
|
2096
|
+
codeFontFamily?: string;
|
|
1385
2097
|
textMeasurement?: TextMeasurement;
|
|
1386
2098
|
/** Use one measured line advance for every line, as native table cells do. */
|
|
1387
2099
|
uniformLineHeight?: boolean;
|
|
@@ -1469,8 +2181,14 @@ interface TableLayoutOptions {
|
|
|
1469
2181
|
scale?: number;
|
|
1470
2182
|
minFontSize?: number;
|
|
1471
2183
|
fontFamily?: string;
|
|
2184
|
+
/** The design's code family for cell runs with `code: true`. */
|
|
2185
|
+
codeFontFamily?: string;
|
|
1472
2186
|
textMeasurement?: TextMeasurement;
|
|
1473
2187
|
path?: string;
|
|
2188
|
+
/** RR-54: the document, for a dataset-backed table (`{ dataset }`): its headers, rows and column formats come from `datasets`. */
|
|
2189
|
+
presentation?: {
|
|
2190
|
+
datasets?: unknown;
|
|
2191
|
+
};
|
|
1474
2192
|
/**
|
|
1475
2193
|
* Deck direction. A right-to-left deck lays the columns out right to left: the first column is the rightmost
|
|
1476
2194
|
* and each cell's text reports its paragraph direction (RR-05).
|
|
@@ -1520,4 +2238,4 @@ declare function resolveCanvasDimensions(input: unknown): {
|
|
|
1520
2238
|
height: number;
|
|
1521
2239
|
};
|
|
1522
2240
|
|
|
1523
|
-
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 };
|