@web-ppt/edit-core 0.5.0-beta.1 → 0.5.0-beta.7

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 (367) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/README.md +165 -22
  3. package/dist/alt-text.d.ts +5 -0
  4. package/dist/appearance/index.d.ts +12 -0
  5. package/dist/appearance/materialize.d.ts +4 -0
  6. package/dist/appearance/types.d.ts +26 -0
  7. package/dist/appearance/values.d.ts +9 -0
  8. package/dist/appearance.js +301 -0
  9. package/dist/cfb/index.d.ts +5 -0
  10. package/dist/cfb/read.d.ts +16 -0
  11. package/dist/cfb/write.d.ts +3 -0
  12. package/dist/cfb.js +208 -0
  13. package/dist/change-classification.d.ts +3 -3
  14. package/dist/chart/category-binding.d.ts +4 -0
  15. package/dist/chart/category-commands.d.ts +23 -0
  16. package/dist/chart/category-levels.d.ts +14 -0
  17. package/dist/chart/category-matrix.d.ts +2 -0
  18. package/dist/chart/category-value.d.ts +2 -0
  19. package/dist/chart/category-workbook.d.ts +13 -0
  20. package/dist/chart/commands.d.ts +28 -0
  21. package/dist/chart/context.d.ts +12 -0
  22. package/dist/chart/dataset-merge.d.ts +5 -0
  23. package/dist/chart/formula.d.ts +13 -0
  24. package/dist/chart/identity-frames.d.ts +4 -0
  25. package/dist/chart/identity-scopes.d.ts +6 -0
  26. package/dist/chart/identity.d.ts +24 -0
  27. package/dist/chart/index.d.ts +8 -0
  28. package/dist/chart/limits.d.ts +6 -0
  29. package/dist/chart/locator.d.ts +4 -0
  30. package/dist/chart/materialize.d.ts +7 -0
  31. package/dist/chart/ordering.d.ts +9 -0
  32. package/dist/chart/part-graph.d.ts +5 -0
  33. package/dist/chart/patch-validation.d.ts +3 -0
  34. package/dist/chart/plot-kinds.d.ts +2 -0
  35. package/dist/chart/projection.d.ts +8 -0
  36. package/dist/chart/save.d.ts +4 -0
  37. package/dist/chart/shared-added-plan.d.ts +19 -0
  38. package/dist/chart/shared-added-records.d.ts +8 -0
  39. package/dist/chart/shared-address.d.ts +5 -0
  40. package/dist/chart/shared-allocate.d.ts +7 -0
  41. package/dist/chart/shared-cache-codec.d.ts +5 -0
  42. package/dist/chart/shared-cache-identities.d.ts +3 -0
  43. package/dist/chart/shared-cache-migration.d.ts +7 -0
  44. package/dist/chart/shared-cache-save.d.ts +3 -0
  45. package/dist/chart/shared-cache-scopes.d.ts +13 -0
  46. package/dist/chart/shared-cache.d.ts +11 -0
  47. package/dist/chart/shared-category.d.ts +4 -0
  48. package/dist/chart/shared-cell.d.ts +9 -0
  49. package/dist/chart/shared-family.d.ts +26 -0
  50. package/dist/chart/shared-fields.d.ts +18 -0
  51. package/dist/chart/shared-graph.d.ts +19 -0
  52. package/dist/chart/shared-growth-space.d.ts +5 -0
  53. package/dist/chart/shared-inserted-cells.d.ts +14 -0
  54. package/dist/chart/shared-inserted-command.d.ts +7 -0
  55. package/dist/chart/shared-inserted-layout.d.ts +16 -0
  56. package/dist/chart/shared-inserted-project.d.ts +14 -0
  57. package/dist/chart/shared-inserted-records.d.ts +16 -0
  58. package/dist/chart/shared-inserted-save.d.ts +6 -0
  59. package/dist/chart/shared-joint-command.d.ts +9 -0
  60. package/dist/chart/shared-joint-records.d.ts +9 -0
  61. package/dist/chart/shared-record-axis.d.ts +25 -0
  62. package/dist/chart/shared-record-remove.d.ts +13 -0
  63. package/dist/chart/shared-record-stage.d.ts +2 -0
  64. package/dist/chart/shared-records.d.ts +2 -0
  65. package/dist/chart/shared-rows.d.ts +17 -0
  66. package/dist/chart/shared-runtime.d.ts +19 -0
  67. package/dist/chart/shared-save-plan.d.ts +4 -0
  68. package/dist/chart/shared-save.d.ts +3 -0
  69. package/dist/chart/shared-series.d.ts +6 -0
  70. package/dist/chart/shared-source-cache.d.ts +4 -0
  71. package/dist/chart/shared-topology.d.ts +9 -0
  72. package/dist/chart/shared-unresolved.d.ts +3 -0
  73. package/dist/chart/shared-validation.d.ts +6 -0
  74. package/dist/chart/shared-workbook-source.d.ts +6 -0
  75. package/dist/chart/shared-xy-command.d.ts +7 -0
  76. package/dist/chart/shared-xy-family.d.ts +16 -0
  77. package/dist/chart/shared-xy-project.d.ts +6 -0
  78. package/dist/chart/shared-xy-records.d.ts +23 -0
  79. package/dist/chart/shared-xy-save.d.ts +5 -0
  80. package/dist/chart/shared-xy-source.d.ts +39 -0
  81. package/dist/chart/shared.d.ts +13 -0
  82. package/dist/chart/source.d.ts +11 -0
  83. package/dist/chart/types.d.ts +86 -0
  84. package/dist/chart/validation.d.ts +24 -0
  85. package/dist/chart/workbook-range.d.ts +16 -0
  86. package/dist/chart/workbook-read.d.ts +7 -0
  87. package/dist/chart/workbook-write.d.ts +9 -0
  88. package/dist/chart/workbook.d.ts +25 -0
  89. package/dist/chart/xml-data.d.ts +14 -0
  90. package/dist/chart/xml-namespaces.d.ts +16 -0
  91. package/dist/chart-design/index.d.ts +10 -0
  92. package/dist/chart-design/types.d.ts +11 -0
  93. package/dist/chart-design/xml.d.ts +2 -0
  94. package/dist/chart-design.js +361 -0
  95. package/dist/chart-ex/index.d.ts +15 -0
  96. package/dist/chart-ex/workbook.d.ts +6 -0
  97. package/dist/chart-ex/xml.d.ts +14 -0
  98. package/dist/chart-ex.js +457 -0
  99. package/dist/chart-shared/index.d.ts +12 -0
  100. package/dist/chart-shared.js +1 -0
  101. package/dist/chart.js +1 -0
  102. package/dist/clipboard-links-GuPtqr1z.js +778 -0
  103. package/dist/clipboard-package.d.ts +4 -0
  104. package/dist/clipboard-source.d.ts +6 -2
  105. package/dist/clipboard-trees.d.ts +9 -0
  106. package/dist/collaboration-identity.d.ts +3 -0
  107. package/dist/commands/add-slide-identity.d.ts +4 -0
  108. package/dist/commands/bullet-image-resource.d.ts +11 -0
  109. package/dist/commands/clear-format.d.ts +4 -0
  110. package/dist/commands/common-object-slide-patch.d.ts +4 -0
  111. package/dist/commands/common-object-slide-types.d.ts +68 -0
  112. package/dist/commands/convert-to-custom-geometry.d.ts +4 -0
  113. package/dist/commands/direct-format-patches.d.ts +11 -5
  114. package/dist/commands/distribute-elements.d.ts +4 -0
  115. package/dist/commands/edit-table-grid.d.ts +10 -0
  116. package/dist/commands/element-alt-text.d.ts +8 -0
  117. package/dist/commands/element-arrangement.d.ts +17 -0
  118. package/dist/commands/element-effects.d.ts +1 -1
  119. package/dist/commands/element-fill.d.ts +1 -1
  120. package/dist/commands/element-geometry.d.ts +9 -0
  121. package/dist/commands/element-hierarchy.d.ts +6 -0
  122. package/dist/commands/element-image-content.d.ts +2 -2
  123. package/dist/commands/element-link.d.ts +1 -1
  124. package/dist/commands/element-name.d.ts +1 -1
  125. package/dist/commands/element-stroke.d.ts +1 -1
  126. package/dist/commands/element-table-style.d.ts +5 -0
  127. package/dist/commands/element-text.d.ts +1 -1
  128. package/dist/commands/element-transform.d.ts +2 -2
  129. package/dist/commands/frame-decomposition.d.ts +10 -0
  130. package/dist/commands/generated-creation-defaults.d.ts +4 -0
  131. package/dist/commands/geometry-types.d.ts +44 -0
  132. package/dist/commands/group-types.d.ts +24 -0
  133. package/dist/commands/group.d.ts +4 -0
  134. package/dist/commands/hierarchy-record.d.ts +5 -0
  135. package/dist/commands/image-resource.d.ts +8 -1
  136. package/dist/commands/insertion-host.d.ts +16 -0
  137. package/dist/commands/insertion-rect.d.ts +2 -0
  138. package/dist/commands/layout-property.d.ts +7 -0
  139. package/dist/commands/master-property.d.ts +5 -0
  140. package/dist/commands/master-text-style-types.d.ts +27 -0
  141. package/dist/commands/master-text-style.d.ts +7 -0
  142. package/dist/commands/paste-resources.d.ts +9 -5
  143. package/dist/commands/patch-apply.d.ts +3 -0
  144. package/dist/commands/patch-count.d.ts +1 -0
  145. package/dist/commands/patch-invalidation.d.ts +4 -0
  146. package/dist/commands/patch-stage.d.ts +4 -0
  147. package/dist/commands/patch.d.ts +4 -0
  148. package/dist/commands/record-clone.d.ts +3 -0
  149. package/dist/commands/record-override.d.ts +5 -0
  150. package/dist/commands/replace-image.d.ts +6 -1
  151. package/dist/commands/sections.d.ts +10 -0
  152. package/dist/commands/set-geometry.d.ts +4 -0
  153. package/dist/commands/set-preset.d.ts +5 -0
  154. package/dist/commands/set-table-style.d.ts +3 -0
  155. package/dist/commands/slide-property-types.d.ts +55 -5
  156. package/dist/commands/slide-size.d.ts +7 -0
  157. package/dist/commands/spid.d.ts +2 -1
  158. package/dist/commands/table-grid-patch.d.ts +12 -0
  159. package/dist/commands/table-style-types.d.ts +28 -0
  160. package/dist/commands/text-target.d.ts +3 -2
  161. package/dist/commands/theme-types.d.ts +47 -0
  162. package/dist/commands/theme.d.ts +9 -0
  163. package/dist/commands/types.d.ts +219 -17
  164. package/dist/commands/ungroup-source.d.ts +3 -0
  165. package/dist/commands/ungroup.d.ts +4 -0
  166. package/dist/comments/index.d.ts +35 -0
  167. package/dist/comments/save.d.ts +3 -0
  168. package/dist/comments/state.d.ts +10 -0
  169. package/dist/comments/xml.d.ts +12 -0
  170. package/dist/comments.js +782 -0
  171. package/dist/common-object-slide-types.d.ts +34 -0
  172. package/dist/custom-geometry-path.d.ts +3 -0
  173. package/dist/custom-geometry.d.ts +12 -0
  174. package/dist/data-validation.d.ts +1 -1
  175. package/dist/describe/budget.d.ts +3 -0
  176. package/dist/describe/index.d.ts +5 -0
  177. package/dist/describe/read.d.ts +4 -0
  178. package/dist/describe/types.d.ts +103 -0
  179. package/dist/describe.js +192 -0
  180. package/dist/design-dependencies.d.ts +8 -0
  181. package/dist/design-projection-package.d.ts +10 -0
  182. package/dist/design-target.d.ts +10 -0
  183. package/dist/design.d.ts +3 -0
  184. package/dist/document-extensions.d.ts +9 -0
  185. package/dist/document.d.ts +1 -1
  186. package/dist/dynamic-projection.d.ts +6 -0
  187. package/dist/edit-core.js +5680 -3413
  188. package/dist/editor.d.ts +19 -2
  189. package/dist/element-source.d.ts +11 -0
  190. package/dist/element-spids.d.ts +4 -0
  191. package/dist/extension-address-journal.d.ts +9 -0
  192. package/dist/extension-address-remap.d.ts +14 -0
  193. package/dist/extension-addresses.d.ts +20 -0
  194. package/dist/extension-copy-history.d.ts +7 -0
  195. package/dist/extension-copy.d.ts +16 -0
  196. package/dist/extension-migration-receipt.d.ts +34 -0
  197. package/dist/extension-recovery-context.d.ts +5 -0
  198. package/dist/extension-runtime.d.ts +64 -0
  199. package/dist/generate/comments.d.ts +3 -0
  200. package/dist/generate/compatibility-parts.d.ts +14 -0
  201. package/dist/generate/compatibility-references.d.ts +3 -0
  202. package/dist/generate/compatibility.d.ts +4 -0
  203. package/dist/generate/custom-geometry.d.ts +2 -0
  204. package/dist/generate/index.d.ts +13 -0
  205. package/dist/generate/links.d.ts +3 -0
  206. package/dist/generate/master-defaults.d.ts +4 -0
  207. package/dist/generate/materialize.d.ts +2 -0
  208. package/dist/generate/math.d.ts +3 -0
  209. package/dist/generate/media.d.ts +13 -0
  210. package/dist/generate/portable-clipboard.d.ts +4 -0
  211. package/dist/generate/projection-tree.d.ts +8 -0
  212. package/dist/generate/table.d.ts +4 -0
  213. package/dist/generate/template.d.ts +70 -0
  214. package/dist/generate/text-body.d.ts +2 -0
  215. package/dist/generate/text-effects.d.ts +5 -0
  216. package/dist/generate/text-override.d.ts +8 -0
  217. package/dist/generate/validation.d.ts +3 -0
  218. package/dist/generate/warp.d.ts +2 -0
  219. package/dist/generate.js +1464 -0
  220. package/dist/history.d.ts +11 -1
  221. package/dist/hyperlink.d.ts +2 -0
  222. package/dist/identities.d.ts +4 -0
  223. package/dist/identity-allocation.d.ts +12 -0
  224. package/dist/identity-watermark.d.ts +4 -0
  225. package/dist/image-content.d.ts +5 -2
  226. package/dist/image-resource-history.d.ts +2 -0
  227. package/dist/index-C2r7c6G6.js +714 -0
  228. package/dist/index-CYDvbiwF.js +1 -0
  229. package/dist/index.d.ts +43 -7
  230. package/dist/ink/index.d.ts +27 -0
  231. package/dist/ink/model.d.ts +4 -0
  232. package/dist/ink/save.d.ts +3 -0
  233. package/dist/ink/source.d.ts +7 -0
  234. package/dist/ink.js +324 -0
  235. package/dist/layout-assets.d.ts +3 -1
  236. package/dist/layout-projection.d.ts +19 -5
  237. package/dist/layout-state.d.ts +2 -0
  238. package/dist/layout-types.d.ts +42 -0
  239. package/dist/layout.d.ts +5 -0
  240. package/dist/lint/color.d.ts +5 -0
  241. package/dist/lint/index.d.ts +7 -0
  242. package/dist/lint/prompts.d.ts +3 -0
  243. package/dist/lint/report.d.ts +21 -0
  244. package/dist/lint/sampler-batch.d.ts +4 -0
  245. package/dist/lint/sampler-images.d.ts +2 -0
  246. package/dist/lint/sampler.d.ts +9 -0
  247. package/dist/lint/snapshot.d.ts +34 -0
  248. package/dist/lint/types.d.ts +67 -0
  249. package/dist/lint-sampler.js +187 -0
  250. package/dist/lint.js +659 -0
  251. package/dist/master-state.d.ts +3 -0
  252. package/dist/master-text-style-state.d.ts +3 -0
  253. package/dist/master-types.d.ts +55 -0
  254. package/dist/master.d.ts +5 -0
  255. package/dist/media/audio-icon.d.ts +2 -0
  256. package/dist/media/commands.d.ts +3 -0
  257. package/dist/media/index.d.ts +10 -0
  258. package/dist/media/markup.d.ts +10 -0
  259. package/dist/media/mp4-boxes.d.ts +12 -0
  260. package/dist/media/mp4-fragments.d.ts +8 -0
  261. package/dist/media/mp4-samples.d.ts +4 -0
  262. package/dist/media/mp4.d.ts +2 -0
  263. package/dist/media/poster.d.ts +2 -0
  264. package/dist/media/replace-poster.d.ts +3 -0
  265. package/dist/media/resource.d.ts +4 -0
  266. package/dist/media/source.d.ts +14 -0
  267. package/dist/media/types.d.ts +33 -0
  268. package/dist/media-properties.d.ts +4 -0
  269. package/dist/media.js +1630 -0
  270. package/dist/model-invariants-BM19JVxy.js +8980 -0
  271. package/dist/object-source.d.ts +11 -0
  272. package/dist/ole/container.d.ts +14 -0
  273. package/dist/ole/content.d.ts +94 -0
  274. package/dist/ole/index.d.ts +20 -0
  275. package/dist/ole/preview.d.ts +3 -0
  276. package/dist/ole/save.d.ts +2 -0
  277. package/dist/ole/state.d.ts +16 -0
  278. package/dist/ole.js +870 -0
  279. package/dist/opc/patch.d.ts +2 -0
  280. package/dist/opc.js +1 -1
  281. package/dist/paragraph-level.d.ts +11 -0
  282. package/dist/paragraph-property-schema.d.ts +5 -2
  283. package/dist/{patch-DO8497wO.js → patch-BwhfBbYE.js} +112 -95
  284. package/dist/patch-change.d.ts +4 -0
  285. package/dist/patch-events.d.ts +16 -0
  286. package/dist/ppt/appearance.d.ts +11 -0
  287. package/dist/ppt/binary.d.ts +20 -0
  288. package/dist/ppt/drawing.d.ts +18 -0
  289. package/dist/ppt/geometry.d.ts +4 -0
  290. package/dist/ppt/index.d.ts +12 -0
  291. package/dist/ppt/pictures.d.ts +11 -0
  292. package/dist/ppt/text.d.ts +9 -0
  293. package/dist/ppt.js +774 -0
  294. package/dist/preset-geometry.d.ts +6 -0
  295. package/dist/projection.d.ts +2 -0
  296. package/dist/query-BHLjWjnu.js +903 -0
  297. package/dist/recovery-identity.d.ts +3 -1
  298. package/dist/recovery-migrations.d.ts +3 -0
  299. package/dist/recovery.d.ts +3 -0
  300. package/dist/resize/index.d.ts +6 -0
  301. package/dist/resize/text.d.ts +4 -0
  302. package/dist/resize.js +5090 -0
  303. package/dist/retained-element-origins.d.ts +6 -0
  304. package/dist/run-property-fields.d.ts +12 -0
  305. package/dist/run-property-schema.d.ts +3 -1
  306. package/dist/run-style.d.ts +15 -0
  307. package/dist/save/alt-text.d.ts +4 -0
  308. package/dist/save/comments.d.ts +3 -0
  309. package/dist/save/effects.d.ts +2 -1
  310. package/dist/save/extension-availability.d.ts +3 -0
  311. package/dist/save/extension-elements.d.ts +26 -0
  312. package/dist/save/geometry.d.ts +5 -0
  313. package/dist/save/index.d.ts +6 -1
  314. package/dist/save/insertion.d.ts +7 -3
  315. package/dist/save/layout-properties.d.ts +4 -0
  316. package/dist/save/master-properties.d.ts +5 -0
  317. package/dist/save/notes.d.ts +2 -0
  318. package/dist/save/paragraph-overrides.d.ts +3 -0
  319. package/dist/save/run-overrides.d.ts +10 -0
  320. package/dist/save/shape-format.d.ts +3 -0
  321. package/dist/save/slide-parts.d.ts +1 -0
  322. package/dist/save/table-style-part.d.ts +11 -0
  323. package/dist/save/table.d.ts +5 -0
  324. package/dist/save/text-source-less.d.ts +6 -0
  325. package/dist/save/xfrm.d.ts +8 -2
  326. package/dist/save.js +502 -1480
  327. package/dist/sections.d.ts +8 -0
  328. package/dist/session-assets.d.ts +4 -0
  329. package/dist/slide-parts-D0o_DDhi.js +1331 -0
  330. package/dist/slide-size.d.ts +6 -0
  331. package/dist/smartart/drawing.d.ts +3 -0
  332. package/dist/smartart/index.d.ts +16 -0
  333. package/dist/smartart/model.d.ts +18 -0
  334. package/dist/smartart/save.d.ts +3 -0
  335. package/dist/smartart.js +604 -0
  336. package/dist/source-retention.d.ts +7 -0
  337. package/dist/space.d.ts +37 -0
  338. package/dist/table-cell.d.ts +7 -1
  339. package/dist/table-direct-markup.d.ts +7 -1
  340. package/dist/table-grid-projection.d.ts +6 -0
  341. package/dist/table-grid.d.ts +45 -0
  342. package/dist/table-invariants.d.ts +4 -0
  343. package/dist/table-rows.d.ts +2 -1
  344. package/dist/table-scale.d.ts +4 -0
  345. package/dist/table-style.d.ts +21 -0
  346. package/dist/templates/index.d.ts +4 -0
  347. package/dist/templates/recipes.d.ts +5 -0
  348. package/dist/templates/types.d.ts +17 -0
  349. package/dist/templates.js +543 -0
  350. package/dist/text-flatten.d.ts +6 -0
  351. package/dist/text-fragment.d.ts +5 -0
  352. package/dist/text-model.d.ts +8 -8
  353. package/dist/text-override-validation.d.ts +6 -2
  354. package/dist/text-selection.d.ts +4 -0
  355. package/dist/theme-projection.d.ts +8 -0
  356. package/dist/theme-xml.d.ts +3 -0
  357. package/dist/theme.d.ts +14 -0
  358. package/dist/types.d.ts +217 -8
  359. package/dist/xml/index.d.ts +1 -1
  360. package/dist/xml/nodes.d.ts +2 -2
  361. package/dist/xml/shape-ids.d.ts +3 -0
  362. package/dist/xml.js +19 -16
  363. package/package.json +77 -5
  364. package/schemas/describe.schema.json +479 -0
  365. package/schemas/lint.schema.json +145 -0
  366. package/dist/index-D4ZTaYOa.js +0 -706
  367. package/dist/insertion-DabLme_U.js +0 -5471
@@ -0,0 +1,1464 @@
1
+ import { am as lt, b as V, at as me, S as Ge, au as ct, ad as He, ae as Ue, av as Ee, g as Xe, h as pt, aw as mt, n as ut, a5 as dt, ax as ye, ay as ft, w as ue, Y as ht, az as gt, aA as xt, aB as $t, aC as yt, aD as we, o as wt, x as bt, a3 as vt, af as St, r as Y, a as Ce, aE as It, aF as Pt, l as Et, aG as Ct, aH as Tt, aI as qe, aJ as kt, y as Mt, A as Ft, aK as Lt, aL as Ot, aM as Te, q as Nt, s as Rt, aN as At, aO as jt, d as Dt, aP as ke, aQ as _t, an as Bt, aR as zt, aS as Gt, aT as Me, aU as Fe, R as Ht, v as Ut } from "./model-invariants-BM19JVxy.js";
2
+ import { c as We, d as Xt } from "./patch-BwhfBbYE.js";
3
+ import { TEXT_RUN_DIRECT_BITS as J, PARAGRAPH_LAYOUT_DIRECT_BITS as qt, THEME_COLOR_SLOTS as Wt } from "@web-ppt/core";
4
+ import { c as Le, m as Vt, s as Yt, i as Qt, a as Kt } from "./clipboard-links-GuPtqr1z.js";
5
+ import { P as H, D as _, s as G, g as Oe, d as Zt, p as R, h as Ve, t as Ye, O as ve, a as Q, x as ee, i as K, c as se, b as ne, X as Jt, r as Ne, k as er } from "./index-C2r7c6G6.js";
6
+ import { i as Qe, f as le, v as tr, s as rr, u as sr, m as nr, x as ar, k as or, y as ir, b as lr } from "./slide-parts-D0o_DDhi.js";
7
+ import { copyElements as Re } from "@web-ppt/edit-core";
8
+ function Ke(e, t, s, n) {
9
+ const r = lt(e, s);
10
+ if (!r) return;
11
+ if (r.kind === "external" || r.kind === "slide") return r;
12
+ if (r.kind === "unsupported") throw new Error(`${n} 的来源链接无法生成`);
13
+ const a = e.slideOrder.indexOf(t), o = r.action === "first" ? 0 : r.action === "last" ? e.slideOrder.length - 1 : r.action === "next" ? Math.min(a + 1, e.slideOrder.length - 1) : Math.max(a - 1, 0), i = e.slideOrder[o];
14
+ return i ? { kind: "slide", slideId: i } : void 0;
15
+ }
16
+ const cr = "http://schemas.microsoft.com/office/2007/relationships/media", pr = "http://schemas.microsoft.com/office/powerpoint/2010/main";
17
+ function mr(e, t, s, n = !1) {
18
+ return `<a:${e}File${t ? ` r:link="${t}"` : ""}/>` + (s ? `<p:extLst><p:ext uri="{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}"><p14:media r:${n ? "link" : "embed"}="${s}"/></p:ext></p:extLst>` : "");
19
+ }
20
+ const ur = /[A-Za-z]|[-+]?(?:\d*\.?\d+)(?:e[-+]?\d+)?/gi;
21
+ function te(e, t) {
22
+ const s = Math.round(e * 9525);
23
+ if (!Number.isSafeInteger(s)) throw new Error(`自定义几何 ${t} 超出 OOXML 安全整数范围`);
24
+ return String(s);
25
+ }
26
+ function z(e, t, s) {
27
+ const n = Number(e[t]), r = Number(e[t + 1]);
28
+ if (!Number.isFinite(n) || !Number.isFinite(r)) throw new Error(`自定义几何 ${s} 坐标无效`);
29
+ return [n, r];
30
+ }
31
+ const ce = ([e, t], s) => `<a:pt x="${te(e, `${s}.x`)}" y="${te(t, `${s}.y`)}"/>`;
32
+ function Ae(e, t) {
33
+ const s = Math.round(e * 180 * 6e4 / Math.PI);
34
+ if (!Number.isSafeInteger(s)) throw new Error(`自定义几何 ${t} 角度无效`);
35
+ return String(s);
36
+ }
37
+ function dr(e, t, s) {
38
+ if (!s) throw new Error("生成保存的自定义圆弧缺少起点");
39
+ let n = Math.abs(Number(e[t])), r = Math.abs(Number(e[t + 1]));
40
+ const a = Number(e[t + 2]), o = Number(e[t + 3]), i = Number(e[t + 4]), c = z(e, t + 5, "A");
41
+ if (![n, r, a, o, i].every(Number.isFinite) || o !== 0 && o !== 1 || i !== 0 && i !== 1)
42
+ throw new Error("自定义几何 A 参数无效");
43
+ if (Math.abs(a) > 1e-9) throw new Error("生成保存不支持旋转椭圆的自定义圆弧");
44
+ if (n === 0 || r === 0)
45
+ return { markup: `<a:lnTo>${ce(c, "A")}</a:lnTo>`, target: c };
46
+ const [l, m] = s, [d, u] = c;
47
+ if (l === d && m === u) return { markup: "", target: c };
48
+ const p = (l - d) / 2, f = (m - u) / 2, y = p * p / (n * n) + f * f / (r * r);
49
+ if (y > 1) {
50
+ const T = Math.sqrt(y);
51
+ n *= T, r *= T;
52
+ }
53
+ const $ = n * n, x = r * r, h = $ * f * f + x * p * p, g = Math.max(0, $ * x - h), M = h === 0 ? 0 : (o === i ? -1 : 1) * Math.sqrt(g / h), S = (l + d) / 2 + M * (n * f / r), C = (m + u) / 2 - M * (r * p / n), E = Math.atan2((m - C) / r, (l - S) / n);
54
+ let v = Math.atan2((u - C) / r, (d - S) / n) - E;
55
+ return i === 1 && v < 0 && (v += Math.PI * 2), i === 0 && v > 0 && (v -= Math.PI * 2), {
56
+ markup: `<a:arcTo wR="${te(n, "A.rx")}" hR="${te(r, "A.ry")}" stAng="${Ae(E, "A.start")}" swAng="${Ae(v, "A.sweep")}"/>`,
57
+ target: c
58
+ };
59
+ }
60
+ function Ze(e, t, s, n) {
61
+ const r = e.match(ur) ?? [], a = [];
62
+ let o = 0, i = null, c = null;
63
+ for (; o < r.length; ) {
64
+ const d = r[o++];
65
+ if (d === "Z" || d === "z") {
66
+ a.push("<a:close/>"), i = c;
67
+ continue;
68
+ }
69
+ if (d === "M" || d === "L") {
70
+ const u = z(r, o, d);
71
+ o += 2;
72
+ const p = d === "M" ? "moveTo" : "lnTo";
73
+ a.push(`<a:${p}>${ce(u, d)}</a:${p}>`), i = u, d === "M" && (c = u);
74
+ continue;
75
+ }
76
+ if (d === "C") {
77
+ const u = [
78
+ z(r, o, "C1"),
79
+ z(r, o + 2, "C2"),
80
+ z(r, o + 4, "C3")
81
+ ];
82
+ o += 6, a.push(`<a:cubicBezTo>${u.map((p, f) => ce(p, `C${f + 1}`)).join("")}</a:cubicBezTo>`), i = u[2];
83
+ continue;
84
+ }
85
+ if (d === "Q") {
86
+ const u = [z(r, o, "Q1"), z(r, o + 2, "Q2")];
87
+ o += 4, a.push(`<a:quadBezTo>${u.map((p, f) => ce(p, `Q${f + 1}`)).join("")}</a:quadBezTo>`), i = u[1];
88
+ continue;
89
+ }
90
+ if (d === "A") {
91
+ const u = dr(r, o, i);
92
+ o += 7, u.markup && a.push(u.markup), i = u.target;
93
+ continue;
94
+ }
95
+ throw new Error(`生成保存不支持自定义路径命令:${d}`);
96
+ }
97
+ if (!a.length) throw new Error("生成保存的自定义路径为空");
98
+ const l = te(t, "width"), m = te(s, "height");
99
+ return `<a:custGeom><a:avLst/><a:gdLst/><a:ahLst/><a:cxnLst/><a:rect l="0" t="0" r="r" b="b"/>
100
+ <a:pathLst><a:path w="${l}" h="${m}" fill="${n ? "none" : "norm"}" stroke="1">${a.join("")}</a:path></a:pathLst></a:custGeom>`;
101
+ }
102
+ const fr = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", hr = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", gr = {
103
+ "audio/mpeg": "mp3",
104
+ "audio/mp4": "m4a",
105
+ "audio/wav": "wav",
106
+ "video/mp4": "mp4",
107
+ "video/webm": "webm",
108
+ "video/quicktime": "mov"
109
+ };
110
+ function xr(e, t) {
111
+ if (t.src.startsWith("web-ppt-resource:")) {
112
+ const r = e.imageResources[t.src.slice(17)];
113
+ if (!r) throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少会话资源`);
114
+ return {
115
+ hash: r.hash,
116
+ mime: r.mime,
117
+ extension: r.extension,
118
+ bytes: r.bytes
119
+ };
120
+ }
121
+ const s = me(e, t.src);
122
+ if (s) return Le(s.bytes, s.mime, "生成图片");
123
+ const n = /^data:([^;,]+)((?:;[^,]*)?),(.*)$/is.exec(t.src);
124
+ if (n) {
125
+ const r = /;base64/i.test(n[2]) ? Ge(n[3]) : new TextEncoder().encode(decodeURIComponent(n[3]));
126
+ return n[1] === "image/svg+xml" ? (ct(r, n[1], "svg", "生成图片", !0), {
127
+ hash: Ue(r),
128
+ mime: n[1],
129
+ extension: "svg",
130
+ bytes: He(r)
131
+ }) : Le(r, n[1], "生成图片");
132
+ }
133
+ if (/^https?:\/\//i.test(t.src)) return null;
134
+ throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少可生成的资源字节`);
135
+ }
136
+ function ae(e, t, s, n) {
137
+ const r = xr(e, t), a = r ? {
138
+ ...r,
139
+ targetPart: `ppt/media/web-ppt-${r.hash}.${r.extension}`,
140
+ created: !0
141
+ } : null;
142
+ return {
143
+ resource: a,
144
+ relationship: {
145
+ sourceId: s,
146
+ targetId: s,
147
+ type: fr,
148
+ target: a ? V(n, a.targetPart) : t.src,
149
+ ...a ? {} : { targetMode: "External" }
150
+ }
151
+ };
152
+ }
153
+ function $r(e, t, s, n) {
154
+ if (!t.src) return {};
155
+ const r = me(e, t.src), a = /^data:([^;,]+);base64,(.*)$/is.exec(t.src), o = (r == null ? void 0 : r.bytes) ?? (a ? Ge(a[2]) : null), i = (r == null ? void 0 : r.mime) ?? (a == null ? void 0 : a[1]) ?? t.mime ?? (t.kind === "audio" ? "audio/mpeg" : "video/mp4"), c = `http://schemas.openxmlformats.org/officeDocument/2006/relationships/${t.kind}`;
156
+ if (!o) {
157
+ if (!t.external && !/^https?:\/\//i.test(t.src))
158
+ throw new Error(`媒体 ${t.src} 缺少可生成的资源字节`);
159
+ return { relationship: {
160
+ sourceId: s,
161
+ targetId: s,
162
+ type: c,
163
+ target: t.src,
164
+ targetMode: "External"
165
+ } };
166
+ }
167
+ const l = Ue(o), m = gr[i] ?? (t.kind === "audio" ? "mp3" : "mp4"), d = {
168
+ hash: l,
169
+ mime: i,
170
+ extension: m,
171
+ bytes: He(o),
172
+ created: !0,
173
+ targetPart: `ppt/media/web-ppt-${l}.${m}`
174
+ };
175
+ return {
176
+ resource: d,
177
+ relationship: {
178
+ sourceId: s,
179
+ targetId: s,
180
+ type: c,
181
+ target: V(n, d.targetPart)
182
+ }
183
+ };
184
+ }
185
+ const fe = (e) => e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
186
+ function yr(e, t, s, n) {
187
+ var x;
188
+ const r = t.src;
189
+ if (r.kind !== "image") throw new Error(`元素 ${t.id} 不是图片`);
190
+ const a = r.src ? ae(e, r, `rIdImage${s}`, n) : null, o = r.media ? $r(e, r.media, `rIdMedia${s}`, n) : null, i = o != null && o.relationship ? {
191
+ ...o.relationship,
192
+ sourceId: `rIdMediaCompat${s}`,
193
+ targetId: `rIdMediaCompat${s}`,
194
+ type: cr
195
+ } : void 0, c = a != null && a.resource ? "embed" : "link", l = r.alpha === void 0 ? "" : `<a:alphaModFix amt="${Math.round(r.alpha * 1e5)}"/>`, m = fe(r.name ?? `图片 ${s}`), d = r.media ? mr(
196
+ r.media.kind,
197
+ (x = o == null ? void 0 : o.relationship) == null ? void 0 : x.targetId,
198
+ i == null ? void 0 : i.targetId,
199
+ (i == null ? void 0 : i.targetMode) === "External"
200
+ ) : "", u = a ? `<a:blip r:${c}="${a.relationship.targetId}">${l}</a:blip>` : "", p = t.meta.geom ? Object.entries(t.meta.geom.adj).map(([h, g]) => {
201
+ if (!Number.isSafeInteger(Math.round(g)))
202
+ throw new Error(`图片 ${t.id} 的几何调整值无效`);
203
+ return `<a:gd name="${fe(h)}" fmla="val ${Math.round(g)}"/>`;
204
+ }).join("") : "", f = t.meta.geom ? `<a:prstGeom prst="${fe(t.meta.geom.preset)}"><a:avLst>${p}</a:avLst></a:prstGeom>` : r.clipPath ? Ze(r.clipPath, r.w, r.h, !1) : '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom>', y = [a == null ? void 0 : a.relationship, o == null ? void 0 : o.relationship, i].filter((h) => !!h), $ = [a == null ? void 0 : a.resource, o == null ? void 0 : o.resource].filter((h) => !!h);
205
+ return {
206
+ markup: `<p:pic><p:nvPicPr><p:cNvPr id="${s}" name="${m}"/><p:cNvPicPr/><p:nvPr>${d}</p:nvPr></p:nvPicPr>
207
+ <p:blipFill>${u}<a:stretch><a:fillRect/></a:stretch></p:blipFill>
208
+ <p:spPr><a:xfrm/>${f}</p:spPr></p:pic>`,
209
+ namespaces: {
210
+ "xmlns:a": _,
211
+ "xmlns:p": H,
212
+ "xmlns:r": hr,
213
+ ...i ? { "xmlns:p14": pr } : {}
214
+ },
215
+ spids: { [String(s)]: s },
216
+ ...y.length ? { relationships: y } : {},
217
+ ...$.length ? { resources: $ } : {}
218
+ };
219
+ }
220
+ const Se = (e) => {
221
+ var t;
222
+ return !!(e.field || (t = e.math) != null && t.length || e.outline || e.gradient || e.gradientFill || e.shadow || e.shadowEffect || e.underlineColor);
223
+ };
224
+ function Je(e) {
225
+ var n;
226
+ if ((n = e.generationIssues) != null && n.length) throw new Error(`文字来源语义无法重建:${e.generationIssues.join("、")}`);
227
+ if (e.gradient && !e.gradientFill) throw new Error("文字渐变缺少 gradientFill 结构值");
228
+ if (e.shadow && !e.shadowEffect) throw new Error("文字阴影缺少 shadowEffect 结构值");
229
+ const t = e.gradientFill;
230
+ if (t && (!Number.isFinite(t.angle) || t.angle < 0 || t.angle >= 360 || t.stops.length < 2 || t.stops.some((r) => !Number.isFinite(r.pos) || r.pos < 0 || r.pos > 1)))
231
+ throw new Error("文字渐变角度或色标无效");
232
+ if (t && e.gradient) {
233
+ const r = `linear-gradient(${Math.round(t.angle + 90)}deg,${t.stops.map((a) => `${a.color} ${Math.round(a.pos * 100)}%`).join(",")})`;
234
+ if (e.gradient !== r) throw new Error("文字渐变 CSS 与结构值不一致");
235
+ }
236
+ if (e.outline && (!Number.isFinite(e.outline.width) || e.outline.width < 0)) throw new Error("文字描边宽度无效");
237
+ const s = e.shadowEffect;
238
+ if (s && (s.inner || ![s.dx, s.dy, s.blur].every(Number.isFinite) || s.blur < 0))
239
+ throw new Error("文字仅支持有效的外阴影");
240
+ if (s && e.shadow && e.shadow !== `${s.dx}px ${s.dy}px ${s.blur}px ${s.color}`)
241
+ throw new Error("文字阴影 CSS 与结构值不一致");
242
+ }
243
+ function wr(e, t) {
244
+ Je(t);
245
+ const s = (n, r) => {
246
+ const a = ut(n, _, r);
247
+ return Zt(n, a), a;
248
+ };
249
+ if (t.outline) {
250
+ const n = s(e, "ln");
251
+ G(n, "w", String(Math.round(t.outline.width * 9525))), Ee(s(n, "solidFill"), t.outline.color);
252
+ }
253
+ if (t.gradientFill) {
254
+ Xe(e), pt(e, { type: "gradient", ...t.gradientFill });
255
+ const n = Oe(e, { localName: "gradFill" });
256
+ G(Oe(n, { localName: "lin" }), "scaled", t.gradientFill.scaled ? "1" : "0");
257
+ }
258
+ t.shadowEffect && mt(s(e, "effectLst"), t.shadowEffect), t.underlineColor && Ee(s(s(e, "uFill"), "solidFill"), t.underlineColor);
259
+ }
260
+ function br(e, t, s, n) {
261
+ var o, i;
262
+ const r = (o = t.editInfo) == null ? void 0 : o.bullet, a = r && r.kind !== "none" ? {
263
+ ...r.color !== void 0 ? { color: r.color } : {},
264
+ ...r.font !== void 0 ? { font: r.font } : {},
265
+ ...r.size !== void 0 ? { size: r.size } : {}
266
+ } : {};
267
+ if (t.bulletImage || (r == null ? void 0 : r.kind) === "image") {
268
+ const c = t.bulletImage ?? ((r == null ? void 0 : r.kind) === "image" ? r.src : null);
269
+ if (!c) throw new Error("生成保存的图片项目符号缺少资源来源");
270
+ const l = ae(
271
+ e,
272
+ { src: c },
273
+ `${n.relationshipPrefix}P${s + 1}`,
274
+ n.part
275
+ );
276
+ if (!l.resource) throw new Error("外链图片项目符号不能生成独立包");
277
+ n.resources.set(l.resource.hash, l.resource);
278
+ const m = ye(l.resource.hash);
279
+ return {
280
+ bullet: { kind: "blip", image: { src: m }, ...a },
281
+ image: { src: m, relationships: [l.relationship], resourceHash: l.resource.hash }
282
+ };
283
+ }
284
+ return (r == null ? void 0 : r.kind) === "autoNum" ? {
285
+ bullet: {
286
+ kind: "autoNum",
287
+ type: r.type,
288
+ startAt: r.startAt,
289
+ ...a
290
+ }
291
+ } : (r == null ? void 0 : r.kind) === "char" ? { bullet: { kind: "char", char: r.char, ...a } } : t.bullet !== null ? {
292
+ bullet: { kind: "char", char: t.bullet, ...a }
293
+ } : (i = t.editInfo) != null && i.directLayout && t.editInfo.directLayout & qt.bullet ? { bullet: { kind: "none" } } : {};
294
+ }
295
+ function je(e, t, s, n, r = !1) {
296
+ if (!s) return;
297
+ for (const i of s.paragraphs)
298
+ for (const c of i.runs)
299
+ Je(c);
300
+ const a = dt(s), o = s.autoFitShape ? "shape" : s.autoFitNormal ? "normal" : "none";
301
+ return {
302
+ ...a,
303
+ bodyOverrides: {
304
+ anchor: s.anchor,
305
+ insets: s.insets,
306
+ wrap: s.wrap,
307
+ vert: s.vert ?? "horz",
308
+ anchorCtr: s.anchorCtr ?? !1,
309
+ columns: s.columns ?? 1,
310
+ columnGap: s.columnGap ?? 0,
311
+ autoFit: o
312
+ },
313
+ paragraphs: a.paragraphs.map((i, c) => {
314
+ const l = br(e, s.paragraphs[c], c, n);
315
+ return {
316
+ ...i,
317
+ sourceParagraph: s.paragraphs[c].runs.some((m) => {
318
+ var d;
319
+ return (d = m.math) == null ? void 0 : d.length;
320
+ }) ? c : void 0,
321
+ paragraphOverrides: {
322
+ align: i.props.align,
323
+ lineHeight: i.props.lineHeight,
324
+ spaceBefore: i.props.spaceBefore,
325
+ spaceAfter: i.props.spaceAfter,
326
+ marginLeft: i.props.marL,
327
+ indent: i.props.indent,
328
+ ...l.bullet ? { bullet: l.bullet } : {}
329
+ },
330
+ ...l.image ? { bulletImageOverride: l.image } : {},
331
+ marks: i.marks.map((m, d) => {
332
+ var h, g;
333
+ const u = s.paragraphs[c], p = u == null ? void 0 : u.runs[d], f = (((h = u == null ? void 0 : u.editInfo) == null ? void 0 : h.directRun) ?? 0) | (((g = p == null ? void 0 : p.editInfo) == null ? void 0 : g.direct) ?? 0), y = m.props.underline ?? (m.props.u ? "sng" : "none"), $ = m.props.strikeType ?? (m.props.strike ? "sngStrike" : "noStrike"), x = !!p && Se(p);
334
+ return {
335
+ ...m,
336
+ source: x ? { paragraph: c, run: d } : void 0,
337
+ preserveSource: x ? !0 : void 0,
338
+ // 生成包不再拥有原主题继承链;表样式控制的 b/color 只有真实直设才固定。
339
+ runOverrides: {
340
+ size: m.props.size,
341
+ ...!r || f & J.b ? { b: m.props.b } : {},
342
+ ...r && f & J.color && !m.props.gradientFill ? { color: m.props.color } : {},
343
+ i: m.props.i,
344
+ ...y !== "none" ? { underline: y } : {},
345
+ ...$ !== "noStrike" ? { strikeType: $ } : {},
346
+ ...m.props.highlight ? { highlight: m.props.highlight } : {},
347
+ ...m.props.spacing ? { spacing: m.props.spacing } : {},
348
+ ...m.props.caps && m.props.caps !== "none" ? { caps: m.props.caps } : {},
349
+ ...m.props.baseline ? { baseline: m.props.baseline } : {},
350
+ ...m.props.link ? { link: Ke(e, t, m.props.link, "文字链接") } : {}
351
+ }
352
+ };
353
+ })
354
+ };
355
+ })
356
+ };
357
+ }
358
+ const vr = new Set(`textNoShape textPlain textStop textTriangle textTriangleInverted
359
+ textChevron textChevronInverted textRingInside textRingOutside textArchUp textArchDown
360
+ textCircle textButton textArchUpPour textArchDownPour textCirclePour textButtonPour
361
+ textCurveUp textCurveDown textCanUp textCanDown textWave1 textWave2 textDoubleWave1 textWave4
362
+ textInflate textDeflate textInflateBottom textDeflateBottom textInflateTop textDeflateTop
363
+ textDeflateInflate textDeflateInflateDeflate textFadeRight textFadeLeft textFadeUp textFadeDown
364
+ textSlantUp textSlantDown textCascadeUp textCascadeDown`.split(/\s+/));
365
+ function Sr(e) {
366
+ var s;
367
+ if (!e) return "";
368
+ if ((s = e.generationIssues) != null && s.length) throw new Error(e.generationIssues.join("、"));
369
+ if (!vr.has(e.preset) || Object.entries(e.adj).some(([n, r]) => !/^[A-Za-z][\w]*$/.test(n) || !Number.isSafeInteger(r)))
370
+ throw new Error("艺术字预设或调整值无效");
371
+ const t = Object.entries(e.adj).map(([n, r]) => `<a:gd name="${n}" fmla="val ${r}"/>`).join("");
372
+ return `<a:prstTxWarp prst="${e.preset}"><a:avLst>${t}</a:avLst></a:prstTxWarp>`;
373
+ }
374
+ const et = (e) => e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;"), F = (e, t) => `<m:${e} m:val="${et(t)}"/>`;
375
+ function tt(e, t = 0) {
376
+ if (t > 14) throw new Error("公式嵌套超出可往返深度");
377
+ const s = (n, r) => `<m:${n}>${tt(r, t + 1)}</m:${n}>`;
378
+ return e.map((n) => {
379
+ switch (n.kind) {
380
+ case "run":
381
+ if (n.sty && !["p", "i", "b", "bi"].includes(n.sty)) throw new Error("公式字形样式无效");
382
+ return `<m:r><m:rPr>${F("sty", n.sty ?? "i")}</m:rPr><m:t xml:space="preserve">${et(n.text)}</m:t></m:r>`;
383
+ case "frac":
384
+ if (n.type && !["bar", "noBar", "skw", "lin"].includes(n.type)) throw new Error("分式类型无效");
385
+ return `<m:f><m:fPr>${F("type", n.type ?? "bar")}</m:fPr>${s("num", n.num)}${s("den", n.den)}</m:f>`;
386
+ case "rad":
387
+ return `<m:rad><m:radPr>${F("degHide", n.deg.length ? "0" : "1")}</m:radPr>${s("deg", n.deg)}${s("e", n.base)}</m:rad>`;
388
+ case "script": {
389
+ if (n.sub === void 0 && n.sup === void 0) throw new Error("公式脚标缺少上标或下标");
390
+ const r = n.sub !== void 0 && n.sup !== void 0 ? "sSubSup" : n.sub !== void 0 ? "sSub" : "sSup";
391
+ return `<m:${r}>${s("e", n.base)}${n.sub !== void 0 ? s("sub", n.sub) : ""}${n.sup !== void 0 ? s("sup", n.sup) : ""}</m:${r}>`;
392
+ }
393
+ case "nary":
394
+ return `<m:nary><m:naryPr>${F("chr", n.chr)}${F("limLoc", n.underOver ? "undOvr" : "subSup")}${F("subHide", n.sub.length ? "0" : "1")}${F("supHide", n.sup.length ? "0" : "1")}</m:naryPr>${s("sub", n.sub)}${s("sup", n.sup)}${s("e", n.base)}</m:nary>`;
395
+ case "delim":
396
+ return `<m:d><m:dPr>${F("begChr", n.beg)}${F("endChr", n.end)}${F("sepChr", n.sep)}</m:dPr>${n.items.map((r) => s("e", r)).join("")}</m:d>`;
397
+ case "matrix":
398
+ if (!n.rows.length || !n.rows[0].length || n.rows.some((r) => r.length !== n.rows[0].length)) throw new Error("公式矩阵必须为非空矩形");
399
+ return `<m:m>${n.rows.map((r) => `<m:mr>${r.map((a) => s("e", a)).join("")}</m:mr>`).join("")}</m:m>`;
400
+ case "acc": {
401
+ const r = n.chr === "̅", a = r ? "bar" : n.below !== void 0 ? "groupChr" : "acc";
402
+ return `<m:${a}><m:${a}Pr>${r ? "" : F("chr", n.chr)}${a !== "acc" ? F("pos", n.below ? "bot" : "top") : ""}</m:${a}Pr>${s("e", n.base)}</m:${a}>`;
403
+ }
404
+ case "lim": {
405
+ const r = n.below ? "limLow" : "limUpp";
406
+ return `<m:${r}>${s("e", n.base)}${s("lim", n.limit)}</m:${r}>`;
407
+ }
408
+ case "stack":
409
+ return `<m:eqArr>${n.rows.map((r) => s("e", r)).join("")}</m:eqArr>`;
410
+ default:
411
+ throw new Error(`不支持的公式节点:${String(n.kind)}`);
412
+ }
413
+ }).join("");
414
+ }
415
+ const De = (e) => e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
416
+ function Ir(e, t, s, n) {
417
+ const r = `${e}:${t}:${s}:${n}`;
418
+ let a = 2166136261, o = 2654435769;
419
+ for (let l = 0; l < r.length; l++)
420
+ a = Math.imul(a ^ r.charCodeAt(l), 16777619) >>> 0, o = Math.imul(o ^ r.charCodeAt(l), 2246822507) >>> 0;
421
+ const i = a.toString(16).padStart(8, "0"), c = o.toString(16).padStart(8, "0");
422
+ return `{00000000-0000-0000-${i.slice(0, 4)}-${i.slice(4)}${c}}`.toUpperCase();
423
+ }
424
+ function Pr(e, t) {
425
+ var a, o;
426
+ const s = R(`<a:rPr xmlns:a="${_}"/>`).root, { text: n, ...r } = e;
427
+ if (ft(s, { to: e.text.length, props: r }), wr(s, e), t) {
428
+ const i = (((a = t.editInfo) == null ? void 0 : a.directRun) ?? 0) | (((o = e.editInfo) == null ? void 0 : o.direct) ?? 0);
429
+ i & J.b || Ve(s, "b"), !(i & J.color) && !e.gradientFill && Xe(s);
430
+ }
431
+ return Ye(s);
432
+ }
433
+ function rt(e, t, s, n = "p", r = !1) {
434
+ const a = e.paragraphs.map((o, i) => {
435
+ const c = (p) => Pr(p, r ? o : void 0), l = o.runs.filter((p) => {
436
+ var f;
437
+ return (f = p.math) == null ? void 0 : f.length;
438
+ }).map(c);
439
+ if (l.some((p) => p !== l[0]))
440
+ throw new Error(`段落 ${i + 1} 的公式需要不同字符属性,当前不能共用段落默认值`);
441
+ const m = o.runs.map((p, f) => {
442
+ var x;
443
+ const y = De(p.text);
444
+ if ((x = p.math) != null && x.length) {
445
+ const h = `<m:oMath xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">${tt(p.math)}</m:oMath>`;
446
+ return `<a14:m xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main">${o.runs.length === 1 ? `<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">${h}</m:oMathPara>` : h}</a14:m>`;
447
+ }
448
+ return p.field ? `<a:fld id="${Ir(t, s, i, f)}" type="${De(p.field)}">${c(p)}<a:t>${y}</a:t></a:fld>` : `<a:r>${Se(p) ? c(p) : ""}<a:t>${y}</a:t></a:r>`;
449
+ }).join(""), d = o.runs.find((p) => {
450
+ var f;
451
+ return (f = p.math) == null ? void 0 : f.length;
452
+ });
453
+ return `<a:p>${d ? `<a:pPr lvl="${o.lvl}" rtl="${o.rtl ? "1" : "0"}">${c(d).replace(/a:rPr/g, "a:defRPr")}</a:pPr>` : ""}${m}<a:endParaRPr/></a:p>`;
454
+ }).join("");
455
+ return `<${n}:txBody><a:bodyPr>${Sr(e.warp)}</a:bodyPr><a:lstStyle/>${a}</${n}:txBody>`;
456
+ }
457
+ const _e = (e) => e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;"), Er = {
458
+ anchor: "top",
459
+ insets: [4.8, 9.6, 4.8, 9.6],
460
+ wrap: !0,
461
+ fontScale: 1,
462
+ paragraphs: [{
463
+ align: "left",
464
+ lvl: 0,
465
+ marL: 0,
466
+ indent: 0,
467
+ bullet: null,
468
+ lineHeight: null,
469
+ spaceBefore: 0,
470
+ spaceAfter: 0,
471
+ runs: [{
472
+ text: "",
473
+ b: !1,
474
+ i: !1,
475
+ u: !1,
476
+ strike: !1,
477
+ size: 18,
478
+ color: "#000000",
479
+ fonts: []
480
+ }]
481
+ }]
482
+ };
483
+ function Cr(e, t, s) {
484
+ var n;
485
+ for (let r = 0; r <= t; r++)
486
+ for (let a = 0; a <= s; a++) {
487
+ const o = (n = e[r]) == null ? void 0 : n.cells[a];
488
+ if (!(o != null && o.merged) && r + o.rowSpan > t && a + o.colSpan > s) return { row: r, column: a };
489
+ }
490
+ return null;
491
+ }
492
+ function Tr(e, t, s, n) {
493
+ var p, f, y, $, x, h;
494
+ const r = e[t].cells[s], a = [];
495
+ if (!r.merged)
496
+ r.colSpan > 1 && a.push(`gridSpan="${r.colSpan}"`), r.rowSpan > 1 && a.push(`rowSpan="${r.rowSpan}"`);
497
+ else {
498
+ const g = Cr(e, t, s);
499
+ if (!g) throw new Error(`表格合并占位格缺少起始格:${t},${s}`);
500
+ s > g.column && a.push('hMerge="1"'), t > g.row && a.push('vMerge="1"');
501
+ }
502
+ const o = n ? (p = r.editInfo) == null ? void 0 : p.styleBase : void 0, i = (o == null ? void 0 : o.textTemplate) ?? (o == null ? void 0 : o.text), c = i == null ? void 0 : i.paragraphs[0], l = c == null ? void 0 : c.runs[0], m = (((f = c == null ? void 0 : c.editInfo) == null ? void 0 : f.directRun) ?? 0) | (((y = l == null ? void 0 : l.editInfo) == null ? void 0 : y.direct) ?? 0), d = o ? {
503
+ ...r,
504
+ fill: structuredClone(o.fill),
505
+ borders: structuredClone(o.borders),
506
+ text: structuredClone(o.text),
507
+ editInfo: {
508
+ ...r.editInfo,
509
+ ...o.textTemplate ? { textTemplate: structuredClone(o.textTemplate) } : {}
510
+ }
511
+ } : r;
512
+ let u = gt({
513
+ ...d,
514
+ ...!(($ = d.editInfo) != null && $.textTemplate) && !((h = (x = d.text) == null ? void 0 : x.paragraphs[0]) != null && h.runs[0]) ? { editInfo: { textTemplate: Er } } : {}
515
+ }, {
516
+ sparseAppearance: !0,
517
+ ...o ? {
518
+ omitTextBold: !(m & J.b),
519
+ omitTextColor: !(m & J.color)
520
+ } : {}
521
+ });
522
+ return r.text && (r.text.warp || r.text.paragraphs.some((g) => g.runs.some(Se))) && (u = u.replace(
523
+ /<a:txBody>[\s\S]*?<\/a:txBody>/,
524
+ rt(r.text, `table/${t}/${s}`, 1, "a", !!o)
525
+ )), a.length ? u.replace("<a:tc>", `<a:tc ${a.join(" ")}>`) : u;
526
+ }
527
+ function kr(e, t) {
528
+ var m, d;
529
+ const s = e.src;
530
+ if (s.kind !== "table") throw new Error(`元素 ${e.id} 不是表格`);
531
+ const n = s.colWidths.map((u) => `<a:gridCol w="${Math.round(u * 9525)}"/>`).join(""), r = !!((m = s.editInfo) != null && m.tableStyle), a = s.rows.map((u, p) => `<a:tr h="${Math.round(u.height * 9525)}">${u.cells.map((f, y) => Tr(s.rows, p, y, r)).join("")}</a:tr>`).join(""), o = _e(s.name ?? `表格 ${t}`), i = (d = s.editInfo) == null ? void 0 : d.tableStyle, c = i ? [
532
+ "firstRow",
533
+ "lastRow",
534
+ "bandRow",
535
+ "firstCol",
536
+ "lastCol",
537
+ "bandCol"
538
+ ].filter((u) => i[u]).map((u) => `${u}="1"`).join(" ") : "", l = i ? `<a:tblPr${c ? ` ${c}` : ""}><a:tableStyleId>${_e(i.styleId)}</a:tableStyleId></a:tblPr>` : "<a:tblPr/>";
539
+ return {
540
+ markup: `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id="${t}" name="${o}"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>
541
+ <p:xfrm/><a:graphic><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table"><a:tbl>
542
+ ${l}<a:tblGrid>${n}</a:tblGrid>${a}</a:tbl></a:graphicData></a:graphic></p:graphicFrame>`,
543
+ namespaces: { "xmlns:a": _, "xmlns:p": H, "xmlns:r": ve },
544
+ spids: { [String(t)]: t }
545
+ };
546
+ }
547
+ function Mr(e) {
548
+ var s;
549
+ const t = /* @__PURE__ */ new Map();
550
+ for (const n of Object.values(e.elements)) {
551
+ const r = n.src.kind === "table" ? (s = ue(e, n.id).editInfo) == null ? void 0 : s.tableStyle : void 0;
552
+ if (!r) continue;
553
+ const a = ht(e, n.id, r.styleId);
554
+ if (!a) throw new Error(`表格 ${n.id} 的样式定义不存在:${r.styleId}`);
555
+ t.set(a.styleId.toUpperCase(), a);
556
+ }
557
+ return [...t.values()];
558
+ }
559
+ const D = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
560
+ `, q = "http://schemas.openxmlformats.org/drawingml/2006/main", re = "http://schemas.openxmlformats.org/presentationml/2006/main", P = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", Fr = "http://schemas.openxmlformats.org/package/2006/relationships", Lr = "http://schemas.openxmlformats.org/package/2006/content-types", Or = new TextEncoder(), k = (e) => Or.encode(e), W = (e) => e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
561
+ function Nr(e, t) {
562
+ var n;
563
+ const s = (n = /^rgb\((\d+),(\d+),(\d+)\)$/.exec(e)) == null ? void 0 : n.slice(1).map(Number);
564
+ if (!s || s.some((r) => r < 0 || r > 255))
565
+ throw new Error(`${t} 不是有效主题颜色`);
566
+ return s.map((r) => r.toString(16).padStart(2, "0")).join("").toUpperCase();
567
+ }
568
+ function Rr(e) {
569
+ return e ? Wt.map((t) => `<a:${t}><a:srgbClr val="${Nr(e.colors[t], `主题 ${t}`)}"/></a:${t}>`).join("") : `<a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1>
570
+ <a:dk2><a:srgbClr val="1F3864"/></a:dk2><a:lt2><a:srgbClr val="F2F2F2"/></a:lt2>
571
+ <a:accent1><a:srgbClr val="4472C4"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2>
572
+ <a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4>
573
+ <a:accent5><a:srgbClr val="5B9BD5"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6>
574
+ <a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink>`;
575
+ }
576
+ function Be(e) {
577
+ const t = `<a:latin typeface="${W(e.latin)}"/><a:ea typeface="${W(e.ea)}"/><a:cs typeface="${W(e.cs)}"/>`, s = Object.entries(e.scripts).sort(([n], [r]) => n < r ? -1 : n > r ? 1 : 0).map(([n, r]) => `<a:font script="${W(n)}" typeface="${W(r)}"/>`).join("");
578
+ return t + s;
579
+ }
580
+ function N(e, t) {
581
+ const s = Math.round(e * 9525);
582
+ if (!Number.isSafeInteger(s)) throw new Error(`${t} 超出 OOXML 安全整数范围`);
583
+ return String(s);
584
+ }
585
+ const X = (e) => `${D}<Relationships xmlns="${Fr}">${e}</Relationships>`, pe = `<p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
586
+ <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>`;
587
+ function oe(e, t, s, n, r) {
588
+ const a = `<p:ph type="${s}"${r === void 0 ? "" : ` idx="${r}"`}/>`;
589
+ return `<p:sp><p:nvSpPr><p:cNvPr id="${e}" name="${t}"/><p:cNvSpPr/><p:nvPr>${a}</p:nvPr></p:nvSpPr>
590
+ <p:spPr><a:xfrm><a:off x="${N(n.x, `${t} x`)}" y="${N(n.y, `${t} y`)}"/><a:ext cx="${N(n.w, `${t} 宽度`)}" cy="${N(n.h, `${t} 高度`)}"/></a:xfrm></p:spPr>
591
+ <p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="zh-CN"/></a:p></p:txBody></p:sp>`;
592
+ }
593
+ function Ar(e, t, s) {
594
+ return `<p:sp><p:nvSpPr><p:cNvPr id="${e}" name="页码"/><p:cNvSpPr/><p:nvPr><p:ph type="sldNum" idx="12"/></p:nvPr></p:nvSpPr>
595
+ <p:spPr><a:xfrm><a:off x="${N(s.x, "页码 x")}" y="${N(s.y, "页码 y")}"/><a:ext cx="${N(s.w, "页码宽度")}" cy="${N(s.h, "页码高度")}"/></a:xfrm></p:spPr>
596
+ <p:txBody><a:bodyPr anchor="ctr"/><a:lstStyle/><a:p><a:pPr algn="r"/><a:fld id="{00000000-0000-0000-0000-${String(t).padStart(12, "0")}}" type="slidenum"><a:rPr lang="zh-CN" sz="1100"/><a:t>1</a:t></a:fld><a:endParaRPr lang="zh-CN" sz="1100"/></a:p></p:txBody></p:sp>`;
597
+ }
598
+ function jr(e, t) {
599
+ const s = e / 1280, n = t / 720, r = (o, i, c, l) => ({
600
+ x: o * s,
601
+ y: i * n,
602
+ w: c * s,
603
+ h: l * n
604
+ }), a = (o, i) => Ar(o, i, r(1120, 662, 96, 34));
605
+ return [
606
+ {
607
+ part: 1,
608
+ type: "title",
609
+ name: "标题页",
610
+ shapes: oe(2, "标题", "ctrTitle", r(120, 196, 1040, 154)) + oe(3, "副标题", "subTitle", r(200, 374, 880, 92), 1) + a(4, 1)
611
+ },
612
+ {
613
+ part: 2,
614
+ type: "obj",
615
+ name: "标题和内容",
616
+ shapes: oe(2, "标题", "title", r(80, 52, 1120, 92)) + oe(3, "内容", "body", r(96, 166, 1088, 446), 1) + a(4, 2)
617
+ },
618
+ { part: 3, type: "blank", name: "空白", shapes: a(2, 3) }
619
+ ];
620
+ }
621
+ function st(e, t, s = 0, n = [], r) {
622
+ const a = /* @__PURE__ */ Object.create(null), o = n.some(Boolean), i = Array.from({ length: s }, (p, f) => `<Override PartName="/ppt/slides/slide${f + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/>`).join(`
623
+ `), c = n.map((p, f) => p ? `<Override PartName="/ppt/notesSlides/notesSlide${f + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"/>` : "").filter(Boolean).join(`
624
+ `);
625
+ a["[Content_Types].xml"] = k(`${D}<Types xmlns="${Lr}">
626
+ <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
627
+ <Default Extension="xml" ContentType="application/xml"/>
628
+ <Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/>
629
+ <Override PartName="/ppt/slideMasters/slideMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"/>
630
+ <Override PartName="/ppt/slideLayouts/slideLayout1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
631
+ <Override PartName="/ppt/slideLayouts/slideLayout2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
632
+ <Override PartName="/ppt/slideLayouts/slideLayout3.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
633
+ <Override PartName="/ppt/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
634
+ ${i}
635
+ ${c}
636
+ ${o ? '<Override PartName="/ppt/notesMasters/notesMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml"/>' : ""}
637
+ </Types>`), a["_rels/.rels"] = k(X(
638
+ `<Relationship Id="rId1" Type="${P}/officeDocument" Target="ppt/presentation.xml"/>`
639
+ )), a["ppt/presentation.xml"] = k(`${D}<p:presentation xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
640
+ <p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="rId1"/></p:sldMasterIdLst>
641
+ ${o ? `<p:notesMasterIdLst><p:notesMasterId r:id="rId${s + 2}"/></p:notesMasterIdLst>` : ""}
642
+ <p:sldIdLst>${Array.from({ length: s }, (p, f) => `<p:sldId id="${256 + f}" r:id="rId${f + 2}"/>`).join("")}</p:sldIdLst>
643
+ <p:sldSz cx="${N(e, "页面宽度")}" cy="${N(t, "页面高度")}"/>
644
+ <p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle/></p:presentation>`), a["ppt/_rels/presentation.xml.rels"] = k(X(
645
+ `<Relationship Id="rId1" Type="${P}/slideMaster" Target="slideMasters/slideMaster1.xml"/>` + Array.from({ length: s }, (p, f) => `<Relationship Id="rId${f + 2}" Type="${P}/slide" Target="slides/slide${f + 1}.xml"/>`).join("") + (o ? `<Relationship Id="rId${s + 2}" Type="${P}/notesMaster" Target="notesMasters/notesMaster1.xml"/>` : "")
646
+ ));
647
+ const l = W((r == null ? void 0 : r.name) ?? "Web PPT"), m = r ? Be(r.fonts.major) : '<a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/>', d = r ? Be(r.fonts.minor) : '<a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/>';
648
+ a["ppt/theme/theme1.xml"] = k(`${D}<a:theme xmlns:a="${q}" name="${l}">
649
+ <a:themeElements><a:clrScheme name="${l}">
650
+ ${Rr(r)}
651
+ </a:clrScheme><a:fontScheme name="${l}">
652
+ <a:majorFont>${m}</a:majorFont>
653
+ <a:minorFont>${d}</a:minorFont>
654
+ </a:fontScheme><a:fmtScheme name="Web PPT">
655
+ <a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:fillStyleLst>
656
+ <a:lnStyleLst><a:ln w="6350"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:ln><a:ln w="12700"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:ln><a:ln w="19050"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:ln></a:lnStyleLst>
657
+ <a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle></a:effectStyleLst>
658
+ <a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:bgFillStyleLst>
659
+ </a:fmtScheme></a:themeElements></a:theme>`), a["ppt/slideMasters/slideMaster1.xml"] = k(`${D}<p:sldMaster xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
660
+ <p:cSld><p:bg><p:bgPr><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill><a:effectLst/></p:bgPr></p:bg><p:spTree>${pe}</p:spTree></p:cSld>
661
+ <p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
662
+ <p:sldLayoutIdLst><p:sldLayoutId id="2147483649" r:id="rId1"/><p:sldLayoutId id="2147483650" r:id="rId2"/><p:sldLayoutId id="2147483651" r:id="rId3"/></p:sldLayoutIdLst>
663
+ <p:txStyles><p:titleStyle/><p:bodyStyle/><p:otherStyle/></p:txStyles></p:sldMaster>`), a["ppt/slideMasters/_rels/slideMaster1.xml.rels"] = k(X(
664
+ `<Relationship Id="rId1" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId2" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout2.xml"/><Relationship Id="rId3" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout3.xml"/><Relationship Id="rId4" Type="${P}/theme" Target="../theme/theme1.xml"/>`
665
+ ));
666
+ const u = jr(e, t);
667
+ for (const p of u)
668
+ a[`ppt/slideLayouts/slideLayout${p.part}.xml`] = k(`${D}<p:sldLayout xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}" type="${p.type}" showMasterSp="0">
669
+ <p:cSld name="${p.name}"><p:spTree>${pe}${p.shapes}</p:spTree></p:cSld>
670
+ <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`), a[`ppt/slideLayouts/_rels/slideLayout${p.part}.xml.rels`] = k(X(
671
+ `<Relationship Id="rId1" Type="${P}/slideMaster" Target="../slideMasters/slideMaster1.xml"/>`
672
+ ));
673
+ o && (a["ppt/notesMasters/notesMaster1.xml"] = k(`${D}<p:notesMaster xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
674
+ <p:cSld><p:spTree>${pe}</p:spTree></p:cSld>
675
+ <p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
676
+ <p:hf/><p:notesStyle/></p:notesMaster>`), a["ppt/notesMasters/_rels/notesMaster1.xml.rels"] = k(X(
677
+ `<Relationship Id="rId1" Type="${P}/theme" Target="../theme/theme1.xml"/>`
678
+ )));
679
+ for (let p = 0; p < s; p++)
680
+ a[`ppt/slides/slide${p + 1}.xml`] = k(nt()), a[`ppt/slides/_rels/slide${p + 1}.xml.rels`] = k(X(
681
+ `<Relationship Id="rId1" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout3.xml"/>`
682
+ ));
683
+ return a;
684
+ }
685
+ function nt() {
686
+ return `${D}<p:sld xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
687
+ <p:cSld><p:spTree>${pe}</p:spTree></p:cSld>
688
+ <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld>`;
689
+ }
690
+ function Dr(e, t) {
691
+ const s = /* @__PURE__ */ new Set([1]), n = /* @__PURE__ */ new Map();
692
+ let r = 2;
693
+ const a = (o) => {
694
+ const i = e[o].src.id;
695
+ let c = i && Number.isSafeInteger(i) && i > 1 && !s.has(i) ? i : 0;
696
+ for (; !c && s.has(r); ) r++;
697
+ c || (c = r++), s.add(c), n.set(o, c);
698
+ for (const l of e[o].children ?? []) a(l);
699
+ };
700
+ for (const o of t) a(o);
701
+ return n;
702
+ }
703
+ function _r(e, t) {
704
+ const s = /* @__PURE__ */ Object.create(null), n = [];
705
+ let r = 0;
706
+ const a = () => {
707
+ let c;
708
+ do
709
+ c = `${t}-layout-${++r}`;
710
+ while (e.elements[c] || s[c]);
711
+ return c;
712
+ }, o = (c, l, m) => {
713
+ var p, f;
714
+ const d = a(), u = {
715
+ id: d,
716
+ parent: l,
717
+ z: we(m),
718
+ src: structuredClone(c),
719
+ ovr: {},
720
+ meta: {
721
+ editable: "full",
722
+ created: !0,
723
+ ...(p = c.editInfo) != null && p.geom ? { geom: structuredClone(c.editInfo.geom) } : {},
724
+ ...(f = c.editInfo) != null && f.customGeometry ? { customGeometry: structuredClone(c.editInfo.customGeometry) } : {}
725
+ }
726
+ };
727
+ return s[d] = u, c.kind === "group" && (u.children = c.children.map((y, $) => o(y, d, $))), d;
728
+ };
729
+ xt(e, t) && $t(e, t, (l) => ue(e, l)).filter((l) => {
730
+ var m;
731
+ return !((m = l.editInfo) != null && m.placeholder);
732
+ }).forEach((l, m) => n.push(o(l, t, m)));
733
+ const i = (c) => {
734
+ const l = e.elements[c];
735
+ if (!l) throw new Error(`生成保存找不到投影元素:${c}`);
736
+ s[c] = l;
737
+ for (const m of l.children ?? []) i(m);
738
+ };
739
+ for (const c of yt(e, t))
740
+ n.push(c), i(c);
741
+ return n.forEach((c, l) => {
742
+ const { order: m, ...d } = s[c];
743
+ s[c] = { ...d, z: we(l) };
744
+ }), { roots: n, sourceRecords: s };
745
+ }
746
+ const he = "ppt/slideMasters/slideMaster1.xml";
747
+ function at(e) {
748
+ return e.flatMap((t) => [
749
+ ...t.kind === "shape" && t.text ? [t.text] : [],
750
+ ...t.kind === "table" ? t.rows.flatMap((s) => s.cells.flatMap((n) => n.text ? [n.text] : [])) : [],
751
+ ...t.kind === "group" ? at(t.children) : []
752
+ ]);
753
+ }
754
+ function ot(e) {
755
+ return e.runs[e.runs.length - 1] ?? {
756
+ text: "",
757
+ b: !1,
758
+ i: !1,
759
+ u: !1,
760
+ strike: !1,
761
+ size: 18,
762
+ color: "rgb(0,0,0)",
763
+ fonts: []
764
+ };
765
+ }
766
+ function Br(e) {
767
+ var s;
768
+ const t = St((s = e.editInfo) == null ? void 0 : s.bullet);
769
+ return (t == null ? void 0 : t.kind) === "blip" ? { kind: "none" } : t || (e.bullet === null ? { kind: "none" } : { kind: "char", char: e.bullet });
770
+ }
771
+ function zr(e) {
772
+ return {
773
+ align: e.align,
774
+ lineHeight: e.lineHeight,
775
+ spaceBefore: e.spaceBefore,
776
+ spaceAfter: e.spaceAfter,
777
+ marginLeft: e.marL,
778
+ indent: e.indent,
779
+ bullet: Br(e)
780
+ };
781
+ }
782
+ function Gr(e) {
783
+ return vt(ot(e));
784
+ }
785
+ function ge(e) {
786
+ const t = e.paragraphs[0];
787
+ if (!t) throw new Error("生成母版文字默认值缺少段落来源");
788
+ return Object.fromEntries(Array.from({ length: 9 }, (s, n) => {
789
+ const r = e.paragraphs.find((a) => a.lvl === n) ?? t;
790
+ return [n, { paragraph: zr(r), run: Gr(r) }];
791
+ }));
792
+ }
793
+ function Hr() {
794
+ return {
795
+ anchor: "top",
796
+ insets: [0, 0, 0, 0],
797
+ wrap: !0,
798
+ fontScale: 1,
799
+ paragraphs: [{
800
+ align: "left",
801
+ lvl: 0,
802
+ marL: 0,
803
+ indent: 0,
804
+ bullet: null,
805
+ lineHeight: null,
806
+ spaceBefore: 0,
807
+ spaceAfter: 0,
808
+ runs: [ot({ runs: [] })]
809
+ }]
810
+ };
811
+ }
812
+ function Ur(e) {
813
+ const t = e.flatMap((o) => at(o.elements)), s = t[0] ?? Hr(), n = [...t].sort((o, i) => {
814
+ const c = (l) => Math.max(0, ...l.paragraphs.flatMap((m) => m.runs.map((d) => d.size)));
815
+ return c(i) - c(o);
816
+ }), r = n[0] ?? s, a = t.find((o) => o.paragraphs.length > 1) ?? n.find((o) => o !== r) ?? s;
817
+ return {
818
+ title: ge(r),
819
+ body: ge(a),
820
+ other: ge(s)
821
+ };
822
+ }
823
+ function Xr(e, t) {
824
+ const s = Vt(e, t);
825
+ return Object.fromEntries(Object.entries(s).map(([n, r]) => [
826
+ n,
827
+ Object.fromEntries(r.map((a) => {
828
+ const { level: o, ...i } = a.value.paragraph;
829
+ return [a.level, { paragraph: i, run: a.value.run }];
830
+ }))
831
+ ]));
832
+ }
833
+ function qr(e, t, s) {
834
+ var l, m, d;
835
+ const n = (l = e.slides[e.slideOrder[0]]) == null ? void 0 : l.layoutId, r = n ? (m = e.layouts[n]) == null ? void 0 : m.origin.masterPart : e.masterOrder[0], a = r ? e.masters[r] : void 0, o = a ? wt(a.ovr, "background") ? a.ovr.background : a.background : (d = t[0]) == null ? void 0 : d.background, i = (o == null ? void 0 : o.type) === "image" ? void 0 : o === null ? { type: "none" } : o, c = R(s[he]);
836
+ bt(c, {
837
+ id: he,
838
+ ovr: {
839
+ ...i ? { background: i } : {},
840
+ textStyles: a ? Xr(e, a.id) : Ur(t)
841
+ }
842
+ }), s[he] = Q(c);
843
+ }
844
+ const Wr = "http://schemas.openxmlformats.org/package/2006/relationships", B = (e, t) => {
845
+ var s;
846
+ return (s = ne(e, { localName: t, namespaceUri: null })) == null ? void 0 : s.value;
847
+ };
848
+ class Vr {
849
+ constructor(t) {
850
+ this.doc = t, this.parts = /* @__PURE__ */ new Map(), this.media = /* @__PURE__ */ new Map();
851
+ }
852
+ source(t) {
853
+ var s, n;
854
+ return ((s = this.media.get(t)) == null ? void 0 : s.bytes) ?? ((n = me(this.doc, `web-ppt-source:${t}`)) == null ? void 0 : n.bytes);
855
+ }
856
+ registerMedia(t) {
857
+ for (const s of t) {
858
+ const n = Qe(s), r = this.source(s.targetPart);
859
+ if (r && (r.length !== n.length || r.some((a, o) => a !== n[o])))
860
+ throw new Error(`兼容对象的图片资源冲突:${s.targetPart}`);
861
+ this.media.set(s.targetPart, { bytes: n, mime: s.mime });
862
+ }
863
+ }
864
+ relationships(t) {
865
+ const s = this.source(Y(t));
866
+ return s ? ee(R(s).root, {
867
+ localName: "Relationship",
868
+ namespaceUri: Wr
869
+ }).map((n) => {
870
+ const r = B(n, "Id"), a = B(n, "Type"), o = B(n, "Target"), i = B(n, "TargetMode");
871
+ if (!r || !a || !o || i && i !== "Internal" && i !== "External")
872
+ throw new Error(`兼容对象的关系无效:${t}`);
873
+ return {
874
+ sourceId: r,
875
+ targetId: r,
876
+ type: a,
877
+ target: o,
878
+ ...i === "External" ? { targetMode: "External" } : {}
879
+ };
880
+ }) : [];
881
+ }
882
+ retain(t) {
883
+ if (this.parts.has(t)) return;
884
+ const s = this.source(t);
885
+ if (!s) throw new Error(`兼容对象缺少原包依赖:${t}`);
886
+ this.parts.set(t, s);
887
+ const n = Y(t), r = this.source(n);
888
+ r && this.parts.set(n, r);
889
+ for (const a of this.relationships(t))
890
+ a.targetMode || this.retain(Ce(t, a.target));
891
+ }
892
+ relocate(t, s, n, r) {
893
+ if (t.targetMode) return { ...t, targetId: r };
894
+ const a = Ce(s, t.target);
895
+ this.retain(a);
896
+ const o = t.target.includes("#") ? t.target.slice(t.target.indexOf("#")) : "";
897
+ return { ...t, targetId: r, target: V(n, a) + o };
898
+ }
899
+ mergeInto(t) {
900
+ var a;
901
+ if (!this.parts.size) return;
902
+ const s = this.source("[Content_Types].xml");
903
+ if (!s) throw new Error("兼容对象缺少原包 Content-Types");
904
+ const n = ee(R(s).root), r = R(t["[Content_Types].xml"]);
905
+ for (const [o, i] of this.parts) {
906
+ const c = t[o];
907
+ if (c && (c.length !== i.length || c.some((u, p) => u !== i[p])))
908
+ throw new Error(`兼容对象依赖与生成包 part 冲突:${o}`);
909
+ if (c) continue;
910
+ const l = n.find((u) => u.localName === "Override" && B(u, "PartName") === `/${o}`), m = n.find((u) => {
911
+ var p;
912
+ return u.localName === "Default" && ((p = B(u, "Extension")) == null ? void 0 : p.toLowerCase()) === o.split(".").pop().toLowerCase();
913
+ }), d = ((a = this.media.get(o)) == null ? void 0 : a.mime) ?? B(l ?? m ?? r.root, "ContentType");
914
+ if (!d) throw new Error(`兼容对象依赖缺少 Content-Type:${o}`);
915
+ K(r.root, se("Override", {
916
+ attributes: [["PartName", `/${o}`], ["ContentType", d]]
917
+ })), t[o] = i;
918
+ }
919
+ t["[Content_Types].xml"] = Q(r);
920
+ }
921
+ }
922
+ function be(e, t) {
923
+ const s = e.namespaceUri === _ && ["stCxn", "endCxn"].includes(e.localName) ? "id" : e.namespaceUri === H && e.localName === "spTgt" ? "spid" : null;
924
+ if (s) {
925
+ const n = ne(e, { localName: s, namespaceUri: null }), r = n ? t[n.value] : void 0;
926
+ r !== void 0 && G(e, s, String(r));
927
+ }
928
+ for (const n of ee(e)) be(n, t);
929
+ }
930
+ function Yr(e, t, s, n, r, a) {
931
+ var S, C, E, U;
932
+ const o = t.meta.origin ?? ((S = t.src.editInfo) == null ? void 0 : S.origin);
933
+ if (!o) throw new Error(`兼容对象 ${t.id} 缺少原包来源`);
934
+ let i = t.parent;
935
+ for (; e.elements[i]; ) i = e.elements[i].parent;
936
+ const c = ((E = (C = e.slides[i]) == null ? void 0 : C.creation) == null ? void 0 : E.duplicateSourcePart) ?? o.part, l = It(e, t.id), m = ((U = l == null ? void 0 : l.meta.insertion) == null ? void 0 : U.containsDescendants) === !1 || l == null ? void 0 : l.meta.insertion, d = e.saveState.baselines[c] ?? a.source(c);
937
+ if (!m && !d) throw new Error(`兼容对象 ${t.id} 缺少原包来源`);
938
+ a.registerMedia((m == null ? void 0 : m.resources) ?? []);
939
+ const u = { ...t, meta: { ...t.meta, editable: "frame", origin: o } }, p = m ? Pt(e, l) : R(d), f = Et(p, u).host;
940
+ m && be(f, m.spids);
941
+ const y = {};
942
+ for (const v of Ct(p, u)) {
943
+ const T = ne(v, { localName: "id", namespaceUri: null }).value;
944
+ y[T] = n, G(v, "id", String(o.spid));
945
+ }
946
+ const $ = { [String(o.spid)]: n };
947
+ let x = 2;
948
+ for (const v of Yt(f))
949
+ if (!(v in $)) {
950
+ for (; r.has(x); ) x++;
951
+ $[v] = x, r.add(x++);
952
+ }
953
+ be(f, { ...$, ...y });
954
+ const h = {}, g = (v) => {
955
+ if (v !== f && !ee(v).some(g)) return !1;
956
+ for (const T of v.attributes)
957
+ T.namespaceUri === Jt && !(T.name in h) && (h[T.name] = T.value);
958
+ return !0;
959
+ };
960
+ g(p.root);
961
+ const b = (m == null ? void 0 : m.relationships) ?? a.relationships(c), M = Tt(f, !0).map((v, T) => {
962
+ const w = b.find((I) => I.targetId === v);
963
+ if (!w) throw new Error(`兼容对象缺少原包关系:${v}`);
964
+ return a.relocate(
965
+ { ...w, sourceId: v },
966
+ m ? o.part : c,
967
+ s,
968
+ `rIdCompat${n}_${T + 1}`
969
+ );
970
+ });
971
+ return {
972
+ markup: Ye(f),
973
+ namespaces: h,
974
+ spids: $,
975
+ relationships: M,
976
+ unmodeledSpids: Object.values($).filter((v) => v !== n)
977
+ };
978
+ }
979
+ const ze = "{C676402C-5697-4E1C-873F-D02D1690AC5C}", Qr = "http://schemas.microsoft.com/office/powerpoint/2012/main", Kr = (e, t) => {
980
+ var s;
981
+ return (s = ne(e, { localName: t, namespaceUri: null })) == null ? void 0 : s.value;
982
+ }, xe = (e, t) => ee(e, { localName: t });
983
+ function ie(e, t, s = {}) {
984
+ const n = se(t, { attributes: Object.entries(s) });
985
+ return K(e, n), n;
986
+ }
987
+ function Zr(e, t, s, n) {
988
+ G(e, "authorId", s.author), G(e, "idx", String(s.idx)), t.date ? G(e, "dt", t.date) : Ve(e, "dt");
989
+ for (const u of ["pos", "text"]) for (const p of xe(e, u)) Ne(e, p);
990
+ const r = e.prefix ? e.prefix + ":" : "", a = (u) => String(Math.round(u * 9525)), o = se(`${r}pos`, { attributes: [["x", a(t.x)], ["y", a(t.y)]] }), i = se(`${r}text`);
991
+ K(i, er(t.text));
992
+ const c = e.children[0] ?? null;
993
+ K(e, o, c), K(e, i, c);
994
+ let l = xe(e, "extLst")[0];
995
+ if (l)
996
+ for (const u of xe(l, "ext")) Kr(u, "uri") === ze && Ne(l, u);
997
+ if (!n) return;
998
+ l ?? (l = ie(e, `${r}extLst`));
999
+ const m = ie(l, `${r}ext`, { uri: ze }), d = ie(m, "p15:threadingInfo", { "xmlns:p15": Qr });
1000
+ ie(d, "p15:parentCm", { authorId: n.author, idx: String(n.idx) });
1001
+ }
1002
+ function $e(e, t, s = {}) {
1003
+ const n = se(t, { attributes: Object.entries(s) });
1004
+ return K(e, n), n;
1005
+ }
1006
+ function Jr(e, t) {
1007
+ var m;
1008
+ if (!t.some((d) => {
1009
+ var u;
1010
+ return (u = d.comments) == null ? void 0 : u.length;
1011
+ })) return;
1012
+ const s = (d) => R(`<?xml version="1.0" encoding="UTF-8"?><p:${d} xmlns:p="${H}"/>`), n = R(e["[Content_Types].xml"]), r = s("cmAuthorLst"), a = /* @__PURE__ */ new Map(), o = (d, u, p) => {
1013
+ const f = Y(d), y = e[f], $ = new Set(y ? ee(R(y).root).map((g) => {
1014
+ var b;
1015
+ return (b = ne(g, { localName: "Id" })) == null ? void 0 : b.value;
1016
+ }) : []);
1017
+ let x = 1;
1018
+ for (; $.has(`rId${x}`); ) x++;
1019
+ const h = `rId${x}`;
1020
+ e[f] = le(y, [{
1021
+ sourceId: h,
1022
+ targetId: h,
1023
+ type: `${ve}/${p}`,
1024
+ target: u
1025
+ }]);
1026
+ }, i = (d, u) => {
1027
+ $e(n.root, "Override", {
1028
+ PartName: `/${d}`,
1029
+ ContentType: `application/vnd.openxmlformats-officedocument.presentationml.${u}+xml`
1030
+ });
1031
+ };
1032
+ let c = 0;
1033
+ for (const [d, u] of t.entries()) {
1034
+ if (!((m = u.comments) != null && m.length)) continue;
1035
+ const p = s("cmLst"), f = /* @__PURE__ */ new Map();
1036
+ for (const [$, x] of u.comments.entries()) {
1037
+ const h = JSON.stringify([x.author, x.initials]);
1038
+ let g = a.get(h);
1039
+ g || (g = {
1040
+ id: String(a.size),
1041
+ last: 0,
1042
+ name: x.author,
1043
+ initials: x.initials
1044
+ }, a.set(h, g));
1045
+ const b = ++c;
1046
+ if (b > 4294967295) throw new Error("批注索引超出 OOXML 可表示范围");
1047
+ g.last = b, f.set(x.id ?? `source:${$}`, { author: g.id, idx: b });
1048
+ }
1049
+ for (const [$, x] of u.comments.entries()) {
1050
+ const h = $e(p.root, "p:cm");
1051
+ Zr(
1052
+ h,
1053
+ x,
1054
+ f.get(x.id ?? `source:${$}`),
1055
+ x.parentId ? f.get(x.parentId) : void 0
1056
+ );
1057
+ }
1058
+ const y = `ppt/comments/comment${d + 1}.xml`;
1059
+ if (e[y]) throw new Error(`生成批注 part 冲突:${y}`);
1060
+ e[y] = Q(p), i(y, "comments"), o(`ppt/slides/slide${d + 1}.xml`, `../comments/comment${d + 1}.xml`, "comments");
1061
+ }
1062
+ for (const d of a.values()) $e(r.root, "p:cmAuthor", {
1063
+ id: d.id,
1064
+ name: d.name,
1065
+ initials: d.initials ?? "",
1066
+ lastIdx: String(d.last),
1067
+ clrIdx: d.id
1068
+ });
1069
+ const l = "ppt/commentAuthors.xml";
1070
+ if (e[l]) throw new Error(`生成批注作者 part 冲突:${l}`);
1071
+ e[l] = Q(r), i(l, "commentAuthors"), o("ppt/presentation.xml", "commentAuthors.xml", "commentAuthors"), e["[Content_Types].xml"] = Q(n);
1072
+ }
1073
+ const Z = (e) => e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;"), es = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide", ts = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster", rs = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide";
1074
+ function ss(e, t, s, n, r) {
1075
+ var l, m, d, u;
1076
+ const a = s.src, o = e.elements[s.id] ? _t(e, s.id) : {
1077
+ title: ((m = (l = a.editInfo) == null ? void 0 : l.altText) == null ? void 0 : m.title) ?? "",
1078
+ descr: ((u = (d = a.editInfo) == null ? void 0 : d.altText) == null ? void 0 : u.descr) ?? ""
1079
+ }, i = {
1080
+ x: a.x,
1081
+ y: a.y,
1082
+ w: a.w,
1083
+ h: a.h,
1084
+ rot: a.rot,
1085
+ flipH: a.flipH,
1086
+ flipV: a.flipV,
1087
+ ...a.name ? { name: a.name } : {},
1088
+ ...a.effects ? { effects: a.effects } : {},
1089
+ ...o.title || o.descr ? {
1090
+ altText: { title: o.title, descr: o.descr }
1091
+ } : {},
1092
+ ...a.link && Bt(a.kind) ? { link: Ke(e, t, a.link, `元素 ${s.id} 链接`) } : {}
1093
+ }, c = (p = "") => {
1094
+ var f;
1095
+ return {
1096
+ part: n,
1097
+ relationshipPrefix: `rIdBullet${((f = s.meta.origin) == null ? void 0 : f.spid) ?? s.id}${p}`,
1098
+ resources: r
1099
+ };
1100
+ };
1101
+ if (a.kind === "shape") {
1102
+ const p = je(e, t, a.text, c());
1103
+ return {
1104
+ ...i,
1105
+ ...a.fill && a.fill.type !== "image" ? { fill: a.fill } : {},
1106
+ ...p ? { text: p } : {}
1107
+ };
1108
+ }
1109
+ if (a.kind === "image")
1110
+ return { ...i, ...a.crop ? { crop: a.crop } : {} };
1111
+ if (a.kind === "table") {
1112
+ const p = {};
1113
+ return a.rows.forEach((f, y) => f.cells.forEach(($, x) => {
1114
+ var g, b;
1115
+ const h = !$.merged && je(
1116
+ e,
1117
+ t,
1118
+ $.text,
1119
+ c(`R${y + 1}C${x + 1}`),
1120
+ !!((g = a.editInfo) != null && g.tableStyle) && !!((b = $.editInfo) != null && b.styleBase)
1121
+ );
1122
+ h && (p[zt({ r: y, c: x })] = { text: h });
1123
+ })), { ...i, ...Object.keys(p).length ? { tableCells: p } : {} };
1124
+ }
1125
+ return i;
1126
+ }
1127
+ function ns(e, t, s, n) {
1128
+ var p;
1129
+ const r = t.src;
1130
+ if (r.kind !== "shape") throw new Error(`生成保存暂不支持元素类型:${r.kind}`);
1131
+ const a = t.meta.geom, o = a == null ? void 0 : a.preset, i = Object.entries((a == null ? void 0 : a.adj) ?? {}).map(([f, y]) => {
1132
+ if (!Number.isSafeInteger(Math.round(y))) throw new Error(`形状 ${t.id} 的几何调整值无效`);
1133
+ return `<a:gd name="${Z(f)}" fmla="val ${Math.round(y)}"/>`;
1134
+ }).join(""), c = r.text ? rt(r.text, n, s) : "", l = Z(r.name ?? `形状 ${s}`), m = r.path === null, d = m ? "" : o ? `<a:prstGeom prst="${Z(o)}"><a:avLst>${i}</a:avLst></a:prstGeom>` : Ze(r.path, r.w, r.h, !!r.openGeom), u = ((p = r.fill) == null ? void 0 : p.type) === "image" ? ae(e, r.fill, `rIdFill${s}`, n) : null;
1135
+ if (u && !u.resource)
1136
+ throw new Error(`形状 ${t.id} 的外链图片填充不能生成独立包`);
1137
+ return {
1138
+ markup: `<p:sp><p:nvSpPr><p:cNvPr id="${s}" name="${l}"/><p:cNvSpPr${m ? ' txBox="1"' : ""}/><p:nvPr/></p:nvSpPr>
1139
+ <p:spPr><a:xfrm/>${d}</p:spPr>${c}</p:sp>`,
1140
+ namespaces: { "xmlns:a": _, "xmlns:p": H, "xmlns:r": ve },
1141
+ spids: { [String(s)]: s },
1142
+ ...u ? { relationships: [u.relationship] } : {},
1143
+ ...u != null && u.resource ? { resources: [u.resource] } : {}
1144
+ };
1145
+ }
1146
+ function j(e, t) {
1147
+ const s = Math.round(e * 9525);
1148
+ if (!Number.isSafeInteger(s)) throw new Error(`组合 ${t} 超出 OOXML 安全整数范围`);
1149
+ return String(s);
1150
+ }
1151
+ function as(e, t) {
1152
+ const s = e.src;
1153
+ if (s.kind !== "group") throw new Error(`元素 ${e.id} 不是组合`);
1154
+ const n = s.w / s.scaleX, r = s.h / s.scaleY, a = Z(s.name ?? `组合 ${t}`);
1155
+ return {
1156
+ markup: `<p:grpSp><p:nvGrpSpPr><p:cNvPr id="${t}" name="${a}"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
1157
+ <p:grpSpPr><a:xfrm><a:off x="${j(s.x, "x")}" y="${j(s.y, "y")}"/>
1158
+ <a:ext cx="${j(s.w, "w")}" cy="${j(s.h, "h")}"/>
1159
+ <a:chOff x="${j(s.childX, "childX")}" y="${j(s.childY, "childY")}"/>
1160
+ <a:chExt cx="${j(n, "childWidth")}" cy="${j(r, "childHeight")}"/>
1161
+ </a:xfrm></p:grpSpPr></p:grpSp>`,
1162
+ namespaces: { "xmlns:a": _, "xmlns:p": H },
1163
+ spids: { [String(t)]: t }
1164
+ };
1165
+ }
1166
+ function os(e, t, s, n) {
1167
+ const r = t.src;
1168
+ if (r.kind !== "unsupported") throw new Error(`元素 ${t.id} 不是框架占位`);
1169
+ const a = Z(r.name ?? `未支持对象 ${s}`), o = Z(r.label).replace(/>/g, "&gt;"), i = r.preview ? ae(e, { src: r.preview, name: r.name, id: r.id }, `rIdUnsupportedPreview${s}`, n) : null;
1170
+ if (i && !i.resource) throw new Error(`框架占位 ${t.id} 的外链预览不能生成独立包`);
1171
+ const c = i ? `<a:blipFill><a:blip r:embed="${i.relationship.targetId}"/><a:stretch><a:fillRect/></a:stretch></a:blipFill>` : '<a:solidFill><a:srgbClr val="F2F2F2"/></a:solidFill>';
1172
+ return {
1173
+ markup: `<p:sp><p:nvSpPr><p:cNvPr id="${s}" name="${a}"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>
1174
+ <p:spPr><a:xfrm/><a:prstGeom prst="rect"><a:avLst/></a:prstGeom>
1175
+ ${c}<a:ln w="12700"><a:solidFill><a:srgbClr val="AAAAAA"/></a:solidFill><a:prstDash val="dash"/></a:ln></p:spPr>
1176
+ <p:txBody><a:bodyPr anchor="ctr"/><a:lstStyle/><a:p><a:pPr algn="ctr"/><a:r><a:rPr lang="zh-CN" sz="1200"><a:solidFill><a:srgbClr val="777777"/></a:solidFill></a:rPr><a:t>${o}</a:t></a:r><a:endParaRPr lang="zh-CN"/></a:p></p:txBody></p:sp>`,
1177
+ namespaces: {
1178
+ "xmlns:a": _,
1179
+ "xmlns:p": H,
1180
+ ...i ? { "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships" } : {}
1181
+ },
1182
+ spids: { [String(s)]: s },
1183
+ ...i ? { relationships: [i.relationship] } : {},
1184
+ ...i != null && i.resource ? { resources: [i.resource] } : {}
1185
+ };
1186
+ }
1187
+ function is(e, t, s, n) {
1188
+ var a;
1189
+ if ((a = t.src.editInfo) != null && a.requiresOriginal)
1190
+ throw new Error(`兼容对象 ${t.id} 需要原包;请重新打开原文件并使用补丁保存`);
1191
+ if (t.src.scene3d && !ke(t.src)) throw new Error(`生成保存暂不支持三维元素:${t.id}`);
1192
+ if (t.src.kind === "image" && (t.src.filter || t.src.duotone) && !ke(t.src))
1193
+ throw new Error(`生成保存暂不支持图片滤镜:${t.id}`);
1194
+ if (t.src.kind === "shape") return ns(e, t, s, n);
1195
+ if (t.src.kind === "image") return yr(e, t, s, n);
1196
+ if (t.src.kind === "table") return kr(t, s);
1197
+ if (t.src.kind === "group") return as(t, s);
1198
+ if (t.src.kind === "unsupported") return os(e, t, s, n);
1199
+ const r = t.src;
1200
+ throw new Error(`生成保存遇到未知元素类型:${String(r)}`);
1201
+ }
1202
+ function ls(e, t, s, n, r) {
1203
+ var C, E, U, v, T;
1204
+ const a = `ppt/slides/slide${s + 1}.xml`, o = _r(e, t), i = Dr(o.sourceRecords, o.roots), c = /* @__PURE__ */ new Set([1, ...i.values()]), l = /* @__PURE__ */ Object.create(null), m = /* @__PURE__ */ new Map();
1205
+ for (const [w, I] of Object.entries(o.sourceRecords)) {
1206
+ let A = o.sourceRecords[I.parent], Ie = !1;
1207
+ for (; A; ) {
1208
+ if ((C = A.src.editInfo) != null && C.requiresOriginal) {
1209
+ Ie = !0;
1210
+ break;
1211
+ }
1212
+ A = o.sourceRecords[A.parent];
1213
+ }
1214
+ if (Ie) continue;
1215
+ const L = structuredClone(e.elements[w] ? ue(e, w) : I.src), Pe = L.kind === "shape" ? e.elements[w] ? Lt(e, w) : ((E = L.editInfo) == null ? void 0 : E.geom) ?? I.meta.geom ?? null : null, O = {
1216
+ ...structuredClone(I),
1217
+ src: L,
1218
+ ovr: {},
1219
+ meta: {
1220
+ ...structuredClone(I.meta),
1221
+ editable: "full",
1222
+ created: !0,
1223
+ inherited: void 0,
1224
+ origin: { part: a, spid: i.get(w) },
1225
+ ...L.kind === "shape" ? {
1226
+ geom: Pe ?? void 0,
1227
+ customGeometry: Pe ? void 0 : I.meta.customGeometry
1228
+ } : {}
1229
+ }
1230
+ };
1231
+ if ((U = I.src.editInfo) != null && U.requiresOriginal)
1232
+ O.meta.editable = "frame", O.meta.insertion = Yr(e, I, a, i.get(w), c, r), O.children = void 0, O.ovr = { ...structuredClone(I.ovr), x: L.x, y: L.y, w: L.w, h: L.h };
1233
+ else {
1234
+ O.meta.imageReplacement = void 0;
1235
+ try {
1236
+ O.meta.insertion = is(e, O, i.get(w), a), O.ovr = ss(e, t, O, a, m);
1237
+ } catch (de) {
1238
+ throw new Error(`元素 ${w}(${L.name ?? L.kind}):${de instanceof Error ? de.message : String(de)}`);
1239
+ }
1240
+ }
1241
+ l[w] = O;
1242
+ }
1243
+ const d = structuredClone(e.slides[t]);
1244
+ d.origin = { part: a };
1245
+ const u = qe(e, t), p = u.background, f = (p == null ? void 0 : p.type) === "image" ? ae(e, p, "rIdBackground", a) : null;
1246
+ if (f && !f.resource)
1247
+ throw new Error(`页面 ${t} 的外链图片背景不能生成独立包`);
1248
+ if ((p == null ? void 0 : p.type) === "image" && (f != null && f.resource)) {
1249
+ const w = ye(f.resource.hash);
1250
+ d.backgroundImage = {
1251
+ src: w,
1252
+ relationships: [f.relationship],
1253
+ resourceHash: f.resource.hash,
1254
+ resourceHashes: [f.resource.hash],
1255
+ imageRelationshipId: f.relationship.targetId
1256
+ };
1257
+ }
1258
+ const y = Ot(e, [t]).value, $ = (p == null ? void 0 : p.type) === "image" && (f != null && f.resource) ? { ...p, src: ye(f.resource.hash) } : p;
1259
+ d.ovr = {
1260
+ ...$ ? { background: $ } : {},
1261
+ hidden: !!u.hidden,
1262
+ ...u.transition ? { transition: u.transition } : {},
1263
+ ...y.length ? { animations: y } : {}
1264
+ };
1265
+ const x = Object.fromEntries(e.slideOrder.map((w, I) => {
1266
+ const A = structuredClone(e.slides[w]);
1267
+ return A.origin = { part: `ppt/slides/slide${I + 1}.xml` }, delete A.backgroundImage, [w, A];
1268
+ }));
1269
+ x[t] = d;
1270
+ const h = {
1271
+ ...structuredClone({ ...e, package: null }),
1272
+ slides: x,
1273
+ elements: l,
1274
+ imageResources: {
1275
+ ...structuredClone(e.imageResources),
1276
+ ...Object.fromEntries(m),
1277
+ ...f != null && f.resource ? { [f.resource.hash]: f.resource } : {}
1278
+ },
1279
+ removedElements: {},
1280
+ package: null
1281
+ }, g = [...o.roots].sort((w, I) => Te(l[w]).localeCompare(Te(l[I])));
1282
+ d.children = g;
1283
+ const b = R(nt()), M = Object.values(l).flatMap((w) => {
1284
+ var I;
1285
+ return ((I = w.meta.insertion) == null ? void 0 : I.relationships) ?? [];
1286
+ });
1287
+ f && M.push(f.relationship);
1288
+ const S = Nt(h, a, n, M);
1289
+ Rt(b, h, a, g.map((w) => l[w]), [], { links: S }), lr(b, h, d);
1290
+ for (const w of Object.values(l))
1291
+ (v = w.src.editInfo) != null && v.requiresOriginal || (At(b, w, !0), w.src.kind === "shape" && ((T = w.src.fill) == null ? void 0 : T.type) === "image" && jt(b, w, w.src.fill, `rIdFill${i.get(w.id)}`), (w.src.kind === "shape" || w.src.kind === "image") && Dt(b, w, w.src.stroke ?? null));
1292
+ return { bytes: Q(b), work: h, links: S };
1293
+ }
1294
+ function it(e, t, s = e) {
1295
+ var p, f, y;
1296
+ const n = e.slideOrder.map(($) => qe(e, $)), r = e.slideOrder.map(($, x) => !!e.slides[$].notes || n[x].notes !== void 0), a = (p = e.slides[e.slideOrder[0]]) == null ? void 0 : p.layoutId, o = (a ? (f = e.layouts[a]) == null ? void 0 : f.themeId : void 0) ?? e.themeOrder[0], i = o ? e.themes[o] : void 0, c = i ? { id: i.id, name: i.name, ...kt(i) } : void 0, l = st(
1297
+ e.meta.width,
1298
+ e.meta.height,
1299
+ e.slideOrder.length,
1300
+ r,
1301
+ c
1302
+ );
1303
+ qr(e, n, l);
1304
+ const m = Mr(e);
1305
+ if (m.length) {
1306
+ const $ = "ppt/tableStyles.xml";
1307
+ l[$] = tr(void 0, m), l["[Content_Types].xml"] = rr(l["[Content_Types].xml"], $), l["ppt/_rels/presentation.xml.rels"] = sr(
1308
+ l["ppt/_rels/presentation.xml.rels"],
1309
+ $
1310
+ );
1311
+ }
1312
+ const d = /* @__PURE__ */ new Map(), u = new Vr(e);
1313
+ e.slideOrder.forEach(($, x) => {
1314
+ const h = `ppt/slides/slide${x + 1}.xml`, g = Y(h), b = ls(e, $, x, l[g], u);
1315
+ l[h] = b.bytes, t == null || t($, b.work);
1316
+ const M = nr(b.work);
1317
+ for (const [S, C] of M.relationships) {
1318
+ const E = Y(S);
1319
+ l[E] = S === h ? Mt(
1320
+ l[E],
1321
+ C,
1322
+ b.links,
1323
+ b.bytes
1324
+ ) : le(l[E], C);
1325
+ }
1326
+ for (const [S, C] of M.resources) {
1327
+ const E = d.get(S);
1328
+ if (E && E.hash !== C.hash) throw new Error(`生成媒体 part 冲突:${S}`);
1329
+ d.set(S, C);
1330
+ }
1331
+ if (r[x]) {
1332
+ const S = `ppt/notesSlides/notesSlide${x + 1}.xml`;
1333
+ l[S] = ar(n[x].notes ?? ""), l[Y(S)] = le(void 0, [{
1334
+ sourceId: "rId1",
1335
+ targetId: "rId1",
1336
+ type: ts,
1337
+ target: V(S, "ppt/notesMasters/notesMaster1.xml")
1338
+ }, {
1339
+ sourceId: "rId2",
1340
+ targetId: "rId2",
1341
+ type: rs,
1342
+ target: V(S, h)
1343
+ }]), l[g] = le(l[g], [{
1344
+ sourceId: "rIdNotes",
1345
+ targetId: "rIdNotes",
1346
+ type: es,
1347
+ target: V(h, S)
1348
+ }]);
1349
+ }
1350
+ });
1351
+ for (const [$, x] of d) l[$] = Qe(x);
1352
+ l["[Content_Types].xml"] = or(
1353
+ l["[Content_Types].xml"],
1354
+ [...d.values()]
1355
+ ), l["ppt/presentation.xml"] = ir(
1356
+ l["ppt/presentation.xml"],
1357
+ e
1358
+ ), u.mergeInto(l);
1359
+ for (const $ of Ft().values()) (y = $.generateParts) == null || y.call($, s, l);
1360
+ return Jr(l, n), l;
1361
+ }
1362
+ function cs(e) {
1363
+ var a, o, i;
1364
+ if (!((a = e.package) != null && a.disposed)) return e;
1365
+ const t = { ...e.saveState.baselines }, s = (c) => {
1366
+ var m;
1367
+ if (!c || t[c]) return;
1368
+ const l = (m = me(e, `web-ppt-source:${c}`)) == null ? void 0 : m.bytes;
1369
+ l && (t[c] = l);
1370
+ }, n = (c) => ({ ...c, created: !0 }), r = Object.fromEntries(Object.entries(e.elements).map(([c, l]) => {
1371
+ var d;
1372
+ const m = l.meta.insertion;
1373
+ if (!m) return [c, l];
1374
+ for (const u of Qt(l)) s(u);
1375
+ return [c, { ...l, meta: { ...l.meta, insertion: {
1376
+ ...m,
1377
+ resources: (d = m.resources) == null ? void 0 : d.map(n)
1378
+ } } }];
1379
+ }));
1380
+ for (const c of Object.values(e.slides))
1381
+ s((o = c.creation) == null ? void 0 : o.duplicateSourcePart), s((i = c.creation) == null ? void 0 : i.duplicateNotesSourcePart);
1382
+ return {
1383
+ ...e,
1384
+ elements: r,
1385
+ meta: { ...e.meta, readonly: !0 },
1386
+ package: null,
1387
+ imageResources: Object.fromEntries(Object.entries(e.imageResources).map(([c, l]) => [c, n(l)])),
1388
+ saveState: { ...e.saveState, baselines: t }
1389
+ };
1390
+ }
1391
+ function ps(e) {
1392
+ const t = Object.fromEntries(Object.entries(e.elements).map(([r, a]) => {
1393
+ const { extensions: o, ...i } = a.ovr;
1394
+ return [r, { ...a, ovr: i }];
1395
+ }));
1396
+ let s = 0;
1397
+ const n = (r, a, o) => {
1398
+ let i;
1399
+ do
1400
+ i = `clipboard-projection-${++s}`;
1401
+ while (t[i]);
1402
+ const c = r.kind === "group" ? r.children.map((l, m) => n(l, i, m)) : void 0;
1403
+ return t[i] = { id: i, parent: a, src: r, children: c, ovr: {}, z: we(o), meta: { editable: "none" } }, i;
1404
+ };
1405
+ for (const r of Object.values(t)) r.meta.editable === "frame" && r.src.kind === "group" && (t[r.id] = { ...r, children: r.src.children.map((a, o) => n(a, r.id, o)) });
1406
+ return t;
1407
+ }
1408
+ function $s(e, t) {
1409
+ var x;
1410
+ if (e.package && !e.package.disposed && t.every((h) => {
1411
+ var g;
1412
+ return (g = e.elements[h]) == null ? void 0 : g.meta.origin;
1413
+ })) return Re(e, t);
1414
+ if (!t.length || new Set(t).size !== t.length) throw new Error("复制元素必须提供不重复的非空 id");
1415
+ const s = (x = e.elements[t[0]]) == null ? void 0 : x.parent, n = Gt(e, t[0]);
1416
+ if (!s || !n || t.some((h) => {
1417
+ var g;
1418
+ return ((g = e.elements[h]) == null ? void 0 : g.parent) !== s;
1419
+ })) throw new Error("复制的根元素必须属于同一父级");
1420
+ for (const h of t) {
1421
+ const g = e.elements[h];
1422
+ if (g.meta.editable === "none" || g.meta.locked) throw new Error(`元素不可复制或已锁定:${h}`);
1423
+ }
1424
+ const r = /* @__PURE__ */ Object.create(null), a = (h) => {
1425
+ const g = e.elements[h];
1426
+ r[h] = { ...g };
1427
+ for (const b of g.children ?? []) a(b);
1428
+ };
1429
+ for (const h of t) a(h);
1430
+ let o = [...t], i = s;
1431
+ for (; e.elements[i]; )
1432
+ r[i] = { ...e.elements[i], children: o }, o = [i], i = e.elements[i].parent;
1433
+ const c = { ...e, elements: r, slides: { ...e.slides, [n]: { ...e.slides[n], children: o, layoutId: void 0 } }, slideOrder: [n] };
1434
+ Me(c, e);
1435
+ let l;
1436
+ const m = it(c, (h, g) => {
1437
+ l = g;
1438
+ }, e);
1439
+ if (!l) throw new Error("复制来源页面为空");
1440
+ const d = ps(l), u = { ...l, elements: d, extensions: {}, package: { format: "pptx", parts: m, bytes: new Uint8Array(), disposed: !1 }, saveState: { ...l.saveState, baselines: m } };
1441
+ Me(u, e);
1442
+ const p = Re(u, t), f = { ...p.records }, y = (h, g) => {
1443
+ const b = p.records[g];
1444
+ f[g] = { ...b, meta: { ...b.meta, ...Kt(e, h, ue(e, h)) } }, e.elements[h].meta.editable !== "frame" && (e.elements[h].children ?? []).forEach((M, S) => y(M, b.children[S]));
1445
+ };
1446
+ return [...t].sort((h, g) => (e.elements[h].order ?? e.elements[h].z).localeCompare(e.elements[g].order ?? e.elements[g].z)).forEach((h, g) => y(h, p.roots[g])), { ...p, records: f };
1447
+ }
1448
+ function ys(e = {}) {
1449
+ const t = e.width ?? 1280, s = e.height ?? 720;
1450
+ Fe(t, "页面宽度"), Fe(s, "页面高度");
1451
+ const n = We(st(t, s, 1));
1452
+ return Xt(n.package), n.bytes;
1453
+ }
1454
+ function ws(e) {
1455
+ if (e.meta.readonly) throw new Error("只读编辑文档不能生成保存");
1456
+ if (Ht(e), Ut(cs(e)), e.meta.source === "pptx" && e.package && !e.package.disposed)
1457
+ throw new Error("存在可补丁原包时必须使用补丁保存");
1458
+ return We(it(e));
1459
+ }
1460
+ export {
1461
+ $s as copyPortableElements,
1462
+ ys as createBlankPptx,
1463
+ ws as generateEditDoc
1464
+ };