@web-ppt/edit-core 0.5.0-beta.2 → 0.5.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 (337) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/README.md +164 -21
  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/commands/add-slide-identity.d.ts +2 -0
  107. package/dist/commands/bullet-image-resource.d.ts +11 -0
  108. package/dist/commands/clear-format.d.ts +4 -0
  109. package/dist/commands/common-object-slide-patch.d.ts +4 -0
  110. package/dist/commands/common-object-slide-types.d.ts +68 -0
  111. package/dist/commands/direct-format-patches.d.ts +11 -5
  112. package/dist/commands/distribute-elements.d.ts +4 -0
  113. package/dist/commands/edit-table-grid.d.ts +10 -0
  114. package/dist/commands/element-alt-text.d.ts +8 -0
  115. package/dist/commands/element-arrangement.d.ts +17 -0
  116. package/dist/commands/element-effects.d.ts +1 -1
  117. package/dist/commands/element-fill.d.ts +1 -1
  118. package/dist/commands/element-geometry.d.ts +5 -2
  119. package/dist/commands/element-image-content.d.ts +2 -2
  120. package/dist/commands/element-link.d.ts +1 -1
  121. package/dist/commands/element-name.d.ts +1 -1
  122. package/dist/commands/element-stroke.d.ts +1 -1
  123. package/dist/commands/element-text.d.ts +1 -1
  124. package/dist/commands/element-transform.d.ts +2 -2
  125. package/dist/commands/geometry-types.d.ts +23 -1
  126. package/dist/commands/hierarchy-record.d.ts +5 -0
  127. package/dist/commands/image-resource.d.ts +8 -1
  128. package/dist/commands/insertion-host.d.ts +14 -1
  129. package/dist/commands/layout-property.d.ts +7 -0
  130. package/dist/commands/master-property.d.ts +5 -0
  131. package/dist/commands/master-text-style-types.d.ts +27 -0
  132. package/dist/commands/master-text-style.d.ts +7 -0
  133. package/dist/commands/paste-resources.d.ts +9 -5
  134. package/dist/commands/patch-apply.d.ts +3 -0
  135. package/dist/commands/patch-count.d.ts +1 -0
  136. package/dist/commands/patch-invalidation.d.ts +1 -1
  137. package/dist/commands/patch-stage.d.ts +4 -0
  138. package/dist/commands/record-override.d.ts +5 -0
  139. package/dist/commands/replace-image.d.ts +6 -1
  140. package/dist/commands/sections.d.ts +10 -0
  141. package/dist/commands/set-preset.d.ts +5 -0
  142. package/dist/commands/slide-property-types.d.ts +55 -5
  143. package/dist/commands/slide-size.d.ts +7 -0
  144. package/dist/commands/spid.d.ts +1 -1
  145. package/dist/commands/table-grid-patch.d.ts +12 -0
  146. package/dist/commands/text-target.d.ts +2 -2
  147. package/dist/commands/theme-types.d.ts +47 -0
  148. package/dist/commands/theme.d.ts +9 -0
  149. package/dist/commands/types.d.ts +194 -17
  150. package/dist/commands/ungroup-source.d.ts +3 -0
  151. package/dist/comments/index.d.ts +35 -0
  152. package/dist/comments/save.d.ts +3 -0
  153. package/dist/comments/state.d.ts +10 -0
  154. package/dist/comments/xml.d.ts +12 -0
  155. package/dist/comments.js +782 -0
  156. package/dist/common-object-slide-types.d.ts +34 -0
  157. package/dist/data-validation.d.ts +1 -1
  158. package/dist/describe/budget.d.ts +3 -0
  159. package/dist/describe/index.d.ts +5 -0
  160. package/dist/describe/read.d.ts +4 -0
  161. package/dist/describe/types.d.ts +103 -0
  162. package/dist/describe.js +192 -0
  163. package/dist/design-dependencies.d.ts +8 -0
  164. package/dist/design-projection-package.d.ts +10 -0
  165. package/dist/design-target.d.ts +10 -0
  166. package/dist/design.d.ts +3 -0
  167. package/dist/document-extensions.d.ts +9 -0
  168. package/dist/document.d.ts +1 -1
  169. package/dist/dynamic-projection.d.ts +6 -0
  170. package/dist/edit-core.js +5420 -4111
  171. package/dist/editor.d.ts +15 -3
  172. package/dist/element-source.d.ts +11 -0
  173. package/dist/element-spids.d.ts +4 -0
  174. package/dist/extension-address-journal.d.ts +9 -0
  175. package/dist/extension-address-remap.d.ts +14 -0
  176. package/dist/extension-addresses.d.ts +20 -0
  177. package/dist/extension-copy-history.d.ts +7 -0
  178. package/dist/extension-copy.d.ts +16 -0
  179. package/dist/extension-migration-receipt.d.ts +34 -0
  180. package/dist/extension-recovery-context.d.ts +5 -0
  181. package/dist/extension-runtime.d.ts +64 -0
  182. package/dist/generate/comments.d.ts +3 -0
  183. package/dist/generate/compatibility-parts.d.ts +14 -0
  184. package/dist/generate/compatibility-references.d.ts +3 -0
  185. package/dist/generate/compatibility.d.ts +4 -0
  186. package/dist/generate/index.d.ts +1 -0
  187. package/dist/generate/master-defaults.d.ts +4 -0
  188. package/dist/generate/materialize.d.ts +2 -2
  189. package/dist/generate/math.d.ts +3 -0
  190. package/dist/generate/portable-clipboard.d.ts +4 -0
  191. package/dist/generate/projection-tree.d.ts +8 -0
  192. package/dist/generate/template.d.ts +68 -1
  193. package/dist/generate/text-body.d.ts +2 -0
  194. package/dist/generate/text-effects.d.ts +5 -0
  195. package/dist/generate/text-override.d.ts +8 -0
  196. package/dist/generate/validation.d.ts +3 -0
  197. package/dist/generate/warp.d.ts +2 -0
  198. package/dist/generate.js +1232 -512
  199. package/dist/history.d.ts +11 -1
  200. package/dist/identities.d.ts +4 -0
  201. package/dist/image-content.d.ts +5 -2
  202. package/dist/image-resource-history.d.ts +2 -0
  203. package/dist/index-C2r7c6G6.js +714 -0
  204. package/dist/index-CYDvbiwF.js +1 -0
  205. package/dist/index.d.ts +35 -7
  206. package/dist/ink/index.d.ts +27 -0
  207. package/dist/ink/model.d.ts +4 -0
  208. package/dist/ink/save.d.ts +3 -0
  209. package/dist/ink/source.d.ts +7 -0
  210. package/dist/ink.js +324 -0
  211. package/dist/layout-assets.d.ts +3 -1
  212. package/dist/layout-projection.d.ts +17 -5
  213. package/dist/layout-state.d.ts +2 -0
  214. package/dist/layout-types.d.ts +42 -0
  215. package/dist/layout.d.ts +5 -0
  216. package/dist/lint/color.d.ts +5 -0
  217. package/dist/lint/index.d.ts +7 -0
  218. package/dist/lint/prompts.d.ts +3 -0
  219. package/dist/lint/report.d.ts +21 -0
  220. package/dist/lint/sampler-batch.d.ts +4 -0
  221. package/dist/lint/sampler-images.d.ts +2 -0
  222. package/dist/lint/sampler.d.ts +9 -0
  223. package/dist/lint/snapshot.d.ts +34 -0
  224. package/dist/lint/types.d.ts +67 -0
  225. package/dist/lint-sampler.js +187 -0
  226. package/dist/lint.js +659 -0
  227. package/dist/master-state.d.ts +3 -0
  228. package/dist/master-text-style-state.d.ts +3 -0
  229. package/dist/master-types.d.ts +55 -0
  230. package/dist/master.d.ts +5 -0
  231. package/dist/media/audio-icon.d.ts +2 -0
  232. package/dist/media/commands.d.ts +3 -0
  233. package/dist/media/index.d.ts +10 -0
  234. package/dist/media/markup.d.ts +10 -0
  235. package/dist/media/mp4-boxes.d.ts +12 -0
  236. package/dist/media/mp4-fragments.d.ts +8 -0
  237. package/dist/media/mp4-samples.d.ts +4 -0
  238. package/dist/media/mp4.d.ts +2 -0
  239. package/dist/media/poster.d.ts +2 -0
  240. package/dist/media/replace-poster.d.ts +3 -0
  241. package/dist/media/resource.d.ts +4 -0
  242. package/dist/media/source.d.ts +14 -0
  243. package/dist/media/types.d.ts +33 -0
  244. package/dist/media-properties.d.ts +4 -0
  245. package/dist/media.js +1630 -0
  246. package/dist/model-invariants-BM19JVxy.js +8980 -0
  247. package/dist/object-source.d.ts +11 -0
  248. package/dist/ole/container.d.ts +14 -0
  249. package/dist/ole/content.d.ts +94 -0
  250. package/dist/ole/index.d.ts +20 -0
  251. package/dist/ole/preview.d.ts +3 -0
  252. package/dist/ole/save.d.ts +2 -0
  253. package/dist/ole/state.d.ts +16 -0
  254. package/dist/ole.js +870 -0
  255. package/dist/opc.js +1 -1
  256. package/dist/paragraph-level.d.ts +2 -2
  257. package/dist/paragraph-property-schema.d.ts +4 -1
  258. package/dist/{patch-D7lZelRa.js → patch-BwhfBbYE.js} +10 -10
  259. package/dist/patch-events.d.ts +5 -1
  260. package/dist/ppt/appearance.d.ts +11 -0
  261. package/dist/ppt/binary.d.ts +20 -0
  262. package/dist/ppt/drawing.d.ts +18 -0
  263. package/dist/ppt/geometry.d.ts +4 -0
  264. package/dist/ppt/index.d.ts +12 -0
  265. package/dist/ppt/pictures.d.ts +11 -0
  266. package/dist/ppt/text.d.ts +9 -0
  267. package/dist/ppt.js +774 -0
  268. package/dist/preset-geometry.d.ts +6 -0
  269. package/dist/projection.d.ts +2 -0
  270. package/dist/query-BHLjWjnu.js +903 -0
  271. package/dist/recovery-identity.d.ts +1 -0
  272. package/dist/recovery-migrations.d.ts +3 -0
  273. package/dist/recovery.d.ts +3 -0
  274. package/dist/resize/index.d.ts +6 -0
  275. package/dist/resize/text.d.ts +4 -0
  276. package/dist/resize.js +5090 -0
  277. package/dist/retained-element-origins.d.ts +6 -0
  278. package/dist/run-property-fields.d.ts +12 -0
  279. package/dist/run-property-schema.d.ts +3 -1
  280. package/dist/run-style.d.ts +15 -0
  281. package/dist/save/alt-text.d.ts +4 -0
  282. package/dist/save/comments.d.ts +3 -0
  283. package/dist/save/effects.d.ts +2 -1
  284. package/dist/save/extension-availability.d.ts +3 -0
  285. package/dist/save/extension-elements.d.ts +26 -0
  286. package/dist/save/index.d.ts +6 -1
  287. package/dist/save/insertion.d.ts +6 -5
  288. package/dist/save/layout-properties.d.ts +4 -0
  289. package/dist/save/master-properties.d.ts +5 -0
  290. package/dist/save/paragraph-overrides.d.ts +3 -0
  291. package/dist/save/slide-parts.d.ts +1 -0
  292. package/dist/save/table.d.ts +2 -0
  293. package/dist/save/xfrm.d.ts +8 -2
  294. package/dist/save.js +493 -498
  295. package/dist/sections.d.ts +8 -0
  296. package/dist/session-assets.d.ts +4 -0
  297. package/dist/slide-parts-D0o_DDhi.js +1331 -0
  298. package/dist/slide-size.d.ts +6 -0
  299. package/dist/smartart/drawing.d.ts +3 -0
  300. package/dist/smartart/index.d.ts +16 -0
  301. package/dist/smartart/model.d.ts +18 -0
  302. package/dist/smartart/save.d.ts +3 -0
  303. package/dist/smartart.js +604 -0
  304. package/dist/source-retention.d.ts +7 -0
  305. package/dist/space.d.ts +37 -0
  306. package/dist/table-cell.d.ts +7 -1
  307. package/dist/table-grid-projection.d.ts +6 -0
  308. package/dist/table-grid.d.ts +45 -0
  309. package/dist/table-invariants.d.ts +4 -0
  310. package/dist/table-rows.d.ts +2 -1
  311. package/dist/table-scale.d.ts +4 -0
  312. package/dist/table-style.d.ts +5 -4
  313. package/dist/templates/index.d.ts +4 -0
  314. package/dist/templates/recipes.d.ts +5 -0
  315. package/dist/templates/types.d.ts +17 -0
  316. package/dist/templates.js +543 -0
  317. package/dist/text-flatten.d.ts +6 -0
  318. package/dist/text-fragment.d.ts +5 -0
  319. package/dist/text-model.d.ts +8 -8
  320. package/dist/text-override-validation.d.ts +6 -2
  321. package/dist/text-selection.d.ts +4 -0
  322. package/dist/theme-projection.d.ts +8 -0
  323. package/dist/theme-xml.d.ts +3 -0
  324. package/dist/theme.d.ts +14 -0
  325. package/dist/types.d.ts +174 -8
  326. package/dist/xml/index.d.ts +1 -1
  327. package/dist/xml/nodes.d.ts +2 -2
  328. package/dist/xml/shape-ids.d.ts +3 -0
  329. package/dist/xml.js +19 -16
  330. package/package.json +79 -5
  331. package/schemas/describe.schema.json +479 -0
  332. package/schemas/lint.schema.json +145 -0
  333. package/dist/document-B1jjN-QB.js +0 -274
  334. package/dist/image-resource-DbgJS9n-.js +0 -24
  335. package/dist/index-D2JizcOQ.js +0 -706
  336. package/dist/insertion-CGpb504L.js +0 -6152
  337. package/dist/table-style-part-DBtpxmuo.js +0 -1042
package/dist/generate.js CHANGED
@@ -1,100 +1,105 @@
1
- import { _ as de, g as B, $ as te, P as re, a0 as he, b as ae, s as se, D as ne, Z as fe, a1 as ue, a2 as oe, l as q, E as ge, a3 as Y, a4 as xe, a5 as V, A as $e, B as ye, a6 as ve, p as be, a7 as we, a8 as Se, a9 as Pe, u as Ie } from "./insertion-CGpb504L.js";
2
- import { c as le, d as Te } from "./patch-D7lZelRa.js";
3
- import { TEXT_RUN_DIRECT_BITS as H } from "@web-ppt/core";
4
- import { P as _, D as j, p as Me, a as ke } from "./index-D2JizcOQ.js";
5
- import { i as Ce, g as Le, h as Ee, m as Fe, p as W, k as Ne, d as Oe, f as Re, b as Ae } from "./table-style-part-DBtpxmuo.js";
6
- import { c as Z } from "./image-resource-DbgJS9n-.js";
7
- const Be = /[A-Za-z]|[-+]?(?:\d*\.?\d+)(?:e[-+]?\d+)?/gi;
8
- function O(a, t) {
9
- const r = Math.round(a * 9525);
10
- if (!Number.isSafeInteger(r)) throw new Error(`自定义几何 ${t} 超出 OOXML 安全整数范围`);
11
- return String(r);
12
- }
13
- function C(a, t, r) {
14
- const s = Number(a[t]), e = Number(a[t + 1]);
15
- if (!Number.isFinite(s) || !Number.isFinite(e)) throw new Error(`自定义几何 ${r} 坐标无效`);
16
- return [s, e];
17
- }
18
- const z = ([a, t], r) => `<a:pt x="${O(a, `${r}.x`)}" y="${O(t, `${r}.y`)}"/>`;
19
- function K(a, t) {
20
- const r = Math.round(a * 180 * 6e4 / Math.PI);
21
- if (!Number.isSafeInteger(r)) throw new Error(`自定义几何 ${t} 角度无效`);
22
- return String(r);
23
- }
24
- function _e(a, t, r) {
25
- if (!r) throw new Error("生成保存的自定义圆弧缺少起点");
26
- let s = Math.abs(Number(a[t])), e = Math.abs(Number(a[t + 1]));
27
- const o = Number(a[t + 2]), n = Number(a[t + 3]), l = Number(a[t + 4]), c = C(a, t + 5, "A");
28
- if (![s, e, o, n, l].every(Number.isFinite) || n !== 0 && n !== 1 || l !== 0 && l !== 1)
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)
29
42
  throw new Error("自定义几何 A 参数无效");
30
- if (Math.abs(o) > 1e-9) throw new Error("生成保存不支持旋转椭圆的自定义圆弧");
31
- if (s === 0 || e === 0)
32
- return { markup: `<a:lnTo>${z(c, "A")}</a:lnTo>`, target: c };
33
- const [m, i] = r, [d, p] = c;
34
- if (m === d && i === p) return { markup: "", target: c };
35
- const h = (m - d) / 2, f = (i - p) / 2, x = h * h / (s * s) + f * f / (e * e);
36
- if (x > 1) {
37
- const Q = Math.sqrt(x);
38
- s *= Q, e *= Q;
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;
39
52
  }
40
- const g = s * s, b = e * e, I = g * f * f + b * h * h, k = Math.max(0, g * b - I), y = I === 0 ? 0 : (n === l ? -1 : 1) * Math.sqrt(k / I), w = (m + d) / 2 + y * (s * f / e), S = (i + p) / 2 - y * (e * h / s), L = Math.atan2((i - S) / e, (m - w) / s);
41
- let R = Math.atan2((p - S) / e, (d - w) / s) - L;
42
- return l === 1 && R < 0 && (R += Math.PI * 2), l === 0 && R > 0 && (R -= Math.PI * 2), {
43
- markup: `<a:arcTo wR="${O(s, "A.rx")}" hR="${O(e, "A.ry")}" stAng="${K(L, "A.start")}" swAng="${K(R, "A.sweep")}"/>`,
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")}"/>`,
44
57
  target: c
45
58
  };
46
59
  }
47
- function ie(a, t, r, s) {
48
- const e = a.match(Be) ?? [], o = [];
49
- let n = 0, l = null, c = null;
50
- for (; n < e.length; ) {
51
- const d = e[n++];
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++];
52
65
  if (d === "Z" || d === "z") {
53
- o.push("<a:close/>"), l = c;
66
+ a.push("<a:close/>"), i = c;
54
67
  continue;
55
68
  }
56
69
  if (d === "M" || d === "L") {
57
- const p = C(e, n, d);
58
- n += 2;
59
- const h = d === "M" ? "moveTo" : "lnTo";
60
- o.push(`<a:${h}>${z(p, d)}</a:${h}>`), l = p, d === "M" && (c = p);
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);
61
74
  continue;
62
75
  }
63
76
  if (d === "C") {
64
- const p = [
65
- C(e, n, "C1"),
66
- C(e, n + 2, "C2"),
67
- C(e, n + 4, "C3")
77
+ const u = [
78
+ z(r, o, "C1"),
79
+ z(r, o + 2, "C2"),
80
+ z(r, o + 4, "C3")
68
81
  ];
69
- n += 6, o.push(`<a:cubicBezTo>${p.map((h, f) => z(h, `C${f + 1}`)).join("")}</a:cubicBezTo>`), l = p[2];
82
+ o += 6, a.push(`<a:cubicBezTo>${u.map((p, f) => ce(p, `C${f + 1}`)).join("")}</a:cubicBezTo>`), i = u[2];
70
83
  continue;
71
84
  }
72
85
  if (d === "Q") {
73
- const p = [C(e, n, "Q1"), C(e, n + 2, "Q2")];
74
- n += 4, o.push(`<a:quadBezTo>${p.map((h, f) => z(h, `Q${f + 1}`)).join("")}</a:quadBezTo>`), l = p[1];
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];
75
88
  continue;
76
89
  }
77
90
  if (d === "A") {
78
- const p = _e(e, n, l);
79
- n += 7, p.markup && o.push(p.markup), l = p.target;
91
+ const u = dr(r, o, i);
92
+ o += 7, u.markup && a.push(u.markup), i = u.target;
80
93
  continue;
81
94
  }
82
95
  throw new Error(`生成保存不支持自定义路径命令:${d}`);
83
96
  }
84
- if (!o.length) throw new Error("生成保存的自定义路径为空");
85
- const m = O(t, "width"), i = O(r, "height");
97
+ if (!a.length) throw new Error("生成保存的自定义路径为空");
98
+ const l = te(t, "width"), m = te(s, "height");
86
99
  return `<a:custGeom><a:avLst/><a:gdLst/><a:ahLst/><a:cxnLst/><a:rect l="0" t="0" r="r" b="b"/>
87
- <a:pathLst><a:path w="${m}" h="${i}" fill="${s ? "none" : "norm"}" stroke="1">${o.join("")}</a:path></a:pathLst></a:custGeom>`;
88
- }
89
- function pe(a, t, r, s) {
90
- const e = de(a, r);
91
- if (!e) return;
92
- if (e.kind === "external" || e.kind === "slide") return e;
93
- if (e.kind === "unsupported") throw new Error(`${s} 的来源链接无法生成`);
94
- const o = a.slideOrder.indexOf(t), n = e.action === "first" ? 0 : e.action === "last" ? a.slideOrder.length - 1 : e.action === "next" ? Math.min(o + 1, a.slideOrder.length - 1) : Math.max(o - 1, 0), l = a.slideOrder[n];
95
- return l ? { kind: "slide", slideId: l } : void 0;
100
+ <a:pathLst><a:path w="${l}" h="${m}" fill="${n ? "none" : "norm"}" stroke="1">${a.join("")}</a:path></a:pathLst></a:custGeom>`;
96
101
  }
97
- const je = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", Ge = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", ze = {
102
+ const fr = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", hr = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", gr = {
98
103
  "audio/mpeg": "mp3",
99
104
  "audio/mp4": "m4a",
100
105
  "audio/wav": "wav",
@@ -102,105 +107,354 @@ const je = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/
102
107
  "video/webm": "webm",
103
108
  "video/quicktime": "mov"
104
109
  };
105
- function De(a, t) {
110
+ function xr(e, t) {
106
111
  if (t.src.startsWith("web-ppt-resource:")) {
107
- const e = a.imageResources[t.src.slice(17)];
108
- if (!e) throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少会话资源`);
112
+ const r = e.imageResources[t.src.slice(17)];
113
+ if (!r) throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少会话资源`);
109
114
  return {
110
- hash: e.hash,
111
- mime: e.mime,
112
- extension: e.extension,
113
- bytes: e.bytes
115
+ hash: r.hash,
116
+ mime: r.mime,
117
+ extension: r.extension,
118
+ bytes: r.bytes
114
119
  };
115
120
  }
116
- const r = te(a, t.src);
117
- if (r) return Z(r.bytes, r.mime, "生成图片");
118
- const s = /^data:([^;,]+)((?:;[^,]*)?),(.*)$/is.exec(t.src);
119
- if (s) {
120
- const e = /;base64/i.test(s[2]) ? re(s[3]) : new TextEncoder().encode(decodeURIComponent(s[3]));
121
- return s[1] === "image/svg+xml" ? (he(e, s[1], "svg", "生成图片", !0), {
122
- hash: se(e),
123
- mime: s[1],
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],
124
129
  extension: "svg",
125
- bytes: ae(e)
126
- }) : Z(e, s[1], "生成图片");
130
+ bytes: He(r)
131
+ }) : Le(r, n[1], "生成图片");
127
132
  }
128
133
  if (/^https?:\/\//i.test(t.src)) return null;
129
134
  throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少可生成的资源字节`);
130
135
  }
131
- function X(a, t, r, s) {
132
- const e = De(a, t), o = e ? {
133
- ...e,
134
- targetPart: `ppt/media/web-ppt-${e.hash}.${e.extension}`,
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}`,
135
140
  created: !0
136
141
  } : null;
137
142
  return {
138
- resource: o,
143
+ resource: a,
139
144
  relationship: {
140
- sourceId: r,
141
- targetId: r,
142
- type: je,
143
- target: o ? B(s, o.targetPart) : t.src,
144
- ...o ? {} : { targetMode: "External" }
145
+ sourceId: s,
146
+ targetId: s,
147
+ type: fr,
148
+ target: a ? V(n, a.targetPart) : t.src,
149
+ ...a ? {} : { targetMode: "External" }
145
150
  }
146
151
  };
147
152
  }
148
- function He(a, t, r, s) {
153
+ function $r(e, t, s, n) {
149
154
  if (!t.src) return {};
150
- const e = te(a, t.src), o = /^data:([^;,]+);base64,(.*)$/is.exec(t.src), n = (e == null ? void 0 : e.bytes) ?? (o ? re(o[2]) : null), l = (e == null ? void 0 : e.mime) ?? (o == null ? void 0 : o[1]) ?? t.mime ?? (t.kind === "audio" ? "audio/mpeg" : "video/mp4"), c = `http://schemas.openxmlformats.org/officeDocument/2006/relationships/${t.kind}`;
151
- if (!n) {
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) {
152
157
  if (!t.external && !/^https?:\/\//i.test(t.src))
153
158
  throw new Error(`媒体 ${t.src} 缺少可生成的资源字节`);
154
159
  return { relationship: {
155
- sourceId: r,
156
- targetId: r,
160
+ sourceId: s,
161
+ targetId: s,
157
162
  type: c,
158
163
  target: t.src,
159
164
  targetMode: "External"
160
165
  } };
161
166
  }
162
- const m = se(n), i = ze[l] ?? (t.kind === "audio" ? "mp3" : "mp4"), d = {
163
- hash: m,
164
- mime: l,
165
- extension: i,
166
- bytes: ae(n),
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),
167
172
  created: !0,
168
- targetPart: `ppt/media/web-ppt-${m}.${i}`
173
+ targetPart: `ppt/media/web-ppt-${l}.${m}`
169
174
  };
170
175
  return {
171
176
  resource: d,
172
177
  relationship: {
173
- sourceId: r,
174
- targetId: r,
178
+ sourceId: s,
179
+ targetId: s,
175
180
  type: c,
176
- target: B(s, d.targetPart)
181
+ target: V(n, d.targetPart)
177
182
  }
178
183
  };
179
184
  }
180
- const U = (a) => a.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
181
- function Xe(a, t, r, s) {
182
- const e = t.src;
183
- if (e.kind !== "image") throw new Error(`元素 ${t.id} 不是图片`);
184
- const o = e.src ? X(a, e, `rIdImage${r}`, s) : null, n = e.media ? He(a, e.media, `rIdMedia${r}`, s) : null, l = o != null && o.resource ? "embed" : "link", c = e.alpha === void 0 ? "" : `<a:alphaModFix amt="${Math.round(e.alpha * 1e5)}"/>`, m = U(e.name ?? `图片 ${r}`), i = e.media ? `<a:${e.media.kind}File${n != null && n.relationship ? ` r:link="${n.relationship.targetId}"` : ""}/>` : "", d = o ? `<a:blip r:${l}="${o.relationship.targetId}">${c}</a:blip>` : "", p = t.meta.geom ? Object.entries(t.meta.geom.adj).map(([g, b]) => {
185
- if (!Number.isSafeInteger(Math.round(b)))
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)))
186
202
  throw new Error(`图片 ${t.id} 的几何调整值无效`);
187
- return `<a:gd name="${U(g)}" fmla="val ${Math.round(b)}"/>`;
188
- }).join("") : "", h = t.meta.geom ? `<a:prstGeom prst="${U(t.meta.geom.preset)}"><a:avLst>${p}</a:avLst></a:prstGeom>` : e.clipPath ? ie(e.clipPath, e.w, e.h, !1) : '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom>', f = [o == null ? void 0 : o.relationship, n == null ? void 0 : n.relationship].filter((g) => !!g), x = [o == null ? void 0 : o.resource, n == null ? void 0 : n.resource].filter((g) => !!g);
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);
189
205
  return {
190
- markup: `<p:pic><p:nvPicPr><p:cNvPr id="${r}" name="${m}"/><p:cNvPicPr/><p:nvPr>${i}</p:nvPr></p:nvPicPr>
191
- <p:blipFill>${d}<a:stretch><a:fillRect/></a:stretch></p:blipFill>
192
- <p:spPr><a:xfrm/>${h}</p:spPr></p:pic>`,
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>`,
193
209
  namespaces: {
194
- "xmlns:a": j,
195
- "xmlns:p": _,
196
- "xmlns:r": Ge
210
+ "xmlns:a": _,
211
+ "xmlns:p": H,
212
+ "xmlns:r": hr,
213
+ ...i ? { "xmlns:p14": pr } : {}
197
214
  },
198
- spids: { [String(r)]: r },
199
- ...f.length ? { relationships: f } : {},
200
- ...x.length ? { resources: x } : {}
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;
201
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);
202
432
  }
203
- const J = (a) => a.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;"), qe = {
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 = {
204
458
  anchor: "top",
205
459
  insets: [4.8, 9.6, 4.8, 9.6],
206
460
  wrap: !0,
@@ -226,130 +480,149 @@ const J = (a) => a.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g,
226
480
  }]
227
481
  }]
228
482
  };
229
- function We(a, t, r) {
230
- var s;
231
- for (let e = 0; e <= t; e++)
232
- for (let o = 0; o <= r; o++) {
233
- const n = (s = a[e]) == null ? void 0 : s.cells[o];
234
- if (!(n != null && n.merged) && e + n.rowSpan > t && o + n.colSpan > r) return { row: e, column: o };
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 };
235
489
  }
236
490
  return null;
237
491
  }
238
- function Ue(a, t, r, s) {
239
- var f, x, g, b, I, k, u, y, w, S;
240
- const e = a[t].cells[r], o = [];
241
- if (!e.merged)
242
- e.colSpan > 1 && o.push(`gridSpan="${e.colSpan}"`), e.rowSpan > 1 && o.push(`rowSpan="${e.rowSpan}"`);
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}"`);
243
497
  else {
244
- const L = We(a, t, r);
245
- if (!L) throw new Error(`表格合并占位格缺少起始格:${t},${r}`);
246
- r > L.column && o.push('hMerge="1"'), t > L.row && o.push('vMerge="1"');
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"');
247
501
  }
248
- const n = s ? (f = e.editInfo) == null ? void 0 : f.styleBase : void 0, l = (n == null ? void 0 : n.textTemplate) ?? (n == null ? void 0 : n.text), c = l == null ? void 0 : l.paragraphs[0], m = c == null ? void 0 : c.runs[0], i = (((x = c == null ? void 0 : c.editInfo) == null ? void 0 : x.directRun) ?? 0) | (((g = m == null ? void 0 : m.editInfo) == null ? void 0 : g.direct) ?? 0), d = n ? {
249
- ...e,
250
- fill: structuredClone(n.fill),
251
- borders: structuredClone(n.borders),
252
- text: structuredClone(n.text),
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),
253
507
  editInfo: {
254
- ...e.editInfo,
255
- ...n.textTemplate ? { textTemplate: structuredClone(n.textTemplate) } : {}
508
+ ...r.editInfo,
509
+ ...o.textTemplate ? { textTemplate: structuredClone(o.textTemplate) } : {}
256
510
  }
257
- } : e, p = { color: "rgba(0,0,0,0.25)", width: 1, dash: null }, h = ue({
511
+ } : r;
512
+ let u = gt({
258
513
  ...d,
259
- ...!((b = d.editInfo) != null && b.textTemplate) && !((k = (I = d.text) == null ? void 0 : I.paragraphs[0]) != null && k.runs[0]) ? { editInfo: { textTemplate: qe } } : {},
260
- ...n ? {} : { borders: {
261
- l: ((u = e.borders) == null ? void 0 : u.l) === void 0 ? p : e.borders.l,
262
- r: ((y = e.borders) == null ? void 0 : y.r) === void 0 ? p : e.borders.r,
263
- t: ((w = e.borders) == null ? void 0 : w.t) === void 0 ? p : e.borders.t,
264
- b: ((S = e.borders) == null ? void 0 : S.b) === void 0 ? p : e.borders.b
265
- } }
266
- }, n ? {
514
+ ...!(($ = d.editInfo) != null && $.textTemplate) && !((h = (x = d.text) == null ? void 0 : x.paragraphs[0]) != null && h.runs[0]) ? { editInfo: { textTemplate: Er } } : {}
515
+ }, {
267
516
  sparseAppearance: !0,
268
- omitTextBold: !(i & H.b),
269
- omitTextColor: !(i & H.color)
270
- } : {});
271
- return o.length ? h.replace("<a:tc>", `<a:tc ${o.join(" ")}>`) : h;
272
- }
273
- function Qe(a, t) {
274
- var i, d;
275
- const r = a.src;
276
- if (r.kind !== "table") throw new Error(`元素 ${a.id} 不是表格`);
277
- const s = r.colWidths.map((p) => `<a:gridCol w="${Math.round(p * 9525)}"/>`).join(""), e = !!((i = r.editInfo) != null && i.tableStyle), o = r.rows.map((p, h) => `<a:tr h="${Math.round(p.height * 9525)}">${p.cells.map((f, x) => Ue(r.rows, h, x, e)).join("")}</a:tr>`).join(""), n = J(r.name ?? `表格 ${t}`), l = (d = r.editInfo) == null ? void 0 : d.tableStyle, c = l ? [
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 ? [
278
532
  "firstRow",
279
533
  "lastRow",
280
534
  "bandRow",
281
535
  "firstCol",
282
536
  "lastCol",
283
537
  "bandCol"
284
- ].filter((p) => l[p]).map((p) => `${p}="1"`).join(" ") : "", m = l ? `<a:tblPr${c ? ` ${c}` : ""}><a:tableStyleId>${J(l.styleId)}</a:tableStyleId></a:tblPr>` : "<a:tblPr/>";
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/>";
285
539
  return {
286
- markup: `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id="${t}" name="${n}"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>
540
+ markup: `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id="${t}" name="${o}"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>
287
541
  <p:xfrm/><a:graphic><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table"><a:tbl>
288
- ${m}<a:tblGrid>${s}</a:tblGrid>${o}</a:tbl></a:graphicData></a:graphic></p:graphicFrame>`,
289
- namespaces: { "xmlns:a": j, "xmlns:p": _ },
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 },
290
544
  spids: { [String(t)]: t }
291
545
  };
292
546
  }
293
- function Ye(a) {
294
- var r;
547
+ function Mr(e) {
548
+ var s;
295
549
  const t = /* @__PURE__ */ new Map();
296
- for (const s of Object.values(a.elements)) {
297
- const e = s.src.kind === "table" ? (r = ne(a, s.id).editInfo) == null ? void 0 : r.tableStyle : void 0;
298
- if (!e) continue;
299
- const o = fe(a, s.id, e.styleId);
300
- if (!o) throw new Error(`表格 ${s.id} 的样式定义不存在:${e.styleId}`);
301
- t.set(o.styleId.toUpperCase(), o);
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);
302
556
  }
303
557
  return [...t.values()];
304
558
  }
305
- const M = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
306
- `, F = "http://schemas.openxmlformats.org/drawingml/2006/main", A = "http://schemas.openxmlformats.org/presentationml/2006/main", $ = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", Ve = "http://schemas.openxmlformats.org/package/2006/relationships", Ze = "http://schemas.openxmlformats.org/package/2006/content-types", Ke = new TextEncoder(), v = (a) => Ke.encode(a);
307
- function P(a, t) {
308
- const r = Math.round(a * 9525);
309
- if (!Number.isSafeInteger(r)) throw new Error(`${t} 超出 OOXML 安全整数范围`);
310
- return String(r);
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;
311
579
  }
312
- const E = (a) => `${M}<Relationships xmlns="${Ve}">${a}</Relationships>`, D = `<p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
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>
313
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>`;
314
- function G(a, t, r, s, e) {
315
- const o = `<p:ph type="${r}"${e === void 0 ? "" : ` idx="${e}"`}/>`;
316
- return `<p:sp><p:nvSpPr><p:cNvPr id="${a}" name="${t}"/><p:cNvSpPr/><p:nvPr>${o}</p:nvPr></p:nvSpPr>
317
- <p:spPr><a:xfrm><a:off x="${P(s.x, `${t} x`)}" y="${P(s.y, `${t} y`)}"/><a:ext cx="${P(s.w, `${t} 宽度`)}" cy="${P(s.h, `${t} 高度`)}"/></a:xfrm></p:spPr>
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>
318
591
  <p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="zh-CN"/></a:p></p:txBody></p:sp>`;
319
592
  }
320
- function Je(a, t, r) {
321
- return `<p:sp><p:nvSpPr><p:cNvPr id="${a}" name="页码"/><p:cNvSpPr/><p:nvPr><p:ph type="sldNum" idx="12"/></p:nvPr></p:nvSpPr>
322
- <p:spPr><a:xfrm><a:off x="${P(r.x, "页码 x")}" y="${P(r.y, "页码 y")}"/><a:ext cx="${P(r.w, "页码宽度")}" cy="${P(r.h, "页码高度")}"/></a:xfrm></p:spPr>
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>
323
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>`;
324
597
  }
325
- function et(a, t) {
326
- const r = a / 1280, s = t / 720, e = (n, l, c, m) => ({
327
- x: n * r,
328
- y: l * s,
329
- w: c * r,
330
- h: m * s
331
- }), o = (n, l) => Je(n, l, e(1120, 662, 96, 34));
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));
332
605
  return [
333
606
  {
334
607
  part: 1,
335
608
  type: "title",
336
609
  name: "标题页",
337
- shapes: G(2, "标题", "ctrTitle", e(120, 196, 1040, 154)) + G(3, "副标题", "subTitle", e(200, 374, 880, 92), 1) + o(4, 1)
610
+ shapes: oe(2, "标题", "ctrTitle", r(120, 196, 1040, 154)) + oe(3, "副标题", "subTitle", r(200, 374, 880, 92), 1) + a(4, 1)
338
611
  },
339
612
  {
340
613
  part: 2,
341
614
  type: "obj",
342
615
  name: "标题和内容",
343
- shapes: G(2, "标题", "title", e(80, 52, 1120, 92)) + G(3, "内容", "body", e(96, 166, 1088, 446), 1) + o(4, 2)
616
+ shapes: oe(2, "标题", "title", r(80, 52, 1120, 92)) + oe(3, "内容", "body", r(96, 166, 1088, 446), 1) + a(4, 2)
344
617
  },
345
- { part: 3, type: "blank", name: "空白", shapes: o(2, 3) }
618
+ { part: 3, type: "blank", name: "空白", shapes: a(2, 3) }
346
619
  ];
347
620
  }
348
- function ce(a, t, r = 0, s = []) {
349
- const e = /* @__PURE__ */ Object.create(null), o = s.some(Boolean), n = Array.from({ length: r }, (m, i) => `<Override PartName="/ppt/slides/slide${i + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/>`).join(`
350
- `), l = s.map((m, i) => m ? `<Override PartName="/ppt/notesSlides/notesSlide${i + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"/>` : "").filter(Boolean).join(`
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(`
351
624
  `);
352
- e["[Content_Types].xml"] = v(`${M}<Types xmlns="${Ze}">
625
+ a["[Content_Types].xml"] = k(`${D}<Types xmlns="${Lr}">
353
626
  <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
354
627
  <Default Extension="xml" ContentType="application/xml"/>
355
628
  <Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/>
@@ -358,387 +631,834 @@ function ce(a, t, r = 0, s = []) {
358
631
  <Override PartName="/ppt/slideLayouts/slideLayout2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
359
632
  <Override PartName="/ppt/slideLayouts/slideLayout3.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
360
633
  <Override PartName="/ppt/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
361
- ${n}
362
- ${l}
634
+ ${i}
635
+ ${c}
363
636
  ${o ? '<Override PartName="/ppt/notesMasters/notesMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml"/>' : ""}
364
- </Types>`), e["_rels/.rels"] = v(E(
365
- `<Relationship Id="rId1" Type="${$}/officeDocument" Target="ppt/presentation.xml"/>`
366
- )), e["ppt/presentation.xml"] = v(`${M}<p:presentation xmlns:a="${F}" xmlns:r="${$}" xmlns:p="${A}">
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}">
367
640
  <p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="rId1"/></p:sldMasterIdLst>
368
- ${o ? `<p:notesMasterIdLst><p:notesMasterId r:id="rId${r + 2}"/></p:notesMasterIdLst>` : ""}
369
- <p:sldIdLst>${Array.from({ length: r }, (m, i) => `<p:sldId id="${256 + i}" r:id="rId${i + 2}"/>`).join("")}</p:sldIdLst>
370
- <p:sldSz cx="${P(a, "页面宽度")}" cy="${P(t, "页面高度")}"/>
371
- <p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle/></p:presentation>`), e["ppt/_rels/presentation.xml.rels"] = v(E(
372
- `<Relationship Id="rId1" Type="${$}/slideMaster" Target="slideMasters/slideMaster1.xml"/>` + Array.from({ length: r }, (m, i) => `<Relationship Id="rId${i + 2}" Type="${$}/slide" Target="slides/slide${i + 1}.xml"/>`).join("") + (o ? `<Relationship Id="rId${r + 2}" Type="${$}/notesMaster" Target="notesMasters/notesMaster1.xml"/>` : "")
373
- )), e["ppt/theme/theme1.xml"] = v(`${M}<a:theme xmlns:a="${F}" name="Web PPT">
374
- <a:themeElements><a:clrScheme name="Web PPT">
375
- <a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1>
376
- <a:dk2><a:srgbClr val="1F3864"/></a:dk2><a:lt2><a:srgbClr val="F2F2F2"/></a:lt2>
377
- <a:accent1><a:srgbClr val="4472C4"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2>
378
- <a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4>
379
- <a:accent5><a:srgbClr val="5B9BD5"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6>
380
- <a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink>
381
- </a:clrScheme><a:fontScheme name="Web PPT">
382
- <a:majorFont><a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/></a:majorFont>
383
- <a:minorFont><a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/></a:minorFont>
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>
384
654
  </a:fontScheme><a:fmtScheme name="Web PPT">
385
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>
386
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>
387
657
  <a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle></a:effectStyleLst>
388
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>
389
- </a:fmtScheme></a:themeElements></a:theme>`), e["ppt/slideMasters/slideMaster1.xml"] = v(`${M}<p:sldMaster xmlns:a="${F}" xmlns:r="${$}" xmlns:p="${A}">
390
- <p:cSld><p:bg><p:bgPr><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill><a:effectLst/></p:bgPr></p:bg><p:spTree>${D}</p:spTree></p:cSld>
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>
391
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"/>
392
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>
393
- <p:txStyles><p:titleStyle/><p:bodyStyle/><p:otherStyle/></p:txStyles></p:sldMaster>`), e["ppt/slideMasters/_rels/slideMaster1.xml.rels"] = v(E(
394
- `<Relationship Id="rId1" Type="${$}/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId2" Type="${$}/slideLayout" Target="../slideLayouts/slideLayout2.xml"/><Relationship Id="rId3" Type="${$}/slideLayout" Target="../slideLayouts/slideLayout3.xml"/><Relationship Id="rId4" Type="${$}/theme" Target="../theme/theme1.xml"/>`
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"/>`
395
665
  ));
396
- const c = et(a, t);
397
- for (const m of c)
398
- e[`ppt/slideLayouts/slideLayout${m.part}.xml`] = v(`${M}<p:sldLayout xmlns:a="${F}" xmlns:r="${$}" xmlns:p="${A}" type="${m.type}" showMasterSp="0">
399
- <p:cSld name="${m.name}"><p:spTree>${D}${m.shapes}</p:spTree></p:cSld>
400
- <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`), e[`ppt/slideLayouts/_rels/slideLayout${m.part}.xml.rels`] = v(E(
401
- `<Relationship Id="rId1" Type="${$}/slideMaster" Target="../slideMasters/slideMaster1.xml"/>`
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"/>`
402
672
  ));
403
- o && (e["ppt/notesMasters/notesMaster1.xml"] = v(`${M}<p:notesMaster xmlns:a="${F}" xmlns:r="${$}" xmlns:p="${A}">
404
- <p:cSld><p:spTree>${D}</p:spTree></p:cSld>
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>
405
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"/>
406
- <p:hf/><p:notesStyle/></p:notesMaster>`), e["ppt/notesMasters/_rels/notesMaster1.xml.rels"] = v(E(
407
- `<Relationship Id="rId1" Type="${$}/theme" Target="../theme/theme1.xml"/>`
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"/>`
408
678
  )));
409
- for (let m = 0; m < r; m++)
410
- e[`ppt/slides/slide${m + 1}.xml`] = v(me()), e[`ppt/slides/_rels/slide${m + 1}.xml.rels`] = v(E(
411
- `<Relationship Id="rId1" Type="${$}/slideLayout" Target="../slideLayouts/slideLayout3.xml"/>`
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"/>`
412
682
  ));
413
- return e;
683
+ return a;
414
684
  }
415
- function me() {
416
- return `${M}<p:sld xmlns:a="${F}" xmlns:r="${$}" xmlns:p="${A}">
417
- <p:cSld><p:spTree>${D}</p:spTree></p:cSld>
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>
418
688
  <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld>`;
419
689
  }
420
- const N = (a) => a.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;"), tt = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide", rt = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster", at = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide";
421
- function ee(a, t, r, s = !1) {
422
- if (!r) return;
423
- if (r.warp) throw new Error("生成保存暂不支持艺术字变形");
424
- for (const n of r.paragraphs) {
425
- if (n.bulletImage) throw new Error("生成保存暂不支持图片项目符号");
426
- for (const l of n.runs)
427
- if (l.field || l.caps || l.outline || l.gradient || l.highlight || l.underlineColor || l.shadow || l.math)
428
- throw new Error("生成保存暂不支持当前文字的高级字符语义");
429
- }
430
- const e = Pe(r), o = r.autoFitShape ? "shape" : r.autoFitNormal ? "normal" : "none";
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) {
431
772
  return {
432
- ...e,
433
- bodyOverrides: {
434
- anchor: r.anchor,
435
- insets: r.insets,
436
- wrap: r.wrap,
437
- vert: r.vert ?? "horz",
438
- anchorCtr: r.anchorCtr ?? !1,
439
- columns: r.columns ?? 1,
440
- columnGap: r.columnGap ?? 0,
441
- autoFit: o
442
- },
443
- paragraphs: e.paragraphs.map((n, l) => ({
444
- ...n,
445
- sourceParagraph: void 0,
446
- paragraphOverrides: {
447
- align: n.props.align,
448
- lineHeight: n.props.lineHeight,
449
- spaceBefore: n.props.spaceBefore,
450
- spaceAfter: n.props.spaceAfter,
451
- marginLeft: n.props.marL,
452
- indent: n.props.indent
453
- },
454
- marks: n.marks.map((c, m) => {
455
- var h, f;
456
- const i = r.paragraphs[l], d = i == null ? void 0 : i.runs[m], p = (((h = i == null ? void 0 : i.editInfo) == null ? void 0 : h.directRun) ?? 0) | (((f = d == null ? void 0 : d.editInfo) == null ? void 0 : f.direct) ?? 0);
457
- return {
458
- ...c,
459
- source: void 0,
460
- preserveSource: void 0,
461
- // 生成包不再拥有原主题继承链;表样式控制的 b/color 只有真实直设才固定。
462
- runOverrides: {
463
- size: c.props.size,
464
- ...!s || p & H.b ? { b: c.props.b } : {},
465
- ...s && p & H.color ? { color: c.props.color } : {},
466
- i: c.props.i,
467
- u: c.props.u,
468
- strike: c.props.strike,
469
- ...c.props.link ? { link: pe(a, t, c.props.link, "文字链接") } : {}
470
- }
471
- };
472
- })
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 }];
473
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
+ });
474
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);
475
1072
  }
476
- function st(a, t, r) {
477
- const s = r.src, e = {
478
- x: s.x,
479
- y: s.y,
480
- w: s.w,
481
- h: s.h,
482
- rot: s.rot,
483
- flipH: s.flipH,
484
- flipV: s.flipV,
485
- ...s.name ? { name: s.name } : {},
486
- ...s.effects ? { effects: s.effects } : {},
487
- ...s.link && we(s.kind) ? { link: pe(a, t, s.link, `元素 ${r.id} 链接`) } : {}
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
+ };
488
1100
  };
489
- if (s.kind === "shape") {
490
- const o = ee(a, t, s.text);
1101
+ if (a.kind === "shape") {
1102
+ const p = je(e, t, a.text, c());
491
1103
  return {
492
- ...e,
493
- ...s.fill && s.fill.type !== "image" ? { fill: s.fill } : {},
494
- ...o ? { text: o } : {}
1104
+ ...i,
1105
+ ...a.fill && a.fill.type !== "image" ? { fill: a.fill } : {},
1106
+ ...p ? { text: p } : {}
495
1107
  };
496
1108
  }
497
- if (s.kind === "image")
498
- return { ...e, ...s.crop ? { crop: s.crop } : {} };
499
- if (s.kind === "table") {
500
- const o = {};
501
- return s.rows.forEach((n, l) => n.cells.forEach((c, m) => {
502
- var d, p;
503
- const i = !c.merged && ee(
504
- a,
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,
505
1117
  t,
506
- c.text,
507
- !!((d = s.editInfo) != null && d.tableStyle) && !!((p = c.editInfo) != null && p.styleBase)
1118
+ $.text,
1119
+ c(`R${y + 1}C${x + 1}`),
1120
+ !!((g = a.editInfo) != null && g.tableStyle) && !!((b = $.editInfo) != null && b.styleBase)
508
1121
  );
509
- i && (o[Se({ r: l, c: m })] = { text: i });
510
- })), { ...e, ...Object.keys(o).length ? { tableCells: o } : {} };
1122
+ h && (p[zt({ r: y, c: x })] = { text: h });
1123
+ })), { ...i, ...Object.keys(p).length ? { tableCells: p } : {} };
511
1124
  }
512
- return e;
513
- }
514
- function nt(a, t, r, s) {
515
- var h;
516
- const e = t.src;
517
- if (e.kind !== "shape") throw new Error(`生成保存暂不支持元素类型:${e.kind}`);
518
- const o = t.meta.geom, n = o == null ? void 0 : o.preset, l = Object.entries((o == null ? void 0 : o.adj) ?? {}).map(([f, x]) => {
519
- if (!Number.isSafeInteger(Math.round(x))) throw new Error(`形状 ${t.id} 的几何调整值无效`);
520
- return `<a:gd name="${N(f)}" fmla="val ${Math.round(x)}"/>`;
521
- }).join(""), c = e.text ? "<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr/></a:p></p:txBody>" : "", m = N(e.name ?? `形状 ${r}`), i = e.path === null, d = i ? "" : n ? `<a:prstGeom prst="${N(n)}"><a:avLst>${l}</a:avLst></a:prstGeom>` : ie(e.path, e.w, e.h, !!e.openGeom), p = ((h = e.fill) == null ? void 0 : h.type) === "image" ? X(a, e.fill, `rIdFill${r}`, s) : null;
522
- if (p && !p.resource)
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)
523
1136
  throw new Error(`形状 ${t.id} 的外链图片填充不能生成独立包`);
524
1137
  return {
525
- markup: `<p:sp><p:nvSpPr><p:cNvPr id="${r}" name="${m}"/><p:cNvSpPr${i ? ' txBox="1"' : ""}/><p:nvPr/></p:nvSpPr>
1138
+ markup: `<p:sp><p:nvSpPr><p:cNvPr id="${s}" name="${l}"/><p:cNvSpPr${m ? ' txBox="1"' : ""}/><p:nvPr/></p:nvSpPr>
526
1139
  <p:spPr><a:xfrm/>${d}</p:spPr>${c}</p:sp>`,
527
- namespaces: { "xmlns:a": j, "xmlns:p": _ },
528
- spids: { [String(r)]: r },
529
- ...p ? { relationships: [p.relationship] } : {},
530
- ...p != null && p.resource ? { resources: [p.resource] } : {}
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] } : {}
531
1144
  };
532
1145
  }
533
- function T(a, t) {
534
- const r = Math.round(a * 9525);
535
- if (!Number.isSafeInteger(r)) throw new Error(`组合 ${t} 超出 OOXML 安全整数范围`);
536
- return String(r);
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);
537
1150
  }
538
- function ot(a, t) {
539
- const r = a.src;
540
- if (r.kind !== "group") throw new Error(`元素 ${a.id} 不是组合`);
541
- const s = r.w / r.scaleX, e = r.h / r.scaleY, o = N(r.name ?? `组合 ${t}`);
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}`);
542
1155
  return {
543
- markup: `<p:grpSp><p:nvGrpSpPr><p:cNvPr id="${t}" name="${o}"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
544
- <p:grpSpPr><a:xfrm><a:off x="${T(r.x, "x")}" y="${T(r.y, "y")}"/>
545
- <a:ext cx="${T(r.w, "w")}" cy="${T(r.h, "h")}"/>
546
- <a:chOff x="${T(r.childX, "childX")}" y="${T(r.childY, "childY")}"/>
547
- <a:chExt cx="${T(s, "childWidth")}" cy="${T(e, "childHeight")}"/>
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")}"/>
548
1161
  </a:xfrm></p:grpSpPr></p:grpSp>`,
549
- namespaces: { "xmlns:a": j, "xmlns:p": _ },
1162
+ namespaces: { "xmlns:a": _, "xmlns:p": H },
550
1163
  spids: { [String(t)]: t }
551
1164
  };
552
1165
  }
553
- function lt(a, t, r, s) {
554
- const e = t.src;
555
- if (e.kind !== "unsupported") throw new Error(`元素 ${t.id} 不是框架占位`);
556
- const o = N(e.name ?? `未支持对象 ${r}`), n = N(e.label).replace(/>/g, "&gt;"), l = e.preview ? X(a, { src: e.preview, name: e.name, id: e.id }, `rIdUnsupportedPreview${r}`, s) : null;
557
- if (l && !l.resource) throw new Error(`框架占位 ${t.id} 的外链预览不能生成独立包`);
558
- const c = l ? `<a:blipFill><a:blip r:embed="${l.relationship.targetId}"/><a:stretch><a:fillRect/></a:stretch></a:blipFill>` : '<a:solidFill><a:srgbClr val="F2F2F2"/></a:solidFill>';
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>';
559
1172
  return {
560
- markup: `<p:sp><p:nvSpPr><p:cNvPr id="${r}" name="${o}"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>
1173
+ markup: `<p:sp><p:nvSpPr><p:cNvPr id="${s}" name="${a}"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>
561
1174
  <p:spPr><a:xfrm/><a:prstGeom prst="rect"><a:avLst/></a:prstGeom>
562
1175
  ${c}<a:ln w="12700"><a:solidFill><a:srgbClr val="AAAAAA"/></a:solidFill><a:prstDash val="dash"/></a:ln></p:spPr>
563
- <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>${n}</a:t></a:r><a:endParaRPr lang="zh-CN"/></a:p></p:txBody></p:sp>`,
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>`,
564
1177
  namespaces: {
565
- "xmlns:a": j,
566
- "xmlns:p": _,
567
- ...l ? { "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships" } : {}
1178
+ "xmlns:a": _,
1179
+ "xmlns:p": H,
1180
+ ...i ? { "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships" } : {}
568
1181
  },
569
- spids: { [String(r)]: r },
570
- ...l ? { relationships: [l.relationship] } : {},
571
- ...l != null && l.resource ? { resources: [l.resource] } : {}
1182
+ spids: { [String(s)]: s },
1183
+ ...i ? { relationships: [i.relationship] } : {},
1184
+ ...i != null && i.resource ? { resources: [i.resource] } : {}
572
1185
  };
573
1186
  }
574
- function it(a, t, r, s) {
575
- if (t.src.scene3d) throw new Error(`生成保存暂不支持三维元素:${t.id}`);
576
- if (t.src.kind === "image" && t.src.filter)
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))
577
1193
  throw new Error(`生成保存暂不支持图片滤镜:${t.id}`);
578
- if (t.src.kind === "shape") return nt(a, t, r, s);
579
- if (t.src.kind === "image") return Xe(a, t, r, s);
580
- if (t.src.kind === "table") return Qe(t, r);
581
- if (t.src.kind === "group") return ot(t, r);
582
- if (t.src.kind === "unsupported") return lt(a, t, r, s);
583
- const e = t.src;
584
- throw new Error(`生成保存遇到未知元素类型:${String(e)}`);
585
- }
586
- function pt(a, t) {
587
- const r = /* @__PURE__ */ new Set([1]), s = /* @__PURE__ */ new Map();
588
- let e = 2;
589
- const o = (n) => {
590
- const l = a.elements[n].src.id;
591
- let c = l && Number.isSafeInteger(l) && l > 1 && !r.has(l) ? l : 0;
592
- for (; !c && r.has(e); ) e++;
593
- c || (c = e++), r.add(c), s.set(n, c);
594
- for (const m of a.elements[n].children ?? []) o(m);
595
- };
596
- for (const n of a.slides[t].children) o(n);
597
- return s;
598
- }
599
- function ct(a, t, r, s) {
600
- var k;
601
- const e = `ppt/slides/slide${r + 1}.xml`, o = pt(a, t), n = /* @__PURE__ */ Object.create(null);
602
- for (const [u, y] of Object.entries(a.elements)) {
603
- if (!o.has(u)) continue;
604
- const w = structuredClone(ne(a, u)), S = {
605
- ...structuredClone(y),
606
- src: w,
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,
607
1218
  ovr: {},
608
1219
  meta: {
609
- ...structuredClone(y.meta),
1220
+ ...structuredClone(I.meta),
610
1221
  editable: "full",
611
1222
  created: !0,
612
1223
  inherited: void 0,
613
- origin: { part: e, spid: o.get(u) }
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
+ } : {}
614
1229
  }
615
1230
  };
616
- S.meta.insertion = it(a, S, o.get(u), e), S.ovr = st(a, t, S), n[u] = S;
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;
617
1242
  }
618
- const l = structuredClone(a.slides[t]);
619
- l.origin = { part: e };
620
- const c = oe(a, t), m = c.background, i = (m == null ? void 0 : m.type) === "image" ? X(a, m, "rIdBackground", e) : null;
621
- if (i && !i.resource)
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)
622
1247
  throw new Error(`页面 ${t} 的外链图片背景不能生成独立包`);
623
- if ((m == null ? void 0 : m.type) === "image" && (i != null && i.resource)) {
624
- const u = Y(i.resource.hash);
625
- l.backgroundImage = {
626
- src: u,
627
- relationships: [i.relationship],
628
- resourceHash: i.resource.hash,
629
- resourceHashes: [i.resource.hash],
630
- imageRelationshipId: i.relationship.targetId
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
631
1256
  };
632
1257
  }
633
- const d = xe(a, [t]).value, p = (m == null ? void 0 : m.type) === "image" && (i != null && i.resource) ? { ...m, src: Y(i.resource.hash) } : m;
634
- l.ovr = {
635
- ...p ? { background: p } : {},
636
- hidden: !!c.hidden,
637
- ...c.transition ? { transition: c.transition } : {},
638
- ...d.length ? { animations: d } : {}
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 } : {}
639
1264
  };
640
- const h = Object.fromEntries(a.slideOrder.map((u, y) => {
641
- const w = structuredClone(a.slides[u]);
642
- return w.origin = { part: `ppt/slides/slide${y + 1}.xml` }, delete w.backgroundImage, [u, w];
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];
643
1268
  }));
644
- h[t] = l;
645
- const f = {
646
- ...structuredClone({ ...a, package: null }),
647
- slides: h,
648
- elements: n,
1269
+ x[t] = d;
1270
+ const h = {
1271
+ ...structuredClone({ ...e, package: null }),
1272
+ slides: x,
1273
+ elements: l,
649
1274
  imageResources: {
650
- ...structuredClone(a.imageResources),
651
- ...i != null && i.resource ? { [i.resource.hash]: i.resource } : {}
1275
+ ...structuredClone(e.imageResources),
1276
+ ...Object.fromEntries(m),
1277
+ ...f != null && f.resource ? { [f.resource.hash]: f.resource } : {}
652
1278
  },
653
1279
  removedElements: {},
654
1280
  package: null
655
- }, x = [...l.children].sort((u, y) => V(n[u]).localeCompare(V(n[y])));
656
- l.children = x;
657
- const g = Me(me()), b = Object.values(n).flatMap((u) => {
658
- var y;
659
- return ((y = u.meta.insertion) == null ? void 0 : y.relationships) ?? [];
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) ?? [];
660
1286
  });
661
- i && b.push(i.relationship);
662
- const I = $e(f, e, s, b);
663
- ye(g, f, e, x.map((u) => n[u]), [], { links: I }), Ae(g, f, l);
664
- for (const u of Object.values(n))
665
- u.src.kind === "shape" && ((k = u.src.fill) == null ? void 0 : k.type) === "image" && ve(g, u, u.src.fill, `rIdFill${o.get(u.id)}`), (u.src.kind === "shape" || u.src.kind === "image") && be(g, u, u.src.stroke ?? null);
666
- return { bytes: ke(g), work: f, links: I };
667
- }
668
- function mt(a) {
669
- const t = a.slideOrder.map((n) => oe(a, n)), r = a.slideOrder.map((n, l) => !!a.slides[n].notes || t[l].notes !== void 0), s = ce(
670
- a.meta.width,
671
- a.meta.height,
672
- a.slideOrder.length,
673
- r
674
- ), e = Ye(a);
675
- if (e.length) {
676
- const n = "ppt/tableStyles.xml";
677
- s[n] = Ce(void 0, e), s["[Content_Types].xml"] = Le(s["[Content_Types].xml"], n), s["ppt/_rels/presentation.xml.rels"] = Ee(
678
- s["ppt/_rels/presentation.xml.rels"],
679
- n
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
+ $
680
1310
  );
681
1311
  }
682
- const o = /* @__PURE__ */ new Map();
683
- a.slideOrder.forEach((n, l) => {
684
- const c = `ppt/slides/slide${l + 1}.xml`, m = q(c), i = ct(a, n, l, s[m]);
685
- s[c] = i.bytes;
686
- const d = Fe(i.work);
687
- for (const [p, h] of d.relationships) {
688
- const f = q(p);
689
- s[f] = p === c ? ge(
690
- s[f],
691
- h,
692
- i.links,
693
- i.bytes
694
- ) : W(s[f], h);
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);
695
1325
  }
696
- for (const [p, h] of d.resources) {
697
- const f = o.get(p);
698
- if (f && f.hash !== h.hash) throw new Error(`生成媒体 part 冲突:${p}`);
699
- o.set(p, h);
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);
700
1330
  }
701
- if (r[l]) {
702
- const p = `ppt/notesSlides/notesSlide${l + 1}.xml`;
703
- s[p] = Ne(t[l].notes ?? ""), s[q(p)] = W(void 0, [{
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, [{
704
1334
  sourceId: "rId1",
705
1335
  targetId: "rId1",
706
- type: rt,
707
- target: B(p, "ppt/notesMasters/notesMaster1.xml")
1336
+ type: ts,
1337
+ target: V(S, "ppt/notesMasters/notesMaster1.xml")
708
1338
  }, {
709
1339
  sourceId: "rId2",
710
1340
  targetId: "rId2",
711
- type: at,
712
- target: B(p, c)
713
- }]), s[m] = W(s[m], [{
1341
+ type: rs,
1342
+ target: V(S, h)
1343
+ }]), l[g] = le(l[g], [{
714
1344
  sourceId: "rIdNotes",
715
1345
  targetId: "rIdNotes",
716
- type: tt,
717
- target: B(c, p)
1346
+ type: es,
1347
+ target: V(h, S)
718
1348
  }]);
719
1349
  }
720
1350
  });
721
- for (const [n, l] of o) s[n] = Oe(l);
722
- return s["[Content_Types].xml"] = Re(
723
- s["[Content_Types].xml"],
724
- [...o.values()]
725
- ), s;
726
- }
727
- function yt(a = {}) {
728
- const t = a.width ?? 1280, r = a.height ?? 720;
729
- if (!Number.isFinite(t) || t <= 0 || !Number.isFinite(r) || r <= 0)
730
- throw new Error("页面宽高必须是有限正数");
731
- const s = le(ce(t, r, 1));
732
- return Te(s.package), s.bytes;
733
- }
734
- function vt(a) {
735
- var t;
736
- if (a.meta.readonly) throw new Error("只读编辑文档不能生成保存");
737
- if (Ie((t = a.package) != null && t.disposed ? { ...a, meta: { ...a.meta, readonly: !0 }, package: null } : a), a.meta.source === "pptx" && a.package && !a.package.disposed)
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)
738
1457
  throw new Error("存在可补丁原包时必须使用补丁保存");
739
- return le(mt(a));
1458
+ return We(it(e));
740
1459
  }
741
1460
  export {
742
- yt as createBlankPptx,
743
- vt as generateEditDoc
1461
+ $s as copyPortableElements,
1462
+ ys as createBlankPptx,
1463
+ ws as generateEditDoc
744
1464
  };