@openpresentation/opf 0.10.1 → 0.11.1
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/dist/{catalogs-DoVmvDr7.d.ts → catalogs-DJ-B5ZyD.d.ts} +79 -9
- package/dist/catalogs.d.ts +2 -2
- package/dist/catalogs.js +1 -1
- package/dist/{chunk-PQJRDNA6.js → chunk-6UPHKXI5.js} +381 -34
- package/dist/{chunk-TU7I3KSB.js → chunk-7LF37SG3.js} +7400 -5422
- package/dist/{chunk-EWJNRHXA.js → chunk-BP6WMSSS.js} +3 -3
- package/dist/{chunk-FHGJX5QK.js → chunk-KWIOQ3QR.js} +73 -32
- package/dist/{chunk-D3GQIREP.js → chunk-LTSDDBNW.js} +558 -52
- package/dist/{chunk-ZIL7MGZU.js → chunk-M4GTWRK7.js} +333 -102
- package/dist/chunk-NPYN4TZ5.js +3516 -0
- package/dist/{chunk-RS5GZ5RW.js → chunk-SDETQV7Y.js} +161 -0
- package/dist/composition-DzLwY-Mi.d.ts +887 -0
- package/dist/composition.d.ts +1 -676
- package/dist/composition.js +1 -1
- package/dist/docs.js +80 -20
- package/dist/examples.d.ts +1 -1
- package/dist/examples.js +11 -11
- package/dist/font-policy.d.ts +123 -0
- package/dist/font-policy.js +1 -0
- package/dist/index.d.ts +184 -4
- package/dist/index.js +473 -7
- package/dist/lint.d.ts +3 -3
- package/dist/lint.js +5 -5
- package/dist/pagination.d.ts +6 -2
- package/dist/pagination.js +5 -5
- package/dist/{presentation-BMTdX6O1.d.ts → presentation-bceTClm8.d.ts} +297 -30
- package/dist/repo-readme.js +1 -1
- package/dist/{schemas-BYe5y8-i.d.ts → schemas-X_NniU4A.d.ts} +8 -0
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.js +1 -1
- package/dist/spec/catalogs/audiences/academic.json +24 -0
- package/dist/spec/catalogs/audiences/all-hands.json +3 -1
- package/dist/spec/catalogs/audiences/board.json +3 -1
- package/dist/spec/catalogs/audiences/customer.json +25 -0
- package/dist/spec/catalogs/audiences/executive.json +24 -0
- package/dist/spec/catalogs/audiences/general-public.json +25 -0
- package/dist/spec/catalogs/audiences/index.json +73 -1
- package/dist/spec/catalogs/audiences/internal-team.json +25 -0
- package/dist/spec/catalogs/audiences/investor.json +25 -0
- package/dist/spec/catalogs/audiences/marketing.json +25 -0
- package/dist/spec/catalogs/audiences/media.json +24 -0
- package/dist/spec/catalogs/audiences/partner.json +25 -0
- package/dist/spec/catalogs/audiences/regulatory.json +25 -0
- package/dist/spec/catalogs/audiences/sales.json +25 -0
- package/dist/spec/catalogs/audiences/technical.json +25 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/area.json +5 -0
- package/dist/spec/catalogs/chart-types/australia.json +10 -0
- package/dist/spec/catalogs/chart-types/bar.json +5 -0
- package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/box-and-whisker.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-bar.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-column-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-column-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-column.json +5 -0
- package/dist/spec/catalogs/chart-types/canada.json +10 -0
- package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/clustered-column.json +10 -0
- package/dist/spec/catalogs/chart-types/column.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-4x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-5x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-6x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot.json +5 -0
- package/dist/spec/catalogs/chart-types/doughnut.json +5 -0
- package/dist/spec/catalogs/chart-types/dumbbell.json +5 -0
- package/dist/spec/catalogs/chart-types/filled-radar.json +5 -0
- package/dist/spec/catalogs/chart-types/funnel.json +5 -0
- package/dist/spec/catalogs/chart-types/histogram.json +5 -0
- package/dist/spec/catalogs/chart-types/index.json +333 -233
- package/dist/spec/catalogs/chart-types/line-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +5 -0
- package/dist/spec/catalogs/chart-types/line-with-high-low.json +5 -0
- package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-with-markers.json +5 -0
- package/dist/spec/catalogs/chart-types/line.json +5 -0
- package/dist/spec/catalogs/chart-types/pareto.json +9 -14
- package/dist/spec/catalogs/chart-types/pie.json +5 -0
- package/dist/spec/catalogs/chart-types/radar-with-markers.json +5 -0
- package/dist/spec/catalogs/chart-types/radar.json +5 -0
- package/dist/spec/catalogs/chart-types/scatter.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-4x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-5x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-6x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline.json +5 -0
- package/dist/spec/catalogs/chart-types/stacked-area-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-area-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-column-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-column-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-line-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-line-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/treemap-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/treemap-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/treemap.json +5 -0
- package/dist/spec/catalogs/chart-types/united-kingdom.json +10 -0
- package/dist/spec/catalogs/chart-types/united-states.json +10 -0
- package/dist/spec/catalogs/chart-types/waterfall.json +5 -0
- package/dist/spec/catalogs/chart-types/world.json +6 -1
- package/dist/spec/catalogs/font-schemes/consolas.json +3 -0
- package/dist/spec/catalogs/font-schemes/courier-new.json +3 -0
- package/dist/spec/catalogs/languages/afrikaans.json +3 -0
- package/dist/spec/catalogs/languages/albanian.json +3 -0
- package/dist/spec/catalogs/languages/amharic.json +3 -0
- package/dist/spec/catalogs/languages/arabic.json +3 -0
- package/dist/spec/catalogs/languages/armenian.json +3 -0
- package/dist/spec/catalogs/languages/aymara.json +3 -0
- package/dist/spec/catalogs/languages/azerbaijani.json +3 -0
- package/dist/spec/catalogs/languages/bengali.json +3 -0
- package/dist/spec/catalogs/languages/berber-latin.json +3 -0
- package/dist/spec/catalogs/languages/bosnian-latin.json +3 -0
- package/dist/spec/catalogs/languages/bulgarian.json +3 -0
- package/dist/spec/catalogs/languages/catalan.json +3 -0
- package/dist/spec/catalogs/languages/cebuano.json +3 -0
- package/dist/spec/catalogs/languages/chinese-simplified.json +3 -0
- package/dist/spec/catalogs/languages/chinese-traditional.json +3 -0
- package/dist/spec/catalogs/languages/chittagonian.json +3 -0
- package/dist/spec/catalogs/languages/croatian.json +3 -0
- package/dist/spec/catalogs/languages/czech.json +3 -0
- package/dist/spec/catalogs/languages/danish.json +3 -0
- package/dist/spec/catalogs/languages/dutch.json +3 -0
- package/dist/spec/catalogs/languages/english-au.json +3 -0
- package/dist/spec/catalogs/languages/english-ca.json +3 -0
- package/dist/spec/catalogs/languages/english-gb.json +3 -0
- package/dist/spec/catalogs/languages/english-in.json +3 -0
- package/dist/spec/catalogs/languages/english-us.json +3 -0
- package/dist/spec/catalogs/languages/english.json +3 -0
- package/dist/spec/catalogs/languages/estonian.json +3 -0
- package/dist/spec/catalogs/languages/filipino.json +3 -0
- package/dist/spec/catalogs/languages/finnish.json +3 -0
- package/dist/spec/catalogs/languages/french.json +3 -0
- package/dist/spec/catalogs/languages/fulfulde.json +3 -0
- package/dist/spec/catalogs/languages/galician.json +3 -0
- package/dist/spec/catalogs/languages/georgian.json +3 -0
- package/dist/spec/catalogs/languages/german.json +3 -0
- package/dist/spec/catalogs/languages/greek.json +3 -0
- package/dist/spec/catalogs/languages/gujarati.json +3 -0
- package/dist/spec/catalogs/languages/hausa.json +3 -0
- package/dist/spec/catalogs/languages/hebrew.json +3 -0
- package/dist/spec/catalogs/languages/hindi.json +3 -0
- package/dist/spec/catalogs/languages/hungarian.json +3 -0
- package/dist/spec/catalogs/languages/igbo.json +3 -0
- package/dist/spec/catalogs/languages/indonesian.json +3 -0
- package/dist/spec/catalogs/languages/italian.json +3 -0
- package/dist/spec/catalogs/languages/japanese.json +3 -0
- package/dist/spec/catalogs/languages/kannada.json +3 -0
- package/dist/spec/catalogs/languages/kazakh.json +3 -0
- package/dist/spec/catalogs/languages/khmer.json +3 -0
- package/dist/spec/catalogs/languages/kinyarwanda.json +3 -0
- package/dist/spec/catalogs/languages/korean.json +3 -0
- package/dist/spec/catalogs/languages/kurmanji.json +3 -0
- package/dist/spec/catalogs/languages/latvian.json +3 -0
- package/dist/spec/catalogs/languages/lithuanian.json +3 -0
- package/dist/spec/catalogs/languages/macedonian.json +3 -0
- package/dist/spec/catalogs/languages/malagasy.json +3 -0
- package/dist/spec/catalogs/languages/malay.json +3 -0
- package/dist/spec/catalogs/languages/malayalam.json +3 -0
- package/dist/spec/catalogs/languages/maori.json +3 -0
- package/dist/spec/catalogs/languages/marathi.json +3 -0
- package/dist/spec/catalogs/languages/mongolian.json +3 -0
- package/dist/spec/catalogs/languages/nepali.json +3 -0
- package/dist/spec/catalogs/languages/norwegian.json +3 -0
- package/dist/spec/catalogs/languages/odia.json +3 -0
- package/dist/spec/catalogs/languages/oromo.json +3 -0
- package/dist/spec/catalogs/languages/pashto.json +3 -0
- package/dist/spec/catalogs/languages/persian.json +3 -0
- package/dist/spec/catalogs/languages/polish.json +3 -0
- package/dist/spec/catalogs/languages/portuguese.json +3 -0
- package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +3 -0
- package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +3 -0
- package/dist/spec/catalogs/languages/romanian.json +3 -0
- package/dist/spec/catalogs/languages/russian.json +3 -0
- package/dist/spec/catalogs/languages/serbian-cyrillic.json +3 -0
- package/dist/spec/catalogs/languages/serbian-latin.json +3 -0
- package/dist/spec/catalogs/languages/shona.json +3 -0
- package/dist/spec/catalogs/languages/slovak.json +3 -0
- package/dist/spec/catalogs/languages/slovenian.json +3 -0
- package/dist/spec/catalogs/languages/somali.json +3 -0
- package/dist/spec/catalogs/languages/spanish.json +3 -0
- package/dist/spec/catalogs/languages/swahili.json +3 -0
- package/dist/spec/catalogs/languages/swedish.json +3 -0
- package/dist/spec/catalogs/languages/tagalog.json +3 -0
- package/dist/spec/catalogs/languages/tajik.json +3 -0
- package/dist/spec/catalogs/languages/tamil.json +3 -0
- package/dist/spec/catalogs/languages/telugu.json +3 -0
- package/dist/spec/catalogs/languages/thai.json +3 -0
- package/dist/spec/catalogs/languages/turkish.json +3 -0
- package/dist/spec/catalogs/languages/ukrainian.json +3 -0
- package/dist/spec/catalogs/languages/urdu.json +3 -0
- package/dist/spec/catalogs/languages/uzbek-latin.json +3 -0
- package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +3 -0
- package/dist/spec/catalogs/languages/xhosa.json +3 -0
- package/dist/spec/catalogs/languages/yoruba.json +3 -0
- package/dist/spec/catalogs/languages/zulu.json +3 -0
- package/dist/spec/catalogs/narratives/board-meeting.json +21 -21
- package/dist/spec/catalogs/narratives/business-narrative.json +8 -8
- package/dist/spec/catalogs/narratives/business-review.json +12 -12
- package/dist/spec/catalogs/narratives/capacity-planning.json +8 -8
- package/dist/spec/catalogs/narratives/challenge-resolution.json +7 -7
- package/dist/spec/catalogs/narratives/change-story.json +64 -0
- package/dist/spec/catalogs/narratives/classic-story.json +7 -7
- package/dist/spec/catalogs/narratives/company-intro.json +9 -9
- package/dist/spec/catalogs/narratives/conference-talk.json +1 -1
- package/dist/spec/catalogs/narratives/data-story.json +66 -0
- package/dist/spec/catalogs/narratives/early-startup-pitch.json +12 -12
- package/dist/spec/catalogs/narratives/educate.json +9 -9
- package/dist/spec/catalogs/narratives/employee-review.json +8 -8
- package/dist/spec/catalogs/narratives/failure-analysis.json +10 -10
- package/dist/spec/catalogs/narratives/focus.json +12 -12
- package/dist/spec/catalogs/narratives/golden-circle.json +1 -1
- package/dist/spec/catalogs/narratives/heros-journey.json +64 -0
- package/dist/spec/catalogs/narratives/index.json +81 -0
- package/dist/spec/catalogs/narratives/innovation.json +9 -9
- package/dist/spec/catalogs/narratives/justice.json +11 -11
- package/dist/spec/catalogs/narratives/marketing-strategy.json +11 -11
- package/dist/spec/catalogs/narratives/performance-improvement-plan.json +8 -8
- package/dist/spec/catalogs/narratives/performance-review.json +11 -11
- package/dist/spec/catalogs/narratives/persuade.json +7 -7
- package/dist/spec/catalogs/narratives/persuasive-sales.json +8 -8
- package/dist/spec/catalogs/narratives/pitch-deck.json +3 -3
- package/dist/spec/catalogs/narratives/problem-solution.json +2 -2
- package/dist/spec/catalogs/narratives/product-launch.json +10 -10
- package/dist/spec/catalogs/narratives/project-proposal.json +10 -10
- package/dist/spec/catalogs/narratives/pyramid-principle.json +48 -0
- package/dist/spec/catalogs/narratives/qbr.json +3 -3
- package/dist/spec/catalogs/narratives/rags-to-riches.json +7 -7
- package/dist/spec/catalogs/narratives/reveal.json +8 -8
- package/dist/spec/catalogs/narratives/scqa.json +1 -1
- package/dist/spec/catalogs/narratives/situation-complication-resolution.json +56 -0
- package/dist/spec/catalogs/narratives/sparkline.json +56 -0
- package/dist/spec/catalogs/narratives/star-method.json +56 -0
- package/dist/spec/catalogs/narratives/status-update.json +6 -6
- package/dist/spec/catalogs/narratives/strategic-advisory.json +7 -7
- package/dist/spec/catalogs/narratives/strategic-narrative.json +1 -1
- package/dist/spec/catalogs/narratives/survey-analysis.json +10 -10
- package/dist/spec/catalogs/narratives/survival-story.json +10 -10
- package/dist/spec/catalogs/narratives/transformation-arc.json +1 -1
- package/dist/spec/catalogs/narratives/trend-analysis.json +7 -7
- package/dist/spec/catalogs/narratives/underdog-victory.json +8 -8
- package/dist/spec/catalogs/narratives/venture-pitch.json +12 -12
- package/dist/spec/catalogs/narratives/vision-roadmap.json +65 -0
- package/dist/spec/catalogs/narratives/weekly-progress.json +10 -10
- package/dist/spec/catalogs/narratives/what-so-what-now-what.json +48 -0
- package/dist/spec/openapi.yaml +5 -0
- package/dist/spec/reference/engine-defaults.json +2 -2
- package/dist/spec/reference/font-policy.json +3435 -0
- package/dist/spec/reference/font-policy.schema.json +328 -0
- package/dist/spec/schemas/chart-type.schema.json +51 -11
- package/dist/spec/schemas/font-scheme.schema.json +91 -1
- package/dist/spec/schemas/language.schema.json +10 -5
- package/dist/spec/schemas/opf.schema.json +241 -32
- package/dist/spec-files.d.ts +1 -1
- package/dist/spec-files.js +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/validator.d.ts +7 -4
- package/dist/validator.js +4 -4
- package/package.json +6 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { validatePresentation, validationDefinition, validateCatalogRecord } from './chunk-
|
|
2
|
-
import { schemas, schemaEntries } from './chunk-
|
|
3
|
-
import { catalogKinds, catalogEntries, catalogSchemaNames } from './chunk-
|
|
1
|
+
import { validatePresentation, validationDefinition, validateCatalogRecord } from './chunk-M4GTWRK7.js';
|
|
2
|
+
import { schemas, schemaEntries } from './chunk-LTSDDBNW.js';
|
|
3
|
+
import { catalogKinds, catalogEntries, catalogSchemaNames } from './chunk-7LF37SG3.js';
|
|
4
4
|
import { parseTree, printParseErrorCode, getNodePath } from 'jsonc-parser';
|
|
5
5
|
|
|
6
6
|
var own = (value, key) => Object.hasOwn(value, key);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { assertValidPresentation } from './chunk-
|
|
2
|
-
import { resolveFontFamilies, resolveCanvasDimensions, composeSlide, tableRowBoundaries } from './chunk-
|
|
3
|
-
import { catalogs } from './chunk-
|
|
1
|
+
import { assertValidPresentation, visitContentPayloads } from './chunk-M4GTWRK7.js';
|
|
2
|
+
import { DEFAULT_FONT_SCHEME, resolveFontSchemeReference, resolveFontFamilies, resolveCanvasDimensions, composeSlide, tableRowBoundaries } from './chunk-6UPHKXI5.js';
|
|
3
|
+
import { catalogs } from './chunk-7LF37SG3.js';
|
|
4
4
|
|
|
5
5
|
// src/pagination.ts
|
|
6
6
|
var OPFPaginationError = class extends Error {
|
|
@@ -16,6 +16,13 @@ var contentFields = /* @__PURE__ */ new Set(["text", "items", "bullets", "image"
|
|
|
16
16
|
var headingFields = /* @__PURE__ */ new Set(["title", "subtitle", "tag"]);
|
|
17
17
|
var isRecord = (v) => !!v && typeof v === "object" && !Array.isArray(v);
|
|
18
18
|
var clone = (value) => structuredClone(value);
|
|
19
|
+
var slideIds = (slide) => {
|
|
20
|
+
const ids = typeof slide.id === "string" ? [slide.id] : [];
|
|
21
|
+
visitContentPayloads(slide, "", (payload) => {
|
|
22
|
+
if (typeof payload.id === "string") ids.push(payload.id);
|
|
23
|
+
});
|
|
24
|
+
return ids;
|
|
25
|
+
};
|
|
19
26
|
var textOf = (value) => typeof value === "string" ? value : Array.isArray(value) ? value.map(textOf).join("") : value?.text ?? "";
|
|
20
27
|
var graphemes = new Intl.Segmenter("und", { granularity: "grapheme" });
|
|
21
28
|
function sliceRichText(value, start, end) {
|
|
@@ -105,7 +112,26 @@ function paginateSlide(input, options = {}) {
|
|
|
105
112
|
const slides = [], pages = [];
|
|
106
113
|
let selected = /* @__PURE__ */ new Map();
|
|
107
114
|
const reservedIds = new Set(options.reservedIds ?? []);
|
|
108
|
-
|
|
115
|
+
for (const id of slideIds(source)) reservedIds.add(id);
|
|
116
|
+
const emittedIds = /* @__PURE__ */ new Set();
|
|
117
|
+
const pageId = (base, pageIndex) => {
|
|
118
|
+
if (!emittedIds.has(base)) {
|
|
119
|
+
emittedIds.add(base);
|
|
120
|
+
return base;
|
|
121
|
+
}
|
|
122
|
+
let suffix = pageIndex + 1, id = `${base}--${suffix}`;
|
|
123
|
+
while (reservedIds.has(id)) id = `${base}--${++suffix}`;
|
|
124
|
+
reservedIds.add(id);
|
|
125
|
+
emittedIds.add(id);
|
|
126
|
+
return id;
|
|
127
|
+
};
|
|
128
|
+
const assignPageIds = (slide, pageIndex) => {
|
|
129
|
+
const assign = (node) => {
|
|
130
|
+
if (typeof node.id === "string") node.id = pageId(node.id, pageIndex);
|
|
131
|
+
};
|
|
132
|
+
assign(slide);
|
|
133
|
+
visitContentPayloads(slide, "", assign);
|
|
134
|
+
};
|
|
109
135
|
const project = (portions, pageIndex) => {
|
|
110
136
|
const mappings = [];
|
|
111
137
|
const visit = (node, path, out, root = false) => {
|
|
@@ -151,12 +177,7 @@ function paginateSlide(input, options = {}) {
|
|
|
151
177
|
const { slide, mappings } = project(selected, slides.length);
|
|
152
178
|
const issues = geometry(slide, slides.length).diagnostics;
|
|
153
179
|
if (issues.length) throw new OPFPaginationError("A continuation page does not fit at its final page number. No partial result was returned.", issues);
|
|
154
|
-
|
|
155
|
-
let suffix = slides.length + 1, id = `${source.id}--${suffix}`;
|
|
156
|
-
while (reservedIds.has(id)) id = `${source.id}--${++suffix}`;
|
|
157
|
-
slide.id = id;
|
|
158
|
-
reservedIds.add(id);
|
|
159
|
-
}
|
|
180
|
+
assignPageIds(slide, slides.length);
|
|
160
181
|
assertValidPresentation({ slides: [slide] });
|
|
161
182
|
slides.push(slide);
|
|
162
183
|
pages.push({ slideIndex: sourceIndex + slides.length - 1, mappings, ...initial.furniture ? { repeatedMappings: repeatedMappings(slides.length - 1) } : {} });
|
|
@@ -209,35 +230,55 @@ function paginateSlide(input, options = {}) {
|
|
|
209
230
|
if (!slides.length) throw new OPFPaginationError("No body content can be paginated.", initial.diagnostics);
|
|
210
231
|
return { slides, pages };
|
|
211
232
|
}
|
|
233
|
+
var usesSlideTotal = (presentation) => [presentation, ...presentation.slides].some((owner) => ["header", "footer"].some((kind) => ["left", "center", "right"].some((zone) => {
|
|
234
|
+
const content = owner?.design?.[kind]?.[zone];
|
|
235
|
+
return content?.slideNumber === true && typeof content.slideNumberFormat === "string" && content.slideNumberFormat.includes("{total}");
|
|
236
|
+
})));
|
|
212
237
|
function paginatePresentation(input, options = {}) {
|
|
213
238
|
assertValidPresentation(input);
|
|
214
239
|
const presentation = clone(input);
|
|
215
240
|
const maxSlides = options.maxSlides ?? 100;
|
|
216
241
|
if (!Number.isInteger(maxSlides) || maxSlides < 1 || maxSlides > 1e4) throw new RangeError("maxSlides must be an integer between 1 and 10000.");
|
|
217
|
-
const
|
|
218
|
-
const reservedIds = presentation.slides.map((slide) => slide.id).filter(Boolean);
|
|
242
|
+
const authoredIds = presentation.slides.flatMap((slide) => slideIds(slide));
|
|
219
243
|
const resolve = (kind, id) => presentation.catalogs?.[kind]?.records?.find((record) => record.id === id) ?? catalogs[kind].find((record) => record.id === id);
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
244
|
+
const reported = /* @__PURE__ */ new Set();
|
|
245
|
+
const run = (slideCount2) => {
|
|
246
|
+
const output2 = [], pages2 = [], reservedIds = [...authoredIds];
|
|
247
|
+
presentation.slides.forEach((slide, index) => {
|
|
248
|
+
const overrides = options.slideOptions?.(slide, index) ?? {};
|
|
249
|
+
const layout = overrides.layout ?? (slide.layout ? resolve("layouts", slide.layout) : void 0);
|
|
250
|
+
if (slide.layout && !layout) throw new OPFPaginationError(`Layout '${slide.layout}' must be supplied inline or resolved by the host before pagination.`);
|
|
251
|
+
const design = { ...presentation.design, ...slide.design };
|
|
252
|
+
const reference = design.theme ?? "minimal";
|
|
253
|
+
const theme = typeof reference === "string" ? resolve("themes", reference) : { ...resolve("themes", reference.id), ...reference };
|
|
254
|
+
if (!theme) throw new OPFPaginationError(`Theme '${reference}' must be supplied inline before pagination.`);
|
|
255
|
+
if (output2.length >= maxSlides) throw new OPFPaginationError(`Pagination needs more than ${maxSlides} slides. No partial result was returned.`);
|
|
256
|
+
const fontReference = design.fontScheme ?? theme.fontScheme ?? DEFAULT_FONT_SCHEME;
|
|
257
|
+
const fontPath = slide.design?.fontScheme !== void 0 ? `slides.${index}.design.fontScheme` : presentation.design?.fontScheme !== void 0 ? "design.fontScheme" : slide.design?.theme !== void 0 ? `slides.${index}.design.theme` : "design.theme";
|
|
258
|
+
const { scheme: fontScheme, diagnostic } = resolveFontSchemeReference(fontReference, (id) => resolve("fontSchemes", id), fontPath);
|
|
259
|
+
if (diagnostic && !reported.has(diagnostic.path)) {
|
|
260
|
+
reported.add(diagnostic.path);
|
|
261
|
+
options.onDiagnostic?.(diagnostic);
|
|
262
|
+
}
|
|
263
|
+
const fonts = resolveFontFamilies(fontScheme);
|
|
264
|
+
const result2 = paginateSlide(slide, { ...resolveCanvasDimensions(design.dimensions ?? theme.dimensions), layout, fonts, contentAlignment: design.contentAlignment, titleAlignment: design.titleAlignment, contentBox: design.contentBox, textMeasurement: options.textMeasurement, textRasterPadding: options.textRasterPadding, socialPlatforms: catalogs.socialPlatforms, ...overrides, presentation, slideIndex: index, slideNumber: output2.length + 1, slideCount: slideCount2, date: options.date, maxSlides: maxSlides - output2.length, minFontSize: options.minFontSize, reservedIds });
|
|
265
|
+
const outputStart = output2.length;
|
|
266
|
+
result2.pages.forEach((page, pageIndex) => {
|
|
267
|
+
const remap = (mapping) => ({ ...mapping, outputPath: mapping.outputPath.replace(/^slides\.\d+/, `slides.${outputStart + pageIndex}`) });
|
|
268
|
+
pages2.push({ sourceSlideIndex: index, slideIndex: outputStart + pageIndex, mappings: page.mappings.map(remap), ...page.repeatedMappings ? { repeatedMappings: page.repeatedMappings.map(remap) } : {} });
|
|
269
|
+
});
|
|
270
|
+
output2.push(...result2.slides);
|
|
271
|
+
reservedIds.push(...result2.slides.flatMap((slide2) => slideIds(slide2)));
|
|
237
272
|
});
|
|
238
|
-
output
|
|
239
|
-
|
|
240
|
-
|
|
273
|
+
return { output: output2, pages: pages2 };
|
|
274
|
+
};
|
|
275
|
+
let slideCount = presentation.slides.length, result = run(slideCount);
|
|
276
|
+
for (let attempt = 0; usesSlideTotal(presentation) && result.output.length !== slideCount; attempt++) {
|
|
277
|
+
if (attempt >= 3) throw new OPFPaginationError("Slide-number totals did not converge. Change the slide-number format or split the input.");
|
|
278
|
+
slideCount = result.output.length;
|
|
279
|
+
result = run(slideCount);
|
|
280
|
+
}
|
|
281
|
+
const { output, pages } = result;
|
|
241
282
|
presentation.slides = output;
|
|
242
283
|
assertValidPresentation(presentation);
|
|
243
284
|
return { presentation, pages };
|