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 @@
1
+ {"version":3,"file":"StylesManager.js","sourceRoot":"","sources":["../../../src/formatting/StylesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * StylesManager - Manages the collection of styles in a document\n * Handles style registration, retrieval, and styles.xml generation\n */\n\nimport { Paragraph } from '../elements/Paragraph.js';\nimport { XMLBuilder } from '../xml/XMLBuilder.js';\nimport { XMLParser } from '../xml/XMLParser.js';\nimport { Style, StyleType } from './Style.js';\n\n/**\n * Configuration for latent styles (w:latentStyles per ECMA-376 §17.7.4.6)\n * Controls which built-in styles are shown in the Word UI gallery\n */\nexport interface LatentStylesConfig {\n /** Default locked state for built-in styles */\n defaultLockedState?: boolean;\n /** Default UI priority for built-in styles */\n defaultUiPriority?: number;\n /** Default semi-hidden state */\n defaultSemiHidden?: boolean;\n /** Default unhide-when-used state */\n defaultUnhideWhenUsed?: boolean;\n /** Default quick format flag */\n defaultQFormat?: boolean;\n /** Total count of style definitions */\n count?: number;\n}\n\n/**\n * Exception to latent style defaults (w:lsdException per ECMA-376 §17.7.4.7)\n */\nexport interface LatentStyleException {\n /** Style name */\n name: string;\n /** Override: locked state */\n locked?: boolean;\n /** Override: UI priority */\n uiPriority?: number;\n /** Override: semi-hidden */\n semiHidden?: boolean;\n /** Override: unhide when used */\n unhideWhenUsed?: boolean;\n /** Override: quick format */\n qFormat?: boolean;\n}\n\n/**\n * Result of XML validation\n */\nexport interface ValidationResult {\n /** Whether the XML is valid */\n isValid: boolean;\n /** Validation errors if any */\n errors: string[];\n /** Validation warnings if any */\n warnings: string[];\n /** Number of styles found */\n styleCount: number;\n /** List of style IDs found */\n styleIds: string[];\n}\n\n/**\n * Manages document styles\n */\nexport class StylesManager {\n private styles = new Map<string, Style>();\n private includeBuiltInStyles: boolean;\n\n // Track if styles have been modified (for XML preservation)\n private _modified = false;\n\n // Track which specific styles have been modified (for selective merging)\n private _modifiedStyleIds = new Set<string>();\n\n // Latent styles configuration\n private latentStyles?: LatentStylesConfig;\n private latentStyleExceptions: LatentStyleException[] = [];\n\n /**\n * Registry of built-in style factory functions\n * Maps style ID to factory function for lazy loading\n */\n private static readonly BUILT_IN_STYLE_FACTORIES = new Map<string, () => Style>([\n ['Normal', () => Style.createNormalStyle()],\n ['Heading1', () => Style.createHeadingStyle(1)],\n ['Heading2', () => Style.createHeadingStyle(2)],\n ['Heading3', () => Style.createHeadingStyle(3)],\n ['Heading4', () => Style.createHeadingStyle(4)],\n ['Heading5', () => Style.createHeadingStyle(5)],\n ['Heading6', () => Style.createHeadingStyle(6)],\n ['Heading7', () => Style.createHeadingStyle(7)],\n ['Heading8', () => Style.createHeadingStyle(8)],\n ['Heading9', () => Style.createHeadingStyle(9)],\n ['Heading1Char', () => Style.createHeadingCharStyle(1)],\n ['Heading2Char', () => Style.createHeadingCharStyle(2)],\n ['Heading3Char', () => Style.createHeadingCharStyle(3)],\n ['Heading4Char', () => Style.createHeadingCharStyle(4)],\n ['Heading5Char', () => Style.createHeadingCharStyle(5)],\n ['Heading6Char', () => Style.createHeadingCharStyle(6)],\n ['Heading7Char', () => Style.createHeadingCharStyle(7)],\n ['Heading8Char', () => Style.createHeadingCharStyle(8)],\n ['Heading9Char', () => Style.createHeadingCharStyle(9)],\n ['Title', () => Style.createTitleStyle()],\n ['Subtitle', () => Style.createSubtitleStyle()],\n ['ListParagraph', () => Style.createListParagraphStyle()],\n ['TOCHeading', () => Style.createTOCHeadingStyle()],\n ['TableNormal', () => Style.createTableNormalStyle()],\n ['TableGrid', () => Style.createTableGridStyle()],\n ]);\n\n /**\n * Creates a new StylesManager\n * @param includeBuiltInStyles - Whether to include built-in styles (default: true)\n */\n constructor(includeBuiltInStyles = true) {\n this.includeBuiltInStyles = includeBuiltInStyles;\n\n // Always load Normal style if built-in styles are enabled\n // Normal is required and referenced by most other styles\n if (includeBuiltInStyles) {\n this.ensureStyleLoaded('Normal');\n }\n }\n\n /**\n * Ensures a built-in style is loaded (lazy loading)\n * @param styleId - Style ID to load\n */\n private ensureStyleLoaded(styleId: string): void {\n // Already loaded?\n if (this.styles.has(styleId)) {\n return;\n }\n\n // Built-in styles disabled?\n if (!this.includeBuiltInStyles) {\n return;\n }\n\n // Is this a built-in style?\n const factory = StylesManager.BUILT_IN_STYLE_FACTORIES.get(styleId);\n if (factory) {\n this.styles.set(styleId, factory());\n }\n }\n\n /**\n * Adds a style to the collection\n * @param style - Style to add\n * @returns This manager for chaining\n */\n addStyle(style: Style): this {\n const existing = this.styles.get(style.getStyleId());\n if (existing) {\n // Preserve isDefault flag if replacing an existing default style\n if (existing.getIsDefault() && !style.getIsDefault()) {\n style.setIsDefault(true);\n }\n // Preserve structural properties from existing style if not explicitly set on new\n const newProps = style.getProperties();\n const existingProps = existing.getProperties();\n if (newProps.basedOn === undefined && existingProps.basedOn !== undefined) {\n style.setBasedOn(existingProps.basedOn);\n }\n if (newProps.next === undefined && existingProps.next !== undefined) {\n style.setNext(existingProps.next);\n }\n if (newProps.link === undefined && existingProps.link !== undefined) {\n style.setLink(existingProps.link);\n }\n if (newProps.uiPriority === undefined && existingProps.uiPriority !== undefined) {\n style.setUiPriority(existingProps.uiPriority);\n }\n }\n this.styles.set(style.getStyleId(), style);\n this._modifiedStyleIds.add(style.getStyleId());\n this._modified = true;\n return this;\n }\n\n /**\n * Gets a style by ID\n * Lazy-loads built-in styles on first access\n * @param styleId - Style ID to retrieve\n * @returns The style, or undefined if not found\n */\n getStyle(styleId: string): Style | undefined {\n // Ensure built-in style is loaded if applicable\n this.ensureStyleLoaded(styleId);\n return this.styles.get(styleId);\n }\n\n /**\n * Clones an existing style with a new ID and optional name\n *\n * Deep-copies the source style (including all run, paragraph, and table\n * formatting) and registers the clone with the new ID. If `newName` is\n * not provided, the clone's name is set to the new ID.\n *\n * @param sourceId - ID of the style to clone\n * @param newId - ID for the cloned style (must be unique)\n * @param newName - Display name for the clone (defaults to newId)\n * @returns The cloned Style, or undefined if source not found\n *\n * @example\n * ```typescript\n * // Create a variant of Heading1\n * const variant = stylesManager.cloneStyle('Heading1', 'Heading1Blue', 'Blue Heading 1');\n * variant?.setRunFormatting({ ...variant.getRunFormatting(), color: '0000FF' });\n *\n * // Clone a custom style for a different section\n * stylesManager.cloneStyle('CustomNote', 'CustomNoteAlt');\n * ```\n */\n cloneStyle(sourceId: string, newId: string, newName?: string): Style | undefined {\n const source = this.getStyle(sourceId);\n if (!source) return undefined;\n\n const props = source.getProperties();\n props.styleId = newId;\n props.name = newName ?? newId;\n props.isDefault = false; // Clones should never be default\n\n const cloned = new Style(props);\n this.addStyle(cloned);\n return cloned;\n }\n\n /**\n * Checks if a style exists or can be loaded\n * @param styleId - Style ID to check\n * @returns True if the style exists or is a built-in style\n */\n hasStyle(styleId: string): boolean {\n // Check if already loaded\n if (this.styles.has(styleId)) {\n return true;\n }\n\n // Check if it's a built-in style that can be loaded\n return this.includeBuiltInStyles && StylesManager.BUILT_IN_STYLE_FACTORIES.has(styleId);\n }\n\n /**\n * Removes a style from the collection\n * @param styleId - Style ID to remove\n * @returns True if the style was removed\n */\n removeStyle(styleId: string): boolean {\n return this.styles.delete(styleId);\n }\n\n /**\n * Gets all styles\n * @returns Array of all styles\n */\n getAllStyles(): Style[] {\n return Array.from(this.styles.values());\n }\n\n /**\n * Checks if styles have been modified since loading\n * Used for XML preservation optimization\n * @returns True if styles were added or modified\n */\n isModified(): boolean {\n return this._modified;\n }\n\n /**\n * Resets the modified flag\n * Called after parsing to indicate that loaded styles don't count as modifications\n */\n resetModified(): void {\n this._modified = false;\n this._modifiedStyleIds.clear();\n }\n\n /**\n * Gets the IDs of styles that have been modified since loading\n * Used for selective merging with original styles.xml\n * @returns Set of modified style IDs\n */\n getModifiedStyleIds(): Set<string> {\n return new Set(this._modifiedStyleIds);\n }\n\n /**\n * Gets styles by type\n * @param type - Style type to filter by\n * @returns Array of styles matching the type\n */\n getStylesByType(type: StyleType): Style[] {\n return this.getAllStyles().filter((style) => style.getType() === type);\n }\n\n /**\n * Gets quick styles (styles that appear in the style gallery)\n * A style appears in the gallery when qFormat=true AND semiHidden=false\n * @returns Array of quick styles\n */\n getQuickStyles(): Style[] {\n return this.getAllStyles().filter((style) => {\n const props = style.getProperties();\n const isQuick = props.qFormat === true || (!props.customStyle && props.qFormat !== false);\n const isVisible = !props.semiHidden;\n return isQuick && isVisible;\n });\n }\n\n /**\n * Gets visible styles (not semi-hidden)\n * @returns Array of visible styles\n */\n getVisibleStyles(): Style[] {\n return this.getAllStyles().filter((style) => {\n const props = style.getProperties();\n return !props.semiHidden;\n });\n }\n\n /**\n * Gets styles sorted by UI priority\n * Lower priority values appear first (higher importance)\n * Styles without priority appear last\n * @returns Array of styles sorted by priority\n */\n getStylesByPriority(): Style[] {\n return this.getAllStyles().sort((a, b) => {\n const propsA = a.getProperties();\n const propsB = b.getProperties();\n\n const priorityA = propsA.uiPriority ?? 999;\n const priorityB = propsB.uiPriority ?? 999;\n\n return priorityA - priorityB;\n });\n }\n\n /**\n * Gets the linked style for a given style\n * @param styleId - Style ID to find the linked style for\n * @returns The linked style, or undefined if not found\n */\n getLinkedStyle(styleId: string): Style | undefined {\n const style = this.getStyle(styleId);\n if (!style) {\n return undefined;\n }\n\n const props = style.getProperties();\n if (!props.link) {\n return undefined;\n }\n\n return this.getStyle(props.link);\n }\n\n /**\n * Gets all table styles (Phase 5.1)\n * @returns Array of table styles\n */\n getTableStyles(): Style[] {\n return this.getAllStyles().filter((style) => style.getType() === 'table');\n }\n\n /**\n * Creates and adds a table style (Phase 5.1)\n * @param styleId - Style ID\n * @param name - Style name\n * @param basedOn - Base style ID (optional)\n * @returns The created table style\n */\n createTableStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'table',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Gets the number of styles\n * @returns Number of styles\n */\n getStyleCount(): number {\n return this.styles.size;\n }\n\n /**\n * Clears all styles\n * @returns This manager for chaining\n */\n clear(): this {\n this.styles.clear();\n return this;\n }\n\n /**\n * Gets all available built-in style IDs\n * @returns Array of built-in style IDs\n */\n static getBuiltInStyleIds(): string[] {\n return Array.from(StylesManager.BUILT_IN_STYLE_FACTORIES.keys());\n }\n\n /**\n * Checks if a style ID is a built-in style\n * @param styleId - Style ID to check\n * @returns True if the style is a built-in style\n */\n static isBuiltInStyle(styleId: string): boolean {\n return StylesManager.BUILT_IN_STYLE_FACTORIES.has(styleId);\n }\n\n /**\n * Gets statistics about loaded vs available styles\n * @returns Object with style statistics\n */\n getStats(): {\n loadedStyles: number;\n availableBuiltInStyles: number;\n customStyles: number;\n } {\n const loadedStyles = this.styles.size;\n const customStyles = this.getAllStyles().filter((s) => s.getProperties().customStyle).length;\n\n return {\n loadedStyles,\n availableBuiltInStyles: this.includeBuiltInStyles\n ? StylesManager.BUILT_IN_STYLE_FACTORIES.size\n : 0,\n customStyles,\n };\n }\n\n /**\n * Creates a new paragraph style\n * @param styleId - Unique style ID\n * @param name - Display name\n * @param basedOn - Parent style ID (optional)\n * @returns The created style\n */\n createParagraphStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'paragraph',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Creates a new character style\n * @param styleId - Unique style ID\n * @param name - Display name\n * @param basedOn - Parent style ID (optional)\n * @returns The created style\n */\n createCharacterStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'character',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Sets the latent styles configuration\n * @param config - Latent styles configuration\n */\n setLatentStyles(config: LatentStylesConfig): this {\n this.latentStyles = config;\n this._modified = true;\n return this;\n }\n\n /**\n * Gets the latent styles configuration\n */\n getLatentStyles(): LatentStylesConfig | undefined {\n return this.latentStyles;\n }\n\n /**\n * Adds a latent style exception\n * @param exception - The exception to add\n */\n addLatentStyleException(exception: LatentStyleException): this {\n // Replace existing exception for same name\n const idx = this.latentStyleExceptions.findIndex((e) => e.name === exception.name);\n if (idx >= 0) {\n this.latentStyleExceptions[idx] = exception;\n } else {\n this.latentStyleExceptions.push(exception);\n }\n this._modified = true;\n return this;\n }\n\n /**\n * Gets all latent style exceptions\n */\n getLatentStyleExceptions(): LatentStyleException[] {\n return [...this.latentStyleExceptions];\n }\n\n /**\n * Generates the complete styles.xml file\n * @returns XML string for word/styles.xml\n */\n generateStylesXml(): string {\n const builder = new XMLBuilder();\n\n // Create styles element with namespace\n const stylesChildren = [];\n\n // Add document defaults\n stylesChildren.push(this.generateDocDefaults());\n\n // Add latent styles if configured (per ECMA-376 CT_Styles order: docDefaults, latentStyles, style*)\n if (this.latentStyles) {\n stylesChildren.push(this.generateLatentStyles());\n }\n\n // Add all styles\n for (const style of this.getAllStyles()) {\n stylesChildren.push(style.toXML());\n }\n\n builder.element(\n 'w:styles',\n {\n 'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n },\n stylesChildren\n );\n\n return builder.build(true);\n }\n\n /**\n * Generates document defaults\n */\n private generateDocDefaults() {\n const rPrDefaultChildren = [\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': 'Calibri',\n 'w:hAnsi': 'Calibri',\n 'w:eastAsia': 'Calibri',\n 'w:cs': 'Calibri',\n }),\n XMLBuilder.wSelf('sz', { 'w:val': '22' }), // 11pt\n XMLBuilder.wSelf('szCs', { 'w:val': '22' }),\n XMLBuilder.wSelf('lang', {\n 'w:val': 'en-US',\n 'w:eastAsia': 'en-US',\n 'w:bidi': 'ar-SA',\n }),\n ];\n\n const pPrDefaultChildren = [\n XMLBuilder.wSelf('spacing', {\n 'w:after': '200',\n 'w:line': '276',\n 'w:lineRule': 'auto',\n }),\n ];\n\n return XMLBuilder.w('docDefaults', undefined, [\n XMLBuilder.w('rPrDefault', undefined, [XMLBuilder.w('rPr', undefined, rPrDefaultChildren)]),\n XMLBuilder.w('pPrDefault', undefined, [XMLBuilder.w('pPr', undefined, pPrDefaultChildren)]),\n ]);\n }\n\n /**\n * Generates the latent styles XML element\n */\n private generateLatentStyles() {\n if (!this.latentStyles) return XMLBuilder.w('latentStyles', {}, []);\n\n const attrs: Record<string, string> = {};\n if (this.latentStyles.defaultLockedState !== undefined) {\n attrs['w:defLockedState'] = this.latentStyles.defaultLockedState ? '1' : '0';\n }\n if (this.latentStyles.defaultUiPriority !== undefined) {\n attrs['w:defUIPriority'] = this.latentStyles.defaultUiPriority.toString();\n }\n if (this.latentStyles.defaultSemiHidden !== undefined) {\n attrs['w:defSemiHidden'] = this.latentStyles.defaultSemiHidden ? '1' : '0';\n }\n if (this.latentStyles.defaultUnhideWhenUsed !== undefined) {\n attrs['w:defUnhideWhenUsed'] = this.latentStyles.defaultUnhideWhenUsed ? '1' : '0';\n }\n if (this.latentStyles.defaultQFormat !== undefined) {\n attrs['w:defQFormat'] = this.latentStyles.defaultQFormat ? '1' : '0';\n }\n if (this.latentStyles.count !== undefined) {\n attrs['w:count'] = this.latentStyles.count.toString();\n }\n\n const children = this.latentStyleExceptions.map((exc) => {\n const excAttrs: Record<string, string> = { 'w:name': exc.name };\n if (exc.locked !== undefined) excAttrs['w:locked'] = exc.locked ? '1' : '0';\n if (exc.uiPriority !== undefined) excAttrs['w:uiPriority'] = exc.uiPriority.toString();\n if (exc.semiHidden !== undefined) excAttrs['w:semiHidden'] = exc.semiHidden ? '1' : '0';\n if (exc.unhideWhenUsed !== undefined)\n excAttrs['w:unhideWhenUsed'] = exc.unhideWhenUsed ? '1' : '0';\n if (exc.qFormat !== undefined) excAttrs['w:qFormat'] = exc.qFormat ? '1' : '0';\n return XMLBuilder.wSelf('lsdException', excAttrs);\n });\n\n return XMLBuilder.w('latentStyles', attrs, children);\n }\n\n /**\n * Creates a new StylesManager with built-in styles\n * @returns New StylesManager instance\n */\n static create(): StylesManager {\n return new StylesManager(true);\n }\n\n /**\n * Creates an empty StylesManager (no built-in styles)\n * @returns New empty StylesManager instance\n */\n static createEmpty(): StylesManager {\n return new StylesManager(false);\n }\n\n /**\n * Validates styles.xml content for structure and correctness\n *\n * This performs string-based validation to avoid XML parsing corruption.\n * It checks for:\n * - Well-formed XML structure\n * - Required w:styles root element\n * - Valid style definitions\n * - No duplicate style IDs\n * - Required attributes\n *\n * @param xml - The raw styles.xml content to validate\n * @returns ValidationResult with details about validity\n */\n static validate(xml: string): ValidationResult {\n const result: ValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n styleCount: 0,\n styleIds: [],\n };\n\n // Check for empty or null\n if (!xml || xml.trim().length === 0) {\n result.isValid = false;\n result.errors.push('Styles XML is empty or null');\n return result;\n }\n\n // Check for common corruption patterns FIRST (before parsing)\n // This catches double-encoding issues that would break the parser\n if (xml.includes('&lt;w:') || xml.includes('&gt;')) {\n result.isValid = false;\n result.errors.push('XML contains escaped tags - possible double-encoding corruption');\n return result;\n }\n\n // Skip complex XML structure validation - focus on w:styles specific validation\n // Checking balanced tags with regex is unreliable and can give false positives\n\n // Use XMLParser to extract root element\n const stylesContent = XMLParser.extractBetweenTags(xml, '<w:styles', '</w:styles>');\n if (!stylesContent) {\n result.isValid = false;\n result.errors.push('Missing required <w:styles> root element');\n return result;\n }\n\n // Check for namespace declaration\n if (!xml.includes('xmlns:w=')) {\n result.warnings.push('Missing WordprocessingML namespace declaration');\n }\n\n // Use XMLParser to extract all style elements\n const styleElements = XMLParser.extractElements(stylesContent, 'w:style');\n result.styleCount = styleElements.length;\n\n // Check if any styles found\n if (styleElements.length === 0) {\n result.warnings.push('No styles found in document');\n return result;\n }\n\n // Check for styles without attributes (invalid)\n const styleWithoutAttrs = styleElements.filter((el) => {\n // Check if element has any attributes\n const openTagEnd = el.indexOf('>');\n const openTag = el.substring(0, openTagEnd);\n return !openTag.includes('w:type') || !openTag.includes('w:styleId');\n });\n\n if (styleWithoutAttrs.length > 0) {\n result.isValid = false;\n result.errors.push('Style found without any attributes - w:type and w:styleId are required');\n }\n\n // Process each style element\n const foundStyleIds = new Set<string>();\n\n for (const styleElement of styleElements) {\n // Extract styleId using XMLParser\n const styleId = XMLParser.extractAttribute(styleElement, 'w:styleId');\n if (styleId) {\n // Check for duplicates\n if (foundStyleIds.has(styleId)) {\n result.isValid = false;\n result.errors.push(`Duplicate style ID found: \"${styleId}\"`);\n } else {\n foundStyleIds.add(styleId);\n result.styleIds.push(styleId);\n }\n } else {\n result.isValid = false;\n result.errors.push('Style found without required w:styleId attribute');\n }\n\n // Extract and validate type using XMLParser\n const type = XMLParser.extractAttribute(styleElement, 'w:type');\n if (type) {\n if (!['paragraph', 'character', 'table', 'numbering'].includes(type)) {\n result.warnings.push(`Invalid style type: \"${type}\"`);\n }\n } else {\n result.isValid = false;\n result.errors.push('Style found without required w:type attribute');\n }\n\n // Check for circular references - extract basedOn value\n const basedOnElement = XMLParser.extractElements(styleElement, 'w:basedOn')[0];\n if (basedOnElement && styleId) {\n const basedOn = XMLParser.extractAttribute(basedOnElement, 'w:val');\n if (basedOn && styleId === basedOn) {\n result.isValid = false;\n result.errors.push(`Circular reference detected: style \"${styleId}\" based on itself`);\n }\n }\n }\n\n // Check for required Normal style\n if (!foundStyleIds.has('Normal')) {\n result.warnings.push('Missing \"Normal\" style - document may not render correctly');\n }\n\n // Check for BOM or invalid characters\n if (xml.charCodeAt(0) === 0xfeff) {\n result.warnings.push('XML contains BOM (Byte Order Mark) - may cause parsing issues');\n }\n\n // Summary\n if (result.styleCount === 0) {\n result.warnings.push('No styles found in document');\n }\n\n return result;\n }\n\n /**\n * Searches styles by name (case-insensitive)\n * @param searchTerm - Text to search for in style names\n * @returns Array of styles whose names contain the search term\n * @example\n * ```typescript\n * const headings = stylesManager.searchByName('heading');\n * console.log(`Found ${headings.length} heading styles`);\n * ```\n */\n searchByName(searchTerm: string): Style[] {\n const term = searchTerm.toLowerCase();\n return this.getAllStyles().filter((style) => style.getName().toLowerCase().includes(term));\n }\n\n /**\n * Finds styles using a specific font\n * @param fontName - Font family name to search for\n * @returns Array of styles that use the specified font\n * @example\n * ```typescript\n * const arialStyles = stylesManager.findByFont('Arial');\n * console.log(`Found ${arialStyles.length} styles using Arial font`);\n * ```\n */\n findByFont(fontName: string): Style[] {\n return this.getAllStyles().filter((style) => {\n const runFormatting = style.getRunFormatting();\n return runFormatting?.font === fontName;\n });\n }\n\n /**\n * Finds styles with specific properties using a predicate function\n * @param predicate - Filter function that returns true for styles to include\n * @returns Array of styles matching the predicate\n * @example\n * ```typescript\n * // Find all paragraph styles\n * const paraStyles = stylesManager.findStyles(s => s.getType() === 'paragraph');\n *\n * // Find styles with custom formatting\n * const customStyles = stylesManager.findStyles(s => s.getProperties().customStyle);\n *\n * // Find styles with specific formatting\n * const boldStyles = stylesManager.findStyles(s => s.getRunFormatting()?.bold);\n * ```\n */\n findStyles(predicate: (style: Style) => boolean): Style[] {\n return this.getAllStyles().filter(predicate);\n }\n\n /**\n * Finds unused styles (not referenced by any paragraphs)\n * @param paragraphs - All paragraphs in the document to check against\n * @returns Array of unused style IDs\n * @example\n * ```typescript\n * const doc = Document.create();\n * const unused = stylesManager.findUnusedStyles(doc.getAllParagraphs());\n * console.log(`Found ${unused.length} unused styles: ${unused.join(', ')}`);\n * ```\n */\n findUnusedStyles(paragraphs: Paragraph[]): string[] {\n const usedStyles = new Set<string>();\n\n // Collect all style IDs used by paragraphs\n for (const para of paragraphs) {\n const styleId = para.getStyle();\n if (styleId) {\n usedStyles.add(styleId);\n }\n }\n\n // Get all style IDs and filter out used ones\n const allStyleIds = this.getAllStyles().map((style) => style.getStyleId());\n return allStyleIds.filter((styleId) => !usedStyles.has(styleId));\n }\n\n /**\n * Removes all unused styles from the document\n * @param paragraphs - All paragraphs in the document to check against\n * @returns Number of styles removed\n * @example\n * ```typescript\n * const doc = Document.create();\n * const removedCount = stylesManager.cleanupUnusedStyles(doc.getAllParagraphs());\n * console.log(`Cleaned up ${removedCount} unused styles`);\n * ```\n */\n cleanupUnusedStyles(paragraphs: Paragraph[]): number {\n const unused = this.findUnusedStyles(paragraphs);\n let count = 0;\n\n for (const styleId of unused) {\n // Don't remove built-in styles\n if (!StylesManager.isBuiltInStyle(styleId)) {\n if (this.removeStyle(styleId)) {\n count++;\n }\n }\n }\n\n return count;\n }\n\n /**\n * Validates all style references for broken or circular dependencies\n * @returns Validation result with broken references and circular dependencies\n * @example\n * ```typescript\n * const validation = stylesManager.validateStyleReferences();\n * if (!validation.valid) {\n * console.log('Broken references:', validation.brokenReferences);\n * console.log('Circular references:', validation.circularReferences);\n * }\n * ```\n */\n validateStyleReferences(): {\n valid: boolean;\n brokenReferences: { styleId: string; basedOn: string }[];\n circularReferences: string[][];\n } {\n const broken: { styleId: string; basedOn: string }[] = [];\n const circular: string[][] = [];\n const checkedForCycles = new Set<string>();\n\n for (const style of this.getAllStyles()) {\n const props = style.getProperties();\n\n // Check basedOn references exist\n if (props.basedOn && !this.hasStyle(props.basedOn)) {\n broken.push({ styleId: props.styleId, basedOn: props.basedOn });\n }\n\n // Check for circular references (only if not already checked as part of another cycle)\n if (!checkedForCycles.has(props.styleId)) {\n const result = this.hasCircularReference(props.styleId);\n if (result.hasCircularRef && result.cyclePath) {\n circular.push(result.cyclePath);\n // Mark all styles in this cycle as checked\n result.cyclePath.forEach((id) => checkedForCycles.add(id));\n }\n }\n }\n\n return {\n valid: broken.length === 0 && circular.length === 0,\n brokenReferences: broken,\n circularReferences: circular,\n };\n }\n\n /**\n * Gets the complete inheritance chain for a style\n * @param styleId - Style ID to analyze\n * @returns Array of styles from base to derived (base style first)\n * @throws Error if style doesn't exist or circular reference detected\n * @example\n * ```typescript\n * const chain = stylesManager.getInheritanceChain('Heading1');\n * console.log('Inheritance chain:', chain.map(s => s.getName()));\n * // Output: ['Normal', 'Heading1'] (Normal is base, Heading1 inherits from it)\n * ```\n */\n getInheritanceChain(styleId: string): Style[] {\n const chain: Style[] = [];\n const visited = new Set<string>(); // Track visited styles to detect cycles\n let current = this.getStyle(styleId);\n\n if (!current) {\n throw new Error(`Style '${styleId}' not found`);\n }\n\n while (current) {\n const currentId = current.getStyleId();\n\n // Detect circular reference\n if (visited.has(currentId)) {\n const cycle = [...chain.map((s) => s.getStyleId()), currentId];\n throw new Error(\n `Circular style reference detected: ${cycle.join(' -> ')}. ` +\n `Style '${currentId}' references itself through inheritance chain.`\n );\n }\n\n visited.add(currentId);\n chain.unshift(current); // Add to beginning to maintain base-to-derived order\n const props = current.getProperties();\n current = props.basedOn ? this.getStyle(props.basedOn) : undefined;\n }\n\n return chain;\n }\n\n /**\n * Checks if a style has circular references in its inheritance chain\n * @param styleId - Style ID to check\n * @returns Object with hasCircularRef flag and the cycle path if found\n * @example\n * ```typescript\n * const result = stylesManager.hasCircularReference('MyStyle');\n * if (result.hasCircularRef) {\n * console.log('Circular reference found:', result.cyclePath?.join(' -> '));\n * }\n * ```\n */\n hasCircularReference(styleId: string): {\n hasCircularRef: boolean;\n cyclePath?: string[];\n } {\n const visited = new Set<string>();\n const path: string[] = [];\n let current = this.getStyle(styleId);\n\n while (current) {\n const currentId = current.getStyleId();\n\n if (visited.has(currentId)) {\n path.push(currentId);\n return { hasCircularRef: true, cyclePath: path };\n }\n\n visited.add(currentId);\n path.push(currentId);\n const props = current.getProperties();\n current = props.basedOn ? this.getStyle(props.basedOn) : undefined;\n }\n\n return { hasCircularRef: false };\n }\n\n /**\n * Gets all styles that inherit from a base style\n * @param baseStyleId - Base style ID to find children for\n * @returns Array of styles that inherit from the base style\n * @example\n * ```typescript\n * const children = stylesManager.getDerivedStyles('Normal');\n * console.log(`Styles based on Normal: ${children.map(s => s.getName()).join(', ')}`);\n * ```\n */\n getDerivedStyles(baseStyleId: string): Style[] {\n return this.getAllStyles().filter((style) => style.getProperties().basedOn === baseStyleId);\n }\n\n /**\n * Exports a single style as JSON string\n * @param styleId - Style ID to export\n * @returns JSON representation of the style\n * @throws Error if style doesn't exist\n * @example\n * ```typescript\n * const json = stylesManager.exportStyle('Heading1');\n * console.log('Style JSON:', json);\n *\n * // Save to file\n * await fs.writeFile('heading1-style.json', json);\n * ```\n */\n exportStyle(styleId: string): string {\n const style = this.getStyle(styleId);\n if (!style) {\n throw new Error(`Style '${styleId}' not found`);\n }\n return JSON.stringify(style.getProperties(), null, 2);\n }\n\n /**\n * Imports a style from JSON string\n * @param json - JSON string containing style properties\n * @returns The imported style\n * @throws Error if JSON is invalid or style creation fails\n * @example\n * ```typescript\n * const json = await fs.readFile('custom-style.json', 'utf8');\n * const style = stylesManager.importStyle(json);\n * console.log(`Imported style: ${style.getName()}`);\n * ```\n */\n importStyle(json: string): Style {\n try {\n const props = JSON.parse(json);\n const style = Style.create(props);\n this.addStyle(style);\n return style;\n } catch (error: unknown) {\n throw new Error(\n `Failed to import style: ${error instanceof Error ? error.message : 'Invalid JSON'}`\n );\n }\n }\n\n /**\n * Exports all styles as JSON string\n * @returns JSON array of all style properties\n * @example\n * ```typescript\n * const allStylesJson = stylesManager.exportAllStyles();\n * console.log('All styles exported');\n *\n * // Save to file\n * await fs.writeFile('all-styles.json', allStylesJson);\n * ```\n */\n exportAllStyles(): string {\n const styles = this.getAllStyles().map((style) => style.getProperties());\n return JSON.stringify(styles, null, 2);\n }\n\n /**\n * Imports multiple styles from JSON array string\n * @param json - JSON string containing array of style properties\n * @returns Array of imported styles\n * @throws Error if JSON is invalid or style creation fails\n * @example\n * ```typescript\n * const json = await fs.readFile('styles-collection.json', 'utf8');\n * const styles = stylesManager.importStyles(json);\n * console.log(`Imported ${styles.length} styles`);\n * ```\n */\n importStyles(json: string): Style[] {\n try {\n const propsArray = JSON.parse(json);\n if (!Array.isArray(propsArray)) {\n throw new Error('JSON must contain an array of style properties');\n }\n\n const styles: Style[] = [];\n for (const props of propsArray) {\n const style = Style.create(props);\n this.addStyle(style);\n styles.push(style);\n }\n\n return styles;\n } catch (error: unknown) {\n throw new Error(\n `Failed to import styles: ${error instanceof Error ? error.message : 'Invalid JSON'}`\n );\n }\n }\n}\n"]}
@@ -0,0 +1,350 @@
1
+ import { Field, ComplexField } from '../elements/Field.js';
2
+ import { Hyperlink } from '../elements/Hyperlink.js';
3
+ import { Paragraph } from '../elements/Paragraph.js';
4
+ import { Table } from '../elements/Table.js';
5
+ import { StructuredDocumentTag } from '../elements/StructuredDocumentTag.js';
6
+ export class CleanupHelper {
7
+ doc;
8
+ constructor(doc) {
9
+ this.doc = doc;
10
+ }
11
+ all() {
12
+ return this.run({
13
+ unlockSDTs: true,
14
+ removeSDTs: true,
15
+ clearPreserveFlags: true,
16
+ defragmentHyperlinks: true,
17
+ resetHyperlinkFormatting: true,
18
+ cleanupNumbering: true,
19
+ cleanupStyles: true,
20
+ cleanupRelationships: true,
21
+ removeCustomXML: true,
22
+ unlockFields: true,
23
+ unlockFrames: true,
24
+ sanitizeTables: true,
25
+ formatAllHyperlinks: true,
26
+ });
27
+ }
28
+ run(options) {
29
+ const report = {
30
+ sdtsUnlocked: 0,
31
+ sdtsRemoved: 0,
32
+ preserveFlagsCleared: 0,
33
+ hyperlinksDefragmented: 0,
34
+ numberingRemoved: 0,
35
+ stylesRemoved: 0,
36
+ relationshipsRemoved: 0,
37
+ customXMLRemoved: 0,
38
+ fieldsUnlocked: 0,
39
+ framesUnlocked: 0,
40
+ tablesProcessed: 0,
41
+ internalHyperlinksFormatted: 0,
42
+ allHyperlinksFormatted: 0,
43
+ warnings: [],
44
+ };
45
+ if (options.unlockSDTs) {
46
+ report.sdtsUnlocked = this.unlockSDTs();
47
+ }
48
+ if (options.removeSDTs) {
49
+ report.sdtsRemoved = this.removeSDTs();
50
+ }
51
+ if (options.clearPreserveFlags) {
52
+ report.preserveFlagsCleared = this.clearPreserveFlags();
53
+ }
54
+ if (options.defragmentHyperlinks) {
55
+ report.hyperlinksDefragmented = this.defragmentHyperlinks(options.resetHyperlinkFormatting ?? false);
56
+ }
57
+ if (options.cleanupNumbering) {
58
+ report.numberingRemoved = this.cleanupNumbering();
59
+ }
60
+ if (options.cleanupStyles) {
61
+ report.stylesRemoved = this.cleanupStyles();
62
+ }
63
+ if (options.cleanupRelationships) {
64
+ report.relationshipsRemoved = this.cleanupRelationships();
65
+ }
66
+ if (options.removeCustomXML) {
67
+ report.customXMLRemoved = this.removeCustomXML();
68
+ }
69
+ if (options.unlockFields) {
70
+ report.fieldsUnlocked = this.unlockFields();
71
+ }
72
+ if (options.unlockFrames) {
73
+ report.framesUnlocked = this.unlockFrames();
74
+ }
75
+ if (options.sanitizeTables) {
76
+ report.tablesProcessed = this.sanitizeTables();
77
+ }
78
+ if (options.formatInternalHyperlinks) {
79
+ report.internalHyperlinksFormatted = this.formatInternalHyperlinks();
80
+ }
81
+ if (options.formatAllHyperlinks) {
82
+ report.allHyperlinksFormatted = this.formatAllHyperlinks();
83
+ }
84
+ return report;
85
+ }
86
+ unlockSDTs() {
87
+ let count = 0;
88
+ const bodyElements = this.doc.getBodyElements();
89
+ for (const element of bodyElements) {
90
+ if (element instanceof StructuredDocumentTag && element.isLocked()) {
91
+ element.unlock();
92
+ count++;
93
+ }
94
+ }
95
+ for (const table of this.doc.getAllTables()) {
96
+ for (const row of table.getRows()) {
97
+ for (const cell of row.getCells()) {
98
+ for (const para of cell.getParagraphs()) {
99
+ const content = para.getContent();
100
+ for (const item of content) {
101
+ if (item instanceof StructuredDocumentTag && item.isLocked()) {
102
+ item.unlock();
103
+ count++;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return count;
111
+ }
112
+ removeSDTs() {
113
+ const bodyElements = this.doc.getBodyElements();
114
+ const unwrapped = [];
115
+ let sdtCount = 0;
116
+ const unwrapSDT = (sdt, target) => {
117
+ sdtCount++;
118
+ for (const item of sdt.getContent()) {
119
+ if (item instanceof Paragraph || item instanceof Table) {
120
+ target.push(item);
121
+ }
122
+ else if (item instanceof StructuredDocumentTag) {
123
+ unwrapSDT(item, target);
124
+ }
125
+ }
126
+ };
127
+ for (const element of bodyElements) {
128
+ if (element instanceof StructuredDocumentTag) {
129
+ unwrapSDT(element, unwrapped);
130
+ }
131
+ else {
132
+ unwrapped.push(element);
133
+ }
134
+ }
135
+ this.doc.setBodyElements(unwrapped);
136
+ return sdtCount;
137
+ }
138
+ clearPreserveFlags() {
139
+ let cleared = 0;
140
+ for (const para of this.doc.getAllParagraphs()) {
141
+ if (para.isPreserved()) {
142
+ para.setPreserved(false);
143
+ cleared++;
144
+ }
145
+ }
146
+ return cleared;
147
+ }
148
+ defragmentHyperlinks(resetFormatting) {
149
+ return this.doc.defragmentHyperlinks({ resetFormatting, cleanupRelationships: true });
150
+ }
151
+ cleanupNumbering() {
152
+ const before = this.doc.getNumberingManager().getAllInstances().length;
153
+ this.doc.cleanupUnusedNumbering();
154
+ const after = this.doc.getNumberingManager().getAllInstances().length;
155
+ return before - after;
156
+ }
157
+ cleanupStyles() {
158
+ const usedStyles = new Set();
159
+ for (const para of this.doc.getAllParagraphs()) {
160
+ const paraStyle = para.getFormatting().style;
161
+ if (paraStyle)
162
+ usedStyles.add(paraStyle);
163
+ for (const run of para.getRuns()) {
164
+ const runStyle = run.getFormatting().characterStyle;
165
+ if (runStyle)
166
+ usedStyles.add(runStyle);
167
+ }
168
+ }
169
+ let removed = 0;
170
+ const allStyles = this.doc.getStylesManager().getAllStyles();
171
+ for (const style of allStyles) {
172
+ if (!usedStyles.has(style.getStyleId())) {
173
+ this.doc.getStylesManager().removeStyle(style.getStyleId());
174
+ removed++;
175
+ }
176
+ }
177
+ return removed;
178
+ }
179
+ cleanupRelationships() {
180
+ const referencedIds = this.doc.collectAllReferencedHyperlinkIds();
181
+ return this.doc.getRelationshipManager().removeOrphanedHyperlinks(referencedIds);
182
+ }
183
+ removeCustomXML() {
184
+ const zipHandler = this.doc.getZipHandler();
185
+ let removed = 0;
186
+ const files = zipHandler.getFilePaths();
187
+ for (const file of files) {
188
+ if (file.startsWith('customXml/') || file.startsWith('customXML/')) {
189
+ zipHandler.removeFile(file);
190
+ removed++;
191
+ }
192
+ }
193
+ const relManager = this.doc.getRelationshipManager();
194
+ const customRels = relManager.getRelationshipsByType('http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml');
195
+ for (const rel of customRels) {
196
+ relManager.removeRelationship(rel.getId());
197
+ removed++;
198
+ }
199
+ if (zipHandler.hasFile('docProps/custom.xml')) {
200
+ zipHandler.removeFile('docProps/custom.xml');
201
+ removed++;
202
+ }
203
+ return removed;
204
+ }
205
+ unlockFields() {
206
+ const zipHandler = this.doc.getZipHandler();
207
+ const docXml = zipHandler.getFileAsString('word/document.xml');
208
+ if (!docXml)
209
+ return 0;
210
+ const pattern = /w:fldLock="(1|true)"/g;
211
+ const matches = docXml.match(pattern) || [];
212
+ if (matches.length === 0)
213
+ return 0;
214
+ const updatedXml = docXml.replace(pattern, '');
215
+ zipHandler.updateFile('word/document.xml', updatedXml);
216
+ return matches.length;
217
+ }
218
+ unlockFrames() {
219
+ const zipHandler = this.doc.getZipHandler();
220
+ const docXml = zipHandler.getFileAsString('word/document.xml');
221
+ if (!docXml)
222
+ return 0;
223
+ const pattern = /w:anchorLock="(1|true)"/g;
224
+ const matches = docXml.match(pattern) || [];
225
+ if (matches.length === 0)
226
+ return 0;
227
+ const updatedXml = docXml.replace(pattern, '');
228
+ zipHandler.updateFile('word/document.xml', updatedXml);
229
+ return matches.length;
230
+ }
231
+ sanitizeTables() {
232
+ const tables = this.doc.getAllTables();
233
+ let processed = 0;
234
+ for (const table of tables) {
235
+ for (const row of table.getRows()) {
236
+ const exceptions = row.getTablePropertyExceptions();
237
+ if (exceptions && Object.keys(exceptions).length > 0) {
238
+ row.setTablePropertyExceptions(undefined);
239
+ }
240
+ }
241
+ processed++;
242
+ }
243
+ return processed;
244
+ }
245
+ formatInternalHyperlinks() {
246
+ let count = 0;
247
+ const formatting = {
248
+ font: 'Verdana',
249
+ size: 12,
250
+ color: '0000FF',
251
+ underline: 'single',
252
+ };
253
+ for (const paragraph of this.doc.getAllParagraphs()) {
254
+ for (const item of paragraph.getContent()) {
255
+ if (item instanceof Hyperlink && item.isInternal()) {
256
+ item.setFormatting(formatting, { replace: true });
257
+ count++;
258
+ }
259
+ }
260
+ }
261
+ for (const table of this.doc.getAllTables()) {
262
+ for (const row of table.getRows()) {
263
+ for (const cell of row.getCells()) {
264
+ for (const para of cell.getParagraphs()) {
265
+ for (const item of para.getContent()) {
266
+ if (item instanceof Hyperlink && item.isInternal()) {
267
+ item.setFormatting(formatting, { replace: true });
268
+ count++;
269
+ }
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+ return count;
276
+ }
277
+ formatAllHyperlinks() {
278
+ let count = 0;
279
+ const formatting = {
280
+ font: 'Verdana',
281
+ size: 12,
282
+ color: '0000FF',
283
+ underline: 'single',
284
+ };
285
+ const processParagraph = (paragraph) => {
286
+ for (const item of paragraph.getContent()) {
287
+ if (item instanceof Hyperlink) {
288
+ item.setFormatting(formatting, { replace: true });
289
+ count++;
290
+ }
291
+ if (item instanceof Field && item.isHyperlinkField()) {
292
+ item.setFormatting(formatting);
293
+ count++;
294
+ }
295
+ if (item instanceof ComplexField && item.isHyperlinkField()) {
296
+ item.setResultFormatting(formatting);
297
+ count++;
298
+ }
299
+ }
300
+ };
301
+ for (const paragraph of this.doc.getAllParagraphs()) {
302
+ processParagraph(paragraph);
303
+ }
304
+ for (const table of this.doc.getAllTables()) {
305
+ for (const row of table.getRows()) {
306
+ for (const cell of row.getCells()) {
307
+ for (const para of cell.getParagraphs()) {
308
+ processParagraph(para);
309
+ }
310
+ }
311
+ }
312
+ }
313
+ return count;
314
+ }
315
+ static googleDocsPreset() {
316
+ return {
317
+ unlockSDTs: true,
318
+ removeSDTs: true,
319
+ defragmentHyperlinks: true,
320
+ resetHyperlinkFormatting: true,
321
+ cleanupRelationships: true,
322
+ removeCustomXML: true,
323
+ sanitizeTables: true,
324
+ };
325
+ }
326
+ static fullCleanupPreset() {
327
+ return {
328
+ unlockSDTs: true,
329
+ removeSDTs: true,
330
+ clearPreserveFlags: true,
331
+ defragmentHyperlinks: true,
332
+ resetHyperlinkFormatting: true,
333
+ cleanupNumbering: true,
334
+ cleanupStyles: true,
335
+ cleanupRelationships: true,
336
+ removeCustomXML: true,
337
+ unlockFields: true,
338
+ unlockFrames: true,
339
+ sanitizeTables: true,
340
+ formatAllHyperlinks: true,
341
+ };
342
+ }
343
+ static minimalPreset() {
344
+ return {
345
+ cleanupRelationships: true,
346
+ removeCustomXML: true,
347
+ };
348
+ }
349
+ }
350
+ //# sourceMappingURL=CleanupHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CleanupHelper.js","sourceRoot":"","sources":["../../../src/helpers/CleanupHelper.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAkD7E,MAAM,OAAO,aAAa;IAChB,GAAG,CAAW;IAEtB,YAAY,GAAa;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAMD,GAAG;QACD,OAAO,IAAI,CAAC,GAAG,CAAC;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,IAAI;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,gBAAgB,EAAE,IAAI;YACtB,aAAa,EAAE,IAAI;YACnB,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;IAOD,GAAG,CAAC,OAAuB;QACzB,MAAM,MAAM,GAAkB;YAC5B,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,oBAAoB,EAAE,CAAC;YACvB,sBAAsB,EAAE,CAAC;YACzB,gBAAgB,EAAE,CAAC;YACnB,aAAa,EAAE,CAAC;YAChB,oBAAoB,EAAE,CAAC;YACvB,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;YAClB,2BAA2B,EAAE,CAAC;YAC9B,sBAAsB,EAAE,CAAC;YACzB,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;QAED,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CACvD,OAAO,CAAC,wBAAwB,IAAI,KAAK,CAC1C,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACjD,CAAC;QAED,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;YACrC,MAAM,CAAC,2BAA2B,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAChC,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,UAAU;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAEhD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,IAAI,OAAO,YAAY,qBAAqB,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACnE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAGD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;wBAExC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;4BAC3B,IAAI,IAAI,YAAY,qBAAqB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gCAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;gCACd,KAAK,EAAE,CAAC;4BACV,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,UAAU;QAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAEhD,MAAM,SAAS,GAAkB,EAAE,CAAC;QACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,MAAM,SAAS,GAAG,CAAC,GAA0B,EAAE,MAAqB,EAAE,EAAE;YACtE,QAAQ,EAAE,CAAC;YACX,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACpC,IAAI,IAAI,YAAY,SAAS,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;oBACvD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,YAAY,qBAAqB,EAAE,CAAC;oBACjD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,IAAI,OAAO,YAAY,qBAAqB,EAAE,CAAC;gBAC7C,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,OAAsB,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,kBAAkB;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,oBAAoB,CAAC,eAAwB;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,eAAe,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAEO,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QACtE,OAAO,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEO,aAAa;QAGnB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;YAC7C,IAAI,SAAS;gBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,cAAc,CAAC;gBACpD,IAAI,QAAQ;oBAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAGD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,oBAAoB;QAG1B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC;QAGlE,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC;IAEO,eAAe;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;QAGhB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAGD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,UAAU,CAAC,sBAAsB,CAClD,+EAA+E,CAChF,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,UAAU,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC;QACZ,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC9C,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAGtB,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAGnC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,UAAU,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAEvD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAEO,YAAY;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAGtB,MAAM,OAAO,GAAG,0BAA0B,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAGnC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,UAAU,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAEvD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACvC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,GAAG,CAAC,0BAA0B,EAAE,CAAC;gBACpD,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,0BAA0B,CAAC,SAAgB,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,SAAS,EAAE,CAAC;QACd,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,wBAAwB;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,QAAiB;SAC7B,CAAC;QAGF,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC1C,IAAI,IAAI,YAAY,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;oBACnD,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAGD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;wBACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;4BACrC,IAAI,IAAI,YAAY,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gCACnD,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gCAClD,KAAK,EAAE,CAAC;4BACV,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAYO,mBAAmB;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,QAAiB;SAC7B,CAAC;QAGF,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAAQ,EAAE;YACtD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAE1C,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;oBAC9B,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,KAAK,EAAE,CAAC;gBACV,CAAC;gBAED,IAAI,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBACrD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC/B,KAAK,EAAE,CAAC;gBACV,CAAC;gBAED,IAAI,IAAI,YAAY,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBAC5D,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;oBACrC,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAGF,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACpD,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAGD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;wBACxC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAKD,MAAM,CAAC,gBAAgB;QACrB,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,iBAAiB;QACtB,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,IAAI;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,gBAAgB,EAAE,IAAI;YACtB,aAAa,EAAE,IAAI;YACnB,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,mBAAmB,EAAE,IAAI;SAC1B,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,aAAa;QAClB,OAAO;YACL,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,IAAI;SACtB,CAAC;IACJ,CAAC;CACF","sourcesContent":["/**\n * CleanupHelper - Comprehensive document cleanup utilities\n *\n * Provides methods to clean up common issues in DOCX documents, including:\n * - Unlocking and removing SDTs\n * - Clearing preserve flags\n * - Defragmenting hyperlinks\n * - Cleaning unused elements\n * - Removing customXML\n * - Unlocking fields and frames\n * - Sanitizing tables\n *\n * Usage:\n * const cleanup = new CleanupHelper(doc);\n * cleanup.all(); // Run all cleanups\n */\n\nimport type { Document } from '../core/Document.js';\nimport { Field, ComplexField } from '../elements/Field.js';\nimport { Hyperlink } from '../elements/Hyperlink.js';\nimport { Paragraph } from '../elements/Paragraph.js';\nimport { Table } from '../elements/Table.js';\nimport { StructuredDocumentTag } from '../elements/StructuredDocumentTag.js';\n\nexport interface CleanupOptions {\n /** Unlock all SDTs to enable editing */\n unlockSDTs?: boolean;\n /** Remove all SDTs (unwrap content) */\n removeSDTs?: boolean;\n /** Clear paragraph preserve flags */\n clearPreserveFlags?: boolean;\n /** Merge fragmented hyperlinks */\n defragmentHyperlinks?: boolean;\n /** Reset hyperlink formatting to standard */\n resetHyperlinkFormatting?: boolean;\n /** Remove unused numbering definitions */\n cleanupNumbering?: boolean;\n /** Remove unused styles */\n cleanupStyles?: boolean;\n /** Remove orphaned relationships */\n cleanupRelationships?: boolean;\n /** Remove customXML elements */\n removeCustomXML?: boolean;\n /** Unlock field locks (enable field updates) */\n unlockFields?: boolean;\n /** Remove frame/text box locks */\n unlockFrames?: boolean;\n /** Sanitize table property exceptions (tblPrEx) */\n sanitizeTables?: boolean;\n /** Format internal anchor hyperlinks with standard styling (Verdana 12pt blue underlined) */\n formatInternalHyperlinks?: boolean;\n /** Format ALL hyperlinks (internal, external, and HYPERLINK fields) with standard styling (Verdana 12pt #0000FF underlined) */\n formatAllHyperlinks?: boolean;\n}\n\nexport interface CleanupReport {\n sdtsUnlocked: number;\n sdtsRemoved: number;\n preserveFlagsCleared: number;\n hyperlinksDefragmented: number;\n numberingRemoved: number;\n stylesRemoved: number;\n relationshipsRemoved: number;\n customXMLRemoved: number;\n fieldsUnlocked: number;\n framesUnlocked: number;\n tablesProcessed: number;\n internalHyperlinksFormatted: number;\n allHyperlinksFormatted: number;\n warnings: string[];\n}\n\nexport class CleanupHelper {\n private doc: Document;\n\n constructor(doc: Document) {\n this.doc = doc;\n }\n\n /**\n * Run all cleanup operations with default settings\n * @returns Cleanup report\n */\n all(): CleanupReport {\n return this.run({\n unlockSDTs: true,\n removeSDTs: true,\n clearPreserveFlags: true,\n defragmentHyperlinks: true,\n resetHyperlinkFormatting: true,\n cleanupNumbering: true,\n cleanupStyles: true,\n cleanupRelationships: true,\n removeCustomXML: true,\n unlockFields: true,\n unlockFrames: true,\n sanitizeTables: true,\n formatAllHyperlinks: true,\n });\n }\n\n /**\n * Run selective cleanup operations\n * @param options Cleanup options\n * @returns Cleanup report\n */\n run(options: CleanupOptions): CleanupReport {\n const report: CleanupReport = {\n sdtsUnlocked: 0,\n sdtsRemoved: 0,\n preserveFlagsCleared: 0,\n hyperlinksDefragmented: 0,\n numberingRemoved: 0,\n stylesRemoved: 0,\n relationshipsRemoved: 0,\n customXMLRemoved: 0,\n fieldsUnlocked: 0,\n framesUnlocked: 0,\n tablesProcessed: 0,\n internalHyperlinksFormatted: 0,\n allHyperlinksFormatted: 0,\n warnings: [],\n };\n\n if (options.unlockSDTs) {\n report.sdtsUnlocked = this.unlockSDTs();\n }\n\n if (options.removeSDTs) {\n report.sdtsRemoved = this.removeSDTs();\n }\n\n if (options.clearPreserveFlags) {\n report.preserveFlagsCleared = this.clearPreserveFlags();\n }\n\n if (options.defragmentHyperlinks) {\n report.hyperlinksDefragmented = this.defragmentHyperlinks(\n options.resetHyperlinkFormatting ?? false\n );\n }\n\n if (options.cleanupNumbering) {\n report.numberingRemoved = this.cleanupNumbering();\n }\n\n if (options.cleanupStyles) {\n report.stylesRemoved = this.cleanupStyles();\n }\n\n if (options.cleanupRelationships) {\n report.relationshipsRemoved = this.cleanupRelationships();\n }\n\n if (options.removeCustomXML) {\n report.customXMLRemoved = this.removeCustomXML();\n }\n\n if (options.unlockFields) {\n report.fieldsUnlocked = this.unlockFields();\n }\n\n if (options.unlockFrames) {\n report.framesUnlocked = this.unlockFrames();\n }\n\n if (options.sanitizeTables) {\n report.tablesProcessed = this.sanitizeTables();\n }\n\n if (options.formatInternalHyperlinks) {\n report.internalHyperlinksFormatted = this.formatInternalHyperlinks();\n }\n\n if (options.formatAllHyperlinks) {\n report.allHyperlinksFormatted = this.formatAllHyperlinks();\n }\n\n return report;\n }\n\n private unlockSDTs(): number {\n let count = 0;\n const bodyElements = this.doc.getBodyElements();\n\n for (const element of bodyElements) {\n if (element instanceof StructuredDocumentTag && element.isLocked()) {\n element.unlock();\n count++;\n }\n }\n\n // Also unlock in tables\n for (const table of this.doc.getAllTables()) {\n for (const row of table.getRows()) {\n for (const cell of row.getCells()) {\n for (const para of cell.getParagraphs()) {\n // SDTs can wrap paragraphs in cells\n const content = para.getContent();\n for (const item of content) {\n if (item instanceof StructuredDocumentTag && item.isLocked()) {\n item.unlock();\n count++;\n }\n }\n }\n }\n }\n }\n\n return count;\n }\n\n private removeSDTs(): number {\n // Unwrap SDT wrappers, preserving their content\n const bodyElements = this.doc.getBodyElements();\n type BodyElement = Paragraph | Table | StructuredDocumentTag;\n const unwrapped: BodyElement[] = [];\n let sdtCount = 0;\n\n const unwrapSDT = (sdt: StructuredDocumentTag, target: BodyElement[]) => {\n sdtCount++;\n for (const item of sdt.getContent()) {\n if (item instanceof Paragraph || item instanceof Table) {\n target.push(item);\n } else if (item instanceof StructuredDocumentTag) {\n unwrapSDT(item, target);\n }\n }\n };\n\n for (const element of bodyElements) {\n if (element instanceof StructuredDocumentTag) {\n unwrapSDT(element, unwrapped);\n } else {\n unwrapped.push(element as BodyElement);\n }\n }\n\n this.doc.setBodyElements(unwrapped);\n return sdtCount;\n }\n\n private clearPreserveFlags(): number {\n let cleared = 0;\n for (const para of this.doc.getAllParagraphs()) {\n if (para.isPreserved()) {\n para.setPreserved(false);\n cleared++;\n }\n }\n return cleared;\n }\n\n private defragmentHyperlinks(resetFormatting: boolean): number {\n return this.doc.defragmentHyperlinks({ resetFormatting, cleanupRelationships: true });\n }\n\n private cleanupNumbering(): number {\n const before = this.doc.getNumberingManager().getAllInstances().length;\n this.doc.cleanupUnusedNumbering();\n const after = this.doc.getNumberingManager().getAllInstances().length;\n return before - after;\n }\n\n private cleanupStyles(): number {\n // Implementation for unused styles removal\n // Scan all paragraphs and runs for used styles\n const usedStyles = new Set<string>();\n for (const para of this.doc.getAllParagraphs()) {\n const paraStyle = para.getFormatting().style;\n if (paraStyle) usedStyles.add(paraStyle);\n for (const run of para.getRuns()) {\n const runStyle = run.getFormatting().characterStyle;\n if (runStyle) usedStyles.add(runStyle);\n }\n }\n\n // Remove unused styles\n let removed = 0;\n const allStyles = this.doc.getStylesManager().getAllStyles();\n for (const style of allStyles) {\n if (!usedStyles.has(style.getStyleId())) {\n this.doc.getStylesManager().removeStyle(style.getStyleId());\n removed++;\n }\n }\n\n return removed;\n }\n\n private cleanupRelationships(): number {\n // Use comprehensive scanning that includes raw nested content (nested tables),\n // headers/footers, footnotes, and endnotes — not just in-memory hyperlinks\n const referencedIds = this.doc.collectAllReferencedHyperlinkIds();\n\n // Remove orphaned hyperlink relationships\n return this.doc.getRelationshipManager().removeOrphanedHyperlinks(referencedIds);\n }\n\n private removeCustomXML(): number {\n const zipHandler = this.doc.getZipHandler();\n let removed = 0;\n\n // Remove customXML files\n const files = zipHandler.getFilePaths();\n for (const file of files) {\n if (file.startsWith('customXml/') || file.startsWith('customXML/')) {\n zipHandler.removeFile(file);\n removed++;\n }\n }\n\n // Remove customXML relationships\n const relManager = this.doc.getRelationshipManager();\n const customRels = relManager.getRelationshipsByType(\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml'\n );\n for (const rel of customRels) {\n relManager.removeRelationship(rel.getId());\n removed++;\n }\n\n // Remove custom.xml if present (docProps/custom.xml)\n if (zipHandler.hasFile('docProps/custom.xml')) {\n zipHandler.removeFile('docProps/custom.xml');\n removed++;\n }\n\n return removed;\n }\n\n private unlockFields(): number {\n const zipHandler = this.doc.getZipHandler();\n const docXml = zipHandler.getFileAsString('word/document.xml');\n if (!docXml) return 0;\n\n // Count matches first, then replace (avoid regex re-execution)\n const pattern = /w:fldLock=\"(1|true)\"/g;\n const matches = docXml.match(pattern) || [];\n if (matches.length === 0) return 0;\n\n // Remove w:fldLock=\"1\" or w:fldLock=\"true\"\n const updatedXml = docXml.replace(pattern, '');\n zipHandler.updateFile('word/document.xml', updatedXml);\n\n return matches.length;\n }\n\n private unlockFrames(): number {\n const zipHandler = this.doc.getZipHandler();\n const docXml = zipHandler.getFileAsString('word/document.xml');\n if (!docXml) return 0;\n\n // Count matches first, then replace (avoid regex re-execution)\n const pattern = /w:anchorLock=\"(1|true)\"/g;\n const matches = docXml.match(pattern) || [];\n if (matches.length === 0) return 0;\n\n // Remove w:anchorLock=\"1\" or w:anchorLock=\"true\"\n const updatedXml = docXml.replace(pattern, '');\n zipHandler.updateFile('word/document.xml', updatedXml);\n\n return matches.length;\n }\n\n private sanitizeTables(): number {\n const tables = this.doc.getAllTables();\n let processed = 0;\n for (const table of tables) {\n for (const row of table.getRows()) {\n const exceptions = row.getTablePropertyExceptions();\n if (exceptions && Object.keys(exceptions).length > 0) {\n row.setTablePropertyExceptions(undefined as any);\n }\n }\n processed++;\n }\n return processed;\n }\n\n private formatInternalHyperlinks(): number {\n let count = 0;\n const formatting = {\n font: 'Verdana',\n size: 12,\n color: '0000FF',\n underline: 'single' as const,\n };\n\n // Process body paragraphs\n for (const paragraph of this.doc.getAllParagraphs()) {\n for (const item of paragraph.getContent()) {\n if (item instanceof Hyperlink && item.isInternal()) {\n item.setFormatting(formatting, { replace: true });\n count++;\n }\n }\n }\n\n // Process table paragraphs\n for (const table of this.doc.getAllTables()) {\n for (const row of table.getRows()) {\n for (const cell of row.getCells()) {\n for (const para of cell.getParagraphs()) {\n for (const item of para.getContent()) {\n if (item instanceof Hyperlink && item.isInternal()) {\n item.setFormatting(formatting, { replace: true });\n count++;\n }\n }\n }\n }\n }\n }\n\n return count;\n }\n\n /**\n * Formats ALL hyperlinks in the document with standard styling\n * This includes:\n * - Internal w:hyperlink elements (bookmarks)\n * - External w:hyperlink elements (URLs)\n * - HYPERLINK fields (both simple w:fldSimple and complex fields)\n *\n * Standard formatting: Verdana 12pt, #0000FF blue, single underline\n * @returns Number of hyperlinks formatted\n */\n private formatAllHyperlinks(): number {\n let count = 0;\n const formatting = {\n font: 'Verdana',\n size: 12,\n color: '0000FF',\n underline: 'single' as const,\n };\n\n // Helper to process paragraph content\n const processParagraph = (paragraph: Paragraph): void => {\n for (const item of paragraph.getContent()) {\n // Process all Hyperlink instances (both internal AND external)\n if (item instanceof Hyperlink) {\n item.setFormatting(formatting, { replace: true });\n count++;\n }\n // Process simple HYPERLINK fields\n if (item instanceof Field && item.isHyperlinkField()) {\n item.setFormatting(formatting);\n count++;\n }\n // Process complex HYPERLINK fields\n if (item instanceof ComplexField && item.isHyperlinkField()) {\n item.setResultFormatting(formatting);\n count++;\n }\n }\n };\n\n // Process body paragraphs\n for (const paragraph of this.doc.getAllParagraphs()) {\n processParagraph(paragraph);\n }\n\n // Process table paragraphs\n for (const table of this.doc.getAllTables()) {\n for (const row of table.getRows()) {\n for (const cell of row.getCells()) {\n for (const para of cell.getParagraphs()) {\n processParagraph(para);\n }\n }\n }\n }\n\n return count;\n }\n\n /**\n * Preset: Google Docs cleanup\n */\n static googleDocsPreset(): CleanupOptions {\n return {\n unlockSDTs: true,\n removeSDTs: true,\n defragmentHyperlinks: true,\n resetHyperlinkFormatting: true,\n cleanupRelationships: true,\n removeCustomXML: true,\n sanitizeTables: true,\n };\n }\n\n /**\n * Preset: Full cleanup\n */\n static fullCleanupPreset(): CleanupOptions {\n return {\n unlockSDTs: true,\n removeSDTs: true,\n clearPreserveFlags: true,\n defragmentHyperlinks: true,\n resetHyperlinkFormatting: true,\n cleanupNumbering: true,\n cleanupStyles: true,\n cleanupRelationships: true,\n removeCustomXML: true,\n unlockFields: true,\n unlockFrames: true,\n sanitizeTables: true,\n formatAllHyperlinks: true,\n };\n }\n\n /**\n * Preset: Minimal cleanup\n */\n static minimalPreset(): CleanupOptions {\n return {\n cleanupRelationships: true,\n removeCustomXML: true,\n };\n }\n}\n"]}