@openpresentation/opf 0.22.2 → 0.23.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.
Files changed (58) hide show
  1. package/dist/browser.js +16 -16
  2. package/dist/{chunk-MAJHCGOW.js → chunk-3FWUA763.js} +4 -4
  3. package/dist/{chunk-SPCONMIY.js → chunk-4I3XPRAO.js} +1 -1
  4. package/dist/{chunk-7XNAMCGT.js → chunk-B2XALDGS.js} +6 -6
  5. package/dist/{chunk-AHKRJSCF.js → chunk-BOWBPSFF.js} +6 -6
  6. package/dist/{chunk-YUIEWE5B.js → chunk-CNOLYQ4C.js} +2 -2
  7. package/dist/{chunk-2SENTA2R.js → chunk-F55S5HDP.js} +1 -1
  8. package/dist/{chunk-23MOKE4B.js → chunk-L67MPTPZ.js} +43 -9
  9. package/dist/{chunk-VKNFZEMG.js → chunk-N3ZPLGK5.js} +137 -16
  10. package/dist/{chunk-KUNXFN7B.js → chunk-NIA2WEXN.js} +1 -1
  11. package/dist/{chunk-MG34DCDB.js → chunk-PLV7P236.js} +2 -2
  12. package/dist/{chunk-3T7MNRBY.js → chunk-TILQBXPZ.js} +1 -1
  13. package/dist/{chunk-BULGAKBY.js → chunk-TMOQ532D.js} +2 -2
  14. package/dist/{chunk-MLMTXXM4.js → chunk-VHNG75IH.js} +5 -5
  15. package/dist/{chunk-YSJRBRHB.js → chunk-VIOSRKMA.js} +1 -1
  16. package/dist/{chunk-SBWIZSPB.js → chunk-XKUEEDDN.js} +5 -5
  17. package/dist/{chunk-X3PQMMAY.js → chunk-YMBA3V2O.js} +1 -1
  18. package/dist/{chunk-3UAVON3O.js → chunk-ZIRSAFRC.js} +99 -0
  19. package/dist/{composition-CkHn6JrM.d.ts → composition-qX-igJe5.d.ts} +147 -15
  20. package/dist/composition.d.ts +1 -1
  21. package/dist/composition.js +1 -1
  22. package/dist/conversion-CY34E5WI.js +19 -0
  23. package/dist/{conversion-C_MOkYGH.d.ts → conversion-t-YYHWL-.d.ts} +5 -5
  24. package/dist/convert.d.ts +2 -2
  25. package/dist/convert.js +7 -7
  26. package/dist/data.d.ts +1 -1
  27. package/dist/data.js +2 -2
  28. package/dist/{deck-report-vnWmXBjq.d.ts → deck-report-CJ6gd_6-.d.ts} +2 -2
  29. package/dist/deck.d.ts +5 -5
  30. package/dist/deck.js +10 -10
  31. package/dist/diff.js +5 -5
  32. package/dist/docs.js +5 -5
  33. package/dist/examples.d.ts +1 -1
  34. package/dist/examples.js +213 -0
  35. package/dist/format.js +2 -2
  36. package/dist/index.d.ts +11 -11
  37. package/dist/index.js +20 -20
  38. package/dist/markdown.d.ts +3 -3
  39. package/dist/markdown.js +7 -7
  40. package/dist/node-engine.d.ts +7 -7
  41. package/dist/node-engine.js +20 -20
  42. package/dist/{pagination-C4jzAtFy.d.ts → pagination-LiWxhbsz.d.ts} +3 -1
  43. package/dist/pagination.d.ts +2 -2
  44. package/dist/pagination.js +4 -4
  45. package/dist/patch.js +4 -4
  46. package/dist/{presentation-fN6tORPZ.d.ts → presentation-Dn-fm0iY.d.ts} +35 -0
  47. package/dist/schemas.d.ts +2 -0
  48. package/dist/schemas.js +1 -1
  49. package/dist/spec/schemas/opf.schema.json +40 -0
  50. package/dist/types.d.ts +1 -1
  51. package/dist/{validation-types-B21fZfb2.d.ts → validation-types-CzPKoKWo.d.ts} +1 -1
  52. package/dist/{validator-Cflv4F9e.d.ts → validator-BuAV_HUo.d.ts} +2 -2
  53. package/dist/validator.d.ts +4 -4
  54. package/dist/validator.js +3 -3
  55. package/dist/yaml.d.ts +3 -3
  56. package/dist/yaml.js +7 -7
  57. package/package.json +3 -3
  58. package/dist/conversion-LBQMY7LX.js +0 -19
package/dist/browser.js CHANGED
@@ -1,20 +1,20 @@
1
- import { OPFApiError } from './chunk-MAJHCGOW.js';
2
- export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, localAssetSources, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-MAJHCGOW.js';
1
+ import { OPFApiError } from './chunk-3FWUA763.js';
2
+ export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, localAssetSources, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-3FWUA763.js';
3
3
  export { specFileEntries, specFileKinds, specFilePaths } from './chunk-UJSAR6GF.js';
4
- export { OPFDataImportError, ingest, parseTabularData } from './chunk-SPCONMIY.js';
5
- export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-MLMTXXM4.js';
6
- export { fromMarkdown, toMarkdown } from './chunk-SBWIZSPB.js';
7
- import './chunk-7XNAMCGT.js';
8
- export { OPFMarkdownError } from './chunk-3T7MNRBY.js';
9
- export { diff, merge } from './chunk-BULGAKBY.js';
10
- export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-YSJRBRHB.js';
11
- export { OPFFormatError, format } from './chunk-X3PQMMAY.js';
12
- export { OPFPaginationError, paginate, paginateSlide } from './chunk-YUIEWE5B.js';
13
- import './chunk-KUNXFN7B.js';
14
- import './chunk-2SENTA2R.js';
15
- export { CATALOG_SCHEMA, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-23MOKE4B.js';
16
- export { CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, LOGO_SHAPES, OPFCatalogsOptionError, OPFUnresolvedReferenceError, OPFVariableError, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, VARIABLE_KINDS, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, parseReference, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveReference, resolveSlideVariables, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unresolvedReference, unusedDatasets, variableDeclarations } from './chunk-VKNFZEMG.js';
17
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-3UAVON3O.js';
4
+ export { OPFDataImportError, ingest, parseTabularData } from './chunk-4I3XPRAO.js';
5
+ export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-VHNG75IH.js';
6
+ export { fromMarkdown, toMarkdown } from './chunk-XKUEEDDN.js';
7
+ import './chunk-B2XALDGS.js';
8
+ export { OPFMarkdownError } from './chunk-TILQBXPZ.js';
9
+ export { diff, merge } from './chunk-TMOQ532D.js';
10
+ export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-VIOSRKMA.js';
11
+ export { OPFFormatError, format } from './chunk-YMBA3V2O.js';
12
+ export { OPFPaginationError, paginate, paginateSlide } from './chunk-CNOLYQ4C.js';
13
+ import './chunk-NIA2WEXN.js';
14
+ import './chunk-F55S5HDP.js';
15
+ export { CATALOG_SCHEMA, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-L67MPTPZ.js';
16
+ export { CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, LOGO_SHAPES, OPFCatalogsOptionError, OPFUnresolvedReferenceError, OPFVariableError, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, VARIABLE_KINDS, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, parseReference, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveReference, resolveSlideVariables, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unresolvedReference, unusedDatasets, variableDeclarations } from './chunk-N3ZPLGK5.js';
17
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-ZIRSAFRC.js';
18
18
  export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-F7PLNWHQ.js';
19
19
 
20
20
  // src/browser.ts
@@ -1,7 +1,7 @@
1
- import { OPFDataImportError, parseTabularData } from './chunk-SPCONMIY.js';
2
- import { applyPatchWithInverse } from './chunk-YSJRBRHB.js';
3
- import { validate, OPFValidationError } from './chunk-23MOKE4B.js';
4
- import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN, isRecord, visitContentPayloads, annotationText, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-VKNFZEMG.js';
1
+ import { OPFDataImportError, parseTabularData } from './chunk-4I3XPRAO.js';
2
+ import { applyPatchWithInverse } from './chunk-VIOSRKMA.js';
3
+ import { validate, OPFValidationError } from './chunk-L67MPTPZ.js';
4
+ import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN, isRecord, visitContentPayloads, annotationText, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-N3ZPLGK5.js';
5
5
 
6
6
  // src/api-errors.ts
7
7
  var OPFApiError = class extends Error {
@@ -1,4 +1,4 @@
1
- import { chartNumber } from './chunk-VKNFZEMG.js';
1
+ import { chartNumber } from './chunk-N3ZPLGK5.js';
2
2
 
3
3
  // src/data.ts
4
4
  var OPFDataImportError = class extends Error {
@@ -1,9 +1,9 @@
1
- import { NOT_CHECKED, Ctx } from './chunk-3T7MNRBY.js';
2
- import { sortPresentationKeys } from './chunk-X3PQMMAY.js';
3
- import { same } from './chunk-2SENTA2R.js';
4
- import { validate } from './chunk-23MOKE4B.js';
5
- import { checkCatalogsOption } from './chunk-VKNFZEMG.js';
6
- import { presentation } from './chunk-3UAVON3O.js';
1
+ import { NOT_CHECKED, Ctx } from './chunk-TILQBXPZ.js';
2
+ import { sortPresentationKeys } from './chunk-YMBA3V2O.js';
3
+ import { same } from './chunk-F55S5HDP.js';
4
+ import { validate } from './chunk-L67MPTPZ.js';
5
+ import { checkCatalogsOption } from './chunk-N3ZPLGK5.js';
6
+ import { presentation } from './chunk-ZIRSAFRC.js';
7
7
  import { Parser, parseDocument, isMap, Document, visit, isScalar, isAlias, isSeq } from 'yaml';
8
8
 
9
9
  var MAX_ALIAS_COUNT = 100;
@@ -1,8 +1,8 @@
1
- import { defaultCatalogs } from './chunk-MG34DCDB.js';
2
- import { localAssetSources, OPFApiError, parseSlideSelection, OPFExportError, asApiError, OPFImportError } from './chunk-MAJHCGOW.js';
3
- import { deckFormatOf, readDeckReport, stringify } from './chunk-MLMTXXM4.js';
4
- import { paginate } from './chunk-YUIEWE5B.js';
5
- import { validate, OPFValidationError } from './chunk-23MOKE4B.js';
1
+ import { defaultCatalogs } from './chunk-PLV7P236.js';
2
+ import { localAssetSources, OPFApiError, parseSlideSelection, OPFExportError, asApiError, OPFImportError } from './chunk-3FWUA763.js';
3
+ import { deckFormatOf, readDeckReport, stringify } from './chunk-VHNG75IH.js';
4
+ import { paginate } from './chunk-CNOLYQ4C.js';
5
+ import { validate, OPFValidationError } from './chunk-L67MPTPZ.js';
6
6
  import { link, stat, readdir, lstat, readFile, open, unlink, mkdir, rename } from 'fs/promises';
7
7
  import path6 from 'path';
8
8
  import { readFileSync, statSync, realpathSync } from 'fs';
@@ -117,7 +117,7 @@ function localAssetProblems(deck, root) {
117
117
  }
118
118
  var RENDER_PACKAGE = "@openpresentation/opf-render";
119
119
  var PPTX_PACKAGE = "@openpresentation/opf-pptx";
120
- var PEER_RANGES = { [RENDER_PACKAGE]: "^0.22.0", [PPTX_PACKAGE]: "^0.22.0" };
120
+ var PEER_RANGES = { [RENDER_PACKAGE]: "^0.23.0", [PPTX_PACKAGE]: "^0.23.0" };
121
121
  var PPTX_TEXT_OPTIONS_FROM = "0.22.0";
122
122
  var numbers = (version) => version.replace(/[-+].*$/, "").split(".").map((part) => Number.parseInt(part, 10) || 0);
123
123
  function atLeast(version, minimum) {
@@ -1,5 +1,5 @@
1
- import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-23MOKE4B.js';
2
- import { resolveSlideVariables, checkCatalogsOption, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, regionAccepts, slideTokenSpans, sliceNumberedItems } from './chunk-VKNFZEMG.js';
1
+ import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-L67MPTPZ.js';
2
+ import { resolveSlideVariables, checkCatalogsOption, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, regionAccepts, slideTokenSpans, sliceNumberedItems } from './chunk-N3ZPLGK5.js';
3
3
 
4
4
  // src/pagination.ts
5
5
  var OPFPaginationError = class extends Error {
@@ -1,4 +1,4 @@
1
- import { validate } from './chunk-23MOKE4B.js';
1
+ import { validate } from './chunk-L67MPTPZ.js';
2
2
 
3
3
  // src/convert/shared.ts
4
4
  var CONTENT_KEYS = ["text", "items", "bullets", "image", "video", "chart", "table", "code", "metric", "quote", "timeline"];
@@ -1,5 +1,5 @@
1
- import { promotedRegionKeys, VARIABLE_KINDS, resolveChartData, chartPaletteForFill, chartSeriesPalette, normalizeHexColor, resolveChartColors, colorContrast, imageBackground, tableGrid, timelineTextColor, LOGO_SHAPES, visitContentPayloads, readingRows, visualReadingOrder, intrinsicImageSize, resolveReference, textWidthMeasurer, resolveColorRef, resolveDesignRecords, resolveFontFamilies, checkCatalogsOption, provenanceOf, unresolvedReference, OPFUnresolvedReferenceError, resolveColorRoles, resolveCanvasDimensions, resolveSlideVariables, defaultSlideBackground, isRecord, hasContentVariables, isTemplate, instantiateForValidation, layoutTemplateIssues, resolveScriptFonts, catalogReferenceSites, parseReference, catalogGroupDeclared, pointerPath, unusedDatasets, MAX_COMPOSITION_DEPTH, datasetDiagnostics, pathFor, catalogRecords, collectCitations, numberingFindings, walkCitationRuns, resolveTableData, resolveChartOptions, chartOptionTarget, codeHighlightLines, chartNumberFixesByCell, catalogKinds, catalogGroupSource, registeredCatalog, OPFCompositionError, composeSlide } from './chunk-VKNFZEMG.js';
2
- import { schemas, schemaEntries } from './chunk-3UAVON3O.js';
1
+ import { promotedRegionKeys, VARIABLE_KINDS, resolveChartData, chartPaletteForFill, chartSeriesPalette, normalizeHexColor, resolveChartColors, colorContrast, imageBackground, tableGrid, timelineTextColor, LOGO_SHAPES, visitContentPayloads, readingRows, visualReadingOrder, intrinsicImageSize, resolveReference, textWidthMeasurer, resolveColorRef, resolveDesignRecords, resolveFontFamilies, checkCatalogsOption, provenanceOf, unresolvedReference, OPFUnresolvedReferenceError, resolveColorRoles, resolveCanvasDimensions, resolveSlideVariables, normalizeColorVariant, isRecord, hasContentVariables, isTemplate, instantiateForValidation, layoutTemplateIssues, resolveScriptFonts, defaultSlideBackground, catalogReferenceSites, parseReference, catalogGroupDeclared, pointerPath, unusedDatasets, MAX_COMPOSITION_DEPTH, datasetDiagnostics, pathFor, catalogRecords, collectCitations, numberingFindings, walkCitationRuns, resolveTableData, resolveChartOptions, chartOptionTarget, codeHighlightLines, chartNumberFixesByCell, catalogKinds, catalogGroupSource, registeredCatalog, OPFCompositionError, composeSlide } from './chunk-N3ZPLGK5.js';
2
+ import { schemas, schemaEntries } from './chunk-ZIRSAFRC.js';
3
3
  import Ajv2020 from 'ajv/dist/2020.js';
4
4
  import addFormats from 'ajv-formats';
5
5
  import { parseTree, printParseErrorCode, getNodePath } from 'jsonc-parser';
@@ -1230,9 +1230,9 @@ function simulateVision(hex, model) {
1230
1230
  }
1231
1231
  var PAGE = "#FFFFFF";
1232
1232
  var colorFrom = (scheme, slot, fallback) => typeof slot === "string" ? slot.startsWith("#") ? normalizeHexColor(slot) ?? fallback : normalizeHexColor(scheme[slot]) ?? fallback : fallback;
1233
- function backdropOf(definition, scheme, text, variables) {
1233
+ function backdropOf(definition, scheme, text, variables, canvasColor) {
1234
1234
  const resolve2 = (value, fallback) => backgroundColorRef(value, scheme, variables, fallback);
1235
- const canvas = defaultSlideBackground(scheme);
1235
+ const canvas = canvasColor ?? defaultSlideBackground(scheme);
1236
1236
  if (!definition) return { kind: "solid", color: canvas };
1237
1237
  if (imageBackground(definition)) return { kind: "image", opacity: imageBackground(definition)?.opacity ?? 1, base: PAGE };
1238
1238
  if (typeof definition === "string") return { kind: "solid", color: colorFrom(scheme, definition, canvas) };
@@ -1299,6 +1299,34 @@ function decisionColor(definition, scheme, variables = {}) {
1299
1299
  return void 0;
1300
1300
  }
1301
1301
  }
1302
+ var THEME_SLOTS = /* @__PURE__ */ new Set(["light1", "light2", "dark1", "dark2"]);
1303
+ function colorChoice(levels, scheme, variables = {}) {
1304
+ let variantOnly = false;
1305
+ let picture;
1306
+ for (const level of levels) {
1307
+ const definition = level.background;
1308
+ const slot = typeof definition === "string" ? definition : rec(definition).type === "theme" ? rec(definition).slot : void 0;
1309
+ const themeSlot = THEME_SLOTS.has(slot) ? slot : void 0;
1310
+ const isPicture = imageBackground(definition) !== void 0 || rec(definition).type === "gradient";
1311
+ const variant = normalizeColorVariant(level.variant);
1312
+ if (variant) {
1313
+ const fill = definition !== void 0 && !variantOnly && !themeSlot && !isPicture ? decisionColor(definition, scheme, variables) : void 0;
1314
+ const own2 = definition !== void 0 && !variantOnly && !themeSlot;
1315
+ return { variant, ...fill ? { background: fill } : {}, drawn: variantOnly ? picture : { definition: own2 ? definition : void 0 } };
1316
+ }
1317
+ if (variantOnly || definition === void 0 || definition === null || definition === false) continue;
1318
+ if (themeSlot) return { variant: { background: themeSlot } };
1319
+ if (isPicture) {
1320
+ const tone = rec(definition).tone;
1321
+ if (tone === "dark" || tone === "light") return { variant: { background: tone === "dark" ? "dark1" : "light1" } };
1322
+ variantOnly = true;
1323
+ picture = { definition };
1324
+ continue;
1325
+ }
1326
+ return { background: decisionColor(definition, scheme, variables) };
1327
+ }
1328
+ return {};
1329
+ }
1302
1330
  function resolveDesign(document, index, context) {
1303
1331
  const deck = rec(document.design), own2 = rec(rec(rec(document.slides)[index]).design);
1304
1332
  const { options, diagnostics, resolved } = context;
@@ -1307,11 +1335,12 @@ function resolveDesign(document, index, context) {
1307
1335
  const fontDiagnostic = diagnostics.find((diagnostic) => diagnostic.kind === "fontSchemes");
1308
1336
  const dimensions = { width: options.width, height: options.height };
1309
1337
  const variables = rec(document.variables);
1310
- const roles = resolveColorRoles(colorScheme, { background: decisionColor(own2.background ?? deck.background ?? theme.background, colorScheme, variables) });
1338
+ const choice = colorChoice([own2, deck, theme], colorScheme, variables);
1339
+ const roles = resolveColorRoles(colorScheme, { background: choice.background, variant: choice.variant });
1311
1340
  const dark = roles.dark;
1312
1341
  const text = roles.text;
1313
- const backdrop = backdropOf(own2.background ?? deck.background ?? theme.background, colorScheme, text, variables);
1314
- const picture = imageBackground(own2.background ?? deck.background ?? theme.background);
1342
+ const backdrop = backdropOf(choice.drawn ? choice.drawn.definition : own2.background ?? deck.background ?? theme.background, colorScheme, text, variables, roles.map.bg1 === "light1" ? void 0 : roles.background);
1343
+ const picture = imageBackground(choice.drawn ? choice.drawn.definition : own2.background ?? deck.background ?? theme.background);
1315
1344
  const backgroundImage = picture && own2.background !== void 0 ? { source: picture.src, fit: picture.fit, path: `/slides/${index}/design/background` } : picture && deck.background !== void 0 ? { source: picture.src, fit: picture.fit, path: "/design/background" } : void 0;
1316
1345
  return {
1317
1346
  theme,
@@ -1321,6 +1350,10 @@ function resolveDesign(document, index, context) {
1321
1350
  dimensions,
1322
1351
  backdrop,
1323
1352
  dark,
1353
+ variant: roles.variant,
1354
+ map: roles.map,
1355
+ accents: roles.accents,
1356
+ neutrals: roles.neutrals,
1324
1357
  colors: {
1325
1358
  background: roles.background,
1326
1359
  surface: roles.surface,
@@ -3629,6 +3662,7 @@ function resolveSlideContext(presentation, index, options = {}) {
3629
3662
  } else diagnostics.push(unresolvedReference(presentation, "layouts", slide.layout, `slides.${index}.layout`, catalogs));
3630
3663
  }
3631
3664
  if (options.strictReferences && diagnostics.length) throw new OPFUnresolvedReferenceError(diagnostics);
3665
+ const roles = resolveColorRoles(colorScheme, colorChoice([rec2(slide.design), rec2(deck.design), theme], colorScheme, rec2(deck.variables)));
3632
3666
  const composeOptions = {
3633
3667
  ...resolveCanvasDimensions(design.dimensions ?? theme.dimensions),
3634
3668
  ...layout ? { layout } : {},
@@ -3637,7 +3671,7 @@ function resolveSlideContext(presentation, index, options = {}) {
3637
3671
  slideNumber: options.slideNumber ?? index + 1,
3638
3672
  slideCount: options.slideCount ?? slides.length,
3639
3673
  fontFamilies: resolveFontFamilies(fontScheme),
3640
- darkBackground: resolveColorRoles(colorScheme, { background: decisionColor(design.background ?? theme.background, colorScheme, rec2(deck.variables)) }).dark,
3674
+ darkBackground: roles.dark,
3641
3675
  ...theme.background !== void 0 ? { themeBackground: theme.background } : {},
3642
3676
  // OPF 0.19: a theme may carry the shared design keys (between the deck's design and the layout record's).
3643
3677
  ...theme.design !== void 0 && rec2(theme.design) === theme.design ? { themeDesign: theme.design } : {},
@@ -3645,7 +3679,7 @@ function resolveSlideContext(presentation, index, options = {}) {
3645
3679
  ...options.date !== void 0 ? { date: options.date } : {}
3646
3680
  };
3647
3681
  const resolvedSlide = resolveSlideVariables(slide, { slideNumber: composeOptions.slideNumber, slideCount: composeOptions.slideCount, presentation, darkBackground: composeOptions.darkBackground === true });
3648
- return { slide: resolvedSlide, options: composeOptions, diagnostics, resolved: { theme, colorScheme, fontScheme, fontSchemePath: records.fontSchemePath, ...layout ? { layout } : {}, provenance: { ...layoutProvenance ? { layout: layoutProvenance } : {}, ...records.provenance } } };
3682
+ return { slide: resolvedSlide, options: composeOptions, diagnostics, resolved: { theme, colorScheme, roles, fontScheme, fontSchemePath: records.fontSchemePath, ...layout ? { layout } : {}, provenance: { ...layoutProvenance ? { layout: layoutProvenance } : {}, ...records.provenance } } };
3649
3683
  }
3650
3684
 
3651
3685
  // src/rule-slides.ts
@@ -3451,27 +3451,141 @@ function readableLink(link, background, text2) {
3451
3451
  const contrast2 = linkHex && backgroundHex ? colorContrast(linkHex, backgroundHex) : void 0;
3452
3452
  return contrast2 !== void 0 && contrast2 < MIN_LINK_CONTRAST ? text2 : link;
3453
3453
  }
3454
+ var ACCENT_SLOTS = ["accent1", "accent2", "accent3", "accent4", "accent5", "accent6"];
3455
+ var MAPS = {
3456
+ light1: { bg1: "light1", tx1: "dark1", bg2: "light2", tx2: "dark2" },
3457
+ light2: { bg1: "light2", tx1: "dark1", bg2: "light2", tx2: "dark2" },
3458
+ dark1: { bg1: "dark1", tx1: "light1", bg2: "dark2", tx2: "light2" },
3459
+ dark2: { bg1: "dark2", tx1: "light1", bg2: "dark2", tx2: "light2" }
3460
+ };
3461
+ function normalizeColorVariant(value) {
3462
+ if (typeof value === "string") return Object.hasOwn(MAPS, value) ? { background: value } : void 0;
3463
+ if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
3464
+ const { background, accents } = value;
3465
+ if (typeof background !== "string" || !Object.hasOwn(MAPS, background)) return void 0;
3466
+ if (accents === void 0) return { background };
3467
+ return Array.isArray(accents) && accents.length === 6 && ACCENT_SLOTS.every((slot) => accents.includes(slot)) ? { background, accents: [...accents] } : void 0;
3468
+ }
3469
+ function isColorVariant(value) {
3470
+ return normalizeColorVariant(value) !== void 0;
3471
+ }
3472
+ function colorMapFor(variant) {
3473
+ const normalized = normalizeColorVariant(variant);
3474
+ const base = MAPS[normalized?.background ?? "light1"];
3475
+ return { ...base, accents: normalized?.accents ? [...normalized.accents] : ACCENT_SLOTS };
3476
+ }
3477
+ var OOXML_SLOT = { light1: "lt1", light2: "lt2", dark1: "dk1", dark2: "dk2" };
3478
+ function clrMapAttributes(map) {
3479
+ return {
3480
+ bg1: OOXML_SLOT[map.bg1],
3481
+ tx1: OOXML_SLOT[map.tx1],
3482
+ bg2: OOXML_SLOT[map.bg2],
3483
+ tx2: OOXML_SLOT[map.tx2],
3484
+ accent1: map.accents[0],
3485
+ accent2: map.accents[1],
3486
+ accent3: map.accents[2],
3487
+ accent4: map.accents[3],
3488
+ accent5: map.accents[4],
3489
+ accent6: map.accents[5],
3490
+ hlink: "hlink",
3491
+ folHlink: "folHlink"
3492
+ };
3493
+ }
3494
+ function rgbToHsl([r, g, b]) {
3495
+ const red = r / 255, green = g / 255, blue = b / 255, max = Math.max(red, green, blue), min = Math.min(red, green, blue), l = (max + min) / 2;
3496
+ if (max === min) return [0, 0, l];
3497
+ const d = max - min, s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
3498
+ const h = max === red ? (green - blue) / d + (green < blue ? 6 : 0) : max === green ? (blue - red) / d + 2 : (red - green) / d + 4;
3499
+ return [h / 6, s, l];
3500
+ }
3501
+ function hslToRgb([h, s, l]) {
3502
+ if (s === 0) return [l * 255, l * 255, l * 255];
3503
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;
3504
+ const channel = (t) => {
3505
+ const u = t < 0 ? t + 1 : t > 1 ? t - 1 : t;
3506
+ return 255 * (u < 1 / 6 ? p + (q - p) * 6 * u : u < 0.5 ? q : u < 2 / 3 ? p + (q - p) * (2 / 3 - u) * 6 : p);
3507
+ };
3508
+ return [channel(h + 1 / 3), channel(h), channel(h - 1 / 3)];
3509
+ }
3510
+ function applyLuminance(hex, lumMod = 1e5, lumOff = 0) {
3511
+ const channels2 = opaqueChannels(hex);
3512
+ if (!channels2) return hex;
3513
+ const [h, s, l] = rgbToHsl(channels2);
3514
+ return hexOfChannels(hslToRgb([h, s, Math.min(1, Math.max(0, l * lumMod / 1e5 + lumOff / 1e5))]));
3515
+ }
3516
+ function mixTowardsBackground(slot, slotHex, backgroundHex, share) {
3517
+ const from = opaqueChannels(slotHex), to = opaqueChannels(backgroundHex);
3518
+ if (!from || !to) return { slot, hex: slotHex };
3519
+ const own3 = rgbToHsl(from)[2], target = rgbToHsl(to)[2] + share * (own3 - rgbToHsl(to)[2]);
3520
+ let lumMod = 1e5, lumOff = 0;
3521
+ if (target >= own3) {
3522
+ const k = own3 >= 1 ? 0 : (target - own3) / (1 - own3);
3523
+ lumMod = Math.round((1 - k) * 1e5);
3524
+ lumOff = Math.round(k * 1e5);
3525
+ } else lumMod = Math.round(target / own3 * 1e5);
3526
+ return { slot, hex: applyLuminance(slotHex, lumMod, lumOff), ...lumMod !== 1e5 ? { lumMod } : {}, ...lumOff !== 0 ? { lumOff } : {} };
3527
+ }
3528
+ var NEUTRAL_SHARES = { border: 0.2, gridline: 0.15, axisLine: 0.25, chartText: 0.65, codeComment: 0.65 };
3454
3529
  function resolveColorRoles(colorScheme, options = {}) {
3455
3530
  const slot = (name, fallback) => slotKeepingAlpha(colorScheme, name, fallback);
3456
- const background = keepAlpha(options.background) ?? defaultSlideBackground(colorScheme);
3457
- const dark = isDarkColor(background);
3458
- const text2 = dark ? slot("light1", "#FFFFFF") : keepAlpha(colorScheme.text) ?? slot("dark1", "#111827");
3459
- const surface = keepAlpha(colorScheme.surface) ?? (dark ? slot("dark2", "#1E293B") : slot("light2", "#F8FAFC"));
3531
+ const FALLBACK2 = { light1: "#FFFFFF", light2: "#F8FAFC", dark1: "#111827", dark2: "#1E293B" };
3532
+ const explicit = normalizeColorVariant(options.variant);
3533
+ const explicitBackground = keepAlpha(options.background);
3534
+ const dark = explicit ? explicit.background.startsWith("dark") : options.tone ? options.tone === "dark" : isDarkColor(explicitBackground ?? defaultSlideBackground(colorScheme));
3535
+ const variant = explicit ?? { background: dark ? "dark1" : "light1" };
3536
+ const map = colorMapFor(variant);
3537
+ const slotColor = (name) => slot(name, FALLBACK2[name]);
3538
+ const bg1 = map.bg1 === "light1" ? defaultSlideBackground(colorScheme) : slotColor(map.bg1);
3539
+ const background = explicitBackground ?? bg1;
3540
+ const tx1 = slotColor(map.tx1), bg2 = slotColor(map.bg2), tx2 = slotColor(map.tx2);
3541
+ const text2 = dark ? tx1 : keepAlpha(colorScheme.text) ?? tx1;
3542
+ const surface = keepAlpha(colorScheme.surface) ?? bg2;
3543
+ const accents = map.accents.map((name) => slot(name, "#000000"));
3544
+ const neutrals = schemeNeutrals({ bg1: explicitBackground ?? bg1, tx1, bg2, tx2, dark });
3460
3545
  return {
3461
- primary: keepAlpha(colorScheme.primary) ?? slot("accent1", "#2563EB"),
3462
- secondary: keepAlpha(colorScheme.secondary) ?? slot("accent2", "#0F766E"),
3463
- accent: keepAlpha(colorScheme.accent) ?? slot("accent3", "#F59E0B"),
3546
+ primary: keepAlpha(colorScheme.primary) ?? accents[0],
3547
+ secondary: keepAlpha(colorScheme.secondary) ?? accents[1],
3548
+ accent: keepAlpha(colorScheme.accent) ?? accents[2],
3464
3549
  background,
3465
3550
  surface,
3466
3551
  surfaceAlt: surfaceAltColor(surface, text2),
3467
- border: dark ? "#475569" : "#CBD5E1",
3552
+ border: neutrals.border.hex,
3468
3553
  text: text2,
3469
- textSecondary: keepAlpha(colorScheme.textSecondary) ?? (dark ? slot("light2", "#E2E8F0") : slot("dark2", "#334155")),
3554
+ textSecondary: keepAlpha(colorScheme.textSecondary) ?? tx2,
3470
3555
  hyperlink: readableLink(slot("hyperlink", DEFAULT_HYPERLINK), background, text2),
3471
3556
  followedHyperlink: slot("followedHyperlink", DEFAULT_FOLLOWED_HYPERLINK),
3472
- dark
3557
+ dark,
3558
+ variant,
3559
+ map,
3560
+ accents,
3561
+ neutrals
3473
3562
  };
3474
3563
  }
3564
+ function schemeNeutrals(colors) {
3565
+ const { bg1, tx1, bg2, tx2, dark } = colors;
3566
+ const opaque = (value) => normalizeHexColor(value) ?? value;
3567
+ const [back, front, second, secondText] = [opaque(bg1), opaque(tx1), opaque(bg2), opaque(tx2)];
3568
+ const share = (amount) => mixTowardsBackground("tx1", front, back, amount);
3569
+ const panel = dark ? { slot: "bg2", hex: second } : { slot: "tx1", hex: front };
3570
+ const textOnPanel = (colorContrast(back, panel.hex) ?? 0) >= (colorContrast(front, panel.hex) ?? 0) ? { slot: "bg1", hex: back } : { slot: "tx1", hex: front };
3571
+ const comment = mixTowardsBackground(textOnPanel.slot, textOnPanel.hex, panel.hex, NEUTRAL_SHARES.codeComment);
3572
+ return {
3573
+ border: share(NEUTRAL_SHARES.border),
3574
+ gridline: share(NEUTRAL_SHARES.gridline),
3575
+ axisLine: share(NEUTRAL_SHARES.axisLine),
3576
+ chartText: share(NEUTRAL_SHARES.chartText),
3577
+ outline: { slot: "bg1", hex: back },
3578
+ trendNeutral: { slot: "tx2", hex: secondText },
3579
+ codePanel: panel,
3580
+ codeText: textOnPanel,
3581
+ codeComment: comment
3582
+ };
3583
+ }
3584
+ function readableSchemeColor(fill, roles) {
3585
+ const light = { slot: "bg1", hex: normalizeHexColor(roles.background) ?? roles.background };
3586
+ const ink = { slot: "tx1", hex: normalizeHexColor(roles.text) ?? roles.text };
3587
+ return (colorContrast(light.hex, fill) ?? 0) >= (colorContrast(ink.hex, fill) ?? 0) ? light : ink;
3588
+ }
3475
3589
  function luminance(value) {
3476
3590
  if (typeof value !== "string") return void 0;
3477
3591
  let hex = value.trim();
@@ -3609,8 +3723,8 @@ function chartPaletteForFill(fill, palette) {
3609
3723
  }
3610
3724
  var CHART_SERIES_TINT_MIX = 0.4;
3611
3725
  function chartSeriesPalette(colorScheme = {}, colors, context = {}) {
3612
- const accents = [1, 2, 3, 4, 5, 6].map((number) => {
3613
- const slot = `accent${number}`;
3726
+ const order = context.accents && context.accents.length === 6 && ACCENT_SLOTS.every((slot) => context.accents.includes(slot)) ? context.accents : ACCENT_SLOTS;
3727
+ const accents = order.map((slot) => {
3614
3728
  return normalizeHexColor(colorScheme?.[slot]) ?? normalizeHexColor(ENGINE_DEFAULT_COLOR_SCHEME[slot]) ?? "#000000";
3615
3729
  });
3616
3730
  const palette = [...accents, ...accents.map((accent) => mixChannels(opaqueChannels(accent), [255, 255, 255], CHART_SERIES_TINT_MIX))];
@@ -4397,6 +4511,13 @@ function codeSyntaxPaletteForScheme(scheme, options = {}) {
4397
4511
  const pick = (role, slot, fallback) => normalize(record9[role]) ?? normalize(record9[slot]) ?? fallback;
4398
4512
  return codeSyntaxPalette({ primary: pick("primary", "accent1", "#2563EB"), secondary: pick("secondary", "accent2", "#0F766E"), accent: pick("accent", "accent3", "#F59E0B") }, options);
4399
4513
  }
4514
+ function codeSyntaxPaletteForRoles(roles, options = {}) {
4515
+ const { neutrals } = roles;
4516
+ return codeSyntaxPalette(
4517
+ { primary: roles.primary, secondary: roles.secondary, accent: roles.accent, mutedText: neutrals.codeComment.hex },
4518
+ { background: neutrals.codePanel.hex, foreground: neutrals.codeText.hex, ...options }
4519
+ );
4520
+ }
4400
4521
 
4401
4522
  // src/metric-trend.ts
4402
4523
  var METRIC_DEFAULT_SENTIMENT = Object.freeze({ up: "positive", down: "negative", flat: "neutral" });
@@ -4545,16 +4666,16 @@ var blend = (from, to, amount) => {
4545
4666
  const a = channels(from), b = channels(to);
4546
4667
  return toHex(a.map((value, index) => value + (b[index] - value) * amount));
4547
4668
  };
4548
- function codeHighlightColors(scheme, palette = codeSyntaxPaletteForScheme(scheme)) {
4669
+ function codeHighlightColors(scheme, palette = codeSyntaxPaletteForScheme(scheme), panel = CODE_PANEL_BACKGROUND) {
4549
4670
  const record9 = scheme && typeof scheme === "object" ? scheme : {};
4550
4671
  const primary = normalize(record9.primary) ?? normalize(record9.accent1) ?? "#2563EB";
4551
4672
  const [hue, saturation] = toHsl(primary);
4552
4673
  const tint = fromHsl(hue, Math.min(saturation, 0.7), 0.45);
4553
- const band = blend(CODE_PANEL_BACKGROUND, tint, CODE_HIGHLIGHT_BAND_TINT);
4674
+ const band = blend(panel, tint, CODE_HIGHLIGHT_BAND_TINT);
4554
4675
  const lit = {}, dim = {};
4555
4676
  for (const key of Object.keys(palette)) {
4556
4677
  lit[key] = legible(palette[key], band, CODE_SYNTAX_MIN_CONTRAST);
4557
- dim[key] = legible(blend(palette[key], CODE_PANEL_BACKGROUND, CODE_HIGHLIGHT_DIM), CODE_PANEL_BACKGROUND, CODE_SYNTAX_MIN_CONTRAST);
4678
+ dim[key] = legible(blend(palette[key], panel, CODE_HIGHLIGHT_DIM), panel, CODE_SYNTAX_MIN_CONTRAST);
4558
4679
  }
4559
4680
  return { band, lit, dim };
4560
4681
  }
@@ -7279,4 +7400,4 @@ function resolveCanvasDimensions(input) {
7279
7400
  return { width, height };
7280
7401
  }
7281
7402
 
7282
- export { AUTO_LAYOUT, CAPTIONABLE_FIELDS, CAPTION_FONT_RATIO, CAPTION_MAX_RATIO, CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, CHART_HIGHLIGHT_MUTED_MIN_CONTRAST, CHART_HIGHLIGHT_MUTED_MIX, CHART_SERIES_MIN_DIFFERENCE, CHART_SERIES_MIN_LIGHTNESS_STEP, CHART_SERIES_TIER_SIZE, CHART_SERIES_TINT_MIX, CHART_TEXT_PX, CHART_TYPES, CITATION_MARKER_RAISE, CITATION_MARKER_SCALE, CODE_HIGHLIGHT_LANGUAGES, CODE_HIGHLIGHT_MAX_LENGTH, CODE_PANEL_BACKGROUND, CODE_PANEL_FOREGROUND, CODE_SYNTAX_MIN_CONTRAST, DARK_BACKGROUND_LUMINANCE, DEFAULT_CHART_LABEL_SEPARATOR, DEFAULT_FURNITURE_DATE_FORMAT, DEFAULT_VARIABLE_DATE_FORMAT, DESIGN_HINT_KEYS, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, FONT_SIZE_GRID_PER_PX, FOOTNOTE_MAX_RATIO, FURNITURE_GAP, FURNITURE_IMAGE_SHARE, FURNITURE_ZONE_GUTTER, HEADING_AREAS, LANGUAGES, LAYOUT_BODY_KINDS, LOGO_SHAPES, MAX_COMPOSITION_DEPTH, MAX_NUMBERING_LEVELS, MAX_NUMBERING_VALUE, MAX_REGION_BLOCKS, MAX_ROMAN_VALUE, MAX_TEMPLATE_TRACKS, METRIC_TREND_MIN_CONTRAST, METRIC_TREND_SHAPES, NUMBERING_STYLES, NUMBERING_SUFFIXES, OPFCatalogsOptionError, OPFCompositionError, OPFLayoutTemplateError, OPFUnresolvedReferenceError, OPFVariableError, PATTERN_PRESETS, PATTERN_PRESET_ALIASES, PATTERN_TILE_SIZE, PICTURE_BULLET_SCALE, PROMOTED_REGION_KEY, REGION_ANCHORS, REGION_FLOWS, REGION_KINDS, REGION_ROLES, RESERVED_REGION_NAMES, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, SURFACE_ALT_MIN_CONTRAST, SURFACE_ALT_MIX, THEME_DESIGN_KEYS, TIMELINE_OUTLINE_MIN_CONTRAST, TIMELINE_STATUSES, TIMELINE_TEXT_MIN_CONTRAST, VARIABLE_KINDS, allocateRows, annotationText, bindRegions, blockKind, captionSettings, catalogGroupDeclared, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, chartColorForFill, chartHighlightColors, chartHighlightMarks, chartLabelText, chartNumber, chartNumberFixesByCell, chartOptionSupport, chartOptionTarget, chartPaletteForFill, chartSeriesPalette, chartTextSize, chartValueAxis, checkCatalogsOption, citationMarkerText, codeHighlightBands, codeHighlightColors, codeHighlightLines, codeHighlightSlice, codeLineNumbers, codeLineRuns, codeSyntaxPalette, codeSyntaxPaletteForScheme, coerceVariableValue, collectCitations, colorContrast, composeLayoutAreas, composeSlide, datasetDiagnostics, defaultSlideBackground, dottedPath, embeddedCopy, fitImage, fitList, fitRichText, fitText, formatChartLabelNumber, formatChartLabelPercent, formatDataNumber, formatFurnitureDate, formatListNumber, formatVariableNumber, fromExcelNumberFormat, gridFlowShape, hasContentVariables, imageBackground, imageShape, inlineChartData, inlineDatasets, inlineTableData, instantiateForValidation, intrinsicImageAspect, intrinsicImageSize, isDarkColor, isDatasetRef, isLayoutTemplate, isRecord, isTemplate, isXYChartType, layoutCaption, layoutCode, layoutContent, layoutFootnotes, layoutFurniture, layoutMetric, layoutQuote, layoutRegion, layoutStructure, layoutTable, layoutTemplate, layoutTemplateIssues, layoutTimeline, layoutWatermark, listBuiltinVariables, listColumnBreaks, listNumbers, listVariables, maxIntervalsFor, measureText, measureTextOutline, metricTrendColor, metricTrendMark, metricTrendPoints, niceScale, normalizeHexColor, normalizeLanguageFamily, numberFormatError, numberingAtLevel, numberingFindings, numberingStyleDraws, paragraphDirection, paragraphDirectionAt, parseReference, pathFor, patternBitmap, patternRuns, physicalAlignment, placeTextLines, placedImageBlocks, pointerPath, promotedRegionKeys, provenanceOf, readingRows, recordReferenceSites, referencesSlide, regionAccepts, regionRoleRank, registeredCatalog, resolveCanvasDimensions, resolveChartColors, resolveChartData, resolveChartOptions, resolveCodeLanguage, resolveColorRef, resolveColorRoles, resolveDesignHints, resolveDesignRecords, resolveFontFamilies, resolveFontScheme, resolveLogo, resolveNumbering, resolvePatternPreset, resolveReference, resolveScriptFonts, resolveSlideDirection, resolveSlideVariables, resolveSocialProfile, resolveTableData, resolveTextStyle, resolveVariables, rootNodes, scriptFontRole, sliceNumberedItems, slideCitations, slideTokenSpans, snapFontSizeDown, snapFontSizeUp, stackCategoryValues, suggestChartNumberFix, surfaceAltColor, tableCellDisplayValue, tableGrid, tableRowBoundaries, textColorForFill, textWidthMeasurer, timelineMarkerShapes, timelineTextColor, toExcelNumberFormat, tokenizeCode, unresolvedReference, unusedDatasets, usesSlideBuiltin, variableDeclarations, visitContentPayloads, visualReadingOrder, walkCitationRuns, wrapText };
7403
+ export { AUTO_LAYOUT, CAPTIONABLE_FIELDS, CAPTION_FONT_RATIO, CAPTION_MAX_RATIO, CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, CHART_HIGHLIGHT_MUTED_MIN_CONTRAST, CHART_HIGHLIGHT_MUTED_MIX, CHART_SERIES_MIN_DIFFERENCE, CHART_SERIES_MIN_LIGHTNESS_STEP, CHART_SERIES_TIER_SIZE, CHART_SERIES_TINT_MIX, CHART_TEXT_PX, CHART_TYPES, CITATION_MARKER_RAISE, CITATION_MARKER_SCALE, CODE_HIGHLIGHT_LANGUAGES, CODE_HIGHLIGHT_MAX_LENGTH, CODE_PANEL_BACKGROUND, CODE_PANEL_FOREGROUND, CODE_SYNTAX_MIN_CONTRAST, DARK_BACKGROUND_LUMINANCE, DEFAULT_CHART_LABEL_SEPARATOR, DEFAULT_FURNITURE_DATE_FORMAT, DEFAULT_VARIABLE_DATE_FORMAT, DESIGN_HINT_KEYS, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, FONT_SIZE_GRID_PER_PX, FOOTNOTE_MAX_RATIO, FURNITURE_GAP, FURNITURE_IMAGE_SHARE, FURNITURE_ZONE_GUTTER, HEADING_AREAS, LANGUAGES, LAYOUT_BODY_KINDS, LOGO_SHAPES, MAX_COMPOSITION_DEPTH, MAX_NUMBERING_LEVELS, MAX_NUMBERING_VALUE, MAX_REGION_BLOCKS, MAX_ROMAN_VALUE, MAX_TEMPLATE_TRACKS, METRIC_TREND_MIN_CONTRAST, METRIC_TREND_SHAPES, NEUTRAL_SHARES, NUMBERING_STYLES, NUMBERING_SUFFIXES, OPFCatalogsOptionError, OPFCompositionError, OPFLayoutTemplateError, OPFUnresolvedReferenceError, OPFVariableError, PATTERN_PRESETS, PATTERN_PRESET_ALIASES, PATTERN_TILE_SIZE, PICTURE_BULLET_SCALE, PROMOTED_REGION_KEY, REGION_ANCHORS, REGION_FLOWS, REGION_KINDS, REGION_ROLES, RESERVED_REGION_NAMES, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, SURFACE_ALT_MIN_CONTRAST, SURFACE_ALT_MIX, THEME_DESIGN_KEYS, TIMELINE_OUTLINE_MIN_CONTRAST, TIMELINE_STATUSES, TIMELINE_TEXT_MIN_CONTRAST, VARIABLE_KINDS, allocateRows, annotationText, applyLuminance, bindRegions, blockKind, captionSettings, catalogGroupDeclared, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, chartColorForFill, chartHighlightColors, chartHighlightMarks, chartLabelText, chartNumber, chartNumberFixesByCell, chartOptionSupport, chartOptionTarget, chartPaletteForFill, chartSeriesPalette, chartTextSize, chartValueAxis, checkCatalogsOption, citationMarkerText, clrMapAttributes, codeHighlightBands, codeHighlightColors, codeHighlightLines, codeHighlightSlice, codeLineNumbers, codeLineRuns, codeSyntaxPalette, codeSyntaxPaletteForRoles, codeSyntaxPaletteForScheme, coerceVariableValue, collectCitations, colorContrast, colorMapFor, composeLayoutAreas, composeSlide, datasetDiagnostics, defaultSlideBackground, dottedPath, embeddedCopy, fitImage, fitList, fitRichText, fitText, formatChartLabelNumber, formatChartLabelPercent, formatDataNumber, formatFurnitureDate, formatListNumber, formatVariableNumber, fromExcelNumberFormat, gridFlowShape, hasContentVariables, imageBackground, imageShape, inlineChartData, inlineDatasets, inlineTableData, instantiateForValidation, intrinsicImageAspect, intrinsicImageSize, isColorVariant, isDarkColor, isDatasetRef, isLayoutTemplate, isRecord, isTemplate, isXYChartType, layoutCaption, layoutCode, layoutContent, layoutFootnotes, layoutFurniture, layoutMetric, layoutQuote, layoutRegion, layoutStructure, layoutTable, layoutTemplate, layoutTemplateIssues, layoutTimeline, layoutWatermark, listBuiltinVariables, listColumnBreaks, listNumbers, listVariables, maxIntervalsFor, measureText, measureTextOutline, metricTrendColor, metricTrendMark, metricTrendPoints, niceScale, normalizeColorVariant, normalizeHexColor, normalizeLanguageFamily, numberFormatError, numberingAtLevel, numberingFindings, numberingStyleDraws, paragraphDirection, paragraphDirectionAt, parseReference, pathFor, patternBitmap, patternRuns, physicalAlignment, placeTextLines, placedImageBlocks, pointerPath, promotedRegionKeys, provenanceOf, readableSchemeColor, readingRows, recordReferenceSites, referencesSlide, regionAccepts, regionRoleRank, registeredCatalog, resolveCanvasDimensions, resolveChartColors, resolveChartData, resolveChartOptions, resolveCodeLanguage, resolveColorRef, resolveColorRoles, resolveDesignHints, resolveDesignRecords, resolveFontFamilies, resolveFontScheme, resolveLogo, resolveNumbering, resolvePatternPreset, resolveReference, resolveScriptFonts, resolveSlideDirection, resolveSlideVariables, resolveSocialProfile, resolveTableData, resolveTextStyle, resolveVariables, rootNodes, scriptFontRole, sliceNumberedItems, slideCitations, slideTokenSpans, snapFontSizeDown, snapFontSizeUp, stackCategoryValues, suggestChartNumberFix, surfaceAltColor, tableCellDisplayValue, tableGrid, tableRowBoundaries, textColorForFill, textWidthMeasurer, timelineMarkerShapes, timelineTextColor, toExcelNumberFormat, tokenizeCode, unresolvedReference, unusedDatasets, usesSlideBuiltin, variableDeclarations, visitContentPayloads, visualReadingOrder, walkCitationRuns, wrapText };
@@ -1,4 +1,4 @@
1
- import { runText } from './chunk-2SENTA2R.js';
1
+ import { runText } from './chunk-F55S5HDP.js';
2
2
 
3
3
  // src/convert/text-lines.ts
4
4
  var LIST_PREFIX = /^([ \t]*)(?:([-*•+]|\d{1,3}[.)])[ \t]+)?/;
@@ -1,5 +1,5 @@
1
- import { OPFApiError } from './chunk-MAJHCGOW.js';
2
- import { CATALOG_SCHEMA } from './chunk-23MOKE4B.js';
1
+ import { OPFApiError } from './chunk-3FWUA763.js';
2
+ import { CATALOG_SCHEMA } from './chunk-L67MPTPZ.js';
3
3
  import { CATALOG_SCHEMA as CATALOG_SCHEMA$1, gallery } from '@openpresentation/gallery';
4
4
 
5
5
  function galleryMismatch(declared, reads = CATALOG_SCHEMA) {
@@ -1,4 +1,4 @@
1
- import { isRecord, same } from './chunk-2SENTA2R.js';
1
+ import { isRecord, same } from './chunk-F55S5HDP.js';
2
2
  import { parseDocument, YAMLMap, Scalar, stringify } from 'yaml';
3
3
 
4
4
  // src/not-checked.ts
@@ -1,5 +1,5 @@
1
- import { jsonEqual, formatPointer } from './chunk-YSJRBRHB.js';
2
- import { annotationText } from './chunk-VKNFZEMG.js';
1
+ import { jsonEqual, formatPointer } from './chunk-VIOSRKMA.js';
2
+ import { annotationText } from './chunk-N3ZPLGK5.js';
3
3
 
4
4
  // src/diff-match.ts
5
5
  var DEFAULT_MATCH_THRESHOLD = 0.5;
@@ -1,8 +1,8 @@
1
- import { fromMarkdown, toMarkdown } from './chunk-SBWIZSPB.js';
2
- import { fromYaml, toYaml } from './chunk-7XNAMCGT.js';
3
- import { NOT_CHECKED } from './chunk-3T7MNRBY.js';
4
- import { parseSource, validate, OPFValidationError } from './chunk-23MOKE4B.js';
5
- import { checkCatalogsOption } from './chunk-VKNFZEMG.js';
1
+ import { fromMarkdown, toMarkdown } from './chunk-XKUEEDDN.js';
2
+ import { fromYaml, toYaml } from './chunk-B2XALDGS.js';
3
+ import { NOT_CHECKED } from './chunk-TILQBXPZ.js';
4
+ import { parseSource, validate, OPFValidationError } from './chunk-L67MPTPZ.js';
5
+ import { checkCatalogsOption } from './chunk-N3ZPLGK5.js';
6
6
 
7
7
  // src/deck-report.ts
8
8
  var DECK_FORMATS = ["json", "yaml", "markdown"];
@@ -1,4 +1,4 @@
1
- import { validate } from './chunk-23MOKE4B.js';
1
+ import { validate } from './chunk-L67MPTPZ.js';
2
2
 
3
3
  // src/patch.ts
4
4
  var OPFPatchError = class extends Error {
@@ -1,8 +1,8 @@
1
- import { Ctx, splitLines, lineRange, readYamlMapping, NOT_CHECKED, OPFMarkdownError, writeYaml, readCsv, DECIMAL, csvField, scalarText } from './chunk-3T7MNRBY.js';
2
- import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen, fenceCode } from './chunk-KUNXFN7B.js';
3
- import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-2SENTA2R.js';
4
- import { validate } from './chunk-23MOKE4B.js';
5
- import { checkCatalogsOption, PROMOTED_REGION_KEY } from './chunk-VKNFZEMG.js';
1
+ import { Ctx, splitLines, lineRange, readYamlMapping, NOT_CHECKED, OPFMarkdownError, writeYaml, readCsv, DECIMAL, csvField, scalarText } from './chunk-TILQBXPZ.js';
2
+ import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen, fenceCode } from './chunk-NIA2WEXN.js';
3
+ import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-F55S5HDP.js';
4
+ import { validate } from './chunk-L67MPTPZ.js';
5
+ import { checkCatalogsOption, PROMOTED_REGION_KEY } from './chunk-N3ZPLGK5.js';
6
6
 
7
7
  // src/markdown/canon.ts
8
8
  var FORMAT_KEYS = FORMATTING;
@@ -1,4 +1,4 @@
1
- import { presentation } from './chunk-3UAVON3O.js';
1
+ import { presentation } from './chunk-ZIRSAFRC.js';
2
2
 
3
3
  // src/format.ts
4
4
  var OPFFormatError = class extends Error {