docxmlater 10.4.0 → 11.0.4

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 (699) hide show
  1. package/README.md +3 -3
  2. package/dist/constants/legacyCompatFlags.d.ts +1 -1
  3. package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
  4. package/dist/constants/legacyCompatFlags.js.map +1 -1
  5. package/dist/core/Document.d.ts +75 -67
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +618 -414
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +11 -10
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +19 -19
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentEvents.d.ts +39 -0
  14. package/dist/core/DocumentEvents.d.ts.map +1 -0
  15. package/dist/core/DocumentEvents.js +51 -0
  16. package/dist/core/DocumentEvents.js.map +1 -0
  17. package/dist/core/DocumentGenerator.d.ts +11 -11
  18. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  19. package/dist/core/DocumentGenerator.js +72 -52
  20. package/dist/core/DocumentGenerator.js.map +1 -1
  21. package/dist/core/DocumentParser.d.ts +15 -15
  22. package/dist/core/DocumentParser.d.ts.map +1 -1
  23. package/dist/core/DocumentParser.js +2100 -1076
  24. package/dist/core/DocumentParser.js.map +1 -1
  25. package/dist/core/DocumentValidator.d.ts +3 -3
  26. package/dist/core/DocumentValidator.d.ts.map +1 -1
  27. package/dist/core/DocumentValidator.js +31 -31
  28. package/dist/core/DocumentValidator.js.map +1 -1
  29. package/dist/core/ElementRegistry.d.ts +22 -0
  30. package/dist/core/ElementRegistry.d.ts.map +1 -0
  31. package/dist/core/ElementRegistry.js +27 -0
  32. package/dist/core/ElementRegistry.js.map +1 -0
  33. package/dist/core/Relationship.js +4 -4
  34. package/dist/core/Relationship.js.map +1 -1
  35. package/dist/core/RelationshipManager.d.ts +1 -1
  36. package/dist/core/RelationshipManager.d.ts.map +1 -1
  37. package/dist/core/RelationshipManager.js +32 -32
  38. package/dist/core/RelationshipManager.js.map +1 -1
  39. package/dist/elements/AlternateContent.d.ts +1 -1
  40. package/dist/elements/AlternateContent.d.ts.map +1 -1
  41. package/dist/elements/AlternateContent.js.map +1 -1
  42. package/dist/elements/Bookmark.d.ts +6 -1
  43. package/dist/elements/Bookmark.d.ts.map +1 -1
  44. package/dist/elements/Bookmark.js +19 -3
  45. package/dist/elements/Bookmark.js.map +1 -1
  46. package/dist/elements/BookmarkManager.d.ts +1 -1
  47. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  48. package/dist/elements/BookmarkManager.js +7 -7
  49. package/dist/elements/BookmarkManager.js.map +1 -1
  50. package/dist/elements/Comment.d.ts +2 -2
  51. package/dist/elements/Comment.d.ts.map +1 -1
  52. package/dist/elements/Comment.js +4 -4
  53. package/dist/elements/Comment.js.map +1 -1
  54. package/dist/elements/CommentManager.d.ts +2 -2
  55. package/dist/elements/CommentManager.d.ts.map +1 -1
  56. package/dist/elements/CommentManager.js +9 -9
  57. package/dist/elements/CommentManager.js.map +1 -1
  58. package/dist/elements/CommonTypes.d.ts +9 -4
  59. package/dist/elements/CommonTypes.d.ts.map +1 -1
  60. package/dist/elements/CommonTypes.js +1 -0
  61. package/dist/elements/CommonTypes.js.map +1 -1
  62. package/dist/elements/CustomXml.d.ts +1 -1
  63. package/dist/elements/CustomXml.d.ts.map +1 -1
  64. package/dist/elements/CustomXml.js.map +1 -1
  65. package/dist/elements/Endnote.d.ts +2 -2
  66. package/dist/elements/Endnote.d.ts.map +1 -1
  67. package/dist/elements/Endnote.js +9 -9
  68. package/dist/elements/Endnote.js.map +1 -1
  69. package/dist/elements/EndnoteManager.d.ts +1 -1
  70. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  71. package/dist/elements/EndnoteManager.js +11 -11
  72. package/dist/elements/EndnoteManager.js.map +1 -1
  73. package/dist/elements/Field.d.ts +9 -5
  74. package/dist/elements/Field.d.ts.map +1 -1
  75. package/dist/elements/Field.js +21 -9
  76. package/dist/elements/Field.js.map +1 -1
  77. package/dist/elements/FieldHelpers.d.ts +1 -1
  78. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  79. package/dist/elements/FieldHelpers.js +10 -10
  80. package/dist/elements/FieldHelpers.js.map +1 -1
  81. package/dist/elements/Footer.d.ts +3 -3
  82. package/dist/elements/Footer.d.ts.map +1 -1
  83. package/dist/elements/Footer.js +5 -5
  84. package/dist/elements/Footer.js.map +1 -1
  85. package/dist/elements/Footnote.d.ts +2 -2
  86. package/dist/elements/Footnote.d.ts.map +1 -1
  87. package/dist/elements/Footnote.js +9 -9
  88. package/dist/elements/Footnote.js.map +1 -1
  89. package/dist/elements/FootnoteManager.d.ts +1 -1
  90. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  91. package/dist/elements/FootnoteManager.js +11 -11
  92. package/dist/elements/FootnoteManager.js.map +1 -1
  93. package/dist/elements/Header.d.ts +3 -3
  94. package/dist/elements/Header.d.ts.map +1 -1
  95. package/dist/elements/Header.js +5 -5
  96. package/dist/elements/Header.js.map +1 -1
  97. package/dist/elements/HeaderFooterManager.d.ts +2 -2
  98. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  99. package/dist/elements/HeaderFooterManager.js.map +1 -1
  100. package/dist/elements/Hyperlink.d.ts +5 -5
  101. package/dist/elements/Hyperlink.d.ts.map +1 -1
  102. package/dist/elements/Hyperlink.js +29 -29
  103. package/dist/elements/Hyperlink.js.map +1 -1
  104. package/dist/elements/Image.d.ts +1 -1
  105. package/dist/elements/Image.d.ts.map +1 -1
  106. package/dist/elements/Image.js +67 -67
  107. package/dist/elements/Image.js.map +1 -1
  108. package/dist/elements/ImageManager.d.ts +1 -1
  109. package/dist/elements/ImageManager.d.ts.map +1 -1
  110. package/dist/elements/ImageManager.js +4 -4
  111. package/dist/elements/ImageManager.js.map +1 -1
  112. package/dist/elements/ImageRun.d.ts +3 -3
  113. package/dist/elements/ImageRun.d.ts.map +1 -1
  114. package/dist/elements/ImageRun.js +2 -2
  115. package/dist/elements/ImageRun.js.map +1 -1
  116. package/dist/elements/MathElement.d.ts +1 -1
  117. package/dist/elements/MathElement.d.ts.map +1 -1
  118. package/dist/elements/MathElement.js.map +1 -1
  119. package/dist/elements/Paragraph.d.ts +34 -19
  120. package/dist/elements/Paragraph.d.ts.map +1 -1
  121. package/dist/elements/Paragraph.js +286 -231
  122. package/dist/elements/Paragraph.js.map +1 -1
  123. package/dist/elements/PreservedElement.d.ts +1 -1
  124. package/dist/elements/PreservedElement.d.ts.map +1 -1
  125. package/dist/elements/PreservedElement.js.map +1 -1
  126. package/dist/elements/PropertyChangeTypes.d.ts +2 -2
  127. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  128. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  129. package/dist/elements/RangeMarker.d.ts +14 -1
  130. package/dist/elements/RangeMarker.d.ts.map +1 -1
  131. package/dist/elements/RangeMarker.js +46 -8
  132. package/dist/elements/RangeMarker.js.map +1 -1
  133. package/dist/elements/RegisteredBodyElement.d.ts +15 -0
  134. package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
  135. package/dist/elements/RegisteredBodyElement.js +44 -0
  136. package/dist/elements/RegisteredBodyElement.js.map +1 -0
  137. package/dist/elements/Revision.d.ts +8 -8
  138. package/dist/elements/Revision.d.ts.map +1 -1
  139. package/dist/elements/Revision.js +12 -12
  140. package/dist/elements/Revision.js.map +1 -1
  141. package/dist/elements/RevisionContent.d.ts +3 -3
  142. package/dist/elements/RevisionContent.d.ts.map +1 -1
  143. package/dist/elements/RevisionContent.js.map +1 -1
  144. package/dist/elements/RevisionManager.d.ts +2 -2
  145. package/dist/elements/RevisionManager.d.ts.map +1 -1
  146. package/dist/elements/RevisionManager.js +2 -2
  147. package/dist/elements/RevisionManager.js.map +1 -1
  148. package/dist/elements/Run.d.ts +16 -10
  149. package/dist/elements/Run.d.ts.map +1 -1
  150. package/dist/elements/Run.js +199 -173
  151. package/dist/elements/Run.js.map +1 -1
  152. package/dist/elements/Section.d.ts +4 -2
  153. package/dist/elements/Section.d.ts.map +1 -1
  154. package/dist/elements/Section.js +152 -145
  155. package/dist/elements/Section.js.map +1 -1
  156. package/dist/elements/Shape.d.ts +3 -3
  157. package/dist/elements/Shape.d.ts.map +1 -1
  158. package/dist/elements/Shape.js +12 -12
  159. package/dist/elements/Shape.js.map +1 -1
  160. package/dist/elements/StructuredDocumentTag.d.ts +3 -3
  161. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  162. package/dist/elements/StructuredDocumentTag.js +39 -39
  163. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  164. package/dist/elements/Table.d.ts +16 -10
  165. package/dist/elements/Table.d.ts.map +1 -1
  166. package/dist/elements/Table.js +118 -89
  167. package/dist/elements/Table.js.map +1 -1
  168. package/dist/elements/TableCell.d.ts +11 -11
  169. package/dist/elements/TableCell.d.ts.map +1 -1
  170. package/dist/elements/TableCell.js +108 -78
  171. package/dist/elements/TableCell.js.map +1 -1
  172. package/dist/elements/TableGridChange.d.ts +1 -1
  173. package/dist/elements/TableGridChange.d.ts.map +1 -1
  174. package/dist/elements/TableGridChange.js +3 -3
  175. package/dist/elements/TableGridChange.js.map +1 -1
  176. package/dist/elements/TableOfContents.d.ts +1 -1
  177. package/dist/elements/TableOfContents.d.ts.map +1 -1
  178. package/dist/elements/TableOfContents.js +2 -2
  179. package/dist/elements/TableOfContents.js.map +1 -1
  180. package/dist/elements/TableOfContentsElement.d.ts +2 -2
  181. package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
  182. package/dist/elements/TableOfContentsElement.js +5 -5
  183. package/dist/elements/TableOfContentsElement.js.map +1 -1
  184. package/dist/elements/TableRow.d.ts +18 -7
  185. package/dist/elements/TableRow.d.ts.map +1 -1
  186. package/dist/elements/TableRow.js +127 -74
  187. package/dist/elements/TableRow.js.map +1 -1
  188. package/dist/elements/TextBox.d.ts +4 -4
  189. package/dist/elements/TextBox.d.ts.map +1 -1
  190. package/dist/elements/TextBox.js +6 -6
  191. package/dist/elements/TextBox.js.map +1 -1
  192. package/dist/esm/constants/legacyCompatFlags.js +97 -0
  193. package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
  194. package/dist/esm/constants/limits.js +36 -0
  195. package/dist/esm/constants/limits.js.map +1 -0
  196. package/dist/esm/core/Document.js +8498 -0
  197. package/dist/esm/core/Document.js.map +1 -0
  198. package/dist/esm/core/DocumentContent.js +190 -0
  199. package/dist/esm/core/DocumentContent.js.map +1 -0
  200. package/dist/esm/core/DocumentEvents.js +47 -0
  201. package/dist/esm/core/DocumentEvents.js.map +1 -0
  202. package/dist/esm/core/DocumentGenerator.js +764 -0
  203. package/dist/esm/core/DocumentGenerator.js.map +1 -0
  204. package/dist/esm/core/DocumentIdManager.js +67 -0
  205. package/dist/esm/core/DocumentIdManager.js.map +1 -0
  206. package/dist/esm/core/DocumentParser.js +8760 -0
  207. package/dist/esm/core/DocumentParser.js.map +1 -0
  208. package/dist/esm/core/DocumentValidator.js +222 -0
  209. package/dist/esm/core/DocumentValidator.js.map +1 -0
  210. package/dist/esm/core/ElementRegistry.js +24 -0
  211. package/dist/esm/core/ElementRegistry.js.map +1 -0
  212. package/dist/esm/core/Relationship.js +177 -0
  213. package/dist/esm/core/Relationship.js.map +1 -0
  214. package/dist/esm/core/RelationshipManager.js +202 -0
  215. package/dist/esm/core/RelationshipManager.js.map +1 -0
  216. package/dist/esm/elements/AlternateContent.js +19 -0
  217. package/dist/esm/elements/AlternateContent.js.map +1 -0
  218. package/dist/esm/elements/Bookmark.js +115 -0
  219. package/dist/esm/elements/Bookmark.js.map +1 -0
  220. package/dist/esm/elements/BookmarkManager.js +99 -0
  221. package/dist/esm/elements/BookmarkManager.js.map +1 -0
  222. package/dist/esm/elements/Comment.js +181 -0
  223. package/dist/esm/elements/Comment.js.map +1 -0
  224. package/dist/esm/elements/CommentManager.js +233 -0
  225. package/dist/esm/elements/CommentManager.js.map +1 -0
  226. package/dist/esm/elements/CommonTypes.js +106 -0
  227. package/dist/esm/elements/CommonTypes.js.map +1 -0
  228. package/dist/esm/elements/CustomXml.js +19 -0
  229. package/dist/esm/elements/CustomXml.js.map +1 -0
  230. package/dist/esm/elements/Endnote.js +107 -0
  231. package/dist/esm/elements/Endnote.js.map +1 -0
  232. package/dist/esm/elements/EndnoteManager.js +119 -0
  233. package/dist/esm/elements/EndnoteManager.js.map +1 -0
  234. package/dist/esm/elements/Field.js +856 -0
  235. package/dist/esm/elements/Field.js.map +1 -0
  236. package/dist/esm/elements/FieldHelpers.js +134 -0
  237. package/dist/esm/elements/FieldHelpers.js.map +1 -0
  238. package/dist/esm/elements/FontManager.js +158 -0
  239. package/dist/esm/elements/FontManager.js.map +1 -0
  240. package/dist/esm/elements/Footer.js +141 -0
  241. package/dist/esm/elements/Footer.js.map +1 -0
  242. package/dist/esm/elements/Footnote.js +107 -0
  243. package/dist/esm/elements/Footnote.js.map +1 -0
  244. package/dist/esm/elements/FootnoteManager.js +119 -0
  245. package/dist/esm/elements/FootnoteManager.js.map +1 -0
  246. package/dist/esm/elements/Header.js +141 -0
  247. package/dist/esm/elements/Header.js.map +1 -0
  248. package/dist/esm/elements/HeaderFooterManager.js +87 -0
  249. package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
  250. package/dist/esm/elements/Hyperlink.js +586 -0
  251. package/dist/esm/elements/Hyperlink.js.map +1 -0
  252. package/dist/esm/elements/Image.js +1288 -0
  253. package/dist/esm/elements/Image.js.map +1 -0
  254. package/dist/esm/elements/ImageManager.js +223 -0
  255. package/dist/esm/elements/ImageManager.js.map +1 -0
  256. package/dist/esm/elements/ImageRun.js +29 -0
  257. package/dist/esm/elements/ImageRun.js.map +1 -0
  258. package/dist/esm/elements/MathElement.js +37 -0
  259. package/dist/esm/elements/MathElement.js.map +1 -0
  260. package/dist/esm/elements/Paragraph.js +2308 -0
  261. package/dist/esm/elements/Paragraph.js.map +1 -0
  262. package/dist/esm/elements/PreservedElement.js +29 -0
  263. package/dist/esm/elements/PreservedElement.js.map +1 -0
  264. package/dist/esm/elements/PropertyChangeTypes.js +53 -0
  265. package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
  266. package/dist/esm/elements/RangeMarker.js +219 -0
  267. package/dist/esm/elements/RangeMarker.js.map +1 -0
  268. package/dist/esm/elements/RegisteredBodyElement.js +40 -0
  269. package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
  270. package/dist/esm/elements/Revision.js +498 -0
  271. package/dist/esm/elements/Revision.js.map +1 -0
  272. package/dist/esm/elements/RevisionContent.js +18 -0
  273. package/dist/esm/elements/RevisionContent.js.map +1 -0
  274. package/dist/esm/elements/RevisionManager.js +486 -0
  275. package/dist/esm/elements/RevisionManager.js.map +1 -0
  276. package/dist/esm/elements/Run.js +1465 -0
  277. package/dist/esm/elements/Run.js.map +1 -0
  278. package/dist/esm/elements/Section.js +978 -0
  279. package/dist/esm/elements/Section.js.map +1 -0
  280. package/dist/esm/elements/Shape.js +493 -0
  281. package/dist/esm/elements/Shape.js.map +1 -0
  282. package/dist/esm/elements/StructuredDocumentTag.js +471 -0
  283. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
  284. package/dist/esm/elements/Table.js +1456 -0
  285. package/dist/esm/elements/Table.js.map +1 -0
  286. package/dist/esm/elements/TableCell.js +835 -0
  287. package/dist/esm/elements/TableCell.js.map +1 -0
  288. package/dist/esm/elements/TableGridChange.js +52 -0
  289. package/dist/esm/elements/TableGridChange.js.map +1 -0
  290. package/dist/esm/elements/TableOfContents.js +389 -0
  291. package/dist/esm/elements/TableOfContents.js.map +1 -0
  292. package/dist/esm/elements/TableOfContentsElement.js +29 -0
  293. package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
  294. package/dist/esm/elements/TableRow.js +555 -0
  295. package/dist/esm/elements/TableRow.js.map +1 -0
  296. package/dist/esm/elements/TextBox.js +459 -0
  297. package/dist/esm/elements/TextBox.js.map +1 -0
  298. package/dist/esm/formatting/AbstractNumbering.js +325 -0
  299. package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
  300. package/dist/esm/formatting/NumberingInstance.js +150 -0
  301. package/dist/esm/formatting/NumberingInstance.js.map +1 -0
  302. package/dist/esm/formatting/NumberingLevel.js +608 -0
  303. package/dist/esm/formatting/NumberingLevel.js.map +1 -0
  304. package/dist/esm/formatting/NumberingManager.js +423 -0
  305. package/dist/esm/formatting/NumberingManager.js.map +1 -0
  306. package/dist/esm/formatting/Style.js +1151 -0
  307. package/dist/esm/formatting/Style.js.map +1 -0
  308. package/dist/esm/formatting/StylesManager.js +557 -0
  309. package/dist/esm/formatting/StylesManager.js.map +1 -0
  310. package/dist/esm/helpers/CleanupHelper.js +350 -0
  311. package/dist/esm/helpers/CleanupHelper.js.map +1 -0
  312. package/dist/esm/images/ImageOptimizer.js +161 -0
  313. package/dist/esm/images/ImageOptimizer.js.map +1 -0
  314. package/dist/esm/index.js +75 -0
  315. package/dist/esm/index.js.map +1 -0
  316. package/dist/esm/internal.js +16 -0
  317. package/dist/esm/internal.js.map +1 -0
  318. package/dist/esm/managers/DrawingManager.js +163 -0
  319. package/dist/esm/managers/DrawingManager.js.map +1 -0
  320. package/dist/esm/package.json +3 -0
  321. package/dist/esm/processors/ChangelogGenerator.js +970 -0
  322. package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
  323. package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
  324. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
  325. package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
  326. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
  327. package/dist/esm/processors/MoveOperationHelper.js +57 -0
  328. package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
  329. package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
  330. package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
  331. package/dist/esm/processors/RevisionWalker.js +278 -0
  332. package/dist/esm/processors/RevisionWalker.js.map +1 -0
  333. package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
  334. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
  335. package/dist/esm/processors/ShadingResolver.js +66 -0
  336. package/dist/esm/processors/ShadingResolver.js.map +1 -0
  337. package/dist/esm/processors/acceptRevisions.js +416 -0
  338. package/dist/esm/processors/acceptRevisions.js.map +1 -0
  339. package/dist/esm/processors/cnfStyleDecoder.js +89 -0
  340. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
  341. package/dist/esm/processors/stripTrackedChanges.js +201 -0
  342. package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
  343. package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
  344. package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
  345. package/dist/esm/tracking/TrackingContext.js +2 -0
  346. package/dist/esm/tracking/TrackingContext.js.map +1 -0
  347. package/dist/esm/types/compatibility-types.js +8 -0
  348. package/dist/esm/types/compatibility-types.js.map +1 -0
  349. package/dist/esm/types/document-types.js +2 -0
  350. package/dist/esm/types/document-types.js.map +1 -0
  351. package/dist/esm/types/formatting.js +2 -0
  352. package/dist/esm/types/formatting.js.map +1 -0
  353. package/dist/esm/types/list-types.js +2 -0
  354. package/dist/esm/types/list-types.js.map +1 -0
  355. package/dist/esm/types/settings-types.js +2 -0
  356. package/dist/esm/types/settings-types.js.map +1 -0
  357. package/dist/esm/types/styleConfig.js +2 -0
  358. package/dist/esm/types/styleConfig.js.map +1 -0
  359. package/dist/esm/utils/KeyedRegistry.js +32 -0
  360. package/dist/esm/utils/KeyedRegistry.js.map +1 -0
  361. package/dist/esm/utils/corruptionDetection.js +155 -0
  362. package/dist/esm/utils/corruptionDetection.js.map +1 -0
  363. package/dist/esm/utils/dateFormatting.js +4 -0
  364. package/dist/esm/utils/dateFormatting.js.map +1 -0
  365. package/dist/esm/utils/deepClone.js +40 -0
  366. package/dist/esm/utils/deepClone.js.map +1 -0
  367. package/dist/esm/utils/deepEqual.js +47 -0
  368. package/dist/esm/utils/deepEqual.js.map +1 -0
  369. package/dist/esm/utils/diagnostics.js +69 -0
  370. package/dist/esm/utils/diagnostics.js.map +1 -0
  371. package/dist/esm/utils/errorHandling.js +36 -0
  372. package/dist/esm/utils/errorHandling.js.map +1 -0
  373. package/dist/esm/utils/formatting.js +93 -0
  374. package/dist/esm/utils/formatting.js.map +1 -0
  375. package/dist/esm/utils/list-detection.js +148 -0
  376. package/dist/esm/utils/list-detection.js.map +1 -0
  377. package/dist/esm/utils/logger.js +205 -0
  378. package/dist/esm/utils/logger.js.map +1 -0
  379. package/dist/esm/utils/parsingHelpers.js +56 -0
  380. package/dist/esm/utils/parsingHelpers.js.map +1 -0
  381. package/dist/esm/utils/textDiff.js +42 -0
  382. package/dist/esm/utils/textDiff.js.map +1 -0
  383. package/dist/esm/utils/units.js +152 -0
  384. package/dist/esm/utils/units.js.map +1 -0
  385. package/dist/esm/utils/validation.js +285 -0
  386. package/dist/esm/utils/validation.js.map +1 -0
  387. package/dist/esm/utils/xmlSanitization.js +54 -0
  388. package/dist/esm/utils/xmlSanitization.js.map +1 -0
  389. package/dist/esm/validation/RevisionAutoFixer.js +340 -0
  390. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
  391. package/dist/esm/validation/RevisionValidator.js +240 -0
  392. package/dist/esm/validation/RevisionValidator.js.map +1 -0
  393. package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
  394. package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
  395. package/dist/esm/validation/ValidationRules.js +92 -0
  396. package/dist/esm/validation/ValidationRules.js.map +1 -0
  397. package/dist/esm/validation/index.js +4 -0
  398. package/dist/esm/validation/index.js.map +1 -0
  399. package/dist/esm/xml/XMLBuilder.js +434 -0
  400. package/dist/esm/xml/XMLBuilder.js.map +1 -0
  401. package/dist/esm/xml/XMLParser.js +486 -0
  402. package/dist/esm/xml/XMLParser.js.map +1 -0
  403. package/dist/esm/zip/ZipHandler.js +298 -0
  404. package/dist/esm/zip/ZipHandler.js.map +1 -0
  405. package/dist/esm/zip/ZipReader.js +147 -0
  406. package/dist/esm/zip/ZipReader.js.map +1 -0
  407. package/dist/esm/zip/ZipWriter.js +199 -0
  408. package/dist/esm/zip/ZipWriter.js.map +1 -0
  409. package/dist/esm/zip/errors.js +43 -0
  410. package/dist/esm/zip/errors.js.map +1 -0
  411. package/dist/esm/zip/types.js +31 -0
  412. package/dist/esm/zip/types.js.map +1 -0
  413. package/dist/formatting/AbstractNumbering.d.ts +2 -2
  414. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  415. package/dist/formatting/AbstractNumbering.js +33 -33
  416. package/dist/formatting/AbstractNumbering.js.map +1 -1
  417. package/dist/formatting/NumberingInstance.d.ts +2 -2
  418. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  419. package/dist/formatting/NumberingInstance.js +7 -7
  420. package/dist/formatting/NumberingInstance.js.map +1 -1
  421. package/dist/formatting/NumberingLevel.d.ts +11 -2
  422. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  423. package/dist/formatting/NumberingLevel.js +111 -25
  424. package/dist/formatting/NumberingLevel.js.map +1 -1
  425. package/dist/formatting/NumberingManager.d.ts +4 -4
  426. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  427. package/dist/formatting/NumberingManager.js +28 -28
  428. package/dist/formatting/NumberingManager.js.map +1 -1
  429. package/dist/formatting/Style.d.ts +14 -7
  430. package/dist/formatting/Style.d.ts.map +1 -1
  431. package/dist/formatting/Style.js +309 -112
  432. package/dist/formatting/Style.js.map +1 -1
  433. package/dist/formatting/StylesManager.d.ts +2 -2
  434. package/dist/formatting/StylesManager.d.ts.map +1 -1
  435. package/dist/formatting/StylesManager.js +52 -52
  436. package/dist/formatting/StylesManager.js.map +1 -1
  437. package/dist/helpers/CleanupHelper.d.ts +1 -1
  438. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  439. package/dist/helpers/CleanupHelper.js +15 -15
  440. package/dist/helpers/CleanupHelper.js.map +1 -1
  441. package/dist/index.d.ts +81 -90
  442. package/dist/index.d.ts.map +1 -1
  443. package/dist/index.js +286 -317
  444. package/dist/index.js.map +1 -1
  445. package/dist/internal.d.ts +16 -0
  446. package/dist/internal.d.ts.map +1 -0
  447. package/dist/internal.js +42 -0
  448. package/dist/internal.js.map +1 -0
  449. package/dist/managers/DrawingManager.d.ts +3 -3
  450. package/dist/managers/DrawingManager.d.ts.map +1 -1
  451. package/dist/managers/DrawingManager.js +12 -12
  452. package/dist/managers/DrawingManager.js.map +1 -1
  453. package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
  454. package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
  455. package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
  456. package/dist/processors/ChangelogGenerator.js.map +1 -0
  457. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
  458. package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
  459. package/dist/processors/CompatibilityUpgrader.js.map +1 -0
  460. package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
  461. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
  462. package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
  463. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
  464. package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
  465. package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
  466. package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
  467. package/dist/processors/MoveOperationHelper.js.map +1 -0
  468. package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
  469. package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
  470. package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
  471. package/dist/processors/RevisionAwareProcessor.js.map +1 -0
  472. package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
  473. package/dist/processors/RevisionWalker.d.ts.map +1 -0
  474. package/dist/{utils → processors}/RevisionWalker.js +28 -0
  475. package/dist/processors/RevisionWalker.js.map +1 -0
  476. package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
  477. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
  478. package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
  479. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
  480. package/dist/processors/ShadingResolver.d.ts +6 -0
  481. package/dist/processors/ShadingResolver.d.ts.map +1 -0
  482. package/dist/{utils → processors}/ShadingResolver.js +2 -2
  483. package/dist/processors/ShadingResolver.js.map +1 -0
  484. package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
  485. package/dist/processors/acceptRevisions.d.ts.map +1 -0
  486. package/dist/{utils → processors}/acceptRevisions.js +24 -4
  487. package/dist/processors/acceptRevisions.js.map +1 -0
  488. package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
  489. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
  490. package/dist/processors/cnfStyleDecoder.js.map +1 -0
  491. package/dist/processors/stripTrackedChanges.d.ts +3 -0
  492. package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
  493. package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
  494. package/dist/processors/stripTrackedChanges.js.map +1 -0
  495. package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
  496. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  497. package/dist/tracking/DocumentTrackingContext.js +38 -43
  498. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  499. package/dist/tracking/TrackingContext.d.ts +8 -8
  500. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  501. package/dist/tracking/TrackingContext.js.map +1 -1
  502. package/dist/types/document-types.d.ts +28 -0
  503. package/dist/types/document-types.d.ts.map +1 -0
  504. package/dist/types/document-types.js +3 -0
  505. package/dist/types/document-types.js.map +1 -0
  506. package/dist/types/formatting.d.ts +4 -4
  507. package/dist/types/formatting.d.ts.map +1 -1
  508. package/dist/types/formatting.js.map +1 -1
  509. package/dist/types/settings-types.d.ts +6 -0
  510. package/dist/types/settings-types.d.ts.map +1 -1
  511. package/dist/types/settings-types.js.map +1 -1
  512. package/dist/utils/KeyedRegistry.d.ts +13 -0
  513. package/dist/utils/KeyedRegistry.d.ts.map +1 -0
  514. package/dist/utils/KeyedRegistry.js +36 -0
  515. package/dist/utils/KeyedRegistry.js.map +1 -0
  516. package/dist/utils/corruptionDetection.d.ts +1 -1
  517. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  518. package/dist/utils/corruptionDetection.js +4 -4
  519. package/dist/utils/corruptionDetection.js.map +1 -1
  520. package/dist/utils/deepEqual.d.ts +2 -0
  521. package/dist/utils/deepEqual.d.ts.map +1 -0
  522. package/dist/utils/deepEqual.js +50 -0
  523. package/dist/utils/deepEqual.js.map +1 -0
  524. package/dist/utils/list-detection.d.ts +2 -2
  525. package/dist/utils/list-detection.d.ts.map +1 -1
  526. package/dist/utils/list-detection.js.map +1 -1
  527. package/dist/utils/parsingHelpers.d.ts +1 -1
  528. package/dist/utils/parsingHelpers.d.ts.map +1 -1
  529. package/dist/utils/parsingHelpers.js +2 -2
  530. package/dist/utils/parsingHelpers.js.map +1 -1
  531. package/dist/utils/validation.js +7 -7
  532. package/dist/utils/validation.js.map +1 -1
  533. package/dist/utils/xmlSanitization.js +2 -2
  534. package/dist/utils/xmlSanitization.js.map +1 -1
  535. package/dist/validation/RevisionAutoFixer.d.ts +4 -4
  536. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  537. package/dist/validation/RevisionAutoFixer.js +11 -11
  538. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  539. package/dist/validation/RevisionValidator.d.ts +5 -4
  540. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  541. package/dist/validation/RevisionValidator.js +29 -30
  542. package/dist/validation/RevisionValidator.js.map +1 -1
  543. package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
  544. package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
  545. package/dist/validation/ValidationRuleRegistry.js +43 -0
  546. package/dist/validation/ValidationRuleRegistry.js.map +1 -0
  547. package/dist/validation/index.d.ts +3 -3
  548. package/dist/validation/index.d.ts.map +1 -1
  549. package/dist/validation/index.js +10 -10
  550. package/dist/validation/index.js.map +1 -1
  551. package/dist/xml/XMLBuilder.d.ts +6 -1
  552. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  553. package/dist/xml/XMLBuilder.js +11 -6
  554. package/dist/xml/XMLBuilder.js.map +1 -1
  555. package/dist/xml/XMLParser.js +6 -6
  556. package/dist/xml/XMLParser.js.map +1 -1
  557. package/dist/zip/ZipHandler.d.ts +1 -1
  558. package/dist/zip/ZipHandler.d.ts.map +1 -1
  559. package/dist/zip/ZipHandler.js +8 -8
  560. package/dist/zip/ZipHandler.js.map +1 -1
  561. package/dist/zip/ZipReader.d.ts +1 -1
  562. package/dist/zip/ZipReader.d.ts.map +1 -1
  563. package/dist/zip/ZipReader.js +14 -14
  564. package/dist/zip/ZipReader.js.map +1 -1
  565. package/dist/zip/ZipWriter.d.ts +1 -1
  566. package/dist/zip/ZipWriter.d.ts.map +1 -1
  567. package/dist/zip/ZipWriter.js +10 -10
  568. package/dist/zip/ZipWriter.js.map +1 -1
  569. package/package.json +20 -4
  570. package/src/constants/legacyCompatFlags.ts +1 -1
  571. package/src/core/Document.ts +478 -167
  572. package/src/core/DocumentContent.ts +14 -11
  573. package/src/core/DocumentEvents.ts +90 -0
  574. package/src/core/DocumentGenerator.ts +49 -22
  575. package/src/core/DocumentParser.ts +2235 -620
  576. package/src/core/DocumentValidator.ts +7 -7
  577. package/src/core/ElementRegistry.ts +69 -0
  578. package/src/core/Relationship.ts +1 -1
  579. package/src/core/RelationshipManager.ts +4 -4
  580. package/src/elements/AlternateContent.ts +1 -1
  581. package/src/elements/Bookmark.ts +52 -4
  582. package/src/elements/BookmarkManager.ts +2 -2
  583. package/src/elements/Comment.ts +3 -3
  584. package/src/elements/CommentManager.ts +4 -4
  585. package/src/elements/CommonTypes.ts +45 -7
  586. package/src/elements/CustomXml.ts +1 -1
  587. package/src/elements/Endnote.ts +2 -2
  588. package/src/elements/EndnoteManager.ts +3 -3
  589. package/src/elements/Field.ts +44 -10
  590. package/src/elements/FieldHelpers.ts +2 -2
  591. package/src/elements/Footer.ts +4 -4
  592. package/src/elements/Footnote.ts +2 -2
  593. package/src/elements/FootnoteManager.ts +3 -3
  594. package/src/elements/Header.ts +4 -4
  595. package/src/elements/HeaderFooterManager.ts +2 -2
  596. package/src/elements/Hyperlink.ts +16 -12
  597. package/src/elements/Image.ts +3 -3
  598. package/src/elements/ImageManager.ts +2 -2
  599. package/src/elements/ImageRun.ts +3 -3
  600. package/src/elements/MathElement.ts +1 -1
  601. package/src/elements/Paragraph.ts +221 -88
  602. package/src/elements/PreservedElement.ts +1 -1
  603. package/src/elements/PropertyChangeTypes.ts +2 -2
  604. package/src/elements/RangeMarker.ts +153 -12
  605. package/src/elements/RegisteredBodyElement.ts +52 -0
  606. package/src/elements/Revision.ts +14 -14
  607. package/src/elements/RevisionContent.ts +3 -3
  608. package/src/elements/RevisionManager.ts +3 -3
  609. package/src/elements/Run.ts +221 -94
  610. package/src/elements/Section.ts +136 -69
  611. package/src/elements/Shape.ts +4 -4
  612. package/src/elements/StructuredDocumentTag.ts +3 -3
  613. package/src/elements/Table.ts +91 -27
  614. package/src/elements/TableCell.ts +62 -34
  615. package/src/elements/TableGridChange.ts +1 -1
  616. package/src/elements/TableOfContents.ts +1 -1
  617. package/src/elements/TableOfContentsElement.ts +2 -2
  618. package/src/elements/TableRow.ts +192 -48
  619. package/src/elements/TextBox.ts +5 -5
  620. package/src/formatting/AbstractNumbering.ts +3 -3
  621. package/src/formatting/NumberingInstance.ts +2 -2
  622. package/src/formatting/NumberingLevel.ts +201 -10
  623. package/src/formatting/NumberingManager.ts +5 -5
  624. package/src/formatting/Style.ts +382 -86
  625. package/src/formatting/StylesManager.ts +4 -4
  626. package/src/helpers/CleanupHelper.ts +6 -6
  627. package/src/index.ts +118 -127
  628. package/src/internal.ts +79 -0
  629. package/src/managers/DrawingManager.ts +3 -3
  630. package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
  631. package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
  632. package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
  633. package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
  634. package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
  635. package/src/{utils → processors}/RevisionWalker.ts +42 -1
  636. package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
  637. package/src/{utils → processors}/ShadingResolver.ts +5 -5
  638. package/src/{utils → processors}/acceptRevisions.ts +77 -9
  639. package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
  640. package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
  641. package/src/tracking/DocumentTrackingContext.ts +12 -14
  642. package/src/tracking/TrackingContext.ts +8 -8
  643. package/src/types/document-types.ts +53 -0
  644. package/src/types/formatting.ts +4 -4
  645. package/src/types/settings-types.ts +32 -0
  646. package/src/utils/KeyedRegistry.ts +41 -0
  647. package/src/utils/corruptionDetection.ts +2 -2
  648. package/src/utils/deepEqual.ts +58 -0
  649. package/src/utils/list-detection.ts +2 -2
  650. package/src/utils/parsingHelpers.ts +11 -3
  651. package/src/utils/validation.ts +3 -3
  652. package/src/utils/xmlSanitization.ts +1 -1
  653. package/src/validation/RevisionAutoFixer.ts +5 -5
  654. package/src/validation/RevisionValidator.ts +39 -28
  655. package/src/validation/ValidationRuleRegistry.ts +86 -0
  656. package/src/validation/index.ts +3 -3
  657. package/src/xml/XMLBuilder.ts +13 -3
  658. package/src/xml/XMLParser.ts +2 -2
  659. package/src/zip/ZipHandler.ts +4 -4
  660. package/src/zip/ZipReader.ts +3 -3
  661. package/src/zip/ZipWriter.ts +3 -3
  662. package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
  663. package/dist/utils/ChangelogGenerator.js.map +0 -1
  664. package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
  665. package/dist/utils/CompatibilityUpgrader.js.map +0 -1
  666. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
  667. package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
  668. package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
  669. package/dist/utils/MoveOperationHelper.js.map +0 -1
  670. package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
  671. package/dist/utils/RevisionAwareProcessor.js.map +0 -1
  672. package/dist/utils/RevisionWalker.d.ts.map +0 -1
  673. package/dist/utils/RevisionWalker.js.map +0 -1
  674. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
  675. package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
  676. package/dist/utils/ShadingResolver.d.ts +0 -6
  677. package/dist/utils/ShadingResolver.d.ts.map +0 -1
  678. package/dist/utils/ShadingResolver.js.map +0 -1
  679. package/dist/utils/acceptRevisions.d.ts.map +0 -1
  680. package/dist/utils/acceptRevisions.js.map +0 -1
  681. package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
  682. package/dist/utils/cnfStyleDecoder.js.map +0 -1
  683. package/dist/utils/stripTrackedChanges.d.ts +0 -3
  684. package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
  685. package/dist/utils/stripTrackedChanges.js.map +0 -1
  686. package/src/__tests__/helper-methods.test.ts +0 -512
  687. package/src/constants/CLAUDE.md +0 -28
  688. package/src/core/CLAUDE.md +0 -113
  689. package/src/elements/CLAUDE.md +0 -142
  690. package/src/formatting/CLAUDE.md +0 -78
  691. package/src/managers/CLAUDE.md +0 -47
  692. package/src/tracking/CLAUDE.md +0 -30
  693. package/src/types/CLAUDE.md +0 -39
  694. package/src/utils/CLAUDE.md +0 -168
  695. package/src/validation/CLAUDE.md +0 -40
  696. package/src/xml/CLAUDE.md +0 -65
  697. package/src/zip/CLAUDE.md +0 -55
  698. /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
  699. /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
@@ -0,0 +1,1288 @@
1
+ import { promises as fs } from 'fs';
2
+ import { defaultLogger } from '../utils/logger.js';
3
+ import { inchesToEmus, UNITS } from '../utils/units.js';
4
+ import { XMLBuilder } from '../xml/XMLBuilder.js';
5
+ export class Image {
6
+ source;
7
+ width;
8
+ height;
9
+ description;
10
+ name;
11
+ title;
12
+ relationshipId;
13
+ imageData;
14
+ extension;
15
+ docPrId = 1;
16
+ dpi = 96;
17
+ effectExtent;
18
+ wrap;
19
+ position;
20
+ anchor;
21
+ crop;
22
+ effects;
23
+ rotation = 0;
24
+ flipH = false;
25
+ flipV = false;
26
+ border;
27
+ presetGeometry = 'rect';
28
+ compressionState = 'none';
29
+ bwMode = 'auto';
30
+ inlineDistT = 0;
31
+ inlineDistB = 0;
32
+ inlineDistL = 0;
33
+ inlineDistR = 0;
34
+ noChangeAspect = true;
35
+ hidden = false;
36
+ blipFillDpi;
37
+ blipFillRotWithShape;
38
+ picLocks = {
39
+ noChangeAspect: true,
40
+ noChangeArrowheads: true,
41
+ };
42
+ picNonVisualProps = { id: '0', name: '', descr: '' };
43
+ isLinked = false;
44
+ svgRelationshipId;
45
+ _rawPassthrough = new Map();
46
+ static async fromFile(path, properties = {}) {
47
+ const image = new Image({ source: path, ...properties });
48
+ await image.loadImageDataForDimensions();
49
+ return image;
50
+ }
51
+ static async fromBuffer(buffer, mimeTypeOrProperties, width, height) {
52
+ let properties;
53
+ if (typeof mimeTypeOrProperties === 'string') {
54
+ properties = {
55
+ width: width,
56
+ height: height,
57
+ };
58
+ }
59
+ else {
60
+ properties = mimeTypeOrProperties || {};
61
+ }
62
+ const image = new Image({ source: buffer, ...properties });
63
+ await image.loadImageDataForDimensions();
64
+ return image;
65
+ }
66
+ static async create(properties) {
67
+ if (Buffer.isBuffer(properties.source)) {
68
+ return Image.fromBuffer(properties.source, properties);
69
+ }
70
+ else if (typeof properties.source === 'string') {
71
+ return Image.fromFile(properties.source, properties);
72
+ }
73
+ else {
74
+ throw new Error('Invalid source: must be file path or Buffer');
75
+ }
76
+ }
77
+ constructor(properties) {
78
+ this.source = properties.source;
79
+ this.description = properties.description || 'Image';
80
+ this.name = properties.name || 'image';
81
+ this.title = properties.title;
82
+ this.relationshipId = properties.relationshipId;
83
+ this.extension = this.detectExtension();
84
+ this.width = properties.width || inchesToEmus(6);
85
+ this.height = properties.height || inchesToEmus(4);
86
+ this.effectExtent = properties.effectExtent;
87
+ this.wrap = properties.wrap;
88
+ this.position = properties.position;
89
+ this.anchor = properties.anchor;
90
+ this.crop = properties.crop;
91
+ this.effects = properties.effects;
92
+ if (properties.border) {
93
+ this.border = properties.border;
94
+ }
95
+ if (properties.rotation !== undefined && properties.rotation !== 0) {
96
+ this.rotation = ((properties.rotation % 360) + 360) % 360;
97
+ }
98
+ this.flipH = properties.flipH || false;
99
+ this.flipV = properties.flipV || false;
100
+ if (properties.presetGeometry !== undefined)
101
+ this.presetGeometry = properties.presetGeometry;
102
+ if (properties.compressionState !== undefined)
103
+ this.compressionState = properties.compressionState;
104
+ if (properties.bwMode !== undefined)
105
+ this.bwMode = properties.bwMode;
106
+ if (properties.inlineDistT !== undefined)
107
+ this.inlineDistT = properties.inlineDistT;
108
+ if (properties.inlineDistB !== undefined)
109
+ this.inlineDistB = properties.inlineDistB;
110
+ if (properties.inlineDistL !== undefined)
111
+ this.inlineDistL = properties.inlineDistL;
112
+ if (properties.inlineDistR !== undefined)
113
+ this.inlineDistR = properties.inlineDistR;
114
+ if (properties.noChangeAspect !== undefined)
115
+ this.noChangeAspect = properties.noChangeAspect;
116
+ if (properties.hidden !== undefined)
117
+ this.hidden = properties.hidden;
118
+ if (properties.blipFillDpi !== undefined)
119
+ this.blipFillDpi = properties.blipFillDpi;
120
+ if (properties.blipFillRotWithShape !== undefined)
121
+ this.blipFillRotWithShape = properties.blipFillRotWithShape;
122
+ if (properties.picLocks !== undefined)
123
+ this.picLocks = properties.picLocks;
124
+ if (properties.picNonVisualProps !== undefined)
125
+ this.picNonVisualProps = properties.picNonVisualProps;
126
+ if (properties.isLinked !== undefined)
127
+ this.isLinked = properties.isLinked;
128
+ if (properties.svgRelationshipId !== undefined)
129
+ this.svgRelationshipId = properties.svgRelationshipId;
130
+ this.dpi = 96;
131
+ }
132
+ async loadImageDataForDimensions() {
133
+ let tempData;
134
+ try {
135
+ if (Buffer.isBuffer(this.source)) {
136
+ tempData = this.source;
137
+ }
138
+ else if (typeof this.source === 'string') {
139
+ await fs.access(this.source);
140
+ tempData = await fs.readFile(this.source);
141
+ }
142
+ if (tempData) {
143
+ this.imageData = tempData;
144
+ const defaultWidth = inchesToEmus(6);
145
+ const defaultHeight = inchesToEmus(4);
146
+ const hasExplicitDimensions = this.width !== defaultWidth || this.height !== defaultHeight;
147
+ if (!hasExplicitDimensions) {
148
+ const dimensions = this.detectDimensions();
149
+ if (dimensions) {
150
+ this.dpi = this.detectDPI() || 96;
151
+ const emuPerInch = 914400;
152
+ const pixelsPerInch = this.dpi;
153
+ this.width = Math.round((dimensions.width / pixelsPerInch) * emuPerInch);
154
+ this.height = Math.round((dimensions.height / pixelsPerInch) * emuPerInch);
155
+ }
156
+ }
157
+ if (typeof this.source === 'string') {
158
+ this.imageData = undefined;
159
+ }
160
+ }
161
+ }
162
+ catch (error) {
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ defaultLogger.error(`Failed to load image for dimensions: ${message}`);
165
+ throw new Error(`Image loading failed: ${message}`);
166
+ }
167
+ }
168
+ async ensureDataLoaded() {
169
+ if (this.imageData)
170
+ return;
171
+ try {
172
+ if (Buffer.isBuffer(this.source)) {
173
+ this.imageData = this.source;
174
+ }
175
+ else if (typeof this.source === 'string') {
176
+ await fs.access(this.source);
177
+ this.imageData = await fs.readFile(this.source);
178
+ }
179
+ else {
180
+ throw new Error('Invalid image source');
181
+ }
182
+ }
183
+ catch (error) {
184
+ const message = error instanceof Error ? error.message : String(error);
185
+ defaultLogger.error(`Failed to load image data: ${message}`);
186
+ throw new Error(`Image data loading failed: ${message}`);
187
+ }
188
+ }
189
+ releaseData() {
190
+ if (typeof this.source === 'string') {
191
+ this.imageData = undefined;
192
+ }
193
+ }
194
+ validateImageData() {
195
+ if (this.isLinked) {
196
+ return { valid: true };
197
+ }
198
+ if (!this.imageData || this.imageData.length === 0) {
199
+ return { valid: false, error: 'Empty image data' };
200
+ }
201
+ if (this.extension === 'svg') {
202
+ return { valid: true };
203
+ }
204
+ const signatures = {
205
+ png: [0x89, 0x50, 0x4e, 0x47],
206
+ jpg: [0xff, 0xd8],
207
+ jpeg: [0xff, 0xd8],
208
+ gif: [0x47, 0x49, 0x46],
209
+ bmp: [0x42, 0x4d],
210
+ tiff: [0x49, 0x49, 0x2a, 0x00],
211
+ tif: [0x49, 0x49, 0x2a, 0x00],
212
+ };
213
+ if (this.extension === 'emf') {
214
+ if (this.imageData.length >= 44 &&
215
+ this.imageData[40] === 0x20 &&
216
+ this.imageData[41] === 0x45 &&
217
+ this.imageData[42] === 0x4d &&
218
+ this.imageData[43] === 0x46) {
219
+ return { valid: true };
220
+ }
221
+ return { valid: false, error: 'Invalid EMF signature' };
222
+ }
223
+ if (this.extension === 'wmf') {
224
+ if (this.imageData.length >= 4) {
225
+ if (this.imageData[0] === 0xd7 &&
226
+ this.imageData[1] === 0xcd &&
227
+ this.imageData[2] === 0xc6 &&
228
+ this.imageData[3] === 0x9a) {
229
+ return { valid: true };
230
+ }
231
+ if (this.imageData[0] === 0x01 &&
232
+ this.imageData[1] === 0x00 &&
233
+ this.imageData[2] === 0x09 &&
234
+ this.imageData[3] === 0x00) {
235
+ return { valid: true };
236
+ }
237
+ }
238
+ return { valid: false, error: 'Invalid WMF signature' };
239
+ }
240
+ const sig = signatures[this.extension];
241
+ if (sig) {
242
+ for (let i = 0; i < sig.length; i++) {
243
+ if (this.imageData[i] !== sig[i]) {
244
+ return { valid: false, error: `Invalid ${this.extension.toUpperCase()} signature` };
245
+ }
246
+ }
247
+ }
248
+ return { valid: true };
249
+ }
250
+ detectExtension() {
251
+ if (typeof this.source === 'string') {
252
+ const match = /\.([a-z]+)$/i.exec(this.source);
253
+ if (match?.[1]) {
254
+ return match[1].toLowerCase();
255
+ }
256
+ }
257
+ if (Buffer.isBuffer(this.source) && this.source.length >= 4) {
258
+ const buf = this.source;
259
+ if (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4e && buf[3] === 0x47)
260
+ return 'png';
261
+ if (buf[0] === 0xff && buf[1] === 0xd8)
262
+ return 'jpeg';
263
+ if (buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46)
264
+ return 'gif';
265
+ if (buf[0] === 0x42 && buf[1] === 0x4d)
266
+ return 'bmp';
267
+ if (buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2a && buf[3] === 0x00)
268
+ return 'tiff';
269
+ if (buf[0] === 0x4d && buf[1] === 0x4d && buf[2] === 0x00 && buf[3] === 0x2a)
270
+ return 'tiff';
271
+ if (buf.length >= 44 &&
272
+ buf[0] === 0x01 &&
273
+ buf[1] === 0x00 &&
274
+ buf[2] === 0x00 &&
275
+ buf[3] === 0x00 &&
276
+ buf[40] === 0x20 &&
277
+ buf[41] === 0x45 &&
278
+ buf[42] === 0x4d &&
279
+ buf[43] === 0x46)
280
+ return 'emf';
281
+ if (buf[0] === 0xd7 && buf[1] === 0xcd && buf[2] === 0xc6 && buf[3] === 0x9a)
282
+ return 'wmf';
283
+ if (buf[0] === 0x01 && buf[1] === 0x00 && buf[2] === 0x09 && buf[3] === 0x00)
284
+ return 'wmf';
285
+ if (buf[0] === 0x3c ||
286
+ (buf[0] === 0xef && buf[1] === 0xbb && buf[2] === 0xbf && buf.length > 3 && buf[3] === 0x3c))
287
+ return 'svg';
288
+ }
289
+ return 'png';
290
+ }
291
+ detectDimensions() {
292
+ if (!this.imageData || this.imageData.length < 24)
293
+ return null;
294
+ if (this.imageData[0] === 0x89 &&
295
+ this.imageData[1] === 0x50 &&
296
+ this.imageData[2] === 0x4e &&
297
+ this.imageData[3] === 0x47) {
298
+ return this.detectPngDimensions();
299
+ }
300
+ if (this.imageData[0] === 0xff && this.imageData[1] === 0xd8) {
301
+ return this.detectJpegDimensions();
302
+ }
303
+ if (this.imageData[0] === 0x47 && this.imageData[1] === 0x49 && this.imageData[2] === 0x46) {
304
+ return this.detectGifDimensions();
305
+ }
306
+ if (this.imageData[0] === 0x42 && this.imageData[1] === 0x4d) {
307
+ return this.detectBmpDimensions();
308
+ }
309
+ if ((this.imageData[0] === 0x49 && this.imageData[1] === 0x49 && this.imageData[2] === 0x2a) ||
310
+ (this.imageData[0] === 0x4d && this.imageData[1] === 0x4d && this.imageData[2] === 0x00)) {
311
+ return this.detectTiffDimensions();
312
+ }
313
+ if (this.imageData.length >= 44 &&
314
+ this.imageData[40] === 0x20 &&
315
+ this.imageData[41] === 0x45 &&
316
+ this.imageData[42] === 0x4d &&
317
+ this.imageData[43] === 0x46) {
318
+ return this.detectEmfDimensions();
319
+ }
320
+ if (this.imageData[0] === 0xd7 &&
321
+ this.imageData[1] === 0xcd &&
322
+ this.imageData[2] === 0xc6 &&
323
+ this.imageData[3] === 0x9a) {
324
+ return this.detectWmfDimensions();
325
+ }
326
+ if (this.imageData[0] === 0x3c ||
327
+ (this.imageData[0] === 0xef && this.imageData[1] === 0xbb && this.imageData[2] === 0xbf)) {
328
+ return this.detectSvgDimensions();
329
+ }
330
+ return null;
331
+ }
332
+ detectPngDimensions() {
333
+ if (!this.imageData || this.imageData.length < 24)
334
+ return null;
335
+ const width = this.imageData.readUInt32BE(16);
336
+ const height = this.imageData.readUInt32BE(20);
337
+ return { width, height };
338
+ }
339
+ detectGifDimensions() {
340
+ if (!this.imageData || this.imageData.length < 10)
341
+ return null;
342
+ const width = this.imageData.readUInt16LE(6);
343
+ const height = this.imageData.readUInt16LE(8);
344
+ if (width > 0 && height > 0)
345
+ return { width, height };
346
+ return null;
347
+ }
348
+ detectBmpDimensions() {
349
+ if (!this.imageData || this.imageData.length < 26)
350
+ return null;
351
+ const width = this.imageData.readInt32LE(18);
352
+ const height = Math.abs(this.imageData.readInt32LE(22));
353
+ if (width > 0 && height > 0)
354
+ return { width, height };
355
+ return null;
356
+ }
357
+ detectTiffDimensions() {
358
+ if (!this.imageData || this.imageData.length < 14)
359
+ return null;
360
+ const isLittleEndian = this.imageData[0] === 0x49;
361
+ const ifdOffset = isLittleEndian
362
+ ? this.imageData.readUInt32LE(4)
363
+ : this.imageData.readUInt32BE(4);
364
+ if (ifdOffset + 14 > this.imageData.length)
365
+ return null;
366
+ const numEntries = isLittleEndian
367
+ ? this.imageData.readUInt16LE(ifdOffset)
368
+ : this.imageData.readUInt16BE(ifdOffset);
369
+ let width = 0;
370
+ let height = 0;
371
+ for (let i = 0; i < numEntries; i++) {
372
+ const entryOffset = ifdOffset + 2 + i * 12;
373
+ if (entryOffset + 12 > this.imageData.length)
374
+ break;
375
+ const tag = isLittleEndian
376
+ ? this.imageData.readUInt16LE(entryOffset)
377
+ : this.imageData.readUInt16BE(entryOffset);
378
+ const value = isLittleEndian
379
+ ? this.imageData.readUInt32LE(entryOffset + 8)
380
+ : this.imageData.readUInt32BE(entryOffset + 8);
381
+ if (tag === 256)
382
+ width = value;
383
+ if (tag === 257)
384
+ height = value;
385
+ if (width > 0 && height > 0)
386
+ break;
387
+ }
388
+ if (width > 0 && height > 0)
389
+ return { width, height };
390
+ return null;
391
+ }
392
+ detectJpegDimensions() {
393
+ if (!this.imageData || this.imageData.length < 12)
394
+ return null;
395
+ let offset = 2;
396
+ while (offset < this.imageData.length - 1) {
397
+ if (this.imageData[offset] !== 0xff)
398
+ break;
399
+ const marker = this.imageData[offset + 1];
400
+ if (marker === undefined)
401
+ break;
402
+ if (marker === 0x00 || marker === 0xff) {
403
+ offset++;
404
+ continue;
405
+ }
406
+ const isSOF = marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc;
407
+ if (isSOF) {
408
+ if (offset + 9 > this.imageData.length)
409
+ break;
410
+ const height = this.imageData.readUInt16BE(offset + 5);
411
+ const width = this.imageData.readUInt16BE(offset + 7);
412
+ if (width > 0 && height > 0)
413
+ return { width, height };
414
+ }
415
+ if (marker === 0xda || marker === 0xd9)
416
+ break;
417
+ const segmentLength = this.imageData.readUInt16BE(offset + 2);
418
+ if (segmentLength < 2 || offset + 2 + segmentLength > this.imageData.length)
419
+ break;
420
+ offset += 2 + segmentLength;
421
+ }
422
+ return null;
423
+ }
424
+ detectSvgDimensions() {
425
+ if (!this.imageData)
426
+ return null;
427
+ try {
428
+ const svgText = this.imageData.toString('utf-8').substring(0, 2000);
429
+ const widthMatch = /<svg[^>]*\bwidth\s*=\s*["']?(\d+(?:\.\d+)?)/i.exec(svgText);
430
+ const heightMatch = /<svg[^>]*\bheight\s*=\s*["']?(\d+(?:\.\d+)?)/i.exec(svgText);
431
+ if (widthMatch?.[1] && heightMatch?.[1]) {
432
+ return {
433
+ width: Math.round(parseFloat(widthMatch[1])),
434
+ height: Math.round(parseFloat(heightMatch[1])),
435
+ };
436
+ }
437
+ const viewBoxMatch = /<svg[^>]*\bviewBox\s*=\s*["']?\s*[\d.]+\s+[\d.]+\s+([\d.]+)\s+([\d.]+)/i.exec(svgText);
438
+ if (viewBoxMatch?.[1] && viewBoxMatch?.[2]) {
439
+ return {
440
+ width: Math.round(parseFloat(viewBoxMatch[1])),
441
+ height: Math.round(parseFloat(viewBoxMatch[2])),
442
+ };
443
+ }
444
+ }
445
+ catch {
446
+ }
447
+ return null;
448
+ }
449
+ detectEmfDimensions() {
450
+ if (!this.imageData || this.imageData.length < 40)
451
+ return null;
452
+ try {
453
+ const left = this.imageData.readInt32LE(24);
454
+ const top = this.imageData.readInt32LE(28);
455
+ const right = this.imageData.readInt32LE(32);
456
+ const bottom = this.imageData.readInt32LE(36);
457
+ const widthMm = (right - left) / 100;
458
+ const heightMm = (bottom - top) / 100;
459
+ const width = Math.round((widthMm / 25.4) * 96);
460
+ const height = Math.round((heightMm / 25.4) * 96);
461
+ if (width > 0 && height > 0)
462
+ return { width, height };
463
+ }
464
+ catch {
465
+ }
466
+ return null;
467
+ }
468
+ detectWmfDimensions() {
469
+ if (!this.imageData || this.imageData.length < 22)
470
+ return null;
471
+ try {
472
+ const left = this.imageData.readInt16LE(6);
473
+ const top = this.imageData.readInt16LE(8);
474
+ const right = this.imageData.readInt16LE(10);
475
+ const bottom = this.imageData.readInt16LE(12);
476
+ const unitsPerInch = this.imageData.readUInt16LE(14);
477
+ if (unitsPerInch > 0) {
478
+ const width = Math.round(((right - left) / unitsPerInch) * 96);
479
+ const height = Math.round(((bottom - top) / unitsPerInch) * 96);
480
+ if (width > 0 && height > 0)
481
+ return { width, height };
482
+ }
483
+ }
484
+ catch {
485
+ }
486
+ return null;
487
+ }
488
+ async getImageDataAsync() {
489
+ await this.ensureDataLoaded();
490
+ if (!this.imageData)
491
+ throw new Error('Failed to load image data');
492
+ return this.imageData;
493
+ }
494
+ getImageData() {
495
+ if (!this.imageData)
496
+ throw new Error('Image data not loaded. Call ensureDataLoaded first.');
497
+ return this.imageData;
498
+ }
499
+ getExtension() {
500
+ return this.extension;
501
+ }
502
+ getDPI() {
503
+ return this.dpi;
504
+ }
505
+ getWidth() {
506
+ return this.width;
507
+ }
508
+ getHeight() {
509
+ return this.height;
510
+ }
511
+ getImageDataSafe() {
512
+ return this.imageData ?? null;
513
+ }
514
+ setWidth(width, maintainAspectRatio = true) {
515
+ if (maintainAspectRatio && this.height > 0) {
516
+ const ratio = this.height / this.width;
517
+ this.height = Math.round(width * ratio);
518
+ }
519
+ this.width = width;
520
+ return this;
521
+ }
522
+ setHeight(height, maintainAspectRatio = true) {
523
+ if (maintainAspectRatio && this.width > 0) {
524
+ const ratio = this.width / this.height;
525
+ this.width = Math.round(height * ratio);
526
+ }
527
+ this.height = height;
528
+ return this;
529
+ }
530
+ setSize(width, height) {
531
+ this.width = width;
532
+ this.height = height;
533
+ return this;
534
+ }
535
+ async updateImageData(newSource) {
536
+ this.source = newSource;
537
+ this.imageData = undefined;
538
+ await this.loadImageDataForDimensions();
539
+ this.extension = this.detectExtension();
540
+ this.dpi = this.detectDPI() || 96;
541
+ }
542
+ setRelationshipId(relationshipId) {
543
+ this.relationshipId = relationshipId;
544
+ return this;
545
+ }
546
+ getRelationshipId() {
547
+ return this.relationshipId;
548
+ }
549
+ setDocPrId(id) {
550
+ this.docPrId = id;
551
+ return this;
552
+ }
553
+ setAltText(altText) {
554
+ this.description = altText;
555
+ return this;
556
+ }
557
+ getAltText() {
558
+ return this.description;
559
+ }
560
+ setTitle(title) {
561
+ this.title = title;
562
+ return this;
563
+ }
564
+ getTitle() {
565
+ return this.title;
566
+ }
567
+ rotate(degrees) {
568
+ this.rotation = ((degrees % 360) + 360) % 360;
569
+ if (this.rotation === 90 || this.rotation === 270) {
570
+ [this.width, this.height] = [this.height, this.width];
571
+ }
572
+ return this;
573
+ }
574
+ getRotation() {
575
+ return this.rotation;
576
+ }
577
+ setFlipH(flip) {
578
+ this.flipH = flip;
579
+ return this;
580
+ }
581
+ getFlipH() {
582
+ return this.flipH;
583
+ }
584
+ setFlipV(flip) {
585
+ this.flipV = flip;
586
+ return this;
587
+ }
588
+ getFlipV() {
589
+ return this.flipV;
590
+ }
591
+ getPresetGeometry() {
592
+ return this.presetGeometry;
593
+ }
594
+ setPresetGeometry(geom) {
595
+ this.presetGeometry = geom;
596
+ return this;
597
+ }
598
+ getCompressionState() {
599
+ return this.compressionState;
600
+ }
601
+ setCompressionState(state) {
602
+ this.compressionState = state;
603
+ return this;
604
+ }
605
+ getBwMode() {
606
+ return this.bwMode;
607
+ }
608
+ setBwMode(mode) {
609
+ this.bwMode = mode;
610
+ return this;
611
+ }
612
+ getInlineDistT() {
613
+ return this.inlineDistT;
614
+ }
615
+ getInlineDistB() {
616
+ return this.inlineDistB;
617
+ }
618
+ getInlineDistL() {
619
+ return this.inlineDistL;
620
+ }
621
+ getInlineDistR() {
622
+ return this.inlineDistR;
623
+ }
624
+ setInlineDist(distT, distB, distL, distR) {
625
+ this.inlineDistT = distT;
626
+ this.inlineDistB = distB;
627
+ this.inlineDistL = distL;
628
+ this.inlineDistR = distR;
629
+ return this;
630
+ }
631
+ getNoChangeAspect() {
632
+ return this.noChangeAspect;
633
+ }
634
+ setNoChangeAspect(val) {
635
+ this.noChangeAspect = val;
636
+ return this;
637
+ }
638
+ getHidden() {
639
+ return this.hidden;
640
+ }
641
+ setHidden(val) {
642
+ this.hidden = val;
643
+ return this;
644
+ }
645
+ getBlipFillDpi() {
646
+ return this.blipFillDpi;
647
+ }
648
+ setBlipFillDpi(dpi) {
649
+ this.blipFillDpi = dpi;
650
+ return this;
651
+ }
652
+ getBlipFillRotWithShape() {
653
+ return this.blipFillRotWithShape;
654
+ }
655
+ setBlipFillRotWithShape(val) {
656
+ this.blipFillRotWithShape = val;
657
+ return this;
658
+ }
659
+ getPicLocks() {
660
+ return { ...this.picLocks };
661
+ }
662
+ setPicLocks(locks) {
663
+ this.picLocks = locks;
664
+ return this;
665
+ }
666
+ getPicNonVisualProps() {
667
+ return { ...this.picNonVisualProps };
668
+ }
669
+ setPicNonVisualProps(props) {
670
+ this.picNonVisualProps = props;
671
+ return this;
672
+ }
673
+ getIsLinked() {
674
+ return this.isLinked;
675
+ }
676
+ setIsLinked(val) {
677
+ this.isLinked = val;
678
+ return this;
679
+ }
680
+ getSvgRelationshipId() {
681
+ return this.svgRelationshipId;
682
+ }
683
+ setSvgRelationshipId(id) {
684
+ this.svgRelationshipId = id;
685
+ return this;
686
+ }
687
+ _setRawPassthrough(slot, xml) {
688
+ this._rawPassthrough.set(slot, xml);
689
+ }
690
+ _getRawPassthrough(slot) {
691
+ return this._rawPassthrough.get(slot);
692
+ }
693
+ _hasRawPassthrough(slot) {
694
+ return this._rawPassthrough.has(slot);
695
+ }
696
+ getBorder() {
697
+ return this.border;
698
+ }
699
+ setEffectExtent(left, top, right, bottom) {
700
+ this.effectExtent = { left, top, right, bottom };
701
+ return this;
702
+ }
703
+ getEffectExtent() {
704
+ return this.effectExtent;
705
+ }
706
+ setWrap(type, side, distances) {
707
+ this.wrap = {
708
+ type,
709
+ side,
710
+ distanceTop: distances?.top,
711
+ distanceBottom: distances?.bottom,
712
+ distanceLeft: distances?.left,
713
+ distanceRight: distances?.right,
714
+ };
715
+ return this;
716
+ }
717
+ getWrap() {
718
+ return this.wrap;
719
+ }
720
+ validatePositionOffset(offset, axis) {
721
+ if (offset === undefined)
722
+ return;
723
+ const MAX_OFFSET_EMUS = 45720000;
724
+ if (Math.abs(offset) > MAX_OFFSET_EMUS) {
725
+ throw new Error(`Invalid ${axis} position offset: ${offset} EMUs exceeds maximum of ${MAX_OFFSET_EMUS} EMUs (50 inches).`);
726
+ }
727
+ }
728
+ setPosition(horizontal, vertical) {
729
+ this.validatePositionOffset(horizontal.offset, 'horizontal');
730
+ this.validatePositionOffset(vertical.offset, 'vertical');
731
+ this.position = { horizontal, vertical };
732
+ return this;
733
+ }
734
+ getPosition() {
735
+ return this.position;
736
+ }
737
+ validatePosition() {
738
+ const warnings = [];
739
+ if (!this.position) {
740
+ return { isValid: true, warnings };
741
+ }
742
+ if (this.position.horizontal.offset !== undefined && this.position.horizontal.alignment) {
743
+ warnings.push('Horizontal position has both offset and alignment. Word will use alignment and ignore offset.');
744
+ }
745
+ if (this.position.vertical.offset !== undefined && this.position.vertical.alignment) {
746
+ warnings.push('Vertical position has both offset and alignment. Word will use alignment and ignore offset.');
747
+ }
748
+ if (this.position && !this.anchor) {
749
+ warnings.push('Position is set but anchor is not. Consider setting anchor properties for proper floating behavior.');
750
+ }
751
+ return {
752
+ isValid: warnings.length === 0,
753
+ warnings,
754
+ };
755
+ }
756
+ setAnchor(options) {
757
+ this.anchor = options;
758
+ return this;
759
+ }
760
+ getAnchor() {
761
+ return this.anchor;
762
+ }
763
+ setCrop(left, top, right, bottom) {
764
+ const clamp = (val) => Math.max(0, Math.min(100, val));
765
+ this.crop = { left: clamp(left), top: clamp(top), right: clamp(right), bottom: clamp(bottom) };
766
+ return this;
767
+ }
768
+ getCrop() {
769
+ return this.crop;
770
+ }
771
+ setEffects(options) {
772
+ const clamp = (val) => val !== undefined ? Math.max(-100, Math.min(100, val)) : undefined;
773
+ this.effects = {
774
+ brightness: clamp(options.brightness),
775
+ contrast: clamp(options.contrast),
776
+ grayscale: options.grayscale,
777
+ transparency: options.transparency !== undefined
778
+ ? Math.max(0, Math.min(100, options.transparency))
779
+ : undefined,
780
+ };
781
+ return this;
782
+ }
783
+ getEffects() {
784
+ return this.effects;
785
+ }
786
+ detectDPI() {
787
+ if (!this.imageData)
788
+ return undefined;
789
+ try {
790
+ if (this.extension === 'png') {
791
+ const physIndex = this.imageData.indexOf(Buffer.from([0x70, 0x48, 0x59, 0x73]));
792
+ if (physIndex !== -1 && physIndex + 12 < this.imageData.length) {
793
+ const xPixelsPerMeter = this.imageData.readUInt32BE(physIndex + 4);
794
+ const yPixelsPerMeter = this.imageData.readUInt32BE(physIndex + 8);
795
+ const unit = this.imageData[physIndex + 12];
796
+ if (unit === 1) {
797
+ const dpiX = Math.round(xPixelsPerMeter * 0.0254);
798
+ const dpiY = Math.round(yPixelsPerMeter * 0.0254);
799
+ return Math.min(dpiX, dpiY);
800
+ }
801
+ }
802
+ }
803
+ else if (this.extension === 'jpg' || this.extension === 'jpeg') {
804
+ let offset = 2;
805
+ while (offset < this.imageData.length) {
806
+ if (this.imageData[offset] !== 0xff)
807
+ break;
808
+ const marker = this.imageData[offset + 1];
809
+ if (marker === 0xe0) {
810
+ const length = this.imageData.readUInt16BE(offset + 2);
811
+ if (length >= 16 &&
812
+ this.imageData.slice(offset + 4, offset + 9).toString('ascii') === 'JFIF\0') {
813
+ const units = this.imageData[offset + 11];
814
+ const xDensity = this.imageData.readUInt16BE(offset + 12);
815
+ const yDensity = this.imageData.readUInt16BE(offset + 14);
816
+ if (units === 1)
817
+ return Math.min(xDensity, yDensity);
818
+ if (units === 2)
819
+ return Math.min(Math.round(xDensity * 2.54), Math.round(yDensity * 2.54));
820
+ }
821
+ offset += 2 + length;
822
+ continue;
823
+ }
824
+ offset += 2 + this.imageData.readUInt16BE(offset + 2);
825
+ }
826
+ }
827
+ }
828
+ catch (error) {
829
+ const message = error instanceof Error ? error.message : String(error);
830
+ defaultLogger.warn(`DPI detection failed: ${message}`);
831
+ }
832
+ return undefined;
833
+ }
834
+ isFloating() {
835
+ return !!this.anchor || !!this.position;
836
+ }
837
+ floatTopLeft(marginTop = 0, marginLeft = 0) {
838
+ this.setPosition({ anchor: 'page', offset: marginLeft }, { anchor: 'page', offset: marginTop });
839
+ this.setAnchor({
840
+ behindDoc: false,
841
+ locked: false,
842
+ layoutInCell: true,
843
+ allowOverlap: true,
844
+ relativeHeight: 251658240,
845
+ });
846
+ this.setWrap('square', 'bothSides');
847
+ return this;
848
+ }
849
+ floatTopRight(marginTop = 0, marginRight = 0) {
850
+ this.setPosition({ anchor: 'page', alignment: 'right', offset: -marginRight }, { anchor: 'page', offset: marginTop });
851
+ this.setAnchor({
852
+ behindDoc: false,
853
+ locked: false,
854
+ layoutInCell: true,
855
+ allowOverlap: true,
856
+ relativeHeight: 251658240,
857
+ });
858
+ this.setWrap('square', 'bothSides');
859
+ return this;
860
+ }
861
+ floatCenter() {
862
+ this.setPosition({ anchor: 'page', alignment: 'center' }, { anchor: 'page', alignment: 'center' });
863
+ this.setAnchor({
864
+ behindDoc: false,
865
+ locked: false,
866
+ layoutInCell: true,
867
+ allowOverlap: true,
868
+ relativeHeight: 251658240,
869
+ });
870
+ this.setWrap('square', 'bothSides');
871
+ return this;
872
+ }
873
+ setBehindText(behind = true) {
874
+ if (this.anchor) {
875
+ this.anchor.behindDoc = behind;
876
+ }
877
+ else {
878
+ this.setAnchor({
879
+ behindDoc: behind,
880
+ locked: false,
881
+ layoutInCell: true,
882
+ allowOverlap: true,
883
+ relativeHeight: 251658240,
884
+ });
885
+ }
886
+ return this;
887
+ }
888
+ setBorder(thicknessOrOptions = 2) {
889
+ if (typeof thicknessOrOptions === 'number') {
890
+ this.border = { width: thicknessOrOptions };
891
+ }
892
+ else {
893
+ this.border = { ...thicknessOrOptions };
894
+ delete this.border._fromParsed;
895
+ }
896
+ this._rawPassthrough.delete('zero-width-ln');
897
+ this._rawPassthrough.delete('spPr-noFill');
898
+ const borderEmu = this.border.width * UNITS.EMUS_PER_POINT;
899
+ const halfBorderEmu = Math.ceil(borderEmu / 2);
900
+ if (!this.effectExtent) {
901
+ this.effectExtent = { left: 0, top: 0, right: 0, bottom: 0 };
902
+ }
903
+ this.effectExtent.left = Math.max(this.effectExtent.left, halfBorderEmu);
904
+ this.effectExtent.top = Math.max(this.effectExtent.top, halfBorderEmu);
905
+ this.effectExtent.right = Math.max(this.effectExtent.right, halfBorderEmu);
906
+ this.effectExtent.bottom = Math.max(this.effectExtent.bottom, halfBorderEmu);
907
+ return this;
908
+ }
909
+ removeBorder() {
910
+ this.border = undefined;
911
+ this._rawPassthrough.delete('zero-width-ln');
912
+ return this;
913
+ }
914
+ applyTwoPixelBlackBorder() {
915
+ return this.setBorder(2);
916
+ }
917
+ toXML() {
918
+ const isFloating = this.isFloating();
919
+ const extent = XMLBuilder.wp('extent', {
920
+ cx: this.width.toString(),
921
+ cy: this.height.toString(),
922
+ });
923
+ const blipChildren = [];
924
+ if (this.effects?.brightness !== undefined || this.effects?.contrast !== undefined) {
925
+ const lumAttrs = {};
926
+ if (this.effects.brightness !== undefined) {
927
+ lumAttrs.bright = Math.round(this.effects.brightness * 1000).toString();
928
+ }
929
+ if (this.effects.contrast !== undefined) {
930
+ lumAttrs.contrast = Math.round(this.effects.contrast * 1000).toString();
931
+ }
932
+ blipChildren.push(XMLBuilder.aSelf('lum', lumAttrs));
933
+ }
934
+ if (this.effects?.grayscale) {
935
+ blipChildren.push(XMLBuilder.aSelf('grayscl'));
936
+ }
937
+ if (this.effects?.transparency !== undefined && this.effects.transparency > 0) {
938
+ const amt = Math.round((100 - this.effects.transparency) * 1000);
939
+ blipChildren.push(XMLBuilder.aSelf('alphaModFix', { amt: amt.toString() }));
940
+ }
941
+ if (this._rawPassthrough.has('blip-effects')) {
942
+ blipChildren.push({
943
+ name: '__rawXml',
944
+ rawXml: this._rawPassthrough.get('blip-effects'),
945
+ });
946
+ }
947
+ if (this._rawPassthrough.has('blip-extLst')) {
948
+ blipChildren.push({
949
+ name: '__rawXml',
950
+ rawXml: this._rawPassthrough.get('blip-extLst'),
951
+ });
952
+ }
953
+ else if (this.svgRelationshipId) {
954
+ blipChildren.push({
955
+ name: '__rawXml',
956
+ rawXml: `<a:extLst><a:ext uri="{96DAC541-7B7A-43D3-8B79-37D633B846F1}"><asvg:svgBlip xmlns:asvg="http://schemas.microsoft.com/office/drawing/2016/SVG/main" r:embed="${this.svgRelationshipId}"/></a:ext></a:extLst>`,
957
+ });
958
+ }
959
+ const blipAttrs = {
960
+ cstate: this.compressionState,
961
+ };
962
+ if (this.isLinked) {
963
+ blipAttrs['r:link'] = this.relationshipId;
964
+ }
965
+ else {
966
+ blipAttrs['r:embed'] = this.relationshipId;
967
+ }
968
+ const blip = blipChildren.length > 0
969
+ ? XMLBuilder.a('blip', blipAttrs, blipChildren)
970
+ : XMLBuilder.a('blip', blipAttrs);
971
+ const xfrmAttrs = (() => {
972
+ const attrs = {};
973
+ if (this.rotation > 0)
974
+ attrs.rot = Math.round(this.rotation * 60000).toString();
975
+ if (this.flipH)
976
+ attrs.flipH = '1';
977
+ if (this.flipV)
978
+ attrs.flipV = '1';
979
+ return Object.keys(attrs).length > 0 ? attrs : undefined;
980
+ })();
981
+ const xfrm = XMLBuilder.a('xfrm', xfrmAttrs, [
982
+ XMLBuilder.a('off', { x: '0', y: '0' }),
983
+ XMLBuilder.a('ext', { cx: this.width.toString(), cy: this.height.toString() }),
984
+ ]);
985
+ const spPrChildren = [xfrm];
986
+ if (this._rawPassthrough.has('geometry')) {
987
+ spPrChildren.push({
988
+ name: '__rawXml',
989
+ rawXml: this._rawPassthrough.get('geometry'),
990
+ });
991
+ }
992
+ else {
993
+ spPrChildren.push(XMLBuilder.a('prstGeom', { prst: this.presetGeometry }, [XMLBuilder.a('avLst')]));
994
+ }
995
+ if (this.border) {
996
+ spPrChildren.push(XMLBuilder.a('noFill'));
997
+ }
998
+ else if (this._rawPassthrough.has('spPr-noFill')) {
999
+ spPrChildren.push(XMLBuilder.a('noFill'));
1000
+ }
1001
+ if (this.border) {
1002
+ const ptToEmu = 12700;
1003
+ const widthEmu = this.border.width * ptToEmu;
1004
+ const lnAttrs = { w: widthEmu.toString() };
1005
+ if (this.border.cap)
1006
+ lnAttrs.cap = this.border.cap;
1007
+ if (this.border.compound)
1008
+ lnAttrs.cmpd = this.border.compound;
1009
+ if (this.border.alignment)
1010
+ lnAttrs.algn = this.border.alignment;
1011
+ const lnChildren = [];
1012
+ if (this.border.rawFillXml) {
1013
+ lnChildren.push({ name: '__rawXml', rawXml: this.border.rawFillXml });
1014
+ }
1015
+ else if (this.border.fill) {
1016
+ const colorChildren = [];
1017
+ if (this.border.fill.modifiers) {
1018
+ for (const mod of this.border.fill.modifiers) {
1019
+ colorChildren.push(XMLBuilder.aSelf(mod.name, { val: mod.val }));
1020
+ }
1021
+ }
1022
+ const colorEl = colorChildren.length > 0
1023
+ ? XMLBuilder.a(this.border.fill.type, { val: this.border.fill.value }, colorChildren)
1024
+ : XMLBuilder.a(this.border.fill.type, { val: this.border.fill.value });
1025
+ lnChildren.push(XMLBuilder.a('solidFill', undefined, [colorEl]));
1026
+ }
1027
+ else if (!this.border._fromParsed) {
1028
+ lnChildren.push(XMLBuilder.a('solidFill', undefined, [XMLBuilder.a('schemeClr', { val: 'tx1' })]));
1029
+ }
1030
+ if (this.border.dashPattern) {
1031
+ lnChildren.push(XMLBuilder.aSelf('prstDash', { val: this.border.dashPattern }));
1032
+ }
1033
+ if (this.border.join === 'round') {
1034
+ lnChildren.push(XMLBuilder.aSelf('round'));
1035
+ }
1036
+ else if (this.border.join === 'bevel') {
1037
+ lnChildren.push(XMLBuilder.aSelf('bevel'));
1038
+ }
1039
+ else if (this.border.join === 'miter') {
1040
+ const miterAttrs = {};
1041
+ if (this.border.miterLimit)
1042
+ miterAttrs.lim = this.border.miterLimit.toString();
1043
+ lnChildren.push(XMLBuilder.aSelf('miter', miterAttrs));
1044
+ }
1045
+ if (this.border.headEnd) {
1046
+ lnChildren.push(XMLBuilder.aSelf('headEnd', this.border.headEnd));
1047
+ }
1048
+ if (this.border.tailEnd) {
1049
+ lnChildren.push(XMLBuilder.aSelf('tailEnd', this.border.tailEnd));
1050
+ }
1051
+ spPrChildren.push(XMLBuilder.a('ln', lnAttrs, lnChildren));
1052
+ }
1053
+ if (!this.border && this._rawPassthrough.has('zero-width-ln')) {
1054
+ spPrChildren.push({
1055
+ name: '__rawXml',
1056
+ rawXml: this._rawPassthrough.get('zero-width-ln'),
1057
+ });
1058
+ }
1059
+ if (this._rawPassthrough.has('spPr-effects')) {
1060
+ spPrChildren.push({
1061
+ name: '__rawXml',
1062
+ rawXml: this._rawPassthrough.get('spPr-effects'),
1063
+ });
1064
+ }
1065
+ const cNvPrChildren = [];
1066
+ if (this._rawPassthrough.has('cNvPr-extra')) {
1067
+ cNvPrChildren.push({
1068
+ name: '__rawXml',
1069
+ rawXml: this._rawPassthrough.get('cNvPr-extra'),
1070
+ });
1071
+ }
1072
+ const cNvPr = cNvPrChildren.length > 0
1073
+ ? XMLBuilder.pic('cNvPr', {
1074
+ id: this.picNonVisualProps.id,
1075
+ name: this.picNonVisualProps.name,
1076
+ descr: this.picNonVisualProps.descr,
1077
+ }, cNvPrChildren)
1078
+ : XMLBuilder.pic('cNvPr', {
1079
+ id: this.picNonVisualProps.id,
1080
+ name: this.picNonVisualProps.name,
1081
+ descr: this.picNonVisualProps.descr,
1082
+ });
1083
+ const picLocksAttrs = {};
1084
+ for (const [key, val] of Object.entries(this.picLocks)) {
1085
+ if (val)
1086
+ picLocksAttrs[key] = '1';
1087
+ }
1088
+ const blipFillAttrs = {};
1089
+ if (this.blipFillDpi !== undefined)
1090
+ blipFillAttrs.dpi = this.blipFillDpi.toString();
1091
+ if (this.blipFillRotWithShape !== undefined)
1092
+ blipFillAttrs.rotWithShape = this.blipFillRotWithShape ? '1' : '0';
1093
+ const blipFillChildren = [blip];
1094
+ if (this.crop) {
1095
+ blipFillChildren.push(XMLBuilder.a('srcRect', {
1096
+ l: Math.round(this.crop.left * 1000).toString(),
1097
+ t: Math.round(this.crop.top * 1000).toString(),
1098
+ r: Math.round(this.crop.right * 1000).toString(),
1099
+ b: Math.round(this.crop.bottom * 1000).toString(),
1100
+ }));
1101
+ }
1102
+ if (this._rawPassthrough.has('blipFill-extra')) {
1103
+ blipFillChildren.push({
1104
+ name: '__rawXml',
1105
+ rawXml: this._rawPassthrough.get('blipFill-extra'),
1106
+ });
1107
+ }
1108
+ else {
1109
+ blipFillChildren.push(XMLBuilder.a('stretch', undefined, [XMLBuilder.a('fillRect')]));
1110
+ }
1111
+ const blipFillAttrsObj = Object.keys(blipFillAttrs).length > 0 ? blipFillAttrs : undefined;
1112
+ const graphicData = XMLBuilder.a('graphicData', { uri: 'http://schemas.openxmlformats.org/drawingml/2006/picture' }, [
1113
+ XMLBuilder.pic('pic', undefined, [
1114
+ XMLBuilder.pic('nvPicPr', undefined, [
1115
+ cNvPr,
1116
+ XMLBuilder.pic('cNvPicPr', undefined, [
1117
+ XMLBuilder.a('picLocks', Object.keys(picLocksAttrs).length > 0 ? picLocksAttrs : undefined),
1118
+ ]),
1119
+ ]),
1120
+ XMLBuilder.pic('blipFill', blipFillAttrsObj, blipFillChildren),
1121
+ XMLBuilder.pic('spPr', { bwMode: this.bwMode }, spPrChildren),
1122
+ ]),
1123
+ ]);
1124
+ const graphic = XMLBuilder.a('graphic', undefined, [graphicData]);
1125
+ const buildDocPr = (idVal) => {
1126
+ const attrs = { id: idVal, name: this.name, descr: this.description };
1127
+ if (this.title)
1128
+ attrs.title = this.title;
1129
+ if (this.hidden)
1130
+ attrs.hidden = '1';
1131
+ const children = [];
1132
+ if (this._rawPassthrough.has('docPr-extra')) {
1133
+ children.push({
1134
+ name: '__rawXml',
1135
+ rawXml: this._rawPassthrough.get('docPr-extra'),
1136
+ });
1137
+ }
1138
+ return children.length > 0
1139
+ ? XMLBuilder.wp('docPr', attrs, children)
1140
+ : XMLBuilder.wp('docPr', attrs);
1141
+ };
1142
+ const buildCNvGraphicFramePr = () => {
1143
+ return XMLBuilder.wp('cNvGraphicFramePr', undefined, [
1144
+ XMLBuilder.a('graphicFrameLocks', {
1145
+ 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
1146
+ noChangeAspect: this.noChangeAspect ? '1' : '0',
1147
+ }),
1148
+ ]);
1149
+ };
1150
+ if (isFloating) {
1151
+ const positionHChildren = [];
1152
+ if (this.position?.horizontal.alignment) {
1153
+ positionHChildren.push(XMLBuilder.wp('align', undefined, [this.position.horizontal.alignment]));
1154
+ }
1155
+ else {
1156
+ positionHChildren.push(XMLBuilder.wp('posOffset', undefined, [
1157
+ (this.position?.horizontal.offset || 0).toString(),
1158
+ ]));
1159
+ }
1160
+ const positionH = XMLBuilder.wp('positionH', { relativeFrom: this.position?.horizontal.anchor || 'page' }, positionHChildren);
1161
+ const positionVChildren = [];
1162
+ if (this.position?.vertical.alignment) {
1163
+ positionVChildren.push(XMLBuilder.wp('align', undefined, [this.position.vertical.alignment]));
1164
+ }
1165
+ else {
1166
+ positionVChildren.push(XMLBuilder.wp('posOffset', undefined, [(this.position?.vertical.offset || 0).toString()]));
1167
+ }
1168
+ const positionV = XMLBuilder.wp('positionV', { relativeFrom: this.position?.vertical.anchor || 'page' }, positionVChildren);
1169
+ const floatEffectExt = this.effectExtent || { left: 0, top: 0, right: 0, bottom: 0 };
1170
+ const effectExtentElement = XMLBuilder.wp('effectExtent', {
1171
+ t: floatEffectExt.top.toString(),
1172
+ r: floatEffectExt.right.toString(),
1173
+ b: floatEffectExt.bottom.toString(),
1174
+ l: floatEffectExt.left.toString(),
1175
+ });
1176
+ const anchorChildren = [positionH, positionV, extent, effectExtentElement];
1177
+ if (this.wrap) {
1178
+ const wrapAttrs = {};
1179
+ if (this.wrap.distanceTop !== undefined)
1180
+ wrapAttrs.distT = this.wrap.distanceTop;
1181
+ if (this.wrap.distanceBottom !== undefined)
1182
+ wrapAttrs.distB = this.wrap.distanceBottom;
1183
+ if (this.wrap.distanceLeft !== undefined)
1184
+ wrapAttrs.distL = this.wrap.distanceLeft;
1185
+ if (this.wrap.distanceRight !== undefined)
1186
+ wrapAttrs.distR = this.wrap.distanceRight;
1187
+ if (this.wrap.side)
1188
+ wrapAttrs.wrapText = this.wrap.side;
1189
+ let wrapElementName;
1190
+ switch (this.wrap.type) {
1191
+ case 'square':
1192
+ wrapElementName = 'wrapSquare';
1193
+ break;
1194
+ case 'tight':
1195
+ wrapElementName = 'wrapTight';
1196
+ break;
1197
+ case 'through':
1198
+ wrapElementName = 'wrapThrough';
1199
+ break;
1200
+ case 'topAndBottom':
1201
+ wrapElementName = 'wrapTopAndBottom';
1202
+ break;
1203
+ case 'none':
1204
+ wrapElementName = 'wrapNone';
1205
+ break;
1206
+ default:
1207
+ wrapElementName = 'wrapSquare';
1208
+ }
1209
+ const wrapChildren = [];
1210
+ if (this._rawPassthrough.has('wrap-polygon')) {
1211
+ wrapChildren.push({
1212
+ name: '__rawXml',
1213
+ rawXml: this._rawPassthrough.get('wrap-polygon'),
1214
+ });
1215
+ }
1216
+ else if (wrapElementName === 'wrapTight' || wrapElementName === 'wrapThrough') {
1217
+ wrapChildren.push({
1218
+ name: 'wp:wrapPolygon',
1219
+ attributes: { edited: '0' },
1220
+ children: [
1221
+ { name: 'wp:start', attributes: { x: '0', y: '0' }, selfClosing: true },
1222
+ { name: 'wp:lineTo', attributes: { x: '21600', y: '0' }, selfClosing: true },
1223
+ { name: 'wp:lineTo', attributes: { x: '21600', y: '21600' }, selfClosing: true },
1224
+ { name: 'wp:lineTo', attributes: { x: '0', y: '21600' }, selfClosing: true },
1225
+ { name: 'wp:lineTo', attributes: { x: '0', y: '0' }, selfClosing: true },
1226
+ ],
1227
+ });
1228
+ }
1229
+ anchorChildren.push(wrapChildren.length > 0
1230
+ ? XMLBuilder.wp(wrapElementName, wrapAttrs, wrapChildren)
1231
+ : XMLBuilder.wp(wrapElementName, wrapAttrs));
1232
+ }
1233
+ else {
1234
+ anchorChildren.push(XMLBuilder.wp('wrapNone', {}));
1235
+ }
1236
+ anchorChildren.push(buildDocPr(this.docPrId));
1237
+ anchorChildren.push(buildCNvGraphicFramePr());
1238
+ anchorChildren.push(graphic);
1239
+ if (this._rawPassthrough.has('anchor-extra')) {
1240
+ anchorChildren.push({
1241
+ name: '__rawXml',
1242
+ rawXml: this._rawPassthrough.get('anchor-extra'),
1243
+ });
1244
+ }
1245
+ const anchorAttrs = {
1246
+ behindDoc: this.anchor?.behindDoc ? 1 : 0,
1247
+ locked: this.anchor?.locked ? 1 : 0,
1248
+ layoutInCell: this.anchor?.layoutInCell ? 1 : 0,
1249
+ allowOverlap: this.anchor?.allowOverlap ? 1 : 0,
1250
+ relativeHeight: this.anchor?.relativeHeight,
1251
+ simplePos: this.anchor?.simplePos ? '1' : '0',
1252
+ distT: (this.anchor?.distT ?? 0).toString(),
1253
+ distB: (this.anchor?.distB ?? 0).toString(),
1254
+ distL: (this.anchor?.distL ?? 0).toString(),
1255
+ distR: (this.anchor?.distR ?? 0).toString(),
1256
+ };
1257
+ if (this.hidden)
1258
+ anchorAttrs.hidden = '1';
1259
+ anchorChildren.unshift(XMLBuilder.wp('simplePos', { x: '0', y: '0' }));
1260
+ return XMLBuilder.w('drawing', undefined, [
1261
+ XMLBuilder.wp('anchor', anchorAttrs, anchorChildren),
1262
+ ]);
1263
+ }
1264
+ else {
1265
+ const effectExt = this.effectExtent || { left: 0, top: 0, right: 0, bottom: 0 };
1266
+ return XMLBuilder.w('drawing', undefined, [
1267
+ XMLBuilder.wp('inline', {
1268
+ distT: this.inlineDistT.toString(),
1269
+ distB: this.inlineDistB.toString(),
1270
+ distL: this.inlineDistL.toString(),
1271
+ distR: this.inlineDistR.toString(),
1272
+ }, [
1273
+ extent,
1274
+ XMLBuilder.wp('effectExtent', {
1275
+ t: effectExt.top.toString(),
1276
+ r: effectExt.right.toString(),
1277
+ b: effectExt.bottom.toString(),
1278
+ l: effectExt.left.toString(),
1279
+ }),
1280
+ buildDocPr(this.docPrId.toString()),
1281
+ buildCNvGraphicFramePr(),
1282
+ graphic,
1283
+ ]),
1284
+ ]);
1285
+ }
1286
+ }
1287
+ }
1288
+ //# sourceMappingURL=Image.js.map