docxmlater 10.4.1 → 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 +74 -67
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +605 -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 +2056 -1073
  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 +461 -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 +2180 -617
  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
@@ -3,25 +3,25 @@
3
3
  * A run is the smallest unit of text formatting in a Word document
4
4
  */
5
5
 
6
- import { deepClone } from '../utils/deepClone';
7
- import { formatDateForXml } from '../utils/dateFormatting';
8
- import { isEqualFormatting } from '../utils/formatting';
9
- import { logSerialization, logTextDirection } from '../utils/diagnostics';
10
- import { defaultLogger } from '../utils/logger';
11
- import { normalizeColor, validateRunText } from '../utils/validation';
12
- import { pointsToHalfPoints } from '../utils/units';
13
- import { diffText, diffHasUnchangedParts } from '../utils/textDiff';
14
- import { getActiveConditionalsInPriorityOrder } from '../utils/cnfStyleDecoder';
15
- import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
6
+ import { deepClone } from '../utils/deepClone.js';
7
+ import { formatDateForXml } from '../utils/dateFormatting.js';
8
+ import { isEqualFormatting } from '../utils/formatting.js';
9
+ import { logSerialization, logTextDirection } from '../utils/diagnostics.js';
10
+ import { defaultLogger } from '../utils/logger.js';
11
+ import { normalizeColor, validateRunText } from '../utils/validation.js';
12
+ import { pointsToHalfPoints } from '../utils/units.js';
13
+ import { diffText, diffHasUnchangedParts } from '../utils/textDiff.js';
14
+ import { getActiveConditionalsInPriorityOrder } from '../processors/cnfStyleDecoder.js';
15
+ import { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';
16
16
  import {
17
17
  ShadingPattern as CommonShadingPattern,
18
18
  ShadingConfig,
19
19
  buildShadingAttributes,
20
- ExtendedBorderStyle,
21
- } from './CommonTypes';
22
- import type { RunPropertyChange } from './PropertyChangeTypes';
20
+ FullBorderStyle,
21
+ } from './CommonTypes.js';
22
+ import type { RunPropertyChange } from './PropertyChangeTypes.js';
23
23
  // Type-only import to avoid circular dependency (Revision imports Run)
24
- import type { Revision as RevisionType } from './Revision';
24
+ import type { Revision as RevisionType } from './Revision.js';
25
25
 
26
26
  /**
27
27
  * Run content element types
@@ -51,8 +51,10 @@ export type RunContentType =
51
51
  | 'symbol' // <w:sym/> - Symbol character with font and char code
52
52
  | 'positionTab' // <w:ptab/> - Absolute position tab
53
53
  | 'embeddedObject' // <w:object> - Embedded OLE object (preserved as raw XML)
54
- | 'footnoteReference' // <w:footnoteReference/> - Footnote reference marker
55
- | 'endnoteReference'; // <w:endnoteReference/> - Endnote reference marker
54
+ | 'footnoteReference' // <w:footnoteReference/> - Footnote reference marker (body side)
55
+ | 'endnoteReference' // <w:endnoteReference/> - Endnote reference marker (body side)
56
+ | 'footnoteRef' // <w:footnoteRef/> - Auto-numbered mark INSIDE a footnote body (§17.11.14)
57
+ | 'endnoteRef'; // <w:endnoteRef/> - Auto-numbered mark INSIDE an endnote body (§17.11.3)
56
58
 
57
59
  /**
58
60
  * Break type for <w:br> elements
@@ -103,13 +105,26 @@ export interface RunContent {
103
105
  footnoteId?: number;
104
106
  /** Endnote ID (only for 'endnoteReference' type, w:endnoteReference w:id) */
105
107
  endnoteId?: number;
108
+ /**
109
+ * `w:customMarkFollows` — ST_OnOff attribute on footnoteReference /
110
+ * endnoteReference per ECMA-376 §17.11.13 / §17.11.2. When true, the
111
+ * auto-numbered reference mark is suppressed and a custom glyph
112
+ * rendered in the immediately following run becomes the display mark.
113
+ * Losing this on round-trip causes Word to render BOTH the automatic
114
+ * number AND the custom glyph (doubled mark).
115
+ */
116
+ customMarkFollows?: boolean;
106
117
  }
107
118
 
108
119
  /**
109
- * Border style for text
110
- * @see CommonTypes.ExtendedBorderStyle for the canonical definition
120
+ * Border style for text per ECMA-376 Part 1 §17.18.2 ST_Border.
121
+ * Widened from ExtendedBorderStyle (10 values) to FullBorderStyle (25+
122
+ * values incl. triple, dotDash/dotDotDash variants, multi-line gaps,
123
+ * and inset/outset effects). TextBorder is the character-level border
124
+ * on runs; anything ST_Border permits is spec-valid here.
125
+ * @see CommonTypes.FullBorderStyle for the canonical definition
111
126
  */
112
- export type TextBorderStyle = ExtendedBorderStyle;
127
+ export type TextBorderStyle = FullBorderStyle;
113
128
 
114
129
  /**
115
130
  * Text border definition
@@ -123,6 +138,16 @@ export interface TextBorder {
123
138
  color?: string;
124
139
  /** Space between border and text in points */
125
140
  space?: number;
141
+ /** Theme color reference (ST_ThemeColor per §17.18.97) */
142
+ themeColor?: string;
143
+ /** Theme tint (2-hex-digit string) */
144
+ themeTint?: string;
145
+ /** Theme shade (2-hex-digit string) */
146
+ themeShade?: string;
147
+ /** Border casts a shadow (CT_OnOff on CT_Border §17.18.2) */
148
+ shadow?: boolean;
149
+ /** Border is part of a frame around the text (CT_OnOff) */
150
+ frame?: boolean;
126
151
  }
127
152
 
128
153
  /**
@@ -286,7 +311,32 @@ export interface RunFormatting {
286
311
  /** Language code (e.g., 'en-US', 'fr-FR', 'es-ES') or CT_Language object */
287
312
  language?: string | LanguageConfig;
288
313
  /** Underline text. Use "none" to explicitly override style underline. */
289
- underline?: boolean | 'single' | 'double' | 'thick' | 'dotted' | 'dash' | 'none';
314
+ /**
315
+ * Underline style. `true` / `false` are shorthand for on/off with the
316
+ * default (single-line) style; the string literals correspond to the
317
+ * full ST_Underline enumeration per ECMA-376 §17.3.2.40. `'none'`
318
+ * explicitly overrides a style-inherited underline.
319
+ */
320
+ underline?:
321
+ | boolean
322
+ | 'single'
323
+ | 'words'
324
+ | 'double'
325
+ | 'thick'
326
+ | 'dotted'
327
+ | 'dottedHeavy'
328
+ | 'dash'
329
+ | 'dashedHeavy'
330
+ | 'dashLong'
331
+ | 'dashLongHeavy'
332
+ | 'dotDash'
333
+ | 'dashDotHeavy'
334
+ | 'dotDotDash'
335
+ | 'dashDotDotHeavy'
336
+ | 'wave'
337
+ | 'wavyHeavy'
338
+ | 'wavyDouble'
339
+ | 'none';
290
340
  /** Underline color in hex format (without #) per ECMA-376 Part 1 §17.3.2.40 */
291
341
  underlineColor?: string;
292
342
  /** Underline theme color reference per ECMA-376 Part 1 §17.3.2.40 */
@@ -426,10 +476,10 @@ export interface RunFormatting {
426
476
  export class Run {
427
477
  private content: RunContent[];
428
478
  private formatting: RunFormatting;
429
- private trackingContext?: import('../tracking/TrackingContext').TrackingContext;
479
+ private trackingContext?: import('../tracking/TrackingContext.js').TrackingContext;
430
480
  private propertyChangeRevision?: RunPropertyChange;
431
481
  /** Parent paragraph reference for automatic tracking */
432
- private _parentParagraph?: import('./Paragraph').Paragraph;
482
+ private _parentParagraph?: import('./Paragraph.js').Paragraph;
433
483
 
434
484
  /**
435
485
  * Creates a new Run
@@ -855,7 +905,7 @@ export class Run {
855
905
  * Gets the underline style
856
906
  * @returns Underline style (string, boolean, or undefined)
857
907
  */
858
- getUnderline(): boolean | 'none' | 'single' | 'double' | 'dotted' | 'thick' | 'dash' | undefined {
908
+ getUnderline(): RunFormatting['underline'] {
859
909
  return this.formatting.underline;
860
910
  }
861
911
 
@@ -1189,7 +1239,7 @@ export class Run {
1189
1239
  * Called by Document when track changes is enabled.
1190
1240
  * @internal
1191
1241
  */
1192
- _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {
1242
+ _setTrackingContext(context: import('../tracking/TrackingContext.js').TrackingContext): void {
1193
1243
  this.trackingContext = context;
1194
1244
  }
1195
1245
 
@@ -1197,7 +1247,7 @@ export class Run {
1197
1247
  * Sets the parent paragraph reference for this run
1198
1248
  * @internal Used for content tracking
1199
1249
  */
1200
- _setParentParagraph(paragraph: import('./Paragraph').Paragraph): void {
1250
+ _setParentParagraph(paragraph: import('./Paragraph.js').Paragraph): void {
1201
1251
  this._parentParagraph = paragraph;
1202
1252
  }
1203
1253
 
@@ -1205,7 +1255,7 @@ export class Run {
1205
1255
  * Gets the parent paragraph reference
1206
1256
  * @internal Used for content tracking
1207
1257
  */
1208
- _getParentParagraph(): import('./Paragraph').Paragraph | undefined {
1258
+ _getParentParagraph(): import('./Paragraph.js').Paragraph | undefined {
1209
1259
  return this._parentParagraph;
1210
1260
  }
1211
1261
 
@@ -2389,9 +2439,23 @@ export class Run {
2389
2439
  }
2390
2440
  }
2391
2441
  }
2392
- runChildren.push(
2393
- XMLBuilder.w('fldChar', fldCharAttrs, [XMLBuilder.w('ffData', {}, ffDataChildren)])
2394
- );
2442
+ // Only wrap in <w:ffData> when there is at least one child. CT_FFData
2443
+ // §17.16.17.10 declares its content model as `<xsd:choice minOccurs="1">`
2444
+ // — emitting empty `<w:ffData/>` fails strict OOXML validation with
2445
+ // "The element has incomplete content". Falling back to the plain
2446
+ // self-closing <w:fldChar/> path produces schema-valid output.
2447
+ if (ffDataChildren.length > 0) {
2448
+ runChildren.push(
2449
+ XMLBuilder.w('fldChar', fldCharAttrs, [XMLBuilder.w('ffData', {}, ffDataChildren)])
2450
+ );
2451
+ } else {
2452
+ runChildren.push(
2453
+ XMLBuilder.wSelf(
2454
+ 'fldChar',
2455
+ Object.keys(fldCharAttrs).length > 0 ? fldCharAttrs : undefined
2456
+ )
2457
+ );
2458
+ }
2395
2459
  } else {
2396
2460
  runChildren.push(
2397
2461
  XMLBuilder.wSelf(
@@ -2448,42 +2512,84 @@ export class Run {
2448
2512
  runChildren.push(XMLBuilder.wSelf('yearLong'));
2449
2513
  break;
2450
2514
 
2451
- // Symbol character (w:sym) per ECMA-376 Part 1 §17.3.3.30
2515
+ // Symbol character (w:sym) per ECMA-376 Part 1 §17.3.3.30. CT_Sym
2516
+ // declares BOTH `w:font` (ST_String) and `w:char` (ST_ShortHexNumber)
2517
+ // as REQUIRED. Emitting the element without either fails strict
2518
+ // OOXML schema validation, so skip emission entirely when the
2519
+ // RunContent is missing one — keeps the output schema-valid at the
2520
+ // cost of dropping an incomplete symbol. Consumers should always
2521
+ // set both `symbolFont` and `symbolChar` together.
2452
2522
  case 'symbol': {
2453
- const symAttrs: Record<string, string> = {};
2454
- if (contentElement.symbolFont) symAttrs['w:font'] = contentElement.symbolFont;
2455
- if (contentElement.symbolChar) symAttrs['w:char'] = contentElement.symbolChar;
2456
- runChildren.push(XMLBuilder.wSelf('sym', symAttrs));
2523
+ if (!contentElement.symbolFont || !contentElement.symbolChar) break;
2524
+ runChildren.push(
2525
+ XMLBuilder.wSelf('sym', {
2526
+ 'w:font': contentElement.symbolFont,
2527
+ 'w:char': contentElement.symbolChar,
2528
+ })
2529
+ );
2457
2530
  break;
2458
2531
  }
2459
2532
 
2460
- // Absolute position tab (w:ptab) per ECMA-376 Part 1 §17.3.3.23
2533
+ // Absolute position tab (w:ptab) per ECMA-376 Part 1 §17.3.3.23.
2534
+ // CT_PTab declares all three of `w:alignment` / `w:relativeTo` /
2535
+ // `w:leader` as REQUIRED attributes; omitting any fails strict
2536
+ // OOXML schema validation. Supply the spec defaults
2537
+ // (left / margin / none per ST_PTabAlignment, ST_PTabRelativeTo,
2538
+ // ST_PTabLeader) whenever the corresponding field is unset.
2461
2539
  case 'positionTab': {
2462
- const ptabAttrs: Record<string, string> = {};
2463
- if (contentElement.ptabAlignment) ptabAttrs['w:alignment'] = contentElement.ptabAlignment;
2464
- if (contentElement.ptabRelativeTo)
2465
- ptabAttrs['w:relativeTo'] = contentElement.ptabRelativeTo;
2466
- if (contentElement.ptabLeader) ptabAttrs['w:leader'] = contentElement.ptabLeader;
2540
+ const ptabAttrs: Record<string, string> = {
2541
+ 'w:alignment': contentElement.ptabAlignment ?? 'left',
2542
+ 'w:relativeTo': contentElement.ptabRelativeTo ?? 'margin',
2543
+ 'w:leader': contentElement.ptabLeader ?? 'none',
2544
+ };
2467
2545
  runChildren.push(XMLBuilder.wSelf('ptab', ptabAttrs));
2468
2546
  break;
2469
2547
  }
2470
2548
 
2471
- // Footnote reference (w:footnoteReference) per ECMA-376 Part 1 §17.11.13
2549
+ // Footnote reference (w:footnoteReference) per ECMA-376 Part 1 §17.11.13.
2550
+ // CT_FtnEdnRef (§17.11.12) declares `w:id` as REQUIRED — skip emission
2551
+ // entirely when it's missing to keep the output schema-valid rather
2552
+ // than produce `<w:footnoteReference/>` with no attributes. Use
2553
+ // `!== undefined` so id=0 (a valid explicit value) is preserved.
2554
+ // Emit w:customMarkFollows only when explicitly true — the schema
2555
+ // default is false, so dropping `false`/`undefined` keeps the output
2556
+ // minimal without semantic change.
2472
2557
  case 'footnoteReference': {
2473
- const fnAttrs: Record<string, string | number> = {};
2474
- if (contentElement.footnoteId !== undefined) fnAttrs['w:id'] = contentElement.footnoteId;
2558
+ if (contentElement.footnoteId === undefined) break;
2559
+ const fnAttrs: Record<string, string | number> = {
2560
+ 'w:id': contentElement.footnoteId,
2561
+ };
2562
+ if (contentElement.customMarkFollows === true) fnAttrs['w:customMarkFollows'] = '1';
2475
2563
  runChildren.push(XMLBuilder.wSelf('footnoteReference', fnAttrs));
2476
2564
  break;
2477
2565
  }
2478
2566
 
2479
- // Endnote reference (w:endnoteReference) per ECMA-376 Part 1 §17.11.2
2567
+ // Endnote reference (w:endnoteReference) per ECMA-376 Part 1 §17.11.2.
2568
+ // Same CT_FtnEdnRef schema: `w:id` is REQUIRED; ST_OnOff treatment
2569
+ // for w:customMarkFollows matches the footnote branch above.
2480
2570
  case 'endnoteReference': {
2481
- const enAttrs: Record<string, string | number> = {};
2482
- if (contentElement.endnoteId !== undefined) enAttrs['w:id'] = contentElement.endnoteId;
2571
+ if (contentElement.endnoteId === undefined) break;
2572
+ const enAttrs: Record<string, string | number> = {
2573
+ 'w:id': contentElement.endnoteId,
2574
+ };
2575
+ if (contentElement.customMarkFollows === true) enAttrs['w:customMarkFollows'] = '1';
2483
2576
  runChildren.push(XMLBuilder.wSelf('endnoteReference', enAttrs));
2484
2577
  break;
2485
2578
  }
2486
2579
 
2580
+ // Footnote auto-numbered mark (w:footnoteRef) per ECMA-376 §17.11.14.
2581
+ // Empty element with no attributes; appears INSIDE a footnote body to
2582
+ // render the auto-generated footnote number as the displayed mark.
2583
+ case 'footnoteRef':
2584
+ runChildren.push(XMLBuilder.wSelf('footnoteRef'));
2585
+ break;
2586
+
2587
+ // Endnote auto-numbered mark (w:endnoteRef) per ECMA-376 §17.11.3.
2588
+ // Empty element with no attributes; appears INSIDE an endnote body.
2589
+ case 'endnoteRef':
2590
+ runChildren.push(XMLBuilder.wSelf('endnoteRef'));
2591
+ break;
2592
+
2487
2593
  // Embedded OLE object (w:object) - preserved as raw XML
2488
2594
  case 'embeddedObject':
2489
2595
  if (contentElement.rawXml) {
@@ -2784,29 +2890,25 @@ export class Run {
2784
2890
  rPrChildren.push(XMLBuilder.wSelf('dstrike', { 'w:val': formatting.dstrike ? '1' : '0' }));
2785
2891
  }
2786
2892
 
2787
- // 11. w:outline Outline text effect
2788
- if (formatting.outline) {
2789
- rPrChildren.push(XMLBuilder.wSelf('outline', { 'w:val': '1' }));
2893
+ // 11–15. CT_OnOff text effects (OnOffType, accept full ST_OnOff).
2894
+ // Emit w:val="0" for explicit false so override-of-style semantics survive
2895
+ // round-trip, including inside rPrChange tracked history. (Previously each
2896
+ // of these tested `if (formatting.x)` and emitted nothing for false,
2897
+ // silently dropping the override.)
2898
+ if (formatting.outline !== undefined) {
2899
+ rPrChildren.push(XMLBuilder.wSelf('outline', { 'w:val': formatting.outline ? '1' : '0' }));
2790
2900
  }
2791
-
2792
- // 12. w:shadow Shadow text effect
2793
- if (formatting.shadow) {
2794
- rPrChildren.push(XMLBuilder.wSelf('shadow', { 'w:val': '1' }));
2901
+ if (formatting.shadow !== undefined) {
2902
+ rPrChildren.push(XMLBuilder.wSelf('shadow', { 'w:val': formatting.shadow ? '1' : '0' }));
2795
2903
  }
2796
-
2797
- // 13. w:emboss Emboss text effect
2798
- if (formatting.emboss) {
2799
- rPrChildren.push(XMLBuilder.wSelf('emboss', { 'w:val': '1' }));
2904
+ if (formatting.emboss !== undefined) {
2905
+ rPrChildren.push(XMLBuilder.wSelf('emboss', { 'w:val': formatting.emboss ? '1' : '0' }));
2800
2906
  }
2801
-
2802
- // 14. w:imprint Imprint/engrave text effect
2803
- if (formatting.imprint) {
2804
- rPrChildren.push(XMLBuilder.wSelf('imprint', { 'w:val': '1' }));
2907
+ if (formatting.imprint !== undefined) {
2908
+ rPrChildren.push(XMLBuilder.wSelf('imprint', { 'w:val': formatting.imprint ? '1' : '0' }));
2805
2909
  }
2806
-
2807
- // 15. w:noProof No proofing
2808
- if (formatting.noProof) {
2809
- rPrChildren.push(XMLBuilder.wSelf('noProof', { 'w:val': '1' }));
2910
+ if (formatting.noProof !== undefined) {
2911
+ rPrChildren.push(XMLBuilder.wSelf('noProof', { 'w:val': formatting.noProof ? '1' : '0' }));
2810
2912
  }
2811
2913
 
2812
2914
  // 16. w:snapToGrid — Snap to grid
@@ -2818,14 +2920,16 @@ export class Run {
2818
2920
  );
2819
2921
  }
2820
2922
 
2821
- // 17. w:vanish — Hidden text
2822
- if (formatting.vanish) {
2823
- rPrChildren.push(XMLBuilder.wSelf('vanish', { 'w:val': '1' }));
2923
+ // 17. w:vanish — Hidden text (CT_OnOff). Explicit false must round-trip.
2924
+ if (formatting.vanish !== undefined) {
2925
+ rPrChildren.push(XMLBuilder.wSelf('vanish', { 'w:val': formatting.vanish ? '1' : '0' }));
2824
2926
  }
2825
2927
 
2826
- // 18. w:webHidden — Web hidden
2827
- if (formatting.webHidden) {
2828
- rPrChildren.push(XMLBuilder.wSelf('webHidden', { 'w:val': '1' }));
2928
+ // 18. w:webHidden — Web hidden (CT_OnOff).
2929
+ if (formatting.webHidden !== undefined) {
2930
+ rPrChildren.push(
2931
+ XMLBuilder.wSelf('webHidden', { 'w:val': formatting.webHidden ? '1' : '0' })
2932
+ );
2829
2933
  }
2830
2934
 
2831
2935
  // 19. w:color — Text color
@@ -2920,17 +3024,30 @@ export class Run {
2920
3024
  rPrChildren.push(XMLBuilder.wSelf('effect', { 'w:val': formatting.effect }));
2921
3025
  }
2922
3026
 
2923
- // 29. w:bdr — Text border
3027
+ // 29. w:bdr — Text (character) border per ECMA-376 §17.3.2.5. CT_Border
3028
+ // (§17.18.2) requires `w:val`, so default to "nil" when the consumer
3029
+ // set only size/color/space. Full CT_Border attribute set emitted
3030
+ // (themeColor/themeTint/themeShade/shadow/frame) for themed-character-
3031
+ // border fidelity.
2924
3032
  if (formatting.border) {
2925
- const bdrAttrs: Record<string, string | number> = {};
2926
- if (formatting.border.style) bdrAttrs['w:val'] = formatting.border.style;
2927
- if (formatting.border.size !== undefined) bdrAttrs['w:sz'] = formatting.border.size;
2928
- if (formatting.border.color) bdrAttrs['w:color'] = formatting.border.color;
2929
- if (formatting.border.space !== undefined) bdrAttrs['w:space'] = formatting.border.space;
2930
-
2931
- if (Object.keys(bdrAttrs).length > 0) {
2932
- rPrChildren.push(XMLBuilder.wSelf('bdr', bdrAttrs));
2933
- }
3033
+ const b = formatting.border;
3034
+ const bdrAttrs: Record<string, string | number> = { 'w:val': b.style ?? 'nil' };
3035
+ if (b.size !== undefined) bdrAttrs['w:sz'] = b.size;
3036
+ if (b.color) bdrAttrs['w:color'] = b.color;
3037
+ if (b.space !== undefined) bdrAttrs['w:space'] = b.space;
3038
+ const bb = b as {
3039
+ themeColor?: string;
3040
+ themeTint?: string;
3041
+ themeShade?: string;
3042
+ shadow?: boolean;
3043
+ frame?: boolean;
3044
+ };
3045
+ if (bb.themeColor) bdrAttrs['w:themeColor'] = bb.themeColor;
3046
+ if (bb.themeTint) bdrAttrs['w:themeTint'] = bb.themeTint;
3047
+ if (bb.themeShade) bdrAttrs['w:themeShade'] = bb.themeShade;
3048
+ if (bb.shadow !== undefined) bdrAttrs['w:shadow'] = bb.shadow ? '1' : '0';
3049
+ if (bb.frame !== undefined) bdrAttrs['w:frame'] = bb.frame ? '1' : '0';
3050
+ rPrChildren.push(XMLBuilder.wSelf('bdr', bdrAttrs));
2934
3051
  }
2935
3052
 
2936
3053
  // 30. w:shd — Character shading
@@ -2955,14 +3072,14 @@ export class Run {
2955
3072
  rPrChildren.push(XMLBuilder.wSelf('vertAlign', { 'w:val': 'baseline' }));
2956
3073
  }
2957
3074
 
2958
- // 33. w:rtl — Right-to-left text
2959
- if (formatting.rtl) {
2960
- rPrChildren.push(XMLBuilder.wSelf('rtl', { 'w:val': '1' }));
3075
+ // 33. w:rtl — Right-to-left text (CT_OnOff).
3076
+ if (formatting.rtl !== undefined) {
3077
+ rPrChildren.push(XMLBuilder.wSelf('rtl', { 'w:val': formatting.rtl ? '1' : '0' }));
2961
3078
  }
2962
3079
 
2963
- // 34. w:cs — Complex script flag
2964
- if (formatting.complexScript) {
2965
- rPrChildren.push(XMLBuilder.wSelf('cs', { 'w:val': '1' }));
3080
+ // 34. w:cs — Complex script flag (CT_OnOff).
3081
+ if (formatting.complexScript !== undefined) {
3082
+ rPrChildren.push(XMLBuilder.wSelf('cs', { 'w:val': formatting.complexScript ? '1' : '0' }));
2966
3083
  }
2967
3084
 
2968
3085
  // 35. w:em — Emphasis marks
@@ -2985,14 +3102,22 @@ export class Run {
2985
3102
  }
2986
3103
  }
2987
3104
 
2988
- // 37. w:eastAsianLayout — East Asian layout
3105
+ // 37. w:eastAsianLayout — East Asian layout per ECMA-376 §17.3.2.10.
3106
+ // `w:vert` / `w:vertCompress` / `w:combine` are ST_OnOff attributes
3107
+ // with NO spec-mandated default — preserve the explicit-false form
3108
+ // (`w:vert="0"`) so an override of a style-inherited true round-trips
3109
+ // intact. The parser (main + rPrChange) stores `false` when the
3110
+ // source had `w:vert="0"`; emitting only when truthy would drop
3111
+ // those overrides.
2989
3112
  if (formatting.eastAsianLayout) {
2990
3113
  const layout = formatting.eastAsianLayout;
2991
3114
  const attrs: Record<string, string | number> = {};
2992
3115
  if (layout.id !== undefined) attrs['w:id'] = layout.id;
2993
- if (layout.vert) attrs['w:vert'] = '1';
2994
- if (layout.vertCompress) attrs['w:vertCompress'] = '1';
2995
- if (layout.combine) attrs['w:combine'] = '1';
3116
+ if (layout.vert !== undefined) attrs['w:vert'] = layout.vert ? '1' : '0';
3117
+ if (layout.vertCompress !== undefined) {
3118
+ attrs['w:vertCompress'] = layout.vertCompress ? '1' : '0';
3119
+ }
3120
+ if (layout.combine !== undefined) attrs['w:combine'] = layout.combine ? '1' : '0';
2996
3121
  if (layout.combineBrackets) attrs['w:combineBrackets'] = layout.combineBrackets;
2997
3122
 
2998
3123
  if (Object.keys(attrs).length > 0) {
@@ -3000,9 +3125,11 @@ export class Run {
3000
3125
  }
3001
3126
  }
3002
3127
 
3003
- // 38. w:specVanish — Special vanish
3004
- if (formatting.specVanish) {
3005
- rPrChildren.push(XMLBuilder.wSelf('specVanish', { 'w:val': '1' }));
3128
+ // 38. w:specVanish — Special vanish (CT_OnOff).
3129
+ if (formatting.specVanish !== undefined) {
3130
+ rPrChildren.push(
3131
+ XMLBuilder.wSelf('specVanish', { 'w:val': formatting.specVanish ? '1' : '0' })
3132
+ );
3006
3133
  }
3007
3134
 
3008
3135
  // 39. w:oMath — (not currently generated)