docxmlater 10.1.4 → 10.1.6

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 (372) 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 +51 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +486 -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 +1 -0
  146. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  147. package/dist/formatting/NumberingManager.js +27 -9
  148. package/dist/formatting/NumberingManager.js.map +1 -1
  149. package/dist/formatting/Style.d.ts +11 -11
  150. package/dist/formatting/Style.d.ts.map +1 -1
  151. package/dist/formatting/Style.js +219 -247
  152. package/dist/formatting/Style.js.map +1 -1
  153. package/dist/formatting/StylesManager.d.ts +2 -2
  154. package/dist/formatting/StylesManager.d.ts.map +1 -1
  155. package/dist/formatting/StylesManager.js +96 -102
  156. package/dist/formatting/StylesManager.js.map +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts +1 -1
  158. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  159. package/dist/helpers/CleanupHelper.js +6 -6
  160. package/dist/helpers/CleanupHelper.js.map +1 -1
  161. package/dist/images/ImageOptimizer.js +7 -7
  162. package/dist/images/ImageOptimizer.js.map +1 -1
  163. package/dist/index.d.ts +9 -9
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js.map +1 -1
  166. package/dist/managers/DrawingManager.js.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  168. package/dist/tracking/DocumentTrackingContext.js +23 -7
  169. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  170. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  171. package/dist/tracking/TrackingContext.js.map +1 -1
  172. package/dist/types/compatibility-types.js.map +1 -1
  173. package/dist/types/formatting.js.map +1 -1
  174. package/dist/types/list-types.d.ts +6 -6
  175. package/dist/types/list-types.js.map +1 -1
  176. package/dist/types/settings-types.js.map +1 -1
  177. package/dist/types/styleConfig.d.ts +2 -2
  178. package/dist/types/styleConfig.js.map +1 -1
  179. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  180. package/dist/utils/ChangelogGenerator.js +97 -101
  181. package/dist/utils/ChangelogGenerator.js.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js +1 -1
  184. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  186. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  187. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  188. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  189. package/dist/utils/MoveOperationHelper.js +1 -1
  190. package/dist/utils/MoveOperationHelper.js.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  192. package/dist/utils/RevisionAwareProcessor.js +2 -4
  193. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  194. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  195. package/dist/utils/RevisionWalker.js +4 -12
  196. package/dist/utils/RevisionWalker.js.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  198. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  199. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  200. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  201. package/dist/utils/ShadingResolver.js +1 -1
  202. package/dist/utils/ShadingResolver.js.map +1 -1
  203. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  204. package/dist/utils/acceptRevisions.js +23 -12
  205. package/dist/utils/acceptRevisions.js.map +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  207. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  208. package/dist/utils/cnfStyleDecoder.js +40 -40
  209. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  210. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  211. package/dist/utils/corruptionDetection.js.map +1 -1
  212. package/dist/utils/dateFormatting.js.map +1 -1
  213. package/dist/utils/deepClone.js +1 -1
  214. package/dist/utils/deepClone.js.map +1 -1
  215. package/dist/utils/diagnostics.d.ts.map +1 -1
  216. package/dist/utils/diagnostics.js +1 -1
  217. package/dist/utils/diagnostics.js.map +1 -1
  218. package/dist/utils/errorHandling.js.map +1 -1
  219. package/dist/utils/formatting.d.ts.map +1 -1
  220. package/dist/utils/formatting.js +10 -2
  221. package/dist/utils/formatting.js.map +1 -1
  222. package/dist/utils/list-detection.d.ts +2 -2
  223. package/dist/utils/list-detection.d.ts.map +1 -1
  224. package/dist/utils/list-detection.js +21 -23
  225. package/dist/utils/list-detection.js.map +1 -1
  226. package/dist/utils/logger.d.ts.map +1 -1
  227. package/dist/utils/logger.js +12 -7
  228. package/dist/utils/logger.js.map +1 -1
  229. package/dist/utils/parsingHelpers.js.map +1 -1
  230. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  231. package/dist/utils/stripTrackedChanges.js +3 -3
  232. package/dist/utils/stripTrackedChanges.js.map +1 -1
  233. package/dist/utils/textDiff.d.ts +1 -1
  234. package/dist/utils/textDiff.js +8 -8
  235. package/dist/utils/textDiff.js.map +1 -1
  236. package/dist/utils/units.js.map +1 -1
  237. package/dist/utils/validation.d.ts.map +1 -1
  238. package/dist/utils/validation.js +24 -7
  239. package/dist/utils/validation.js.map +1 -1
  240. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  241. package/dist/utils/xmlSanitization.js +3 -3
  242. package/dist/utils/xmlSanitization.js.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  244. package/dist/validation/RevisionAutoFixer.js +5 -5
  245. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  246. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  247. package/dist/validation/RevisionValidator.js +7 -9
  248. package/dist/validation/RevisionValidator.js.map +1 -1
  249. package/dist/validation/ValidationRules.js +3 -3
  250. package/dist/validation/ValidationRules.js.map +1 -1
  251. package/dist/validation/index.js.map +1 -1
  252. package/dist/xml/XMLBuilder.d.ts +1 -1
  253. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  254. package/dist/xml/XMLBuilder.js +98 -100
  255. package/dist/xml/XMLBuilder.js.map +1 -1
  256. package/dist/xml/XMLParser.d.ts.map +1 -1
  257. package/dist/xml/XMLParser.js +61 -66
  258. package/dist/xml/XMLParser.js.map +1 -1
  259. package/dist/zip/ZipHandler.d.ts.map +1 -1
  260. package/dist/zip/ZipHandler.js.map +1 -1
  261. package/dist/zip/ZipReader.d.ts.map +1 -1
  262. package/dist/zip/ZipReader.js +1 -3
  263. package/dist/zip/ZipReader.js.map +1 -1
  264. package/dist/zip/ZipWriter.d.ts +1 -1
  265. package/dist/zip/ZipWriter.d.ts.map +1 -1
  266. package/dist/zip/ZipWriter.js +28 -36
  267. package/dist/zip/ZipWriter.js.map +1 -1
  268. package/dist/zip/types.js +1 -1
  269. package/dist/zip/types.js.map +1 -1
  270. package/package.json +92 -92
  271. package/src/__tests__/helper-methods.test.ts +512 -512
  272. package/src/constants/legacyCompatFlags.ts +138 -138
  273. package/src/constants/limits.ts +50 -50
  274. package/src/core/Document.ts +1010 -1145
  275. package/src/core/DocumentContent.ts +461 -467
  276. package/src/core/DocumentGenerator.ts +1133 -1104
  277. package/src/core/DocumentIdManager.ts +158 -158
  278. package/src/core/DocumentParser.ts +2347 -2716
  279. package/src/core/DocumentValidator.ts +363 -372
  280. package/src/core/Relationship.ts +367 -367
  281. package/src/core/RelationshipManager.ts +429 -428
  282. package/src/elements/AlternateContent.ts +42 -42
  283. package/src/elements/Bookmark.ts +212 -210
  284. package/src/elements/BookmarkManager.ts +247 -250
  285. package/src/elements/Comment.ts +356 -359
  286. package/src/elements/CommentManager.ts +499 -502
  287. package/src/elements/CommonTypes.ts +524 -549
  288. package/src/elements/CustomXml.ts +36 -36
  289. package/src/elements/Endnote.ts +221 -217
  290. package/src/elements/EndnoteManager.ts +246 -249
  291. package/src/elements/Field.ts +1292 -1233
  292. package/src/elements/FieldHelpers.ts +329 -333
  293. package/src/elements/FontManager.ts +336 -339
  294. package/src/elements/Footer.ts +269 -269
  295. package/src/elements/Footnote.ts +221 -217
  296. package/src/elements/FootnoteManager.ts +246 -249
  297. package/src/elements/Header.ts +269 -269
  298. package/src/elements/HeaderFooterManager.ts +219 -219
  299. package/src/elements/Hyperlink.ts +1288 -1193
  300. package/src/elements/Image.ts +1982 -1756
  301. package/src/elements/ImageManager.ts +437 -432
  302. package/src/elements/ImageRun.ts +59 -59
  303. package/src/elements/MathElement.ts +65 -65
  304. package/src/elements/Paragraph.ts +4347 -4287
  305. package/src/elements/PreservedElement.ts +53 -53
  306. package/src/elements/PropertyChangeTypes.ts +458 -442
  307. package/src/elements/RangeMarker.ts +382 -400
  308. package/src/elements/Revision.ts +1198 -1217
  309. package/src/elements/RevisionContent.ts +73 -73
  310. package/src/elements/RevisionManager.ts +1070 -1070
  311. package/src/elements/Run.ts +3103 -3073
  312. package/src/elements/Section.ts +1521 -1421
  313. package/src/elements/Shape.ts +884 -873
  314. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  315. package/src/elements/Table.ts +2468 -2524
  316. package/src/elements/TableCell.ts +1617 -1621
  317. package/src/elements/TableGridChange.ts +149 -151
  318. package/src/elements/TableOfContents.ts +701 -691
  319. package/src/elements/TableOfContentsElement.ts +89 -89
  320. package/src/elements/TableRow.ts +960 -929
  321. package/src/elements/TextBox.ts +766 -768
  322. package/src/formatting/AbstractNumbering.ts +580 -579
  323. package/src/formatting/NumberingInstance.ts +295 -299
  324. package/src/formatting/NumberingLevel.ts +981 -1040
  325. package/src/formatting/NumberingManager.ts +875 -827
  326. package/src/formatting/Style.ts +1785 -1879
  327. package/src/formatting/StylesManager.ts +1090 -1130
  328. package/src/helpers/CleanupHelper.ts +524 -524
  329. package/src/images/ImageOptimizer.ts +274 -274
  330. package/src/index.ts +559 -554
  331. package/src/managers/DrawingManager.ts +319 -319
  332. package/src/tracking/DocumentTrackingContext.ts +687 -674
  333. package/src/tracking/TrackingContext.ts +175 -173
  334. package/src/types/compatibility-types.ts +49 -49
  335. package/src/types/formatting.ts +210 -210
  336. package/src/types/list-types.ts +14 -14
  337. package/src/types/settings-types.ts +59 -59
  338. package/src/types/styleConfig.ts +189 -189
  339. package/src/utils/ChangelogGenerator.ts +1583 -1581
  340. package/src/utils/CompatibilityUpgrader.ts +235 -237
  341. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  342. package/src/utils/MoveOperationHelper.ts +233 -238
  343. package/src/utils/RevisionAwareProcessor.ts +518 -526
  344. package/src/utils/RevisionWalker.ts +427 -457
  345. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  346. package/src/utils/ShadingResolver.ts +105 -107
  347. package/src/utils/acceptRevisions.ts +723 -714
  348. package/src/utils/cnfStyleDecoder.ts +212 -217
  349. package/src/utils/corruptionDetection.ts +346 -345
  350. package/src/utils/dateFormatting.ts +20 -20
  351. package/src/utils/deepClone.ts +77 -78
  352. package/src/utils/diagnostics.ts +125 -129
  353. package/src/utils/errorHandling.ts +80 -80
  354. package/src/utils/formatting.ts +220 -213
  355. package/src/utils/list-detection.ts +32 -42
  356. package/src/utils/logger.ts +412 -404
  357. package/src/utils/parsingHelpers.ts +190 -190
  358. package/src/utils/stripTrackedChanges.ts +356 -353
  359. package/src/utils/textDiff.ts +100 -100
  360. package/src/utils/units.ts +421 -421
  361. package/src/utils/validation.ts +553 -542
  362. package/src/utils/xmlSanitization.ts +179 -182
  363. package/src/validation/RevisionAutoFixer.ts +541 -542
  364. package/src/validation/RevisionValidator.ts +470 -460
  365. package/src/validation/ValidationRules.ts +338 -338
  366. package/src/validation/index.ts +30 -30
  367. package/src/xml/XMLBuilder.ts +857 -871
  368. package/src/xml/XMLParser.ts +877 -919
  369. package/src/zip/ZipHandler.ts +629 -637
  370. package/src/zip/ZipReader.ts +295 -299
  371. package/src/zip/ZipWriter.ts +374 -390
  372. 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
+ }