docxmlater 10.1.3 → 10.1.5

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 (371) hide show
  1. package/README.md +759 -754
  2. package/dist/constants/legacyCompatFlags.js +1 -1
  3. package/dist/constants/legacyCompatFlags.js.map +1 -1
  4. package/dist/constants/limits.js.map +1 -1
  5. package/dist/core/Document.d.ts +50 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +483 -471
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +9 -9
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +1 -1
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentGenerator.d.ts +11 -11
  14. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  15. package/dist/core/DocumentGenerator.js +251 -251
  16. package/dist/core/DocumentGenerator.js.map +1 -1
  17. package/dist/core/DocumentIdManager.js.map +1 -1
  18. package/dist/core/DocumentParser.d.ts +15 -15
  19. package/dist/core/DocumentParser.d.ts.map +1 -1
  20. package/dist/core/DocumentParser.js +2123 -2155
  21. package/dist/core/DocumentParser.js.map +1 -1
  22. package/dist/core/DocumentValidator.d.ts.map +1 -1
  23. package/dist/core/DocumentValidator.js +2 -5
  24. package/dist/core/DocumentValidator.js.map +1 -1
  25. package/dist/core/Relationship.js.map +1 -1
  26. package/dist/core/RelationshipManager.d.ts.map +1 -1
  27. package/dist/core/RelationshipManager.js +3 -3
  28. package/dist/core/RelationshipManager.js.map +1 -1
  29. package/dist/elements/AlternateContent.js.map +1 -1
  30. package/dist/elements/Bookmark.d.ts.map +1 -1
  31. package/dist/elements/Bookmark.js +3 -1
  32. package/dist/elements/Bookmark.js.map +1 -1
  33. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  34. package/dist/elements/BookmarkManager.js.map +1 -1
  35. package/dist/elements/Comment.d.ts.map +1 -1
  36. package/dist/elements/Comment.js +9 -6
  37. package/dist/elements/Comment.js.map +1 -1
  38. package/dist/elements/CommentManager.d.ts.map +1 -1
  39. package/dist/elements/CommentManager.js +18 -17
  40. package/dist/elements/CommentManager.js.map +1 -1
  41. package/dist/elements/CommonTypes.d.ts +21 -21
  42. package/dist/elements/CommonTypes.d.ts.map +1 -1
  43. package/dist/elements/CommonTypes.js +56 -56
  44. package/dist/elements/CommonTypes.js.map +1 -1
  45. package/dist/elements/CustomXml.js.map +1 -1
  46. package/dist/elements/Endnote.d.ts.map +1 -1
  47. package/dist/elements/Endnote.js +6 -6
  48. package/dist/elements/Endnote.js.map +1 -1
  49. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  50. package/dist/elements/EndnoteManager.js +6 -7
  51. package/dist/elements/EndnoteManager.js.map +1 -1
  52. package/dist/elements/Field.d.ts.map +1 -1
  53. package/dist/elements/Field.js +82 -25
  54. package/dist/elements/Field.js.map +1 -1
  55. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  56. package/dist/elements/FieldHelpers.js.map +1 -1
  57. package/dist/elements/FontManager.d.ts.map +1 -1
  58. package/dist/elements/FontManager.js +1 -1
  59. package/dist/elements/FontManager.js.map +1 -1
  60. package/dist/elements/Footer.js +2 -2
  61. package/dist/elements/Footer.js.map +1 -1
  62. package/dist/elements/Footnote.d.ts.map +1 -1
  63. package/dist/elements/Footnote.js +6 -6
  64. package/dist/elements/Footnote.js.map +1 -1
  65. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  66. package/dist/elements/FootnoteManager.js +6 -7
  67. package/dist/elements/FootnoteManager.js.map +1 -1
  68. package/dist/elements/Header.js +2 -2
  69. package/dist/elements/Header.js.map +1 -1
  70. package/dist/elements/HeaderFooterManager.js.map +1 -1
  71. package/dist/elements/Hyperlink.d.ts +5 -3
  72. package/dist/elements/Hyperlink.d.ts.map +1 -1
  73. package/dist/elements/Hyperlink.js +134 -76
  74. package/dist/elements/Hyperlink.js.map +1 -1
  75. package/dist/elements/Image.d.ts.map +1 -1
  76. package/dist/elements/Image.js +238 -106
  77. package/dist/elements/Image.js.map +1 -1
  78. package/dist/elements/ImageManager.d.ts.map +1 -1
  79. package/dist/elements/ImageManager.js +1 -1
  80. package/dist/elements/ImageManager.js.map +1 -1
  81. package/dist/elements/ImageRun.js +1 -1
  82. package/dist/elements/ImageRun.js.map +1 -1
  83. package/dist/elements/MathElement.js.map +1 -1
  84. package/dist/elements/Paragraph.d.ts +24 -24
  85. package/dist/elements/Paragraph.d.ts.map +1 -1
  86. package/dist/elements/Paragraph.js +181 -188
  87. package/dist/elements/Paragraph.js.map +1 -1
  88. package/dist/elements/PreservedElement.js.map +1 -1
  89. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  90. package/dist/elements/PropertyChangeTypes.js +6 -6
  91. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  92. package/dist/elements/RangeMarker.d.ts.map +1 -1
  93. package/dist/elements/RangeMarker.js.map +1 -1
  94. package/dist/elements/Revision.d.ts.map +1 -1
  95. package/dist/elements/Revision.js +4 -5
  96. package/dist/elements/Revision.js.map +1 -1
  97. package/dist/elements/RevisionContent.js.map +1 -1
  98. package/dist/elements/RevisionManager.d.ts.map +1 -1
  99. package/dist/elements/RevisionManager.js +40 -48
  100. package/dist/elements/RevisionManager.js.map +1 -1
  101. package/dist/elements/Run.d.ts +16 -16
  102. package/dist/elements/Run.d.ts.map +1 -1
  103. package/dist/elements/Run.js +256 -238
  104. package/dist/elements/Run.js.map +1 -1
  105. package/dist/elements/Section.d.ts.map +1 -1
  106. package/dist/elements/Section.js +36 -11
  107. package/dist/elements/Section.js.map +1 -1
  108. package/dist/elements/Shape.d.ts.map +1 -1
  109. package/dist/elements/Shape.js.map +1 -1
  110. package/dist/elements/StructuredDocumentTag.d.ts +6 -6
  111. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  112. package/dist/elements/StructuredDocumentTag.js +99 -104
  113. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  114. package/dist/elements/Table.d.ts +11 -11
  115. package/dist/elements/Table.d.ts.map +1 -1
  116. package/dist/elements/Table.js +102 -107
  117. package/dist/elements/Table.js.map +1 -1
  118. package/dist/elements/TableCell.d.ts +10 -10
  119. package/dist/elements/TableCell.d.ts.map +1 -1
  120. package/dist/elements/TableCell.js +105 -106
  121. package/dist/elements/TableCell.js.map +1 -1
  122. package/dist/elements/TableGridChange.d.ts.map +1 -1
  123. package/dist/elements/TableGridChange.js.map +1 -1
  124. package/dist/elements/TableOfContents.d.ts.map +1 -1
  125. package/dist/elements/TableOfContents.js +4 -4
  126. package/dist/elements/TableOfContents.js.map +1 -1
  127. package/dist/elements/TableOfContentsElement.js.map +1 -1
  128. package/dist/elements/TableRow.d.ts.map +1 -1
  129. package/dist/elements/TableRow.js +13 -6
  130. package/dist/elements/TableRow.js.map +1 -1
  131. package/dist/elements/TextBox.d.ts.map +1 -1
  132. package/dist/elements/TextBox.js +3 -5
  133. package/dist/elements/TextBox.js.map +1 -1
  134. package/dist/formatting/AbstractNumbering.d.ts +4 -4
  135. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  136. package/dist/formatting/AbstractNumbering.js +54 -49
  137. package/dist/formatting/AbstractNumbering.js.map +1 -1
  138. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  139. package/dist/formatting/NumberingInstance.js +1 -3
  140. package/dist/formatting/NumberingInstance.js.map +1 -1
  141. package/dist/formatting/NumberingLevel.d.ts +5 -5
  142. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  143. package/dist/formatting/NumberingLevel.js +119 -125
  144. package/dist/formatting/NumberingLevel.js.map +1 -1
  145. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  146. package/dist/formatting/NumberingManager.js +9 -9
  147. package/dist/formatting/NumberingManager.js.map +1 -1
  148. package/dist/formatting/Style.d.ts +11 -11
  149. package/dist/formatting/Style.d.ts.map +1 -1
  150. package/dist/formatting/Style.js +219 -247
  151. package/dist/formatting/Style.js.map +1 -1
  152. package/dist/formatting/StylesManager.d.ts +2 -2
  153. package/dist/formatting/StylesManager.d.ts.map +1 -1
  154. package/dist/formatting/StylesManager.js +96 -102
  155. package/dist/formatting/StylesManager.js.map +1 -1
  156. package/dist/helpers/CleanupHelper.d.ts +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  158. package/dist/helpers/CleanupHelper.js +6 -6
  159. package/dist/helpers/CleanupHelper.js.map +1 -1
  160. package/dist/images/ImageOptimizer.js +7 -7
  161. package/dist/images/ImageOptimizer.js.map +1 -1
  162. package/dist/index.d.ts +9 -9
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js.map +1 -1
  165. package/dist/managers/DrawingManager.js.map +1 -1
  166. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.js +23 -7
  168. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  169. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  170. package/dist/tracking/TrackingContext.js.map +1 -1
  171. package/dist/types/compatibility-types.js.map +1 -1
  172. package/dist/types/formatting.js.map +1 -1
  173. package/dist/types/list-types.d.ts +6 -6
  174. package/dist/types/list-types.js.map +1 -1
  175. package/dist/types/settings-types.js.map +1 -1
  176. package/dist/types/styleConfig.d.ts +2 -2
  177. package/dist/types/styleConfig.js.map +1 -1
  178. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  179. package/dist/utils/ChangelogGenerator.js +97 -101
  180. package/dist/utils/ChangelogGenerator.js.map +1 -1
  181. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.js +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  184. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  186. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  187. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  188. package/dist/utils/MoveOperationHelper.js +1 -1
  189. package/dist/utils/MoveOperationHelper.js.map +1 -1
  190. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.js +2 -4
  192. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  193. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  194. package/dist/utils/RevisionWalker.js +4 -12
  195. package/dist/utils/RevisionWalker.js.map +1 -1
  196. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  198. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  199. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  200. package/dist/utils/ShadingResolver.js +1 -1
  201. package/dist/utils/ShadingResolver.js.map +1 -1
  202. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  203. package/dist/utils/acceptRevisions.js +23 -12
  204. package/dist/utils/acceptRevisions.js.map +1 -1
  205. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  207. package/dist/utils/cnfStyleDecoder.js +40 -40
  208. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  209. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  210. package/dist/utils/corruptionDetection.js.map +1 -1
  211. package/dist/utils/dateFormatting.js.map +1 -1
  212. package/dist/utils/deepClone.js +1 -1
  213. package/dist/utils/deepClone.js.map +1 -1
  214. package/dist/utils/diagnostics.d.ts.map +1 -1
  215. package/dist/utils/diagnostics.js +1 -1
  216. package/dist/utils/diagnostics.js.map +1 -1
  217. package/dist/utils/errorHandling.js.map +1 -1
  218. package/dist/utils/formatting.d.ts.map +1 -1
  219. package/dist/utils/formatting.js +10 -2
  220. package/dist/utils/formatting.js.map +1 -1
  221. package/dist/utils/list-detection.d.ts +2 -2
  222. package/dist/utils/list-detection.d.ts.map +1 -1
  223. package/dist/utils/list-detection.js +21 -23
  224. package/dist/utils/list-detection.js.map +1 -1
  225. package/dist/utils/logger.d.ts.map +1 -1
  226. package/dist/utils/logger.js +12 -7
  227. package/dist/utils/logger.js.map +1 -1
  228. package/dist/utils/parsingHelpers.js.map +1 -1
  229. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  230. package/dist/utils/stripTrackedChanges.js +3 -3
  231. package/dist/utils/stripTrackedChanges.js.map +1 -1
  232. package/dist/utils/textDiff.d.ts +1 -1
  233. package/dist/utils/textDiff.js +8 -8
  234. package/dist/utils/textDiff.js.map +1 -1
  235. package/dist/utils/units.js.map +1 -1
  236. package/dist/utils/validation.d.ts.map +1 -1
  237. package/dist/utils/validation.js +24 -7
  238. package/dist/utils/validation.js.map +1 -1
  239. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  240. package/dist/utils/xmlSanitization.js +3 -3
  241. package/dist/utils/xmlSanitization.js.map +1 -1
  242. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.js +5 -5
  244. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  245. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  246. package/dist/validation/RevisionValidator.js +7 -9
  247. package/dist/validation/RevisionValidator.js.map +1 -1
  248. package/dist/validation/ValidationRules.js +3 -3
  249. package/dist/validation/ValidationRules.js.map +1 -1
  250. package/dist/validation/index.js.map +1 -1
  251. package/dist/xml/XMLBuilder.d.ts +1 -1
  252. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  253. package/dist/xml/XMLBuilder.js +98 -100
  254. package/dist/xml/XMLBuilder.js.map +1 -1
  255. package/dist/xml/XMLParser.d.ts.map +1 -1
  256. package/dist/xml/XMLParser.js +61 -66
  257. package/dist/xml/XMLParser.js.map +1 -1
  258. package/dist/zip/ZipHandler.d.ts.map +1 -1
  259. package/dist/zip/ZipHandler.js.map +1 -1
  260. package/dist/zip/ZipReader.d.ts.map +1 -1
  261. package/dist/zip/ZipReader.js +1 -3
  262. package/dist/zip/ZipReader.js.map +1 -1
  263. package/dist/zip/ZipWriter.d.ts +1 -1
  264. package/dist/zip/ZipWriter.d.ts.map +1 -1
  265. package/dist/zip/ZipWriter.js +28 -36
  266. package/dist/zip/ZipWriter.js.map +1 -1
  267. package/dist/zip/types.js +1 -1
  268. package/dist/zip/types.js.map +1 -1
  269. package/package.json +92 -92
  270. package/src/__tests__/helper-methods.test.ts +512 -512
  271. package/src/constants/legacyCompatFlags.ts +138 -138
  272. package/src/constants/limits.ts +50 -50
  273. package/src/core/Document.ts +985 -1145
  274. package/src/core/DocumentContent.ts +461 -467
  275. package/src/core/DocumentGenerator.ts +1133 -1104
  276. package/src/core/DocumentIdManager.ts +158 -158
  277. package/src/core/DocumentParser.ts +2347 -2716
  278. package/src/core/DocumentValidator.ts +363 -372
  279. package/src/core/Relationship.ts +367 -367
  280. package/src/core/RelationshipManager.ts +429 -428
  281. package/src/elements/AlternateContent.ts +42 -42
  282. package/src/elements/Bookmark.ts +212 -210
  283. package/src/elements/BookmarkManager.ts +247 -250
  284. package/src/elements/Comment.ts +356 -359
  285. package/src/elements/CommentManager.ts +499 -502
  286. package/src/elements/CommonTypes.ts +524 -549
  287. package/src/elements/CustomXml.ts +36 -36
  288. package/src/elements/Endnote.ts +221 -217
  289. package/src/elements/EndnoteManager.ts +246 -249
  290. package/src/elements/Field.ts +1292 -1233
  291. package/src/elements/FieldHelpers.ts +329 -333
  292. package/src/elements/FontManager.ts +336 -339
  293. package/src/elements/Footer.ts +269 -269
  294. package/src/elements/Footnote.ts +221 -217
  295. package/src/elements/FootnoteManager.ts +246 -249
  296. package/src/elements/Header.ts +269 -269
  297. package/src/elements/HeaderFooterManager.ts +219 -219
  298. package/src/elements/Hyperlink.ts +1288 -1193
  299. package/src/elements/Image.ts +1982 -1756
  300. package/src/elements/ImageManager.ts +437 -432
  301. package/src/elements/ImageRun.ts +59 -59
  302. package/src/elements/MathElement.ts +65 -65
  303. package/src/elements/Paragraph.ts +4347 -4287
  304. package/src/elements/PreservedElement.ts +53 -53
  305. package/src/elements/PropertyChangeTypes.ts +458 -442
  306. package/src/elements/RangeMarker.ts +382 -400
  307. package/src/elements/Revision.ts +1198 -1217
  308. package/src/elements/RevisionContent.ts +73 -73
  309. package/src/elements/RevisionManager.ts +1070 -1070
  310. package/src/elements/Run.ts +3103 -3073
  311. package/src/elements/Section.ts +1521 -1421
  312. package/src/elements/Shape.ts +884 -873
  313. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  314. package/src/elements/Table.ts +2468 -2524
  315. package/src/elements/TableCell.ts +1617 -1621
  316. package/src/elements/TableGridChange.ts +149 -151
  317. package/src/elements/TableOfContents.ts +701 -691
  318. package/src/elements/TableOfContentsElement.ts +89 -89
  319. package/src/elements/TableRow.ts +960 -929
  320. package/src/elements/TextBox.ts +766 -768
  321. package/src/formatting/AbstractNumbering.ts +580 -579
  322. package/src/formatting/NumberingInstance.ts +295 -299
  323. package/src/formatting/NumberingLevel.ts +981 -1040
  324. package/src/formatting/NumberingManager.ts +833 -827
  325. package/src/formatting/Style.ts +1785 -1879
  326. package/src/formatting/StylesManager.ts +1090 -1130
  327. package/src/helpers/CleanupHelper.ts +524 -524
  328. package/src/images/ImageOptimizer.ts +274 -274
  329. package/src/index.ts +559 -554
  330. package/src/managers/DrawingManager.ts +319 -319
  331. package/src/tracking/DocumentTrackingContext.ts +687 -674
  332. package/src/tracking/TrackingContext.ts +175 -173
  333. package/src/types/compatibility-types.ts +49 -49
  334. package/src/types/formatting.ts +210 -210
  335. package/src/types/list-types.ts +14 -14
  336. package/src/types/settings-types.ts +59 -59
  337. package/src/types/styleConfig.ts +189 -189
  338. package/src/utils/ChangelogGenerator.ts +1583 -1581
  339. package/src/utils/CompatibilityUpgrader.ts +235 -237
  340. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  341. package/src/utils/MoveOperationHelper.ts +233 -238
  342. package/src/utils/RevisionAwareProcessor.ts +518 -526
  343. package/src/utils/RevisionWalker.ts +427 -457
  344. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  345. package/src/utils/ShadingResolver.ts +105 -107
  346. package/src/utils/acceptRevisions.ts +723 -714
  347. package/src/utils/cnfStyleDecoder.ts +212 -217
  348. package/src/utils/corruptionDetection.ts +346 -345
  349. package/src/utils/dateFormatting.ts +20 -20
  350. package/src/utils/deepClone.ts +77 -78
  351. package/src/utils/diagnostics.ts +125 -129
  352. package/src/utils/errorHandling.ts +80 -80
  353. package/src/utils/formatting.ts +220 -213
  354. package/src/utils/list-detection.ts +32 -42
  355. package/src/utils/logger.ts +412 -404
  356. package/src/utils/parsingHelpers.ts +190 -190
  357. package/src/utils/stripTrackedChanges.ts +356 -353
  358. package/src/utils/textDiff.ts +100 -100
  359. package/src/utils/units.ts +421 -421
  360. package/src/utils/validation.ts +553 -542
  361. package/src/utils/xmlSanitization.ts +179 -182
  362. package/src/validation/RevisionAutoFixer.ts +541 -542
  363. package/src/validation/RevisionValidator.ts +470 -460
  364. package/src/validation/ValidationRules.ts +338 -338
  365. package/src/validation/index.ts +30 -30
  366. package/src/xml/XMLBuilder.ts +857 -871
  367. package/src/xml/XMLParser.ts +877 -919
  368. package/src/zip/ZipHandler.ts +629 -637
  369. package/src/zip/ZipReader.ts +295 -299
  370. package/src/zip/ZipWriter.ts +374 -390
  371. package/src/zip/types.ts +116 -116
@@ -1,319 +1,319 @@
1
- /**
2
- * DrawingManager - Manages all drawing elements in a document
3
- *
4
- * Centralizes management of images, shapes, and text boxes.
5
- * Assigns unique IDs and handles relationship management.
6
- */
7
-
8
- import { Image } from '../elements/Image';
9
- import { Shape } from '../elements/Shape';
10
- import { TextBox } from '../elements/TextBox';
11
-
12
- /**
13
- * Type representing any drawing element
14
- */
15
- export type DrawingElement = Image | Shape | TextBox;
16
-
17
- /**
18
- * Drawing type discriminator
19
- */
20
- export type DrawingType = 'image' | 'shape' | 'textbox' | 'preserved';
21
-
22
- /**
23
- * Preserved drawing (SmartArt, Chart, WordArt)
24
- * These are stored as raw XML for round-trip preservation
25
- */
26
- export interface PreservedDrawing {
27
- /** Type of preserved drawing */
28
- type: 'smartart' | 'chart' | 'wordart';
29
- /** Raw XML content */
30
- xml: string;
31
- /** Relationship IDs referenced by this drawing */
32
- relationshipIds: string[];
33
- /** Unique ID for this drawing */
34
- id: string;
35
- }
36
-
37
- /**
38
- * Manages all drawing elements in a document
39
- *
40
- * Performance: Uses type-indexed Sets for O(1) type-specific lookups
41
- * instead of O(n) linear scans through the main Map.
42
- */
43
- export class DrawingManager {
44
- private drawings = new Map<string, DrawingElement | PreservedDrawing>();
45
- private nextId = 1;
46
-
47
- // Type-indexed Sets for O(1) type-specific lookups
48
- private imageIds = new Set<string>();
49
- private shapeIds = new Set<string>();
50
- private textboxIds = new Set<string>();
51
- private preservedIds = new Set<string>();
52
-
53
- /**
54
- * Creates a new DrawingManager
55
- */
56
- constructor() {
57
- // Empty constructor
58
- }
59
-
60
- /**
61
- * Adds an image to the manager
62
- * @param image Image to add
63
- * @returns Assigned ID
64
- */
65
- addImage(image: Image): string {
66
- const id = this.generateId();
67
- image.setDocPrId(this.nextId - 1);
68
- this.drawings.set(id, image);
69
- this.imageIds.add(id);
70
- return id;
71
- }
72
-
73
- /**
74
- * Adds a shape to the manager
75
- * @param shape Shape to add
76
- * @returns Assigned ID
77
- */
78
- addShape(shape: Shape): string {
79
- const id = this.generateId();
80
- shape.setDocPrId(this.nextId - 1);
81
- this.drawings.set(id, shape);
82
- this.shapeIds.add(id);
83
- return id;
84
- }
85
-
86
- /**
87
- * Adds a text box to the manager
88
- * @param textbox TextBox to add
89
- * @returns Assigned ID
90
- */
91
- addTextBox(textbox: TextBox): string {
92
- const id = this.generateId();
93
- textbox.setDocPrId(this.nextId - 1);
94
- this.drawings.set(id, textbox);
95
- this.textboxIds.add(id);
96
- return id;
97
- }
98
-
99
- /**
100
- * Adds a preserved drawing (SmartArt, Chart, WordArt)
101
- * @param drawing Preserved drawing to add
102
- * @returns Assigned ID
103
- */
104
- addPreservedDrawing(drawing: PreservedDrawing): string {
105
- const id = this.generateId();
106
- this.drawings.set(id, { ...drawing, id });
107
- this.preservedIds.add(id);
108
- return id;
109
- }
110
-
111
- /**
112
- * Gets a drawing by ID
113
- * @param id Drawing ID
114
- * @returns Drawing element or undefined
115
- */
116
- getDrawing(id: string): DrawingElement | PreservedDrawing | undefined {
117
- return this.drawings.get(id);
118
- }
119
-
120
- /**
121
- * Gets all drawings
122
- * @returns Array of all drawing elements
123
- */
124
- getAllDrawings(): (DrawingElement | PreservedDrawing)[] {
125
- return Array.from(this.drawings.values());
126
- }
127
-
128
- /**
129
- * Gets all images
130
- * Performance: O(k) where k = number of images (uses indexed lookup)
131
- * @returns Array of images
132
- */
133
- getAllImages(): Image[] {
134
- const images: Image[] = [];
135
- for (const id of this.imageIds) {
136
- const drawing = this.drawings.get(id);
137
- if (drawing instanceof Image) {
138
- images.push(drawing);
139
- }
140
- }
141
- return images;
142
- }
143
-
144
- /**
145
- * Gets all shapes
146
- * Performance: O(k) where k = number of shapes (uses indexed lookup)
147
- * @returns Array of shapes
148
- */
149
- getAllShapes(): Shape[] {
150
- const shapes: Shape[] = [];
151
- for (const id of this.shapeIds) {
152
- const drawing = this.drawings.get(id);
153
- if (drawing instanceof Shape) {
154
- shapes.push(drawing);
155
- }
156
- }
157
- return shapes;
158
- }
159
-
160
- /**
161
- * Gets all text boxes
162
- * Performance: O(k) where k = number of text boxes (uses indexed lookup)
163
- * @returns Array of text boxes
164
- */
165
- getAllTextBoxes(): TextBox[] {
166
- const textboxes: TextBox[] = [];
167
- for (const id of this.textboxIds) {
168
- const drawing = this.drawings.get(id);
169
- if (drawing instanceof TextBox) {
170
- textboxes.push(drawing);
171
- }
172
- }
173
- return textboxes;
174
- }
175
-
176
- /**
177
- * Gets all preserved drawings
178
- * Performance: O(k) where k = number of preserved drawings (uses indexed lookup)
179
- * @returns Array of preserved drawings
180
- */
181
- getAllPreservedDrawings(): PreservedDrawing[] {
182
- const preserved: PreservedDrawing[] = [];
183
- for (const id of this.preservedIds) {
184
- const drawing = this.drawings.get(id);
185
- if (drawing && this.isPreservedDrawing(drawing)) {
186
- preserved.push(drawing);
187
- }
188
- }
189
- return preserved;
190
- }
191
-
192
- /**
193
- * Removes a drawing by ID
194
- * @param id Drawing ID
195
- * @returns True if removed, false if not found
196
- */
197
- removeDrawing(id: string): boolean {
198
- const deleted = this.drawings.delete(id);
199
- if (deleted) {
200
- // Remove from type-specific indices
201
- this.imageIds.delete(id);
202
- this.shapeIds.delete(id);
203
- this.textboxIds.delete(id);
204
- this.preservedIds.delete(id);
205
- }
206
- return deleted;
207
- }
208
-
209
- /**
210
- * Gets the total number of drawings
211
- * @returns Number of drawings
212
- */
213
- getCount(): number {
214
- return this.drawings.size;
215
- }
216
-
217
- /**
218
- * Checks if the manager has any drawings
219
- * @returns True if empty, false otherwise
220
- */
221
- isEmpty(): boolean {
222
- return this.drawings.size === 0;
223
- }
224
-
225
- /**
226
- * Clears all drawings
227
- */
228
- clear(): void {
229
- this.drawings.clear();
230
- this.imageIds.clear();
231
- this.shapeIds.clear();
232
- this.textboxIds.clear();
233
- this.preservedIds.clear();
234
- this.nextId = 1;
235
- }
236
-
237
- /**
238
- * Gets the drawing type
239
- * @param drawing Drawing element
240
- * @returns Drawing type
241
- */
242
- getDrawingType(drawing: DrawingElement | PreservedDrawing): DrawingType {
243
- if (drawing instanceof Image) {
244
- return 'image';
245
- } else if (drawing instanceof Shape) {
246
- return 'shape';
247
- } else if (drawing instanceof TextBox) {
248
- return 'textbox';
249
- } else {
250
- return 'preserved';
251
- }
252
- }
253
-
254
- /**
255
- * Type guard for PreservedDrawing
256
- * @param drawing Drawing to check
257
- * @returns True if PreservedDrawing
258
- */
259
- private isPreservedDrawing(drawing: any): drawing is PreservedDrawing {
260
- return (
261
- drawing &&
262
- typeof drawing === 'object' &&
263
- 'type' in drawing &&
264
- 'xml' in drawing &&
265
- 'relationshipIds' in drawing &&
266
- (drawing.type === 'smartart' || drawing.type === 'chart' || drawing.type === 'wordart')
267
- );
268
- }
269
-
270
- /**
271
- * Generates a unique ID for a drawing
272
- * @private
273
- * @returns Unique ID string
274
- */
275
- private generateId(): string {
276
- const id = `drawing_${this.nextId}`;
277
- this.nextId++;
278
- return id;
279
- }
280
-
281
- /**
282
- * Assigns sequential docPr IDs to all drawings
283
- * Call this before generating the document to ensure unique IDs
284
- */
285
- assignIds(): void {
286
- let docPrId = 1;
287
- for (const drawing of this.drawings.values()) {
288
- if (drawing instanceof Image) {
289
- drawing.setDocPrId(docPrId++);
290
- } else if (drawing instanceof Shape) {
291
- drawing.setDocPrId(docPrId++);
292
- } else if (drawing instanceof TextBox) {
293
- drawing.setDocPrId(docPrId++);
294
- }
295
- // PreservedDrawings don't need docPrId assignment (already in XML)
296
- }
297
- }
298
-
299
- /**
300
- * Gets statistics about the drawings
301
- * Performance: O(1) using indexed Set sizes
302
- * @returns Statistics object
303
- */
304
- getStats(): {
305
- total: number;
306
- images: number;
307
- shapes: number;
308
- textboxes: number;
309
- preserved: number;
310
- } {
311
- return {
312
- total: this.drawings.size,
313
- images: this.imageIds.size,
314
- shapes: this.shapeIds.size,
315
- textboxes: this.textboxIds.size,
316
- preserved: this.preservedIds.size,
317
- };
318
- }
319
- }
1
+ /**
2
+ * DrawingManager - Manages all drawing elements in a document
3
+ *
4
+ * Centralizes management of images, shapes, and text boxes.
5
+ * Assigns unique IDs and handles relationship management.
6
+ */
7
+
8
+ import { Image } from '../elements/Image';
9
+ import { Shape } from '../elements/Shape';
10
+ import { TextBox } from '../elements/TextBox';
11
+
12
+ /**
13
+ * Type representing any drawing element
14
+ */
15
+ export type DrawingElement = Image | Shape | TextBox;
16
+
17
+ /**
18
+ * Drawing type discriminator
19
+ */
20
+ export type DrawingType = 'image' | 'shape' | 'textbox' | 'preserved';
21
+
22
+ /**
23
+ * Preserved drawing (SmartArt, Chart, WordArt)
24
+ * These are stored as raw XML for round-trip preservation
25
+ */
26
+ export interface PreservedDrawing {
27
+ /** Type of preserved drawing */
28
+ type: 'smartart' | 'chart' | 'wordart';
29
+ /** Raw XML content */
30
+ xml: string;
31
+ /** Relationship IDs referenced by this drawing */
32
+ relationshipIds: string[];
33
+ /** Unique ID for this drawing */
34
+ id: string;
35
+ }
36
+
37
+ /**
38
+ * Manages all drawing elements in a document
39
+ *
40
+ * Performance: Uses type-indexed Sets for O(1) type-specific lookups
41
+ * instead of O(n) linear scans through the main Map.
42
+ */
43
+ export class DrawingManager {
44
+ private drawings = new Map<string, DrawingElement | PreservedDrawing>();
45
+ private nextId = 1;
46
+
47
+ // Type-indexed Sets for O(1) type-specific lookups
48
+ private imageIds = new Set<string>();
49
+ private shapeIds = new Set<string>();
50
+ private textboxIds = new Set<string>();
51
+ private preservedIds = new Set<string>();
52
+
53
+ /**
54
+ * Creates a new DrawingManager
55
+ */
56
+ constructor() {
57
+ // Empty constructor
58
+ }
59
+
60
+ /**
61
+ * Adds an image to the manager
62
+ * @param image Image to add
63
+ * @returns Assigned ID
64
+ */
65
+ addImage(image: Image): string {
66
+ const id = this.generateId();
67
+ image.setDocPrId(this.nextId - 1);
68
+ this.drawings.set(id, image);
69
+ this.imageIds.add(id);
70
+ return id;
71
+ }
72
+
73
+ /**
74
+ * Adds a shape to the manager
75
+ * @param shape Shape to add
76
+ * @returns Assigned ID
77
+ */
78
+ addShape(shape: Shape): string {
79
+ const id = this.generateId();
80
+ shape.setDocPrId(this.nextId - 1);
81
+ this.drawings.set(id, shape);
82
+ this.shapeIds.add(id);
83
+ return id;
84
+ }
85
+
86
+ /**
87
+ * Adds a text box to the manager
88
+ * @param textbox TextBox to add
89
+ * @returns Assigned ID
90
+ */
91
+ addTextBox(textbox: TextBox): string {
92
+ const id = this.generateId();
93
+ textbox.setDocPrId(this.nextId - 1);
94
+ this.drawings.set(id, textbox);
95
+ this.textboxIds.add(id);
96
+ return id;
97
+ }
98
+
99
+ /**
100
+ * Adds a preserved drawing (SmartArt, Chart, WordArt)
101
+ * @param drawing Preserved drawing to add
102
+ * @returns Assigned ID
103
+ */
104
+ addPreservedDrawing(drawing: PreservedDrawing): string {
105
+ const id = this.generateId();
106
+ this.drawings.set(id, { ...drawing, id });
107
+ this.preservedIds.add(id);
108
+ return id;
109
+ }
110
+
111
+ /**
112
+ * Gets a drawing by ID
113
+ * @param id Drawing ID
114
+ * @returns Drawing element or undefined
115
+ */
116
+ getDrawing(id: string): DrawingElement | PreservedDrawing | undefined {
117
+ return this.drawings.get(id);
118
+ }
119
+
120
+ /**
121
+ * Gets all drawings
122
+ * @returns Array of all drawing elements
123
+ */
124
+ getAllDrawings(): (DrawingElement | PreservedDrawing)[] {
125
+ return Array.from(this.drawings.values());
126
+ }
127
+
128
+ /**
129
+ * Gets all images
130
+ * Performance: O(k) where k = number of images (uses indexed lookup)
131
+ * @returns Array of images
132
+ */
133
+ getAllImages(): Image[] {
134
+ const images: Image[] = [];
135
+ for (const id of this.imageIds) {
136
+ const drawing = this.drawings.get(id);
137
+ if (drawing instanceof Image) {
138
+ images.push(drawing);
139
+ }
140
+ }
141
+ return images;
142
+ }
143
+
144
+ /**
145
+ * Gets all shapes
146
+ * Performance: O(k) where k = number of shapes (uses indexed lookup)
147
+ * @returns Array of shapes
148
+ */
149
+ getAllShapes(): Shape[] {
150
+ const shapes: Shape[] = [];
151
+ for (const id of this.shapeIds) {
152
+ const drawing = this.drawings.get(id);
153
+ if (drawing instanceof Shape) {
154
+ shapes.push(drawing);
155
+ }
156
+ }
157
+ return shapes;
158
+ }
159
+
160
+ /**
161
+ * Gets all text boxes
162
+ * Performance: O(k) where k = number of text boxes (uses indexed lookup)
163
+ * @returns Array of text boxes
164
+ */
165
+ getAllTextBoxes(): TextBox[] {
166
+ const textboxes: TextBox[] = [];
167
+ for (const id of this.textboxIds) {
168
+ const drawing = this.drawings.get(id);
169
+ if (drawing instanceof TextBox) {
170
+ textboxes.push(drawing);
171
+ }
172
+ }
173
+ return textboxes;
174
+ }
175
+
176
+ /**
177
+ * Gets all preserved drawings
178
+ * Performance: O(k) where k = number of preserved drawings (uses indexed lookup)
179
+ * @returns Array of preserved drawings
180
+ */
181
+ getAllPreservedDrawings(): PreservedDrawing[] {
182
+ const preserved: PreservedDrawing[] = [];
183
+ for (const id of this.preservedIds) {
184
+ const drawing = this.drawings.get(id);
185
+ if (drawing && this.isPreservedDrawing(drawing)) {
186
+ preserved.push(drawing);
187
+ }
188
+ }
189
+ return preserved;
190
+ }
191
+
192
+ /**
193
+ * Removes a drawing by ID
194
+ * @param id Drawing ID
195
+ * @returns True if removed, false if not found
196
+ */
197
+ removeDrawing(id: string): boolean {
198
+ const deleted = this.drawings.delete(id);
199
+ if (deleted) {
200
+ // Remove from type-specific indices
201
+ this.imageIds.delete(id);
202
+ this.shapeIds.delete(id);
203
+ this.textboxIds.delete(id);
204
+ this.preservedIds.delete(id);
205
+ }
206
+ return deleted;
207
+ }
208
+
209
+ /**
210
+ * Gets the total number of drawings
211
+ * @returns Number of drawings
212
+ */
213
+ getCount(): number {
214
+ return this.drawings.size;
215
+ }
216
+
217
+ /**
218
+ * Checks if the manager has any drawings
219
+ * @returns True if empty, false otherwise
220
+ */
221
+ isEmpty(): boolean {
222
+ return this.drawings.size === 0;
223
+ }
224
+
225
+ /**
226
+ * Clears all drawings
227
+ */
228
+ clear(): void {
229
+ this.drawings.clear();
230
+ this.imageIds.clear();
231
+ this.shapeIds.clear();
232
+ this.textboxIds.clear();
233
+ this.preservedIds.clear();
234
+ this.nextId = 1;
235
+ }
236
+
237
+ /**
238
+ * Gets the drawing type
239
+ * @param drawing Drawing element
240
+ * @returns Drawing type
241
+ */
242
+ getDrawingType(drawing: DrawingElement | PreservedDrawing): DrawingType {
243
+ if (drawing instanceof Image) {
244
+ return 'image';
245
+ } else if (drawing instanceof Shape) {
246
+ return 'shape';
247
+ } else if (drawing instanceof TextBox) {
248
+ return 'textbox';
249
+ } else {
250
+ return 'preserved';
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Type guard for PreservedDrawing
256
+ * @param drawing Drawing to check
257
+ * @returns True if PreservedDrawing
258
+ */
259
+ private isPreservedDrawing(drawing: any): drawing is PreservedDrawing {
260
+ return (
261
+ drawing &&
262
+ typeof drawing === 'object' &&
263
+ 'type' in drawing &&
264
+ 'xml' in drawing &&
265
+ 'relationshipIds' in drawing &&
266
+ (drawing.type === 'smartart' || drawing.type === 'chart' || drawing.type === 'wordart')
267
+ );
268
+ }
269
+
270
+ /**
271
+ * Generates a unique ID for a drawing
272
+ * @private
273
+ * @returns Unique ID string
274
+ */
275
+ private generateId(): string {
276
+ const id = `drawing_${this.nextId}`;
277
+ this.nextId++;
278
+ return id;
279
+ }
280
+
281
+ /**
282
+ * Assigns sequential docPr IDs to all drawings
283
+ * Call this before generating the document to ensure unique IDs
284
+ */
285
+ assignIds(): void {
286
+ let docPrId = 1;
287
+ for (const drawing of this.drawings.values()) {
288
+ if (drawing instanceof Image) {
289
+ drawing.setDocPrId(docPrId++);
290
+ } else if (drawing instanceof Shape) {
291
+ drawing.setDocPrId(docPrId++);
292
+ } else if (drawing instanceof TextBox) {
293
+ drawing.setDocPrId(docPrId++);
294
+ }
295
+ // PreservedDrawings don't need docPrId assignment (already in XML)
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Gets statistics about the drawings
301
+ * Performance: O(1) using indexed Set sizes
302
+ * @returns Statistics object
303
+ */
304
+ getStats(): {
305
+ total: number;
306
+ images: number;
307
+ shapes: number;
308
+ textboxes: number;
309
+ preserved: number;
310
+ } {
311
+ return {
312
+ total: this.drawings.size,
313
+ images: this.imageIds.size,
314
+ shapes: this.shapeIds.size,
315
+ textboxes: this.textboxIds.size,
316
+ preserved: this.preservedIds.size,
317
+ };
318
+ }
319
+ }