@bendyline/squisq-formats 2.3.5 → 2.3.6

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 (31) hide show
  1. package/NOTICE.md +8 -7
  2. package/THIRD_PARTY_LICENSES.txt +170 -0
  3. package/dist/{chunk-TAAENIRB.js → chunk-6N2J7C2B.js} +1 -1
  4. package/dist/{chunk-SBUW7NHR.js → chunk-6X5XN3CZ.js} +2 -0
  5. package/dist/{chunk-26ISNJ7Y.js → chunk-BGDN7BXK.js} +49 -7
  6. package/dist/{chunk-GX7RAUME.js → chunk-DWNNYO5H.js} +3 -1
  7. package/dist/{chunk-4V3KCHAP.js → chunk-ILCJ3WFD.js} +1 -1
  8. package/dist/{chunk-6S6GU3ZG.js → chunk-KMBBO5H7.js} +3 -3
  9. package/dist/{chunk-K6XRMVPW.js → chunk-KN62QJYK.js} +42 -5
  10. package/dist/{chunk-GYIVES2E.js → chunk-KT5DX2QP.js} +42 -1
  11. package/dist/{chunk-EJTNGKEA.js → chunk-OK622ILP.js} +1 -1
  12. package/dist/{chunk-X2DEAXNK.js → chunk-S5PCVMKU.js} +6 -0
  13. package/dist/{chunk-ZBPGMRFQ.js → chunk-TBB4PAX5.js} +106 -19
  14. package/dist/{chunk-OGS5VCGJ.js → chunk-UIBTXX4L.js} +3 -3
  15. package/dist/chunk-USU6HTKB.js +94 -0
  16. package/dist/{chunk-PU7REGWV.js → chunk-WATAOG4Y.js} +2 -2
  17. package/dist/docx/index.js +6 -5
  18. package/dist/epub/index.js +3 -2
  19. package/dist/{extract-MN7LA3NL.js → extract-UTAOG7LV.js} +3 -3
  20. package/dist/index.js +15 -14
  21. package/dist/infer/index.js +4 -4
  22. package/dist/{layouts-DRWZGSPD.js → layouts-2A7QNF6Y.js} +2 -2
  23. package/dist/ooxml/index.d.ts +7 -1
  24. package/dist/ooxml/index.js +9 -3
  25. package/dist/pdf/index.d.ts +2 -2
  26. package/dist/pdf/index.js +2 -1
  27. package/dist/pptx/index.js +7 -6
  28. package/dist/registry/index.js +1 -1
  29. package/dist/xlsx/index.js +4 -4
  30. package/package.json +5 -3
  31. /package/dist/{chunk-3DRWKOF4.js → chunk-GK23NBPZ.js} +0 -0
@@ -4,19 +4,20 @@ import {
4
4
  inlineNodesToRuns,
5
5
  sanitizeOfficeHyperlink,
6
6
  toOoxmlHex
7
- } from "./chunk-GX7RAUME.js";
7
+ } from "./chunk-DWNNYO5H.js";
8
8
  import {
9
9
  extractPlainText,
10
10
  stripHtmlTags
11
- } from "./chunk-SBUW7NHR.js";
11
+ } from "./chunk-6X5XN3CZ.js";
12
12
  import {
13
13
  createPackage
14
- } from "./chunk-4V3KCHAP.js";
14
+ } from "./chunk-ILCJ3WFD.js";
15
15
  import {
16
16
  escapeXml,
17
17
  xmlDeclaration
18
18
  } from "./chunk-JU2RHXUB.js";
19
19
  import {
20
+ CONTENT_TYPE_PPTX_FONT,
20
21
  CONTENT_TYPE_PPTX_PRESENTATION,
21
22
  CONTENT_TYPE_PPTX_SLIDE,
22
23
  CONTENT_TYPE_PPTX_SLIDE_LAYOUT,
@@ -27,6 +28,7 @@ import {
27
28
  NS_PML,
28
29
  NS_PML_2010,
29
30
  NS_R,
31
+ REL_FONT,
30
32
  REL_HYPERLINK,
31
33
  REL_IMAGE,
32
34
  REL_OFFICE_DOCUMENT,
@@ -42,10 +44,15 @@ import {
42
44
  openPackage,
43
45
  requireMainPartPath,
44
46
  resolveTarget
45
- } from "./chunk-X2DEAXNK.js";
47
+ } from "./chunk-S5PCVMKU.js";
46
48
  import {
47
49
  buildContainer
48
50
  } from "./chunk-IIQYS2YH.js";
51
+ import {
52
+ fontAwesomeFace,
53
+ fontAwesomeFaces,
54
+ fontAwesomeGlyph
55
+ } from "./chunk-USU6HTKB.js";
49
56
  import {
50
57
  inferMimeType
51
58
  } from "./chunk-6RQOV3B3.js";
@@ -65,7 +72,7 @@ import {
65
72
  resolvePersistentLayers,
66
73
  resolveThemeForDoc
67
74
  } from "@bendyline/squisq/doc";
68
- import { stripIconMarkers } from "@bendyline/squisq/icon-marker";
75
+ import { splitIconMarkers } from "@bendyline/squisq/icon-marker";
69
76
  import { readFrontmatterThemeId } from "@bendyline/squisq/markdown";
70
77
 
71
78
  // src/pptx/styles.ts
@@ -87,12 +94,15 @@ var DEFAULT_CODE_SIZE = 1400;
87
94
  var HYPERLINK_COLOR = "0563C1";
88
95
 
89
96
  // src/pptx/templates.ts
90
- function buildPresentationXml(slideCount, slideRelIds, slideMasterRelId, _themeRelId) {
97
+ function buildPresentationXml(slideCount, slideRelIds, slideMasterRelId, _themeRelId, embeddedFonts = []) {
91
98
  const sldIdList = [];
92
99
  for (let i = 0; i < slideCount; i++) {
93
100
  sldIdList.push(`<p:sldId id="${256 + i}" r:id="${slideRelIds[i]}"/>`);
94
101
  }
95
- return xmlDeclaration() + `<p:presentation xmlns:a="${NS_DRAWINGML}" xmlns:r="${NS_R}" xmlns:p="${NS_PML}" saveSubsetFonts="1"><p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="${slideMasterRelId}"/></p:sldMasterIdLst><p:sldIdLst>${sldIdList.join("")}</p:sldIdLst><p:sldSz cx="${SLIDE_WIDTH}" cy="${SLIDE_HEIGHT}" type="screen16x9"/><p:notesSz cx="${SLIDE_HEIGHT}" cy="${SLIDE_WIDTH}"/></p:presentation>`;
102
+ const embeddedFontList = embeddedFonts.length > 0 ? `<p:embeddedFontLst>${embeddedFonts.map(
103
+ ({ typeface, relId }) => `<p:embeddedFont><p:font typeface="${escapeXml(typeface)}" charset="0" pitchFamily="34"/><p:regular r:id="${escapeXml(relId)}"/></p:embeddedFont>`
104
+ ).join("")}</p:embeddedFontLst>` : "";
105
+ return xmlDeclaration() + `<p:presentation xmlns:a="${NS_DRAWINGML}" xmlns:r="${NS_R}" xmlns:p="${NS_PML}" saveSubsetFonts="1"><p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="${slideMasterRelId}"/></p:sldMasterIdLst><p:sldIdLst>${sldIdList.join("")}</p:sldIdLst><p:sldSz cx="${SLIDE_WIDTH}" cy="${SLIDE_HEIGHT}" type="screen16x9"/><p:notesSz cx="${SLIDE_HEIGHT}" cy="${SLIDE_WIDTH}"/>` + embeddedFontList + `</p:presentation>`;
96
106
  }
97
107
  function buildSlideMasterXml(layoutRelId) {
98
108
  return xmlDeclaration() + `<p:sldMaster xmlns:a="${NS_DRAWINGML}" xmlns:r="${NS_R}" xmlns:p="${NS_PML}"><p:cSld><p:bg><p:bgRef idx="1001"><a:schemeClr val="bg1"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr/></p:spTree></p:cSld><p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/><p:sldLayoutIdLst><p:sldLayoutId id="2147483649" r:id="${layoutRelId}"/></p:sldLayoutIdLst></p:sldMaster>`;
@@ -253,7 +263,7 @@ function segmentIntoSlides(children, slideBreak) {
253
263
  if (node.type === "heading" && node.depth <= maxDepth) {
254
264
  if (current) slides.push(current);
255
265
  current = {
256
- title: extractPlainText(node.children),
266
+ title: node.children,
257
267
  titleDepth: node.depth,
258
268
  transition: node.attributes?.blockMeta?.transition,
259
269
  bodyNodes: []
@@ -280,6 +290,8 @@ var SlideContext = class {
280
290
  this.relationships = [];
281
291
  this.embeddedImages = [];
282
292
  this.nextShapeId = 4;
293
+ /** Font Awesome families referenced by semantic or materialized text runs. */
294
+ this.iconFamilies = /* @__PURE__ */ new Set();
283
295
  this.style = style;
284
296
  this.images = images;
285
297
  this.slideIndex = slideIndex;
@@ -332,8 +344,8 @@ function buildSlideXml(slide, ctx) {
332
344
  shapes.push(
333
345
  `<p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr/>`
334
346
  );
335
- if (slide.title) {
336
- shapes.push(buildTitleShape(slide.title, ctx.style));
347
+ if (slide.title?.length) {
348
+ shapes.push(buildTitleShape(slide.title, ctx));
337
349
  }
338
350
  const bodyParas = convertBodyBlocks(slide.bodyNodes, ctx);
339
351
  const hasImages = ctx.embeddedImages.length > 0;
@@ -396,6 +408,12 @@ function buildLayerSlideXml(block, ctx) {
396
408
  `<p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr/>`
397
409
  ];
398
410
  const textLayerY = (block.layers ?? []).filter((layer) => layer.type === "text").map((layer) => resolvePositionValue(layer.position.y, 1080));
411
+ for (const layer of block.layers ?? []) {
412
+ if (layer.type !== "text") continue;
413
+ for (const run of splitIconMarkers(layer.content.text ?? "")) {
414
+ if (run.type === "icon") ctx.iconFamilies.add(run.family);
415
+ }
416
+ }
399
417
  for (let index = 0; index < (block.layers?.length ?? 0); index++) {
400
418
  if ((index & 31) === 0) ctx.signal?.throwIfAborted();
401
419
  const layer = block.layers[index];
@@ -564,7 +582,8 @@ function toEmuRect(rect) {
564
582
  };
565
583
  }
566
584
  function buildLayerTextShape(layer, shapeId, maxBottom) {
567
- const text = stripIconMarkers(layer.content.text ?? "");
585
+ const sourceText = layer.content.text ?? "";
586
+ const text = splitIconMarkers(sourceText).map((run) => run.type === "text" ? run.text : "M").join("");
568
587
  const style = layer.content.style;
569
588
  const padding = style.padding ?? 0;
570
589
  const rawLines = text.split("\n");
@@ -599,14 +618,14 @@ function buildLayerTextShape(layer, shapeId, maxBottom) {
599
618
  const vertical = style.verticalAlign === "bottom" ? "b" : style.verticalAlign === "middle" ? "ctr" : "t";
600
619
  const inset = Math.max(0, Math.round(padding / 1920 * SLIDE_WIDTH));
601
620
  const bodyPr = `<a:bodyPr wrap="square" anchor="${vertical}" vertOverflow="clip" horzOverflow="clip" lIns="${inset}" rIns="${inset}" tIns="${inset}" bIns="${inset}"><a:noAutofit/></a:bodyPr>`;
602
- const paragraphs = text.split("\n").map((line) => buildLayerTextParagraph(line, renderedStyle, align)).join("");
621
+ const paragraphs = sourceText.split("\n").map((line) => buildLayerTextParagraph(line, renderedStyle, align)).join("");
603
622
  return `<p:sp><p:nvSpPr><p:cNvPr id="${shapeId}" name="${escapeXml(layer.id)}"/><p:cNvSpPr txBox="1"/><p:nvPr/></p:nvSpPr><p:spPr><a:xfrm><a:off x="${rect.x}" y="${rect.y}"/><a:ext cx="${rect.width}" cy="${rect.height}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom>` + fillXml(style.background, style.backgroundOpacity, style.backgroundGradient) + lineXml(style.borderColor, style.borderWidth, style.borderStyle) + `</p:spPr><p:txBody>${bodyPr}<a:lstStyle/>${paragraphs}</p:txBody></p:sp>`;
604
623
  }
605
624
  function buildLayerTextParagraph(text, style, align) {
606
625
  const size = Math.max(100, Math.round(style.fontSize * 75));
607
626
  const color = parseCssColor(style.color, "000000");
608
627
  const typeface = officeTypeface(style.fontFamily, DEFAULT_FONT);
609
- const runProperties = [
628
+ const textRunProperties = [
610
629
  `lang="en-US"`,
611
630
  `dirty="0"`,
612
631
  `sz="${size}"`,
@@ -614,7 +633,17 @@ function buildLayerTextParagraph(text, style, align) {
614
633
  ...style.fontStyle === "italic" ? ['i="1"'] : []
615
634
  ].join(" ");
616
635
  const lineSpacing = Math.max(1e4, Math.round((style.lineHeight ?? 1.4) * 1e5));
617
- return `<a:p><a:pPr algn="${align}"><a:lnSpc><a:spcPct val="${lineSpacing}"/></a:lnSpc></a:pPr><a:r><a:rPr ${runProperties}>${solidColorXml(color)}<a:latin typeface="${escapeXml(typeface)}"/></a:rPr><a:t>${escapeXml(text || " ")}</a:t></a:r></a:p>`;
636
+ const runs = splitIconMarkers(text).map((run) => {
637
+ if (run.type === "text") {
638
+ if (!run.text) return "";
639
+ return `<a:r><a:rPr ${textRunProperties}>${solidColorXml(color)}<a:latin typeface="${escapeXml(typeface)}"/></a:rPr><a:t>${escapeXml(run.text)}</a:t></a:r>`;
640
+ }
641
+ const glyph = fontAwesomeGlyph(run.family, run.name);
642
+ if (!glyph) return "";
643
+ const iconTypeface = fontAwesomeFace(run.family).typeface;
644
+ return `<a:r><a:rPr lang="en-US" dirty="0" sz="${size}">${solidColorXml(color)}<a:latin typeface="${escapeXml(iconTypeface)}"/></a:rPr><a:t>${escapeXml(glyph)}</a:t></a:r>`;
645
+ }).join("");
646
+ return `<a:p><a:pPr algn="${align}"><a:lnSpc><a:spcPct val="${lineSpacing}"/></a:lnSpc></a:pPr>` + (runs || `<a:r><a:rPr ${textRunProperties}>${solidColorXml(color)}<a:latin typeface="${escapeXml(typeface)}"/></a:rPr><a:t> </a:t></a:r>`) + `</a:p>`;
618
647
  }
619
648
  function buildLayerShape(layer, shapeId) {
620
649
  const rect = toEmuRect(resolveLayerRect(layer.position, 100, 100));
@@ -989,8 +1018,37 @@ function orientation(direction) {
989
1018
  function inOutDir(direction, fallback) {
990
1019
  return direction === "out" ? "out" : direction === "in" ? "in" : fallback;
991
1020
  }
992
- function buildTitleShape(title, style) {
993
- return `<p:sp><p:nvSpPr><p:cNvPr id="2" name="Title"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="${TITLE_LEFT}" y="${TITLE_TOP}"/><a:ext cx="${TITLE_WIDTH}" cy="${TITLE_HEIGHT}"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" sz="${DEFAULT_TITLE_SIZE}" dirty="0"><a:solidFill><a:srgbClr val="${style.titleColor}"/></a:solidFill><a:latin typeface="${escapeXml(style.titleFont)}"/></a:rPr><a:t>${escapeXml(title)}</a:t></a:r></a:p></p:txBody></p:sp>`;
1021
+ function buildTitleShape(title, ctx) {
1022
+ const runs = inlineNodesToRuns(title, titleRunHandlers(ctx));
1023
+ return `<p:sp><p:nvSpPr><p:cNvPr id="2" name="Title"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="${TITLE_LEFT}" y="${TITLE_TOP}"/><a:ext cx="${TITLE_WIDTH}" cy="${TITLE_HEIGHT}"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p>` + runs + `</a:p></p:txBody></p:sp>`;
1024
+ }
1025
+ function titleRunHandlers(ctx) {
1026
+ const handlers = {
1027
+ run: (text, format) => makeTitleRun(text, format, ctx.style),
1028
+ link: (node, format) => inlineNodesToRuns(node.children, handlers, format),
1029
+ image: (node, format) => makeTitleRun(node.alt ?? "", format, ctx.style),
1030
+ icon: (node, format) => makeTitleIconRun(node, format, ctx),
1031
+ lineBreak: () => `<a:br/>`
1032
+ };
1033
+ return handlers;
1034
+ }
1035
+ function makeTitleRun(text, format, style) {
1036
+ if (!text) return "";
1037
+ const attrs = [`lang="en-US"`, `dirty="0"`, `sz="${DEFAULT_TITLE_SIZE}"`];
1038
+ if (format.bold) attrs.push(`b="1"`);
1039
+ if (format.italic) attrs.push(`i="1"`);
1040
+ if (format.strike) attrs.push(`strike="sngStrike"`);
1041
+ const typeface = format.code ? style.codeFont : style.titleFont;
1042
+ return `<a:r><a:rPr ${attrs.join(" ")}><a:solidFill><a:srgbClr val="${style.titleColor}"/></a:solidFill><a:latin typeface="${escapeXml(typeface)}"/></a:rPr><a:t>${escapeXml(text)}</a:t></a:r>`;
1043
+ }
1044
+ function makeTitleIconRun(node, format, ctx) {
1045
+ const glyph = fontAwesomeGlyph(node.family, node.name);
1046
+ if (!glyph) return makeTitleRun(`{[${node.token}]}`, format, ctx.style);
1047
+ const face = fontAwesomeFace(node.family);
1048
+ ctx.iconFamilies.add(node.family);
1049
+ const attrs = [`lang="en-US"`, `dirty="0"`, `sz="${DEFAULT_TITLE_SIZE}"`];
1050
+ if (format.strike) attrs.push(`strike="sngStrike"`);
1051
+ return `<a:r><a:rPr ${attrs.join(" ")}><a:solidFill><a:srgbClr val="${ctx.style.titleColor}"/></a:solidFill><a:latin typeface="${escapeXml(face.typeface)}"/></a:rPr><a:t>${escapeXml(glyph)}</a:t></a:r>`;
994
1052
  }
995
1053
  function buildBodyShapeCustom(bodyContent, top, height, style) {
996
1054
  const defRPr = style.hasTheme ? `<a:defRPr><a:solidFill><a:srgbClr val="${style.text}"/></a:solidFill><a:latin typeface="${escapeXml(style.bodyFont)}"/></a:defRPr>` : "";
@@ -1139,6 +1197,7 @@ function pptxRunHandlers(ctx) {
1139
1197
  run: (text, format) => makeRun(text, format, ctx.style),
1140
1198
  link: (node, format) => convertLink(node, ctx, format),
1141
1199
  image: (node, format) => convertImage(node, format, ctx),
1200
+ icon: (node, format) => makeIconRun(node, format, ctx),
1142
1201
  lineBreak: () => `<a:br/>`
1143
1202
  };
1144
1203
  }
@@ -1164,6 +1223,16 @@ function makeRun(text, format, style) {
1164
1223
  }
1165
1224
  return `<a:r><a:rPr ${rPrParts.join(" ")}>${innerParts}</a:rPr><a:t>${escapeXml(text)}</a:t></a:r>`;
1166
1225
  }
1226
+ function makeIconRun(node, format, ctx) {
1227
+ const glyph = fontAwesomeGlyph(node.family, node.name);
1228
+ if (!glyph) return makeRun(`{[${node.token}]}`, format, ctx.style);
1229
+ const face = fontAwesomeFace(node.family);
1230
+ ctx.iconFamilies.add(node.family);
1231
+ const attrs = [`lang="en-US"`, `dirty="0"`];
1232
+ if (format.strike) attrs.push(`strike="sngStrike"`);
1233
+ const fill = ctx.style.hasTheme ? `<a:solidFill><a:srgbClr val="${ctx.style.text}"/></a:solidFill>` : "";
1234
+ return `<a:r><a:rPr ${attrs.join(" ")}>` + fill + `<a:latin typeface="${escapeXml(face.typeface)}"/></a:rPr><a:t>${escapeXml(glyph)}</a:t></a:r>`;
1235
+ }
1167
1236
  function convertLink(node, ctx, format) {
1168
1237
  const rId = ctx.addHyperlink(node.url);
1169
1238
  if (!rId) return convertInlines(node.children, ctx, format);
@@ -1208,11 +1277,20 @@ async function buildPptxPackage(slideXmls, slideContexts, options) {
1208
1277
  }
1209
1278
  const slideMasterRelId = relIds.alloc(PRESENTATION_PART);
1210
1279
  const themeRelId = relIds.alloc(PRESENTATION_PART);
1280
+ const usedIconFamilies = /* @__PURE__ */ new Set();
1281
+ for (const ctx of slideContexts) {
1282
+ for (const family of ctx.iconFamilies) usedIconFamilies.add(family);
1283
+ }
1284
+ const embeddedIconFonts = fontAwesomeFaces(usedIconFamilies).map((face) => ({
1285
+ face,
1286
+ relId: relIds.alloc(PRESENTATION_PART)
1287
+ }));
1211
1288
  const presentationXml = buildPresentationXml(
1212
1289
  slideCount,
1213
1290
  slideRelIds,
1214
1291
  slideMasterRelId,
1215
- themeRelId
1292
+ themeRelId,
1293
+ embeddedIconFonts.map(({ face, relId }) => ({ typeface: face.typeface, relId }))
1216
1294
  );
1217
1295
  pkg.addPart("ppt/presentation.xml", presentationXml, CONTENT_TYPE_PPTX_PRESENTATION);
1218
1296
  for (let i = 0; i < slideCount; i++) {
@@ -1277,6 +1355,15 @@ async function buildPptxPackage(slideXmls, slideContexts, options) {
1277
1355
  type: REL_THEME,
1278
1356
  target: "theme/theme1.xml"
1279
1357
  });
1358
+ for (const { face, relId } of embeddedIconFonts) {
1359
+ const filename = `${face.fileStem}.fntdata`;
1360
+ pkg.addBinaryPart(`ppt/fonts/${filename}`, face.data, CONTENT_TYPE_PPTX_FONT);
1361
+ pkg.addRelationship("ppt/presentation.xml", {
1362
+ id: relId,
1363
+ type: REL_FONT,
1364
+ target: `fonts/${filename}`
1365
+ });
1366
+ }
1280
1367
  if (options.title || options.author || options.description) {
1281
1368
  pkg.setCoreProperties({
1282
1369
  title: options.title,
@@ -1507,7 +1594,7 @@ async function importDocument(pkg, options) {
1507
1594
  let extraction = null;
1508
1595
  if (inferTheme || inferLayouts) {
1509
1596
  try {
1510
- const { extractPptxTheme } = await import("./extract-MN7LA3NL.js");
1597
+ const { extractPptxTheme } = await import("./extract-UTAOG7LV.js");
1511
1598
  extraction = await extractPptxTheme(pkg);
1512
1599
  } catch (err) {
1513
1600
  warnInferenceFailure("theme extraction", err);
@@ -1524,7 +1611,7 @@ async function importDocument(pkg, options) {
1524
1611
  }
1525
1612
  if (inferLayouts) {
1526
1613
  try {
1527
- const { analyzePptxLayouts: analyzePptxLayouts2 } = await import("./layouts-DRWZGSPD.js");
1614
+ const { analyzePptxLayouts: analyzePptxLayouts2 } = await import("./layouts-2A7QNF6Y.js");
1528
1615
  const { colorHintsFromExtraction } = await import("./mapTheme-4TWH25FT.js");
1529
1616
  ctx.inference = await analyzePptxLayouts2(pkg, {
1530
1617
  colors: extraction ? colorHintsFromExtraction(extraction) : {}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  extractPlainText
3
- } from "./chunk-SBUW7NHR.js";
3
+ } from "./chunk-6X5XN3CZ.js";
4
4
  import {
5
5
  createPackage
6
- } from "./chunk-4V3KCHAP.js";
6
+ } from "./chunk-ILCJ3WFD.js";
7
7
  import {
8
8
  escapeXml,
9
9
  xmlDeclaration
@@ -22,7 +22,7 @@ import {
22
22
  getPartXml,
23
23
  openPackage,
24
24
  requireMainPartPath
25
- } from "./chunk-X2DEAXNK.js";
25
+ } from "./chunk-S5PCVMKU.js";
26
26
 
27
27
  // src/xlsx/index.ts
28
28
  import { markdownToDoc } from "@bendyline/squisq/doc";