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,4 +1,4 @@
1
- import { NS, SMART_ART_DEFINITION_PARTS, VML_SHAPE_TAGS, isAlternateContentChoiceXmlSupported, parseVmlElement, unwrapAlternateContent, xmlChild, xmlAttr, parseDrawingMediaReference, cropShapeForPresetGeometry, isHeaderFooterPlaceholder, xmlPath, inheritedPlaceholderFieldType, parseParagraphLevel, xmlHasChild, parseParagraphExtraAttributes, parseParagraphMargins, parseAlignmentAttr, parseParagraphRtl, parseTabStops, resolveParagraphAlignment, xmlText, parseBodyPrBooleanAttrs, selectAlternateContentBranch, parseBulletSizePercent, extractColorChoiceXml, themeColorRefFromColorChoice, formatAutoNumberMarker, cloneXmlObject, parseParagraphSpacingPx, parseOoxmlPercent, createBuiltinVariables, resolveCoordinate, readPathListCommandOrder, parseAdjustmentValues, parseGuideDefinitions, evaluateGuides, orderedPathCommandEntries, ooxmlArcToSvg, inheritCustomGeometryCommandOrder, parseInkMlContent, parseModel3DScene, remapElementShapeIds, parseShapeId, isTemplateElementId, remapShapeIdReferences, reapplyAlternateContentToTree, openPptxZip, buildOle2, SHAPE_TREE_ELEMENT_TAGS, MAX_SHAPE_ID, orderedXmlKey, safeResolveZipPath, parseXml, elements, parseDataUrlToBytes, base64Decode, reorderObjectKeys, encodeCompressedPng, zlibStore, hash, concatArrays, encodePasswordUtf16LE, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, uint32LE, pptxActionToElementAction, buildClrMapOverrideXml, applyActiveXControlsToSlide, BLIP_FILL_ORDER, SP_PR_ORDER, ensureXmlChild, 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, applyDrawingMediaReference, XML_PROLOG, DGM_XMLNS, xmlEscape, writeBodyPrBooleanAttrs, applyTextBodySp3d, customGeometryPathsToXml, ensureArrayValue, lookupPresetShape, writeShapeEffects, SHAPE_STYLE_ORDER, roundCoordinate, scaleVectorToIntegers, P14_GUIDE_URI, P15_GUIDE_URI, buildGuideListExtension, resetSpPrFormattingForStyleMatrix, restorePathListCommandOrder, fillIsPurelyStyleMatrix, serializeColorChoiceWithRef, createLineStyleGate, applyDrawingLineDash, getSignaturePathsToStrip, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, mergeSmartArtPointXml, mergeSmartArtConnectionXml, applySmartArtLayoutDefinition, obfuscateFont, containsConvertibleStrictNamespaceAttribute, convertXmlToStrict, applySeriesPictureOptionsToXml, findChartExtByUri, findChildByLocalName, regenerateClonedUniqueId, buildChartUniqueIdExtLst, createOfficeGuid, isContentPoint, newSmartArtGuid, parseChartUserShapesDrawing, DEFAULT_ROW_HEIGHT_EMU, createDefaultXmlCell, xmlChildren, applyChartGradientToSpPr, setAutoTitleDeleted, insertAt, replaceFirstText, shouldRebuildFromParagraphs, buildPointFromParagraphs, shouldRebuildFromRuns, buildPointFromRuns, buildPointText, tableCellTextBodyMatches, ensureXmlChildren, TC_PR_BORDERS_ORDER, writeChartColorChoice, openNestedZip, stripParentDirSegments, parseChartUniqueId, buildChartMarkerXml, chartGradientsEqual, chartColorChoiceValue, preservesSpreadsheetXmlWhitespace, buildEffectDagTreeFromXml, syncPictureShapeTypeWithCropShape, buildSrgbColorChoice, fetchUrlToBytes, parseChartWideTextStyle, parseDefRPrTextStyle, parseChartDataLabelOptions, shadowOffsetToDistanceAndDirection, positiveFixedAngleAttribute, xmlAttrNumber, parseCustomShows, parseShapeProps, parseActiveXControlsFromSlide, convertMetafileToDataUrl, first, children, ooxmlGradientAngleToCssDegrees, isAlternateContentChoiceSupported, detectStrictConformance, normalizeStrictXml, relayoutSmartArt, themeColorRefToSolidFillWithOpacity, FONT_ADVANCE_TABLES, DEFAULT_FONT_ADVANCE_TABLE, measureTextWidth, applyDrawingColorTransforms, applyThemeToData, detectFileFormat, parseOle2, EncryptedFileError, decryptPptx, encryptPptx, encodeXmlAttributeValue, encodeXmlTextValue, svgToCustomGeometryPaths, IncorrectPasswordError, parseEncryptionInfo, RC4_ALG_ID, isOle2CompoundFile, ENTRY_TYPE_ROOT, supportsChartGradientFill, DEFAULT_CHART_GRADIENT_ANGLE, backgroundRefNode, backgroundStylePreset, isDarkColorMap, backgroundStyleColorMap, reResolveElementsForColorMapChange, decodeXmlEntities, preservesXmlWhitespace, annotateCustomGeometryCommandOrder, annotateSmartArtTextOrder, stripXmlOrderMarkers, normalizeStShapeType, applyCustomShows, applySections, reorderObjectKeysByLocalName, PRESENTATION_CHILD_ORDER, applyKinsokuToXml, normalizeNamespaceUri, backgroundStyleRefIsCurrent, captureStyleBaseline, STYLE_MATRIX_FILL_KEYS, STYLE_MATRIX_LINE_KEYS, STYLE_MATRIX_EFFECT_KEYS, detectOleObjectType, inferOleExtensionFromTarget, findThemeEffectScheme, wrapFormatSchemeXml, effectIsPurelyStyleMatrix, deriveSlideTitles, parseP14DirectChild, parseP14FromExtLst, P14_TRANSITION_TYPES, parseSlideDrawingGuides, slideBackgroundStyleRefFromNode, cloneSlide, parseDrawingFraction, scrgbLinearToSrgb8, parseDrawingHueDegrees, hslToRgb, themeColorRefToXml, effectChild, mergeEffectNode, mergeAttributeEffectNode, prismFamilyFlags, prismFamilyTypeOfNode, prismFamilyTypeForFlags, P14_DIR_IS_ORIENTATION_TYPE, estimateMediaDurationMs, parseVmlElements, parseDrawingLineDash, parseLineSpacingMultiplier, parseLineSpacingExactPt, loadThemeVariants, parsePresentationDrawingGuides, parsePresentationSmartTags, resolveLayoutDisplayName, DEFAULT_MAX_UNCOMPRESSED_BYTES, guardZip, ZipBombError, MAX_ZIP_ENTRY_COUNT, detectDigitalSignatures, unwrapOleEmbedding, mimeTypeForOleFile, oleBytesToDataUrl, extractGuidFromPartName, deobfuscateFont, detectFontFormat, themeColorRefFromSchemeClr, parseKinsoku, parseLineStyle, parseChartUpDownBars, parseDataTable, parseChart3DSurfaces, parseChartAxes, parseBubbleChartOptions, parseChartLayouts, parseCxChartSeries, parseChartDataPointPictureBlipRel, parseSeriesDataPoints, parseMarker, parseSeriesDataLabels, parseChartDataPointPicture, parseImplicitBlipPictureFill, parseEmbeddedXlsx, relAttr, buildXml, chartTrendlineKind, parseChartManualLayout, parseDiagramRelationshipIds, parseSmartArtTextParagraphs, firstParagraphRuns, smartArtParagraphsText, parseSmartArtLayoutDefinition, parseSmartArtPresLayoutVars, readChartManualLayoutValues, parseSmartArtConnection, projectSmartArtNodeText, resolveSmartArtNodeStyleRoles, resolveSmartArtNodeCoherent3DOff, parseSmartArtDefinitionMetadata, parseSmartArtColorStyleLabels, buildSmartArtColorLists, buildSmartArtColorRoleMap, parseSmartArtQuickStyleLabels, resolveSmartArtEffectIntensity, parseSmartArtStyleLabelRefs, extractStyleReferenceColorXml, withThemePlaceholderColor, blendColorOntoWhite, CHART_ERROR_VALUE_TYPES, CHART_ERROR_BAR_TYPES, CHART_ERROR_BAR_DIRECTIONS } from './chunk-XTSHZGSM.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, themeColorRefFromColorChoice, formatAutoNumberMarker, cloneXmlObject, parseParagraphSpacingPx, parseOoxmlPercent, createBuiltinVariables, resolveCoordinate, readPathListCommandOrder, parseAdjustmentValues, parseGuideDefinitions, evaluateGuides, orderedPathCommandEntries, ooxmlArcToSvg, inheritCustomGeometryCommandOrder, parseInkMlContent, parseModel3DScene, remapElementShapeIds, parseShapeId, isTemplateElementId, remapShapeIdReferences, reapplyAlternateContentToTree, openPptxZip, buildOle2, SHAPE_TREE_ELEMENT_TAGS, MAX_SHAPE_ID, orderedXmlKey, safeResolveZipPath, parseXml, elements, parseDataUrlToBytes, base64Decode, reorderObjectKeys, encodeCompressedPng, zlibStore, hash, concatArrays, encodePasswordUtf16LE, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, uint32LE, pptxActionToElementAction, buildClrMapOverrideXml, applyActiveXControlsToSlide, BLIP_FILL_ORDER, SP_PR_ORDER, ensureXmlChild, 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, applyDrawingMediaReference, XML_PROLOG, DGM_XMLNS, xmlEscape, writeBodyPrBooleanAttrs, applyTextBodySp3d, customGeometryPathsToXml, ensureArrayValue, lookupPresetShape, writeShapeEffects, SHAPE_STYLE_ORDER, roundCoordinate, scaleVectorToIntegers, P14_GUIDE_URI, P15_GUIDE_URI, buildGuideListExtension, resetSpPrFormattingForStyleMatrix, restorePathListCommandOrder, fillIsPurelyStyleMatrix, serializeColorChoiceWithRef, createLineStyleGate, applyDrawingLineDash, getSignaturePathsToStrip, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, mergeSmartArtPointXml, mergeSmartArtConnectionXml, applySmartArtLayoutDefinition, obfuscateFont, containsConvertibleStrictNamespaceAttribute, convertXmlToStrict, applySeriesPictureOptionsToXml, findChartExtByUri, findChildByLocalName, regenerateClonedUniqueId, buildChartUniqueIdExtLst, createOfficeGuid, isContentPoint, newSmartArtGuid, parseChartUserShapesDrawing, DEFAULT_ROW_HEIGHT_EMU, createDefaultXmlCell, xmlChildren, applyChartGradientToSpPr, setAutoTitleDeleted, insertAt, replaceFirstText, shouldRebuildFromParagraphs, buildPointFromParagraphs, shouldRebuildFromRuns, buildPointFromRuns, buildPointText, tableCellTextBodyMatches, ensureXmlChildren, TC_PR_BORDERS_ORDER, writeChartColorChoice, openNestedZip, stripParentDirSegments, parseChartUniqueId, buildChartMarkerXml, chartGradientsEqual, chartColorChoiceValue, preservesSpreadsheetXmlWhitespace, buildEffectDagTreeFromXml, syncPictureShapeTypeWithCropShape, buildSrgbColorChoice, fetchUrlToBytes, parseChartWideTextStyle, parseDefRPrTextStyle, parseChartDataLabelOptions, shadowOffsetToDistanceAndDirection, positiveFixedAngleAttribute, xmlAttrNumber, parseCustomShows, parseShapeProps, parseActiveXControlsFromSlide, convertMetafileToDataUrl, first, children, ooxmlGradientAngleToCssDegrees, isAlternateContentChoiceSupported, detectStrictConformance, normalizeStrictXml, relayoutSmartArt, themeColorRefToSolidFillWithOpacity, FONT_ADVANCE_TABLES, DEFAULT_FONT_ADVANCE_TABLE, measureTextWidth, applyDrawingColorTransforms, applyThemeToData, detectFileFormat, parseOle2, EncryptedFileError, decryptPptx, encryptPptx, encodeXmlAttributeValue, encodeXmlTextValue, svgToCustomGeometryPaths, IncorrectPasswordError, parseEncryptionInfo, RC4_ALG_ID, isOle2CompoundFile, ENTRY_TYPE_ROOT, supportsChartGradientFill, DEFAULT_CHART_GRADIENT_ANGLE, decodeXmlEntities, preservesXmlWhitespace, annotateCustomGeometryCommandOrder, annotateSmartArtTextOrder, stripXmlOrderMarkers, 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, backgroundStylePreset, isDarkColorMap, backgroundStyleColorMap, reResolveElementsForColorMapChange, deriveSlideTitles, parseP14DirectChild, parseP14FromExtLst, P14_TRANSITION_TYPES, parseSlideDrawingGuides, slideBackgroundStyleRefFromNode, cloneSlide, parseDrawingFraction, scrgbLinearToSrgb8, parseDrawingHueDegrees, hslToRgb, themeColorRefToXml, effectChild, mergeEffectNode, mergeAttributeEffectNode, findThemeEffectScheme, wrapFormatSchemeXml, effectIsPurelyStyleMatrix, prismFamilyFlags, prismFamilyTypeOfNode, prismFamilyTypeForFlags, P14_DIR_IS_ORIENTATION_TYPE, estimateMediaDurationMs, parseVmlElements, parseDrawingLineDash, parseLineSpacingMultiplier, parseLineSpacingExactPt, loadThemeVariants, parsePresentationDrawingGuides, parsePresentationSmartTags, resolveLayoutDisplayName, DEFAULT_MAX_UNCOMPRESSED_BYTES, guardZip, ZipBombError, MAX_ZIP_ENTRY_COUNT, detectDigitalSignatures, unwrapOleEmbedding, mimeTypeForOleFile, oleBytesToDataUrl, themeColorRefFromSchemeClr, extractGuidFromPartName, deobfuscateFont, detectFontFormat, parseKinsoku, parseLineStyle, parseChartUpDownBars, parseDataTable, parseChart3DSurfaces, parseChartAxes, parseBubbleChartOptions, parseChartLayouts, parseCxChartSeries, parseChartDataPointPictureBlipRel, parseSeriesDataPoints, parseMarker, parseSeriesDataLabels, parseChartDataPointPicture, parseImplicitBlipPictureFill, parseEmbeddedXlsx, relAttr, buildXml, chartTrendlineKind, parseChartManualLayout, parseDiagramRelationshipIds, parseSmartArtTextParagraphs, firstParagraphRuns, smartArtParagraphsText, parseSmartArtLayoutDefinition, parseSmartArtPresLayoutVars, readChartManualLayoutValues, parseSmartArtConnection, projectSmartArtNodeText, resolveSmartArtNodeStyleRoles, resolveSmartArtNodeCoherent3DOff, parseSmartArtDefinitionMetadata, parseSmartArtColorStyleLabels, buildSmartArtColorLists, buildSmartArtColorRoleMap, parseSmartArtQuickStyleLabels, resolveSmartArtEffectIntensity, parseSmartArtStyleLabelRefs, extractStyleReferenceColorXml, withThemePlaceholderColor, blendColorOntoWhite, CHART_ERROR_VALUE_TYPES, CHART_ERROR_BAR_TYPES, CHART_ERROR_BAR_DIRECTIONS } from './chunk-6IIMI5RS.mjs';
2
2
  import { hasShapeProperties, hasTextProperties } from './chunk-GXHKNSZX.mjs';
3
3
  import { EMU_PER_PX, EMU_PER_PIXEL, SYSTEM_COLOR_MAP, PRESET_COLOR_MAP, OOXML_PERCENT_UNITS, EMU_PER_POINT } from './chunk-CA7KCNL3.mjs';
4
4
  import JSZip from 'jszip';
@@ -4329,6 +4329,153 @@ function materializeInheritedShapeTransform(shape, element) {
4329
4329
  return transform2;
4330
4330
  }
4331
4331
 
4332
+ // pptx/core/utils/placeholder-xml.ts
4333
+ function findNonVisualProps(rawXml) {
4334
+ for (const container of ["p:nvSpPr", "p:nvPicPr", "p:nvGraphicFramePr"]) {
4335
+ const parent = rawXml[container];
4336
+ const nvPr = parent?.["p:nvPr"];
4337
+ if (nvPr) {
4338
+ return nvPr;
4339
+ }
4340
+ }
4341
+ return void 0;
4342
+ }
4343
+ function retargetPlaceholder(rawXml, target) {
4344
+ const nvPr = findNonVisualProps(rawXml);
4345
+ if (!nvPr) {
4346
+ return;
4347
+ }
4348
+ const ph = nvPr["p:ph"] ?? {};
4349
+ nvPr["p:ph"] = ph;
4350
+ if (target.type) {
4351
+ ph["@_type"] = target.type;
4352
+ } else {
4353
+ delete ph["@_type"];
4354
+ }
4355
+ if (target.idx !== void 0) {
4356
+ ph["@_idx"] = target.idx;
4357
+ } else {
4358
+ delete ph["@_idx"];
4359
+ }
4360
+ }
4361
+ function setRawXmlTransform(rawXml, xEmu, yEmu, cxEmu, cyEmu) {
4362
+ const spPr = rawXml["p:spPr"];
4363
+ if (!spPr) {
4364
+ return;
4365
+ }
4366
+ const xfrm = spPr["a:xfrm"] ?? {};
4367
+ spPr["a:xfrm"] = xfrm;
4368
+ const off = xfrm["a:off"] ?? {};
4369
+ xfrm["a:off"] = off;
4370
+ off["@_x"] = String(xEmu);
4371
+ off["@_y"] = String(yEmu);
4372
+ const ext = xfrm["a:ext"] ?? {};
4373
+ xfrm["a:ext"] = ext;
4374
+ ext["@_cx"] = String(cxEmu);
4375
+ ext["@_cy"] = String(cyEmu);
4376
+ }
4377
+ function createEmptyPlaceholderElement(target, xEmu, yEmu, cxEmu, cyEmu, uniqueId) {
4378
+ if (cxEmu <= 0 || cyEmu <= 0) {
4379
+ return null;
4380
+ }
4381
+ const phNode = {};
4382
+ if (target.type) {
4383
+ phNode["@_type"] = target.type;
4384
+ }
4385
+ if (target.idx !== void 0) {
4386
+ phNode["@_idx"] = target.idx;
4387
+ }
4388
+ const rawXml = {
4389
+ "p:nvSpPr": {
4390
+ "p:cNvPr": {
4391
+ "@_id": uniqueId,
4392
+ "@_name": `Placeholder ${target.type || "content"}`
4393
+ },
4394
+ "p:cNvSpPr": {
4395
+ "a:spLocks": { "@_noGrp": "1" }
4396
+ },
4397
+ "p:nvPr": {
4398
+ "p:ph": phNode
4399
+ }
4400
+ },
4401
+ "p:spPr": {
4402
+ "a:xfrm": {
4403
+ "a:off": { "@_x": String(xEmu), "@_y": String(yEmu) },
4404
+ "a:ext": { "@_cx": String(cxEmu), "@_cy": String(cyEmu) }
4405
+ }
4406
+ },
4407
+ "p:txBody": {
4408
+ "a:bodyPr": {},
4409
+ "a:lstStyle": {},
4410
+ "a:p": { "a:endParaRPr": { "@_lang": "en-US" } }
4411
+ }
4412
+ };
4413
+ return {
4414
+ type: "text",
4415
+ id: `ph-${target.type || "content"}-${target.idx ?? "0"}-${uniqueId}`,
4416
+ x: Math.round(xEmu / EMU_PER_PX),
4417
+ y: Math.round(yEmu / EMU_PER_PX),
4418
+ width: Math.round(cxEmu / EMU_PER_PX),
4419
+ height: Math.round(cyEmu / EMU_PER_PX),
4420
+ text: "",
4421
+ rawXml
4422
+ };
4423
+ }
4424
+
4425
+ // pptx/core/core/runtime/save-geometry-validation.ts
4426
+ var FRAME_FIELDS = ["x", "y", "width", "height"];
4427
+ var OPTIONAL_FIELDS = [
4428
+ "xEmu",
4429
+ "yEmu",
4430
+ "widthEmu",
4431
+ "heightEmu",
4432
+ "rotation",
4433
+ "skewX",
4434
+ "skewY",
4435
+ "chOffXEmu",
4436
+ "chOffYEmu",
4437
+ "chExtWidthEmu",
4438
+ "chExtHeightEmu"
4439
+ ];
4440
+ function omitsInheritedFrame(element) {
4441
+ if (!["text", "shape", "picture", "media"].includes(element.type) || !element.rawXml)
4442
+ return false;
4443
+ if (!xmlHasChild(findNonVisualProps(element.rawXml), "p:ph")) return false;
4444
+ if (xmlHasChild(xmlChild(element.rawXml, "p:spPr"), "a:xfrm") || xmlHasChild(element.rawXml, "p:xfrm"))
4445
+ return false;
4446
+ const baseline = element.inheritedTransform;
4447
+ if (!baseline) return FRAME_FIELDS.every((key2) => element[key2] === void 0);
4448
+ return FRAME_FIELDS.every(
4449
+ (key2) => Number.isFinite(baseline[key2]) && (element[key2] === void 0 || element[key2] === baseline[key2])
4450
+ ) && ["rotation", "skewX", "skewY", "flipHorizontal", "flipVertical"].every(
4451
+ (key2) => (element[key2] ?? 0) === (baseline[key2] ?? 0)
4452
+ );
4453
+ }
4454
+ function validateElementGeometry(element, context, emuPerPx = 9525) {
4455
+ const inherited = omitsInheritedFrame(element);
4456
+ const record2 = element;
4457
+ const fields = [...inherited ? [] : FRAME_FIELDS, ...OPTIONAL_FIELDS];
4458
+ for (const field of fields) {
4459
+ const value = record2[field];
4460
+ if (OPTIONAL_FIELDS.includes(field) && value === void 0) continue;
4461
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isFinite(value * emuPerPx)) {
4462
+ throw new Error(
4463
+ `${context}: element '${element.id}' (${element.name ?? "unnamed"}, type=${element.type}) has invalid ${field}=${String(value)}; expected a finite number`
4464
+ );
4465
+ }
4466
+ }
4467
+ if (element.type === "group") {
4468
+ for (const child16 of element.children) validateElementGeometry(child16, context, emuPerPx);
4469
+ }
4470
+ }
4471
+ function validateSlideGeometry(slides) {
4472
+ for (const slide of slides) {
4473
+ for (const element of slide.elements) {
4474
+ validateElementGeometry(element, `Slide ${slide.slideNumber} (${slide.id})`);
4475
+ }
4476
+ }
4477
+ }
4478
+
4332
4479
  // pptx/core/core/builders/PptxElementTransformUpdater.ts
4333
4480
  var PptxElementTransformUpdater = class {
4334
4481
  applyTransform(shape, element, emuPerPx, enclosingGroupChildSpace) {
@@ -4337,6 +4484,7 @@ var PptxElementTransformUpdater = class {
4337
4484
  if (!transform2) {
4338
4485
  return;
4339
4486
  }
4487
+ validateElementGeometry(element, "Transform writer", emuPerPx);
4340
4488
  if (!transform2["a:off"]) {
4341
4489
  transform2["a:off"] = {};
4342
4490
  }
@@ -35491,6 +35639,75 @@ var PptxSaveConstantsFactory = class {
35491
35639
  var defaultPptxSaveConstantsFactory = new PptxSaveConstantsFactory();
35492
35640
  var createPptxSaveConstants = (conformance = "transitional") => defaultPptxSaveConstantsFactory.create(conformance);
35493
35641
 
35642
+ // pptx/core/utils/placeholder-remap.ts
35643
+ var TITLE_ROLE = /* @__PURE__ */ new Set(["title", "ctrtitle"]);
35644
+ var CONTENT_ROLE = /* @__PURE__ */ new Set([
35645
+ "body",
35646
+ "obj",
35647
+ "subtitle",
35648
+ "pic",
35649
+ "chart",
35650
+ "tbl",
35651
+ "media",
35652
+ "clipart",
35653
+ "dgm"
35654
+ ]);
35655
+ function placeholderContentRole(type) {
35656
+ const declared = (type ?? "").trim().toLowerCase() || "body";
35657
+ if (TITLE_ROLE.has(declared)) {
35658
+ return "title";
35659
+ }
35660
+ if (CONTENT_ROLE.has(declared)) {
35661
+ return "content";
35662
+ }
35663
+ return declared;
35664
+ }
35665
+ function preferredPlaceholderTypes(element) {
35666
+ switch (element.type) {
35667
+ case "image":
35668
+ case "picture":
35669
+ return ["pic", "obj", "body"];
35670
+ case "chart":
35671
+ return ["chart", "obj", "body"];
35672
+ case "table":
35673
+ return ["tbl", "obj", "body"];
35674
+ case "media":
35675
+ case "model3d":
35676
+ return ["media", "pic", "obj", "body"];
35677
+ case "smartArt":
35678
+ return ["dgm", "obj", "body"];
35679
+ case "text":
35680
+ return ["body", "subtitle", "obj"];
35681
+ default:
35682
+ return ["obj", "body"];
35683
+ }
35684
+ }
35685
+ function scorePlaceholderMatch(element, source, target) {
35686
+ if (placeholderContentRole(source.type) !== placeholderContentRole(target.type)) {
35687
+ return -1;
35688
+ }
35689
+ const sourceType = normalizeType(source.type);
35690
+ const targetType = normalizeType(target.type);
35691
+ let score = 1;
35692
+ if (source.idx !== void 0 && source.idx === target.idx) {
35693
+ score += 100;
35694
+ }
35695
+ if (sourceType === targetType) {
35696
+ score += 50;
35697
+ }
35698
+ const preferred = preferredPlaceholderTypes(element).indexOf(targetType);
35699
+ if (preferred >= 0) {
35700
+ score += 30 - preferred * 5;
35701
+ }
35702
+ if (targetType === "obj") {
35703
+ score += 10;
35704
+ }
35705
+ return score;
35706
+ }
35707
+ function normalizeType(type) {
35708
+ return (type ?? "").trim().toLowerCase() || "body";
35709
+ }
35710
+
35494
35711
  // pptx/core/core/runtime/master-save-helpers.ts
35495
35712
  function applyHeaderFooterFlagsToNode(root, flags) {
35496
35713
  if (!flags || Object.keys(flags).length === 0) {
@@ -53572,168 +53789,6 @@ function buildChartUserShapesDrawingXml(shapes) {
53572
53789
  return { "c:userShapes": root };
53573
53790
  }
53574
53791
 
53575
- // pptx/core/utils/placeholder-remap.ts
53576
- var TITLE_ROLE = /* @__PURE__ */ new Set(["title", "ctrtitle"]);
53577
- var CONTENT_ROLE = /* @__PURE__ */ new Set([
53578
- "body",
53579
- "obj",
53580
- "subtitle",
53581
- "pic",
53582
- "chart",
53583
- "tbl",
53584
- "media",
53585
- "clipart",
53586
- "dgm"
53587
- ]);
53588
- function placeholderContentRole(type) {
53589
- const declared = (type ?? "").trim().toLowerCase() || "body";
53590
- if (TITLE_ROLE.has(declared)) {
53591
- return "title";
53592
- }
53593
- if (CONTENT_ROLE.has(declared)) {
53594
- return "content";
53595
- }
53596
- return declared;
53597
- }
53598
- function preferredPlaceholderTypes(element) {
53599
- switch (element.type) {
53600
- case "image":
53601
- case "picture":
53602
- return ["pic", "obj", "body"];
53603
- case "chart":
53604
- return ["chart", "obj", "body"];
53605
- case "table":
53606
- return ["tbl", "obj", "body"];
53607
- case "media":
53608
- case "model3d":
53609
- return ["media", "pic", "obj", "body"];
53610
- case "smartArt":
53611
- return ["dgm", "obj", "body"];
53612
- case "text":
53613
- return ["body", "subtitle", "obj"];
53614
- default:
53615
- return ["obj", "body"];
53616
- }
53617
- }
53618
- function scorePlaceholderMatch(element, source, target) {
53619
- if (placeholderContentRole(source.type) !== placeholderContentRole(target.type)) {
53620
- return -1;
53621
- }
53622
- const sourceType = normalizeType(source.type);
53623
- const targetType = normalizeType(target.type);
53624
- let score = 1;
53625
- if (source.idx !== void 0 && source.idx === target.idx) {
53626
- score += 100;
53627
- }
53628
- if (sourceType === targetType) {
53629
- score += 50;
53630
- }
53631
- const preferred = preferredPlaceholderTypes(element).indexOf(targetType);
53632
- if (preferred >= 0) {
53633
- score += 30 - preferred * 5;
53634
- }
53635
- if (targetType === "obj") {
53636
- score += 10;
53637
- }
53638
- return score;
53639
- }
53640
- function normalizeType(type) {
53641
- return (type ?? "").trim().toLowerCase() || "body";
53642
- }
53643
-
53644
- // pptx/core/utils/placeholder-xml.ts
53645
- function findNonVisualProps(rawXml) {
53646
- for (const container of ["p:nvSpPr", "p:nvPicPr", "p:nvGraphicFramePr"]) {
53647
- const parent = rawXml[container];
53648
- const nvPr = parent?.["p:nvPr"];
53649
- if (nvPr) {
53650
- return nvPr;
53651
- }
53652
- }
53653
- return void 0;
53654
- }
53655
- function retargetPlaceholder(rawXml, target) {
53656
- const nvPr = findNonVisualProps(rawXml);
53657
- if (!nvPr) {
53658
- return;
53659
- }
53660
- const ph = nvPr["p:ph"] ?? {};
53661
- nvPr["p:ph"] = ph;
53662
- if (target.type) {
53663
- ph["@_type"] = target.type;
53664
- } else {
53665
- delete ph["@_type"];
53666
- }
53667
- if (target.idx !== void 0) {
53668
- ph["@_idx"] = target.idx;
53669
- } else {
53670
- delete ph["@_idx"];
53671
- }
53672
- }
53673
- function setRawXmlTransform(rawXml, xEmu, yEmu, cxEmu, cyEmu) {
53674
- const spPr = rawXml["p:spPr"];
53675
- if (!spPr) {
53676
- return;
53677
- }
53678
- const xfrm = spPr["a:xfrm"] ?? {};
53679
- spPr["a:xfrm"] = xfrm;
53680
- const off = xfrm["a:off"] ?? {};
53681
- xfrm["a:off"] = off;
53682
- off["@_x"] = String(xEmu);
53683
- off["@_y"] = String(yEmu);
53684
- const ext = xfrm["a:ext"] ?? {};
53685
- xfrm["a:ext"] = ext;
53686
- ext["@_cx"] = String(cxEmu);
53687
- ext["@_cy"] = String(cyEmu);
53688
- }
53689
- function createEmptyPlaceholderElement(target, xEmu, yEmu, cxEmu, cyEmu, uniqueId) {
53690
- if (cxEmu <= 0 || cyEmu <= 0) {
53691
- return null;
53692
- }
53693
- const phNode = {};
53694
- if (target.type) {
53695
- phNode["@_type"] = target.type;
53696
- }
53697
- if (target.idx !== void 0) {
53698
- phNode["@_idx"] = target.idx;
53699
- }
53700
- const rawXml = {
53701
- "p:nvSpPr": {
53702
- "p:cNvPr": {
53703
- "@_id": uniqueId,
53704
- "@_name": `Placeholder ${target.type || "content"}`
53705
- },
53706
- "p:cNvSpPr": {
53707
- "a:spLocks": { "@_noGrp": "1" }
53708
- },
53709
- "p:nvPr": {
53710
- "p:ph": phNode
53711
- }
53712
- },
53713
- "p:spPr": {
53714
- "a:xfrm": {
53715
- "a:off": { "@_x": String(xEmu), "@_y": String(yEmu) },
53716
- "a:ext": { "@_cx": String(cxEmu), "@_cy": String(cyEmu) }
53717
- }
53718
- },
53719
- "p:txBody": {
53720
- "a:bodyPr": {},
53721
- "a:lstStyle": {},
53722
- "a:p": { "a:endParaRPr": { "@_lang": "en-US" } }
53723
- }
53724
- };
53725
- return {
53726
- type: "text",
53727
- id: `ph-${target.type || "content"}-${target.idx ?? "0"}-${uniqueId}`,
53728
- x: Math.round(xEmu / EMU_PER_PX),
53729
- y: Math.round(yEmu / EMU_PER_PX),
53730
- width: Math.round(cxEmu / EMU_PER_PX),
53731
- height: Math.round(cyEmu / EMU_PER_PX),
53732
- text: "",
53733
- rawXml
53734
- };
53735
- }
53736
-
53737
53792
  // pptx/core/utils/text-fill-blip.ts
53738
53793
  function resolveTextFillBlip(blipFill, lookupTarget, resolveArchivePath, allowExternal) {
53739
53794
  const blip = blipFill["a:blip"];
@@ -73024,6 +73079,19 @@ var PptxHandlerRuntime54 = class _PptxHandlerRuntime extends PptxHandlerRuntime5
73024
73079
  return this.isStrictOoxml ? "strict" : "transitional";
73025
73080
  }
73026
73081
  async save(slides, options) {
73082
+ validateSlideGeometry(slides);
73083
+ const templates = [
73084
+ ...options?.slideMasters ?? [],
73085
+ ...options?.slideLayouts ?? [],
73086
+ ...options?.slideMasters?.flatMap((master) => master.layouts ?? []) ?? [],
73087
+ ...options?.notesMaster ? [options.notesMaster] : [],
73088
+ ...options?.handoutMaster ? [options.handoutMaster] : []
73089
+ ];
73090
+ for (const template of templates) {
73091
+ for (const element of template.elements ?? []) {
73092
+ validateElementGeometry(element, `Template (${template.path})`);
73093
+ }
73094
+ }
73027
73095
  if (options?.outputFormat === "ppt") {
73028
73096
  return this.saveAsLegacyPpt(
73029
73097
  slides,
@@ -73953,8 +74021,7 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
73953
74021
  return this.scanPlaceholderBuckets(spTree, (info) => info?.type === type);
73954
74022
  }
73955
74023
  /** The layout and master counterparts of a placeholder, unmerged. */
73956
- findPlaceholderContexts(slidePath, expected) {
73957
- const layoutPath = this.resolveLayoutPathForSlide(slidePath);
74024
+ findPlaceholderContexts(slidePath, expected, layoutPath = this.resolveLayoutPathForSlide(slidePath)) {
73958
74025
  if (!layoutPath) {
73959
74026
  return {};
73960
74027
  }
@@ -73966,10 +74033,11 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
73966
74033
  const master = this.findPlaceholderInShapeTree(masterSpTree, expected) ?? this.findSingletonPlaceholderInShapeTree(masterSpTree, expected);
73967
74034
  return { layout, master };
73968
74035
  }
73969
- findPlaceholderContext(slidePath, expected) {
74036
+ findPlaceholderContext(slidePath, expected, layoutPath) {
73970
74037
  const { layout: layoutContext, master: masterContext } = this.findPlaceholderContexts(
73971
74038
  slidePath,
73972
- expected
74039
+ expected,
74040
+ layoutPath
73973
74041
  );
73974
74042
  if (!layoutContext) {
73975
74043
  return masterContext;
@@ -73995,8 +74063,8 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
73995
74063
  * a master `p:sp`), so the layout keeps winning exactly as it does when
73996
74064
  * both are shapes.
73997
74065
  */
73998
- findPlaceholderNode(slidePath, expected) {
73999
- const { layout, master } = this.findPlaceholderContexts(slidePath, expected);
74066
+ findPlaceholderNode(slidePath, expected, layoutPath) {
74067
+ const { layout, master } = this.findPlaceholderContexts(slidePath, expected, layoutPath);
74000
74068
  const firstNode2 = (context) => context?.shape ?? context?.picture ?? context?.graphicFrame;
74001
74069
  const layoutNode = firstNode2(layout);
74002
74070
  const masterNode = firstNode2(master);
@@ -74037,8 +74105,7 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
74037
74105
  * reference. Checks the layout cache first, then the master cache, and
74038
74106
  * merges them so that layout values take priority over master values.
74039
74107
  */
74040
- lookupPlaceholderDefaults(slidePath, phInfo) {
74041
- const layoutPath = this.resolveLayoutPathForSlide(slidePath);
74108
+ lookupPlaceholderDefaults(slidePath, phInfo, layoutPath = this.resolveLayoutPathForSlide(slidePath)) {
74042
74109
  if (!layoutPath) {
74043
74110
  return void 0;
74044
74111
  }
@@ -74728,6 +74795,53 @@ var PptxHandlerRuntime61 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
74728
74795
  return null;
74729
74796
  }
74730
74797
  }
74798
+ /**
74799
+ * A text-bearing shape whose picture fill is inherited from its layout or
74800
+ * master placeholder (`a:blipFill` absent from its own `spPr`) gets
74801
+ * `fillMode: 'image'` from the merged properties but no image: the blip's
74802
+ * relationship id belongs to the part that authored it, not the slide.
74803
+ * Resolve it against the layout's, then the master's, relationships.
74804
+ */
74805
+ async resolveInheritedFillImage(element, shape, slidePath) {
74806
+ const style = element?.shapeStyle;
74807
+ if (!element || !style || style.fillMode !== "image" || style.fillImageUrl) {
74808
+ return;
74809
+ }
74810
+ const placeholderInfo = this.extractPlaceholderInfo(xmlPath(shape, "p:nvSpPr", "p:nvPr"));
74811
+ const inherited = placeholderInfo ? this.findPlaceholderContext(slidePath, placeholderInfo) : void 0;
74812
+ const effectiveSpPr = this.mergeXmlObjects(
74813
+ inherited?.shape?.["p:spPr"],
74814
+ xmlChild(shape, "p:spPr")
74815
+ );
74816
+ const blipFill = effectiveSpPr?.["a:blipFill"];
74817
+ const blip = blipFill?.["a:blip"];
74818
+ const relId = String(blip?.["@_r:embed"] ?? blip?.["@_r:link"] ?? "");
74819
+ if (!relId) {
74820
+ return;
74821
+ }
74822
+ const layoutPath = this.resolveLayoutPathForSlide(slidePath);
74823
+ const masterPath = layoutPath ? this.resolveMasterPathForLayout(layoutPath) : void 0;
74824
+ for (const partPath of [layoutPath, masterPath]) {
74825
+ if (!partPath || !this.slideRelsMap.get(partPath)?.has(relId)) {
74826
+ continue;
74827
+ }
74828
+ const fill = await resolveGroupFillImagePure(
74829
+ this,
74830
+ blipFill,
74831
+ partPath
74832
+ );
74833
+ if (fill) {
74834
+ const isUrl = /^(?:data:|blob:|https?:)/u.test(fill.fillImageUrl);
74835
+ const decoded = isUrl ? void 0 : await this.getImageData(fill.fillImageUrl);
74836
+ style.fillImageUrl = decoded ?? fill.fillImageUrl;
74837
+ style.fillImageMode = fill.fillImageMode;
74838
+ if (element.type === "text") {
74839
+ element.type = "shape";
74840
+ }
74841
+ }
74842
+ return;
74843
+ }
74844
+ }
74731
74845
  textVerticalAlignFromDrawingValue(value) {
74732
74846
  const normalized = String(value ?? "").trim().toLowerCase();
74733
74847
  if (normalized.length === 0) {
@@ -76124,14 +76238,14 @@ var PptxHandlerRuntime66 = class extends PptxHandlerRuntime65 {
76124
76238
 
76125
76239
  // pptx/core/core/runtime/PptxHandlerRuntimeShapeParsing.ts
76126
76240
  var PptxHandlerRuntime67 = class _PptxHandlerRuntime extends PptxHandlerRuntime66 {
76127
- parseShape(shape, id, slidePath) {
76241
+ parseShape(shape, id, slidePath, layoutPath) {
76128
76242
  try {
76129
76243
  const spPr = shape["p:spPr"];
76130
76244
  const slideRelationshipMap = slidePath ? this.slideRelsMap.get(slidePath) : void 0;
76131
76245
  const placeholderInfo = this.extractPlaceholderInfo(
76132
76246
  shape?.["p:nvSpPr"]?.["p:nvPr"]
76133
76247
  );
76134
- const inheritedPlaceholder = slidePath && placeholderInfo ? this.findPlaceholderContext(slidePath, placeholderInfo) : void 0;
76248
+ const inheritedPlaceholder = (slidePath || layoutPath) && placeholderInfo ? this.findPlaceholderContext(slidePath ?? "", placeholderInfo, layoutPath) : void 0;
76135
76249
  const inheritedSpPr = inheritedPlaceholder?.shape?.["p:spPr"] || inheritedPlaceholder?.picture?.["p:spPr"];
76136
76250
  const effectiveSpPr = spPr ? {
76137
76251
  ...spPr,
@@ -76257,7 +76371,7 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
76257
76371
  );
76258
76372
  const linkedTxbxId = bodyPropResult.linkedTxbxId;
76259
76373
  const linkedTxbxSeq = bodyPropResult.linkedTxbxSeq;
76260
- const phDefaults = slidePath && placeholderInfo ? this.lookupPlaceholderDefaults(slidePath, placeholderInfo) : void 0;
76374
+ const phDefaults = (slidePath || layoutPath) && placeholderInfo ? this.lookupPlaceholderDefaults(slidePath ?? "", placeholderInfo, layoutPath) : void 0;
76261
76375
  if (phDefaults) {
76262
76376
  this.applyPlaceholderBodyDefaults(textStyle, phDefaults);
76263
76377
  }
@@ -77113,7 +77227,9 @@ var PptxHandlerRuntime69 = class _PptxHandlerRuntime extends PptxHandlerRuntime6
77113
77227
  slidePath
77114
77228
  );
77115
77229
  }
77116
- return this.parseShape(node, `${idPrefix}shape-${indexInType}`, slidePath);
77230
+ const parsed = this.parseShape(node, `${idPrefix}shape-${indexInType}`, slidePath);
77231
+ await this.resolveInheritedFillImage(parsed, node, slidePath);
77232
+ return parsed;
77117
77233
  }
77118
77234
  case "p:pic":
77119
77235
  return this.parsePicture(node, `${idPrefix}pic-${indexInType}`, slidePath);
@@ -85226,8 +85342,175 @@ var PptxHandlerRuntime102 = class extends PptxHandlerRuntime101 {
85226
85342
  }
85227
85343
  };
85228
85344
 
85229
- // pptx/core/core/runtime/PptxHandlerRuntimeImplementation.ts
85345
+ // pptx/core/core/runtime/sdk-placeholder.ts
85346
+ var TEXT_PLACEHOLDER_TYPES = /* @__PURE__ */ new Set([
85347
+ "title",
85348
+ "ctrtitle",
85349
+ "subtitle",
85350
+ "body",
85351
+ "obj",
85352
+ "dt",
85353
+ "ftr",
85354
+ "hdr",
85355
+ "sldnum"
85356
+ ]);
85357
+ function selectTextPlaceholder(input, type, options, slots) {
85358
+ if (!TEXT_PLACEHOLDER_TYPES.has(type.toLowerCase())) {
85359
+ throw new Error(`Unsupported text placeholder type: ${type}`);
85360
+ }
85361
+ if (options.idx !== void 0 && (!Number.isInteger(options.idx) || options.idx < 0 || options.idx > 4294967295)) {
85362
+ throw new Error("Placeholder idx must be an unsigned 32-bit integer");
85363
+ }
85364
+ const source = {
85365
+ type: type.toLowerCase(),
85366
+ ...options.idx !== void 0 ? { idx: String(options.idx) } : {}
85367
+ };
85368
+ let best;
85369
+ let bestScore = 0;
85370
+ for (const slot of slots) {
85371
+ if (!TEXT_PLACEHOLDER_TYPES.has(slot.phInfo.type ?? "obj")) continue;
85372
+ if (source.idx !== void 0 && source.idx !== (slot.phInfo.idx ?? "0")) continue;
85373
+ const score = scorePlaceholderMatch(input, source, slot.phInfo);
85374
+ if (score > bestScore) {
85375
+ best = slot;
85376
+ bestScore = score;
85377
+ }
85378
+ }
85379
+ return best ? { type: canonicalPlaceholderType(best.phInfo.type ?? "obj"), idx: best.phInfo.idx } : { type: canonicalPlaceholderType(source.type), idx: source.idx };
85380
+ }
85381
+ function withoutFallbackLanguage(properties) {
85382
+ const { "@_lang": language, ...rest } = properties;
85383
+ if (language !== "en-US") return properties;
85384
+ const keys = Object.keys(rest);
85385
+ return keys.length === 0 || keys.length === 1 && rest["@_dirty"] === "0" ? void 0 : rest;
85386
+ }
85387
+ function stripFallbackLanguage(node, key2) {
85388
+ const properties = node[key2];
85389
+ if (!properties || typeof properties !== "object") return node;
85390
+ const next = withoutFallbackLanguage(properties);
85391
+ if (next === properties) return node;
85392
+ const result = {};
85393
+ for (const [name, value] of Object.entries(node)) {
85394
+ if (name !== key2) result[name] = value;
85395
+ else if (next) result[name] = next;
85396
+ }
85397
+ return result;
85398
+ }
85399
+ function withoutFallbackLanguages(paragraphs) {
85400
+ return paragraphs.map((paragraph) => {
85401
+ const next = { ...stripFallbackLanguage(paragraph, "a:endParaRPr") };
85402
+ for (const child16 of ["a:r", "a:br", "a:fld"]) {
85403
+ const nodes = next[child16];
85404
+ if (nodes === void 0) continue;
85405
+ next[child16] = Array.isArray(nodes) ? nodes.map((node) => stripFallbackLanguage(node, "a:rPr")) : stripFallbackLanguage(nodes, "a:rPr");
85406
+ }
85407
+ return next;
85408
+ });
85409
+ }
85410
+ function placeholderShape2(identity, paragraphs) {
85411
+ paragraphs = withoutFallbackLanguages(paragraphs);
85412
+ return {
85413
+ "p:nvSpPr": {
85414
+ "p:cNvPr": { "@_id": "2", "@_name": `Placeholder ${identity.type}` },
85415
+ "p:cNvSpPr": { "a:spLocks": { "@_noGrp": "1" } },
85416
+ "p:nvPr": {
85417
+ "p:ph": {
85418
+ "@_type": identity.type,
85419
+ ...identity.idx !== void 0 ? { "@_idx": identity.idx } : {}
85420
+ }
85421
+ }
85422
+ },
85423
+ "p:spPr": {},
85424
+ "p:txBody": { "a:bodyPr": {}, "a:lstStyle": {}, "a:p": paragraphs }
85425
+ };
85426
+ }
85427
+ function applyPlaceholderFrame(shape, inherited, options, emuPerPx, materializeFrame = false) {
85428
+ for (const key2 of ["x", "y", "width", "height"]) {
85429
+ if (options[key2] !== void 0 && !Number.isFinite(options[key2])) {
85430
+ throw new Error(`Invalid placeholder frame for ${key2}: expected a finite number`);
85431
+ }
85432
+ }
85433
+ const off = xmlPath(inherited, "p:spPr", "a:xfrm", "a:off");
85434
+ const ext = xmlPath(inherited, "p:spPr", "a:xfrm", "a:ext");
85435
+ const frame = {
85436
+ x: options.x ?? (off?.["@_x"] !== void 0 ? Number(off["@_x"]) / emuPerPx : void 0),
85437
+ y: options.y ?? (off?.["@_y"] !== void 0 ? Number(off["@_y"]) / emuPerPx : void 0),
85438
+ width: options.width ?? (ext?.["@_cx"] !== void 0 ? Number(ext["@_cx"]) / emuPerPx : void 0),
85439
+ height: options.height ?? (ext?.["@_cy"] !== void 0 ? Number(ext["@_cy"]) / emuPerPx : void 0)
85440
+ };
85441
+ for (const [key2, value] of Object.entries(frame)) {
85442
+ if (!Number.isFinite(value)) {
85443
+ throw new Error(
85444
+ `No matching placeholder frame for ${key2}; supply a complete explicit frame or choose a layout containing this slot`
85445
+ );
85446
+ }
85447
+ }
85448
+ if (materializeFrame || ["x", "y", "width", "height"].some((key2) => options[key2] !== void 0)) {
85449
+ setRawXmlTransform(
85450
+ shape,
85451
+ ...["x", "y", "width", "height"].map(
85452
+ (key2) => Math.round(frame[key2] * emuPerPx)
85453
+ )
85454
+ );
85455
+ }
85456
+ }
85457
+
85458
+ // pptx/core/core/runtime/PptxHandlerRuntimeSdkPlaceholders.ts
85230
85459
  var PptxHandlerRuntime103 = class _PptxHandlerRuntime extends PptxHandlerRuntime102 {
85460
+ createPlaceholderElement(layoutPath, input, type, options) {
85461
+ if (input.type !== "text") throw new Error("Placeholder input must be text");
85462
+ const layout = this.layoutXmlMap.get(layoutPath);
85463
+ if (!layout) throw new Error(`Unknown layout: ${layoutPath}`);
85464
+ const identity = selectTextPlaceholder(
85465
+ input,
85466
+ type,
85467
+ options,
85468
+ this.extractLayoutPlaceholders(layout, layoutPath)
85469
+ );
85470
+ const shape = placeholderShape2(
85471
+ identity,
85472
+ this.createParagraphsFromTextContent(input.text, void 0, input.textSegments)
85473
+ );
85474
+ const inherited = this.findPlaceholderNode(
85475
+ "",
85476
+ { type: identity.type.toLowerCase(), idx: identity.idx },
85477
+ layoutPath
85478
+ );
85479
+ const fallback = this.sdkMasterFrame(layoutPath, identity.type, identity.idx, inherited);
85480
+ applyPlaceholderFrame(
85481
+ shape,
85482
+ fallback ?? inherited,
85483
+ options,
85484
+ _PptxHandlerRuntime.EMU_PER_PX,
85485
+ fallback !== void 0
85486
+ );
85487
+ const element = this.parseShape(shape, input.id, void 0, layoutPath);
85488
+ if (!element) throw new Error("Unable to resolve placeholder content");
85489
+ if ((element.type === "text" || element.type === "shape") && !element.textStyle && element.textSegments?.[0]?.style) {
85490
+ element.textStyle = { ...element.textSegments[0].style };
85491
+ }
85492
+ return element;
85493
+ }
85494
+ sdkMasterFrame(layoutPath, type, idx, inherited) {
85495
+ if (!inherited) return void 0;
85496
+ if (xmlPath(inherited, "p:spPr", "a:xfrm", "a:off") && xmlPath(inherited, "p:spPr", "a:xfrm", "a:ext"))
85497
+ return void 0;
85498
+ const masterPath = this.resolveMasterPathForLayout(layoutPath);
85499
+ const tree = masterPath ? xmlPath(this.masterXmlMap.get(masterPath), "p:sldMaster", "p:cSld", "p:spTree") : void 0;
85500
+ const role = placeholderContentRole(type.toLowerCase());
85501
+ const candidates = this.ensureArray(tree?.["p:sp"]).filter((shape) => {
85502
+ const info = this.extractPlaceholderInfo(xmlPath(shape, "p:nvSpPr", "p:nvPr"));
85503
+ return info && placeholderContentRole(info.type) === role;
85504
+ });
85505
+ const master = candidates.find(
85506
+ (shape) => this.extractPlaceholderInfo(xmlPath(shape, "p:nvSpPr", "p:nvPr"))?.idx === idx
85507
+ ) ?? candidates[0];
85508
+ return master ? this.mergeXmlObjects(master, inherited) : void 0;
85509
+ }
85510
+ };
85511
+
85512
+ // pptx/core/core/runtime/PptxHandlerRuntimeImplementation.ts
85513
+ var PptxHandlerRuntime104 = class _PptxHandlerRuntime extends PptxHandlerRuntime103 {
85231
85514
  constructor(dependencyFactory = new PptxRuntimeDependencyFactory()) {
85232
85515
  super();
85233
85516
  this.dependencyFactory = dependencyFactory;
@@ -85365,11 +85648,11 @@ var PptxHandlerRuntime103 = class _PptxHandlerRuntime extends PptxHandlerRuntime
85365
85648
  };
85366
85649
 
85367
85650
  // pptx/core/core/PptxHandlerRuntime.ts
85368
- var PptxHandlerRuntime104 = class extends PptxHandlerRuntime103 {
85651
+ var PptxHandlerRuntime105 = class extends PptxHandlerRuntime104 {
85369
85652
  };
85370
85653
 
85371
85654
  // pptx/core/core/PptxHandlerRuntimeFactory.ts
85372
- var createDefaultPptxHandlerRuntime = () => new PptxHandlerRuntime104();
85655
+ var createDefaultPptxHandlerRuntime = () => new PptxHandlerRuntime105();
85373
85656
 
85374
85657
  // pptx/core/ppt/current-user.ts
85375
85658
  var EncryptedPptError = class extends Error {
@@ -88175,6 +88458,13 @@ var PptxHandlerCore = class {
88175
88458
  getLayoutOptions() {
88176
88459
  return this.runtime.getLayoutOptions();
88177
88460
  }
88461
+ /** Resolve a text placeholder in this loaded deck, preserving layout inheritance. */
88462
+ createPlaceholderElement(layoutPath, input, type, options = {}) {
88463
+ if (!this.runtime.createPlaceholderElement) {
88464
+ throw new Error("This runtime does not support creating layout placeholders");
88465
+ }
88466
+ return this.runtime.createPlaceholderElement(layoutPath, input, type, options);
88467
+ }
88178
88468
  /**
88179
88469
  * Build the artwork thumbnails backing the New Slide / Layout galleries.
88180
88470
  *
@@ -89488,13 +89778,14 @@ function createFreeformElement(pathData, options) {
89488
89778
 
89489
89779
  // pptx/core/builders/sdk/SlideBuilder.ts
89490
89780
  var SlideBuilder = class {
89491
- slide;
89492
89781
  /**
89493
89782
  * @param slideNumber - 1-based slide number.
89494
89783
  * @param layoutPath - Optional layout archive path.
89495
89784
  * @param layoutName - Optional layout display name.
89785
+ * @param handler - Loaded deck context for placeholder geometry and text styles.
89496
89786
  */
89497
- constructor(slideNumber, layoutPath, layoutName) {
89787
+ constructor(slideNumber, layoutPath, layoutName, handler) {
89788
+ this.handler = handler;
89498
89789
  this.slide = {
89499
89790
  id: `slide${slideNumber}`,
89500
89791
  rId: `rId${slideNumber + 1}`,
@@ -89504,11 +89795,52 @@ var SlideBuilder = class {
89504
89795
  layoutName: layoutName ?? "Title Slide"
89505
89796
  };
89506
89797
  }
89798
+ handler;
89799
+ slide;
89507
89800
  /** Add a text box to the slide. */
89508
89801
  addText(text, options) {
89509
89802
  this.slide.elements.push(createTextElement(text, options));
89510
89803
  return this;
89511
89804
  }
89805
+ /**
89806
+ * Fill a layout placeholder, inheriting its frame and text styles.
89807
+ *
89808
+ * Unlike addText, this writes a real p:ph binding, not a free text box.
89809
+ * Use idx to select repeated slots (for example, Two Content's 1 and 2).
89810
+ * Explicit frame fields override the layout; all other fields inherit.
89811
+ * A standalone builder requires the fourth constructor argument (a loaded
89812
+ * handler), even with an explicit frame, so text styles resolve consistently.
89813
+ * Missing slots without a complete frame throw instead of creating a text box.
89814
+ * Master frames requiring compatible-role fallback are materialized locally
89815
+ * for new content only, keeping existing-deck loading unchanged.
89816
+ *
89817
+ * @example
89818
+ * ```ts
89819
+ * createSlide('Title Slide')
89820
+ * .addPlaceholder('ctrTitle', 'Quarterly review')
89821
+ * .addPlaceholder('subTitle', 'October 2026');
89822
+ * createSlide('Two Content').addPlaceholder('body', 'Right column', { idx: 2 });
89823
+ * ```
89824
+ */
89825
+ addPlaceholder(type, text, options = {}) {
89826
+ const input = createTextElement(text);
89827
+ const context = `Slide ${this.slide.slideNumber} (${this.slide.id}), placeholder ${type} idx=${options.idx ?? "auto"}, layout ${this.slide.layoutName} (${this.slide.layoutPath})`;
89828
+ try {
89829
+ if (!this.handler) {
89830
+ throw new Error(
89831
+ "addPlaceholder requires a loaded handler as the fourth SlideBuilder constructor argument"
89832
+ );
89833
+ }
89834
+ this.slide.elements.push(
89835
+ this.handler.createPlaceholderElement(this.slide.layoutPath, input, type, options)
89836
+ );
89837
+ } catch (error) {
89838
+ throw new Error(`${context}: ${error instanceof Error ? error.message : String(error)}`, {
89839
+ cause: error
89840
+ });
89841
+ }
89842
+ return this;
89843
+ }
89512
89844
  /** Add a shape to the slide. */
89513
89845
  addShape(shapeType, options) {
89514
89846
  this.slide.elements.push(createShapeElement(shapeType, options));
@@ -89747,6 +90079,125 @@ var SlideBuilder = class {
89747
90079
  }
89748
90080
  };
89749
90081
 
90082
+ // pptx/core/builders/sdk/layout-operations.ts
90083
+ var EMU_PER_PIXEL4 = 9525;
90084
+ function pxToEmu(px) {
90085
+ return Math.round(px * EMU_PER_PIXEL4);
90086
+ }
90087
+ function placeholderSpXml(ph, shapeId) {
90088
+ const name = ph.name ?? `${ph.type.charAt(0).toUpperCase() + ph.type.slice(1)} Placeholder ${shapeId - 1}`;
90089
+ const x = pxToEmu(ph.x);
90090
+ const y = pxToEmu(ph.y);
90091
+ const cx = pxToEmu(ph.width);
90092
+ const cy = pxToEmu(ph.height);
90093
+ const idxAttr = ph.idx !== void 0 ? ` idx="${Math.max(0, Math.round(ph.idx))}"` : "";
90094
+ return ` <p:sp>
90095
+ <p:nvSpPr>
90096
+ <p:cNvPr id="${shapeId}" name="${escAttr(name)}"/>
90097
+ <p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr>
90098
+ <p:nvPr><p:ph type="${escAttr(ph.type)}"${idxAttr}/></p:nvPr>
90099
+ </p:nvSpPr>
90100
+ <p:spPr>
90101
+ <a:xfrm><a:off x="${x}" y="${y}"/><a:ext cx="${cx}" cy="${cy}"/></a:xfrm>
90102
+ </p:spPr>
90103
+ <p:txBody>
90104
+ <a:bodyPr/>
90105
+ <a:lstStyle/>
90106
+ <a:p><a:endParaRPr lang="en-US"/></a:p>
90107
+ </p:txBody>
90108
+ </p:sp>`;
90109
+ }
90110
+ function normalizeSrgbHex(color2) {
90111
+ if (!color2) {
90112
+ return void 0;
90113
+ }
90114
+ const raw = color2.trim().replace(/^#/, "").toUpperCase();
90115
+ if (/^[0-9A-F]{6}$/.test(raw)) {
90116
+ return raw;
90117
+ }
90118
+ if (/^[0-9A-F]{3}$/.test(raw)) {
90119
+ return raw.replace(/./g, (ch) => ch + ch);
90120
+ }
90121
+ return void 0;
90122
+ }
90123
+ function generateLayoutXml(definition) {
90124
+ const layoutType = definition.type ?? "obj";
90125
+ const placeholders = definition.placeholders ?? [];
90126
+ const phShapes = placeholders.map((ph, i) => placeholderSpXml(ph, i + 2)).join("\n");
90127
+ let bgXml = "";
90128
+ const hex3 = normalizeSrgbHex(definition.backgroundColor);
90129
+ if (hex3) {
90130
+ bgXml = ` <p:bg><p:bgPr><a:solidFill><a:srgbClr val="${hex3}"/></a:solidFill><a:effectLst/></p:bgPr></p:bg>
90131
+ `;
90132
+ }
90133
+ return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
90134
+ <p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
90135
+ xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
90136
+ xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"
90137
+ type="${escAttr(layoutType)}" preserve="1">
90138
+ <p:cSld name="${escAttr(definition.name)}">
90139
+ ${bgXml} <p:spTree>
90140
+ <p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
90141
+ <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>
90142
+ ${phShapes}
90143
+ </p:spTree>
90144
+ </p:cSld>
90145
+ <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>
90146
+ </p:sldLayout>`;
90147
+ }
90148
+
90149
+ // pptx/core/builders/sdk/standard-layout-placeholders.ts
90150
+ function standardLayoutPlaceholders(type, width, height) {
90151
+ if (type === "blank") return [];
90152
+ const box = (type2, idx, x, y, w, h) => ({
90153
+ type: type2,
90154
+ idx,
90155
+ x: x * width,
90156
+ y: y * height,
90157
+ width: w * width,
90158
+ height: h * height
90159
+ });
90160
+ const title = box("title", 0, 0.05, 0.04, 0.9, 0.15);
90161
+ const content2 = box("obj", 1, 0.05, 0.23, 0.9, 0.64);
90162
+ let slots;
90163
+ switch (type) {
90164
+ case "title":
90165
+ slots = [
90166
+ box("ctrTitle", 0, 0.08, 0.24, 0.84, 0.22),
90167
+ box("subTitle", 1, 0.12, 0.49, 0.76, 0.2)
90168
+ ];
90169
+ break;
90170
+ case "secHead":
90171
+ slots = [box("title", 0, 0.05, 0.37, 0.9, 0.2), box("body", 1, 0.05, 0.6, 0.9, 0.23)];
90172
+ break;
90173
+ case "twoObj":
90174
+ case "twoTxTwoObj":
90175
+ slots = [title, box("obj", 1, 0.05, 0.27, 0.43, 0.6), box("obj", 2, 0.52, 0.27, 0.43, 0.6)];
90176
+ if (type === "twoTxTwoObj")
90177
+ slots.push(box("body", 3, 0.05, 0.2, 0.43, 0.07), box("body", 4, 0.52, 0.2, 0.43, 0.07));
90178
+ break;
90179
+ case "titleOnly":
90180
+ slots = [title];
90181
+ break;
90182
+ case "objTx":
90183
+ case "picTx":
90184
+ slots = [
90185
+ title,
90186
+ box(type === "picTx" ? "pic" : "obj", 1, 0.36, 0.23, 0.59, 0.64),
90187
+ box("body", 2, 0.05, 0.23, 0.27, 0.64)
90188
+ ];
90189
+ break;
90190
+ default:
90191
+ slots = [title, content2];
90192
+ }
90193
+ return [
90194
+ ...slots,
90195
+ box("dt", 10, 0.05, 0.92, 0.25, 0.04),
90196
+ box("ftr", 11, 0.33, 0.92, 0.34, 0.04),
90197
+ box("sldNum", 12, 0.75, 0.92, 0.2, 0.04)
90198
+ ];
90199
+ }
90200
+
89750
90201
  // pptx/core/builders/sdk/PresentationBuilder.ts
89751
90202
  var DEFAULT_WIDTH = 12192e3;
89752
90203
  var DEFAULT_HEIGHT = 6858e3;
@@ -89766,7 +90217,7 @@ var DEFAULT_COLORS2 = {
89766
90217
  };
89767
90218
  var DEFAULT_MAJOR_FONT = "Calibri Light";
89768
90219
  var DEFAULT_MINOR_FONT = "Calibri";
89769
- function normalizeSrgbHex(color2) {
90220
+ function normalizeSrgbHex2(color2) {
89770
90221
  if (!color2) {
89771
90222
  return void 0;
89772
90223
  }
@@ -89782,7 +90233,7 @@ function normalizeSrgbHex(color2) {
89782
90233
  function resolveThemeColors(overrides) {
89783
90234
  const resolved = {};
89784
90235
  for (const [key2, fallback] of Object.entries(DEFAULT_COLORS2)) {
89785
- resolved[key2] = normalizeSrgbHex(overrides?.[key2]) ?? normalizeSrgbHex(fallback) ?? "000000";
90236
+ resolved[key2] = normalizeSrgbHex2(overrides?.[key2]) ?? normalizeSrgbHex2(fallback) ?? "000000";
89786
90237
  }
89787
90238
  return resolved;
89788
90239
  }
@@ -89939,21 +90390,6 @@ ${layoutRels}
89939
90390
  <Relationship Id="rId${layoutCount + 1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="../theme/theme1.xml"/>
89940
90391
  </Relationships>`;
89941
90392
  }
89942
- function slideLayoutXml2(name, layoutType) {
89943
- return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
89944
- <p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
89945
- xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
89946
- xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"
89947
- type="${escAttr(layoutType)}" preserve="1">
89948
- <p:cSld name="${escAttr(name)}">
89949
- <p:spTree>
89950
- <p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
89951
- <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>
89952
- </p:spTree>
89953
- </p:cSld>
89954
- <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>
89955
- </p:sldLayout>`;
89956
- }
89957
90393
  function slideLayoutRelsXml() {
89958
90394
  return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
89959
90395
  <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
@@ -90102,7 +90538,14 @@ async function buildBlankPresentationArchive(options) {
90102
90538
  zip.file("ppt/slideMasters/_rels/slideMaster1.xml.rels", slideMasterRelsXml(layoutCount));
90103
90539
  for (let i = 0; i < layoutCount; i++) {
90104
90540
  const layout = STANDARD_LAYOUTS[i];
90105
- zip.file(`ppt/slideLayouts/slideLayout${i + 1}.xml`, slideLayoutXml2(layout.name, layout.type));
90541
+ zip.file(
90542
+ `ppt/slideLayouts/slideLayout${i + 1}.xml`,
90543
+ generateLayoutXml({
90544
+ name: layout.name,
90545
+ type: layout.type,
90546
+ placeholders: standardLayoutPlaceholders(layout.type, width / 9525, height / 9525)
90547
+ })
90548
+ );
90106
90549
  zip.file(`ppt/slideLayouts/_rels/slideLayout${i + 1}.xml.rels`, slideLayoutRelsXml());
90107
90550
  }
90108
90551
  for (let i = 0; i < initialSlideCount; i++) {
@@ -90139,7 +90582,7 @@ var PresentationBuilder = class {
90139
90582
  const layoutIdx = STANDARD_LAYOUTS.findIndex((l) => l.name === layoutName) + 1 || 7;
90140
90583
  const layoutPath = `ppt/slideLayouts/slideLayout${layoutIdx}.xml`;
90141
90584
  const resolvedName = layoutName ?? STANDARD_LAYOUTS[layoutIdx - 1]?.name ?? "Blank";
90142
- return new SlideBuilder(slideNum, layoutPath, resolvedName);
90585
+ return new SlideBuilder(slideNum, layoutPath, resolvedName, handler);
90143
90586
  };
90144
90587
  return { handler, data, createSlide };
90145
90588
  }