docxmlater 11.0.10 → 12.1.0

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 (361) hide show
  1. package/README.md +53 -13
  2. package/dist/core/Document.d.ts +29 -3
  3. package/dist/core/Document.d.ts.map +1 -1
  4. package/dist/core/Document.js +733 -170
  5. package/dist/core/Document.js.map +1 -1
  6. package/dist/core/DocumentGenerator.d.ts +1 -0
  7. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  8. package/dist/core/DocumentGenerator.js +77 -25
  9. package/dist/core/DocumentGenerator.js.map +1 -1
  10. package/dist/core/DocumentParser.d.ts +7 -3
  11. package/dist/core/DocumentParser.d.ts.map +1 -1
  12. package/dist/core/DocumentParser.js +427 -81
  13. package/dist/core/DocumentParser.js.map +1 -1
  14. package/dist/core/RelationshipManager.d.ts.map +1 -1
  15. package/dist/core/RelationshipManager.js +2 -2
  16. package/dist/core/RelationshipManager.js.map +1 -1
  17. package/dist/elements/Comment.d.ts +15 -1
  18. package/dist/elements/Comment.d.ts.map +1 -1
  19. package/dist/elements/Comment.js +67 -12
  20. package/dist/elements/Comment.js.map +1 -1
  21. package/dist/elements/CommentManager.d.ts +4 -0
  22. package/dist/elements/CommentManager.d.ts.map +1 -1
  23. package/dist/elements/CommentManager.js +74 -16
  24. package/dist/elements/CommentManager.js.map +1 -1
  25. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  26. package/dist/elements/EndnoteManager.js.map +1 -1
  27. package/dist/elements/Field.d.ts +10 -1
  28. package/dist/elements/Field.d.ts.map +1 -1
  29. package/dist/elements/Field.js +76 -34
  30. package/dist/elements/Field.js.map +1 -1
  31. package/dist/elements/FieldHelpers.d.ts +1 -0
  32. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  33. package/dist/elements/FieldHelpers.js +8 -4
  34. package/dist/elements/FieldHelpers.js.map +1 -1
  35. package/dist/elements/Footer.d.ts +3 -1
  36. package/dist/elements/Footer.d.ts.map +1 -1
  37. package/dist/elements/Footer.js +39 -53
  38. package/dist/elements/Footer.js.map +1 -1
  39. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  40. package/dist/elements/FootnoteManager.js.map +1 -1
  41. package/dist/elements/Header.d.ts +3 -1
  42. package/dist/elements/Header.d.ts.map +1 -1
  43. package/dist/elements/Header.js +39 -53
  44. package/dist/elements/Header.js.map +1 -1
  45. package/dist/elements/HeaderFooterManager.d.ts +4 -2
  46. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  47. package/dist/elements/HeaderFooterManager.js +36 -6
  48. package/dist/elements/HeaderFooterManager.js.map +1 -1
  49. package/dist/elements/Hyperlink.d.ts +6 -1
  50. package/dist/elements/Hyperlink.d.ts.map +1 -1
  51. package/dist/elements/Hyperlink.js +69 -44
  52. package/dist/elements/Hyperlink.js.map +1 -1
  53. package/dist/elements/Image.d.ts.map +1 -1
  54. package/dist/elements/Image.js +33 -6
  55. package/dist/elements/Image.js.map +1 -1
  56. package/dist/elements/ImageManager.d.ts +1 -0
  57. package/dist/elements/ImageManager.d.ts.map +1 -1
  58. package/dist/elements/ImageManager.js +11 -0
  59. package/dist/elements/ImageManager.js.map +1 -1
  60. package/dist/elements/Paragraph.d.ts +3 -0
  61. package/dist/elements/Paragraph.d.ts.map +1 -1
  62. package/dist/elements/Paragraph.js +91 -26
  63. package/dist/elements/Paragraph.js.map +1 -1
  64. package/dist/elements/Revision.d.ts +4 -0
  65. package/dist/elements/Revision.d.ts.map +1 -1
  66. package/dist/elements/Revision.js +369 -29
  67. package/dist/elements/Revision.js.map +1 -1
  68. package/dist/elements/Run.d.ts +1 -0
  69. package/dist/elements/Run.d.ts.map +1 -1
  70. package/dist/elements/Run.js +24 -4
  71. package/dist/elements/Run.js.map +1 -1
  72. package/dist/elements/Section.d.ts.map +1 -1
  73. package/dist/elements/Section.js +17 -7
  74. package/dist/elements/Section.js.map +1 -1
  75. package/dist/elements/Shape.d.ts.map +1 -1
  76. package/dist/elements/Shape.js +50 -42
  77. package/dist/elements/Shape.js.map +1 -1
  78. package/dist/elements/StructuredDocumentTag.d.ts +9 -1
  79. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  80. package/dist/elements/StructuredDocumentTag.js +46 -6
  81. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  82. package/dist/elements/Table.d.ts +2 -0
  83. package/dist/elements/Table.d.ts.map +1 -1
  84. package/dist/elements/Table.js +90 -42
  85. package/dist/elements/Table.js.map +1 -1
  86. package/dist/elements/TableCell.d.ts +1 -0
  87. package/dist/elements/TableCell.d.ts.map +1 -1
  88. package/dist/elements/TableCell.js +32 -13
  89. package/dist/elements/TableCell.js.map +1 -1
  90. package/dist/elements/TableOfContents.d.ts.map +1 -1
  91. package/dist/elements/TableOfContents.js +5 -7
  92. package/dist/elements/TableOfContents.js.map +1 -1
  93. package/dist/elements/TableRow.d.ts +1 -0
  94. package/dist/elements/TableRow.d.ts.map +1 -1
  95. package/dist/elements/TableRow.js +16 -1
  96. package/dist/elements/TableRow.js.map +1 -1
  97. package/dist/elements/TextBox.d.ts.map +1 -1
  98. package/dist/elements/TextBox.js +55 -42
  99. package/dist/elements/TextBox.js.map +1 -1
  100. package/dist/esm/core/Document.js +735 -172
  101. package/dist/esm/core/Document.js.map +1 -1
  102. package/dist/esm/core/DocumentGenerator.js +77 -25
  103. package/dist/esm/core/DocumentGenerator.js.map +1 -1
  104. package/dist/esm/core/DocumentParser.js +427 -81
  105. package/dist/esm/core/DocumentParser.js.map +1 -1
  106. package/dist/esm/core/RelationshipManager.js +2 -2
  107. package/dist/esm/core/RelationshipManager.js.map +1 -1
  108. package/dist/esm/elements/Comment.js +67 -12
  109. package/dist/esm/elements/Comment.js.map +1 -1
  110. package/dist/esm/elements/CommentManager.js +74 -16
  111. package/dist/esm/elements/CommentManager.js.map +1 -1
  112. package/dist/esm/elements/EndnoteManager.js.map +1 -1
  113. package/dist/esm/elements/Field.js +77 -35
  114. package/dist/esm/elements/Field.js.map +1 -1
  115. package/dist/esm/elements/FieldHelpers.js +7 -4
  116. package/dist/esm/elements/FieldHelpers.js.map +1 -1
  117. package/dist/esm/elements/Footer.js +39 -53
  118. package/dist/esm/elements/Footer.js.map +1 -1
  119. package/dist/esm/elements/FootnoteManager.js.map +1 -1
  120. package/dist/esm/elements/Header.js +39 -53
  121. package/dist/esm/elements/Header.js.map +1 -1
  122. package/dist/esm/elements/HeaderFooterManager.js +36 -6
  123. package/dist/esm/elements/HeaderFooterManager.js.map +1 -1
  124. package/dist/esm/elements/Hyperlink.js +69 -44
  125. package/dist/esm/elements/Hyperlink.js.map +1 -1
  126. package/dist/esm/elements/Image.js +33 -6
  127. package/dist/esm/elements/Image.js.map +1 -1
  128. package/dist/esm/elements/ImageManager.js +11 -0
  129. package/dist/esm/elements/ImageManager.js.map +1 -1
  130. package/dist/esm/elements/Paragraph.js +91 -26
  131. package/dist/esm/elements/Paragraph.js.map +1 -1
  132. package/dist/esm/elements/Revision.js +369 -29
  133. package/dist/esm/elements/Revision.js.map +1 -1
  134. package/dist/esm/elements/Run.js +24 -4
  135. package/dist/esm/elements/Run.js.map +1 -1
  136. package/dist/esm/elements/Section.js +17 -7
  137. package/dist/esm/elements/Section.js.map +1 -1
  138. package/dist/esm/elements/Shape.js +50 -42
  139. package/dist/esm/elements/Shape.js.map +1 -1
  140. package/dist/esm/elements/StructuredDocumentTag.js +46 -6
  141. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -1
  142. package/dist/esm/elements/Table.js +90 -42
  143. package/dist/esm/elements/Table.js.map +1 -1
  144. package/dist/esm/elements/TableCell.js +32 -13
  145. package/dist/esm/elements/TableCell.js.map +1 -1
  146. package/dist/esm/elements/TableOfContents.js +5 -7
  147. package/dist/esm/elements/TableOfContents.js.map +1 -1
  148. package/dist/esm/elements/TableRow.js +16 -1
  149. package/dist/esm/elements/TableRow.js.map +1 -1
  150. package/dist/esm/elements/TextBox.js +55 -42
  151. package/dist/esm/elements/TextBox.js.map +1 -1
  152. package/dist/esm/formatting/AbstractNumbering.js +1 -1
  153. package/dist/esm/formatting/AbstractNumbering.js.map +1 -1
  154. package/dist/esm/formatting/NumberingLevel.js +8 -6
  155. package/dist/esm/formatting/NumberingLevel.js.map +1 -1
  156. package/dist/esm/formatting/NumberingManager.js +16 -1
  157. package/dist/esm/formatting/NumberingManager.js.map +1 -1
  158. package/dist/esm/formatting/Style.js +14 -0
  159. package/dist/esm/formatting/Style.js.map +1 -1
  160. package/dist/esm/formatting/StylesManager.js +14 -2
  161. package/dist/esm/formatting/StylesManager.js.map +1 -1
  162. package/dist/esm/helpers/CleanupHelper.js +103 -26
  163. package/dist/esm/helpers/CleanupHelper.js.map +1 -1
  164. package/dist/esm/images/ImageOptimizer.js +52 -4
  165. package/dist/esm/images/ImageOptimizer.js.map +1 -1
  166. package/dist/esm/index.js +1 -0
  167. package/dist/esm/index.js.map +1 -1
  168. package/dist/esm/internal.js +1 -1
  169. package/dist/esm/internal.js.map +1 -1
  170. package/dist/esm/processors/CompatibilityUpgrader.js +7 -1
  171. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -1
  172. package/dist/esm/processors/InMemoryRevisionAcceptor.js +134 -13
  173. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -1
  174. package/dist/esm/processors/RevisionWalker.js +223 -39
  175. package/dist/esm/processors/RevisionWalker.js.map +1 -1
  176. package/dist/esm/processors/SelectiveRevisionAcceptor.js +116 -17
  177. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -1
  178. package/dist/esm/processors/acceptRevisions.js +20 -11
  179. package/dist/esm/processors/acceptRevisions.js.map +1 -1
  180. package/dist/esm/processors/cnfStyleDecoder.js +7 -7
  181. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -1
  182. package/dist/esm/processors/stripTrackedChanges.js +16 -5
  183. package/dist/esm/processors/stripTrackedChanges.js.map +1 -1
  184. package/dist/esm/utils/deepClone.js +24 -11
  185. package/dist/esm/utils/deepClone.js.map +1 -1
  186. package/dist/esm/utils/units.js +1 -1
  187. package/dist/esm/utils/units.js.map +1 -1
  188. package/dist/esm/utils/validation.js +11 -23
  189. package/dist/esm/utils/validation.js.map +1 -1
  190. package/dist/esm/utils/xmlSanitization.js +131 -7
  191. package/dist/esm/utils/xmlSanitization.js.map +1 -1
  192. package/dist/esm/validation/RevisionAutoFixer.js +69 -55
  193. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -1
  194. package/dist/esm/validation/RevisionValidator.js +24 -20
  195. package/dist/esm/validation/RevisionValidator.js.map +1 -1
  196. package/dist/esm/xml/XMLBuilder.js +52 -20
  197. package/dist/esm/xml/XMLBuilder.js.map +1 -1
  198. package/dist/esm/xml/XMLParser.js +55 -13
  199. package/dist/esm/xml/XMLParser.js.map +1 -1
  200. package/dist/esm/zip/ZipHandler.js +37 -13
  201. package/dist/esm/zip/ZipHandler.js.map +1 -1
  202. package/dist/esm/zip/ZipReader.js +53 -6
  203. package/dist/esm/zip/ZipReader.js.map +1 -1
  204. package/dist/esm/zip/errors.js +7 -0
  205. package/dist/esm/zip/errors.js.map +1 -1
  206. package/dist/esm/zip/types.js +4 -0
  207. package/dist/esm/zip/types.js.map +1 -1
  208. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  209. package/dist/formatting/AbstractNumbering.js +1 -1
  210. package/dist/formatting/AbstractNumbering.js.map +1 -1
  211. package/dist/formatting/NumberingLevel.d.ts +1 -1
  212. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  213. package/dist/formatting/NumberingLevel.js +8 -6
  214. package/dist/formatting/NumberingLevel.js.map +1 -1
  215. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  216. package/dist/formatting/NumberingManager.js +16 -1
  217. package/dist/formatting/NumberingManager.js.map +1 -1
  218. package/dist/formatting/Style.d.ts.map +1 -1
  219. package/dist/formatting/Style.js +14 -0
  220. package/dist/formatting/Style.js.map +1 -1
  221. package/dist/formatting/StylesManager.d.ts +2 -0
  222. package/dist/formatting/StylesManager.d.ts.map +1 -1
  223. package/dist/formatting/StylesManager.js +14 -2
  224. package/dist/formatting/StylesManager.js.map +1 -1
  225. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  226. package/dist/helpers/CleanupHelper.js +103 -26
  227. package/dist/helpers/CleanupHelper.js.map +1 -1
  228. package/dist/images/ImageOptimizer.d.ts.map +1 -1
  229. package/dist/images/ImageOptimizer.js +52 -4
  230. package/dist/images/ImageOptimizer.js.map +1 -1
  231. package/dist/index.d.ts +3 -1
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +4 -2
  234. package/dist/index.js.map +1 -1
  235. package/dist/internal.d.ts +1 -1
  236. package/dist/internal.d.ts.map +1 -1
  237. package/dist/internal.js +2 -1
  238. package/dist/internal.js.map +1 -1
  239. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -1
  240. package/dist/processors/CompatibilityUpgrader.js +7 -1
  241. package/dist/processors/CompatibilityUpgrader.js.map +1 -1
  242. package/dist/processors/InMemoryRevisionAcceptor.d.ts +1 -0
  243. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -1
  244. package/dist/processors/InMemoryRevisionAcceptor.js +135 -13
  245. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -1
  246. package/dist/processors/RevisionWalker.d.ts +9 -3
  247. package/dist/processors/RevisionWalker.d.ts.map +1 -1
  248. package/dist/processors/RevisionWalker.js +223 -39
  249. package/dist/processors/RevisionWalker.js.map +1 -1
  250. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -1
  251. package/dist/processors/SelectiveRevisionAcceptor.js +116 -17
  252. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -1
  253. package/dist/processors/acceptRevisions.d.ts +1 -0
  254. package/dist/processors/acceptRevisions.d.ts.map +1 -1
  255. package/dist/processors/acceptRevisions.js +21 -11
  256. package/dist/processors/acceptRevisions.js.map +1 -1
  257. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -1
  258. package/dist/processors/cnfStyleDecoder.js +7 -7
  259. package/dist/processors/cnfStyleDecoder.js.map +1 -1
  260. package/dist/processors/stripTrackedChanges.d.ts.map +1 -1
  261. package/dist/processors/stripTrackedChanges.js +16 -5
  262. package/dist/processors/stripTrackedChanges.js.map +1 -1
  263. package/dist/utils/deepClone.d.ts.map +1 -1
  264. package/dist/utils/deepClone.js +24 -11
  265. package/dist/utils/deepClone.js.map +1 -1
  266. package/dist/utils/units.d.ts.map +1 -1
  267. package/dist/utils/units.js +1 -1
  268. package/dist/utils/units.js.map +1 -1
  269. package/dist/utils/validation.d.ts.map +1 -1
  270. package/dist/utils/validation.js +11 -23
  271. package/dist/utils/validation.js.map +1 -1
  272. package/dist/utils/xmlSanitization.d.ts +2 -0
  273. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  274. package/dist/utils/xmlSanitization.js +133 -7
  275. package/dist/utils/xmlSanitization.js.map +1 -1
  276. package/dist/validation/RevisionAutoFixer.d.ts +6 -2
  277. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  278. package/dist/validation/RevisionAutoFixer.js +68 -54
  279. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  280. package/dist/validation/RevisionValidator.d.ts +2 -0
  281. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  282. package/dist/validation/RevisionValidator.js +26 -21
  283. package/dist/validation/RevisionValidator.js.map +1 -1
  284. package/dist/xml/XMLBuilder.d.ts +1 -0
  285. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  286. package/dist/xml/XMLBuilder.js +52 -20
  287. package/dist/xml/XMLBuilder.js.map +1 -1
  288. package/dist/xml/XMLParser.d.ts +1 -0
  289. package/dist/xml/XMLParser.d.ts.map +1 -1
  290. package/dist/xml/XMLParser.js +55 -13
  291. package/dist/xml/XMLParser.js.map +1 -1
  292. package/dist/zip/ZipHandler.d.ts.map +1 -1
  293. package/dist/zip/ZipHandler.js +37 -13
  294. package/dist/zip/ZipHandler.js.map +1 -1
  295. package/dist/zip/ZipReader.d.ts.map +1 -1
  296. package/dist/zip/ZipReader.js +52 -5
  297. package/dist/zip/ZipReader.js.map +1 -1
  298. package/dist/zip/errors.d.ts +3 -0
  299. package/dist/zip/errors.d.ts.map +1 -1
  300. package/dist/zip/errors.js +9 -1
  301. package/dist/zip/errors.js.map +1 -1
  302. package/dist/zip/types.d.ts +4 -0
  303. package/dist/zip/types.d.ts.map +1 -1
  304. package/dist/zip/types.js +4 -0
  305. package/dist/zip/types.js.map +1 -1
  306. package/package.json +2 -2
  307. package/src/core/Document.ts +1184 -242
  308. package/src/core/DocumentGenerator.ts +106 -26
  309. package/src/core/DocumentParser.ts +681 -114
  310. package/src/core/RelationshipManager.ts +446 -442
  311. package/src/elements/Comment.ts +123 -18
  312. package/src/elements/CommentManager.ts +121 -22
  313. package/src/elements/EndnoteManager.ts +4 -1
  314. package/src/elements/Field.ts +134 -43
  315. package/src/elements/FieldHelpers.ts +20 -4
  316. package/src/elements/Footer.ts +62 -67
  317. package/src/elements/FootnoteManager.ts +4 -1
  318. package/src/elements/Header.ts +62 -67
  319. package/src/elements/HeaderFooterManager.ts +56 -8
  320. package/src/elements/Hyperlink.ts +150 -55
  321. package/src/elements/Image.ts +51 -7
  322. package/src/elements/ImageManager.ts +24 -0
  323. package/src/elements/Paragraph.ts +161 -40
  324. package/src/elements/Revision.ts +446 -47
  325. package/src/elements/Run.ts +44 -6
  326. package/src/elements/Section.ts +25 -9
  327. package/src/elements/Shape.ts +52 -44
  328. package/src/elements/StructuredDocumentTag.ts +83 -8
  329. package/src/elements/Table.ts +151 -50
  330. package/src/elements/TableCell.ts +57 -17
  331. package/src/elements/TableOfContents.ts +10 -9
  332. package/src/elements/TableRow.ts +35 -3
  333. package/src/elements/TextBox.ts +58 -43
  334. package/src/formatting/AbstractNumbering.ts +4 -2
  335. package/src/formatting/NumberingLevel.ts +50 -12
  336. package/src/formatting/NumberingManager.ts +32 -3
  337. package/src/formatting/Style.ts +14 -0
  338. package/src/formatting/StylesManager.ts +29 -2
  339. package/src/helpers/CleanupHelper.ts +122 -30
  340. package/src/images/ImageOptimizer.ts +64 -5
  341. package/src/index.ts +7 -0
  342. package/src/internal.ts +1 -0
  343. package/src/processors/CompatibilityUpgrader.ts +15 -2
  344. package/src/processors/InMemoryRevisionAcceptor.ts +276 -17
  345. package/src/processors/RevisionWalker.ts +390 -46
  346. package/src/processors/SelectiveRevisionAcceptor.ts +164 -28
  347. package/src/processors/acceptRevisions.ts +67 -17
  348. package/src/processors/cnfStyleDecoder.ts +18 -12
  349. package/src/processors/stripTrackedChanges.ts +47 -10
  350. package/src/utils/deepClone.ts +48 -14
  351. package/src/utils/units.ts +3 -1
  352. package/src/utils/validation.ts +30 -32
  353. package/src/utils/xmlSanitization.ts +218 -22
  354. package/src/validation/RevisionAutoFixer.ts +109 -65
  355. package/src/validation/RevisionValidator.ts +48 -23
  356. package/src/xml/XMLBuilder.ts +82 -22
  357. package/src/xml/XMLParser.ts +87 -20
  358. package/src/zip/ZipHandler.ts +61 -21
  359. package/src/zip/ZipReader.ts +135 -13
  360. package/src/zip/errors.ts +15 -0
  361. package/src/zip/types.ts +44 -2
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderFooterManager.js","sourceRoot":"","sources":["../../src/elements/HeaderFooterManager.ts"],"names":[],"mappings":"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","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"]}
1
+ {"version":3,"file":"HeaderFooterManager.js","sourceRoot":"","sources":["../../src/elements/HeaderFooterManager.ts"],"names":[],"mappings":"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","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 * @param originalFilename Part name from the relationship target for loaded\n * headers — kept as-is so saved content lands where the relationship points\n * @returns The filename assigned to this header\n */\n registerHeader(header: Header, relationshipId: string, originalFilename?: string): string {\n // Check if already registered\n const existing = this.headers.get(header);\n if (existing) {\n return existing.filename;\n }\n\n let number: number;\n let filename: string;\n if (originalFilename) {\n filename = originalFilename;\n const digits = /(\\d+)\\.xml$/i.exec(originalFilename)?.[1];\n number = digits ? parseInt(digits, 10) : this.nextHeaderNumber;\n // Keep the counter ahead of parsed part names so generated names never collide\n if (number >= this.nextHeaderNumber) {\n this.nextHeaderNumber = number + 1;\n }\n } else {\n number = this.nextHeaderNumber++;\n filename = header.getFilename(number);\n }\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 * @param originalFilename Part name from the relationship target for loaded\n * footers — kept as-is so saved content lands where the relationship points\n * @returns The filename assigned to this footer\n */\n registerFooter(footer: Footer, relationshipId: string, originalFilename?: string): string {\n // Check if already registered\n const existing = this.footers.get(footer);\n if (existing) {\n return existing.filename;\n }\n\n let number: number;\n let filename: string;\n if (originalFilename) {\n filename = originalFilename;\n const digits = /(\\d+)\\.xml$/i.exec(originalFilename)?.[1];\n number = digits ? parseInt(digits, 10) : this.nextFooterNumber;\n // Keep the counter ahead of parsed part names so generated names never collide\n if (number >= this.nextFooterNumber) {\n this.nextFooterNumber = number + 1;\n }\n } else {\n number = this.nextFooterNumber++;\n filename = footer.getFilename(number);\n }\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 * Returns the part filename this header has, or would receive when\n * registered. Does not consume a sequence number — callers can create the\n * relationship targeting the same part name registerHeader() will assign.\n * @param header The header\n * @returns The current or upcoming filename\n */\n peekHeaderFilename(header: Header): string {\n return this.headers.get(header)?.filename ?? header.getFilename(this.nextHeaderNumber);\n }\n\n /**\n * Returns the part filename this footer has, or would receive when\n * registered. Does not consume a sequence number — callers can create the\n * relationship targeting the same part name registerFooter() will assign.\n * @param footer The footer\n * @returns The current or upcoming filename\n */\n peekFooterFilename(footer: Footer): string {\n return this.footers.get(footer)?.filename ?? footer.getFilename(this.nextFooterNumber);\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"]}
@@ -5,6 +5,7 @@ export interface HyperlinkProperties {
5
5
  anchor?: string;
6
6
  text?: string;
7
7
  formatting?: RunFormatting;
8
+ preserveFormatting?: boolean;
8
9
  tooltip?: string;
9
10
  relationshipId?: string;
10
11
  isEmpty?: boolean;
@@ -16,7 +17,7 @@ export declare class Hyperlink {
16
17
  private url?;
17
18
  private anchor?;
18
19
  private text;
19
- private run;
20
+ private runs;
20
21
  private tooltip?;
21
22
  private relationshipId?;
22
23
  private formatting;
@@ -43,8 +44,11 @@ export declare class Hyperlink {
43
44
  getDocLocation(): string | undefined;
44
45
  setDocLocation(docLocation: string | undefined): this;
45
46
  getText(): string;
47
+ private replaceRunText;
46
48
  setText(text: string): this;
47
49
  setRun(run: Run): this;
50
+ setRuns(runs: Run[]): this;
51
+ getRuns(): Run[];
48
52
  getTooltip(): string | undefined;
49
53
  setTooltip(tooltip: string): this;
50
54
  getRelationshipId(): string | undefined;
@@ -55,6 +59,7 @@ export declare class Hyperlink {
55
59
  setFormatting(formatting: RunFormatting, options?: {
56
60
  replace?: boolean;
57
61
  }): this;
62
+ private patchRunFormatting;
58
63
  getFormatting(): this;
59
64
  getRawFormatting(): RunFormatting;
60
65
  getColor(): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Hyperlink.d.ts","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Hyperlink.d.ts","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ class Hyperlink {
9
9
  url;
10
10
  anchor;
11
11
  text;
12
- run;
12
+ runs;
13
13
  tooltip;
14
14
  relationshipId;
15
15
  formatting;
@@ -37,7 +37,7 @@ class Hyperlink {
37
37
  if (this._isEmpty) {
38
38
  this.text = '';
39
39
  this.formatting = {};
40
- this.run = new Run_js_1.Run('', {});
40
+ this.runs = [new Run_js_1.Run('', {})];
41
41
  return;
42
42
  }
43
43
  this.text = properties.text || this.url || 'Link';
@@ -49,14 +49,16 @@ class Hyperlink {
49
49
  if (validation.cleanedText) {
50
50
  this.text = validation.cleanedText;
51
51
  }
52
- this.formatting = {
53
- font: 'Verdana',
54
- size: 12,
55
- color: '0000FF',
56
- underline: 'single',
57
- ...properties.formatting,
58
- };
59
- this.run = new Run_js_1.Run(this.text, this.formatting);
52
+ this.formatting = properties.preserveFormatting
53
+ ? { ...properties.formatting }
54
+ : {
55
+ font: 'Verdana',
56
+ size: 12,
57
+ color: '0000FF',
58
+ underline: 'single',
59
+ ...properties.formatting,
60
+ };
61
+ this.runs = [new Run_js_1.Run(this.text, this.formatting)];
60
62
  }
61
63
  _setTrackingContext(context) {
62
64
  this.trackingContext = context;
@@ -91,7 +93,7 @@ class Hyperlink {
91
93
  return;
92
94
  const revisionId = this.trackingContext.getRevisionManager().consumeNextId();
93
95
  const author = this.trackingContext.getAuthor();
94
- this.run.setPropertyChangeRevision({
96
+ this.runs[0].setPropertyChangeRevision({
95
97
  id: revisionId,
96
98
  author,
97
99
  date: new Date(),
@@ -135,7 +137,12 @@ class Hyperlink {
135
137
  return this;
136
138
  }
137
139
  getText() {
138
- return this.run.getText();
140
+ return this.runs.map((run) => run.getText()).join('');
141
+ }
142
+ replaceRunText(text) {
143
+ const first = this.runs[0];
144
+ first.setText(text);
145
+ this.runs = [first];
139
146
  }
140
147
  setText(text) {
141
148
  const validation = (0, validation_js_1.validateRunText)(text, {
@@ -143,8 +150,9 @@ class Hyperlink {
143
150
  autoClean: this.formatting.cleanXmlFromText !== false,
144
151
  warnToConsole: true,
145
152
  });
146
- const cleanedText = validation.cleanedText || text;
153
+ const cleanedText = validation.cleanedText ?? text;
147
154
  const previousValue = this.text;
155
+ this._isEmpty = false;
148
156
  if (previousValue === cleanedText) {
149
157
  return this;
150
158
  }
@@ -152,7 +160,7 @@ class Hyperlink {
152
160
  const author = this.trackingContext.getAuthor();
153
161
  const oldHyperlink = this.clone();
154
162
  this.text = cleanedText;
155
- this.run.setText(cleanedText);
163
+ this.replaceRunText(cleanedText);
156
164
  const deletion = Revision_js_1.Revision.createDeletion(author, [oldHyperlink]);
157
165
  const insertion = Revision_js_1.Revision.createInsertion(author, [this]);
158
166
  this._parentParagraph.replaceContent(this, [deletion, insertion]);
@@ -161,14 +169,25 @@ class Hyperlink {
161
169
  return this;
162
170
  }
163
171
  this.text = cleanedText;
164
- this.run.setText(cleanedText);
172
+ this.replaceRunText(cleanedText);
165
173
  return this;
166
174
  }
167
175
  setRun(run) {
168
- this.run = run;
176
+ this.runs = [run];
169
177
  this.text = run.getText();
170
178
  return this;
171
179
  }
180
+ setRuns(runs) {
181
+ if (runs.length === 0) {
182
+ return this;
183
+ }
184
+ this.runs = [...runs];
185
+ this.text = this.getText();
186
+ return this;
187
+ }
188
+ getRuns() {
189
+ return [...this.runs];
190
+ }
172
191
  getTooltip() {
173
192
  return this.tooltip;
174
193
  }
@@ -200,7 +219,7 @@ class Hyperlink {
200
219
  }
201
220
  setUrl(url) {
202
221
  if (!url && !this.anchor) {
203
- throw new Error(`Cannot set URL to undefined: Hyperlink "${this.run.getText()}" has no anchor. ` +
222
+ throw new Error(`Cannot set URL to undefined: Hyperlink "${this.getText()}" has no anchor. ` +
204
223
  `Clearing the URL would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
205
224
  `Either provide a new URL or delete the hyperlink entirely.`);
206
225
  }
@@ -213,9 +232,9 @@ class Hyperlink {
213
232
  const oldHyperlink = this.clone();
214
233
  this.url = url;
215
234
  this.relationshipId = undefined;
216
- if (this.run.getText() === oldUrl) {
235
+ if (this.getText() === oldUrl) {
217
236
  this.text = url || this.anchor || 'Link';
218
- this.run.setText(this.text);
237
+ this.replaceRunText(this.text);
219
238
  }
220
239
  const deletion = Revision_js_1.Revision.createDeletion(author, [oldHyperlink]);
221
240
  const insertion = Revision_js_1.Revision.createInsertion(author, [this]);
@@ -225,15 +244,15 @@ class Hyperlink {
225
244
  }
226
245
  this.url = url;
227
246
  this.relationshipId = undefined;
228
- if (this.run.getText() === oldUrl) {
247
+ if (this.getText() === oldUrl) {
229
248
  this.text = url || this.anchor || 'Link';
230
- this.run.setText(this.text);
249
+ this.replaceRunText(this.text);
231
250
  }
232
251
  return this;
233
252
  }
234
253
  setAnchor(anchor) {
235
254
  if (!anchor && !this.url) {
236
- throw new Error(`Cannot set anchor to undefined: Hyperlink "${this.run.getText()}" has no URL. ` +
255
+ throw new Error(`Cannot set anchor to undefined: Hyperlink "${this.getText()}" has no URL. ` +
237
256
  `Clearing the anchor would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
238
257
  `Either provide a new anchor or delete the hyperlink entirely.`);
239
258
  }
@@ -251,9 +270,9 @@ class Hyperlink {
251
270
  this.url = undefined;
252
271
  this.relationshipId = undefined;
253
272
  }
254
- if (this.run.getText() === oldAnchor) {
273
+ if (this.getText() === oldAnchor) {
255
274
  this.text = anchor || this.url || 'Link';
256
- this.run.setText(this.text);
275
+ this.replaceRunText(this.text);
257
276
  }
258
277
  const deletion = Revision_js_1.Revision.createDeletion(author, [oldHyperlink]);
259
278
  const insertion = Revision_js_1.Revision.createInsertion(author, [this]);
@@ -268,14 +287,14 @@ class Hyperlink {
268
287
  this.url = undefined;
269
288
  this.relationshipId = undefined;
270
289
  }
271
- if (this.run.getText() === oldAnchor) {
290
+ if (this.getText() === oldAnchor) {
272
291
  this.text = anchor || this.url || 'Link';
273
- this.run.setText(this.text);
292
+ this.replaceRunText(this.text);
274
293
  }
275
294
  return this;
276
295
  }
277
296
  getRun() {
278
- return this.run;
297
+ return this.runs[0];
279
298
  }
280
299
  setFormatting(formatting, options) {
281
300
  const previousFormatting = { ...this.formatting };
@@ -285,14 +304,16 @@ class Hyperlink {
285
304
  else {
286
305
  this.formatting = { ...this.formatting, ...formatting };
287
306
  }
288
- const currentText = this.run.getText();
289
- this.run = new Run_js_1.Run(currentText, this.formatting);
290
- this.text = currentText;
307
+ this.runs = this.runs.map((run) => Run_js_1.Run.createFromContent(run.getContent(), options?.replace ? { ...formatting } : { ...run.getFormatting(), ...formatting }));
308
+ this.text = this.getText();
291
309
  if (this.trackingContext?.isEnabled()) {
292
310
  this._applyFormattingRPrChange(previousFormatting);
293
311
  }
294
312
  return this;
295
313
  }
314
+ patchRunFormatting(patch) {
315
+ this.runs = this.runs.map((run) => Run_js_1.Run.createFromContent(run.getContent(), { ...run.getFormatting(), ...patch }));
316
+ }
296
317
  getFormatting() {
297
318
  return this;
298
319
  }
@@ -320,7 +341,7 @@ class Hyperlink {
320
341
  setColor(color) {
321
342
  const previousFormatting = { ...this.formatting };
322
343
  this.formatting.color = color;
323
- this.run = new Run_js_1.Run(this.text, this.formatting);
344
+ this.patchRunFormatting({ color });
324
345
  if (this.trackingContext?.isEnabled() && previousFormatting.color !== color) {
325
346
  this._applyFormattingRPrChange(previousFormatting);
326
347
  }
@@ -329,7 +350,7 @@ class Hyperlink {
329
350
  setUnderline(underline) {
330
351
  const previousFormatting = { ...this.formatting };
331
352
  this.formatting.underline = underline;
332
- this.run = new Run_js_1.Run(this.text, this.formatting);
353
+ this.patchRunFormatting({ underline });
333
354
  if (this.trackingContext?.isEnabled() && previousFormatting.underline !== underline) {
334
355
  this._applyFormattingRPrChange(previousFormatting);
335
356
  }
@@ -338,7 +359,7 @@ class Hyperlink {
338
359
  setBold(bold = true) {
339
360
  const previousFormatting = { ...this.formatting };
340
361
  this.formatting.bold = bold;
341
- this.run = new Run_js_1.Run(this.text, this.formatting);
362
+ this.patchRunFormatting({ bold });
342
363
  if (this.trackingContext?.isEnabled() && previousFormatting.bold !== bold) {
343
364
  this._applyFormattingRPrChange(previousFormatting);
344
365
  }
@@ -347,7 +368,7 @@ class Hyperlink {
347
368
  setItalic(italic = true) {
348
369
  const previousFormatting = { ...this.formatting };
349
370
  this.formatting.italic = italic;
350
- this.run = new Run_js_1.Run(this.text, this.formatting);
371
+ this.patchRunFormatting({ italic });
351
372
  if (this.trackingContext?.isEnabled() && previousFormatting.italic !== italic) {
352
373
  this._applyFormattingRPrChange(previousFormatting);
353
374
  }
@@ -356,7 +377,7 @@ class Hyperlink {
356
377
  setFont(font) {
357
378
  const previousFormatting = { ...this.formatting };
358
379
  this.formatting.font = font;
359
- this.run = new Run_js_1.Run(this.text, this.formatting);
380
+ this.patchRunFormatting({ font });
360
381
  if (this.trackingContext?.isEnabled() && previousFormatting.font !== font) {
361
382
  this._applyFormattingRPrChange(previousFormatting);
362
383
  }
@@ -365,7 +386,7 @@ class Hyperlink {
365
386
  setSize(size) {
366
387
  const previousFormatting = { ...this.formatting };
367
388
  this.formatting.size = size;
368
- this.run = new Run_js_1.Run(this.text, this.formatting);
389
+ this.patchRunFormatting({ size });
369
390
  if (this.trackingContext?.isEnabled() && previousFormatting.size !== size) {
370
391
  this._applyFormattingRPrChange(previousFormatting);
371
392
  }
@@ -423,8 +444,9 @@ class Hyperlink {
423
444
  fixedUrl = fixedUrl.replace(/\/$/, '');
424
445
  fixed.push('Removed trailing slash');
425
446
  }
447
+ const beforeUpgrade = fixedUrl;
426
448
  fixedUrl = fixedUrl.replace(/^http:\/\//i, 'https://');
427
- if (fixedUrl !== this.url && fixedUrl.startsWith('https://')) {
449
+ if (fixedUrl !== beforeUpgrade) {
428
450
  fixed.push('Upgraded HTTP to HTTPS');
429
451
  }
430
452
  if (fixedUrl !== this.url) {
@@ -505,17 +527,21 @@ class Hyperlink {
505
527
  tooltip: this.tooltip,
506
528
  relationshipId: this.relationshipId,
507
529
  formatting: { ...this.formatting },
530
+ preserveFormatting: true,
508
531
  tgtFrame: this.tgtFrame,
509
532
  history: this.history,
510
533
  docLocation: this.docLocation,
534
+ isEmpty: this._isEmpty,
511
535
  });
512
- if (this.run) {
513
- cloned.run = new Run_js_1.Run(this.run.getText(), { ...this.run.getFormatting() });
514
- const existingRPrChange = this.run.getPropertyChangeRevision();
536
+ cloned.runs = this.runs.map((run) => {
537
+ const copy = run.clone();
538
+ const existingRPrChange = run.getPropertyChangeRevision();
515
539
  if (existingRPrChange) {
516
- cloned.run.setPropertyChangeRevision({ ...existingRPrChange });
540
+ copy.setPropertyChangeRevision({ ...existingRPrChange });
517
541
  }
518
- }
542
+ return copy;
543
+ });
544
+ cloned.text = cloned.getText();
519
545
  return cloned;
520
546
  }
521
547
  toXML() {
@@ -555,11 +581,10 @@ class Hyperlink {
555
581
  children: [],
556
582
  };
557
583
  }
558
- const runXml = this.run.toXML();
559
584
  return {
560
585
  name: 'w:hyperlink',
561
586
  attributes,
562
- children: [runXml],
587
+ children: this.runs.map((run) => run.toXML()),
563
588
  };
564
589
  }
565
590
  static createExternal(url, text, formatting) {