docxmlater 10.1.3 → 10.1.5

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 (371) hide show
  1. package/README.md +759 -754
  2. package/dist/constants/legacyCompatFlags.js +1 -1
  3. package/dist/constants/legacyCompatFlags.js.map +1 -1
  4. package/dist/constants/limits.js.map +1 -1
  5. package/dist/core/Document.d.ts +50 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +483 -471
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +9 -9
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +1 -1
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentGenerator.d.ts +11 -11
  14. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  15. package/dist/core/DocumentGenerator.js +251 -251
  16. package/dist/core/DocumentGenerator.js.map +1 -1
  17. package/dist/core/DocumentIdManager.js.map +1 -1
  18. package/dist/core/DocumentParser.d.ts +15 -15
  19. package/dist/core/DocumentParser.d.ts.map +1 -1
  20. package/dist/core/DocumentParser.js +2123 -2155
  21. package/dist/core/DocumentParser.js.map +1 -1
  22. package/dist/core/DocumentValidator.d.ts.map +1 -1
  23. package/dist/core/DocumentValidator.js +2 -5
  24. package/dist/core/DocumentValidator.js.map +1 -1
  25. package/dist/core/Relationship.js.map +1 -1
  26. package/dist/core/RelationshipManager.d.ts.map +1 -1
  27. package/dist/core/RelationshipManager.js +3 -3
  28. package/dist/core/RelationshipManager.js.map +1 -1
  29. package/dist/elements/AlternateContent.js.map +1 -1
  30. package/dist/elements/Bookmark.d.ts.map +1 -1
  31. package/dist/elements/Bookmark.js +3 -1
  32. package/dist/elements/Bookmark.js.map +1 -1
  33. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  34. package/dist/elements/BookmarkManager.js.map +1 -1
  35. package/dist/elements/Comment.d.ts.map +1 -1
  36. package/dist/elements/Comment.js +9 -6
  37. package/dist/elements/Comment.js.map +1 -1
  38. package/dist/elements/CommentManager.d.ts.map +1 -1
  39. package/dist/elements/CommentManager.js +18 -17
  40. package/dist/elements/CommentManager.js.map +1 -1
  41. package/dist/elements/CommonTypes.d.ts +21 -21
  42. package/dist/elements/CommonTypes.d.ts.map +1 -1
  43. package/dist/elements/CommonTypes.js +56 -56
  44. package/dist/elements/CommonTypes.js.map +1 -1
  45. package/dist/elements/CustomXml.js.map +1 -1
  46. package/dist/elements/Endnote.d.ts.map +1 -1
  47. package/dist/elements/Endnote.js +6 -6
  48. package/dist/elements/Endnote.js.map +1 -1
  49. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  50. package/dist/elements/EndnoteManager.js +6 -7
  51. package/dist/elements/EndnoteManager.js.map +1 -1
  52. package/dist/elements/Field.d.ts.map +1 -1
  53. package/dist/elements/Field.js +82 -25
  54. package/dist/elements/Field.js.map +1 -1
  55. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  56. package/dist/elements/FieldHelpers.js.map +1 -1
  57. package/dist/elements/FontManager.d.ts.map +1 -1
  58. package/dist/elements/FontManager.js +1 -1
  59. package/dist/elements/FontManager.js.map +1 -1
  60. package/dist/elements/Footer.js +2 -2
  61. package/dist/elements/Footer.js.map +1 -1
  62. package/dist/elements/Footnote.d.ts.map +1 -1
  63. package/dist/elements/Footnote.js +6 -6
  64. package/dist/elements/Footnote.js.map +1 -1
  65. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  66. package/dist/elements/FootnoteManager.js +6 -7
  67. package/dist/elements/FootnoteManager.js.map +1 -1
  68. package/dist/elements/Header.js +2 -2
  69. package/dist/elements/Header.js.map +1 -1
  70. package/dist/elements/HeaderFooterManager.js.map +1 -1
  71. package/dist/elements/Hyperlink.d.ts +5 -3
  72. package/dist/elements/Hyperlink.d.ts.map +1 -1
  73. package/dist/elements/Hyperlink.js +134 -76
  74. package/dist/elements/Hyperlink.js.map +1 -1
  75. package/dist/elements/Image.d.ts.map +1 -1
  76. package/dist/elements/Image.js +238 -106
  77. package/dist/elements/Image.js.map +1 -1
  78. package/dist/elements/ImageManager.d.ts.map +1 -1
  79. package/dist/elements/ImageManager.js +1 -1
  80. package/dist/elements/ImageManager.js.map +1 -1
  81. package/dist/elements/ImageRun.js +1 -1
  82. package/dist/elements/ImageRun.js.map +1 -1
  83. package/dist/elements/MathElement.js.map +1 -1
  84. package/dist/elements/Paragraph.d.ts +24 -24
  85. package/dist/elements/Paragraph.d.ts.map +1 -1
  86. package/dist/elements/Paragraph.js +181 -188
  87. package/dist/elements/Paragraph.js.map +1 -1
  88. package/dist/elements/PreservedElement.js.map +1 -1
  89. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  90. package/dist/elements/PropertyChangeTypes.js +6 -6
  91. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  92. package/dist/elements/RangeMarker.d.ts.map +1 -1
  93. package/dist/elements/RangeMarker.js.map +1 -1
  94. package/dist/elements/Revision.d.ts.map +1 -1
  95. package/dist/elements/Revision.js +4 -5
  96. package/dist/elements/Revision.js.map +1 -1
  97. package/dist/elements/RevisionContent.js.map +1 -1
  98. package/dist/elements/RevisionManager.d.ts.map +1 -1
  99. package/dist/elements/RevisionManager.js +40 -48
  100. package/dist/elements/RevisionManager.js.map +1 -1
  101. package/dist/elements/Run.d.ts +16 -16
  102. package/dist/elements/Run.d.ts.map +1 -1
  103. package/dist/elements/Run.js +256 -238
  104. package/dist/elements/Run.js.map +1 -1
  105. package/dist/elements/Section.d.ts.map +1 -1
  106. package/dist/elements/Section.js +36 -11
  107. package/dist/elements/Section.js.map +1 -1
  108. package/dist/elements/Shape.d.ts.map +1 -1
  109. package/dist/elements/Shape.js.map +1 -1
  110. package/dist/elements/StructuredDocumentTag.d.ts +6 -6
  111. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  112. package/dist/elements/StructuredDocumentTag.js +99 -104
  113. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  114. package/dist/elements/Table.d.ts +11 -11
  115. package/dist/elements/Table.d.ts.map +1 -1
  116. package/dist/elements/Table.js +102 -107
  117. package/dist/elements/Table.js.map +1 -1
  118. package/dist/elements/TableCell.d.ts +10 -10
  119. package/dist/elements/TableCell.d.ts.map +1 -1
  120. package/dist/elements/TableCell.js +105 -106
  121. package/dist/elements/TableCell.js.map +1 -1
  122. package/dist/elements/TableGridChange.d.ts.map +1 -1
  123. package/dist/elements/TableGridChange.js.map +1 -1
  124. package/dist/elements/TableOfContents.d.ts.map +1 -1
  125. package/dist/elements/TableOfContents.js +4 -4
  126. package/dist/elements/TableOfContents.js.map +1 -1
  127. package/dist/elements/TableOfContentsElement.js.map +1 -1
  128. package/dist/elements/TableRow.d.ts.map +1 -1
  129. package/dist/elements/TableRow.js +13 -6
  130. package/dist/elements/TableRow.js.map +1 -1
  131. package/dist/elements/TextBox.d.ts.map +1 -1
  132. package/dist/elements/TextBox.js +3 -5
  133. package/dist/elements/TextBox.js.map +1 -1
  134. package/dist/formatting/AbstractNumbering.d.ts +4 -4
  135. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  136. package/dist/formatting/AbstractNumbering.js +54 -49
  137. package/dist/formatting/AbstractNumbering.js.map +1 -1
  138. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  139. package/dist/formatting/NumberingInstance.js +1 -3
  140. package/dist/formatting/NumberingInstance.js.map +1 -1
  141. package/dist/formatting/NumberingLevel.d.ts +5 -5
  142. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  143. package/dist/formatting/NumberingLevel.js +119 -125
  144. package/dist/formatting/NumberingLevel.js.map +1 -1
  145. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  146. package/dist/formatting/NumberingManager.js +9 -9
  147. package/dist/formatting/NumberingManager.js.map +1 -1
  148. package/dist/formatting/Style.d.ts +11 -11
  149. package/dist/formatting/Style.d.ts.map +1 -1
  150. package/dist/formatting/Style.js +219 -247
  151. package/dist/formatting/Style.js.map +1 -1
  152. package/dist/formatting/StylesManager.d.ts +2 -2
  153. package/dist/formatting/StylesManager.d.ts.map +1 -1
  154. package/dist/formatting/StylesManager.js +96 -102
  155. package/dist/formatting/StylesManager.js.map +1 -1
  156. package/dist/helpers/CleanupHelper.d.ts +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  158. package/dist/helpers/CleanupHelper.js +6 -6
  159. package/dist/helpers/CleanupHelper.js.map +1 -1
  160. package/dist/images/ImageOptimizer.js +7 -7
  161. package/dist/images/ImageOptimizer.js.map +1 -1
  162. package/dist/index.d.ts +9 -9
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js.map +1 -1
  165. package/dist/managers/DrawingManager.js.map +1 -1
  166. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.js +23 -7
  168. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  169. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  170. package/dist/tracking/TrackingContext.js.map +1 -1
  171. package/dist/types/compatibility-types.js.map +1 -1
  172. package/dist/types/formatting.js.map +1 -1
  173. package/dist/types/list-types.d.ts +6 -6
  174. package/dist/types/list-types.js.map +1 -1
  175. package/dist/types/settings-types.js.map +1 -1
  176. package/dist/types/styleConfig.d.ts +2 -2
  177. package/dist/types/styleConfig.js.map +1 -1
  178. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  179. package/dist/utils/ChangelogGenerator.js +97 -101
  180. package/dist/utils/ChangelogGenerator.js.map +1 -1
  181. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.js +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  184. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  186. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  187. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  188. package/dist/utils/MoveOperationHelper.js +1 -1
  189. package/dist/utils/MoveOperationHelper.js.map +1 -1
  190. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.js +2 -4
  192. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  193. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  194. package/dist/utils/RevisionWalker.js +4 -12
  195. package/dist/utils/RevisionWalker.js.map +1 -1
  196. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  198. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  199. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  200. package/dist/utils/ShadingResolver.js +1 -1
  201. package/dist/utils/ShadingResolver.js.map +1 -1
  202. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  203. package/dist/utils/acceptRevisions.js +23 -12
  204. package/dist/utils/acceptRevisions.js.map +1 -1
  205. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  207. package/dist/utils/cnfStyleDecoder.js +40 -40
  208. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  209. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  210. package/dist/utils/corruptionDetection.js.map +1 -1
  211. package/dist/utils/dateFormatting.js.map +1 -1
  212. package/dist/utils/deepClone.js +1 -1
  213. package/dist/utils/deepClone.js.map +1 -1
  214. package/dist/utils/diagnostics.d.ts.map +1 -1
  215. package/dist/utils/diagnostics.js +1 -1
  216. package/dist/utils/diagnostics.js.map +1 -1
  217. package/dist/utils/errorHandling.js.map +1 -1
  218. package/dist/utils/formatting.d.ts.map +1 -1
  219. package/dist/utils/formatting.js +10 -2
  220. package/dist/utils/formatting.js.map +1 -1
  221. package/dist/utils/list-detection.d.ts +2 -2
  222. package/dist/utils/list-detection.d.ts.map +1 -1
  223. package/dist/utils/list-detection.js +21 -23
  224. package/dist/utils/list-detection.js.map +1 -1
  225. package/dist/utils/logger.d.ts.map +1 -1
  226. package/dist/utils/logger.js +12 -7
  227. package/dist/utils/logger.js.map +1 -1
  228. package/dist/utils/parsingHelpers.js.map +1 -1
  229. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  230. package/dist/utils/stripTrackedChanges.js +3 -3
  231. package/dist/utils/stripTrackedChanges.js.map +1 -1
  232. package/dist/utils/textDiff.d.ts +1 -1
  233. package/dist/utils/textDiff.js +8 -8
  234. package/dist/utils/textDiff.js.map +1 -1
  235. package/dist/utils/units.js.map +1 -1
  236. package/dist/utils/validation.d.ts.map +1 -1
  237. package/dist/utils/validation.js +24 -7
  238. package/dist/utils/validation.js.map +1 -1
  239. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  240. package/dist/utils/xmlSanitization.js +3 -3
  241. package/dist/utils/xmlSanitization.js.map +1 -1
  242. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.js +5 -5
  244. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  245. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  246. package/dist/validation/RevisionValidator.js +7 -9
  247. package/dist/validation/RevisionValidator.js.map +1 -1
  248. package/dist/validation/ValidationRules.js +3 -3
  249. package/dist/validation/ValidationRules.js.map +1 -1
  250. package/dist/validation/index.js.map +1 -1
  251. package/dist/xml/XMLBuilder.d.ts +1 -1
  252. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  253. package/dist/xml/XMLBuilder.js +98 -100
  254. package/dist/xml/XMLBuilder.js.map +1 -1
  255. package/dist/xml/XMLParser.d.ts.map +1 -1
  256. package/dist/xml/XMLParser.js +61 -66
  257. package/dist/xml/XMLParser.js.map +1 -1
  258. package/dist/zip/ZipHandler.d.ts.map +1 -1
  259. package/dist/zip/ZipHandler.js.map +1 -1
  260. package/dist/zip/ZipReader.d.ts.map +1 -1
  261. package/dist/zip/ZipReader.js +1 -3
  262. package/dist/zip/ZipReader.js.map +1 -1
  263. package/dist/zip/ZipWriter.d.ts +1 -1
  264. package/dist/zip/ZipWriter.d.ts.map +1 -1
  265. package/dist/zip/ZipWriter.js +28 -36
  266. package/dist/zip/ZipWriter.js.map +1 -1
  267. package/dist/zip/types.js +1 -1
  268. package/dist/zip/types.js.map +1 -1
  269. package/package.json +92 -92
  270. package/src/__tests__/helper-methods.test.ts +512 -512
  271. package/src/constants/legacyCompatFlags.ts +138 -138
  272. package/src/constants/limits.ts +50 -50
  273. package/src/core/Document.ts +985 -1145
  274. package/src/core/DocumentContent.ts +461 -467
  275. package/src/core/DocumentGenerator.ts +1133 -1104
  276. package/src/core/DocumentIdManager.ts +158 -158
  277. package/src/core/DocumentParser.ts +2347 -2716
  278. package/src/core/DocumentValidator.ts +363 -372
  279. package/src/core/Relationship.ts +367 -367
  280. package/src/core/RelationshipManager.ts +429 -428
  281. package/src/elements/AlternateContent.ts +42 -42
  282. package/src/elements/Bookmark.ts +212 -210
  283. package/src/elements/BookmarkManager.ts +247 -250
  284. package/src/elements/Comment.ts +356 -359
  285. package/src/elements/CommentManager.ts +499 -502
  286. package/src/elements/CommonTypes.ts +524 -549
  287. package/src/elements/CustomXml.ts +36 -36
  288. package/src/elements/Endnote.ts +221 -217
  289. package/src/elements/EndnoteManager.ts +246 -249
  290. package/src/elements/Field.ts +1292 -1233
  291. package/src/elements/FieldHelpers.ts +329 -333
  292. package/src/elements/FontManager.ts +336 -339
  293. package/src/elements/Footer.ts +269 -269
  294. package/src/elements/Footnote.ts +221 -217
  295. package/src/elements/FootnoteManager.ts +246 -249
  296. package/src/elements/Header.ts +269 -269
  297. package/src/elements/HeaderFooterManager.ts +219 -219
  298. package/src/elements/Hyperlink.ts +1288 -1193
  299. package/src/elements/Image.ts +1982 -1756
  300. package/src/elements/ImageManager.ts +437 -432
  301. package/src/elements/ImageRun.ts +59 -59
  302. package/src/elements/MathElement.ts +65 -65
  303. package/src/elements/Paragraph.ts +4347 -4287
  304. package/src/elements/PreservedElement.ts +53 -53
  305. package/src/elements/PropertyChangeTypes.ts +458 -442
  306. package/src/elements/RangeMarker.ts +382 -400
  307. package/src/elements/Revision.ts +1198 -1217
  308. package/src/elements/RevisionContent.ts +73 -73
  309. package/src/elements/RevisionManager.ts +1070 -1070
  310. package/src/elements/Run.ts +3103 -3073
  311. package/src/elements/Section.ts +1521 -1421
  312. package/src/elements/Shape.ts +884 -873
  313. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  314. package/src/elements/Table.ts +2468 -2524
  315. package/src/elements/TableCell.ts +1617 -1621
  316. package/src/elements/TableGridChange.ts +149 -151
  317. package/src/elements/TableOfContents.ts +701 -691
  318. package/src/elements/TableOfContentsElement.ts +89 -89
  319. package/src/elements/TableRow.ts +960 -929
  320. package/src/elements/TextBox.ts +766 -768
  321. package/src/formatting/AbstractNumbering.ts +580 -579
  322. package/src/formatting/NumberingInstance.ts +295 -299
  323. package/src/formatting/NumberingLevel.ts +981 -1040
  324. package/src/formatting/NumberingManager.ts +833 -827
  325. package/src/formatting/Style.ts +1785 -1879
  326. package/src/formatting/StylesManager.ts +1090 -1130
  327. package/src/helpers/CleanupHelper.ts +524 -524
  328. package/src/images/ImageOptimizer.ts +274 -274
  329. package/src/index.ts +559 -554
  330. package/src/managers/DrawingManager.ts +319 -319
  331. package/src/tracking/DocumentTrackingContext.ts +687 -674
  332. package/src/tracking/TrackingContext.ts +175 -173
  333. package/src/types/compatibility-types.ts +49 -49
  334. package/src/types/formatting.ts +210 -210
  335. package/src/types/list-types.ts +14 -14
  336. package/src/types/settings-types.ts +59 -59
  337. package/src/types/styleConfig.ts +189 -189
  338. package/src/utils/ChangelogGenerator.ts +1583 -1581
  339. package/src/utils/CompatibilityUpgrader.ts +235 -237
  340. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  341. package/src/utils/MoveOperationHelper.ts +233 -238
  342. package/src/utils/RevisionAwareProcessor.ts +518 -526
  343. package/src/utils/RevisionWalker.ts +427 -457
  344. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  345. package/src/utils/ShadingResolver.ts +105 -107
  346. package/src/utils/acceptRevisions.ts +723 -714
  347. package/src/utils/cnfStyleDecoder.ts +212 -217
  348. package/src/utils/corruptionDetection.ts +346 -345
  349. package/src/utils/dateFormatting.ts +20 -20
  350. package/src/utils/deepClone.ts +77 -78
  351. package/src/utils/diagnostics.ts +125 -129
  352. package/src/utils/errorHandling.ts +80 -80
  353. package/src/utils/formatting.ts +220 -213
  354. package/src/utils/list-detection.ts +32 -42
  355. package/src/utils/logger.ts +412 -404
  356. package/src/utils/parsingHelpers.ts +190 -190
  357. package/src/utils/stripTrackedChanges.ts +356 -353
  358. package/src/utils/textDiff.ts +100 -100
  359. package/src/utils/units.ts +421 -421
  360. package/src/utils/validation.ts +553 -542
  361. package/src/utils/xmlSanitization.ts +179 -182
  362. package/src/validation/RevisionAutoFixer.ts +541 -542
  363. package/src/validation/RevisionValidator.ts +470 -460
  364. package/src/validation/ValidationRules.ts +338 -338
  365. package/src/validation/index.ts +30 -30
  366. package/src/xml/XMLBuilder.ts +857 -871
  367. package/src/xml/XMLParser.ts +877 -919
  368. package/src/zip/ZipHandler.ts +629 -637
  369. package/src/zip/ZipReader.ts +295 -299
  370. package/src/zip/ZipWriter.ts +374 -390
  371. package/src/zip/types.ts +116 -116
@@ -1,442 +1,458 @@
1
- /**
2
- * PropertyChangeTypes - Type definitions for property change tracking in revisions
3
- *
4
- * These types represent the parsed data from OOXML property change elements:
5
- * - w:rPrChange (run property changes)
6
- * - w:pPrChange (paragraph property changes)
7
- * - w:tblPrChange, w:trPrChange, w:tcPrChange (table property changes)
8
- * - w:sectPrChange (section property changes)
9
- * - w:numberingChange (numbering property changes)
10
- *
11
- * Per ECMA-376, property change elements track the PREVIOUS state of properties
12
- * before a change was made, allowing Word to show what changed and enabling
13
- * accept/reject functionality.
14
- *
15
- * @module PropertyChangeTypes
16
- */
17
-
18
- import type { RunFormatting } from './Run';
19
- import type { ShadingConfig } from './CommonTypes';
20
-
21
- /**
22
- * Common base for all property change types
23
- */
24
- export interface PropertyChangeBase {
25
- /** Unique revision ID (ST_DecimalNumber) */
26
- id: number;
27
- /** Author who made the change (required) */
28
- author: string;
29
- /** Date when the change was made (ISO 8601) */
30
- date: Date;
31
- }
32
-
33
- /**
34
- * Run property change (w:rPrChange)
35
- *
36
- * Tracks changes to run-level formatting such as:
37
- * - Bold, italic, underline
38
- * - Font name, size, color
39
- * - Highlight, strikethrough
40
- * - Character spacing, subscript/superscript
41
- *
42
- * @example
43
- * ```xml
44
- * <w:rPrChange w:id="1" w:author="John" w:date="2024-01-15T10:30:00Z">
45
- * <w:rPr>
46
- * <w:b/> <!-- Was bold before change -->
47
- * </w:rPr>
48
- * </w:rPrChange>
49
- * ```
50
- */
51
- export interface RunPropertyChange extends PropertyChangeBase {
52
- /** Previous run formatting properties before the change */
53
- previousProperties: Partial<RunFormatting>;
54
- }
55
-
56
- /**
57
- * Border definition for paragraph borders
58
- * Per ECMA-376 Part 1 Section 17.3.1.24
59
- */
60
- export interface ParagraphBorderDef {
61
- /** Border style (single, double, dotted, dashed, etc.) */
62
- val?: string;
63
- /** Border width in eighths of a point */
64
- sz?: number;
65
- /** Space between border and content in points */
66
- space?: number;
67
- /** Border color (hex RGB without #) */
68
- color?: string;
69
- /** Theme color reference */
70
- themeColor?: string;
71
- }
72
-
73
- /**
74
- * Paragraph borders (w:pBdr)
75
- * Per ECMA-376 Part 1 Section 17.3.1.24
76
- */
77
- export interface ParagraphBorders {
78
- /** Top border */
79
- top?: ParagraphBorderDef;
80
- /** Bottom border */
81
- bottom?: ParagraphBorderDef;
82
- /** Left border */
83
- left?: ParagraphBorderDef;
84
- /** Right border */
85
- right?: ParagraphBorderDef;
86
- /** Border between paragraphs with same borders */
87
- between?: ParagraphBorderDef;
88
- /** Bar border (vertical line) */
89
- bar?: ParagraphBorderDef;
90
- }
91
-
92
- /**
93
- * Paragraph shading (w:shd)
94
- * @see ShadingConfig in CommonTypes.ts for the canonical definition
95
- */
96
- export type ParagraphShading = ShadingConfig;
97
-
98
- /**
99
- * Tab stop definition
100
- * Per ECMA-376 Part 1 Section 17.3.1.38
101
- */
102
- export interface TabStopDef {
103
- /** Tab stop type (left, right, center, decimal, bar, clear) */
104
- val?: string;
105
- /** Tab position in twips */
106
- pos?: number;
107
- /** Leader character (none, dot, hyphen, underscore, middleDot) */
108
- leader?: string;
109
- }
110
-
111
- /**
112
- * Paragraph formatting options (subset for type safety)
113
- * Full ParagraphFormatting is in Paragraph.ts but we need a partial here
114
- *
115
- * Per ECMA-376 Part 1 Section 17.3.1, this covers all paragraph properties
116
- * that can be tracked in w:pPrChange revision elements.
117
- */
118
- export interface ParagraphFormattingPartial {
119
- /** Text alignment: left, center, right, justify */
120
- alignment?: 'left' | 'center' | 'right' | 'justify';
121
- /** Left indentation in twips */
122
- leftIndent?: number;
123
- /** Right indentation in twips */
124
- rightIndent?: number;
125
- /** First line indentation in twips */
126
- firstLineIndent?: number;
127
- /** Hanging indentation in twips */
128
- hangingIndent?: number;
129
- /** Spacing before paragraph in twips */
130
- spaceBefore?: number;
131
- /** Spacing after paragraph in twips */
132
- spaceAfter?: number;
133
- /** Line spacing in twips */
134
- lineSpacing?: number;
135
- /** Line spacing rule */
136
- lineSpacingRule?: 'auto' | 'exact' | 'atLeast';
137
- /** Paragraph style ID */
138
- style?: string;
139
- /** Keep with next paragraph */
140
- keepNext?: boolean;
141
- /** Keep lines together */
142
- keepLines?: boolean;
143
- /** Page break before */
144
- pageBreakBefore?: boolean;
145
- /** Widow/orphan control */
146
- widowControl?: boolean;
147
- /** Suppress auto-hyphenation */
148
- suppressAutoHyphens?: boolean;
149
- /** Contextual spacing */
150
- contextualSpacing?: boolean;
151
- /** Mirror indents */
152
- mirrorIndents?: boolean;
153
- /** Outline level (for headings) */
154
- outlineLevel?: number;
155
- /** Right-to-left paragraph */
156
- bidi?: boolean;
157
- /** Numbering properties (list formatting) */
158
- numbering?: {
159
- numId?: number;
160
- level?: number;
161
- };
162
-
163
- // === Extended properties for full ECMA-376 compliance ===
164
-
165
- /**
166
- * Paragraph borders (w:pBdr)
167
- * Per ECMA-376 Part 1 Section 17.3.1.24
168
- */
169
- borders?: ParagraphBorders;
170
-
171
- /**
172
- * Paragraph shading/background (w:shd)
173
- * Per ECMA-376 Part 1 Section 17.3.1.32
174
- */
175
- shading?: ParagraphShading;
176
-
177
- /**
178
- * Custom tab stops (w:tabs)
179
- * Per ECMA-376 Part 1 Section 17.3.1.38
180
- */
181
- tabs?: TabStopDef[];
182
-
183
- /**
184
- * Text direction (w:textDirection)
185
- * Per ECMA-376 Part 1 Section 17.3.1.40
186
- * Values: lrTb, tbRl, btLr, lrTbV, tbRlV, tbLrV
187
- */
188
- textDirection?: string;
189
-
190
- /**
191
- * Text alignment (w:textAlignment)
192
- * Per ECMA-376 Part 1 Section 17.3.1.39
193
- * Values: auto, top, center, baseline, bottom
194
- */
195
- textAlignment?: string;
196
-
197
- /**
198
- * Suppress line numbers (w:suppressLineNumbers)
199
- * Per ECMA-376 Part 1 Section 17.3.1.35
200
- */
201
- suppressLineNumbers?: boolean;
202
-
203
- /**
204
- * Adjust right indent (w:adjustRightInd)
205
- * Per ECMA-376 Part 1 Section 17.3.1.1
206
- */
207
- adjustRightInd?: boolean;
208
-
209
- /**
210
- * Snap to grid (w:snapToGrid)
211
- * Per ECMA-376 Part 1 Section 17.3.1.33
212
- */
213
- snapToGrid?: boolean;
214
-
215
- /**
216
- * Word wrap (w:wordWrap)
217
- * Per ECMA-376 Part 1 Section 17.3.1.44
218
- */
219
- wordWrap?: boolean;
220
-
221
- /**
222
- * Auto space between East Asian and numeric (w:autoSpaceDE)
223
- */
224
- autoSpaceDE?: boolean;
225
-
226
- /**
227
- * Auto space between East Asian and Western (w:autoSpaceDN)
228
- */
229
- autoSpaceDN?: boolean;
230
- }
231
-
232
- /**
233
- * Paragraph property change (w:pPrChange)
234
- *
235
- * Tracks changes to paragraph-level formatting such as:
236
- * - Alignment (left, center, right, justify)
237
- * - Indentation (left, right, first line, hanging)
238
- * - Spacing (before, after, line)
239
- * - Keep with next, keep lines together
240
- * - Paragraph style
241
- * - Numbering/list formatting (numId, ilvl)
242
- *
243
- * @example
244
- * ```xml
245
- * <w:pPrChange w:id="2" w:author="Jane" w:date="2024-01-15T11:00:00Z">
246
- * <w:pPr>
247
- * <w:jc w:val="left"/> <!-- Was left-aligned before change -->
248
- * </w:pPr>
249
- * </w:pPrChange>
250
- * ```
251
- */
252
- export interface ParagraphPropertyChange extends PropertyChangeBase {
253
- /** Previous paragraph formatting properties before the change */
254
- previousProperties: Partial<ParagraphFormattingPartial>;
255
- }
256
-
257
- /**
258
- * Table property change types
259
- */
260
- export type TablePropertyChangeType = 'table' | 'row' | 'cell';
261
-
262
- /**
263
- * Table property change (w:tblPrChange, w:trPrChange, w:tcPrChange)
264
- *
265
- * Tracks changes to table-level properties including:
266
- * - Table: width, alignment, borders, shading
267
- * - Row: height, header row, can't split
268
- * - Cell: width, vertical alignment, borders, shading, merge
269
- *
270
- * @example
271
- * ```xml
272
- * <w:tblPrChange w:id="3" w:author="John" w:date="2024-01-15T12:00:00Z">
273
- * <w:tblPr>
274
- * <w:tblW w:w="5000" w:type="pct"/>
275
- * </w:tblPr>
276
- * </w:tblPrChange>
277
- * ```
278
- */
279
- export interface TablePropertyChange extends PropertyChangeBase {
280
- /** Type of table element (table, row, or cell) */
281
- elementType: TablePropertyChangeType;
282
- /** Previous table properties before the change */
283
- previousProperties: Record<string, any>;
284
- }
285
-
286
- /**
287
- * Section property change (w:sectPrChange)
288
- *
289
- * Tracks changes to section-level properties such as:
290
- * - Page size (width, height)
291
- * - Page margins (top, bottom, left, right, header, footer, gutter)
292
- * - Page orientation (portrait, landscape)
293
- * - Columns configuration
294
- * - Page numbering
295
- *
296
- * @example
297
- * ```xml
298
- * <w:sectPrChange w:id="4" w:author="Jane" w:date="2024-01-15T13:00:00Z">
299
- * <w:sectPr>
300
- * <w:pgSz w:w="12240" w:h="15840"/>
301
- * <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440"/>
302
- * </w:sectPr>
303
- * </w:sectPrChange>
304
- * ```
305
- */
306
- export interface SectionPropertyChange extends PropertyChangeBase {
307
- /** Previous section properties before the change */
308
- previousProperties: Record<string, any>;
309
- }
310
-
311
- /**
312
- * Numbering change (w:numberingChange)
313
- *
314
- * Tracks changes to list numbering properties:
315
- * - Numbering definition ID
316
- * - Indentation level
317
- * - Starting number
318
- *
319
- * @example
320
- * ```xml
321
- * <w:numberingChange w:id="5" w:author="John" w:date="2024-01-15T14:00:00Z"
322
- * w:original="1" />
323
- * ```
324
- */
325
- export interface NumberingChange extends PropertyChangeBase {
326
- /** Previous numbering definition ID */
327
- previousNumId?: number;
328
- /** Previous indentation level */
329
- previousIlvl?: number;
330
- /** Original numbering format string */
331
- original?: string;
332
- }
333
-
334
- /**
335
- * Location of a revision within the document structure
336
- * Used for precise change tracking and changelog generation
337
- */
338
- export interface RevisionLocation {
339
- /** Paragraph index within the document body (0-based) */
340
- paragraphIndex?: number;
341
- /** Run index within the paragraph (0-based) */
342
- runIndex?: number;
343
- /** Table row index (0-based) - only for table revisions */
344
- tableRow?: number;
345
- /** Table cell index within row (0-based) - only for table revisions */
346
- tableCell?: number;
347
- /** Section index (0-based) - only for section revisions */
348
- sectionIndex?: number;
349
- /** Header/footer type if revision is in header/footer */
350
- headerFooterType?: 'header' | 'footer' | 'firstHeader' | 'firstFooter' | 'evenHeader' | 'evenFooter';
351
- }
352
-
353
- /**
354
- * Union type for all property change types
355
- */
356
- export type AnyPropertyChange =
357
- | RunPropertyChange
358
- | ParagraphPropertyChange
359
- | TablePropertyChange
360
- | SectionPropertyChange
361
- | NumberingChange;
362
-
363
- /**
364
- * Type guard to check if a property change is a RunPropertyChange
365
- *
366
- * Note: Empty previousProperties cannot be reliably typed - this guard returns
367
- * false for empty objects. Use context-aware typing when the source is known.
368
- */
369
- export function isRunPropertyChange(change: AnyPropertyChange): change is RunPropertyChange {
370
- if (!('previousProperties' in change) || 'elementType' in change || 'previousNumId' in change) {
371
- return false;
372
- }
373
- // Check for typical run properties - must have at least one identifiable property
374
- const props = change.previousProperties as Partial<RunFormatting>;
375
- return props.bold !== undefined ||
376
- props.italic !== undefined ||
377
- props.font !== undefined ||
378
- props.size !== undefined ||
379
- props.color !== undefined ||
380
- props.underline !== undefined ||
381
- props.strike !== undefined ||
382
- props.highlight !== undefined ||
383
- props.smallCaps !== undefined ||
384
- props.allCaps !== undefined ||
385
- props.subscript !== undefined ||
386
- props.superscript !== undefined;
387
- }
388
-
389
- /**
390
- * Type guard to check if a property change is a ParagraphPropertyChange
391
- */
392
- export function isParagraphPropertyChange(change: AnyPropertyChange): change is ParagraphPropertyChange {
393
- return 'previousProperties' in change &&
394
- !('elementType' in change) &&
395
- !('previousNumId' in change) &&
396
- // Check for typical paragraph properties
397
- ((change.previousProperties as ParagraphFormattingPartial).alignment !== undefined ||
398
- (change.previousProperties as ParagraphFormattingPartial).leftIndent !== undefined ||
399
- (change.previousProperties as ParagraphFormattingPartial).spaceBefore !== undefined ||
400
- (change.previousProperties as ParagraphFormattingPartial).style !== undefined);
401
- }
402
-
403
- /**
404
- * Type guard to check if a property change is a TablePropertyChange
405
- */
406
- export function isTablePropertyChange(change: AnyPropertyChange): change is TablePropertyChange {
407
- return 'elementType' in change;
408
- }
409
-
410
- /**
411
- * Type guard to check if a property change is a SectionPropertyChange
412
- *
413
- * Checks for section-specific properties: page size, margins, orientation, columns, etc.
414
- * Per ECMA-376, section properties are distinct from run/paragraph properties.
415
- */
416
- export function isSectionPropertyChange(change: AnyPropertyChange): change is SectionPropertyChange {
417
- if (!('previousProperties' in change) || 'elementType' in change || 'previousNumId' in change) {
418
- return false;
419
- }
420
- // Check for section-specific properties
421
- const props = change.previousProperties as Record<string, any>;
422
- return props.pageWidth !== undefined ||
423
- props.pageHeight !== undefined ||
424
- props.orientation !== undefined ||
425
- props.marginTop !== undefined ||
426
- props.marginBottom !== undefined ||
427
- props.marginLeft !== undefined ||
428
- props.marginRight !== undefined ||
429
- props.columns !== undefined ||
430
- props.headerDistance !== undefined ||
431
- props.footerDistance !== undefined ||
432
- props.gutterMargin !== undefined ||
433
- props.pageNumberStart !== undefined ||
434
- props.sectionType !== undefined;
435
- }
436
-
437
- /**
438
- * Type guard to check if a property change is a NumberingChange
439
- */
440
- export function isNumberingChange(change: AnyPropertyChange): change is NumberingChange {
441
- return 'previousNumId' in change || 'previousIlvl' in change || 'original' in change;
442
- }
1
+ /**
2
+ * PropertyChangeTypes - Type definitions for property change tracking in revisions
3
+ *
4
+ * These types represent the parsed data from OOXML property change elements:
5
+ * - w:rPrChange (run property changes)
6
+ * - w:pPrChange (paragraph property changes)
7
+ * - w:tblPrChange, w:trPrChange, w:tcPrChange (table property changes)
8
+ * - w:sectPrChange (section property changes)
9
+ * - w:numberingChange (numbering property changes)
10
+ *
11
+ * Per ECMA-376, property change elements track the PREVIOUS state of properties
12
+ * before a change was made, allowing Word to show what changed and enabling
13
+ * accept/reject functionality.
14
+ *
15
+ * @module PropertyChangeTypes
16
+ */
17
+
18
+ import type { RunFormatting } from './Run';
19
+ import type { ShadingConfig } from './CommonTypes';
20
+
21
+ /**
22
+ * Common base for all property change types
23
+ */
24
+ export interface PropertyChangeBase {
25
+ /** Unique revision ID (ST_DecimalNumber) */
26
+ id: number;
27
+ /** Author who made the change (required) */
28
+ author: string;
29
+ /** Date when the change was made (ISO 8601) */
30
+ date: Date;
31
+ }
32
+
33
+ /**
34
+ * Run property change (w:rPrChange)
35
+ *
36
+ * Tracks changes to run-level formatting such as:
37
+ * - Bold, italic, underline
38
+ * - Font name, size, color
39
+ * - Highlight, strikethrough
40
+ * - Character spacing, subscript/superscript
41
+ *
42
+ * @example
43
+ * ```xml
44
+ * <w:rPrChange w:id="1" w:author="John" w:date="2024-01-15T10:30:00Z">
45
+ * <w:rPr>
46
+ * <w:b/> <!-- Was bold before change -->
47
+ * </w:rPr>
48
+ * </w:rPrChange>
49
+ * ```
50
+ */
51
+ export interface RunPropertyChange extends PropertyChangeBase {
52
+ /** Previous run formatting properties before the change */
53
+ previousProperties: Partial<RunFormatting>;
54
+ }
55
+
56
+ /**
57
+ * Border definition for paragraph borders
58
+ * Per ECMA-376 Part 1 Section 17.3.1.24
59
+ */
60
+ export interface ParagraphBorderDef {
61
+ /** Border style (single, double, dotted, dashed, etc.) */
62
+ val?: string;
63
+ /** Border width in eighths of a point */
64
+ sz?: number;
65
+ /** Space between border and content in points */
66
+ space?: number;
67
+ /** Border color (hex RGB without #) */
68
+ color?: string;
69
+ /** Theme color reference */
70
+ themeColor?: string;
71
+ }
72
+
73
+ /**
74
+ * Paragraph borders (w:pBdr)
75
+ * Per ECMA-376 Part 1 Section 17.3.1.24
76
+ */
77
+ export interface ParagraphBorders {
78
+ /** Top border */
79
+ top?: ParagraphBorderDef;
80
+ /** Bottom border */
81
+ bottom?: ParagraphBorderDef;
82
+ /** Left border */
83
+ left?: ParagraphBorderDef;
84
+ /** Right border */
85
+ right?: ParagraphBorderDef;
86
+ /** Border between paragraphs with same borders */
87
+ between?: ParagraphBorderDef;
88
+ /** Bar border (vertical line) */
89
+ bar?: ParagraphBorderDef;
90
+ }
91
+
92
+ /**
93
+ * Paragraph shading (w:shd)
94
+ * @see ShadingConfig in CommonTypes.ts for the canonical definition
95
+ */
96
+ export type ParagraphShading = ShadingConfig;
97
+
98
+ /**
99
+ * Tab stop definition
100
+ * Per ECMA-376 Part 1 Section 17.3.1.38
101
+ */
102
+ export interface TabStopDef {
103
+ /** Tab stop type (left, right, center, decimal, bar, clear) */
104
+ val?: string;
105
+ /** Tab position in twips */
106
+ pos?: number;
107
+ /** Leader character (none, dot, hyphen, underscore, middleDot) */
108
+ leader?: string;
109
+ }
110
+
111
+ /**
112
+ * Paragraph formatting options (subset for type safety)
113
+ * Full ParagraphFormatting is in Paragraph.ts but we need a partial here
114
+ *
115
+ * Per ECMA-376 Part 1 Section 17.3.1, this covers all paragraph properties
116
+ * that can be tracked in w:pPrChange revision elements.
117
+ */
118
+ export interface ParagraphFormattingPartial {
119
+ /** Text alignment: left, center, right, justify */
120
+ alignment?: 'left' | 'center' | 'right' | 'justify';
121
+ /** Left indentation in twips */
122
+ leftIndent?: number;
123
+ /** Right indentation in twips */
124
+ rightIndent?: number;
125
+ /** First line indentation in twips */
126
+ firstLineIndent?: number;
127
+ /** Hanging indentation in twips */
128
+ hangingIndent?: number;
129
+ /** Spacing before paragraph in twips */
130
+ spaceBefore?: number;
131
+ /** Spacing after paragraph in twips */
132
+ spaceAfter?: number;
133
+ /** Line spacing in twips */
134
+ lineSpacing?: number;
135
+ /** Line spacing rule */
136
+ lineSpacingRule?: 'auto' | 'exact' | 'atLeast';
137
+ /** Paragraph style ID */
138
+ style?: string;
139
+ /** Keep with next paragraph */
140
+ keepNext?: boolean;
141
+ /** Keep lines together */
142
+ keepLines?: boolean;
143
+ /** Page break before */
144
+ pageBreakBefore?: boolean;
145
+ /** Widow/orphan control */
146
+ widowControl?: boolean;
147
+ /** Suppress auto-hyphenation */
148
+ suppressAutoHyphens?: boolean;
149
+ /** Contextual spacing */
150
+ contextualSpacing?: boolean;
151
+ /** Mirror indents */
152
+ mirrorIndents?: boolean;
153
+ /** Outline level (for headings) */
154
+ outlineLevel?: number;
155
+ /** Right-to-left paragraph */
156
+ bidi?: boolean;
157
+ /** Numbering properties (list formatting) */
158
+ numbering?: {
159
+ numId?: number;
160
+ level?: number;
161
+ };
162
+
163
+ // === Extended properties for full ECMA-376 compliance ===
164
+
165
+ /**
166
+ * Paragraph borders (w:pBdr)
167
+ * Per ECMA-376 Part 1 Section 17.3.1.24
168
+ */
169
+ borders?: ParagraphBorders;
170
+
171
+ /**
172
+ * Paragraph shading/background (w:shd)
173
+ * Per ECMA-376 Part 1 Section 17.3.1.32
174
+ */
175
+ shading?: ParagraphShading;
176
+
177
+ /**
178
+ * Custom tab stops (w:tabs)
179
+ * Per ECMA-376 Part 1 Section 17.3.1.38
180
+ */
181
+ tabs?: TabStopDef[];
182
+
183
+ /**
184
+ * Text direction (w:textDirection)
185
+ * Per ECMA-376 Part 1 Section 17.3.1.40
186
+ * Values: lrTb, tbRl, btLr, lrTbV, tbRlV, tbLrV
187
+ */
188
+ textDirection?: string;
189
+
190
+ /**
191
+ * Text alignment (w:textAlignment)
192
+ * Per ECMA-376 Part 1 Section 17.3.1.39
193
+ * Values: auto, top, center, baseline, bottom
194
+ */
195
+ textAlignment?: string;
196
+
197
+ /**
198
+ * Suppress line numbers (w:suppressLineNumbers)
199
+ * Per ECMA-376 Part 1 Section 17.3.1.35
200
+ */
201
+ suppressLineNumbers?: boolean;
202
+
203
+ /**
204
+ * Adjust right indent (w:adjustRightInd)
205
+ * Per ECMA-376 Part 1 Section 17.3.1.1
206
+ */
207
+ adjustRightInd?: boolean;
208
+
209
+ /**
210
+ * Snap to grid (w:snapToGrid)
211
+ * Per ECMA-376 Part 1 Section 17.3.1.33
212
+ */
213
+ snapToGrid?: boolean;
214
+
215
+ /**
216
+ * Word wrap (w:wordWrap)
217
+ * Per ECMA-376 Part 1 Section 17.3.1.44
218
+ */
219
+ wordWrap?: boolean;
220
+
221
+ /**
222
+ * Auto space between East Asian and numeric (w:autoSpaceDE)
223
+ */
224
+ autoSpaceDE?: boolean;
225
+
226
+ /**
227
+ * Auto space between East Asian and Western (w:autoSpaceDN)
228
+ */
229
+ autoSpaceDN?: boolean;
230
+ }
231
+
232
+ /**
233
+ * Paragraph property change (w:pPrChange)
234
+ *
235
+ * Tracks changes to paragraph-level formatting such as:
236
+ * - Alignment (left, center, right, justify)
237
+ * - Indentation (left, right, first line, hanging)
238
+ * - Spacing (before, after, line)
239
+ * - Keep with next, keep lines together
240
+ * - Paragraph style
241
+ * - Numbering/list formatting (numId, ilvl)
242
+ *
243
+ * @example
244
+ * ```xml
245
+ * <w:pPrChange w:id="2" w:author="Jane" w:date="2024-01-15T11:00:00Z">
246
+ * <w:pPr>
247
+ * <w:jc w:val="left"/> <!-- Was left-aligned before change -->
248
+ * </w:pPr>
249
+ * </w:pPrChange>
250
+ * ```
251
+ */
252
+ export interface ParagraphPropertyChange extends PropertyChangeBase {
253
+ /** Previous paragraph formatting properties before the change */
254
+ previousProperties: Partial<ParagraphFormattingPartial>;
255
+ }
256
+
257
+ /**
258
+ * Table property change types
259
+ */
260
+ export type TablePropertyChangeType = 'table' | 'row' | 'cell';
261
+
262
+ /**
263
+ * Table property change (w:tblPrChange, w:trPrChange, w:tcPrChange)
264
+ *
265
+ * Tracks changes to table-level properties including:
266
+ * - Table: width, alignment, borders, shading
267
+ * - Row: height, header row, can't split
268
+ * - Cell: width, vertical alignment, borders, shading, merge
269
+ *
270
+ * @example
271
+ * ```xml
272
+ * <w:tblPrChange w:id="3" w:author="John" w:date="2024-01-15T12:00:00Z">
273
+ * <w:tblPr>
274
+ * <w:tblW w:w="5000" w:type="pct"/>
275
+ * </w:tblPr>
276
+ * </w:tblPrChange>
277
+ * ```
278
+ */
279
+ export interface TablePropertyChange extends PropertyChangeBase {
280
+ /** Type of table element (table, row, or cell) */
281
+ elementType: TablePropertyChangeType;
282
+ /** Previous table properties before the change */
283
+ previousProperties: Record<string, any>;
284
+ }
285
+
286
+ /**
287
+ * Section property change (w:sectPrChange)
288
+ *
289
+ * Tracks changes to section-level properties such as:
290
+ * - Page size (width, height)
291
+ * - Page margins (top, bottom, left, right, header, footer, gutter)
292
+ * - Page orientation (portrait, landscape)
293
+ * - Columns configuration
294
+ * - Page numbering
295
+ *
296
+ * @example
297
+ * ```xml
298
+ * <w:sectPrChange w:id="4" w:author="Jane" w:date="2024-01-15T13:00:00Z">
299
+ * <w:sectPr>
300
+ * <w:pgSz w:w="12240" w:h="15840"/>
301
+ * <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440"/>
302
+ * </w:sectPr>
303
+ * </w:sectPrChange>
304
+ * ```
305
+ */
306
+ export interface SectionPropertyChange extends PropertyChangeBase {
307
+ /** Previous section properties before the change */
308
+ previousProperties: Record<string, any>;
309
+ }
310
+
311
+ /**
312
+ * Numbering change (w:numberingChange)
313
+ *
314
+ * Tracks changes to list numbering properties:
315
+ * - Numbering definition ID
316
+ * - Indentation level
317
+ * - Starting number
318
+ *
319
+ * @example
320
+ * ```xml
321
+ * <w:numberingChange w:id="5" w:author="John" w:date="2024-01-15T14:00:00Z"
322
+ * w:original="1" />
323
+ * ```
324
+ */
325
+ export interface NumberingChange extends PropertyChangeBase {
326
+ /** Previous numbering definition ID */
327
+ previousNumId?: number;
328
+ /** Previous indentation level */
329
+ previousIlvl?: number;
330
+ /** Original numbering format string */
331
+ original?: string;
332
+ }
333
+
334
+ /**
335
+ * Location of a revision within the document structure
336
+ * Used for precise change tracking and changelog generation
337
+ */
338
+ export interface RevisionLocation {
339
+ /** Paragraph index within the document body (0-based) */
340
+ paragraphIndex?: number;
341
+ /** Run index within the paragraph (0-based) */
342
+ runIndex?: number;
343
+ /** Table row index (0-based) - only for table revisions */
344
+ tableRow?: number;
345
+ /** Table cell index within row (0-based) - only for table revisions */
346
+ tableCell?: number;
347
+ /** Section index (0-based) - only for section revisions */
348
+ sectionIndex?: number;
349
+ /** Header/footer type if revision is in header/footer */
350
+ headerFooterType?:
351
+ | 'header'
352
+ | 'footer'
353
+ | 'firstHeader'
354
+ | 'firstFooter'
355
+ | 'evenHeader'
356
+ | 'evenFooter';
357
+ }
358
+
359
+ /**
360
+ * Union type for all property change types
361
+ */
362
+ export type AnyPropertyChange =
363
+ | RunPropertyChange
364
+ | ParagraphPropertyChange
365
+ | TablePropertyChange
366
+ | SectionPropertyChange
367
+ | NumberingChange;
368
+
369
+ /**
370
+ * Type guard to check if a property change is a RunPropertyChange
371
+ *
372
+ * Note: Empty previousProperties cannot be reliably typed - this guard returns
373
+ * false for empty objects. Use context-aware typing when the source is known.
374
+ */
375
+ export function isRunPropertyChange(change: AnyPropertyChange): change is RunPropertyChange {
376
+ if (!('previousProperties' in change) || 'elementType' in change || 'previousNumId' in change) {
377
+ return false;
378
+ }
379
+ // Check for typical run properties - must have at least one identifiable property
380
+ const props = change.previousProperties as Partial<RunFormatting>;
381
+ return (
382
+ props.bold !== undefined ||
383
+ props.italic !== undefined ||
384
+ props.font !== undefined ||
385
+ props.size !== undefined ||
386
+ props.color !== undefined ||
387
+ props.underline !== undefined ||
388
+ props.strike !== undefined ||
389
+ props.highlight !== undefined ||
390
+ props.smallCaps !== undefined ||
391
+ props.allCaps !== undefined ||
392
+ props.subscript !== undefined ||
393
+ props.superscript !== undefined
394
+ );
395
+ }
396
+
397
+ /**
398
+ * Type guard to check if a property change is a ParagraphPropertyChange
399
+ */
400
+ export function isParagraphPropertyChange(
401
+ change: AnyPropertyChange
402
+ ): change is ParagraphPropertyChange {
403
+ return (
404
+ 'previousProperties' in change &&
405
+ !('elementType' in change) &&
406
+ !('previousNumId' in change) &&
407
+ // Check for typical paragraph properties
408
+ ((change.previousProperties as ParagraphFormattingPartial).alignment !== undefined ||
409
+ (change.previousProperties as ParagraphFormattingPartial).leftIndent !== undefined ||
410
+ (change.previousProperties as ParagraphFormattingPartial).spaceBefore !== undefined ||
411
+ (change.previousProperties as ParagraphFormattingPartial).style !== undefined)
412
+ );
413
+ }
414
+
415
+ /**
416
+ * Type guard to check if a property change is a TablePropertyChange
417
+ */
418
+ export function isTablePropertyChange(change: AnyPropertyChange): change is TablePropertyChange {
419
+ return 'elementType' in change;
420
+ }
421
+
422
+ /**
423
+ * Type guard to check if a property change is a SectionPropertyChange
424
+ *
425
+ * Checks for section-specific properties: page size, margins, orientation, columns, etc.
426
+ * Per ECMA-376, section properties are distinct from run/paragraph properties.
427
+ */
428
+ export function isSectionPropertyChange(
429
+ change: AnyPropertyChange
430
+ ): change is SectionPropertyChange {
431
+ if (!('previousProperties' in change) || 'elementType' in change || 'previousNumId' in change) {
432
+ return false;
433
+ }
434
+ // Check for section-specific properties
435
+ const props = change.previousProperties as Record<string, any>;
436
+ return (
437
+ props.pageWidth !== undefined ||
438
+ props.pageHeight !== undefined ||
439
+ props.orientation !== undefined ||
440
+ props.marginTop !== undefined ||
441
+ props.marginBottom !== undefined ||
442
+ props.marginLeft !== undefined ||
443
+ props.marginRight !== undefined ||
444
+ props.columns !== undefined ||
445
+ props.headerDistance !== undefined ||
446
+ props.footerDistance !== undefined ||
447
+ props.gutterMargin !== undefined ||
448
+ props.pageNumberStart !== undefined ||
449
+ props.sectionType !== undefined
450
+ );
451
+ }
452
+
453
+ /**
454
+ * Type guard to check if a property change is a NumberingChange
455
+ */
456
+ export function isNumberingChange(change: AnyPropertyChange): change is NumberingChange {
457
+ return 'previousNumId' in change || 'previousIlvl' in change || 'original' in change;
458
+ }