ooxml-core 1.8.4 → 1.9.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 (306) hide show
  1. package/dist/PptxHandler-AT7FVG5Q.mjs +2 -0
  2. package/dist/{PptxHandler-BL4B7CZO.mjs → PptxHandler-EX4WBIQQ.mjs} +2 -2
  3. package/dist/PptxHandler-VFSCECPL.cjs +11 -0
  4. package/dist/automation/index.cjs +6652 -4002
  5. package/dist/automation/index.mjs +6652 -4002
  6. package/dist/chunk-AT66SA5M.cjs +44423 -0
  7. package/dist/{chunk-TTPZITQN.mjs → chunk-FIELY5PI.mjs} +1 -1
  8. package/dist/{chunk-ZAP5WLEN.mjs → chunk-IGOA57LE.mjs} +1 -1
  9. package/dist/chunk-LCS3J3QI.mjs +87604 -0
  10. package/dist/{chunk-NIHPA63A.mjs → chunk-M76PHYRR.mjs} +54 -37
  11. package/dist/chunk-OB277ZGE.mjs +44107 -0
  12. package/dist/{chunk-GAGSCAR3.mjs → chunk-OXHMZS7B.mjs} +552 -178
  13. package/dist/chunk-SWF7KVL5.cjs +87610 -0
  14. package/dist/{chunk-Z7IQR4S4.mjs → chunk-WSO4T2LJ.mjs} +246 -21
  15. package/dist/docx/block-parser.d.ts.map +1 -1
  16. package/dist/docx/cell-blocks.d.ts +4 -0
  17. package/dist/docx/cell-blocks.d.ts.map +1 -0
  18. package/dist/docx/document-paragraphs.d.ts.map +1 -1
  19. package/dist/docx/document-parts.d.ts +2 -0
  20. package/dist/docx/document-parts.d.ts.map +1 -1
  21. package/dist/docx/embedded.cjs +189 -20
  22. package/dist/docx/embedded.mjs +189 -20
  23. package/dist/docx/index.cjs +219 -24
  24. package/dist/docx/index.mjs +219 -24
  25. package/dist/docx/layout/adapt-table.d.ts.map +1 -1
  26. package/dist/docx/layout/adapter.d.ts.map +1 -1
  27. package/dist/docx/layout/flow-paragraph.d.ts +5 -0
  28. package/dist/docx/layout/flow-paragraph.d.ts.map +1 -1
  29. package/dist/docx/layout/flow-table.d.ts +2 -1
  30. package/dist/docx/layout/flow-table.d.ts.map +1 -1
  31. package/dist/docx/layout/footnote-columns.d.ts +22 -0
  32. package/dist/docx/layout/footnote-columns.d.ts.map +1 -0
  33. package/dist/docx/layout/footnote-flow.d.ts +27 -0
  34. package/dist/docx/layout/footnote-flow.d.ts.map +1 -0
  35. package/dist/docx/layout/footnote-split.d.ts +7 -0
  36. package/dist/docx/layout/footnote-split.d.ts.map +1 -0
  37. package/dist/docx/layout/index.cjs +1099 -92
  38. package/dist/docx/layout/index.mjs +1099 -92
  39. package/dist/docx/layout/input.d.ts +17 -1
  40. package/dist/docx/layout/input.d.ts.map +1 -1
  41. package/dist/docx/layout/legacy-footnote-flow.d.ts +18 -0
  42. package/dist/docx/layout/legacy-footnote-flow.d.ts.map +1 -0
  43. package/dist/docx/layout/line-metrics.d.ts.map +1 -1
  44. package/dist/docx/layout/page-cursor.d.ts +13 -8
  45. package/dist/docx/layout/page-cursor.d.ts.map +1 -1
  46. package/dist/docx/layout/page-flow.d.ts.map +1 -1
  47. package/dist/docx/layout/paragraph-layout.d.ts.map +1 -1
  48. package/dist/docx/layout/paragraph-tokens.d.ts +2 -0
  49. package/dist/docx/layout/paragraph-tokens.d.ts.map +1 -1
  50. package/dist/docx/layout/reference-footnotes.d.ts +7 -0
  51. package/dist/docx/layout/reference-footnotes.d.ts.map +1 -0
  52. package/dist/docx/layout/result.d.ts +31 -0
  53. package/dist/docx/layout/result.d.ts.map +1 -1
  54. package/dist/docx/layout/section-flow.d.ts +2 -0
  55. package/dist/docx/layout/section-flow.d.ts.map +1 -1
  56. package/dist/docx/layout/table-cell-layout.d.ts +11 -0
  57. package/dist/docx/layout/table-cell-layout.d.ts.map +1 -0
  58. package/dist/docx/layout/table-footnotes.d.ts +27 -0
  59. package/dist/docx/layout/table-footnotes.d.ts.map +1 -0
  60. package/dist/docx/layout/table-layout.d.ts +10 -4
  61. package/dist/docx/layout/table-layout.d.ts.map +1 -1
  62. package/dist/docx/load/index.cjs +194 -25
  63. package/dist/docx/load/index.mjs +194 -25
  64. package/dist/docx/model-run.d.ts +2 -0
  65. package/dist/docx/model-run.d.ts.map +1 -1
  66. package/dist/docx/model.d.ts +7 -0
  67. package/dist/docx/model.d.ts.map +1 -1
  68. package/dist/docx/notes.d.ts +5 -0
  69. package/dist/docx/notes.d.ts.map +1 -1
  70. package/dist/docx/parse-table.d.ts.map +1 -1
  71. package/dist/docx/parse.d.ts.map +1 -1
  72. package/dist/docx/save.d.ts.map +1 -1
  73. package/dist/docx/section-model.d.ts +2 -0
  74. package/dist/docx/section-model.d.ts.map +1 -1
  75. package/dist/docx/sections.d.ts.map +1 -1
  76. package/dist/docx/settings.d.ts +2 -0
  77. package/dist/docx/settings.d.ts.map +1 -1
  78. package/dist/docx/table-model.d.ts +3 -1
  79. package/dist/docx/table-model.d.ts.map +1 -1
  80. package/dist/docx/ui/index.cjs +55 -0
  81. package/dist/docx/ui/index.d.ts +1 -0
  82. package/dist/docx/ui/index.d.ts.map +1 -1
  83. package/dist/docx/ui/index.mjs +55 -1
  84. package/dist/docx/ui/table-structure-guard.d.ts +4 -0
  85. package/dist/docx/ui/table-structure-guard.d.ts.map +1 -0
  86. package/dist/docx/write-footnote-columns.d.ts +3 -0
  87. package/dist/docx/write-footnote-columns.d.ts.map +1 -0
  88. package/dist/docx/write-notes.d.ts.map +1 -1
  89. package/dist/docx/write-run.d.ts.map +1 -1
  90. package/dist/docx/write-sections.d.ts.map +1 -1
  91. package/dist/index.cjs +8 -5
  92. package/dist/index.mjs +8 -5
  93. package/dist/opc/clone-part-graph.d.ts +4 -0
  94. package/dist/opc/clone-part-graph.d.ts.map +1 -1
  95. package/dist/opc/index.cjs +8 -5
  96. package/dist/opc/index.mjs +8 -5
  97. package/dist/pptx/automation/index.cjs +621 -207
  98. package/dist/pptx/automation/index.d.ts +3 -3
  99. package/dist/pptx/automation/index.mjs +5 -5
  100. package/dist/pptx/chunks/{index-Cn-GzYGp.d.ts → index-B4cnSPNz.d.ts} +33 -4
  101. package/dist/pptx/chunks/index-B4cnSPNz.d.ts.map +1 -0
  102. package/dist/pptx/chunks/{index-CKIUurnd.d.ts → index-BZh-IMkN.d.ts} +14 -9
  103. package/dist/pptx/chunks/{index-CKIUurnd.d.ts.map → index-BZh-IMkN.d.ts.map} +1 -1
  104. package/dist/pptx/chunks/{text-operations-BHfAm5K9.d.ts → text-operations-BLodkuXE.d.ts} +29 -12
  105. package/dist/pptx/chunks/text-operations-BLodkuXE.d.ts.map +1 -0
  106. package/dist/pptx/cli/index.cjs +622 -213
  107. package/dist/pptx/cli/index.d.ts +1 -1
  108. package/dist/pptx/cli/index.mjs +4 -4
  109. package/dist/pptx/converter/index.cjs +53 -36
  110. package/dist/pptx/converter/index.d.ts +1 -1
  111. package/dist/pptx/converter/index.mjs +2 -2
  112. package/dist/pptx/editor/render/find-replace.cjs +416 -45
  113. package/dist/pptx/editor/render/find-replace.d.ts +35 -4
  114. package/dist/pptx/editor/render/find-replace.d.ts.map +1 -1
  115. package/dist/pptx/editor/render/find-replace.mjs +416 -46
  116. package/dist/pptx/editor/render/slide-operations.cjs +87 -0
  117. package/dist/pptx/editor/render/slide-operations.d.ts +17 -1
  118. package/dist/pptx/editor/render/slide-operations.d.ts.map +1 -1
  119. package/dist/pptx/editor/render/slide-operations.mjs +83 -1
  120. package/dist/pptx/editor/render/slide-search.cjs +6 -10
  121. package/dist/pptx/editor/render/slide-search.d.ts +1 -1
  122. package/dist/pptx/editor/render/slide-search.mjs +6 -10
  123. package/dist/pptx/editor/render/template-editing.d.ts +1 -1
  124. package/dist/pptx/editor/render/template-editing.d.ts.map +1 -1
  125. package/dist/pptx/index.cjs +889 -237
  126. package/dist/pptx/index.d.ts +4 -4
  127. package/dist/pptx/index.mjs +5 -5
  128. package/dist/teams/index.cjs +593 -34
  129. package/dist/teams/index.mjs +593 -34
  130. package/dist/visio/accessibility.d.ts +10 -0
  131. package/dist/visio/accessibility.d.ts.map +1 -0
  132. package/dist/visio/cell-formula.d.ts +2 -0
  133. package/dist/visio/cell-formula.d.ts.map +1 -1
  134. package/dist/visio/connector-curve-aligned.d.ts +5 -0
  135. package/dist/visio/connector-curve-aligned.d.ts.map +1 -0
  136. package/dist/visio/connector-curve-spans.d.ts +14 -0
  137. package/dist/visio/connector-curve-spans.d.ts.map +1 -0
  138. package/dist/visio/connector-jumps.d.ts +5 -0
  139. package/dist/visio/connector-jumps.d.ts.map +1 -0
  140. package/dist/visio/connector-route-walk.d.ts +2 -1
  141. package/dist/visio/connector-route-walk.d.ts.map +1 -1
  142. package/dist/visio/edit-alt-text-scope.d.ts +5 -0
  143. package/dist/visio/edit-alt-text-scope.d.ts.map +1 -0
  144. package/dist/visio/edit-alt-text.d.ts +3 -0
  145. package/dist/visio/edit-alt-text.d.ts.map +1 -0
  146. package/dist/visio/edit-commands.d.ts +7 -2
  147. package/dist/visio/edit-commands.d.ts.map +1 -1
  148. package/dist/visio/edit-formatting-commands.d.ts +5 -0
  149. package/dist/visio/edit-formatting-commands.d.ts.map +1 -1
  150. package/dist/visio/edit-formatting-paint.d.ts.map +1 -1
  151. package/dist/visio/edit-formatting-scope.d.ts.map +1 -1
  152. package/dist/visio/edit-line-jump-cache.d.ts +4 -0
  153. package/dist/visio/edit-line-jump-cache.d.ts.map +1 -0
  154. package/dist/visio/edit-master-index.d.ts.map +1 -1
  155. package/dist/visio/edit-metadata-commands.d.ts +10 -2
  156. package/dist/visio/edit-metadata-commands.d.ts.map +1 -1
  157. package/dist/visio/edit-metadata.d.ts +3 -1
  158. package/dist/visio/edit-metadata.d.ts.map +1 -1
  159. package/dist/visio/edit-page-alt-text.d.ts +4 -0
  160. package/dist/visio/edit-page-alt-text.d.ts.map +1 -0
  161. package/dist/visio/edit-page-layout.d.ts.map +1 -1
  162. package/dist/visio/edit-page-rename.d.ts.map +1 -1
  163. package/dist/visio/edit-page-setup-commands.d.ts +7 -1
  164. package/dist/visio/edit-page-setup-commands.d.ts.map +1 -1
  165. package/dist/visio/edit-page-size.d.ts.map +1 -1
  166. package/dist/visio/edit-pages.d.ts.map +1 -1
  167. package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
  168. package/dist/visio/edit-scope.d.ts.map +1 -1
  169. package/dist/visio/edit-shape-create.d.ts.map +1 -1
  170. package/dist/visio/edit-stencil-connector-write.d.ts.map +1 -1
  171. package/dist/visio/edit-style-admission.d.ts.map +1 -1
  172. package/dist/visio/edit-text.d.ts.map +1 -1
  173. package/dist/visio/edit.d.ts +1 -1
  174. package/dist/visio/edit.d.ts.map +1 -1
  175. package/dist/visio/index.cjs +1091 -233
  176. package/dist/visio/index.d.ts +2 -1
  177. package/dist/visio/index.d.ts.map +1 -1
  178. package/dist/visio/index.mjs +1091 -234
  179. package/dist/visio/line-jumps.d.ts +1 -5
  180. package/dist/visio/line-jumps.d.ts.map +1 -1
  181. package/dist/visio/model.d.ts +13 -0
  182. package/dist/visio/model.d.ts.map +1 -1
  183. package/dist/visio/page-layout.d.ts +11 -2
  184. package/dist/visio/page-layout.d.ts.map +1 -1
  185. package/dist/visio/parser.d.ts.map +1 -1
  186. package/dist/visio/shape-metadata.d.ts +6 -0
  187. package/dist/visio/shape-metadata.d.ts.map +1 -1
  188. package/dist/visio/shapes.d.ts.map +1 -1
  189. package/dist/visio/text-field-case.d.ts +2 -0
  190. package/dist/visio/text-field-case.d.ts.map +1 -0
  191. package/dist/visio/text-field-display.d.ts.map +1 -1
  192. package/dist/visio/text-field-numeric.d.ts +4 -0
  193. package/dist/visio/text-field-numeric.d.ts.map +1 -0
  194. package/dist/visio/ui/connector-preview.d.ts +1 -1
  195. package/dist/visio/ui/connector-preview.d.ts.map +1 -1
  196. package/dist/visio/ui/data-graphic-rules.d.ts +2 -0
  197. package/dist/visio/ui/data-graphic-rules.d.ts.map +1 -1
  198. package/dist/visio/ui/data-graphics.d.ts +3 -2
  199. package/dist/visio/ui/data-graphics.d.ts.map +1 -1
  200. package/dist/visio/ui/edit-commands.d.ts.map +1 -1
  201. package/dist/visio/ui/index.cjs +16898 -15855
  202. package/dist/visio/ui/index.mjs +16898 -15856
  203. package/dist/visio/ui/scene-details.d.ts.map +1 -1
  204. package/dist/visio/ui/scene-validation.d.ts.map +1 -1
  205. package/dist/visio/ui/snapshot-scene.d.ts +2 -1
  206. package/dist/visio/ui/snapshot-scene.d.ts.map +1 -1
  207. package/dist/visio/xml-attribute-whitespace.d.ts +5 -0
  208. package/dist/visio/xml-attribute-whitespace.d.ts.map +1 -0
  209. package/dist/xlsx/edit/index.d.ts +1 -0
  210. package/dist/xlsx/edit/index.d.ts.map +1 -1
  211. package/dist/xlsx/edit/insert-guard.d.ts.map +1 -1
  212. package/dist/xlsx/edit/merge.d.ts.map +1 -1
  213. package/dist/xlsx/edit/page-breaks.d.ts +5 -0
  214. package/dist/xlsx/edit/page-breaks.d.ts.map +1 -0
  215. package/dist/xlsx/edit/pivots.d.ts +8 -0
  216. package/dist/xlsx/edit/pivots.d.ts.map +1 -0
  217. package/dist/xlsx/edit/print-titles.d.ts +7 -0
  218. package/dist/xlsx/edit/print-titles.d.ts.map +1 -0
  219. package/dist/xlsx/edit/session.d.ts.map +1 -1
  220. package/dist/xlsx/edit/sheets.d.ts.map +1 -1
  221. package/dist/xlsx/edit/shift-formulas.d.ts.map +1 -1
  222. package/dist/xlsx/edit/shift-sheet.d.ts.map +1 -1
  223. package/dist/xlsx/edit/sparkline-ranges.d.ts +11 -0
  224. package/dist/xlsx/edit/sparkline-ranges.d.ts.map +1 -0
  225. package/dist/xlsx/edit/sparkline-xml.d.ts +13 -0
  226. package/dist/xlsx/edit/sparkline-xml.d.ts.map +1 -0
  227. package/dist/xlsx/edit/sparklines.d.ts +16 -0
  228. package/dist/xlsx/edit/sparklines.d.ts.map +1 -0
  229. package/dist/xlsx/edit/table-edits.d.ts.map +1 -1
  230. package/dist/xlsx/edit/tables.d.ts.map +1 -1
  231. package/dist/xlsx/edit/types.d.ts +22 -1
  232. package/dist/xlsx/edit/types.d.ts.map +1 -1
  233. package/dist/xlsx/formula/functions/text-regex.d.ts.map +1 -1
  234. package/dist/xlsx/index.cjs +3159 -1164
  235. package/dist/xlsx/index.d.ts +1 -0
  236. package/dist/xlsx/index.d.ts.map +1 -1
  237. package/dist/xlsx/index.mjs +3140 -1165
  238. package/dist/xlsx/layout/cell-view.d.ts +2 -0
  239. package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
  240. package/dist/xlsx/layout/header-footer.d.ts +58 -0
  241. package/dist/xlsx/layout/header-footer.d.ts.map +1 -0
  242. package/dist/xlsx/layout/index.d.ts +5 -0
  243. package/dist/xlsx/layout/index.d.ts.map +1 -1
  244. package/dist/xlsx/layout/print-breaks.d.ts +11 -0
  245. package/dist/xlsx/layout/print-breaks.d.ts.map +1 -0
  246. package/dist/xlsx/layout/print-layout.d.ts +34 -0
  247. package/dist/xlsx/layout/print-layout.d.ts.map +1 -0
  248. package/dist/xlsx/layout/print-merges.d.ts +18 -0
  249. package/dist/xlsx/layout/print-merges.d.ts.map +1 -0
  250. package/dist/xlsx/layout/print-repeat.d.ts +12 -0
  251. package/dist/xlsx/layout/print-repeat.d.ts.map +1 -0
  252. package/dist/xlsx/layout/print-titles.d.ts +20 -0
  253. package/dist/xlsx/layout/print-titles.d.ts.map +1 -0
  254. package/dist/xlsx/layout/sparkline-data.d.ts.map +1 -1
  255. package/dist/xlsx/layout/sparkline-view.d.ts.map +1 -1
  256. package/dist/xlsx/load/index.cjs +7784 -6976
  257. package/dist/xlsx/load/index.mjs +7784 -6976
  258. package/dist/xlsx/model-pivots.d.ts +46 -0
  259. package/dist/xlsx/model-pivots.d.ts.map +1 -0
  260. package/dist/xlsx/model.d.ts +5 -0
  261. package/dist/xlsx/model.d.ts.map +1 -1
  262. package/dist/xlsx/pivot/admission.d.ts +5 -0
  263. package/dist/xlsx/pivot/admission.d.ts.map +1 -0
  264. package/dist/xlsx/pivot/aggregate.d.ts +19 -0
  265. package/dist/xlsx/pivot/aggregate.d.ts.map +1 -0
  266. package/dist/xlsx/pivot/cache-xml.d.ts +9 -0
  267. package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -0
  268. package/dist/xlsx/pivot/data.d.ts +12 -0
  269. package/dist/xlsx/pivot/data.d.ts.map +1 -0
  270. package/dist/xlsx/pivot/hierarchy.d.ts +7 -0
  271. package/dist/xlsx/pivot/hierarchy.d.ts.map +1 -0
  272. package/dist/xlsx/pivot/index.d.ts +3 -0
  273. package/dist/xlsx/pivot/index.d.ts.map +1 -0
  274. package/dist/xlsx/pivot/read.d.ts +5 -0
  275. package/dist/xlsx/pivot/read.d.ts.map +1 -0
  276. package/dist/xlsx/pivot/table-xml.d.ts +5 -0
  277. package/dist/xlsx/pivot/table-xml.d.ts.map +1 -0
  278. package/dist/xlsx/pivot/write.d.ts +11 -0
  279. package/dist/xlsx/pivot/write.d.ts.map +1 -0
  280. package/dist/xlsx/read/load.d.ts.map +1 -1
  281. package/dist/xlsx/read/sheet-props.d.ts.map +1 -1
  282. package/dist/xlsx/ui/commands/i18n/index.d.ts.map +1 -1
  283. package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -1
  284. package/dist/xlsx/ui/commands/i18n/pivots.d.ts +3 -0
  285. package/dist/xlsx/ui/commands/i18n/pivots.d.ts.map +1 -0
  286. package/dist/xlsx/ui/commands/i18n/print-layout.d.ts +3 -0
  287. package/dist/xlsx/ui/commands/i18n/print-layout.d.ts.map +1 -0
  288. package/dist/xlsx/ui/commands/i18n/sparklines.d.ts +3 -0
  289. package/dist/xlsx/ui/commands/i18n/sparklines.d.ts.map +1 -0
  290. package/dist/xlsx/ui/commands/i18n/tools.d.ts.map +1 -1
  291. package/dist/xlsx/ui/commands/page-breaks.d.ts +3 -0
  292. package/dist/xlsx/ui/commands/page-breaks.d.ts.map +1 -0
  293. package/dist/xlsx/ui/index.cjs +2001 -288
  294. package/dist/xlsx/ui/index.d.ts +1 -0
  295. package/dist/xlsx/ui/index.d.ts.map +1 -1
  296. package/dist/xlsx/ui/index.mjs +2001 -289
  297. package/dist/xlsx/write/page-setup.d.ts.map +1 -1
  298. package/dist/xlsx/write/save.d.ts.map +1 -1
  299. package/dist/xlsx/write/sheet-parts.d.ts +1 -0
  300. package/dist/xlsx/write/sheet-parts.d.ts.map +1 -1
  301. package/dist/xlsx/write/workbook-part.d.ts +1 -1
  302. package/dist/xlsx/write/workbook-part.d.ts.map +1 -1
  303. package/dist/xlsx/write/worksheet.d.ts.map +1 -1
  304. package/package.json +1 -1
  305. package/dist/pptx/chunks/index-Cn-GzYGp.d.ts.map +0 -1
  306. package/dist/pptx/chunks/text-operations-BHfAm5K9.d.ts.map +0 -1
@@ -1,39 +1,377 @@
1
- import { hasTextProperties } from 'ooxml-core/pptx';
1
+ import { hasTextProperties, updateCellTextInRawXml, getTblFromRawXml, ensureArray, flattenCellTxBodyText, updateSmartArtNodeText, reconcileSmartArtTextParagraphs } from '../../../chunk-OB277ZGE.mjs';
2
+ import { remapTextToSegments } from '../../../chunk-SVQZXP3F.mjs';
3
+ import '../../../chunk-F4TB6B32.mjs';
4
+ import '../../../chunk-3E6KBUG5.mjs';
5
+ import '../../../chunk-3GAQLUP6.mjs';
6
+ import '../../../chunk-LRKFBOAA.mjs';
7
+ import '../../../chunk-VPHSMBTD.mjs';
8
+ import '../../../chunk-BEGN4NBQ.mjs';
9
+ import '../../../chunk-WWOVZOGU.mjs';
10
+
11
+ // pptx/editor/render/chart-find-source-guards.ts
12
+ function chartSourceReferenceCounts(slides) {
13
+ const counts = /* @__PURE__ */ new Map();
14
+ function visit(elements) {
15
+ for (const element of elements) {
16
+ if (element.type === "group") visit(element.children);
17
+ else if (element.type === "chart" && element.chartData?.chartPartPath) {
18
+ const part = element.chartData.chartPartPath;
19
+ counts.set(part, (counts.get(part) ?? 0) + 1);
20
+ }
21
+ }
22
+ }
23
+ for (const slide of slides) visit(slide.elements);
24
+ return counts;
25
+ }
26
+ function findMatchChartSource(slides, match) {
27
+ let element = slides[match.slideIndex]?.elements.find((item) => item.id === match.elementId);
28
+ for (const index of match.elementPath ?? []) {
29
+ element = element?.type === "group" ? element.children[index] : void 0;
30
+ }
31
+ return element?.type === "chart" ? element.chartData?.chartPartPath : void 0;
32
+ }
33
+
34
+ // pptx/editor/render/chart-label-editability.ts
35
+ var LITERAL_CATEGORY_TYPES = /* @__PURE__ */ new Set([
36
+ "bar",
37
+ "line",
38
+ "pie",
39
+ "ofPie",
40
+ "doughnut",
41
+ "area",
42
+ "radar",
43
+ "bar3D",
44
+ "line3D",
45
+ "pie3D",
46
+ "area3D",
47
+ "surface"
48
+ ]);
49
+ function chartLabelsAreEditable(element) {
50
+ const data = element.chartData;
51
+ if (!data) return false;
52
+ if (data.dataLabelTextEditable !== void 0) {
53
+ const shape = data.dataLabelSourceShape;
54
+ return data.dataLabelTextEditable && (!shape || shape.categoryCount === data.categories.length && shape.seriesValueCounts.length === data.series.length && shape.seriesValueCounts.every(
55
+ (count, index) => count === data.series[index]?.values.length
56
+ ));
57
+ }
58
+ return !element.rawXml && !data.chartPartPath && !data.externalData && !data.categoryLevels && !data.dateCategories && LITERAL_CATEGORY_TYPES.has(data.chartType) && data.categories.length > 0 && data.series.length > 0 && data.series.every(
59
+ (series) => series.values.length === data.categories.length && series.values.every(Number.isFinite)
60
+ );
61
+ }
62
+
63
+ // pptx/editor/render/find-text-targets.ts
64
+ function* smartArtNodes(nodes) {
65
+ for (const node of nodes) {
66
+ yield node;
67
+ if (node.children) yield* smartArtNodes(node.children);
68
+ }
69
+ }
70
+ function textRuns(cell) {
71
+ return cell.textRuns?.length ? cell.textRuns : [{ text: cell.text }];
72
+ }
73
+ function* findTextTargets(element, elementId = element.id, path = [], includeChartTitles = true, includeChartData = false) {
74
+ const location = { elementId, ...path.length ? { elementPath: path } : {} };
75
+ if (element.type === "group") {
76
+ for (const [index, child] of element.children.entries())
77
+ yield* findTextTargets(
78
+ child,
79
+ elementId,
80
+ [...path, index],
81
+ includeChartTitles,
82
+ includeChartData
83
+ );
84
+ } else if (hasTextProperties(element)) {
85
+ const runs = element.textSegments?.length ? element.textSegments : element.text ? [{ text: element.text, style: element.textStyle ?? {} }] : [];
86
+ yield { ...location, runs };
87
+ } else if (element.type === "table" && element.tableData) {
88
+ for (const [rowIndex, row] of element.tableData.rows.entries())
89
+ for (const [colIndex, cell] of row.cells.entries())
90
+ yield { ...location, tableCell: { rowIndex, colIndex }, runs: textRuns(cell) };
91
+ } else if (element.type === "smartArt" && element.smartArtData) {
92
+ for (const node of smartArtNodes(element.smartArtData.nodes))
93
+ yield { ...location, smartArtNodeId: node.id, runs: [{ text: node.text }] };
94
+ } else if (element.type === "chart" && element.chartData) {
95
+ const chart = element.chartData;
96
+ if (includeChartTitles && chart.style?.hasTitle !== false) {
97
+ const runs = chart.titleRuns?.length ? chart.titleRuns : chart.title ? [{ text: chart.title }] : [];
98
+ yield { ...location, chartTitle: true, readOnly: chart.titleTextEditable === false, runs };
99
+ }
100
+ if (includeChartData) {
101
+ const readOnly = !chartLabelsAreEditable(element);
102
+ for (const [chartSeriesIndex, series] of chart.series.entries())
103
+ yield { ...location, chartSeriesIndex, readOnly, runs: [{ text: series.name }] };
104
+ for (const [chartCategoryIndex, text] of chart.categories.entries())
105
+ yield { ...location, chartCategoryIndex, readOnly, runs: [{ text }] };
106
+ }
107
+ }
108
+ }
109
+ function isFindBreak(run) {
110
+ return Boolean(run.isParagraphBreak || run.isLineBreak || run.text === "\n");
111
+ }
112
+ function replaceFindRuns(runs, startIndex, startOffset, length, replacement) {
113
+ const first = runs[startIndex];
114
+ if (!first || isFindBreak(first) || startOffset < 0 || startOffset >= first.text.length || length <= 0)
115
+ return void 0;
116
+ const next = [...runs];
117
+ let remaining = length;
118
+ for (let index = startIndex; index < runs.length && remaining > 0; index++) {
119
+ const run = runs[index];
120
+ if (isFindBreak(run)) return void 0;
121
+ const offset = index === startIndex ? startOffset : 0;
122
+ const removed = Math.min(remaining, run.text.length - offset);
123
+ next[index] = {
124
+ ...run,
125
+ text: run.text.slice(0, offset) + (index === startIndex ? replacement : "") + run.text.slice(offset + removed)
126
+ };
127
+ remaining -= removed;
128
+ }
129
+ return remaining === 0 ? next : void 0;
130
+ }
131
+ function* findSlideTextTargets(slide, includeNotes = false, includeChartTitles = true, includeChartData = false) {
132
+ for (const element of slide.elements)
133
+ yield* findTextTargets(element, element.id, [], includeChartTitles, includeChartData);
134
+ if (includeNotes && slide.notes) {
135
+ const runs = slide.notesSegments?.length && slide.notesSegments.map((run) => run.text).join("") === slide.notes ? slide.notesSegments : [{ text: slide.notes, style: {} }];
136
+ yield { elementId: "", notes: true, runs };
137
+ }
138
+ }
139
+
140
+ // pptx/editor/render/find-replace-target.ts
141
+ function patchTableXml(element, rowIndex, colIndex, original, runs) {
142
+ if (!element.rawXml) return void 0;
143
+ const rawXml = structuredClone(element.rawXml);
144
+ const table = getTblFromRawXml(rawXml);
145
+ const row = ensureArray(table?.["a:tr"])[rowIndex];
146
+ const cell = ensureArray(row?.["a:tc"])[colIndex];
147
+ const paragraphs = ensureArray(
148
+ cell?.["a:txBody"]?.["a:p"]
149
+ );
150
+ let paragraphIndex = 0, runIndex = 0, fieldIndex = 0;
151
+ for (let index = 0; index < original.length; index++) {
152
+ const previous = original[index];
153
+ if (previous.isParagraphBreak) {
154
+ paragraphIndex++;
155
+ runIndex = 0;
156
+ fieldIndex = 0;
157
+ continue;
158
+ }
159
+ if (previous.isLineBreak) continue;
160
+ const paragraph = paragraphs[paragraphIndex];
161
+ const key = previous.isField ? "a:fld" : "a:r";
162
+ const xmlRun = ensureArray(paragraph?.[key])[previous.isField ? fieldIndex++ : runIndex++];
163
+ if (!xmlRun) return void 0;
164
+ if (previous.text !== runs[index].text) xmlRun["a:t"] = runs[index].text;
165
+ }
166
+ return rawXml;
167
+ }
168
+ function updateNode(nodes, nodeId, text) {
169
+ return nodes.map((node) => {
170
+ if (node.id === nodeId) {
171
+ const originalParagraphs = node.paragraphs ?? (node.runs?.length ? [{ items: node.runs.map((run) => ({ kind: "run", run })) }] : void 0);
172
+ const paragraphs = originalParagraphs ? reconcileSmartArtTextParagraphs(originalParagraphs, text) : void 0;
173
+ return { ...node, text, ...paragraphs ? { paragraphs } : {} };
174
+ }
175
+ if (!node.children) return node;
176
+ const children = updateNode(node.children, nodeId, text);
177
+ return children.every((child, index) => child === node.children[index]) ? node : { ...node, children };
178
+ });
179
+ }
180
+ function replaceLeaf(element, match, replacement) {
181
+ if ((match.chartSeriesIndex !== void 0 || match.chartCategoryIndex !== void 0) && element.type === "chart" && element.chartData) {
182
+ const data = element.chartData;
183
+ if (!chartLabelsAreEditable(element))
184
+ throw new Error("Chart labels require editing in PowerPoint or their source workbook");
185
+ const text = match.chartSeriesIndex !== void 0 ? data.series[match.chartSeriesIndex]?.name : data.categories[match.chartCategoryIndex];
186
+ if (text === void 0) return element;
187
+ const next = replaceFindRuns(
188
+ [{ text }],
189
+ match.segmentIndex,
190
+ match.startOffset,
191
+ match.length,
192
+ replacement
193
+ );
194
+ if (!next) return element;
195
+ return {
196
+ ...element,
197
+ chartData: {
198
+ ...data,
199
+ dataLabelTextOnly: true,
200
+ ...match.chartSeriesIndex !== void 0 ? {
201
+ series: data.series.map(
202
+ (series, index) => index === match.chartSeriesIndex ? { ...series, name: next[0].text } : series
203
+ )
204
+ } : {
205
+ categories: data.categories.map(
206
+ (category, index) => index === match.chartCategoryIndex ? next[0].text : category
207
+ )
208
+ }
209
+ }
210
+ };
211
+ }
212
+ if (match.chartTitle && element.type === "chart" && element.chartData) {
213
+ const data = element.chartData;
214
+ if (data.titleTextEditable === false)
215
+ throw new Error("This chart title requires editing in PowerPoint or its source workbook");
216
+ const runs = data.titleRuns?.length ? data.titleRuns : [{ text: data.title ?? "" }];
217
+ const next = replaceFindRuns(
218
+ runs,
219
+ match.segmentIndex,
220
+ match.startOffset,
221
+ match.length,
222
+ replacement
223
+ );
224
+ if (!next) return element;
225
+ return {
226
+ ...element,
227
+ chartData: {
228
+ ...data,
229
+ title: next[0]?.text ?? "",
230
+ titleRuns: next,
231
+ titleTextOnly: true,
232
+ titleTextOnlyStyles: data.titleTextOnlyStyles ?? runs.map(({ text: _text, ...style }) => style),
233
+ style: { ...data.style, hasTitle: next.some((run) => run.text.length > 0) }
234
+ }
235
+ };
236
+ }
237
+ if (match.tableCell && element.type === "table" && element.tableData) {
238
+ const { rowIndex, colIndex } = match.tableCell;
239
+ const row = element.tableData.rows[rowIndex], cell = row?.cells[colIndex];
240
+ if (!cell) return element;
241
+ const original2 = cell.textRuns?.length ? cell.textRuns : [{ text: cell.text }];
242
+ const runs = replaceFindRuns(
243
+ original2,
244
+ match.segmentIndex,
245
+ match.startOffset,
246
+ match.length,
247
+ replacement
248
+ );
249
+ if (!runs) return element;
250
+ let text = runs.map((run) => run.isParagraphBreak ? "\n" : run.isLineBreak ? "" : run.text).join("");
251
+ let rawXml = cell.textRuns?.length ? patchTableXml(element, rowIndex, colIndex, original2, runs) : updateCellTextInRawXml(element, rowIndex, colIndex, text);
252
+ if (rawXml) {
253
+ const table = getTblFromRawXml(rawXml);
254
+ const xmlRow = ensureArray(table?.["a:tr"])[rowIndex];
255
+ const xmlCell = ensureArray(xmlRow?.["a:tc"])[colIndex];
256
+ text = flattenCellTxBodyText(
257
+ xmlCell?.["a:txBody"],
258
+ (value) => ensureArray(value)
259
+ );
260
+ }
261
+ const rows = [...element.tableData.rows], cells = [...row.cells];
262
+ cells[colIndex] = { ...cell, text, ...cell.textRuns ? { textRuns: runs } : {} };
263
+ rows[rowIndex] = { ...row, cells };
264
+ return { ...element, tableData: { ...element.tableData, rows }, ...rawXml ? { rawXml } : {} };
265
+ }
266
+ if (match.smartArtNodeId && element.type === "smartArt" && element.smartArtData) {
267
+ const data = element.smartArtData;
268
+ const nodes = [...smartArtNodes(data.nodes)], node = nodes.find((candidate) => candidate.id === match.smartArtNodeId);
269
+ if (!node || match.startOffset < 0 || match.startOffset + match.length > node.text.length)
270
+ return element;
271
+ const text = node.text.slice(0, match.startOffset) + replacement + node.text.slice(match.startOffset + match.length);
272
+ const next = updateSmartArtNodeText({ ...data, nodes }, node.id, text);
273
+ const drawingShapes = next.drawingShapes?.map((shape, index) => {
274
+ if (shape === data.drawingShapes?.[index] || !shape.textSegments) return shape;
275
+ return {
276
+ ...shape,
277
+ textSegments: remapTextToSegments(text, shape.textSegments, { fontSize: shape.fontSize })
278
+ };
279
+ });
280
+ return {
281
+ ...element,
282
+ smartArtData: { ...next, drawingShapes, nodes: updateNode(data.nodes, node.id, text) }
283
+ };
284
+ }
285
+ if (!hasTextProperties(element)) return element;
286
+ const original = element.textSegments?.length ? element.textSegments : element.text ? [{ text: element.text, style: element.textStyle ?? {} }] : [];
287
+ const segments = replaceFindRuns(
288
+ original,
289
+ match.segmentIndex,
290
+ match.startOffset,
291
+ match.length,
292
+ replacement
293
+ );
294
+ if (!segments) return element;
295
+ return {
296
+ ...element,
297
+ textSegments: segments,
298
+ text: segments.map((run) => isFindBreak(run) ? "\n" : run.text).join("")
299
+ };
300
+ }
301
+ function replaceFindTarget(element, match, replacement, path = match.elementPath ?? []) {
302
+ if (!path.length) return replaceLeaf(element, match, replacement);
303
+ if (element.type !== "group") return element;
304
+ const index = path[0], child = element.children[index];
305
+ if (!child) return element;
306
+ const next = replaceFindTarget(child, match, replacement, path.slice(1));
307
+ if (next === child) return element;
308
+ const children = [...element.children];
309
+ children[index] = next;
310
+ return { ...element, children };
311
+ }
2
312
 
3
313
  // pptx/editor/render/find-replace.ts
314
+ function findReplacementAvailability(matches, index) {
315
+ const hasReadOnly = matches.some((match) => match.readOnly);
316
+ return {
317
+ current: Boolean(matches[index] && !matches[index].readOnly),
318
+ all: matches.length > 0 && !hasReadOnly,
319
+ hasReadOnly
320
+ };
321
+ }
4
322
  function findInSlides(slides, query, opts = {}) {
5
323
  if (!query) {
6
324
  return [];
7
325
  }
8
- const matchCase = opts.matchCase ?? false;
9
- const normalised = matchCase ? query : query.toLowerCase();
326
+ const escaped = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
327
+ const pattern = new RegExp(`(?=(${escaped}))`, opts.matchCase ? "gu" : "giu");
10
328
  const results = [];
329
+ const chartSources = chartSourceReferenceCounts(slides);
11
330
  for (let slideIndex = 0; slideIndex < slides.length; slideIndex++) {
12
331
  const slide = slides[slideIndex];
13
- for (const element of slide.elements) {
14
- if (!hasTextProperties(element)) {
15
- continue;
332
+ for (const { runs, ...target } of findSlideTextTargets(
333
+ slide,
334
+ opts.includeNotes,
335
+ opts.includeChartTitles,
336
+ opts.includeChartData
337
+ )) {
338
+ if (target.chartTitle || target.chartSeriesIndex !== void 0 || target.chartCategoryIndex !== void 0) {
339
+ const source = findMatchChartSource(slides, { ...target, slideIndex });
340
+ if (source && (chartSources.get(source) ?? 0) > 1) target.readOnly = true;
16
341
  }
17
- const segments = element.textSegments ?? [];
18
- for (let segIndex = 0; segIndex < segments.length; segIndex++) {
19
- const raw = segments[segIndex].text ?? "";
20
- const haystack = matchCase ? raw : raw.toLowerCase();
21
- let offset = 0;
22
- while (offset < haystack.length) {
23
- const pos = haystack.indexOf(normalised, offset);
24
- if (pos === -1) {
25
- break;
26
- }
27
- results.push({
28
- slideIndex,
29
- elementId: element.id,
30
- segmentIndex: segIndex,
31
- startOffset: pos,
32
- length: query.length
33
- });
34
- offset = pos + 1;
342
+ let text = "", totalOffset = 0, regionOffset = 0;
343
+ let positions = [];
344
+ const flush = () => {
345
+ for (const match of text.matchAll(pattern)) {
346
+ const pos = match.index;
347
+ const run = positions.find(
348
+ (position) => pos >= position.offset && pos < position.offset + position.length
349
+ );
350
+ if (run)
351
+ results.push({
352
+ ...target,
353
+ slideIndex,
354
+ segmentIndex: run.index,
355
+ startOffset: pos - run.offset,
356
+ length: match[1].length,
357
+ textOffset: regionOffset + pos
358
+ });
35
359
  }
360
+ text = "";
361
+ positions = [];
362
+ };
363
+ for (const [index, run] of runs.entries()) {
364
+ if (isFindBreak(run)) {
365
+ flush();
366
+ totalOffset++;
367
+ regionOffset = totalOffset;
368
+ continue;
369
+ }
370
+ positions.push({ index, offset: text.length, length: run.text.length });
371
+ text += run.text;
372
+ totalOffset += run.text.length;
36
373
  }
374
+ flush();
37
375
  }
38
376
  }
39
377
  return results;
@@ -42,9 +380,33 @@ function applyFindReplacements(slides, toReplace, replacement) {
42
380
  if (toReplace.length === 0) {
43
381
  return { slides, replacements: 0 };
44
382
  }
383
+ if (toReplace.some((match) => match.readOnly))
384
+ throw new Error(
385
+ "Linked or complex chart text must be edited in PowerPoint or their source workbook"
386
+ );
387
+ const chartSources = chartSourceReferenceCounts(slides);
388
+ if (toReplace.some((match) => {
389
+ if (!match.chartTitle && match.chartSeriesIndex === void 0 && match.chartCategoryIndex === void 0)
390
+ return false;
391
+ const source = findMatchChartSource(slides, match);
392
+ return source && (chartSources.get(source) ?? 0) > 1;
393
+ }))
394
+ throw new Error(
395
+ "Text in a shared chart part requires editing in PowerPoint or its source workbook"
396
+ );
45
397
  const grouped = /* @__PURE__ */ new Map();
46
398
  for (const match of toReplace) {
47
- const key = `${match.slideIndex}::${match.elementId}::${match.segmentIndex}`;
399
+ const key = JSON.stringify([
400
+ match.slideIndex,
401
+ match.elementId,
402
+ match.elementPath,
403
+ match.tableCell,
404
+ match.smartArtNodeId,
405
+ match.notes,
406
+ match.chartTitle,
407
+ match.chartSeriesIndex,
408
+ match.chartCategoryIndex
409
+ ]);
48
410
  let bucket = grouped.get(key);
49
411
  if (!bucket) {
50
412
  bucket = [];
@@ -55,37 +417,45 @@ function applyFindReplacements(slides, toReplace, replacement) {
55
417
  const nextSlides = slides.slice();
56
418
  let totalReplacements = 0;
57
419
  for (const [, matches] of grouped) {
58
- const sorted = matches.slice().sort((a, b) => b.startOffset - a.startOffset);
420
+ const sorted = matches.slice().sort((a, b) => b.segmentIndex - a.segmentIndex || b.startOffset - a.startOffset);
421
+ let lastOffset = Infinity;
59
422
  for (const match of sorted) {
60
423
  const slide = nextSlides[match.slideIndex];
61
424
  if (!slide) {
62
425
  continue;
63
426
  }
427
+ if (match.notes) {
428
+ if (match.textOffset !== void 0 && match.textOffset + match.length > lastOffset)
429
+ continue;
430
+ const runs = slide.notesSegments?.length && slide.notesSegments.map((run) => run.text).join("") === slide.notes ? slide.notesSegments : [{ text: slide.notes ?? "", style: {} }];
431
+ const updated2 = replaceFindRuns(
432
+ runs,
433
+ match.segmentIndex,
434
+ match.startOffset,
435
+ match.length,
436
+ replacement
437
+ );
438
+ if (!updated2) continue;
439
+ nextSlides[match.slideIndex] = {
440
+ ...slide,
441
+ notes: updated2.map((run) => run.text).join(""),
442
+ notesSegments: updated2
443
+ };
444
+ if (match.textOffset !== void 0) lastOffset = match.textOffset;
445
+ totalReplacements++;
446
+ continue;
447
+ }
64
448
  const elIdx = slide.elements.findIndex((e) => e.id === match.elementId);
65
449
  if (elIdx === -1) {
66
450
  continue;
67
451
  }
452
+ if (match.textOffset !== void 0 && match.textOffset + match.length > lastOffset) continue;
68
453
  const element = slide.elements[elIdx];
69
- if (!hasTextProperties(element)) {
70
- continue;
71
- }
72
- const segments = element.textSegments ?? [];
73
- const seg = segments[match.segmentIndex];
74
- if (!seg) {
75
- continue;
76
- }
77
- const before = seg.text.slice(0, match.startOffset);
78
- const after = seg.text.slice(match.startOffset + match.length);
79
- const newSegText = before + replacement + after;
80
- const nextSegments = segments.slice();
81
- nextSegments[match.segmentIndex] = { ...seg, text: newSegText };
82
- const nextText = nextSegments.map((s) => s.text).join("");
454
+ const updated = replaceFindTarget(element, match, replacement);
455
+ if (updated === element) continue;
456
+ if (match.textOffset !== void 0) lastOffset = match.textOffset;
83
457
  const nextElements = slide.elements.slice();
84
- nextElements[elIdx] = {
85
- ...element,
86
- text: nextText,
87
- textSegments: nextSegments
88
- };
458
+ nextElements[elIdx] = updated;
89
459
  nextSlides[match.slideIndex] = { ...slide, elements: nextElements };
90
460
  totalReplacements++;
91
461
  }
@@ -104,4 +474,4 @@ function replaceInSlides(slides, query, replacement, opts = {}) {
104
474
  return applyFindReplacements(slides, results, replacement);
105
475
  }
106
476
 
107
- export { applyFindReplacements, findInSlides, replaceInSlides, replaceMatch };
477
+ export { applyFindReplacements, findInSlides, findReplacementAvailability, replaceInSlides, replaceMatch };
@@ -1,6 +1,88 @@
1
1
  'use strict';
2
2
 
3
+ require('../../../chunk-SWF7KVL5.cjs');
4
+ var chunkAT66SA5M_cjs = require('../../../chunk-AT66SA5M.cjs');
5
+
6
+ // pptx/core/builders/sdk/slide-operations.ts
7
+ var cloneIdCounter = 0;
8
+ function generateCloneId(prefix) {
9
+ cloneIdCounter += 1;
10
+ return `${prefix}_clone_${Date.now().toString(36)}_${cloneIdCounter}`;
11
+ }
12
+ function reassignElementId(element) {
13
+ const prefix = element.type === "text" ? "txt" : element.type === "shape" ? "shp" : element.type === "connector" ? "cxn" : element.type === "image" || element.type === "picture" ? "img" : element.type === "table" ? "tbl" : element.type === "chart" ? "cht" : element.type === "media" ? "med" : element.type === "group" ? "grp" : element.type;
14
+ const newElement = { ...element, id: generateCloneId(prefix) };
15
+ if (newElement.type === "group" && "children" in newElement) {
16
+ newElement.children = newElement.children.map((child) => reassignElementId(child));
17
+ }
18
+ return newElement;
19
+ }
20
+ function duplicateSlide(slide, newSlideNumber) {
21
+ const cloned = chunkAT66SA5M_cjs.cloneSlide(slide);
22
+ cloned.sourceSlideId = slide.id.startsWith("ppt/slides/") ? slide.id : slide.sourceSlideId ?? slide.id;
23
+ cloned.id = `slide${newSlideNumber}`;
24
+ cloned.rId = `rId${newSlideNumber + 1}`;
25
+ cloned.slideNumber = newSlideNumber;
26
+ cloned.elements = cloned.elements.map(reassignElementId);
27
+ if (cloned.animations && cloned.animations.length > 0) {
28
+ const idMap = /* @__PURE__ */ new Map();
29
+ const mapElements = (originals, copies) => {
30
+ originals.forEach((original, index) => {
31
+ const copy = copies[index];
32
+ if (!copy) return;
33
+ idMap.set(original.id, copy.id);
34
+ if (original.type === "group" && copy.type === "group")
35
+ mapElements(original.children, copy.children);
36
+ });
37
+ };
38
+ mapElements(slide.elements, cloned.elements);
39
+ cloned.animations = cloned.animations.map((anim) => ({
40
+ ...anim,
41
+ elementId: idMap.get(anim.elementId) ?? anim.elementId
42
+ }));
43
+ }
44
+ return cloned;
45
+ }
46
+
3
47
  // pptx/editor/render/slide-operations.ts
48
+ function captureSlideClipboard(slides, ids) {
49
+ return ids.flatMap((id) => {
50
+ const slide = slides.find((candidate) => candidate.id === id);
51
+ return slide ? [chunkAT66SA5M_cjs.cloneSlide(slide)] : [];
52
+ });
53
+ }
54
+ function createSlidePaste(clipboard, insertAt, templates = {}) {
55
+ return {
56
+ copies: clipboard.map((slide, index) => ({
57
+ ...duplicateSlide(slide, insertAt + index + 1),
58
+ id: makeSlideId()
59
+ })),
60
+ sourceIds: clipboard.map((slide) => slide.id),
61
+ insertAt,
62
+ templateElements: clipboard.map((slide) => (templates[slide.id] ?? []).map(chunkAT66SA5M_cjs.cloneElement))
63
+ };
64
+ }
65
+ function insertSlidePaste(slides, request) {
66
+ const index = Math.max(0, Math.min(slides.length, request.insertAt));
67
+ const next = [
68
+ ...slides.slice(0, index),
69
+ ...request.copies.map(chunkAT66SA5M_cjs.cloneSlide),
70
+ ...slides.slice(index)
71
+ ];
72
+ return next.map(
73
+ (slide, position) => slide.slideNumber === position + 1 ? slide : { ...slide, slideNumber: position + 1 }
74
+ );
75
+ }
76
+ function applySlidePasteTemplates(mapping, request) {
77
+ const next = { ...mapping };
78
+ request.copies.forEach((copy, index) => {
79
+ next[copy.id] = (request.templateElements[index] ?? []).map(chunkAT66SA5M_cjs.cloneElement);
80
+ });
81
+ return next;
82
+ }
83
+ function captureSlideClipboardTemplates(mapping, ids) {
84
+ return Object.fromEntries(ids.map((id) => [id, (mapping[id] ?? []).map(chunkAT66SA5M_cjs.cloneElement)]));
85
+ }
4
86
  function makeSlideId(idGenerator) {
5
87
  if (idGenerator) {
6
88
  return idGenerator();
@@ -16,5 +98,10 @@ function createBlankSlide(slideNumber, idGenerator) {
16
98
  };
17
99
  }
18
100
 
101
+ exports.applySlidePasteTemplates = applySlidePasteTemplates;
102
+ exports.captureSlideClipboard = captureSlideClipboard;
103
+ exports.captureSlideClipboardTemplates = captureSlideClipboardTemplates;
19
104
  exports.createBlankSlide = createBlankSlide;
105
+ exports.createSlidePaste = createSlidePaste;
106
+ exports.insertSlidePaste = insertSlidePaste;
20
107
  exports.makeSlideId = makeSlideId;
@@ -1,5 +1,21 @@
1
- import { PptxSlide } from "ooxml-core/pptx";
1
+ import { PptxElement, PptxSlide } from "ooxml-core/pptx";
2
2
  //#region pptx/editor/render/slide-operations.d.ts
3
+ export interface SlidePasteRequest {
4
+ /** Independent slide copies with their new identities already assigned. */
5
+ readonly copies: PptxSlide[];
6
+ /** Original clipboard identities, for the host's separate template-view cache. */
7
+ readonly sourceIds: string[];
8
+ /** Zero-based insertion position, immediately after the destination selection. */
9
+ readonly insertAt: number;
10
+ /** Template-view content captured with the clipboard, never read from a later live cache. */
11
+ readonly templateElements: PptxElement[][];
12
+ }
13
+ export declare function captureSlideClipboard(slides: readonly PptxSlide[], ids: readonly string[]): PptxSlide[];
14
+ export declare function createSlidePaste(clipboard: readonly PptxSlide[], insertAt: number, templates?: Record<string, PptxElement[]>): SlidePasteRequest;
15
+ /** Apply one paste atomically; copied content and source package hints remain independent. */
16
+ export declare function insertSlidePaste(slides: readonly PptxSlide[], request: SlidePasteRequest): PptxSlide[];
17
+ export declare function applySlidePasteTemplates(mapping: Record<string, PptxElement[]>, request: SlidePasteRequest): Record<string, PptxElement[]>;
18
+ export declare function captureSlideClipboardTemplates(mapping: Record<string, PptxElement[]>, ids: readonly string[]): Record<string, PptxElement[]>;
3
19
  /**
4
20
  * Generate a collision-resistant slide id of the form
5
21
  * `slide-<timestamp>-<base36 suffix>`.
@@ -1 +1 @@
1
- {"version":3,"file":"slide-operations.d.ts","names":[],"sources":["../../../../pptx/editor/render/slide-operations.ts"],"mappings":";;;;;;;;;wBAsBgB,YAAY;;;;;;;;;wBAeZ,iBAAiB,qBAAqB,6BAA6B"}
1
+ {"version":3,"file":"slide-operations.d.ts","names":[],"sources":["../../../../pptx/editor/render/slide-operations.ts"],"mappings":";;iBAgBiB;;WAEP,QAAQ;;WAER;;WAEA;;WAEA,kBAAkB;;wBAGZ,sBACf,iBAAiB,aACjB,yBACE;wBAOa,iBACf,oBAAoB,aACpB,kBACA,YAAW,eAAe,iBACxB;;wBAaa,iBACf,iBAAiB,aACjB,SAAS,oBACP;wBAYa,yBACf,SAAS,eAAe,gBACxB,SAAS,oBACP,eAAe;wBAQF,+BACf,SAAS,eAAe,gBACxB,yBACE,eAAe;;;;;;;;wBAWF,YAAY;;;;;;;;;wBAeZ,iBAAiB,qBAAqB,6BAA6B"}