ooxml-core 1.24.0 → 1.24.2

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 (66) hide show
  1. package/README.md +2 -2
  2. package/dist/{PptxHandler-FSKKPZZC.mjs → PptxHandler-5TWAQWPK.mjs} +2 -2
  3. package/dist/{PptxHandler-H7MEWJJJ.mjs → PptxHandler-KBJ4TN3T.mjs} +1 -1
  4. package/dist/{PptxHandler-DNSXWTQV.cjs → PptxHandler-KFEE7O7W.cjs} +2 -2
  5. package/dist/{PresentationBuilder-7TSENZTX.mjs → PresentationBuilder-SCT5AQBP.mjs} +1 -1
  6. package/dist/{PresentationBuilder-RIJWQSEU.mjs → PresentationBuilder-SVHIKT4C.mjs} +2 -2
  7. package/dist/{PresentationBuilder-A5NI35VN.cjs → PresentationBuilder-SXLRXYDI.cjs} +4 -4
  8. package/dist/automation/index.cjs +24 -1
  9. package/dist/automation/index.mjs +24 -1
  10. package/dist/{chunk-4QPOJCJG.mjs → chunk-7N7C5BNM.mjs} +1 -1
  11. package/dist/{chunk-DLFMCZZT.mjs → chunk-CWCDFPKN.mjs} +1 -1
  12. package/dist/{chunk-LF5E5ZOH.mjs → chunk-GVP262WE.mjs} +25 -62
  13. package/dist/{chunk-VQF6HQEE.mjs → chunk-KVKTHGIY.mjs} +1 -1
  14. package/dist/{chunk-BA7Z6ATM.mjs → chunk-NE7626A4.mjs} +4 -4
  15. package/dist/{chunk-Q5PKBQXH.mjs → chunk-ON7XVRHQ.mjs} +26 -63
  16. package/dist/{chunk-HL3FBJ6X.cjs → chunk-XK55DEUD.cjs} +25 -62
  17. package/dist/docx/embedded.cjs +24 -1
  18. package/dist/docx/embedded.mjs +24 -1
  19. package/dist/docx/index.cjs +24 -1
  20. package/dist/docx/index.mjs +24 -1
  21. package/dist/docx/load/index.cjs +24 -1
  22. package/dist/docx/load/index.mjs +24 -1
  23. package/dist/docx/ui/content-control-commands.d.ts +1 -1
  24. package/dist/docx/ui/content-control-commands.d.ts.map +1 -1
  25. package/dist/docx/ui/content-control-guard.d.ts.map +1 -1
  26. package/dist/docx/ui/content-control-occurrences.d.ts +17 -0
  27. package/dist/docx/ui/content-control-occurrences.d.ts.map +1 -0
  28. package/dist/docx/ui/content-control-temporary.d.ts +1 -4
  29. package/dist/docx/ui/content-control-temporary.d.ts.map +1 -1
  30. package/dist/docx/ui/form-field-guard.d.ts +10 -4
  31. package/dist/docx/ui/form-field-guard.d.ts.map +1 -1
  32. package/dist/docx/ui/form-protection-sections.d.ts +26 -0
  33. package/dist/docx/ui/form-protection-sections.d.ts.map +1 -0
  34. package/dist/docx/ui/form-text-paste.d.ts +35 -0
  35. package/dist/docx/ui/form-text-paste.d.ts.map +1 -0
  36. package/dist/docx/ui/index.cjs +266 -108
  37. package/dist/docx/ui/index.mjs +266 -108
  38. package/dist/docx/write-table-controls.d.ts +2 -1
  39. package/dist/docx/write-table-controls.d.ts.map +1 -1
  40. package/dist/pptx/automation/index.cjs +25 -67
  41. package/dist/pptx/automation/index.d.ts +3 -2
  42. package/dist/pptx/automation/index.d.ts.map +1 -1
  43. package/dist/pptx/automation/index.mjs +5 -5
  44. package/dist/pptx/chunks/{index-Q5mM8kIR.d.ts → index-4FmgJajb.d.ts} +3 -2
  45. package/dist/pptx/chunks/index-4FmgJajb.d.ts.map +1 -0
  46. package/dist/pptx/chunks/index-C3xhAMSa.d.ts +837 -0
  47. package/dist/pptx/chunks/index-C3xhAMSa.d.ts.map +1 -0
  48. package/dist/pptx/chunks/{index-CPhsd7Df.d.ts → index-nKQ4s7FA.d.ts} +24 -834
  49. package/dist/pptx/chunks/index-nKQ4s7FA.d.ts.map +1 -0
  50. package/dist/pptx/cli/index.cjs +25 -67
  51. package/dist/pptx/cli/index.mjs +4 -4
  52. package/dist/pptx/converter/index.d.ts +1 -1
  53. package/dist/pptx/converter/index.mjs +2 -2
  54. package/dist/pptx/editor/render/find-replace.d.ts +1 -1
  55. package/dist/pptx/editor/render/slide-operations.cjs +1 -1
  56. package/dist/pptx/editor/render/slide-operations.mjs +1 -1
  57. package/dist/pptx/index.cjs +25 -67
  58. package/dist/pptx/index.d.ts +4 -3
  59. package/dist/pptx/index.mjs +5 -5
  60. package/dist/pptx/node/index.cjs +40 -0
  61. package/dist/pptx/node/index.d.ts +13 -0
  62. package/dist/pptx/node/index.d.ts.map +1 -0
  63. package/dist/pptx/node/index.mjs +40 -0
  64. package/package.json +6 -1
  65. package/dist/pptx/chunks/index-CPhsd7Df.d.ts.map +0 -1
  66. package/dist/pptx/chunks/index-Q5mM8kIR.d.ts.map +0 -1
package/README.md CHANGED
@@ -56,7 +56,7 @@ import { xml, opc } from 'ooxml-core'; // or by namespace (shared building block
56
56
  | `crypto` | ECMA-376 package encryption ([MS-OFFCRYPTO]) for every format: `decryptOoxmlPackage`, `encryptOoxmlPackage` (agile AES-256/SHA-512 by default, or Standard), `isEncryptedOoxmlPackage`, and typed errors with a `code` (`password-required`, `incorrect-password`, `data-integrity`). The compound-file container comes from ole2 (inlined); not in the root entry. |
57
57
  | `collab` | Format-neutral real-time collaboration on Yjs: session and provider lifecycle, awareness/presence, transport-neutral sync (WebSocket, in-memory, any byte channel), update codecs, ordering helpers, asset sync and the product adapter seam. See `docs/collab-area.md`. |
58
58
  | `docx` | WordprocessingML: model, parser, preserving serializer, editing, validation. Also `/docx/embedded`. `/docx/layout` is the DOM-free pagination engine (an approximation of Word, not parity) and `/docx/load` detects and loads DOCX (also password-protected, `{ password }`) and legacy .doc (ole2 inlined). |
59
- | `pptx` | PresentationML: model, parser, serializer, editing, charts, SmartArt, converters, CLI, signatures. Subpaths `/pptx/converter`, `/pptx/cli`, `/pptx/signature-node`. |
59
+ | `pptx` | PresentationML: model, parser, serializer, editing, charts, SmartArt, converters, CLI, signatures. Subpaths `/pptx/converter`, `/pptx/cli`, `/pptx/signature-node`, `/pptx/node`. |
60
60
  | `xlsx` | SpreadsheetML: workbook model, `.xlsx`/`.xlsm` reader and preserving writer, formula engine (dependency graph, dynamic arrays, 490+ functions), Excel number formats, editing commands with undo, and the DOM-free grid layout (sizes, colours, conditional formats, charts as SVG, drawing anchors). SmartArt is shown from the cached drawing (not re-laid out) and kept verbatim on save. `/xlsx/load` detects and loads `.xlsx`, `.xlsm` (also password-protected: `loadWorkbook(bytes, { password })`, `saveWorkbook(workbook, 'xlsx', { password })`), legacy `.xls` (ole2 inlined) and CSV, and refuses `.xlsb` with a typed error. `/xlsx/collab` shares a workbook over Yjs (cells, formats, rows, columns, merges, sheets and defined names; see `docs/collab-area.md`). Digital signatures are detected and reported, never kept on save. An approximation of Excel, not parity. |
61
61
  | `visio` | Visio: `.vsdx` parsing, loading and bounded editing, page layers and visibility, and a conservative preview of legacy `.vsd` (through ole2). See `docs/visio-legacy-vsd.md`. |
62
62
  | `math` | Office Math: OMML to and from LaTeX and MathML, with colour and size helpers. |
@@ -93,7 +93,7 @@ count and the first cell.
93
93
  npm install ooxml-core
94
94
  ```
95
95
 
96
- Optional peer dependencies enable specific features: `node-forge` and `xml-crypto` for digital signatures (`/pptx/signature-node`), and `@napi-rs/canvas` for server-side rasterisation.
96
+ Optional peer dependencies enable specific features: `node-forge` and `xml-crypto` for digital signatures (`/pptx/signature-node`), and `@napi-rs/canvas` for server-side rasterisation. The `.ppt` writer's Node rasteriser for SVG pictures lives in the Node-only `/pptx/node` entry, so `ooxml-core/pptx` never references `@napi-rs/canvas` and browser builds of it never see that package. A `.ppt` save rasterises an SVG picture that has no raster fallback with the DOM. In Node.js, where there is no DOM, pass a rasteriser (`save(slides, { outputFormat: 'ppt', rasterizeSvg: rasterizeSvgInNode })`, with `rasterizeSvgInNode` from `ooxml-core/pptx/node`); without one the picture is written as a placeholder with a `ppt-image-format-unsupported` warning. Earlier releases loaded `@napi-rs/canvas` from `ooxml-core/pptx` itself for this.
97
97
 
98
98
  ## Quick start
99
99
 
@@ -1,5 +1,5 @@
1
- export { PptxHandler } from './chunk-Q5PKBQXH.mjs';
2
- import './chunk-4QPOJCJG.mjs';
1
+ export { PptxHandler } from './chunk-ON7XVRHQ.mjs';
2
+ import './chunk-7N7C5BNM.mjs';
3
3
  import './chunk-GBKBR4CX.mjs';
4
4
  import './chunk-3GXV5MPC.mjs';
5
5
  import './chunk-54S5A5PZ.mjs';
@@ -1,4 +1,4 @@
1
- export { PptxHandler } from './chunk-LF5E5ZOH.mjs';
1
+ export { PptxHandler } from './chunk-GVP262WE.mjs';
2
2
  import './chunk-6IIMI5RS.mjs';
3
3
  import './chunk-GXHKNSZX.mjs';
4
4
  import './chunk-CA7KCNL3.mjs';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkHL3FBJ6X_cjs = require('./chunk-HL3FBJ6X.cjs');
3
+ var chunkXK55DEUD_cjs = require('./chunk-XK55DEUD.cjs');
4
4
  require('./chunk-4LZIUJI3.cjs');
5
5
  require('./chunk-XZPZHXV4.cjs');
6
6
  require('./chunk-5W2QL4SB.cjs');
@@ -9,5 +9,5 @@ require('./chunk-5W2QL4SB.cjs');
9
9
 
10
10
  Object.defineProperty(exports, "PptxHandler", {
11
11
  enumerable: true,
12
- get: function () { return chunkHL3FBJ6X_cjs.PptxHandler; }
12
+ get: function () { return chunkXK55DEUD_cjs.PptxHandler; }
13
13
  });
@@ -1,4 +1,4 @@
1
- export { PresentationBuilder, STANDARD_LAYOUTS, buildBlankPresentationArchive } from './chunk-LF5E5ZOH.mjs';
1
+ export { PresentationBuilder, STANDARD_LAYOUTS, buildBlankPresentationArchive } from './chunk-GVP262WE.mjs';
2
2
  import './chunk-6IIMI5RS.mjs';
3
3
  import './chunk-GXHKNSZX.mjs';
4
4
  import './chunk-CA7KCNL3.mjs';
@@ -1,5 +1,5 @@
1
- export { PresentationBuilder, STANDARD_LAYOUTS, buildBlankPresentationArchive } from './chunk-Q5PKBQXH.mjs';
2
- import './chunk-4QPOJCJG.mjs';
1
+ export { PresentationBuilder, STANDARD_LAYOUTS, buildBlankPresentationArchive } from './chunk-ON7XVRHQ.mjs';
2
+ import './chunk-7N7C5BNM.mjs';
3
3
  import './chunk-GBKBR4CX.mjs';
4
4
  import './chunk-3GXV5MPC.mjs';
5
5
  import './chunk-54S5A5PZ.mjs';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkHL3FBJ6X_cjs = require('./chunk-HL3FBJ6X.cjs');
3
+ var chunkXK55DEUD_cjs = require('./chunk-XK55DEUD.cjs');
4
4
  require('./chunk-4LZIUJI3.cjs');
5
5
  require('./chunk-XZPZHXV4.cjs');
6
6
  require('./chunk-5W2QL4SB.cjs');
@@ -9,13 +9,13 @@ require('./chunk-5W2QL4SB.cjs');
9
9
 
10
10
  Object.defineProperty(exports, "PresentationBuilder", {
11
11
  enumerable: true,
12
- get: function () { return chunkHL3FBJ6X_cjs.PresentationBuilder; }
12
+ get: function () { return chunkXK55DEUD_cjs.PresentationBuilder; }
13
13
  });
14
14
  Object.defineProperty(exports, "STANDARD_LAYOUTS", {
15
15
  enumerable: true,
16
- get: function () { return chunkHL3FBJ6X_cjs.STANDARD_LAYOUTS; }
16
+ get: function () { return chunkXK55DEUD_cjs.STANDARD_LAYOUTS; }
17
17
  });
18
18
  Object.defineProperty(exports, "buildBlankPresentationArchive", {
19
19
  enumerable: true,
20
- get: function () { return chunkHL3FBJ6X_cjs.buildBlankPresentationArchive; }
20
+ get: function () { return chunkXK55DEUD_cjs.buildBlankPresentationArchive; }
21
21
  });
@@ -3772,7 +3772,24 @@ function controlIds(doc) {
3772
3772
  }
3773
3773
  var unusedControlId = (doc) => freshControlId(controlIds(doc));
3774
3774
  var holdsRowsOrCells = (node4) => node4?.nodeType === 1 && ["tr", "tc", "sdt", "customXml"].some((name3) => named2(node4, name3));
3775
+ function markersIntoContent(sdt) {
3776
+ const content2 = sdtContent(sdt);
3777
+ if (!content2) return;
3778
+ const anchor2 = content2.firstChild;
3779
+ let after = false;
3780
+ for (const child7 of Array.from(sdt.childNodes)) {
3781
+ if (child7 === content2) {
3782
+ after = true;
3783
+ continue;
3784
+ }
3785
+ const element3 = child7;
3786
+ if (child7.nodeType !== 1 || named2(element3, "sdtPr") || named2(element3, "sdtEndPr")) continue;
3787
+ if (after) content2.appendChild(child7);
3788
+ else content2.insertBefore(child7, anchor2);
3789
+ }
3790
+ }
3775
3791
  function takeOut(doc, element3, sdt) {
3792
+ markersIntoContent(sdt);
3776
3793
  const content2 = element3.parentNode;
3777
3794
  const parent = sdt.parentNode;
3778
3795
  const siblings = (from, step2) => {
@@ -3827,7 +3844,9 @@ function placeTableControl(doc, element3, next, base3) {
3827
3844
  }
3828
3845
  const shared = isSdt(before) && sdtContent(before);
3829
3846
  const { id: id4 } = next;
3830
- if (shared && typeof id4 === "string" && (createdFor.get(before) ?? idOf(before)) === id4) {
3847
+ const joins = shared && typeof id4 === "string" && (createdFor.get(before) ?? idOf(before)) === id4;
3848
+ if (joins) {
3849
+ markersIntoContent(before);
3831
3850
  for (const node4 of [...between, element3]) shared.appendChild(node4);
3832
3851
  return;
3833
3852
  }
@@ -3844,6 +3863,10 @@ function unwrapDroppedControls(elements2, next) {
3844
3863
  if (sdt) kept.set(sdt, Boolean(kept.get(sdt)) || next[index4] !== void 0);
3845
3864
  });
3846
3865
  for (const [sdt, keep2] of kept) if (!keep2) unwrapContentControl(sdt);
3866
+ elements2.forEach((element3, index4) => {
3867
+ const sdt = next[index4] === void 0 ? enclosingSdt(element3) : void 0;
3868
+ if (sdt) takeOut(element3.ownerDocument, element3, sdt);
3869
+ });
3847
3870
  }
3848
3871
 
3849
3872
  // docx/write-table.ts
@@ -3766,7 +3766,24 @@ function controlIds(doc) {
3766
3766
  }
3767
3767
  var unusedControlId = (doc) => freshControlId(controlIds(doc));
3768
3768
  var holdsRowsOrCells = (node4) => node4?.nodeType === 1 && ["tr", "tc", "sdt", "customXml"].some((name3) => named2(node4, name3));
3769
+ function markersIntoContent(sdt) {
3770
+ const content2 = sdtContent(sdt);
3771
+ if (!content2) return;
3772
+ const anchor2 = content2.firstChild;
3773
+ let after = false;
3774
+ for (const child7 of Array.from(sdt.childNodes)) {
3775
+ if (child7 === content2) {
3776
+ after = true;
3777
+ continue;
3778
+ }
3779
+ const element3 = child7;
3780
+ if (child7.nodeType !== 1 || named2(element3, "sdtPr") || named2(element3, "sdtEndPr")) continue;
3781
+ if (after) content2.appendChild(child7);
3782
+ else content2.insertBefore(child7, anchor2);
3783
+ }
3784
+ }
3769
3785
  function takeOut(doc, element3, sdt) {
3786
+ markersIntoContent(sdt);
3770
3787
  const content2 = element3.parentNode;
3771
3788
  const parent = sdt.parentNode;
3772
3789
  const siblings = (from, step2) => {
@@ -3821,7 +3838,9 @@ function placeTableControl(doc, element3, next, base3) {
3821
3838
  }
3822
3839
  const shared = isSdt(before) && sdtContent(before);
3823
3840
  const { id: id4 } = next;
3824
- if (shared && typeof id4 === "string" && (createdFor.get(before) ?? idOf(before)) === id4) {
3841
+ const joins = shared && typeof id4 === "string" && (createdFor.get(before) ?? idOf(before)) === id4;
3842
+ if (joins) {
3843
+ markersIntoContent(before);
3825
3844
  for (const node4 of [...between, element3]) shared.appendChild(node4);
3826
3845
  return;
3827
3846
  }
@@ -3838,6 +3857,10 @@ function unwrapDroppedControls(elements2, next) {
3838
3857
  if (sdt) kept.set(sdt, Boolean(kept.get(sdt)) || next[index4] !== void 0);
3839
3858
  });
3840
3859
  for (const [sdt, keep2] of kept) if (!keep2) unwrapContentControl(sdt);
3860
+ elements2.forEach((element3, index4) => {
3861
+ const sdt = next[index4] === void 0 ? enclosingSdt(element3) : void 0;
3862
+ if (sdt) takeOut(element3.ownerDocument, element3, sdt);
3863
+ });
3841
3864
  }
3842
3865
 
3843
3866
  // docx/write-table.ts
@@ -21818,7 +21818,7 @@ function findTextBearingElementById(elements3, elementId) {
21818
21818
  }
21819
21819
  async function loadNestedDeck(pptxBytes) {
21820
21820
  try {
21821
- const { PptxHandler } = await import('./PptxHandler-FSKKPZZC.mjs');
21821
+ const { PptxHandler } = await import('./PptxHandler-5TWAQWPK.mjs');
21822
21822
  const handler = new PptxHandler();
21823
21823
  const data = await handler.load(pptxBytes.buffer.slice(0));
21824
21824
  return { handler, slides: data.slides };
@@ -1,4 +1,4 @@
1
- import { hasTextProperties } from './chunk-4QPOJCJG.mjs';
1
+ import { hasTextProperties } from './chunk-7N7C5BNM.mjs';
2
2
  import { cloneSlide } from './chunk-54S5A5PZ.mjs';
3
3
 
4
4
  // pptx/core/builders/sdk/merge-operations.ts
@@ -48142,52 +48142,6 @@ async function buildDeckMasterRoundTripsFromPptx(pptxBytes) {
48142
48142
  };
48143
48143
  }
48144
48144
 
48145
- // pptx/core/ppt/writer/svg-rasterize-node.ts
48146
- var NODE_CANVAS_SPECIFIER = ["@napi-rs", "canvas"].join("/");
48147
- var nodeCanvas;
48148
- function isNodeCanvasModule(value) {
48149
- const candidate = value;
48150
- return typeof candidate?.createCanvas === "function" && typeof candidate.loadImage === "function";
48151
- }
48152
- function loadNodeCanvas() {
48153
- nodeCanvas ??= (async () => {
48154
- const runtime = globalThis.process;
48155
- if (!runtime?.versions?.node) {
48156
- return void 0;
48157
- }
48158
- try {
48159
- const imported = await import(
48160
- /* webpackIgnore: true */
48161
- /* @vite-ignore */
48162
- NODE_CANVAS_SPECIFIER
48163
- );
48164
- const withDefault = imported;
48165
- if (isNodeCanvasModule(imported)) {
48166
- return imported;
48167
- }
48168
- return isNodeCanvasModule(withDefault.default) ? withDefault.default : void 0;
48169
- } catch {
48170
- return void 0;
48171
- }
48172
- })();
48173
- return nodeCanvas;
48174
- }
48175
- async function rasterizeSvgInNode(svg, sizeFor) {
48176
- const canvasModule = await loadNodeCanvas();
48177
- if (!canvasModule) {
48178
- return void 0;
48179
- }
48180
- try {
48181
- const image = await canvasModule.loadImage(svg);
48182
- const { width, height } = sizeFor(image.width, image.height);
48183
- const canvas = canvasModule.createCanvas(width, height);
48184
- canvas.getContext("2d").drawImage(image, 0, 0, width, height);
48185
- return new Uint8Array(canvas.toBuffer("image/png"));
48186
- } catch {
48187
- return void 0;
48188
- }
48189
- }
48190
-
48191
48145
  // pptx/core/ppt/writer/svg-rasterize.ts
48192
48146
  var MAX_EDGE_PX = 2048;
48193
48147
  function hasDomRasteriser() {
@@ -48236,11 +48190,18 @@ async function rasterizeSvgInDom(svg, fallbackW, fallbackH) {
48236
48190
  URL.revokeObjectURL(url);
48237
48191
  }
48238
48192
  }
48239
- async function rasterizeSvg(svg, fallbackWidthPx, fallbackHeightPx) {
48240
- const png = hasDomRasteriser() ? await rasterizeSvgInDom(svg, fallbackWidthPx, fallbackHeightPx) : await rasterizeSvgInNode(
48241
- svg,
48242
- (w, h) => svgRasterSize(w, h, fallbackWidthPx, fallbackHeightPx)
48243
- );
48193
+ async function rasterizeSvg(svg, fallbackWidthPx, fallbackHeightPx, rasterize) {
48194
+ let png;
48195
+ if (rasterize) {
48196
+ const sizeFor = (w, h) => svgRasterSize(w, h, fallbackWidthPx, fallbackHeightPx);
48197
+ try {
48198
+ png = await rasterize(svg, sizeFor);
48199
+ } catch {
48200
+ png = void 0;
48201
+ }
48202
+ } else if (hasDomRasteriser()) {
48203
+ png = await rasterizeSvgInDom(svg, fallbackWidthPx, fallbackHeightPx);
48204
+ }
48244
48205
  return png ? { extension: "png", bytes: png } : void 0;
48245
48206
  }
48246
48207
 
@@ -48282,25 +48243,25 @@ function pathFormat(path2) {
48282
48243
  const ext = /\.([^./\\]+)$/u.exec(path2)?.[1]?.toLowerCase();
48283
48244
  return ext === "jpg" ? "jpeg" : ext === "tif" ? "tiff" : ext;
48284
48245
  }
48285
- async function toPicture(bytes, el) {
48246
+ async function toPicture(bytes, el, options) {
48286
48247
  const format = sniffImageFormat(bytes);
48287
48248
  if (format === "tiff") {
48288
48249
  return tiffToPicture(bytes);
48289
48250
  }
48290
48251
  if (format === "svg") {
48291
- return rasterizeSvg(bytes, el.width || 1, el.height || 1);
48252
+ return rasterizeSvg(bytes, el.width || 1, el.height || 1, options.rasterizeSvg);
48292
48253
  }
48293
48254
  return bytesToPicture(bytes);
48294
48255
  }
48295
- async function resolveOne(el, source, readPart) {
48256
+ async function resolveOne(el, source, readPart, options) {
48296
48257
  const inline = decodeBase64DataUrl(source.inline);
48297
48258
  const inlineFormat = inline ? sniffImageFormat(inline) : void 0;
48298
48259
  const partFormat = source.partPath ? pathFormat(source.partPath) : void 0;
48299
48260
  if (inline && (!partFormat || partFormat === inlineFormat)) {
48300
- return inlineFormat === "tiff" || inlineFormat === "svg" ? toPicture(inline, el) : void 0;
48261
+ return inlineFormat === "tiff" || inlineFormat === "svg" ? toPicture(inline, el, options) : void 0;
48301
48262
  }
48302
48263
  const part = source.partPath ? await readPart(source.partPath) : void 0;
48303
- const fromPart = part ? await toPicture(part, el) : void 0;
48264
+ const fromPart = part ? await toPicture(part, el, options) : void 0;
48304
48265
  if (fromPart) {
48305
48266
  return fromPart;
48306
48267
  }
@@ -48308,14 +48269,14 @@ async function resolveOne(el, source, readPart) {
48308
48269
  return void 0;
48309
48270
  }
48310
48271
  const fetched = await fetchBlobUrl(source.inline);
48311
- const fromFetch = fetched ? await toPicture(fetched, el) : void 0;
48272
+ const fromFetch = fetched ? await toPicture(fetched, el, options) : void 0;
48312
48273
  if (fromFetch || !source.svgPath) {
48313
48274
  return fromFetch;
48314
48275
  }
48315
48276
  const svg = await readPart(source.svgPath);
48316
- return svg ? rasterizeSvg(svg, el.width || 1, el.height || 1) : void 0;
48277
+ return svg ? rasterizeSvg(svg, el.width || 1, el.height || 1, options.rasterizeSvg) : void 0;
48317
48278
  }
48318
- async function resolvePictureSources(slides, readPart) {
48279
+ async function resolvePictureSources(slides, readPart, options = {}) {
48319
48280
  const pending = [];
48320
48281
  const walk = (elements2) => {
48321
48282
  for (const el of elements2) {
@@ -48333,7 +48294,7 @@ async function resolvePictureSources(slides, readPart) {
48333
48294
  const resolved = /* @__PURE__ */ new Map();
48334
48295
  await Promise.all(
48335
48296
  pending.map(async ([el, source]) => {
48336
- const picture = await resolveOne(el, source, readPart);
48297
+ const picture = await resolveOne(el, source, readPart, options);
48337
48298
  if (picture) {
48338
48299
  resolved.set(el, picture);
48339
48300
  }
@@ -72927,7 +72888,8 @@ var PptxHandlerRuntime52 = class extends PptxHandlerRuntime51 {
72927
72888
  * Serialise `slides` to a legacy binary PowerPoint 97-2003 (`.ppt`) file.
72928
72889
  *
72929
72890
  * @param slides - The (possibly mutated) live slide array.
72930
- * @param options - Only `pptPassword` is consulted; every OOXML-specific
72891
+ * @param options - `pptPassword` and `rasterizeSvg` (the `.ppt`-only
72892
+ * options), `customShows` and `slideMasters`; every OOXML-specific
72931
72893
  * option (conformance, embedded fonts, table styles, ...) has no binary
72932
72894
  * `.ppt` counterpart and is ignored.
72933
72895
  * @param saveAsPptx - Serialises the same slides as a Transitional `.pptx`
@@ -72943,7 +72905,8 @@ var PptxHandlerRuntime52 = class extends PptxHandlerRuntime51 {
72943
72905
  const resolvedMedia = await this.resolveAudioMediaBytes(slides);
72944
72906
  const resolvedPictures = await resolvePictureSources(
72945
72907
  slides,
72946
- async (path2) => this.zip.file(path2)?.async("uint8array")
72908
+ async (path2) => this.zip.file(path2)?.async("uint8array"),
72909
+ { rasterizeSvg: options?.rasterizeSvg }
72947
72910
  );
72948
72911
  const deck = convertDeckToWriteModel(
72949
72912
  slides,
@@ -1,4 +1,4 @@
1
- import { hasTextProperties, isImageLikeElement, blobUrlToDataUrl, getSubstituteFontFamily, stripXmlOrderSuffix } from './chunk-4QPOJCJG.mjs';
1
+ import { hasTextProperties, isImageLikeElement, blobUrlToDataUrl, getSubstituteFontFamily, stripXmlOrderSuffix } from './chunk-7N7C5BNM.mjs';
2
2
 
3
3
  // pptx/converter/media-context.ts
4
4
  var MIME_TO_EXT = {
@@ -1,6 +1,6 @@
1
- import { findText, replaceText, replaceTextInSlide, mergePresentation } from './chunk-DLFMCZZT.mjs';
2
- import { PresentationBuilder, PptxHandler, SlideBuilder, validateSeriesIndex, removeEmptyDataPoint, ensureDataPoint, ensureChartData, assertChartGradientSupported, toChartGradientFill, isLineDrawnChartType, chartFormatTargetKey, applyChartGroupOptionsInput, countExistingLayouts, addLayoutToSlideMaster, addLayoutContentType, createLayout, STANDARD_LAYOUTS, generateLayoutXml, layoutRelsXml, createTextElement, createShapeElement, createImageElement, createTableElement, createChartElement, createConnectorElement, createMediaElement, createGroupElement, relationshipsPartFor, parseRelationships, resolvePartPath, clonePartGraph, buildRelationshipsXml, buildBlankPresentationArchive, nextRelationshipId, relativePartTarget, PptxXmlBuilder } from './chunk-Q5PKBQXH.mjs';
3
- import { EMU_PER_PIXEL, EMU_PER_INCH, parseXml, first, elements, buildXml, bytesToBase64, base64ToBytes, hasTextProperties, escAttr } from './chunk-4QPOJCJG.mjs';
1
+ import { findText, replaceText, replaceTextInSlide, mergePresentation } from './chunk-CWCDFPKN.mjs';
2
+ import { PresentationBuilder, PptxHandler, SlideBuilder, validateSeriesIndex, removeEmptyDataPoint, ensureDataPoint, ensureChartData, assertChartGradientSupported, toChartGradientFill, isLineDrawnChartType, chartFormatTargetKey, applyChartGroupOptionsInput, countExistingLayouts, addLayoutToSlideMaster, addLayoutContentType, createLayout, STANDARD_LAYOUTS, generateLayoutXml, layoutRelsXml, createTextElement, createShapeElement, createImageElement, createTableElement, createChartElement, createConnectorElement, createMediaElement, createGroupElement, relationshipsPartFor, parseRelationships, resolvePartPath, clonePartGraph, buildRelationshipsXml, buildBlankPresentationArchive, nextRelationshipId, relativePartTarget, PptxXmlBuilder } from './chunk-ON7XVRHQ.mjs';
3
+ import { EMU_PER_PIXEL, EMU_PER_INCH, parseXml, first, elements, buildXml, bytesToBase64, base64ToBytes, hasTextProperties, escAttr } from './chunk-7N7C5BNM.mjs';
4
4
  import { openPptxZip } from './chunk-GBKBR4CX.mjs';
5
5
  import { cloneSlide, cloneElement } from './chunk-54S5A5PZ.mjs';
6
6
 
@@ -14771,7 +14771,7 @@ async function setPresentationRunText(bytes, slideIndex, elementId, runIndex, te
14771
14771
  async function createPresentationFromOutline(slides, options = {}) {
14772
14772
  if (!(slides instanceof Array) || !slides.length || slides.length > 200)
14773
14773
  throw new Error("A presentation outline has 1 to 200 slides");
14774
- const { PresentationBuilder: PresentationBuilder2 } = await import('./PresentationBuilder-RIJWQSEU.mjs');
14774
+ const { PresentationBuilder: PresentationBuilder2 } = await import('./PresentationBuilder-SVHIKT4C.mjs');
14775
14775
  const { handler, data, createSlide } = await PresentationBuilder2.create({
14776
14776
  ...options.title ? { title: options.title } : {}
14777
14777
  });
@@ -1,4 +1,4 @@
1
- import { NS, SMART_ART_DEFINITION_PARTS, VML_SHAPE_TAGS, isAlternateContentChoiceXmlSupported, parseVmlElement, unwrapAlternateContent, xmlChild, xmlAttr, parseDrawingMediaReference, cropShapeForPresetGeometry, isHeaderFooterPlaceholder, xmlPath, inheritedPlaceholderFieldType, parseParagraphLevel, xmlHasChild, parseParagraphExtraAttributes, parseParagraphMargins, parseAlignmentAttr, parseParagraphRtl, parseTabStops, resolveParagraphAlignment, xmlText, parseBodyPrBooleanAttrs, selectAlternateContentBranch, parseBulletSizePercent, extractColorChoiceXml, formatAutoNumberMarker, parseParagraphSpacingPx, createBuiltinVariables, resolveCoordinate, readPathListCommandOrder, parseStructuredCustomGeometry, parseAdjustmentValues, parseGuideDefinitions, evaluateGuides, evaluateGeometryPaths, inheritCustomGeometryCommandOrder, parseInkMlContent, parseModel3DScene, remapElementShapeIds, parseShapeId, isTemplateElementId, remapShapeIdReferences, reapplyAlternateContentToTree, buildOle2, SHAPE_TREE_ELEMENT_TAGS, MAX_SHAPE_ID, orderedXmlKey, safeResolveZipPath, parseXml, elements, parseDataUrlToBytes, base64Decode, EMU_PER_PX, reorderObjectKeys, encodeCompressedPng, zlibStore, hash, concatArrays, encodePasswordUtf16LE, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, uint32LE, pptxActionToElementAction, buildClrMapOverrideXml, applyActiveXControlsToSlide, BLIP_FILL_ORDER, SP_PR_ORDER, hasShapeProperties, ensureXmlChild, hasTextProperties, inkElementToStrokes, buildInkMlContent, ensureXmlChildOrCreate, isXmlNode, applyChartLayouts, stripXmlOrderSuffix, serializeTabStop, colorsEqual, generateFontGuid, applyBubbleChartOptions, applyChartUpDownBars, applyDataLabelsRangeToDLbls, applyChartAxisScaling, applyChartAxisLabelFormatting, upsertChartAxisChild, applyChartDateAxisUnits, applyChartAxisDisplayUnitsToXml, writeChartShapeProps, resolveTxPrDefRPr, buildDefRPrTextProperties, buildChartGradFillXml, applySeriesMarkerToXml, applySeriesDataPointsToXml, chartColorHex, applyChartManualLayout, chartTrendlineType, buildTrendlineLabel, serializeColorChoice, replaceOleEmbedding, findKey, collectAllText, buildNodeGuidMap, buildPresentationGuidMap, regenerateSmartArtDrawingShapes, buildFabricatedDrawingXml, buildFabricatedDiagramDataXml, DIAGRAM_DRAWING_CONTENT_TYPE, DIAGRAM_DRAWING_REL_TYPE, applyDiagramRelationshipIds, buildSaveTimeCustomGeometryXml, applyCustomGeometryGuideOverrides, avLstForPreset, filterValidShapeAdjustmentEntries, applyDrawingMediaReference, XML_PROLOG, DGM_XMLNS, xmlEscape, writeBodyPrBooleanAttrs, applyTextBodySp3d, writeShapeEffects, SHAPE_STYLE_ORDER, roundCoordinate, scaleVectorToIntegers, EMU_PER_PIXEL, P14_GUIDE_URI, P15_GUIDE_URI, buildGuideListExtension, resetSpPrFormattingForStyleMatrix, fillIsPurelyStyleMatrix, serializeColorChoiceWithRef, createLineStyleGate, applyDrawingLineDash, getSignaturePathsToStrip, mergeSmartArtPointXml, mergeSmartArtConnectionXml, obfuscateFont, containsConvertibleStrictNamespaceAttribute, convertXmlToStrict, applySeriesPictureOptionsToXml, findChartExtByUri, findChildByLocalName, regenerateClonedUniqueId, buildChartUniqueIdExtLst, createOfficeGuid, isContentPoint, newSmartArtGuid, parseChartUserShapesDrawing, xmlChildren, applyChartGradientToSpPr, setAutoTitleDeleted, insertAt, replaceFirstText, shouldRebuildFromParagraphs, buildPointFromParagraphs, shouldRebuildFromRuns, buildPointFromRuns, buildPointText, ensureXmlChildren, TC_PR_BORDERS_ORDER, writeChartColorChoice, parseChartFormulaRange, expandRangeAddresses, applyCellWritesToWorksheet, stripParentDirSegments, parseChartUniqueId, buildChartMarkerXml, chartGradientsEqual, chartColorChoiceValue, preservesSpreadsheetXmlWhitespace, buildEffectDagTreeFromXml, syncPictureShapeTypeWithCropShape, buildSrgbColorChoice, fetchUrlToBytes, parseChartWideTextStyle, parseDefRPrTextStyle, parseChartDataLabelOptions, shadowOffsetToDistanceAndDirection, positiveFixedAngleAttribute, xmlAttrNumber, parseCustomShows, parseShapeProps, parseActiveXControlsFromSlide, convertMetafileToDataUrl, blobUrlToDataUrl, first, children, ooxmlGradientAngleToCssDegrees, isAlternateContentChoiceSupported, SvgExporter, detectStrictConformance, normalizeStrictXml, normalizeStShapeType, applyCustomShows, applySections, reorderObjectKeysByLocalName, PRESENTATION_CHILD_ORDER, applyKinsokuToXml, normalizeNamespaceUri, backgroundStyleRefIsCurrent, backgroundRefNode, captureStyleBaseline, STYLE_MATRIX_FILL_KEYS, STYLE_MATRIX_LINE_KEYS, STYLE_MATRIX_EFFECT_KEYS, detectOleObjectType, inferOleExtensionFromTarget, deriveSlideTitles, parseSlideDrawingGuides, slideBackgroundStyleRefFromNode, parseP14DirectChild, parseP14FromExtLst, P14_TRANSITION_TYPES, decodeXmlEntities, preservesXmlWhitespace, annotateCustomGeometryCommandOrder, annotateSmartArtTextOrder, encodeXmlAttributeValue, encodeXmlTextValue, stripXmlOrderMarkers, MIN_ELEMENT_SIZE, createDrawingObjectId, DEFAULT_TEXT_FONT_SIZE, EncryptedFileError, decodePptxJsonText, deserializePptxFromJson, applyImportedPptxData, DEFAULT_CHART_GRADIENT_ANGLE, supportsChartGradientFill, svgToCustomGeometryPaths, escAttr, MIN_TABLE_DIMENSION, MAX_TABLE_DIMENSION, SYSTEM_COLOR_MAP, PRESET_COLOR_MAP, effectChild, mergeEffectNode, mergeAttributeEffectNode, estimateMediaDurationMs, parseVmlElements, prismFamilyFlags, prismFamilyTypeOfNode, prismFamilyTypeForFlags, P14_DIR_IS_ORIENTATION_TYPE, IncorrectPasswordError, applyThemeToData, detectFileFormat, parseOle2, decryptPptx, encryptPptx, escText, parseDrawingLineDash, parseLineSpacingMultiplier, parseLineSpacingExactPt, parseEncryptionInfo, RC4_ALG_ID, isOle2CompoundFile, ENTRY_TYPE_ROOT, PML_XMLNS, solidFill, esc, OOXML_PERCENT_UNITS, backgroundStylePreset, isDarkColorMap, backgroundStyleColorMap, reResolveElementsForColorMapChange, findThemeEffectScheme, wrapFormatSchemeXml, effectIsPurelyStyleMatrix, emu, gradFill, loadThemeVariants, parsePresentationDrawingGuides, parsePresentationSmartTags, resolveLayoutDisplayName, detectDigitalSignatures, unwrapOleEmbedding, mimeTypeForOleFile, oleBytesToDataUrl, extractGuidFromPartName, deobfuscateFont, detectFontFormat, parseKinsoku, parseLineStyle, parseChartUpDownBars, parseDataTable, parseChart3DSurfaces, parseChartAxes, parseBubbleChartOptions, parseChartLayouts, parseCxChartSeries, parseChartDataPointPictureBlipRel, parseSeriesDataPoints, parseMarker, parseSeriesDataLabels, parseChartDataPointPicture, parseImplicitBlipPictureFill, parseEmbeddedXlsx, relAttr, buildXml, EMU_PER_POINT, chartTrendlineKind, parseChartManualLayout, parseDiagramRelationshipIds, parseSmartArtTextParagraphs, firstParagraphRuns, smartArtParagraphsText, parseSmartArtPresLayoutVars, readChartManualLayoutValues, parseSmartArtConnection, projectSmartArtNodeText, resolveSmartArtNodeStyleRoles, resolveSmartArtNodeCoherent3DOff, parseSmartArtDefinitionMetadata, parseSmartArtColorStyleLabels, buildSmartArtColorLists, buildSmartArtColorRoleMap, parseSmartArtQuickStyleLabels, resolveSmartArtEffectIntensity, parseSmartArtStyleLabelRefs, extractStyleReferenceColorXml, withThemePlaceholderColor, getElementOrientationMatrix, isTextOrientationMatrix, TEXT_ORIENTATION_IDENTITY, multiplyTextOrientationMatrices, CHART_ERROR_VALUE_TYPES, CHART_ERROR_BAR_TYPES, CHART_ERROR_BAR_DIRECTIONS } from './chunk-4QPOJCJG.mjs';
1
+ import { NS, SMART_ART_DEFINITION_PARTS, VML_SHAPE_TAGS, isAlternateContentChoiceXmlSupported, parseVmlElement, unwrapAlternateContent, xmlChild, xmlAttr, parseDrawingMediaReference, cropShapeForPresetGeometry, isHeaderFooterPlaceholder, xmlPath, inheritedPlaceholderFieldType, parseParagraphLevel, xmlHasChild, parseParagraphExtraAttributes, parseParagraphMargins, parseAlignmentAttr, parseParagraphRtl, parseTabStops, resolveParagraphAlignment, xmlText, parseBodyPrBooleanAttrs, selectAlternateContentBranch, parseBulletSizePercent, extractColorChoiceXml, formatAutoNumberMarker, parseParagraphSpacingPx, createBuiltinVariables, resolveCoordinate, readPathListCommandOrder, parseStructuredCustomGeometry, parseAdjustmentValues, parseGuideDefinitions, evaluateGuides, evaluateGeometryPaths, inheritCustomGeometryCommandOrder, parseInkMlContent, parseModel3DScene, remapElementShapeIds, parseShapeId, isTemplateElementId, remapShapeIdReferences, reapplyAlternateContentToTree, buildOle2, SHAPE_TREE_ELEMENT_TAGS, MAX_SHAPE_ID, orderedXmlKey, safeResolveZipPath, parseXml, elements, parseDataUrlToBytes, base64Decode, EMU_PER_PX, reorderObjectKeys, encodeCompressedPng, zlibStore, hash, concatArrays, encodePasswordUtf16LE, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, uint32LE, pptxActionToElementAction, buildClrMapOverrideXml, applyActiveXControlsToSlide, BLIP_FILL_ORDER, SP_PR_ORDER, hasShapeProperties, ensureXmlChild, hasTextProperties, inkElementToStrokes, buildInkMlContent, ensureXmlChildOrCreate, isXmlNode, applyChartLayouts, stripXmlOrderSuffix, serializeTabStop, colorsEqual, generateFontGuid, applyBubbleChartOptions, applyChartUpDownBars, applyDataLabelsRangeToDLbls, applyChartAxisScaling, applyChartAxisLabelFormatting, upsertChartAxisChild, applyChartDateAxisUnits, applyChartAxisDisplayUnitsToXml, writeChartShapeProps, resolveTxPrDefRPr, buildDefRPrTextProperties, buildChartGradFillXml, applySeriesMarkerToXml, applySeriesDataPointsToXml, chartColorHex, applyChartManualLayout, chartTrendlineType, buildTrendlineLabel, serializeColorChoice, replaceOleEmbedding, findKey, collectAllText, buildNodeGuidMap, buildPresentationGuidMap, regenerateSmartArtDrawingShapes, buildFabricatedDrawingXml, buildFabricatedDiagramDataXml, DIAGRAM_DRAWING_CONTENT_TYPE, DIAGRAM_DRAWING_REL_TYPE, applyDiagramRelationshipIds, buildSaveTimeCustomGeometryXml, applyCustomGeometryGuideOverrides, avLstForPreset, filterValidShapeAdjustmentEntries, applyDrawingMediaReference, XML_PROLOG, DGM_XMLNS, xmlEscape, writeBodyPrBooleanAttrs, applyTextBodySp3d, writeShapeEffects, SHAPE_STYLE_ORDER, roundCoordinate, scaleVectorToIntegers, EMU_PER_PIXEL, P14_GUIDE_URI, P15_GUIDE_URI, buildGuideListExtension, resetSpPrFormattingForStyleMatrix, fillIsPurelyStyleMatrix, serializeColorChoiceWithRef, createLineStyleGate, applyDrawingLineDash, getSignaturePathsToStrip, mergeSmartArtPointXml, mergeSmartArtConnectionXml, obfuscateFont, containsConvertibleStrictNamespaceAttribute, convertXmlToStrict, applySeriesPictureOptionsToXml, findChartExtByUri, findChildByLocalName, regenerateClonedUniqueId, buildChartUniqueIdExtLst, createOfficeGuid, isContentPoint, newSmartArtGuid, parseChartUserShapesDrawing, xmlChildren, applyChartGradientToSpPr, setAutoTitleDeleted, insertAt, replaceFirstText, shouldRebuildFromParagraphs, buildPointFromParagraphs, shouldRebuildFromRuns, buildPointFromRuns, buildPointText, ensureXmlChildren, TC_PR_BORDERS_ORDER, writeChartColorChoice, parseChartFormulaRange, expandRangeAddresses, applyCellWritesToWorksheet, stripParentDirSegments, parseChartUniqueId, buildChartMarkerXml, chartGradientsEqual, chartColorChoiceValue, preservesSpreadsheetXmlWhitespace, buildEffectDagTreeFromXml, syncPictureShapeTypeWithCropShape, buildSrgbColorChoice, fetchUrlToBytes, parseChartWideTextStyle, parseDefRPrTextStyle, parseChartDataLabelOptions, shadowOffsetToDistanceAndDirection, positiveFixedAngleAttribute, xmlAttrNumber, parseCustomShows, parseShapeProps, parseActiveXControlsFromSlide, convertMetafileToDataUrl, blobUrlToDataUrl, first, children, ooxmlGradientAngleToCssDegrees, isAlternateContentChoiceSupported, SvgExporter, detectStrictConformance, normalizeStrictXml, normalizeStShapeType, applyCustomShows, applySections, reorderObjectKeysByLocalName, PRESENTATION_CHILD_ORDER, applyKinsokuToXml, normalizeNamespaceUri, backgroundStyleRefIsCurrent, backgroundRefNode, captureStyleBaseline, STYLE_MATRIX_FILL_KEYS, STYLE_MATRIX_LINE_KEYS, STYLE_MATRIX_EFFECT_KEYS, detectOleObjectType, inferOleExtensionFromTarget, deriveSlideTitles, parseSlideDrawingGuides, slideBackgroundStyleRefFromNode, parseP14DirectChild, parseP14FromExtLst, P14_TRANSITION_TYPES, decodeXmlEntities, preservesXmlWhitespace, annotateCustomGeometryCommandOrder, annotateSmartArtTextOrder, encodeXmlAttributeValue, encodeXmlTextValue, stripXmlOrderMarkers, MIN_ELEMENT_SIZE, createDrawingObjectId, DEFAULT_TEXT_FONT_SIZE, EncryptedFileError, decodePptxJsonText, deserializePptxFromJson, applyImportedPptxData, DEFAULT_CHART_GRADIENT_ANGLE, supportsChartGradientFill, svgToCustomGeometryPaths, escAttr, MIN_TABLE_DIMENSION, MAX_TABLE_DIMENSION, SYSTEM_COLOR_MAP, PRESET_COLOR_MAP, effectChild, mergeEffectNode, mergeAttributeEffectNode, estimateMediaDurationMs, parseVmlElements, prismFamilyFlags, prismFamilyTypeOfNode, prismFamilyTypeForFlags, P14_DIR_IS_ORIENTATION_TYPE, IncorrectPasswordError, applyThemeToData, detectFileFormat, parseOle2, decryptPptx, encryptPptx, escText, parseDrawingLineDash, parseLineSpacingMultiplier, parseLineSpacingExactPt, parseEncryptionInfo, RC4_ALG_ID, isOle2CompoundFile, ENTRY_TYPE_ROOT, PML_XMLNS, solidFill, esc, OOXML_PERCENT_UNITS, backgroundStylePreset, isDarkColorMap, backgroundStyleColorMap, reResolveElementsForColorMapChange, findThemeEffectScheme, wrapFormatSchemeXml, effectIsPurelyStyleMatrix, emu, gradFill, loadThemeVariants, parsePresentationDrawingGuides, parsePresentationSmartTags, resolveLayoutDisplayName, detectDigitalSignatures, unwrapOleEmbedding, mimeTypeForOleFile, oleBytesToDataUrl, extractGuidFromPartName, deobfuscateFont, detectFontFormat, parseKinsoku, parseLineStyle, parseChartUpDownBars, parseDataTable, parseChart3DSurfaces, parseChartAxes, parseBubbleChartOptions, parseChartLayouts, parseCxChartSeries, parseChartDataPointPictureBlipRel, parseSeriesDataPoints, parseMarker, parseSeriesDataLabels, parseChartDataPointPicture, parseImplicitBlipPictureFill, parseEmbeddedXlsx, relAttr, buildXml, EMU_PER_POINT, chartTrendlineKind, parseChartManualLayout, parseDiagramRelationshipIds, parseSmartArtTextParagraphs, firstParagraphRuns, smartArtParagraphsText, parseSmartArtPresLayoutVars, readChartManualLayoutValues, parseSmartArtConnection, projectSmartArtNodeText, resolveSmartArtNodeStyleRoles, resolveSmartArtNodeCoherent3DOff, parseSmartArtDefinitionMetadata, parseSmartArtColorStyleLabels, buildSmartArtColorLists, buildSmartArtColorRoleMap, parseSmartArtQuickStyleLabels, resolveSmartArtEffectIntensity, parseSmartArtStyleLabelRefs, extractStyleReferenceColorXml, withThemePlaceholderColor, getElementOrientationMatrix, isTextOrientationMatrix, TEXT_ORIENTATION_IDENTITY, multiplyTextOrientationMatrices, CHART_ERROR_VALUE_TYPES, CHART_ERROR_BAR_TYPES, CHART_ERROR_BAR_DIRECTIONS } from './chunk-7N7C5BNM.mjs';
2
2
  import { openPptxZip, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, openNestedZip, DEFAULT_MAX_UNCOMPRESSED_BYTES, guardZip, ZipBombError, MAX_ZIP_ENTRY_COUNT } from './chunk-GBKBR4CX.mjs';
3
3
  import { resolveSmartArtLayoutCategory } from './chunk-3GXV5MPC.mjs';
4
4
  import { cloneXmlObject, applySmartArtLayoutDefinition, cloneSlide, parseSmartArtLayoutDefinition } from './chunk-54S5A5PZ.mjs';
@@ -47472,52 +47472,6 @@ async function buildDeckMasterRoundTripsFromPptx(pptxBytes) {
47472
47472
  };
47473
47473
  }
47474
47474
 
47475
- // pptx/core/ppt/writer/svg-rasterize-node.ts
47476
- var NODE_CANVAS_SPECIFIER = ["@napi-rs", "canvas"].join("/");
47477
- var nodeCanvas;
47478
- function isNodeCanvasModule(value) {
47479
- const candidate = value;
47480
- return typeof candidate?.createCanvas === "function" && typeof candidate.loadImage === "function";
47481
- }
47482
- function loadNodeCanvas() {
47483
- nodeCanvas ??= (async () => {
47484
- const runtime = globalThis.process;
47485
- if (!runtime?.versions?.node) {
47486
- return void 0;
47487
- }
47488
- try {
47489
- const imported = await import(
47490
- /* webpackIgnore: true */
47491
- /* @vite-ignore */
47492
- NODE_CANVAS_SPECIFIER
47493
- );
47494
- const withDefault = imported;
47495
- if (isNodeCanvasModule(imported)) {
47496
- return imported;
47497
- }
47498
- return isNodeCanvasModule(withDefault.default) ? withDefault.default : void 0;
47499
- } catch {
47500
- return void 0;
47501
- }
47502
- })();
47503
- return nodeCanvas;
47504
- }
47505
- async function rasterizeSvgInNode(svg, sizeFor) {
47506
- const canvasModule = await loadNodeCanvas();
47507
- if (!canvasModule) {
47508
- return void 0;
47509
- }
47510
- try {
47511
- const image = await canvasModule.loadImage(svg);
47512
- const { width, height } = sizeFor(image.width, image.height);
47513
- const canvas = canvasModule.createCanvas(width, height);
47514
- canvas.getContext("2d").drawImage(image, 0, 0, width, height);
47515
- return new Uint8Array(canvas.toBuffer("image/png"));
47516
- } catch {
47517
- return void 0;
47518
- }
47519
- }
47520
-
47521
47475
  // pptx/core/ppt/writer/svg-rasterize.ts
47522
47476
  var MAX_EDGE_PX = 2048;
47523
47477
  function hasDomRasteriser() {
@@ -47566,11 +47520,18 @@ async function rasterizeSvgInDom(svg, fallbackW, fallbackH) {
47566
47520
  URL.revokeObjectURL(url);
47567
47521
  }
47568
47522
  }
47569
- async function rasterizeSvg(svg, fallbackWidthPx, fallbackHeightPx) {
47570
- const png = hasDomRasteriser() ? await rasterizeSvgInDom(svg, fallbackWidthPx, fallbackHeightPx) : await rasterizeSvgInNode(
47571
- svg,
47572
- (w, h) => svgRasterSize(w, h, fallbackWidthPx, fallbackHeightPx)
47573
- );
47523
+ async function rasterizeSvg(svg, fallbackWidthPx, fallbackHeightPx, rasterize) {
47524
+ let png;
47525
+ if (rasterize) {
47526
+ const sizeFor = (w, h) => svgRasterSize(w, h, fallbackWidthPx, fallbackHeightPx);
47527
+ try {
47528
+ png = await rasterize(svg, sizeFor);
47529
+ } catch {
47530
+ png = void 0;
47531
+ }
47532
+ } else if (hasDomRasteriser()) {
47533
+ png = await rasterizeSvgInDom(svg, fallbackWidthPx, fallbackHeightPx);
47534
+ }
47574
47535
  return png ? { extension: "png", bytes: png } : void 0;
47575
47536
  }
47576
47537
 
@@ -47612,25 +47573,25 @@ function pathFormat(path2) {
47612
47573
  const ext = /\.([^./\\]+)$/u.exec(path2)?.[1]?.toLowerCase();
47613
47574
  return ext === "jpg" ? "jpeg" : ext === "tif" ? "tiff" : ext;
47614
47575
  }
47615
- async function toPicture(bytes, el) {
47576
+ async function toPicture(bytes, el, options) {
47616
47577
  const format = sniffImageFormat(bytes);
47617
47578
  if (format === "tiff") {
47618
47579
  return tiffToPicture(bytes);
47619
47580
  }
47620
47581
  if (format === "svg") {
47621
- return rasterizeSvg(bytes, el.width || 1, el.height || 1);
47582
+ return rasterizeSvg(bytes, el.width || 1, el.height || 1, options.rasterizeSvg);
47622
47583
  }
47623
47584
  return bytesToPicture(bytes);
47624
47585
  }
47625
- async function resolveOne(el, source, readPart) {
47586
+ async function resolveOne(el, source, readPart, options) {
47626
47587
  const inline = decodeBase64DataUrl(source.inline);
47627
47588
  const inlineFormat = inline ? sniffImageFormat(inline) : void 0;
47628
47589
  const partFormat = source.partPath ? pathFormat(source.partPath) : void 0;
47629
47590
  if (inline && (!partFormat || partFormat === inlineFormat)) {
47630
- return inlineFormat === "tiff" || inlineFormat === "svg" ? toPicture(inline, el) : void 0;
47591
+ return inlineFormat === "tiff" || inlineFormat === "svg" ? toPicture(inline, el, options) : void 0;
47631
47592
  }
47632
47593
  const part = source.partPath ? await readPart(source.partPath) : void 0;
47633
- const fromPart = part ? await toPicture(part, el) : void 0;
47594
+ const fromPart = part ? await toPicture(part, el, options) : void 0;
47634
47595
  if (fromPart) {
47635
47596
  return fromPart;
47636
47597
  }
@@ -47638,14 +47599,14 @@ async function resolveOne(el, source, readPart) {
47638
47599
  return void 0;
47639
47600
  }
47640
47601
  const fetched = await fetchBlobUrl(source.inline);
47641
- const fromFetch = fetched ? await toPicture(fetched, el) : void 0;
47602
+ const fromFetch = fetched ? await toPicture(fetched, el, options) : void 0;
47642
47603
  if (fromFetch || !source.svgPath) {
47643
47604
  return fromFetch;
47644
47605
  }
47645
47606
  const svg = await readPart(source.svgPath);
47646
- return svg ? rasterizeSvg(svg, el.width || 1, el.height || 1) : void 0;
47607
+ return svg ? rasterizeSvg(svg, el.width || 1, el.height || 1, options.rasterizeSvg) : void 0;
47647
47608
  }
47648
- async function resolvePictureSources(slides, readPart) {
47609
+ async function resolvePictureSources(slides, readPart, options = {}) {
47649
47610
  const pending = [];
47650
47611
  const walk = (elements2) => {
47651
47612
  for (const el of elements2) {
@@ -47663,7 +47624,7 @@ async function resolvePictureSources(slides, readPart) {
47663
47624
  const resolved = /* @__PURE__ */ new Map();
47664
47625
  await Promise.all(
47665
47626
  pending.map(async ([el, source]) => {
47666
- const picture = await resolveOne(el, source, readPart);
47627
+ const picture = await resolveOne(el, source, readPart, options);
47667
47628
  if (picture) {
47668
47629
  resolved.set(el, picture);
47669
47630
  }
@@ -71869,7 +71830,8 @@ var PptxHandlerRuntime52 = class extends PptxHandlerRuntime51 {
71869
71830
  * Serialise `slides` to a legacy binary PowerPoint 97-2003 (`.ppt`) file.
71870
71831
  *
71871
71832
  * @param slides - The (possibly mutated) live slide array.
71872
- * @param options - Only `pptPassword` is consulted; every OOXML-specific
71833
+ * @param options - `pptPassword` and `rasterizeSvg` (the `.ppt`-only
71834
+ * options), `customShows` and `slideMasters`; every OOXML-specific
71873
71835
  * option (conformance, embedded fonts, table styles, ...) has no binary
71874
71836
  * `.ppt` counterpart and is ignored.
71875
71837
  * @param saveAsPptx - Serialises the same slides as a Transitional `.pptx`
@@ -71885,7 +71847,8 @@ var PptxHandlerRuntime52 = class extends PptxHandlerRuntime51 {
71885
71847
  const resolvedMedia = await this.resolveAudioMediaBytes(slides);
71886
71848
  const resolvedPictures = await resolvePictureSources(
71887
71849
  slides,
71888
- async (path2) => this.zip.file(path2)?.async("uint8array")
71850
+ async (path2) => this.zip.file(path2)?.async("uint8array"),
71851
+ { rasterizeSvg: options?.rasterizeSvg }
71889
71852
  );
71890
71853
  const deck = convertDeckToWriteModel(
71891
71854
  slides,