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,87 @@
1
+ export class HeaderFooterManager {
2
+ headers;
3
+ footers;
4
+ nextHeaderNumber;
5
+ nextFooterNumber;
6
+ constructor() {
7
+ this.headers = new Map();
8
+ this.footers = new Map();
9
+ this.nextHeaderNumber = 1;
10
+ this.nextFooterNumber = 1;
11
+ }
12
+ registerHeader(header, relationshipId) {
13
+ const existing = this.headers.get(header);
14
+ if (existing) {
15
+ return existing.filename;
16
+ }
17
+ const number = this.nextHeaderNumber++;
18
+ const filename = header.getFilename(number);
19
+ header.setHeaderId(relationshipId);
20
+ const entry = {
21
+ header,
22
+ filename,
23
+ relationshipId,
24
+ number,
25
+ };
26
+ this.headers.set(header, entry);
27
+ return filename;
28
+ }
29
+ registerFooter(footer, relationshipId) {
30
+ const existing = this.footers.get(footer);
31
+ if (existing) {
32
+ return existing.filename;
33
+ }
34
+ const number = this.nextFooterNumber++;
35
+ const filename = footer.getFilename(number);
36
+ footer.setFooterId(relationshipId);
37
+ const entry = {
38
+ footer,
39
+ filename,
40
+ relationshipId,
41
+ number,
42
+ };
43
+ this.footers.set(footer, entry);
44
+ return filename;
45
+ }
46
+ getHeaderFilename(header) {
47
+ return this.headers.get(header)?.filename;
48
+ }
49
+ getFooterFilename(footer) {
50
+ return this.footers.get(footer)?.filename;
51
+ }
52
+ getHeaderRelationshipId(header) {
53
+ return this.headers.get(header)?.relationshipId;
54
+ }
55
+ getFooterRelationshipId(footer) {
56
+ return this.footers.get(footer)?.relationshipId;
57
+ }
58
+ getAllHeaders() {
59
+ return Array.from(this.headers.values());
60
+ }
61
+ getAllFooters() {
62
+ return Array.from(this.footers.values());
63
+ }
64
+ getHeaderCount() {
65
+ return this.headers.size;
66
+ }
67
+ getFooterCount() {
68
+ return this.footers.size;
69
+ }
70
+ hasHeader(header) {
71
+ return this.headers.has(header);
72
+ }
73
+ hasFooter(footer) {
74
+ return this.footers.has(footer);
75
+ }
76
+ clear() {
77
+ this.headers.clear();
78
+ this.footers.clear();
79
+ this.nextHeaderNumber = 1;
80
+ this.nextFooterNumber = 1;
81
+ return this;
82
+ }
83
+ static create() {
84
+ return new HeaderFooterManager();
85
+ }
86
+ }
87
+ //# sourceMappingURL=HeaderFooterManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderFooterManager.js","sourceRoot":"","sources":["../../../src/elements/HeaderFooterManager.ts"],"names":[],"mappings":"AAiCA,MAAM,OAAO,mBAAmB;IACtB,OAAO,CAA2B;IAClC,OAAO,CAA2B;IAClC,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IAKjC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAQD,cAAc,CAAC,MAAc,EAAE,cAAsB;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3B,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAG5C,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAGnC,MAAM,KAAK,GAAgB;YACzB,MAAM;YACN,QAAQ;YACR,cAAc;YACd,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEhC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAQD,cAAc,CAAC,MAAc,EAAE,cAAsB;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3B,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAG5C,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAGnC,MAAM,KAAK,GAAgB;YACzB,MAAM;YACN,QAAQ;YACR,cAAc;YACd,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEhC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAOD,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC5C,CAAC;IAOD,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC5C,CAAC;IAOD,uBAAuB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAClD,CAAC;IAOD,uBAAuB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAClD,CAAC;IAMD,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAMD,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAOD,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAOD,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAKD,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;CACF","sourcesContent":["/**\n * HeaderFooterManager - Manages headers and footers in a document\n *\n * Tracks all headers and footers, assigns unique IDs, generates filenames,\n * and manages relationships.\n */\n\nimport { Header } from './Header.js';\nimport { Footer } from './Footer.js';\n\n/**\n * Header entry with metadata\n */\ninterface HeaderEntry {\n header: Header;\n filename: string;\n relationshipId: string;\n number: number;\n}\n\n/**\n * Footer entry with metadata\n */\ninterface FooterEntry {\n footer: Footer;\n filename: string;\n relationshipId: string;\n number: number;\n}\n\n/**\n * Manages all headers and footers in a document\n */\nexport class HeaderFooterManager {\n private headers: Map<Header, HeaderEntry>;\n private footers: Map<Footer, FooterEntry>;\n private nextHeaderNumber: number;\n private nextFooterNumber: number;\n\n /**\n * Creates a new header/footer manager\n */\n constructor() {\n this.headers = new Map();\n this.footers = new Map();\n this.nextHeaderNumber = 1;\n this.nextFooterNumber = 1;\n }\n\n /**\n * Registers a header with the manager\n * @param header The header to register\n * @param relationshipId The relationship ID for this header\n * @returns The filename assigned to this header\n */\n registerHeader(header: Header, relationshipId: string): string {\n // Check if already registered\n const existing = this.headers.get(header);\n if (existing) {\n return existing.filename;\n }\n\n // Generate filename\n const number = this.nextHeaderNumber++;\n const filename = header.getFilename(number);\n\n // Set header ID\n header.setHeaderId(relationshipId);\n\n // Store entry\n const entry: HeaderEntry = {\n header,\n filename,\n relationshipId,\n number,\n };\n\n this.headers.set(header, entry);\n\n return filename;\n }\n\n /**\n * Registers a footer with the manager\n * @param footer The footer to register\n * @param relationshipId The relationship ID for this footer\n * @returns The filename assigned to this footer\n */\n registerFooter(footer: Footer, relationshipId: string): string {\n // Check if already registered\n const existing = this.footers.get(footer);\n if (existing) {\n return existing.filename;\n }\n\n // Generate filename\n const number = this.nextFooterNumber++;\n const filename = footer.getFilename(number);\n\n // Set footer ID\n footer.setFooterId(relationshipId);\n\n // Store entry\n const entry: FooterEntry = {\n footer,\n filename,\n relationshipId,\n number,\n };\n\n this.footers.set(footer, entry);\n\n return filename;\n }\n\n /**\n * Gets the filename for a header\n * @param header The header\n * @returns The filename, or undefined if not registered\n */\n getHeaderFilename(header: Header): string | undefined {\n return this.headers.get(header)?.filename;\n }\n\n /**\n * Gets the filename for a footer\n * @param footer The footer\n * @returns The filename, or undefined if not registered\n */\n getFooterFilename(footer: Footer): string | undefined {\n return this.footers.get(footer)?.filename;\n }\n\n /**\n * Gets the relationship ID for a header\n * @param header The header\n * @returns The relationship ID, or undefined if not registered\n */\n getHeaderRelationshipId(header: Header): string | undefined {\n return this.headers.get(header)?.relationshipId;\n }\n\n /**\n * Gets the relationship ID for a footer\n * @param footer The footer\n * @returns The relationship ID, or undefined if not registered\n */\n getFooterRelationshipId(footer: Footer): string | undefined {\n return this.footers.get(footer)?.relationshipId;\n }\n\n /**\n * Gets all registered headers\n * @returns Array of header entries\n */\n getAllHeaders(): HeaderEntry[] {\n return Array.from(this.headers.values());\n }\n\n /**\n * Gets all registered footers\n * @returns Array of footer entries\n */\n getAllFooters(): FooterEntry[] {\n return Array.from(this.footers.values());\n }\n\n /**\n * Gets the number of headers\n * @returns Number of registered headers\n */\n getHeaderCount(): number {\n return this.headers.size;\n }\n\n /**\n * Gets the number of footers\n * @returns Number of registered footers\n */\n getFooterCount(): number {\n return this.footers.size;\n }\n\n /**\n * Checks if a header is registered\n * @param header The header\n * @returns True if registered\n */\n hasHeader(header: Header): boolean {\n return this.headers.has(header);\n }\n\n /**\n * Checks if a footer is registered\n * @param footer The footer\n * @returns True if registered\n */\n hasFooter(footer: Footer): boolean {\n return this.footers.has(footer);\n }\n\n /**\n * Clears all headers and footers\n */\n clear(): this {\n this.headers.clear();\n this.footers.clear();\n this.nextHeaderNumber = 1;\n this.nextFooterNumber = 1;\n return this;\n }\n\n /**\n * Creates a new header/footer manager\n */\n static create(): HeaderFooterManager {\n return new HeaderFooterManager();\n }\n}\n"]}
@@ -0,0 +1,586 @@
1
+ import { Run } from './Run.js';
2
+ import { Revision } from './Revision.js';
3
+ import { validateRunText, sanitizeHyperlinkUrl } from '../utils/validation.js';
4
+ import { defaultLogger } from '../utils/logger.js';
5
+ export class Hyperlink {
6
+ url;
7
+ anchor;
8
+ text;
9
+ run;
10
+ tooltip;
11
+ relationshipId;
12
+ formatting;
13
+ _isEmpty = false;
14
+ tgtFrame;
15
+ history;
16
+ docLocation;
17
+ trackingContext;
18
+ _parentParagraph;
19
+ _preTrackingFormatting;
20
+ constructor(properties) {
21
+ this.url = properties.url;
22
+ this.anchor = properties.anchor;
23
+ this.tooltip = properties.tooltip;
24
+ this.relationshipId = properties.relationshipId;
25
+ this.tgtFrame = properties.tgtFrame;
26
+ this.history = properties.history;
27
+ this.docLocation = properties.docLocation;
28
+ this._isEmpty = properties.isEmpty ?? false;
29
+ if (this.url && this.anchor) {
30
+ defaultLogger.warn(`DocXML Warning: Hyperlink has both URL ("${this.url}") and anchor ("${this.anchor}"). ` +
31
+ `This is ambiguous per ECMA-376 spec. URL will take precedence. ` +
32
+ `Use Hyperlink.createExternal() or Hyperlink.createInternal() to avoid ambiguity.`);
33
+ }
34
+ if (this._isEmpty) {
35
+ this.text = '';
36
+ this.formatting = {};
37
+ this.run = new Run('', {});
38
+ return;
39
+ }
40
+ this.text = properties.text || this.url || 'Link';
41
+ const validation = validateRunText(this.text, {
42
+ context: 'Hyperlink text',
43
+ autoClean: properties.formatting?.cleanXmlFromText !== false,
44
+ warnToConsole: true,
45
+ });
46
+ if (validation.cleanedText) {
47
+ this.text = validation.cleanedText;
48
+ }
49
+ this.formatting = {
50
+ font: 'Verdana',
51
+ size: 12,
52
+ color: '0000FF',
53
+ underline: 'single',
54
+ ...properties.formatting,
55
+ };
56
+ this.run = new Run(this.text, this.formatting);
57
+ }
58
+ _setTrackingContext(context) {
59
+ this.trackingContext = context;
60
+ }
61
+ _setParentParagraph(paragraph) {
62
+ this._parentParagraph = paragraph;
63
+ }
64
+ _getParentParagraph() {
65
+ return this._parentParagraph;
66
+ }
67
+ _applyFormattingRPrChange(previousFormatting) {
68
+ if (!this._preTrackingFormatting) {
69
+ this._preTrackingFormatting = { ...previousFormatting };
70
+ }
71
+ const baseline = this._preTrackingFormatting;
72
+ const current = this.formatting;
73
+ const previousProperties = {};
74
+ let hasChanges = false;
75
+ for (const key of Object.keys(baseline)) {
76
+ if (baseline[key] !== current[key]) {
77
+ previousProperties[key] = baseline[key];
78
+ hasChanges = true;
79
+ }
80
+ }
81
+ for (const key of Object.keys(current)) {
82
+ if (!(key in baseline) && current[key] !== undefined) {
83
+ previousProperties[key] = undefined;
84
+ hasChanges = true;
85
+ }
86
+ }
87
+ if (!hasChanges)
88
+ return;
89
+ const revisionId = this.trackingContext.getRevisionManager().consumeNextId();
90
+ const author = this.trackingContext.getAuthor();
91
+ this.run.setPropertyChangeRevision({
92
+ id: revisionId,
93
+ author,
94
+ date: new Date(),
95
+ previousProperties,
96
+ });
97
+ }
98
+ getUrl() {
99
+ return this.url;
100
+ }
101
+ getFullUrl() {
102
+ if (this.url && this.anchor) {
103
+ return this.url + '#' + this.anchor;
104
+ }
105
+ return this.url;
106
+ }
107
+ getAnchor() {
108
+ return this.anchor;
109
+ }
110
+ isEmpty() {
111
+ return this._isEmpty;
112
+ }
113
+ getTgtFrame() {
114
+ return this.tgtFrame;
115
+ }
116
+ getHistory() {
117
+ return this.history;
118
+ }
119
+ setTgtFrame(tgtFrame) {
120
+ this.tgtFrame = tgtFrame;
121
+ return this;
122
+ }
123
+ setHistory(history) {
124
+ this.history = history;
125
+ return this;
126
+ }
127
+ getDocLocation() {
128
+ return this.docLocation;
129
+ }
130
+ setDocLocation(docLocation) {
131
+ this.docLocation = docLocation;
132
+ return this;
133
+ }
134
+ getText() {
135
+ return this.run.getText();
136
+ }
137
+ setText(text) {
138
+ const validation = validateRunText(text, {
139
+ context: 'Hyperlink.setText',
140
+ autoClean: this.formatting.cleanXmlFromText !== false,
141
+ warnToConsole: true,
142
+ });
143
+ const cleanedText = validation.cleanedText || text;
144
+ const previousValue = this.text;
145
+ if (previousValue === cleanedText) {
146
+ return this;
147
+ }
148
+ if (this.trackingContext?.isEnabled() && this._parentParagraph) {
149
+ const author = this.trackingContext.getAuthor();
150
+ const oldHyperlink = this.clone();
151
+ this.text = cleanedText;
152
+ this.run.setText(cleanedText);
153
+ const deletion = Revision.createDeletion(author, [oldHyperlink]);
154
+ const insertion = Revision.createInsertion(author, [this]);
155
+ this._parentParagraph.replaceContent(this, [deletion, insertion]);
156
+ this._parentParagraph = undefined;
157
+ this._preTrackingFormatting = undefined;
158
+ return this;
159
+ }
160
+ this.text = cleanedText;
161
+ this.run.setText(cleanedText);
162
+ return this;
163
+ }
164
+ setRun(run) {
165
+ this.run = run;
166
+ this.text = run.getText();
167
+ return this;
168
+ }
169
+ getTooltip() {
170
+ return this.tooltip;
171
+ }
172
+ setTooltip(tooltip) {
173
+ const previousValue = this.tooltip;
174
+ if (previousValue === tooltip) {
175
+ return this;
176
+ }
177
+ if (this.trackingContext?.isEnabled() && this._parentParagraph) {
178
+ const author = this.trackingContext.getAuthor();
179
+ const oldHyperlink = this.clone();
180
+ this.tooltip = tooltip;
181
+ const deletion = Revision.createDeletion(author, [oldHyperlink]);
182
+ const insertion = Revision.createInsertion(author, [this]);
183
+ this._parentParagraph.replaceContent(this, [deletion, insertion]);
184
+ this._parentParagraph = undefined;
185
+ this._preTrackingFormatting = undefined;
186
+ return this;
187
+ }
188
+ this.tooltip = tooltip;
189
+ return this;
190
+ }
191
+ getRelationshipId() {
192
+ return this.relationshipId;
193
+ }
194
+ setRelationshipId(id) {
195
+ this.relationshipId = id;
196
+ return this;
197
+ }
198
+ setUrl(url) {
199
+ if (!url && !this.anchor) {
200
+ throw new Error(`Cannot set URL to undefined: Hyperlink "${this.run.getText()}" has no anchor. ` +
201
+ `Clearing the URL would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
202
+ `Either provide a new URL or delete the hyperlink entirely.`);
203
+ }
204
+ const oldUrl = this.url;
205
+ if (oldUrl === url) {
206
+ return this;
207
+ }
208
+ if (this.trackingContext?.isEnabled() && this._parentParagraph) {
209
+ const author = this.trackingContext.getAuthor();
210
+ const oldHyperlink = this.clone();
211
+ this.url = url;
212
+ this.relationshipId = undefined;
213
+ if (this.run.getText() === oldUrl) {
214
+ this.text = url || this.anchor || 'Link';
215
+ this.run.setText(this.text);
216
+ }
217
+ const deletion = Revision.createDeletion(author, [oldHyperlink]);
218
+ const insertion = Revision.createInsertion(author, [this]);
219
+ this._parentParagraph.replaceContent(this, [deletion, insertion]);
220
+ this._parentParagraph = undefined;
221
+ return this;
222
+ }
223
+ this.url = url;
224
+ this.relationshipId = undefined;
225
+ if (this.run.getText() === oldUrl) {
226
+ this.text = url || this.anchor || 'Link';
227
+ this.run.setText(this.text);
228
+ }
229
+ return this;
230
+ }
231
+ setAnchor(anchor) {
232
+ if (!anchor && !this.url) {
233
+ throw new Error(`Cannot set anchor to undefined: Hyperlink "${this.run.getText()}" has no URL. ` +
234
+ `Clearing the anchor would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
235
+ `Either provide a new anchor or delete the hyperlink entirely.`);
236
+ }
237
+ const oldAnchor = this.anchor;
238
+ if (oldAnchor === anchor) {
239
+ return this;
240
+ }
241
+ if (this.trackingContext?.isEnabled() && this._parentParagraph) {
242
+ const author = this.trackingContext.getAuthor();
243
+ const oldHyperlink = this.clone();
244
+ this.anchor = anchor;
245
+ if (anchor && this.url) {
246
+ defaultLogger.warn(`DocXML Warning: Setting anchor "${anchor}" on hyperlink that has URL "${this.url}". ` +
247
+ `Clearing URL to make this an internal link. Use separate hyperlinks for external and internal links.`);
248
+ this.url = undefined;
249
+ this.relationshipId = undefined;
250
+ }
251
+ if (this.run.getText() === oldAnchor) {
252
+ this.text = anchor || this.url || 'Link';
253
+ this.run.setText(this.text);
254
+ }
255
+ const deletion = Revision.createDeletion(author, [oldHyperlink]);
256
+ const insertion = Revision.createInsertion(author, [this]);
257
+ this._parentParagraph.replaceContent(this, [deletion, insertion]);
258
+ this._parentParagraph = undefined;
259
+ return this;
260
+ }
261
+ this.anchor = anchor;
262
+ if (anchor && this.url) {
263
+ defaultLogger.warn(`DocXML Warning: Setting anchor "${anchor}" on hyperlink that has URL "${this.url}". ` +
264
+ `Clearing URL to make this an internal link. Use separate hyperlinks for external and internal links.`);
265
+ this.url = undefined;
266
+ this.relationshipId = undefined;
267
+ }
268
+ if (this.run.getText() === oldAnchor) {
269
+ this.text = anchor || this.url || 'Link';
270
+ this.run.setText(this.text);
271
+ }
272
+ return this;
273
+ }
274
+ getRun() {
275
+ return this.run;
276
+ }
277
+ setFormatting(formatting, options) {
278
+ const previousFormatting = { ...this.formatting };
279
+ if (options?.replace) {
280
+ this.formatting = { ...formatting };
281
+ }
282
+ else {
283
+ this.formatting = { ...this.formatting, ...formatting };
284
+ }
285
+ const currentText = this.run.getText();
286
+ this.run = new Run(currentText, this.formatting);
287
+ this.text = currentText;
288
+ if (this.trackingContext?.isEnabled()) {
289
+ this._applyFormattingRPrChange(previousFormatting);
290
+ }
291
+ return this;
292
+ }
293
+ getFormatting() {
294
+ return this;
295
+ }
296
+ getRawFormatting() {
297
+ return this.formatting;
298
+ }
299
+ getColor() {
300
+ return this.formatting.color;
301
+ }
302
+ getUnderline() {
303
+ return this.formatting.underline;
304
+ }
305
+ getBold() {
306
+ return this.formatting.bold ?? false;
307
+ }
308
+ getItalic() {
309
+ return this.formatting.italic ?? false;
310
+ }
311
+ getFont() {
312
+ return this.formatting.font;
313
+ }
314
+ getSize() {
315
+ return this.formatting.size;
316
+ }
317
+ setColor(color) {
318
+ const previousFormatting = { ...this.formatting };
319
+ this.formatting.color = color;
320
+ this.run = new Run(this.text, this.formatting);
321
+ if (this.trackingContext?.isEnabled() && previousFormatting.color !== color) {
322
+ this._applyFormattingRPrChange(previousFormatting);
323
+ }
324
+ return this;
325
+ }
326
+ setUnderline(underline) {
327
+ const previousFormatting = { ...this.formatting };
328
+ this.formatting.underline = underline;
329
+ this.run = new Run(this.text, this.formatting);
330
+ if (this.trackingContext?.isEnabled() && previousFormatting.underline !== underline) {
331
+ this._applyFormattingRPrChange(previousFormatting);
332
+ }
333
+ return this;
334
+ }
335
+ setBold(bold = true) {
336
+ const previousFormatting = { ...this.formatting };
337
+ this.formatting.bold = bold;
338
+ this.run = new Run(this.text, this.formatting);
339
+ if (this.trackingContext?.isEnabled() && previousFormatting.bold !== bold) {
340
+ this._applyFormattingRPrChange(previousFormatting);
341
+ }
342
+ return this;
343
+ }
344
+ setItalic(italic = true) {
345
+ const previousFormatting = { ...this.formatting };
346
+ this.formatting.italic = italic;
347
+ this.run = new Run(this.text, this.formatting);
348
+ if (this.trackingContext?.isEnabled() && previousFormatting.italic !== italic) {
349
+ this._applyFormattingRPrChange(previousFormatting);
350
+ }
351
+ return this;
352
+ }
353
+ setFont(font) {
354
+ const previousFormatting = { ...this.formatting };
355
+ this.formatting.font = font;
356
+ this.run = new Run(this.text, this.formatting);
357
+ if (this.trackingContext?.isEnabled() && previousFormatting.font !== font) {
358
+ this._applyFormattingRPrChange(previousFormatting);
359
+ }
360
+ return this;
361
+ }
362
+ setSize(size) {
363
+ const previousFormatting = { ...this.formatting };
364
+ this.formatting.size = size;
365
+ this.run = new Run(this.text, this.formatting);
366
+ if (this.trackingContext?.isEnabled() && previousFormatting.size !== size) {
367
+ this._applyFormattingRPrChange(previousFormatting);
368
+ }
369
+ return this;
370
+ }
371
+ async validateAndFix(options) {
372
+ const { checkAccessibility = false, fixCommonIssues = true, timeout = 5000, bookmarkManager, } = options || {};
373
+ const issues = [];
374
+ const fixed = [];
375
+ let fixedUrl = this.url;
376
+ const originalUrl = this.url;
377
+ if (this.anchor) {
378
+ if (bookmarkManager) {
379
+ const bookmarkExists = bookmarkManager.hasBookmark(this.anchor);
380
+ if (!bookmarkExists) {
381
+ issues.push(`Internal bookmark "${this.anchor}" not found`);
382
+ }
383
+ }
384
+ return {
385
+ valid: issues.length === 0,
386
+ issues,
387
+ fixed,
388
+ originalUrl,
389
+ };
390
+ }
391
+ if (!this.url) {
392
+ issues.push('No URL or anchor specified');
393
+ return { valid: false, issues, fixed, originalUrl };
394
+ }
395
+ if (fixCommonIssues && fixedUrl) {
396
+ const sanitizeResult = sanitizeHyperlinkUrl(fixedUrl);
397
+ if (sanitizeResult) {
398
+ fixedUrl = sanitizeResult.url;
399
+ fixed.push(...sanitizeResult.fixes);
400
+ }
401
+ if (!/^[a-z]+:\/\//i.exec(fixedUrl)) {
402
+ fixedUrl = 'https://' + fixedUrl;
403
+ fixed.push('Added missing protocol (https://)');
404
+ }
405
+ const protocolMatch = /^([a-z]+:\/\/)/i.exec(fixedUrl);
406
+ if (protocolMatch?.[1]) {
407
+ const protocol = protocolMatch[1];
408
+ const rest = fixedUrl.substring(protocol.length);
409
+ const fixedRest = rest.replace(/\/\//g, '/');
410
+ if (rest !== fixedRest) {
411
+ fixedUrl = protocol + fixedRest;
412
+ fixed.push('Fixed double slashes');
413
+ }
414
+ }
415
+ if (fixedUrl.includes(' ')) {
416
+ fixedUrl = fixedUrl.replace(/ /g, '%20');
417
+ fixed.push('Encoded spaces as %20');
418
+ }
419
+ if (/^https?:\/\/[^/]+\/.+\/$/.exec(fixedUrl)) {
420
+ fixedUrl = fixedUrl.replace(/\/$/, '');
421
+ fixed.push('Removed trailing slash');
422
+ }
423
+ fixedUrl = fixedUrl.replace(/^http:\/\//i, 'https://');
424
+ if (fixedUrl !== this.url && fixedUrl.startsWith('https://')) {
425
+ fixed.push('Upgraded HTTP to HTTPS');
426
+ }
427
+ if (fixedUrl !== this.url) {
428
+ this.setUrl(fixedUrl);
429
+ }
430
+ }
431
+ if (checkAccessibility && fixedUrl?.match(/^https?:\/\//i)) {
432
+ if (typeof fetch === 'undefined') {
433
+ issues.push('Network validation unavailable: fetch API not supported in this environment');
434
+ }
435
+ else {
436
+ try {
437
+ const controller = new AbortController();
438
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
439
+ const response = await fetch(fixedUrl, {
440
+ method: 'HEAD',
441
+ signal: controller.signal,
442
+ redirect: 'follow',
443
+ });
444
+ clearTimeout(timeoutId);
445
+ if (!response.ok) {
446
+ issues.push(`HTTP ${response.status}: ${response.statusText || 'Error'}`);
447
+ }
448
+ }
449
+ catch (error) {
450
+ const isErrorWithName = (err) => {
451
+ return typeof err === 'object' && err !== null && 'name' in err;
452
+ };
453
+ const isErrorWithMessage = (err) => {
454
+ return typeof err === 'object' && err !== null && 'message' in err;
455
+ };
456
+ if (isErrorWithName(error) && error.name === 'AbortError') {
457
+ issues.push(`Timeout after ${timeout}ms`);
458
+ }
459
+ else if (isErrorWithMessage(error) && error.message?.includes('fetch')) {
460
+ issues.push(`Unreachable: ${error.message}`);
461
+ }
462
+ else if (isErrorWithMessage(error)) {
463
+ issues.push(`Network error: ${error.message}`);
464
+ }
465
+ else {
466
+ issues.push('Network error: Unknown error');
467
+ }
468
+ }
469
+ }
470
+ }
471
+ return {
472
+ valid: issues.length === 0,
473
+ issues,
474
+ fixed,
475
+ originalUrl,
476
+ fixedUrl: fixedUrl !== originalUrl ? fixedUrl : undefined,
477
+ };
478
+ }
479
+ resetToStandardFormatting() {
480
+ const standardFormatting = {
481
+ font: 'Verdana',
482
+ color: '0000FF',
483
+ underline: 'single',
484
+ bold: false,
485
+ italic: false,
486
+ strike: false,
487
+ };
488
+ this.setFormatting(standardFormatting);
489
+ return this;
490
+ }
491
+ isExternal() {
492
+ return this.url !== undefined;
493
+ }
494
+ isInternal() {
495
+ return this.anchor !== undefined;
496
+ }
497
+ clone() {
498
+ const cloned = new Hyperlink({
499
+ url: this.url,
500
+ anchor: this.anchor,
501
+ text: this.text,
502
+ tooltip: this.tooltip,
503
+ relationshipId: this.relationshipId,
504
+ formatting: { ...this.formatting },
505
+ tgtFrame: this.tgtFrame,
506
+ history: this.history,
507
+ docLocation: this.docLocation,
508
+ });
509
+ if (this.run) {
510
+ cloned.run = new Run(this.run.getText(), { ...this.run.getFormatting() });
511
+ const existingRPrChange = this.run.getPropertyChangeRevision();
512
+ if (existingRPrChange) {
513
+ cloned.run.setPropertyChangeRevision({ ...existingRPrChange });
514
+ }
515
+ }
516
+ return cloned;
517
+ }
518
+ toXML() {
519
+ if (!this.url && !this.anchor && !this.relationshipId) {
520
+ throw new Error('CRITICAL: Hyperlink must have either a URL (external link), anchor (internal link), or relationshipId. ' +
521
+ 'Cannot generate valid XML for hyperlink without destination.');
522
+ }
523
+ if (this.url && !this.relationshipId) {
524
+ throw new Error(`CRITICAL: External hyperlink to "${this.url}" is missing relationship ID. ` +
525
+ `This would create an invalid OpenXML document per ECMA-376 §17.16.22. ` +
526
+ `Solution: Use Document.save() which automatically registers relationships, ` +
527
+ `or manually call relationshipManager.addHyperlink(url) and set the relationship ID.`);
528
+ }
529
+ const attributes = {};
530
+ if (this.relationshipId) {
531
+ attributes['r:id'] = this.relationshipId;
532
+ }
533
+ if (this.anchor) {
534
+ attributes['w:anchor'] = this.anchor;
535
+ }
536
+ if (this.tooltip) {
537
+ attributes['w:tooltip'] = this.tooltip;
538
+ }
539
+ if (this.tgtFrame) {
540
+ attributes['w:tgtFrame'] = this.tgtFrame;
541
+ }
542
+ if (this.history !== undefined) {
543
+ attributes['w:history'] = this.history;
544
+ }
545
+ if (this.docLocation) {
546
+ attributes['w:docLocation'] = this.docLocation;
547
+ }
548
+ if (this._isEmpty) {
549
+ return {
550
+ name: 'w:hyperlink',
551
+ attributes,
552
+ children: [],
553
+ };
554
+ }
555
+ const runXml = this.run.toXML();
556
+ return {
557
+ name: 'w:hyperlink',
558
+ attributes,
559
+ children: [runXml],
560
+ };
561
+ }
562
+ static createExternal(url, text, formatting) {
563
+ return new Hyperlink({ url, text, formatting });
564
+ }
565
+ static createInternal(anchor, text, formatting) {
566
+ return new Hyperlink({ anchor, text, formatting });
567
+ }
568
+ static createWebLink(url, text, formatting) {
569
+ return new Hyperlink({
570
+ url,
571
+ text: text || url,
572
+ formatting,
573
+ });
574
+ }
575
+ static createEmail(email, text, formatting) {
576
+ return new Hyperlink({
577
+ url: `mailto:${email}`,
578
+ text: text || email,
579
+ formatting,
580
+ });
581
+ }
582
+ static create(properties) {
583
+ return new Hyperlink(properties);
584
+ }
585
+ }
586
+ //# sourceMappingURL=Hyperlink.js.map