ooxml-core 1.19.2 → 1.21.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 (352) hide show
  1. package/README.md +47 -1
  2. package/dist/{PptxHandler-6TNIQ7S5.cjs → PptxHandler-DNSXWTQV.cjs} +3 -3
  3. package/dist/{PptxHandler-2V4PQL6O.mjs → PptxHandler-FSKKPZZC.mjs} +3 -3
  4. package/dist/PptxHandler-H7MEWJJJ.mjs +4 -0
  5. package/dist/{PresentationBuilder-G7MPEGXJ.mjs → PresentationBuilder-7TSENZTX.mjs} +2 -2
  6. package/dist/{PresentationBuilder-RM52LCVN.cjs → PresentationBuilder-A5NI35VN.cjs} +5 -5
  7. package/dist/{PresentationBuilder-HQ6C7L4V.mjs → PresentationBuilder-RIJWQSEU.mjs} +3 -3
  8. package/dist/automation/docx-forms.d.ts +26 -0
  9. package/dist/automation/docx-forms.d.ts.map +1 -0
  10. package/dist/automation/index.cjs +6280 -2506
  11. package/dist/automation/index.d.ts +1 -0
  12. package/dist/automation/index.d.ts.map +1 -1
  13. package/dist/automation/index.mjs +6277 -2507
  14. package/dist/automation/xlsx-read.d.ts +56 -0
  15. package/dist/automation/xlsx-read.d.ts.map +1 -0
  16. package/dist/automation/xlsx.d.ts +105 -4
  17. package/dist/automation/xlsx.d.ts.map +1 -1
  18. package/dist/chart/axis-range.d.ts.map +1 -1
  19. package/dist/chart/bubble-radius.d.ts +0 -5
  20. package/dist/chart/bubble-radius.d.ts.map +1 -1
  21. package/dist/chart/extent.d.ts +9 -0
  22. package/dist/chart/extent.d.ts.map +1 -0
  23. package/dist/chart/histogram-binning.d.ts.map +1 -1
  24. package/dist/chart/index.cjs +56 -18
  25. package/dist/chart/index.mjs +56 -18
  26. package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
  27. package/dist/chart/render/chart-svg-legend.d.ts.map +1 -1
  28. package/dist/chart/render/chart-view-ex.d.ts.map +1 -1
  29. package/dist/chart/render/chart-view.d.ts.map +1 -1
  30. package/dist/chart/trendline-fit.d.ts.map +1 -1
  31. package/dist/{chunk-NYTR4UZ5.cjs → chunk-4LZIUJI3.cjs} +52 -12
  32. package/dist/{chunk-SLNQNVQM.mjs → chunk-4QPOJCJG.mjs} +45 -8
  33. package/dist/{chunk-XTSHZGSM.mjs → chunk-6IIMI5RS.mjs} +52 -12
  34. package/dist/{chunk-TJPUAUWL.mjs → chunk-BA7Z6ATM.mjs} +9 -195
  35. package/dist/{chunk-JUABSM7C.mjs → chunk-DLFMCZZT.mjs} +1 -1
  36. package/dist/{chunk-M4XLF4R7.mjs → chunk-GBKBR4CX.mjs} +20 -8
  37. package/dist/{chunk-R5FIHHGB.cjs → chunk-HL3FBJ6X.cjs} +1648 -1205
  38. package/dist/{chunk-ZJ2OKIJN.mjs → chunk-LF5E5ZOH.mjs} +642 -199
  39. package/dist/{chunk-4FTUAD2B.mjs → chunk-Q5PKBQXH.mjs} +766 -202
  40. package/dist/{chunk-M6GDBVQ7.mjs → chunk-VQF6HQEE.mjs} +1 -1
  41. package/dist/collab/embedding.d.ts +103 -0
  42. package/dist/collab/embedding.d.ts.map +1 -0
  43. package/dist/collab/index.cjs +450 -342
  44. package/dist/collab/index.d.ts +1 -0
  45. package/dist/collab/index.d.ts.map +1 -1
  46. package/dist/collab/index.mjs +443 -343
  47. package/dist/color/theme-palette.d.ts +5 -1
  48. package/dist/color/theme-palette.d.ts.map +1 -1
  49. package/dist/crypto/index.cjs +27 -2
  50. package/dist/crypto/index.mjs +27 -2
  51. package/dist/diagram/index.cjs +31 -3
  52. package/dist/diagram/index.mjs +31 -3
  53. package/dist/docx/block-parser.d.ts.map +1 -1
  54. package/dist/docx/cell-blocks.d.ts +7 -1
  55. package/dist/docx/cell-blocks.d.ts.map +1 -1
  56. package/dist/docx/content-control-edit.d.ts +14 -0
  57. package/dist/docx/content-control-edit.d.ts.map +1 -1
  58. package/dist/docx/content-control-model.d.ts +8 -0
  59. package/dist/docx/content-control-model.d.ts.map +1 -1
  60. package/dist/docx/content-control-values.d.ts +20 -0
  61. package/dist/docx/content-control-values.d.ts.map +1 -0
  62. package/dist/docx/content-control.d.ts +7 -1
  63. package/dist/docx/content-control.d.ts.map +1 -1
  64. package/dist/docx/element-order.d.ts +10 -5
  65. package/dist/docx/element-order.d.ts.map +1 -1
  66. package/dist/docx/embedded.cjs +3861 -1379
  67. package/dist/docx/embedded.mjs +3861 -1379
  68. package/dist/docx/field-instruction.d.ts +22 -0
  69. package/dist/docx/field-instruction.d.ts.map +1 -0
  70. package/dist/docx/form-field-model.d.ts +48 -0
  71. package/dist/docx/form-field-model.d.ts.map +1 -0
  72. package/dist/docx/form-fields.d.ts +31 -0
  73. package/dist/docx/form-fields.d.ts.map +1 -0
  74. package/dist/docx/form-fill-fields.d.ts +61 -0
  75. package/dist/docx/form-fill-fields.d.ts.map +1 -0
  76. package/dist/docx/form-fill-labels.d.ts +8 -0
  77. package/dist/docx/form-fill-labels.d.ts.map +1 -0
  78. package/dist/docx/form-fill-sites.d.ts +59 -0
  79. package/dist/docx/form-fill-sites.d.ts.map +1 -0
  80. package/dist/docx/form-fill-values.d.ts +28 -0
  81. package/dist/docx/form-fill-values.d.ts.map +1 -0
  82. package/dist/docx/form-fill-write.d.ts +26 -0
  83. package/dist/docx/form-fill-write.d.ts.map +1 -0
  84. package/dist/docx/glossary.d.ts +15 -0
  85. package/dist/docx/glossary.d.ts.map +1 -0
  86. package/dist/docx/index.cjs +5929 -3153
  87. package/dist/docx/index.d.ts +7 -0
  88. package/dist/docx/index.d.ts.map +1 -1
  89. package/dist/docx/index.mjs +5913 -3154
  90. package/dist/docx/inline-annotations.d.ts +21 -0
  91. package/dist/docx/inline-annotations.d.ts.map +1 -0
  92. package/dist/docx/inline-container-markers.d.ts +14 -0
  93. package/dist/docx/inline-container-markers.d.ts.map +1 -0
  94. package/dist/docx/inline-containers.d.ts +54 -0
  95. package/dist/docx/inline-containers.d.ts.map +1 -0
  96. package/dist/docx/inline-form-field-bookmarks.d.ts +15 -0
  97. package/dist/docx/inline-form-field-bookmarks.d.ts.map +1 -0
  98. package/dist/docx/inline-marker-positions.d.ts +15 -0
  99. package/dist/docx/inline-marker-positions.d.ts.map +1 -0
  100. package/dist/docx/inline-markers.d.ts +63 -0
  101. package/dist/docx/inline-markers.d.ts.map +1 -0
  102. package/dist/docx/inline-slots.d.ts +24 -0
  103. package/dist/docx/inline-slots.d.ts.map +1 -0
  104. package/dist/docx/layout/adapter.d.ts.map +1 -1
  105. package/dist/docx/layout/index.cjs +1176 -563
  106. package/dist/docx/layout/index.d.ts +2 -1
  107. package/dist/docx/layout/index.d.ts.map +1 -1
  108. package/dist/docx/layout/index.mjs +1175 -564
  109. package/dist/docx/layout/input.d.ts +5 -1
  110. package/dist/docx/layout/input.d.ts.map +1 -1
  111. package/dist/docx/layout/page-style-refs.d.ts +21 -0
  112. package/dist/docx/layout/page-style-refs.d.ts.map +1 -0
  113. package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -1
  114. package/dist/docx/layout/result.d.ts +1 -0
  115. package/dist/docx/layout/result.d.ts.map +1 -1
  116. package/dist/docx/layout/tab-stops.d.ts +8 -1
  117. package/dist/docx/layout/tab-stops.d.ts.map +1 -1
  118. package/dist/docx/load/index.cjs +3969 -1487
  119. package/dist/docx/load/index.mjs +3969 -1487
  120. package/dist/docx/model-run.d.ts +24 -2
  121. package/dist/docx/model-run.d.ts.map +1 -1
  122. package/dist/docx/model.d.ts +5 -0
  123. package/dist/docx/model.d.ts.map +1 -1
  124. package/dist/docx/numbering-format.d.ts.map +1 -1
  125. package/dist/docx/parse-warnings.d.ts.map +1 -1
  126. package/dist/docx/parse.d.ts.map +1 -1
  127. package/dist/docx/run-segmentation.d.ts +11 -0
  128. package/dist/docx/run-segmentation.d.ts.map +1 -0
  129. package/dist/docx/save.d.ts.map +1 -1
  130. package/dist/docx/section-model.d.ts +5 -0
  131. package/dist/docx/section-model.d.ts.map +1 -1
  132. package/dist/docx/sections.d.ts +4 -2
  133. package/dist/docx/sections.d.ts.map +1 -1
  134. package/dist/docx/settings.d.ts +9 -0
  135. package/dist/docx/settings.d.ts.map +1 -1
  136. package/dist/docx/special-characters.d.ts +34 -0
  137. package/dist/docx/special-characters.d.ts.map +1 -0
  138. package/dist/docx/style-ref-fields.d.ts +40 -0
  139. package/dist/docx/style-ref-fields.d.ts.map +1 -0
  140. package/dist/docx/style-ref.d.ts +85 -0
  141. package/dist/docx/style-ref.d.ts.map +1 -0
  142. package/dist/docx/table-model.d.ts +2 -2
  143. package/dist/docx/table-model.d.ts.map +1 -1
  144. package/dist/docx/ui/break-note-schema.d.ts.map +1 -1
  145. package/dist/docx/ui/content-control-commands.d.ts +20 -8
  146. package/dist/docx/ui/content-control-commands.d.ts.map +1 -1
  147. package/dist/docx/ui/content-control-guard.d.ts +4 -1
  148. package/dist/docx/ui/content-control-guard.d.ts.map +1 -1
  149. package/dist/docx/ui/content-control-paste.d.ts +23 -0
  150. package/dist/docx/ui/content-control-paste.d.ts.map +1 -0
  151. package/dist/docx/ui/content-control-rows.d.ts +15 -0
  152. package/dist/docx/ui/content-control-rows.d.ts.map +1 -0
  153. package/dist/docx/ui/content-control-sources.d.ts +12 -0
  154. package/dist/docx/ui/content-control-sources.d.ts.map +1 -0
  155. package/dist/docx/ui/content-control-spans.d.ts +29 -6
  156. package/dist/docx/ui/content-control-spans.d.ts.map +1 -1
  157. package/dist/docx/ui/content-control-temporary.d.ts +10 -0
  158. package/dist/docx/ui/content-control-temporary.d.ts.map +1 -0
  159. package/dist/docx/ui/form-field-commands.d.ts +41 -0
  160. package/dist/docx/ui/form-field-commands.d.ts.map +1 -0
  161. package/dist/docx/ui/form-field-guard.d.ts +24 -0
  162. package/dist/docx/ui/form-field-guard.d.ts.map +1 -0
  163. package/dist/docx/ui/form-text-blank.d.ts +18 -0
  164. package/dist/docx/ui/form-text-blank.d.ts.map +1 -0
  165. package/dist/docx/ui/index.cjs +9276 -7132
  166. package/dist/docx/ui/index.d.ts +5 -0
  167. package/dist/docx/ui/index.d.ts.map +1 -1
  168. package/dist/docx/ui/index.mjs +9259 -7137
  169. package/dist/docx/ui/positional-tab-input.d.ts +7 -0
  170. package/dist/docx/ui/positional-tab-input.d.ts.map +1 -0
  171. package/dist/docx/ui/run-compare.d.ts.map +1 -1
  172. package/dist/docx/ui/run-extra-mark.d.ts +1 -1
  173. package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
  174. package/dist/docx/ui/schema-marks.d.ts +1 -1
  175. package/dist/docx/ui/schema-marks.d.ts.map +1 -1
  176. package/dist/docx/ui/symbol-font.d.ts +4 -0
  177. package/dist/docx/ui/symbol-font.d.ts.map +1 -0
  178. package/dist/docx/ui/yjs-collaboration.d.ts +12 -1
  179. package/dist/docx/ui/yjs-collaboration.d.ts.map +1 -1
  180. package/dist/docx/write-block-placement.d.ts +7 -0
  181. package/dist/docx/write-block-placement.d.ts.map +1 -1
  182. package/dist/docx/write-content-control.d.ts +6 -0
  183. package/dist/docx/write-content-control.d.ts.map +1 -1
  184. package/dist/docx/write-header-footer.d.ts +6 -2
  185. package/dist/docx/write-header-footer.d.ts.map +1 -1
  186. package/dist/docx/write-inline.d.ts +12 -16
  187. package/dist/docx/write-inline.d.ts.map +1 -1
  188. package/dist/docx/write-paragraph.d.ts.map +1 -1
  189. package/dist/docx/write-revisions.d.ts.map +1 -1
  190. package/dist/docx/write-run.d.ts.map +1 -1
  191. package/dist/docx/write-section-properties.d.ts +5 -0
  192. package/dist/docx/write-section-properties.d.ts.map +1 -0
  193. package/dist/docx/write-sections.d.ts.map +1 -1
  194. package/dist/docx/write-table-controls.d.ts +15 -0
  195. package/dist/docx/write-table-controls.d.ts.map +1 -0
  196. package/dist/docx/write-table-properties.d.ts.map +1 -1
  197. package/dist/docx/write-table.d.ts.map +1 -1
  198. package/dist/docx/write.d.ts.map +1 -1
  199. package/dist/docx/xml.d.ts +6 -0
  200. package/dist/docx/xml.d.ts.map +1 -1
  201. package/dist/drawingml/index.cjs +31 -3
  202. package/dist/drawingml/index.mjs +31 -3
  203. package/dist/index.cjs +102 -26
  204. package/dist/index.mjs +102 -26
  205. package/dist/math/index.cjs +27 -2
  206. package/dist/math/index.mjs +27 -2
  207. package/dist/opc/index.cjs +51 -11
  208. package/dist/opc/index.mjs +51 -11
  209. package/dist/opc/zip-folders.d.ts +11 -0
  210. package/dist/opc/zip-folders.d.ts.map +1 -0
  211. package/dist/opc/zip-limits.d.ts +9 -0
  212. package/dist/opc/zip-limits.d.ts.map +1 -1
  213. package/dist/pptx/automation/index.cjs +995 -462
  214. package/dist/pptx/automation/index.d.ts +2 -2
  215. package/dist/pptx/automation/index.mjs +6 -6
  216. package/dist/pptx/chunks/{index-Bqm-jFG-.d.ts → index-CPhsd7Df.d.ts} +7580 -7507
  217. package/dist/pptx/chunks/index-CPhsd7Df.d.ts.map +1 -0
  218. package/dist/pptx/chunks/{index-B9x557hr.d.ts → index-Q5mM8kIR.d.ts} +2 -2
  219. package/dist/pptx/chunks/{index-B9x557hr.d.ts.map → index-Q5mM8kIR.d.ts.map} +1 -1
  220. package/dist/pptx/cli/index.cjs +770 -238
  221. package/dist/pptx/cli/index.mjs +5 -5
  222. package/dist/pptx/converter/index.cjs +12 -3
  223. package/dist/pptx/converter/index.d.ts +1 -1
  224. package/dist/pptx/converter/index.mjs +3 -3
  225. package/dist/pptx/editor/render/find-replace.cjs +14 -14
  226. package/dist/pptx/editor/render/find-replace.d.ts +1 -1
  227. package/dist/pptx/editor/render/find-replace.mjs +1 -1
  228. package/dist/pptx/editor/render/slide-operations.cjs +8 -8
  229. package/dist/pptx/editor/render/slide-operations.mjs +2 -2
  230. package/dist/pptx/index.cjs +1099 -628
  231. package/dist/pptx/index.d.ts +3 -3
  232. package/dist/pptx/index.mjs +6 -6
  233. package/dist/pptx/signature-node/index.cjs +20 -8
  234. package/dist/pptx/signature-node/index.mjs +2 -2
  235. package/dist/teams/index.cjs +105 -70
  236. package/dist/teams/index.mjs +105 -70
  237. package/dist/text/text-diff.d.ts +15 -0
  238. package/dist/text/text-diff.d.ts.map +1 -0
  239. package/dist/visio/index.cjs +220 -46
  240. package/dist/visio/index.mjs +220 -46
  241. package/dist/visio/ui/contract.d.ts +8 -2
  242. package/dist/visio/ui/contract.d.ts.map +1 -1
  243. package/dist/visio/ui/index.cjs +227 -50
  244. package/dist/visio/ui/index.mjs +227 -50
  245. package/dist/xlsx/collab/index.cjs +8 -3
  246. package/dist/xlsx/collab/index.mjs +8 -3
  247. package/dist/xlsx/compare/cells.d.ts +22 -0
  248. package/dist/xlsx/compare/cells.d.ts.map +1 -0
  249. package/dist/xlsx/compare/compare.d.ts +12 -0
  250. package/dist/xlsx/compare/compare.d.ts.map +1 -0
  251. package/dist/xlsx/compare/conditional.d.ts +7 -0
  252. package/dist/xlsx/compare/conditional.d.ts.map +1 -0
  253. package/dist/xlsx/compare/format-key.d.ts +34 -0
  254. package/dist/xlsx/compare/format-key.d.ts.map +1 -0
  255. package/dist/xlsx/compare/group.d.ts +8 -0
  256. package/dist/xlsx/compare/group.d.ts.map +1 -0
  257. package/dist/xlsx/compare/index.d.ts +5 -0
  258. package/dist/xlsx/compare/index.d.ts.map +1 -0
  259. package/dist/xlsx/compare/rich-text.d.ts +7 -0
  260. package/dist/xlsx/compare/rich-text.d.ts.map +1 -0
  261. package/dist/xlsx/compare/sheets.d.ts +22 -0
  262. package/dist/xlsx/compare/sheets.d.ts.map +1 -0
  263. package/dist/xlsx/compare/structure.d.ts +11 -0
  264. package/dist/xlsx/compare/structure.d.ts.map +1 -0
  265. package/dist/xlsx/compare/text.d.ts +8 -0
  266. package/dist/xlsx/compare/text.d.ts.map +1 -0
  267. package/dist/xlsx/compare/types.d.ts +173 -0
  268. package/dist/xlsx/compare/types.d.ts.map +1 -0
  269. package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
  270. package/dist/xlsx/edit/clipboard-html.d.ts.map +1 -1
  271. package/dist/xlsx/edit/clipboard-text.d.ts.map +1 -1
  272. package/dist/xlsx/edit/clipboard.d.ts.map +1 -1
  273. package/dist/xlsx/edit/clone-cell.d.ts +9 -0
  274. package/dist/xlsx/edit/clone-cell.d.ts.map +1 -0
  275. package/dist/xlsx/edit/dimensions.d.ts.map +1 -1
  276. package/dist/xlsx/edit/history-rows.d.ts +7 -0
  277. package/dist/xlsx/edit/history-rows.d.ts.map +1 -0
  278. package/dist/xlsx/edit/history.d.ts +19 -4
  279. package/dist/xlsx/edit/history.d.ts.map +1 -1
  280. package/dist/xlsx/edit/outline.d.ts.map +1 -1
  281. package/dist/xlsx/edit/row-autofit.d.ts.map +1 -1
  282. package/dist/xlsx/edit/timelines.d.ts.map +1 -1
  283. package/dist/xlsx/formula/change-areas.d.ts +9 -0
  284. package/dist/xlsx/formula/change-areas.d.ts.map +1 -0
  285. package/dist/xlsx/formula/engine-prepare.d.ts +8 -0
  286. package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -1
  287. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  288. package/dist/xlsx/formula/spill.d.ts +5 -1
  289. package/dist/xlsx/formula/spill.d.ts.map +1 -1
  290. package/dist/xlsx/index.cjs +2551 -1208
  291. package/dist/xlsx/index.d.ts +1 -0
  292. package/dist/xlsx/index.d.ts.map +1 -1
  293. package/dist/xlsx/index.mjs +2544 -1209
  294. package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
  295. package/dist/xlsx/layout/navigate.d.ts.map +1 -1
  296. package/dist/xlsx/layout/style-view.d.ts +5 -0
  297. package/dist/xlsx/layout/style-view.d.ts.map +1 -1
  298. package/dist/xlsx/load/csv-dates.d.ts +22 -0
  299. package/dist/xlsx/load/csv-dates.d.ts.map +1 -0
  300. package/dist/xlsx/load/csv-import.d.ts +64 -0
  301. package/dist/xlsx/load/csv-import.d.ts.map +1 -0
  302. package/dist/xlsx/load/csv-separators.d.ts +13 -0
  303. package/dist/xlsx/load/csv-separators.d.ts.map +1 -0
  304. package/dist/xlsx/load/csv-traits.d.ts +20 -0
  305. package/dist/xlsx/load/csv-traits.d.ts.map +1 -0
  306. package/dist/xlsx/load/csv.d.ts +8 -4
  307. package/dist/xlsx/load/csv.d.ts.map +1 -1
  308. package/dist/xlsx/load/detect.d.ts +13 -0
  309. package/dist/xlsx/load/detect.d.ts.map +1 -1
  310. package/dist/xlsx/load/errors.d.ts +1 -0
  311. package/dist/xlsx/load/errors.d.ts.map +1 -1
  312. package/dist/xlsx/load/index.cjs +598 -98
  313. package/dist/xlsx/load/index.d.ts +3 -1
  314. package/dist/xlsx/load/index.d.ts.map +1 -1
  315. package/dist/xlsx/load/index.mjs +597 -99
  316. package/dist/xlsx/numfmt/format.d.ts +8 -0
  317. package/dist/xlsx/numfmt/format.d.ts.map +1 -1
  318. package/dist/xlsx/numfmt/input-date.d.ts +2 -0
  319. package/dist/xlsx/numfmt/input-date.d.ts.map +1 -1
  320. package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
  321. package/dist/xlsx/pivot/groups.d.ts.map +1 -1
  322. package/dist/xlsx/read/index.d.ts +2 -1
  323. package/dist/xlsx/read/index.d.ts.map +1 -1
  324. package/dist/xlsx/read/limits.d.ts +50 -0
  325. package/dist/xlsx/read/limits.d.ts.map +1 -0
  326. package/dist/xlsx/read/load.d.ts +11 -1
  327. package/dist/xlsx/read/load.d.ts.map +1 -1
  328. package/dist/xlsx/read/package.d.ts +5 -23
  329. package/dist/xlsx/read/package.d.ts.map +1 -1
  330. package/dist/xlsx/read/shared-strings.d.ts +2 -2
  331. package/dist/xlsx/read/shared-strings.d.ts.map +1 -1
  332. package/dist/xlsx/read/sheet-data-source.d.ts.map +1 -1
  333. package/dist/xlsx/read/worksheet.d.ts +2 -0
  334. package/dist/xlsx/read/worksheet.d.ts.map +1 -1
  335. package/dist/xlsx/stable-key.d.ts +3 -0
  336. package/dist/xlsx/stable-key.d.ts.map +1 -0
  337. package/dist/xlsx/styles.d.ts.map +1 -1
  338. package/dist/xlsx/ui/index.cjs +795 -388
  339. package/dist/xlsx/ui/index.d.ts +1 -0
  340. package/dist/xlsx/ui/index.d.ts.map +1 -1
  341. package/dist/xlsx/ui/index.mjs +795 -389
  342. package/dist/xlsx/ui/selection-format.d.ts +13 -0
  343. package/dist/xlsx/ui/selection-format.d.ts.map +1 -0
  344. package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
  345. package/dist/xml/index.cjs +57 -3
  346. package/dist/xml/index.mjs +57 -4
  347. package/dist/xml/lite.d.ts.map +1 -1
  348. package/dist/xml/xml.d.ts +11 -1
  349. package/dist/xml/xml.d.ts.map +1 -1
  350. package/package.json +1 -1
  351. package/dist/PptxHandler-HSPKEP5E.mjs +0 -4
  352. package/dist/pptx/chunks/index-Bqm-jFG-.d.ts.map +0 -1
@@ -1,5 +1,5 @@
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, 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, escAttr, escText, parseDrawingLineDash, parseLineSpacingMultiplier, parseLineSpacingExactPt, backgroundStylePreset, isDarkColorMap, backgroundStyleColorMap, reResolveElementsForColorMapChange, parseEncryptionInfo, RC4_ALG_ID, isOle2CompoundFile, ENTRY_TYPE_ROOT, PML_XMLNS, solidFill, esc, OOXML_PERCENT_UNITS, findThemeEffectScheme, wrapFormatSchemeXml, effectIsPurelyStyleMatrix, emu, loadThemeVariants, parsePresentationDrawingGuides, parsePresentationSmartTags, resolveLayoutDisplayName, gradFill, 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-SLNQNVQM.mjs';
2
- import { openPptxZip, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, openNestedZip, DEFAULT_MAX_UNCOMPRESSED_BYTES, guardZip, ZipBombError, MAX_ZIP_ENTRY_COUNT } from './chunk-M4XLF4R7.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-4QPOJCJG.mjs';
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';
5
5
  import { themeColorRefFromColorChoice, parseOoxmlPercent, themeColorRefToSolidFillWithOpacity, applyDrawingColorTransforms, parseDrawingFraction, scrgbLinearToSrgb8, parseDrawingHueDegrees, hslToRgb, themeColorRefToXml, themeColorRefFromSchemeClr, blendColorOntoWhite } from './chunk-KII4AAYH.mjs';
@@ -3236,6 +3236,153 @@ function materializeInheritedShapeTransform(shape, element) {
3236
3236
  return transform2;
3237
3237
  }
3238
3238
 
3239
+ // pptx/core/utils/placeholder-xml.ts
3240
+ function findNonVisualProps(rawXml) {
3241
+ for (const container of ["p:nvSpPr", "p:nvPicPr", "p:nvGraphicFramePr"]) {
3242
+ const parent = rawXml[container];
3243
+ const nvPr = parent?.["p:nvPr"];
3244
+ if (nvPr) {
3245
+ return nvPr;
3246
+ }
3247
+ }
3248
+ return void 0;
3249
+ }
3250
+ function retargetPlaceholder(rawXml, target) {
3251
+ const nvPr = findNonVisualProps(rawXml);
3252
+ if (!nvPr) {
3253
+ return;
3254
+ }
3255
+ const ph = nvPr["p:ph"] ?? {};
3256
+ nvPr["p:ph"] = ph;
3257
+ if (target.type) {
3258
+ ph["@_type"] = target.type;
3259
+ } else {
3260
+ delete ph["@_type"];
3261
+ }
3262
+ if (target.idx !== void 0) {
3263
+ ph["@_idx"] = target.idx;
3264
+ } else {
3265
+ delete ph["@_idx"];
3266
+ }
3267
+ }
3268
+ function setRawXmlTransform(rawXml, xEmu, yEmu, cxEmu, cyEmu) {
3269
+ const spPr = rawXml["p:spPr"];
3270
+ if (!spPr) {
3271
+ return;
3272
+ }
3273
+ const xfrm = spPr["a:xfrm"] ?? {};
3274
+ spPr["a:xfrm"] = xfrm;
3275
+ const off = xfrm["a:off"] ?? {};
3276
+ xfrm["a:off"] = off;
3277
+ off["@_x"] = String(xEmu);
3278
+ off["@_y"] = String(yEmu);
3279
+ const ext = xfrm["a:ext"] ?? {};
3280
+ xfrm["a:ext"] = ext;
3281
+ ext["@_cx"] = String(cxEmu);
3282
+ ext["@_cy"] = String(cyEmu);
3283
+ }
3284
+ function createEmptyPlaceholderElement(target, xEmu, yEmu, cxEmu, cyEmu, uniqueId) {
3285
+ if (cxEmu <= 0 || cyEmu <= 0) {
3286
+ return null;
3287
+ }
3288
+ const phNode = {};
3289
+ if (target.type) {
3290
+ phNode["@_type"] = target.type;
3291
+ }
3292
+ if (target.idx !== void 0) {
3293
+ phNode["@_idx"] = target.idx;
3294
+ }
3295
+ const rawXml = {
3296
+ "p:nvSpPr": {
3297
+ "p:cNvPr": {
3298
+ "@_id": uniqueId,
3299
+ "@_name": `Placeholder ${target.type || "content"}`
3300
+ },
3301
+ "p:cNvSpPr": {
3302
+ "a:spLocks": { "@_noGrp": "1" }
3303
+ },
3304
+ "p:nvPr": {
3305
+ "p:ph": phNode
3306
+ }
3307
+ },
3308
+ "p:spPr": {
3309
+ "a:xfrm": {
3310
+ "a:off": { "@_x": String(xEmu), "@_y": String(yEmu) },
3311
+ "a:ext": { "@_cx": String(cxEmu), "@_cy": String(cyEmu) }
3312
+ }
3313
+ },
3314
+ "p:txBody": {
3315
+ "a:bodyPr": {},
3316
+ "a:lstStyle": {},
3317
+ "a:p": { "a:endParaRPr": { "@_lang": "en-US" } }
3318
+ }
3319
+ };
3320
+ return {
3321
+ type: "text",
3322
+ id: `ph-${target.type || "content"}-${target.idx ?? "0"}-${uniqueId}`,
3323
+ x: Math.round(xEmu / EMU_PER_PX),
3324
+ y: Math.round(yEmu / EMU_PER_PX),
3325
+ width: Math.round(cxEmu / EMU_PER_PX),
3326
+ height: Math.round(cyEmu / EMU_PER_PX),
3327
+ text: "",
3328
+ rawXml
3329
+ };
3330
+ }
3331
+
3332
+ // pptx/core/core/runtime/save-geometry-validation.ts
3333
+ var FRAME_FIELDS = ["x", "y", "width", "height"];
3334
+ var OPTIONAL_FIELDS = [
3335
+ "xEmu",
3336
+ "yEmu",
3337
+ "widthEmu",
3338
+ "heightEmu",
3339
+ "rotation",
3340
+ "skewX",
3341
+ "skewY",
3342
+ "chOffXEmu",
3343
+ "chOffYEmu",
3344
+ "chExtWidthEmu",
3345
+ "chExtHeightEmu"
3346
+ ];
3347
+ function omitsInheritedFrame(element) {
3348
+ if (!["text", "shape", "picture", "media"].includes(element.type) || !element.rawXml)
3349
+ return false;
3350
+ if (!xmlHasChild(findNonVisualProps(element.rawXml), "p:ph")) return false;
3351
+ if (xmlHasChild(xmlChild(element.rawXml, "p:spPr"), "a:xfrm") || xmlHasChild(element.rawXml, "p:xfrm"))
3352
+ return false;
3353
+ const baseline = element.inheritedTransform;
3354
+ if (!baseline) return FRAME_FIELDS.every((key2) => element[key2] === void 0);
3355
+ return FRAME_FIELDS.every(
3356
+ (key2) => Number.isFinite(baseline[key2]) && (element[key2] === void 0 || element[key2] === baseline[key2])
3357
+ ) && ["rotation", "skewX", "skewY", "flipHorizontal", "flipVertical"].every(
3358
+ (key2) => (element[key2] ?? 0) === (baseline[key2] ?? 0)
3359
+ );
3360
+ }
3361
+ function validateElementGeometry(element, context, emuPerPx = 9525) {
3362
+ const inherited = omitsInheritedFrame(element);
3363
+ const record2 = element;
3364
+ const fields = [...inherited ? [] : FRAME_FIELDS, ...OPTIONAL_FIELDS];
3365
+ for (const field of fields) {
3366
+ const value = record2[field];
3367
+ if (OPTIONAL_FIELDS.includes(field) && value === void 0) continue;
3368
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isFinite(value * emuPerPx)) {
3369
+ throw new Error(
3370
+ `${context}: element '${element.id}' (${element.name ?? "unnamed"}, type=${element.type}) has invalid ${field}=${String(value)}; expected a finite number`
3371
+ );
3372
+ }
3373
+ }
3374
+ if (element.type === "group") {
3375
+ for (const child16 of element.children) validateElementGeometry(child16, context, emuPerPx);
3376
+ }
3377
+ }
3378
+ function validateSlideGeometry(slides) {
3379
+ for (const slide of slides) {
3380
+ for (const element of slide.elements) {
3381
+ validateElementGeometry(element, `Slide ${slide.slideNumber} (${slide.id})`);
3382
+ }
3383
+ }
3384
+ }
3385
+
3239
3386
  // pptx/core/core/builders/PptxElementTransformUpdater.ts
3240
3387
  var PptxElementTransformUpdater = class {
3241
3388
  applyTransform(shape, element, emuPerPx, enclosingGroupChildSpace) {
@@ -3244,6 +3391,7 @@ var PptxElementTransformUpdater = class {
3244
3391
  if (!transform2) {
3245
3392
  return;
3246
3393
  }
3394
+ validateElementGeometry(element, "Transform writer", emuPerPx);
3247
3395
  if (!transform2["a:off"]) {
3248
3396
  transform2["a:off"] = {};
3249
3397
  }
@@ -34871,6 +35019,75 @@ var PptxSaveConstantsFactory = class {
34871
35019
  var defaultPptxSaveConstantsFactory = new PptxSaveConstantsFactory();
34872
35020
  var createPptxSaveConstants = (conformance = "transitional") => defaultPptxSaveConstantsFactory.create(conformance);
34873
35021
 
35022
+ // pptx/core/utils/placeholder-remap.ts
35023
+ var TITLE_ROLE = /* @__PURE__ */ new Set(["title", "ctrtitle"]);
35024
+ var CONTENT_ROLE = /* @__PURE__ */ new Set([
35025
+ "body",
35026
+ "obj",
35027
+ "subtitle",
35028
+ "pic",
35029
+ "chart",
35030
+ "tbl",
35031
+ "media",
35032
+ "clipart",
35033
+ "dgm"
35034
+ ]);
35035
+ function placeholderContentRole(type) {
35036
+ const declared = (type ?? "").trim().toLowerCase() || "body";
35037
+ if (TITLE_ROLE.has(declared)) {
35038
+ return "title";
35039
+ }
35040
+ if (CONTENT_ROLE.has(declared)) {
35041
+ return "content";
35042
+ }
35043
+ return declared;
35044
+ }
35045
+ function preferredPlaceholderTypes(element) {
35046
+ switch (element.type) {
35047
+ case "image":
35048
+ case "picture":
35049
+ return ["pic", "obj", "body"];
35050
+ case "chart":
35051
+ return ["chart", "obj", "body"];
35052
+ case "table":
35053
+ return ["tbl", "obj", "body"];
35054
+ case "media":
35055
+ case "model3d":
35056
+ return ["media", "pic", "obj", "body"];
35057
+ case "smartArt":
35058
+ return ["dgm", "obj", "body"];
35059
+ case "text":
35060
+ return ["body", "subtitle", "obj"];
35061
+ default:
35062
+ return ["obj", "body"];
35063
+ }
35064
+ }
35065
+ function scorePlaceholderMatch(element, source, target) {
35066
+ if (placeholderContentRole(source.type) !== placeholderContentRole(target.type)) {
35067
+ return -1;
35068
+ }
35069
+ const sourceType = normalizeType(source.type);
35070
+ const targetType = normalizeType(target.type);
35071
+ let score = 1;
35072
+ if (source.idx !== void 0 && source.idx === target.idx) {
35073
+ score += 100;
35074
+ }
35075
+ if (sourceType === targetType) {
35076
+ score += 50;
35077
+ }
35078
+ const preferred = preferredPlaceholderTypes(element).indexOf(targetType);
35079
+ if (preferred >= 0) {
35080
+ score += 30 - preferred * 5;
35081
+ }
35082
+ if (targetType === "obj") {
35083
+ score += 10;
35084
+ }
35085
+ return score;
35086
+ }
35087
+ function normalizeType(type) {
35088
+ return (type ?? "").trim().toLowerCase() || "body";
35089
+ }
35090
+
34874
35091
  // pptx/core/core/runtime/master-save-helpers.ts
34875
35092
  function applyHeaderFooterFlagsToNode(root, flags) {
34876
35093
  if (!flags || Object.keys(flags).length === 0) {
@@ -52902,168 +53119,6 @@ function buildChartUserShapesDrawingXml(shapes) {
52902
53119
  return { "c:userShapes": root };
52903
53120
  }
52904
53121
 
52905
- // pptx/core/utils/placeholder-remap.ts
52906
- var TITLE_ROLE = /* @__PURE__ */ new Set(["title", "ctrtitle"]);
52907
- var CONTENT_ROLE = /* @__PURE__ */ new Set([
52908
- "body",
52909
- "obj",
52910
- "subtitle",
52911
- "pic",
52912
- "chart",
52913
- "tbl",
52914
- "media",
52915
- "clipart",
52916
- "dgm"
52917
- ]);
52918
- function placeholderContentRole(type) {
52919
- const declared = (type ?? "").trim().toLowerCase() || "body";
52920
- if (TITLE_ROLE.has(declared)) {
52921
- return "title";
52922
- }
52923
- if (CONTENT_ROLE.has(declared)) {
52924
- return "content";
52925
- }
52926
- return declared;
52927
- }
52928
- function preferredPlaceholderTypes(element) {
52929
- switch (element.type) {
52930
- case "image":
52931
- case "picture":
52932
- return ["pic", "obj", "body"];
52933
- case "chart":
52934
- return ["chart", "obj", "body"];
52935
- case "table":
52936
- return ["tbl", "obj", "body"];
52937
- case "media":
52938
- case "model3d":
52939
- return ["media", "pic", "obj", "body"];
52940
- case "smartArt":
52941
- return ["dgm", "obj", "body"];
52942
- case "text":
52943
- return ["body", "subtitle", "obj"];
52944
- default:
52945
- return ["obj", "body"];
52946
- }
52947
- }
52948
- function scorePlaceholderMatch(element, source, target) {
52949
- if (placeholderContentRole(source.type) !== placeholderContentRole(target.type)) {
52950
- return -1;
52951
- }
52952
- const sourceType = normalizeType(source.type);
52953
- const targetType = normalizeType(target.type);
52954
- let score = 1;
52955
- if (source.idx !== void 0 && source.idx === target.idx) {
52956
- score += 100;
52957
- }
52958
- if (sourceType === targetType) {
52959
- score += 50;
52960
- }
52961
- const preferred = preferredPlaceholderTypes(element).indexOf(targetType);
52962
- if (preferred >= 0) {
52963
- score += 30 - preferred * 5;
52964
- }
52965
- if (targetType === "obj") {
52966
- score += 10;
52967
- }
52968
- return score;
52969
- }
52970
- function normalizeType(type) {
52971
- return (type ?? "").trim().toLowerCase() || "body";
52972
- }
52973
-
52974
- // pptx/core/utils/placeholder-xml.ts
52975
- function findNonVisualProps(rawXml) {
52976
- for (const container of ["p:nvSpPr", "p:nvPicPr", "p:nvGraphicFramePr"]) {
52977
- const parent = rawXml[container];
52978
- const nvPr = parent?.["p:nvPr"];
52979
- if (nvPr) {
52980
- return nvPr;
52981
- }
52982
- }
52983
- return void 0;
52984
- }
52985
- function retargetPlaceholder(rawXml, target) {
52986
- const nvPr = findNonVisualProps(rawXml);
52987
- if (!nvPr) {
52988
- return;
52989
- }
52990
- const ph = nvPr["p:ph"] ?? {};
52991
- nvPr["p:ph"] = ph;
52992
- if (target.type) {
52993
- ph["@_type"] = target.type;
52994
- } else {
52995
- delete ph["@_type"];
52996
- }
52997
- if (target.idx !== void 0) {
52998
- ph["@_idx"] = target.idx;
52999
- } else {
53000
- delete ph["@_idx"];
53001
- }
53002
- }
53003
- function setRawXmlTransform(rawXml, xEmu, yEmu, cxEmu, cyEmu) {
53004
- const spPr = rawXml["p:spPr"];
53005
- if (!spPr) {
53006
- return;
53007
- }
53008
- const xfrm = spPr["a:xfrm"] ?? {};
53009
- spPr["a:xfrm"] = xfrm;
53010
- const off = xfrm["a:off"] ?? {};
53011
- xfrm["a:off"] = off;
53012
- off["@_x"] = String(xEmu);
53013
- off["@_y"] = String(yEmu);
53014
- const ext = xfrm["a:ext"] ?? {};
53015
- xfrm["a:ext"] = ext;
53016
- ext["@_cx"] = String(cxEmu);
53017
- ext["@_cy"] = String(cyEmu);
53018
- }
53019
- function createEmptyPlaceholderElement(target, xEmu, yEmu, cxEmu, cyEmu, uniqueId) {
53020
- if (cxEmu <= 0 || cyEmu <= 0) {
53021
- return null;
53022
- }
53023
- const phNode = {};
53024
- if (target.type) {
53025
- phNode["@_type"] = target.type;
53026
- }
53027
- if (target.idx !== void 0) {
53028
- phNode["@_idx"] = target.idx;
53029
- }
53030
- const rawXml = {
53031
- "p:nvSpPr": {
53032
- "p:cNvPr": {
53033
- "@_id": uniqueId,
53034
- "@_name": `Placeholder ${target.type || "content"}`
53035
- },
53036
- "p:cNvSpPr": {
53037
- "a:spLocks": { "@_noGrp": "1" }
53038
- },
53039
- "p:nvPr": {
53040
- "p:ph": phNode
53041
- }
53042
- },
53043
- "p:spPr": {
53044
- "a:xfrm": {
53045
- "a:off": { "@_x": String(xEmu), "@_y": String(yEmu) },
53046
- "a:ext": { "@_cx": String(cxEmu), "@_cy": String(cyEmu) }
53047
- }
53048
- },
53049
- "p:txBody": {
53050
- "a:bodyPr": {},
53051
- "a:lstStyle": {},
53052
- "a:p": { "a:endParaRPr": { "@_lang": "en-US" } }
53053
- }
53054
- };
53055
- return {
53056
- type: "text",
53057
- id: `ph-${target.type || "content"}-${target.idx ?? "0"}-${uniqueId}`,
53058
- x: Math.round(xEmu / EMU_PER_PX),
53059
- y: Math.round(yEmu / EMU_PER_PX),
53060
- width: Math.round(cxEmu / EMU_PER_PX),
53061
- height: Math.round(cyEmu / EMU_PER_PX),
53062
- text: "",
53063
- rawXml
53064
- };
53065
- }
53066
-
53067
53122
  // pptx/core/utils/text-fill-blip.ts
53068
53123
  function resolveTextFillBlip(blipFill, lookupTarget, resolveArchivePath, allowExternal) {
53069
53124
  const blip = blipFill["a:blip"];
@@ -71966,6 +72021,19 @@ var PptxHandlerRuntime54 = class _PptxHandlerRuntime extends PptxHandlerRuntime5
71966
72021
  return this.isStrictOoxml ? "strict" : "transitional";
71967
72022
  }
71968
72023
  async save(slides, options) {
72024
+ validateSlideGeometry(slides);
72025
+ const templates = [
72026
+ ...options?.slideMasters ?? [],
72027
+ ...options?.slideLayouts ?? [],
72028
+ ...options?.slideMasters?.flatMap((master) => master.layouts ?? []) ?? [],
72029
+ ...options?.notesMaster ? [options.notesMaster] : [],
72030
+ ...options?.handoutMaster ? [options.handoutMaster] : []
72031
+ ];
72032
+ for (const template of templates) {
72033
+ for (const element of template.elements ?? []) {
72034
+ validateElementGeometry(element, `Template (${template.path})`);
72035
+ }
72036
+ }
71969
72037
  if (options?.outputFormat === "ppt") {
71970
72038
  return this.saveAsLegacyPpt(
71971
72039
  slides,
@@ -72895,8 +72963,7 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
72895
72963
  return this.scanPlaceholderBuckets(spTree, (info) => info?.type === type);
72896
72964
  }
72897
72965
  /** The layout and master counterparts of a placeholder, unmerged. */
72898
- findPlaceholderContexts(slidePath, expected) {
72899
- const layoutPath = this.resolveLayoutPathForSlide(slidePath);
72966
+ findPlaceholderContexts(slidePath, expected, layoutPath = this.resolveLayoutPathForSlide(slidePath)) {
72900
72967
  if (!layoutPath) {
72901
72968
  return {};
72902
72969
  }
@@ -72908,10 +72975,11 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
72908
72975
  const master = this.findPlaceholderInShapeTree(masterSpTree, expected) ?? this.findSingletonPlaceholderInShapeTree(masterSpTree, expected);
72909
72976
  return { layout, master };
72910
72977
  }
72911
- findPlaceholderContext(slidePath, expected) {
72978
+ findPlaceholderContext(slidePath, expected, layoutPath) {
72912
72979
  const { layout: layoutContext, master: masterContext } = this.findPlaceholderContexts(
72913
72980
  slidePath,
72914
- expected
72981
+ expected,
72982
+ layoutPath
72915
72983
  );
72916
72984
  if (!layoutContext) {
72917
72985
  return masterContext;
@@ -72937,8 +73005,8 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
72937
73005
  * a master `p:sp`), so the layout keeps winning exactly as it does when
72938
73006
  * both are shapes.
72939
73007
  */
72940
- findPlaceholderNode(slidePath, expected) {
72941
- const { layout, master } = this.findPlaceholderContexts(slidePath, expected);
73008
+ findPlaceholderNode(slidePath, expected, layoutPath) {
73009
+ const { layout, master } = this.findPlaceholderContexts(slidePath, expected, layoutPath);
72942
73010
  const firstNode2 = (context) => context?.shape ?? context?.picture ?? context?.graphicFrame;
72943
73011
  const layoutNode = firstNode2(layout);
72944
73012
  const masterNode = firstNode2(master);
@@ -72979,8 +73047,7 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
72979
73047
  * reference. Checks the layout cache first, then the master cache, and
72980
73048
  * merges them so that layout values take priority over master values.
72981
73049
  */
72982
- lookupPlaceholderDefaults(slidePath, phInfo) {
72983
- const layoutPath = this.resolveLayoutPathForSlide(slidePath);
73050
+ lookupPlaceholderDefaults(slidePath, phInfo, layoutPath = this.resolveLayoutPathForSlide(slidePath)) {
72984
73051
  if (!layoutPath) {
72985
73052
  return void 0;
72986
73053
  }
@@ -73670,6 +73737,53 @@ var PptxHandlerRuntime61 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
73670
73737
  return null;
73671
73738
  }
73672
73739
  }
73740
+ /**
73741
+ * A text-bearing shape whose picture fill is inherited from its layout or
73742
+ * master placeholder (`a:blipFill` absent from its own `spPr`) gets
73743
+ * `fillMode: 'image'` from the merged properties but no image: the blip's
73744
+ * relationship id belongs to the part that authored it, not the slide.
73745
+ * Resolve it against the layout's, then the master's, relationships.
73746
+ */
73747
+ async resolveInheritedFillImage(element, shape, slidePath) {
73748
+ const style = element?.shapeStyle;
73749
+ if (!element || !style || style.fillMode !== "image" || style.fillImageUrl) {
73750
+ return;
73751
+ }
73752
+ const placeholderInfo = this.extractPlaceholderInfo(xmlPath(shape, "p:nvSpPr", "p:nvPr"));
73753
+ const inherited = placeholderInfo ? this.findPlaceholderContext(slidePath, placeholderInfo) : void 0;
73754
+ const effectiveSpPr = this.mergeXmlObjects(
73755
+ inherited?.shape?.["p:spPr"],
73756
+ xmlChild(shape, "p:spPr")
73757
+ );
73758
+ const blipFill = effectiveSpPr?.["a:blipFill"];
73759
+ const blip = blipFill?.["a:blip"];
73760
+ const relId = String(blip?.["@_r:embed"] ?? blip?.["@_r:link"] ?? "");
73761
+ if (!relId) {
73762
+ return;
73763
+ }
73764
+ const layoutPath = this.resolveLayoutPathForSlide(slidePath);
73765
+ const masterPath = layoutPath ? this.resolveMasterPathForLayout(layoutPath) : void 0;
73766
+ for (const partPath of [layoutPath, masterPath]) {
73767
+ if (!partPath || !this.slideRelsMap.get(partPath)?.has(relId)) {
73768
+ continue;
73769
+ }
73770
+ const fill = await resolveGroupFillImagePure(
73771
+ this,
73772
+ blipFill,
73773
+ partPath
73774
+ );
73775
+ if (fill) {
73776
+ const isUrl = /^(?:data:|blob:|https?:)/u.test(fill.fillImageUrl);
73777
+ const decoded = isUrl ? void 0 : await this.getImageData(fill.fillImageUrl);
73778
+ style.fillImageUrl = decoded ?? fill.fillImageUrl;
73779
+ style.fillImageMode = fill.fillImageMode;
73780
+ if (element.type === "text") {
73781
+ element.type = "shape";
73782
+ }
73783
+ }
73784
+ return;
73785
+ }
73786
+ }
73673
73787
  textVerticalAlignFromDrawingValue(value) {
73674
73788
  const normalized = String(value ?? "").trim().toLowerCase();
73675
73789
  if (normalized.length === 0) {
@@ -75066,14 +75180,14 @@ var PptxHandlerRuntime66 = class extends PptxHandlerRuntime65 {
75066
75180
 
75067
75181
  // pptx/core/core/runtime/PptxHandlerRuntimeShapeParsing.ts
75068
75182
  var PptxHandlerRuntime67 = class _PptxHandlerRuntime extends PptxHandlerRuntime66 {
75069
- parseShape(shape, id, slidePath) {
75183
+ parseShape(shape, id, slidePath, layoutPath) {
75070
75184
  try {
75071
75185
  const spPr = shape["p:spPr"];
75072
75186
  const slideRelationshipMap = slidePath ? this.slideRelsMap.get(slidePath) : void 0;
75073
75187
  const placeholderInfo = this.extractPlaceholderInfo(
75074
75188
  shape?.["p:nvSpPr"]?.["p:nvPr"]
75075
75189
  );
75076
- const inheritedPlaceholder = slidePath && placeholderInfo ? this.findPlaceholderContext(slidePath, placeholderInfo) : void 0;
75190
+ const inheritedPlaceholder = (slidePath || layoutPath) && placeholderInfo ? this.findPlaceholderContext(slidePath ?? "", placeholderInfo, layoutPath) : void 0;
75077
75191
  const inheritedSpPr = inheritedPlaceholder?.shape?.["p:spPr"] || inheritedPlaceholder?.picture?.["p:spPr"];
75078
75192
  const effectiveSpPr = spPr ? {
75079
75193
  ...spPr,
@@ -75199,7 +75313,7 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
75199
75313
  );
75200
75314
  const linkedTxbxId = bodyPropResult.linkedTxbxId;
75201
75315
  const linkedTxbxSeq = bodyPropResult.linkedTxbxSeq;
75202
- const phDefaults = slidePath && placeholderInfo ? this.lookupPlaceholderDefaults(slidePath, placeholderInfo) : void 0;
75316
+ const phDefaults = (slidePath || layoutPath) && placeholderInfo ? this.lookupPlaceholderDefaults(slidePath ?? "", placeholderInfo, layoutPath) : void 0;
75203
75317
  if (phDefaults) {
75204
75318
  this.applyPlaceholderBodyDefaults(textStyle, phDefaults);
75205
75319
  }
@@ -76055,7 +76169,9 @@ var PptxHandlerRuntime69 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
76055
76169
  slidePath
76056
76170
  );
76057
76171
  }
76058
- return this.parseShape(node, `${idPrefix}shape-${indexInType}`, slidePath);
76172
+ const parsed = this.parseShape(node, `${idPrefix}shape-${indexInType}`, slidePath);
76173
+ await this.resolveInheritedFillImage(parsed, node, slidePath);
76174
+ return parsed;
76059
76175
  }
76060
76176
  case "p:pic":
76061
76177
  return this.parsePicture(node, `${idPrefix}pic-${indexInType}`, slidePath);
@@ -84163,8 +84279,175 @@ var PptxHandlerRuntime102 = class extends PptxHandlerRuntime101 {
84163
84279
  }
84164
84280
  };
84165
84281
 
84166
- // pptx/core/core/runtime/PptxHandlerRuntimeImplementation.ts
84282
+ // pptx/core/core/runtime/sdk-placeholder.ts
84283
+ var TEXT_PLACEHOLDER_TYPES = /* @__PURE__ */ new Set([
84284
+ "title",
84285
+ "ctrtitle",
84286
+ "subtitle",
84287
+ "body",
84288
+ "obj",
84289
+ "dt",
84290
+ "ftr",
84291
+ "hdr",
84292
+ "sldnum"
84293
+ ]);
84294
+ function selectTextPlaceholder(input, type, options, slots) {
84295
+ if (!TEXT_PLACEHOLDER_TYPES.has(type.toLowerCase())) {
84296
+ throw new Error(`Unsupported text placeholder type: ${type}`);
84297
+ }
84298
+ if (options.idx !== void 0 && (!Number.isInteger(options.idx) || options.idx < 0 || options.idx > 4294967295)) {
84299
+ throw new Error("Placeholder idx must be an unsigned 32-bit integer");
84300
+ }
84301
+ const source = {
84302
+ type: type.toLowerCase(),
84303
+ ...options.idx !== void 0 ? { idx: String(options.idx) } : {}
84304
+ };
84305
+ let best;
84306
+ let bestScore = 0;
84307
+ for (const slot of slots) {
84308
+ if (!TEXT_PLACEHOLDER_TYPES.has(slot.phInfo.type ?? "obj")) continue;
84309
+ if (source.idx !== void 0 && source.idx !== (slot.phInfo.idx ?? "0")) continue;
84310
+ const score = scorePlaceholderMatch(input, source, slot.phInfo);
84311
+ if (score > bestScore) {
84312
+ best = slot;
84313
+ bestScore = score;
84314
+ }
84315
+ }
84316
+ return best ? { type: canonicalPlaceholderType(best.phInfo.type ?? "obj"), idx: best.phInfo.idx } : { type: canonicalPlaceholderType(source.type), idx: source.idx };
84317
+ }
84318
+ function withoutFallbackLanguage(properties) {
84319
+ const { "@_lang": language, ...rest } = properties;
84320
+ if (language !== "en-US") return properties;
84321
+ const keys = Object.keys(rest);
84322
+ return keys.length === 0 || keys.length === 1 && rest["@_dirty"] === "0" ? void 0 : rest;
84323
+ }
84324
+ function stripFallbackLanguage(node, key2) {
84325
+ const properties = node[key2];
84326
+ if (!properties || typeof properties !== "object") return node;
84327
+ const next = withoutFallbackLanguage(properties);
84328
+ if (next === properties) return node;
84329
+ const result = {};
84330
+ for (const [name, value] of Object.entries(node)) {
84331
+ if (name !== key2) result[name] = value;
84332
+ else if (next) result[name] = next;
84333
+ }
84334
+ return result;
84335
+ }
84336
+ function withoutFallbackLanguages(paragraphs) {
84337
+ return paragraphs.map((paragraph) => {
84338
+ const next = { ...stripFallbackLanguage(paragraph, "a:endParaRPr") };
84339
+ for (const child16 of ["a:r", "a:br", "a:fld"]) {
84340
+ const nodes = next[child16];
84341
+ if (nodes === void 0) continue;
84342
+ next[child16] = Array.isArray(nodes) ? nodes.map((node) => stripFallbackLanguage(node, "a:rPr")) : stripFallbackLanguage(nodes, "a:rPr");
84343
+ }
84344
+ return next;
84345
+ });
84346
+ }
84347
+ function placeholderShape2(identity, paragraphs) {
84348
+ paragraphs = withoutFallbackLanguages(paragraphs);
84349
+ return {
84350
+ "p:nvSpPr": {
84351
+ "p:cNvPr": { "@_id": "2", "@_name": `Placeholder ${identity.type}` },
84352
+ "p:cNvSpPr": { "a:spLocks": { "@_noGrp": "1" } },
84353
+ "p:nvPr": {
84354
+ "p:ph": {
84355
+ "@_type": identity.type,
84356
+ ...identity.idx !== void 0 ? { "@_idx": identity.idx } : {}
84357
+ }
84358
+ }
84359
+ },
84360
+ "p:spPr": {},
84361
+ "p:txBody": { "a:bodyPr": {}, "a:lstStyle": {}, "a:p": paragraphs }
84362
+ };
84363
+ }
84364
+ function applyPlaceholderFrame(shape, inherited, options, emuPerPx, materializeFrame = false) {
84365
+ for (const key2 of ["x", "y", "width", "height"]) {
84366
+ if (options[key2] !== void 0 && !Number.isFinite(options[key2])) {
84367
+ throw new Error(`Invalid placeholder frame for ${key2}: expected a finite number`);
84368
+ }
84369
+ }
84370
+ const off = xmlPath(inherited, "p:spPr", "a:xfrm", "a:off");
84371
+ const ext = xmlPath(inherited, "p:spPr", "a:xfrm", "a:ext");
84372
+ const frame = {
84373
+ x: options.x ?? (off?.["@_x"] !== void 0 ? Number(off["@_x"]) / emuPerPx : void 0),
84374
+ y: options.y ?? (off?.["@_y"] !== void 0 ? Number(off["@_y"]) / emuPerPx : void 0),
84375
+ width: options.width ?? (ext?.["@_cx"] !== void 0 ? Number(ext["@_cx"]) / emuPerPx : void 0),
84376
+ height: options.height ?? (ext?.["@_cy"] !== void 0 ? Number(ext["@_cy"]) / emuPerPx : void 0)
84377
+ };
84378
+ for (const [key2, value] of Object.entries(frame)) {
84379
+ if (!Number.isFinite(value)) {
84380
+ throw new Error(
84381
+ `No matching placeholder frame for ${key2}; supply a complete explicit frame or choose a layout containing this slot`
84382
+ );
84383
+ }
84384
+ }
84385
+ if (materializeFrame || ["x", "y", "width", "height"].some((key2) => options[key2] !== void 0)) {
84386
+ setRawXmlTransform(
84387
+ shape,
84388
+ ...["x", "y", "width", "height"].map(
84389
+ (key2) => Math.round(frame[key2] * emuPerPx)
84390
+ )
84391
+ );
84392
+ }
84393
+ }
84394
+
84395
+ // pptx/core/core/runtime/PptxHandlerRuntimeSdkPlaceholders.ts
84167
84396
  var PptxHandlerRuntime103 = class _PptxHandlerRuntime extends PptxHandlerRuntime102 {
84397
+ createPlaceholderElement(layoutPath, input, type, options) {
84398
+ if (input.type !== "text") throw new Error("Placeholder input must be text");
84399
+ const layout = this.layoutXmlMap.get(layoutPath);
84400
+ if (!layout) throw new Error(`Unknown layout: ${layoutPath}`);
84401
+ const identity = selectTextPlaceholder(
84402
+ input,
84403
+ type,
84404
+ options,
84405
+ this.extractLayoutPlaceholders(layout, layoutPath)
84406
+ );
84407
+ const shape = placeholderShape2(
84408
+ identity,
84409
+ this.createParagraphsFromTextContent(input.text, void 0, input.textSegments)
84410
+ );
84411
+ const inherited = this.findPlaceholderNode(
84412
+ "",
84413
+ { type: identity.type.toLowerCase(), idx: identity.idx },
84414
+ layoutPath
84415
+ );
84416
+ const fallback = this.sdkMasterFrame(layoutPath, identity.type, identity.idx, inherited);
84417
+ applyPlaceholderFrame(
84418
+ shape,
84419
+ fallback ?? inherited,
84420
+ options,
84421
+ _PptxHandlerRuntime.EMU_PER_PX,
84422
+ fallback !== void 0
84423
+ );
84424
+ const element = this.parseShape(shape, input.id, void 0, layoutPath);
84425
+ if (!element) throw new Error("Unable to resolve placeholder content");
84426
+ if ((element.type === "text" || element.type === "shape") && !element.textStyle && element.textSegments?.[0]?.style) {
84427
+ element.textStyle = { ...element.textSegments[0].style };
84428
+ }
84429
+ return element;
84430
+ }
84431
+ sdkMasterFrame(layoutPath, type, idx, inherited) {
84432
+ if (!inherited) return void 0;
84433
+ if (xmlPath(inherited, "p:spPr", "a:xfrm", "a:off") && xmlPath(inherited, "p:spPr", "a:xfrm", "a:ext"))
84434
+ return void 0;
84435
+ const masterPath = this.resolveMasterPathForLayout(layoutPath);
84436
+ const tree = masterPath ? xmlPath(this.masterXmlMap.get(masterPath), "p:sldMaster", "p:cSld", "p:spTree") : void 0;
84437
+ const role = placeholderContentRole(type.toLowerCase());
84438
+ const candidates = this.ensureArray(tree?.["p:sp"]).filter((shape) => {
84439
+ const info = this.extractPlaceholderInfo(xmlPath(shape, "p:nvSpPr", "p:nvPr"));
84440
+ return info && placeholderContentRole(info.type) === role;
84441
+ });
84442
+ const master = candidates.find(
84443
+ (shape) => this.extractPlaceholderInfo(xmlPath(shape, "p:nvSpPr", "p:nvPr"))?.idx === idx
84444
+ ) ?? candidates[0];
84445
+ return master ? this.mergeXmlObjects(master, inherited) : void 0;
84446
+ }
84447
+ };
84448
+
84449
+ // pptx/core/core/runtime/PptxHandlerRuntimeImplementation.ts
84450
+ var PptxHandlerRuntime104 = class _PptxHandlerRuntime extends PptxHandlerRuntime103 {
84168
84451
  constructor(dependencyFactory = new PptxRuntimeDependencyFactory()) {
84169
84452
  super();
84170
84453
  this.dependencyFactory = dependencyFactory;
@@ -84302,7 +84585,7 @@ var PptxHandlerRuntime103 = class _PptxHandlerRuntime extends PptxHandlerRuntime
84302
84585
  };
84303
84586
 
84304
84587
  // pptx/core/core/PptxHandlerRuntime.ts
84305
- var PptxHandlerRuntime104 = class extends PptxHandlerRuntime103 {
84588
+ var PptxHandlerRuntime105 = class extends PptxHandlerRuntime104 {
84306
84589
  };
84307
84590
 
84308
84591
  // pptx/core/core/PptxHandlerRuntimeFactory.ts
@@ -84313,10 +84596,10 @@ var PptxHandlerRuntimeFactory = class {
84313
84596
  * @returns A freshly constructed runtime ready for loading a PPTX file.
84314
84597
  */
84315
84598
  createRuntime() {
84316
- return new PptxHandlerRuntime104();
84599
+ return new PptxHandlerRuntime105();
84317
84600
  }
84318
84601
  };
84319
- var createDefaultPptxHandlerRuntime = () => new PptxHandlerRuntime104();
84602
+ var createDefaultPptxHandlerRuntime = () => new PptxHandlerRuntime105();
84320
84603
 
84321
84604
  // pptx/core/core/runtime/table-style-editor.ts
84322
84605
  function deepClone(value) {
@@ -87263,6 +87546,13 @@ var PptxHandlerCore = class {
87263
87546
  getLayoutOptions() {
87264
87547
  return this.runtime.getLayoutOptions();
87265
87548
  }
87549
+ /** Resolve a text placeholder in this loaded deck, preserving layout inheritance. */
87550
+ createPlaceholderElement(layoutPath, input, type, options = {}) {
87551
+ if (!this.runtime.createPlaceholderElement) {
87552
+ throw new Error("This runtime does not support creating layout placeholders");
87553
+ }
87554
+ return this.runtime.createPlaceholderElement(layoutPath, input, type, options);
87555
+ }
87266
87556
  /**
87267
87557
  * Build the artwork thumbnails backing the New Slide / Layout galleries.
87268
87558
  *
@@ -88935,13 +89225,14 @@ function createFreeformElement(pathData, options) {
88935
89225
 
88936
89226
  // pptx/core/builders/sdk/SlideBuilder.ts
88937
89227
  var SlideBuilder = class {
88938
- slide;
88939
89228
  /**
88940
89229
  * @param slideNumber - 1-based slide number.
88941
89230
  * @param layoutPath - Optional layout archive path.
88942
89231
  * @param layoutName - Optional layout display name.
89232
+ * @param handler - Loaded deck context for placeholder geometry and text styles.
88943
89233
  */
88944
- constructor(slideNumber, layoutPath, layoutName) {
89234
+ constructor(slideNumber, layoutPath, layoutName, handler) {
89235
+ this.handler = handler;
88945
89236
  this.slide = {
88946
89237
  id: `slide${slideNumber}`,
88947
89238
  rId: `rId${slideNumber + 1}`,
@@ -88951,11 +89242,52 @@ var SlideBuilder = class {
88951
89242
  layoutName: layoutName ?? "Title Slide"
88952
89243
  };
88953
89244
  }
89245
+ handler;
89246
+ slide;
88954
89247
  /** Add a text box to the slide. */
88955
89248
  addText(text, options) {
88956
89249
  this.slide.elements.push(createTextElement(text, options));
88957
89250
  return this;
88958
89251
  }
89252
+ /**
89253
+ * Fill a layout placeholder, inheriting its frame and text styles.
89254
+ *
89255
+ * Unlike addText, this writes a real p:ph binding, not a free text box.
89256
+ * Use idx to select repeated slots (for example, Two Content's 1 and 2).
89257
+ * Explicit frame fields override the layout; all other fields inherit.
89258
+ * A standalone builder requires the fourth constructor argument (a loaded
89259
+ * handler), even with an explicit frame, so text styles resolve consistently.
89260
+ * Missing slots without a complete frame throw instead of creating a text box.
89261
+ * Master frames requiring compatible-role fallback are materialized locally
89262
+ * for new content only, keeping existing-deck loading unchanged.
89263
+ *
89264
+ * @example
89265
+ * ```ts
89266
+ * createSlide('Title Slide')
89267
+ * .addPlaceholder('ctrTitle', 'Quarterly review')
89268
+ * .addPlaceholder('subTitle', 'October 2026');
89269
+ * createSlide('Two Content').addPlaceholder('body', 'Right column', { idx: 2 });
89270
+ * ```
89271
+ */
89272
+ addPlaceholder(type, text, options = {}) {
89273
+ const input = createTextElement(text);
89274
+ const context = `Slide ${this.slide.slideNumber} (${this.slide.id}), placeholder ${type} idx=${options.idx ?? "auto"}, layout ${this.slide.layoutName} (${this.slide.layoutPath})`;
89275
+ try {
89276
+ if (!this.handler) {
89277
+ throw new Error(
89278
+ "addPlaceholder requires a loaded handler as the fourth SlideBuilder constructor argument"
89279
+ );
89280
+ }
89281
+ this.slide.elements.push(
89282
+ this.handler.createPlaceholderElement(this.slide.layoutPath, input, type, options)
89283
+ );
89284
+ } catch (error) {
89285
+ throw new Error(`${context}: ${error instanceof Error ? error.message : String(error)}`, {
89286
+ cause: error
89287
+ });
89288
+ }
89289
+ return this;
89290
+ }
88959
89291
  /** Add a shape to the slide. */
88960
89292
  addShape(shapeType, options) {
88961
89293
  this.slide.elements.push(createShapeElement(shapeType, options));
@@ -89194,6 +89526,246 @@ var SlideBuilder = class {
89194
89526
  }
89195
89527
  };
89196
89528
 
89529
+ // pptx/core/builders/sdk/layout-operations.ts
89530
+ var EMU_PER_PIXEL4 = 9525;
89531
+ function pxToEmu(px) {
89532
+ return Math.round(px * EMU_PER_PIXEL4);
89533
+ }
89534
+ function placeholderSpXml(ph, shapeId) {
89535
+ const name = ph.name ?? `${ph.type.charAt(0).toUpperCase() + ph.type.slice(1)} Placeholder ${shapeId - 1}`;
89536
+ const x = pxToEmu(ph.x);
89537
+ const y = pxToEmu(ph.y);
89538
+ const cx = pxToEmu(ph.width);
89539
+ const cy = pxToEmu(ph.height);
89540
+ const idxAttr = ph.idx !== void 0 ? ` idx="${Math.max(0, Math.round(ph.idx))}"` : "";
89541
+ return ` <p:sp>
89542
+ <p:nvSpPr>
89543
+ <p:cNvPr id="${shapeId}" name="${escAttr(name)}"/>
89544
+ <p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr>
89545
+ <p:nvPr><p:ph type="${escAttr(ph.type)}"${idxAttr}/></p:nvPr>
89546
+ </p:nvSpPr>
89547
+ <p:spPr>
89548
+ <a:xfrm><a:off x="${x}" y="${y}"/><a:ext cx="${cx}" cy="${cy}"/></a:xfrm>
89549
+ </p:spPr>
89550
+ <p:txBody>
89551
+ <a:bodyPr/>
89552
+ <a:lstStyle/>
89553
+ <a:p><a:endParaRPr lang="en-US"/></a:p>
89554
+ </p:txBody>
89555
+ </p:sp>`;
89556
+ }
89557
+ function normalizeSrgbHex(color) {
89558
+ if (!color) {
89559
+ return void 0;
89560
+ }
89561
+ const raw = color.trim().replace(/^#/, "").toUpperCase();
89562
+ if (/^[0-9A-F]{6}$/.test(raw)) {
89563
+ return raw;
89564
+ }
89565
+ if (/^[0-9A-F]{3}$/.test(raw)) {
89566
+ return raw.replace(/./g, (ch) => ch + ch);
89567
+ }
89568
+ return void 0;
89569
+ }
89570
+ function generateLayoutXml(definition) {
89571
+ const layoutType = definition.type ?? "obj";
89572
+ const placeholders = definition.placeholders ?? [];
89573
+ const phShapes = placeholders.map((ph, i) => placeholderSpXml(ph, i + 2)).join("\n");
89574
+ let bgXml = "";
89575
+ const hex3 = normalizeSrgbHex(definition.backgroundColor);
89576
+ if (hex3) {
89577
+ bgXml = ` <p:bg><p:bgPr><a:solidFill><a:srgbClr val="${hex3}"/></a:solidFill><a:effectLst/></p:bgPr></p:bg>
89578
+ `;
89579
+ }
89580
+ return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
89581
+ <p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
89582
+ xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
89583
+ xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"
89584
+ type="${escAttr(layoutType)}" preserve="1">
89585
+ <p:cSld name="${escAttr(definition.name)}">
89586
+ ${bgXml} <p:spTree>
89587
+ <p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
89588
+ <p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr>
89589
+ ${phShapes}
89590
+ </p:spTree>
89591
+ </p:cSld>
89592
+ <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>
89593
+ </p:sldLayout>`;
89594
+ }
89595
+ function layoutRelsXml(masterIndex = 1) {
89596
+ return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
89597
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
89598
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster${masterIndex}.xml"/>
89599
+ </Relationships>`;
89600
+ }
89601
+ function countExistingLayouts(zip) {
89602
+ let count = 0;
89603
+ zip.forEach((relativePath) => {
89604
+ if (/^ppt\/slideLayouts\/slideLayout\d+\.xml$/.test(relativePath)) {
89605
+ count++;
89606
+ }
89607
+ });
89608
+ return count;
89609
+ }
89610
+ async function addLayoutToSlideMaster(zip, layoutIndex, masterIndex = 1) {
89611
+ const masterRelsPath = `ppt/slideMasters/_rels/slideMaster${masterIndex}.xml.rels`;
89612
+ const masterRelsContent = await zip.file(masterRelsPath)?.async("string");
89613
+ if (!masterRelsContent) {
89614
+ throw new Error(`Slide master rels not found at ${masterRelsPath}`);
89615
+ }
89616
+ const rIdMatches = [...masterRelsContent.matchAll(/rId(\d+)/g)];
89617
+ const maxRId = rIdMatches.reduce((max, m) => Math.max(max, parseInt(m[1], 10)), 0);
89618
+ const newRId = `rId${maxRId + 1}`;
89619
+ const newRel = ` <Relationship Id="${newRId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout${layoutIndex}.xml"/>`;
89620
+ const updatedRels = masterRelsContent.replace("</Relationships>", `${newRel}
89621
+ </Relationships>`);
89622
+ zip.file(masterRelsPath, updatedRels);
89623
+ const masterPath = `ppt/slideMasters/slideMaster${masterIndex}.xml`;
89624
+ const masterContent = await zip.file(masterPath)?.async("string");
89625
+ if (!masterContent) {
89626
+ throw new Error(`Slide master not found at ${masterPath}`);
89627
+ }
89628
+ const idMatches = [...masterContent.matchAll(/sldLayoutId\s+id="(\d+)"/g)];
89629
+ const maxLayoutId = idMatches.reduce((max, m) => Math.max(max, parseInt(m[1], 10)), 2147483648);
89630
+ const newLayoutId = maxLayoutId + 1;
89631
+ const newLayoutIdEntry = ` <p:sldLayoutId id="${newLayoutId}" r:id="${newRId}"/>`;
89632
+ const updatedMaster = masterContent.replace(
89633
+ "</p:sldLayoutIdLst>",
89634
+ `${newLayoutIdEntry}
89635
+ </p:sldLayoutIdLst>`
89636
+ );
89637
+ zip.file(masterPath, updatedMaster);
89638
+ }
89639
+ async function addLayoutContentType(zip, layoutIndex) {
89640
+ const ctPath = "[Content_Types].xml";
89641
+ const ctContent = await zip.file(ctPath)?.async("string");
89642
+ if (!ctContent) {
89643
+ throw new Error("Content types file not found");
89644
+ }
89645
+ const override = ` <Override PartName="/ppt/slideLayouts/slideLayout${layoutIndex}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>`;
89646
+ const updatedCt = ctContent.replace("</Types>", `${override}
89647
+ </Types>`);
89648
+ zip.file(ctPath, updatedCt);
89649
+ }
89650
+ async function createLayout(handler, data, definition, masterIndex = 1) {
89651
+ const bytes = await handler.save(data.slides);
89652
+ const zip = await openPptxZip(bytes);
89653
+ const existingCount = countExistingLayouts(zip);
89654
+ const newIndex = existingCount + 1;
89655
+ const layoutPath = `ppt/slideLayouts/slideLayout${newIndex}.xml`;
89656
+ zip.file(layoutPath, generateLayoutXml(definition));
89657
+ zip.file(`ppt/slideLayouts/_rels/slideLayout${newIndex}.xml.rels`, layoutRelsXml(masterIndex));
89658
+ await addLayoutToSlideMaster(zip, newIndex, masterIndex);
89659
+ await addLayoutContentType(zip, newIndex);
89660
+ const updatedBuffer = await zip.generateAsync({ type: "arraybuffer" });
89661
+ const newHandler = new PptxHandler();
89662
+ const newData = await newHandler.load(updatedBuffer);
89663
+ return {
89664
+ layoutPath,
89665
+ layoutName: definition.name,
89666
+ handler: newHandler,
89667
+ data: newData
89668
+ };
89669
+ }
89670
+ async function createLayouts(handler, data, definitions, masterIndex = 1) {
89671
+ if (definitions.length === 0) {
89672
+ return { layoutPaths: [], handler, data };
89673
+ }
89674
+ const bytes = await handler.save(data.slides);
89675
+ const zip = await openPptxZip(bytes);
89676
+ const existingCount = countExistingLayouts(zip);
89677
+ const layoutPaths = [];
89678
+ for (let i = 0; i < definitions.length; i++) {
89679
+ const def = definitions[i];
89680
+ const newIndex = existingCount + i + 1;
89681
+ const layoutPath = `ppt/slideLayouts/slideLayout${newIndex}.xml`;
89682
+ zip.file(layoutPath, generateLayoutXml(def));
89683
+ zip.file(`ppt/slideLayouts/_rels/slideLayout${newIndex}.xml.rels`, layoutRelsXml(masterIndex));
89684
+ await addLayoutToSlideMaster(zip, newIndex, masterIndex);
89685
+ await addLayoutContentType(zip, newIndex);
89686
+ layoutPaths.push(layoutPath);
89687
+ }
89688
+ const updatedBuffer = await zip.generateAsync({ type: "arraybuffer" });
89689
+ const newHandler = new PptxHandler();
89690
+ const newData = await newHandler.load(updatedBuffer);
89691
+ return { layoutPaths, handler: newHandler, data: newData };
89692
+ }
89693
+ function findLayoutByName(data, name) {
89694
+ const lowerName = name.toLowerCase();
89695
+ const fromOptions = data.layoutOptions?.find((l) => l.name.toLowerCase() === lowerName);
89696
+ if (fromOptions) {
89697
+ return fromOptions;
89698
+ }
89699
+ if (data.slideMasters) {
89700
+ for (const master of data.slideMasters) {
89701
+ const layout = master.layouts?.find((l) => l.name?.toLowerCase() === lowerName);
89702
+ if (layout) {
89703
+ return { path: layout.path, name: layout.name ?? name };
89704
+ }
89705
+ }
89706
+ }
89707
+ return void 0;
89708
+ }
89709
+ function findLayoutByType(data, type) {
89710
+ const fromOptions = data.layoutOptions?.find((l) => l.type === type);
89711
+ if (fromOptions) {
89712
+ return fromOptions;
89713
+ }
89714
+ return void 0;
89715
+ }
89716
+
89717
+ // pptx/core/builders/sdk/standard-layout-placeholders.ts
89718
+ function standardLayoutPlaceholders(type, width, height) {
89719
+ if (type === "blank") return [];
89720
+ const box = (type2, idx, x, y, w, h) => ({
89721
+ type: type2,
89722
+ idx,
89723
+ x: x * width,
89724
+ y: y * height,
89725
+ width: w * width,
89726
+ height: h * height
89727
+ });
89728
+ const title = box("title", 0, 0.05, 0.04, 0.9, 0.15);
89729
+ const content2 = box("obj", 1, 0.05, 0.23, 0.9, 0.64);
89730
+ let slots;
89731
+ switch (type) {
89732
+ case "title":
89733
+ slots = [
89734
+ box("ctrTitle", 0, 0.08, 0.24, 0.84, 0.22),
89735
+ box("subTitle", 1, 0.12, 0.49, 0.76, 0.2)
89736
+ ];
89737
+ break;
89738
+ case "secHead":
89739
+ slots = [box("title", 0, 0.05, 0.37, 0.9, 0.2), box("body", 1, 0.05, 0.6, 0.9, 0.23)];
89740
+ break;
89741
+ case "twoObj":
89742
+ case "twoTxTwoObj":
89743
+ slots = [title, box("obj", 1, 0.05, 0.27, 0.43, 0.6), box("obj", 2, 0.52, 0.27, 0.43, 0.6)];
89744
+ if (type === "twoTxTwoObj")
89745
+ slots.push(box("body", 3, 0.05, 0.2, 0.43, 0.07), box("body", 4, 0.52, 0.2, 0.43, 0.07));
89746
+ break;
89747
+ case "titleOnly":
89748
+ slots = [title];
89749
+ break;
89750
+ case "objTx":
89751
+ case "picTx":
89752
+ slots = [
89753
+ title,
89754
+ box(type === "picTx" ? "pic" : "obj", 1, 0.36, 0.23, 0.59, 0.64),
89755
+ box("body", 2, 0.05, 0.23, 0.27, 0.64)
89756
+ ];
89757
+ break;
89758
+ default:
89759
+ slots = [title, content2];
89760
+ }
89761
+ return [
89762
+ ...slots,
89763
+ box("dt", 10, 0.05, 0.92, 0.25, 0.04),
89764
+ box("ftr", 11, 0.33, 0.92, 0.34, 0.04),
89765
+ box("sldNum", 12, 0.75, 0.92, 0.2, 0.04)
89766
+ ];
89767
+ }
89768
+
89197
89769
  // pptx/core/builders/sdk/PresentationBuilder.ts
89198
89770
  var DEFAULT_WIDTH = 12192e3;
89199
89771
  var DEFAULT_HEIGHT = 6858e3;
@@ -89213,7 +89785,7 @@ var DEFAULT_COLORS = {
89213
89785
  };
89214
89786
  var DEFAULT_MAJOR_FONT = "Calibri Light";
89215
89787
  var DEFAULT_MINOR_FONT = "Calibri";
89216
- function normalizeSrgbHex(color) {
89788
+ function normalizeSrgbHex2(color) {
89217
89789
  if (!color) {
89218
89790
  return void 0;
89219
89791
  }
@@ -89229,7 +89801,7 @@ function normalizeSrgbHex(color) {
89229
89801
  function resolveThemeColors(overrides) {
89230
89802
  const resolved = {};
89231
89803
  for (const [key2, fallback] of Object.entries(DEFAULT_COLORS)) {
89232
- resolved[key2] = normalizeSrgbHex(overrides?.[key2]) ?? normalizeSrgbHex(fallback) ?? "000000";
89804
+ resolved[key2] = normalizeSrgbHex2(overrides?.[key2]) ?? normalizeSrgbHex2(fallback) ?? "000000";
89233
89805
  }
89234
89806
  return resolved;
89235
89807
  }
@@ -89386,21 +89958,6 @@ ${layoutRels}
89386
89958
  <Relationship Id="rId${layoutCount + 1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="../theme/theme1.xml"/>
89387
89959
  </Relationships>`;
89388
89960
  }
89389
- function slideLayoutXml2(name, layoutType) {
89390
- return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
89391
- <p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
89392
- xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
89393
- xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"
89394
- type="${escAttr(layoutType)}" preserve="1">
89395
- <p:cSld name="${escAttr(name)}">
89396
- <p:spTree>
89397
- <p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
89398
- <p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr>
89399
- </p:spTree>
89400
- </p:cSld>
89401
- <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>
89402
- </p:sldLayout>`;
89403
- }
89404
89961
  function slideLayoutRelsXml() {
89405
89962
  return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
89406
89963
  <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
@@ -89549,7 +90106,14 @@ async function buildBlankPresentationArchive(options) {
89549
90106
  zip.file("ppt/slideMasters/_rels/slideMaster1.xml.rels", slideMasterRelsXml(layoutCount));
89550
90107
  for (let i = 0; i < layoutCount; i++) {
89551
90108
  const layout = STANDARD_LAYOUTS[i];
89552
- zip.file(`ppt/slideLayouts/slideLayout${i + 1}.xml`, slideLayoutXml2(layout.name, layout.type));
90109
+ zip.file(
90110
+ `ppt/slideLayouts/slideLayout${i + 1}.xml`,
90111
+ generateLayoutXml({
90112
+ name: layout.name,
90113
+ type: layout.type,
90114
+ placeholders: standardLayoutPlaceholders(layout.type, width / 9525, height / 9525)
90115
+ })
90116
+ );
89553
90117
  zip.file(`ppt/slideLayouts/_rels/slideLayout${i + 1}.xml.rels`, slideLayoutRelsXml());
89554
90118
  }
89555
90119
  for (let i = 0; i < initialSlideCount; i++) {
@@ -89586,7 +90150,7 @@ var PresentationBuilder = class {
89586
90150
  const layoutIdx = STANDARD_LAYOUTS.findIndex((l) => l.name === layoutName) + 1 || 7;
89587
90151
  const layoutPath = `ppt/slideLayouts/slideLayout${layoutIdx}.xml`;
89588
90152
  const resolvedName = layoutName ?? STANDARD_LAYOUTS[layoutIdx - 1]?.name ?? "Blank";
89589
- return new SlideBuilder(slideNum, layoutPath, resolvedName);
90153
+ return new SlideBuilder(slideNum, layoutPath, resolvedName, handler);
89590
90154
  };
89591
90155
  return { handler, data, createSlide };
89592
90156
  }
@@ -89643,4 +90207,4 @@ var PresentationBuilder = class {
89643
90207
  * `<p:extLst>` (optional)
89644
90208
  */
89645
90209
 
89646
- export { AFTER_ANIMATION_VALUES, ConnectorXmlFactory, DEFAULT_AFTER_ANIMATION_DIM_COLOR, DEFAULT_ANIMATION_DURATION_MS, DEFAULT_ANIMATION_TRIGGER, DEFAULT_POWERPOINT_TABLE_STYLE_ID, ELEMENT_PARAGRAPH_GEOMETRY_KEYS, EncryptedPptError, MediaGraphicFrameXmlFactory, OOXML_TO_PRESET_EMPH, OOXML_TO_PRESET_ENTR, OOXML_TO_PRESET_EXIT, PRESET_TO_OOXML, PictureXmlFactory, PptxAnimationWriteService, PptxColorStyleCodec, PptxCommentAuthorsXmlFactory, PptxCommentXmlFactoryProvider, PptxCompatibilityService, PptxConnectorParser, PptxContentTypesBuilder, PptxDocumentPropertiesUpdater, PptxEditorAnimationService, PptxElementTransformUpdater, PptxElementXmlBuilder, PptxGraphicFrameParser, PptxHandler, PptxHandlerRuntime104 as PptxHandlerRuntime, PptxHandlerRuntimeFactory, PptxLoadDataBuilder, PptxMediaDataParser, PptxNativeAnimationService, PptxPresentationSaveBuilder, PptxPresentationSlidesReconciler, PptxRuntimeDependencyFactory, PptxSaveConstantsFactory, PptxSaveState, PptxSaveStateBuilder, PptxShapeIdValidator, PptxShapeStyleExtractor, PptxSlideBackgroundBuilder, PptxSlideBuilder, PptxSlideCommentPartWriter, PptxSlideCommentsXmlFactory, PptxSlideElementsBuilder, PptxSlideLoaderService, PptxSlideMediaRelationshipBuilder, PptxSlideNotesBuilder, PptxSlideNotesPartUpdater, PptxSlideRelationshipRegistry, PptxSlideTransitionService, PptxTableDataParser, PptxTemplateBackgroundService, PptxXmlBuilder, PptxXmlFactoryProvider, PptxXmlLookupService, PresentationBuilder, STANDARD_LAYOUTS, SlideBuilder, TABLE_STYLE_PART_SEQUENCE, TextShapeXmlFactory, addChartCategory, addChartSeries, addTableStyleToMap, animationFor, applyAfterAnimationBehavior, applyAfterAnimationFromEditorList, applyChartGroupOptionsInput, applyConnectorShapeIds, applySoundToEffectCTn, applySpeedToDuration, applyTableCellTextAndStyle, assertChartGradientSupported, breakAutoNumberRun, buildBlankPresentationArchive, buildRelationshipsXml, buildSingleEffectNode, buildSlideReferenceRemap, capturedPresetIds, capturedPresetNativeAnimation, capturedSubtypes, chartFormatTargetKey, clonePartGraph, convertPptToPptx, createAutoNumberSequence, createChartElement, createConnectorElement, createDefaultPptxHandlerRuntime, createFreeformElement, createGroupElement, createImageElement, createMediaElement, createPptxSaveConstants, createShapeElement, createTableCellXml, createTableElement, createTableGraphicFrameRawXml, createTableStyleEntry, createTextElement, deleteTableStyleFromMap, ensureChartData, ensureDataPoint, extractAfterAnimationFromSubTnLst, extractGraphicBuilds, extractTableCellTextRuns, generateTableStyleGuid, getAfterAnimation, getAfterAnimationState, getCapturedPreset, getCapturedTree, hasAnimation, isEncryptedLegacyPpt, isLegacyPpt, isLineDrawnChartType, isNativeAfterAnimationOnly, mergeNativeAfterAnimationIntoEditorAnimations, mergeNativeSoundIntoEditorAnimations, nextAutoNumber, nextRelationshipId, normalizeTableStyleGuid, ooxmlToPresetName, parseAnimEffectFilter, parseChartFormatTargetKey, parseCondition, parseConditionList, parseFilterToken, parseRelationships, parseTimeTargetElement, rebuildTableStructureInRawXml, reconcileAnimationTargets, relationshipsPartFor, relativePartTarget, remapEditorAnimationsToShapeIds, removeChartCategory, removeChartSeries, removeEmptyDataPoint, resetIdCounter, resolveConnectorShapeIds, resolveDirectionSubtype, resolveEffectTiming, resolveIterationCount, resolveOoxmlPresetMapping, resolveOpacitySet, resolvePartPath, resolveTableBackgroundFillRef, resolveTableStyleLineRef, resolveTableStyleLineRefColor, resolveVisibilitySetTiming, serializeCondition, serializeConditionList, serializeGraphicBuild, serializeTimeTargetElement, setAfterAnimation, setAfterAnimationColor, setChartAreaFormat, setChartAxis, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategories, setChartDataLabels, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartGroupOptions, setChartGrouping, setChartLegend, setChartSeriesChartType, setChartSeriesColor, setChartSeriesErrorBars, setChartSeriesMarker, setChartSeriesTrendline, setChartTitle, setChartType, shouldHoldEndState, timingCurveToAccelDecel, toChartGradientFill, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateChartDataPoint, updateChartSeriesValues, updateMergeAttrsInRawXml, upsert, validateSeriesIndex };
90210
+ export { AFTER_ANIMATION_VALUES, ConnectorXmlFactory, DEFAULT_AFTER_ANIMATION_DIM_COLOR, DEFAULT_ANIMATION_DURATION_MS, DEFAULT_ANIMATION_TRIGGER, DEFAULT_POWERPOINT_TABLE_STYLE_ID, ELEMENT_PARAGRAPH_GEOMETRY_KEYS, EncryptedPptError, MediaGraphicFrameXmlFactory, OOXML_TO_PRESET_EMPH, OOXML_TO_PRESET_ENTR, OOXML_TO_PRESET_EXIT, PRESET_TO_OOXML, PictureXmlFactory, PptxAnimationWriteService, PptxColorStyleCodec, PptxCommentAuthorsXmlFactory, PptxCommentXmlFactoryProvider, PptxCompatibilityService, PptxConnectorParser, PptxContentTypesBuilder, PptxDocumentPropertiesUpdater, PptxEditorAnimationService, PptxElementTransformUpdater, PptxElementXmlBuilder, PptxGraphicFrameParser, PptxHandler, PptxHandlerRuntime105 as PptxHandlerRuntime, PptxHandlerRuntimeFactory, PptxLoadDataBuilder, PptxMediaDataParser, PptxNativeAnimationService, PptxPresentationSaveBuilder, PptxPresentationSlidesReconciler, PptxRuntimeDependencyFactory, PptxSaveConstantsFactory, PptxSaveState, PptxSaveStateBuilder, PptxShapeIdValidator, PptxShapeStyleExtractor, PptxSlideBackgroundBuilder, PptxSlideBuilder, PptxSlideCommentPartWriter, PptxSlideCommentsXmlFactory, PptxSlideElementsBuilder, PptxSlideLoaderService, PptxSlideMediaRelationshipBuilder, PptxSlideNotesBuilder, PptxSlideNotesPartUpdater, PptxSlideRelationshipRegistry, PptxSlideTransitionService, PptxTableDataParser, PptxTemplateBackgroundService, PptxXmlBuilder, PptxXmlFactoryProvider, PptxXmlLookupService, PresentationBuilder, STANDARD_LAYOUTS, SlideBuilder, TABLE_STYLE_PART_SEQUENCE, TextShapeXmlFactory, addChartCategory, addChartSeries, addLayoutContentType, addLayoutToSlideMaster, addTableStyleToMap, animationFor, applyAfterAnimationBehavior, applyAfterAnimationFromEditorList, applyChartGroupOptionsInput, applyConnectorShapeIds, applySoundToEffectCTn, applySpeedToDuration, applyTableCellTextAndStyle, assertChartGradientSupported, breakAutoNumberRun, buildBlankPresentationArchive, buildRelationshipsXml, buildSingleEffectNode, buildSlideReferenceRemap, capturedPresetIds, capturedPresetNativeAnimation, capturedSubtypes, chartFormatTargetKey, clonePartGraph, convertPptToPptx, countExistingLayouts, createAutoNumberSequence, createChartElement, createConnectorElement, createDefaultPptxHandlerRuntime, createFreeformElement, createGroupElement, createImageElement, createLayout, createLayouts, createMediaElement, createPptxSaveConstants, createShapeElement, createTableCellXml, createTableElement, createTableGraphicFrameRawXml, createTableStyleEntry, createTextElement, deleteTableStyleFromMap, ensureChartData, ensureDataPoint, extractAfterAnimationFromSubTnLst, extractGraphicBuilds, extractTableCellTextRuns, findLayoutByName, findLayoutByType, generateLayoutXml, generateTableStyleGuid, getAfterAnimation, getAfterAnimationState, getCapturedPreset, getCapturedTree, hasAnimation, isEncryptedLegacyPpt, isLegacyPpt, isLineDrawnChartType, isNativeAfterAnimationOnly, layoutRelsXml, mergeNativeAfterAnimationIntoEditorAnimations, mergeNativeSoundIntoEditorAnimations, nextAutoNumber, nextRelationshipId, normalizeTableStyleGuid, ooxmlToPresetName, parseAnimEffectFilter, parseChartFormatTargetKey, parseCondition, parseConditionList, parseFilterToken, parseRelationships, parseTimeTargetElement, rebuildTableStructureInRawXml, reconcileAnimationTargets, relationshipsPartFor, relativePartTarget, remapEditorAnimationsToShapeIds, removeChartCategory, removeChartSeries, removeEmptyDataPoint, resetIdCounter, resolveConnectorShapeIds, resolveDirectionSubtype, resolveEffectTiming, resolveIterationCount, resolveOoxmlPresetMapping, resolveOpacitySet, resolvePartPath, resolveTableBackgroundFillRef, resolveTableStyleLineRef, resolveTableStyleLineRefColor, resolveVisibilitySetTiming, serializeCondition, serializeConditionList, serializeGraphicBuild, serializeTimeTargetElement, setAfterAnimation, setAfterAnimationColor, setChartAreaFormat, setChartAxis, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategories, setChartDataLabels, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartGroupOptions, setChartGrouping, setChartLegend, setChartSeriesChartType, setChartSeriesColor, setChartSeriesErrorBars, setChartSeriesMarker, setChartSeriesTrendline, setChartTitle, setChartType, shouldHoldEndState, timingCurveToAccelDecel, toChartGradientFill, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateChartDataPoint, updateChartSeriesValues, updateMergeAttrsInRawXml, upsert, validateSeriesIndex };