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
@@ -5,8 +5,8 @@
5
5
  * Each section can have its own headers, footers, and page numbering.
6
6
  */
7
7
 
8
- import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
9
- import { PAGE_SIZES } from '../utils/units';
8
+ import { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';
9
+ import { PAGE_SIZES } from '../utils/units.js';
10
10
 
11
11
  /**
12
12
  * Page orientation
@@ -255,6 +255,14 @@ export interface PageBorderDef {
255
255
  frame?: boolean;
256
256
  /** Theme color reference */
257
257
  themeColor?: string;
258
+ /**
259
+ * Theme tint (2-hex-digit string, ST_UcharHexNumber per §17.18.82) applied
260
+ * to themeColor lookup. CT_TopBorder/CT_BottomBorder extend CT_Border so
261
+ * inherit the full attribute set of §17.18.2.
262
+ */
263
+ themeTint?: string;
264
+ /** Theme shade (2-hex-digit string) applied to themeColor lookup */
265
+ themeShade?: string;
258
266
  /** Art border ID (for decorative borders) */
259
267
  artId?: number;
260
268
  }
@@ -357,7 +365,7 @@ export interface SectPrChange {
357
365
  export class Section {
358
366
  private properties: SectionProperties;
359
367
  /** Tracking context for automatic change tracking */
360
- private trackingContext?: import('../tracking/TrackingContext').TrackingContext;
368
+ private trackingContext?: import('../tracking/TrackingContext.js').TrackingContext;
361
369
  /** Section property change tracking (w:sectPrChange) */
362
370
  private sectPrChange?: SectPrChange;
363
371
 
@@ -366,8 +374,15 @@ export class Section {
366
374
  * @param properties Section properties
367
375
  */
368
376
  constructor(properties: SectionProperties = {}) {
369
- // Set defaults only where necessary
377
+ // Spread the full input first so every SectionProperties field is preserved
378
+ // (bidi, rtlGutter, docGrid, lineNumbering, footnotePr, endnotePr, noEndnote,
379
+ // formProt, printerSettingsId, chapStyle, chapSep, etc.), then apply defaults
380
+ // only for the handful of fields that must always have a value.
381
+ // Before this change the constructor enumerated an allow-list and silently
382
+ // dropped every other SectionProperties field, corrupting round-trip fidelity
383
+ // for any source document using those properties.
370
384
  this.properties = {
385
+ ...properties,
371
386
  pageSize: properties.pageSize || {
372
387
  width: PAGE_SIZES.LETTER.width,
373
388
  height: PAGE_SIZES.LETTER.height,
@@ -387,15 +402,6 @@ export class Section {
387
402
  },
388
403
  // Default to next page section break
389
404
  type: properties.type || 'nextPage',
390
- pageNumbering: properties.pageNumbering,
391
- headers: properties.headers,
392
- footers: properties.footers,
393
- titlePage: properties.titlePage,
394
- // Phase 4.5 - New properties
395
- verticalAlignment: properties.verticalAlignment,
396
- paperSource: properties.paperSource,
397
- textDirection: properties.textDirection,
398
- pageBorders: properties.pageBorders,
399
405
  };
400
406
  }
401
407
 
@@ -404,7 +410,7 @@ export class Section {
404
410
  * Called by Document when track changes is enabled.
405
411
  * @internal
406
412
  */
407
- _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {
413
+ _setTrackingContext(context: import('../tracking/TrackingContext.js').TrackingContext): void {
408
414
  this.trackingContext = context;
409
415
  }
410
416
 
@@ -1127,19 +1133,22 @@ export class Section {
1127
1133
  children.push(XMLBuilder.wSelf('pgSz', attrs));
1128
1134
  }
1129
1135
 
1130
- // Margins
1136
+ // Margins — CT_PageMar §17.6.11 declares ALL seven attributes
1137
+ // (top/right/bottom/left/header/footer/gutter) as `use="required"`.
1138
+ // Emit every one so output is spec-compliant for strict validators
1139
+ // (the Open XML SDK validator is lenient here but third-party / XSD
1140
+ // tooling is not). header/footer default to 720 twips (0.5"), and
1141
+ // gutter to 0 (no gutter — the usual value for non-book-bound docs).
1131
1142
  if (this.properties.margins) {
1132
1143
  const attrs: Record<string, string> = {
1133
1144
  'w:top': this.properties.margins.top.toString(),
1134
1145
  'w:right': this.properties.margins.right.toString(),
1135
1146
  'w:bottom': this.properties.margins.bottom.toString(),
1136
1147
  'w:left': this.properties.margins.left.toString(),
1148
+ 'w:header': (this.properties.margins.header ?? 720).toString(),
1149
+ 'w:footer': (this.properties.margins.footer ?? 720).toString(),
1150
+ 'w:gutter': (this.properties.margins.gutter ?? 0).toString(),
1137
1151
  };
1138
- attrs['w:header'] = (this.properties.margins.header ?? 720).toString();
1139
- attrs['w:footer'] = (this.properties.margins.footer ?? 720).toString();
1140
- if (this.properties.margins.gutter !== undefined) {
1141
- attrs['w:gutter'] = this.properties.margins.gutter.toString();
1142
- }
1143
1152
  children.push(XMLBuilder.wSelf('pgMar', attrs));
1144
1153
  }
1145
1154
 
@@ -1167,16 +1176,21 @@ export class Section {
1167
1176
 
1168
1177
  const borderChildren: XMLElement[] = [];
1169
1178
  const buildBorder = (side: string, def: PageBorderDef) => {
1170
- const bAttrs: Record<string, string | number> = {};
1171
- if (def.style) bAttrs['w:val'] = def.style;
1179
+ // CT_PageBorder §17.6.2 extends CT_Border (§17.18.2) w:val is
1180
+ // REQUIRED. Default to "nil" when consumer set only size/color.
1181
+ const bAttrs: Record<string, string | number> = { 'w:val': def.style ?? 'nil' };
1172
1182
  // ECMA-376 Part 1 §17.18.2: sz valid range 2-96 (eighths of a point)
1173
1183
  if (def.size !== undefined) bAttrs['w:sz'] = Math.max(2, Math.min(96, def.size));
1174
1184
  if (def.color) bAttrs['w:color'] = def.color;
1175
1185
  // ECMA-376 Part 1 §17.18.88: space valid range 0-31680 (points)
1176
1186
  if (def.space !== undefined) bAttrs['w:space'] = Math.max(0, Math.min(31680, def.space));
1177
- if (def.shadow) bAttrs['w:shadow'] = '1';
1178
- if (def.frame) bAttrs['w:frame'] = '1';
1187
+ // shadow / frame are CT_OnOff — use `!== undefined` so explicit false
1188
+ // (w:shadow="0") round-trips without being dropped.
1189
+ if (def.shadow !== undefined) bAttrs['w:shadow'] = def.shadow ? '1' : '0';
1190
+ if (def.frame !== undefined) bAttrs['w:frame'] = def.frame ? '1' : '0';
1179
1191
  if (def.themeColor) bAttrs['w:themeColor'] = def.themeColor;
1192
+ if (def.themeTint) bAttrs['w:themeTint'] = def.themeTint;
1193
+ if (def.themeShade) bAttrs['w:themeShade'] = def.themeShade;
1180
1194
  if (def.artId !== undefined) bAttrs['w:id'] = def.artId;
1181
1195
  borderChildren.push(XMLBuilder.wSelf(side, bAttrs));
1182
1196
  };
@@ -1267,9 +1281,14 @@ export class Section {
1267
1281
  );
1268
1282
  }
1269
1283
 
1270
- // Form protection (w:formProt)
1271
- if (this.properties.formProt) {
1272
- children.push(XMLBuilder.wSelf('formProt'));
1284
+ // Form protection (w:formProt) — CT_OnOff per §17.6.9. Preserve the
1285
+ // explicit-false distinction on round-trip (parser already does so).
1286
+ if (this.properties.formProt !== undefined) {
1287
+ children.push(
1288
+ this.properties.formProt
1289
+ ? XMLBuilder.wSelf('formProt')
1290
+ : XMLBuilder.wSelf('formProt', { 'w:val': '0' })
1291
+ );
1273
1292
  }
1274
1293
 
1275
1294
  // Vertical alignment
@@ -1277,14 +1296,22 @@ export class Section {
1277
1296
  children.push(XMLBuilder.wSelf('vAlign', { 'w:val': this.properties.verticalAlignment }));
1278
1297
  }
1279
1298
 
1280
- // Suppress endnotes (w:noEndnote)
1281
- if (this.properties.noEndnote) {
1282
- children.push(XMLBuilder.wSelf('noEndnote'));
1299
+ // Suppress endnotes (w:noEndnote) — CT_OnOff per §17.11.14.
1300
+ if (this.properties.noEndnote !== undefined) {
1301
+ children.push(
1302
+ this.properties.noEndnote
1303
+ ? XMLBuilder.wSelf('noEndnote')
1304
+ : XMLBuilder.wSelf('noEndnote', { 'w:val': '0' })
1305
+ );
1283
1306
  }
1284
1307
 
1285
- // Title page
1286
- if (this.properties.titlePage) {
1287
- children.push(XMLBuilder.wSelf('titlePg', { 'w:val': '1' }));
1308
+ // Title page (w:titlePg) — CT_OnOff per §17.10.6.
1309
+ if (this.properties.titlePage !== undefined) {
1310
+ children.push(
1311
+ this.properties.titlePage
1312
+ ? XMLBuilder.wSelf('titlePg', { 'w:val': '1' })
1313
+ : XMLBuilder.wSelf('titlePg', { 'w:val': '0' })
1314
+ );
1288
1315
  }
1289
1316
 
1290
1317
  // Text direction (map to valid ST_TextDirection values per ECMA-376 §17.18.93)
@@ -1303,14 +1330,20 @@ export class Section {
1303
1330
  children.push(XMLBuilder.wSelf('textDirection', { 'w:val': val }));
1304
1331
  }
1305
1332
 
1306
- // Bidirectional section (RTL)
1307
- if (this.properties.bidi) {
1308
- children.push(XMLBuilder.wSelf('bidi'));
1333
+ // Bidirectional section (RTL) — CT_OnOff per §17.6.3.
1334
+ if (this.properties.bidi !== undefined) {
1335
+ children.push(
1336
+ this.properties.bidi ? XMLBuilder.wSelf('bidi') : XMLBuilder.wSelf('bidi', { 'w:val': '0' })
1337
+ );
1309
1338
  }
1310
1339
 
1311
- // RTL gutter (gutter on right side)
1312
- if (this.properties.rtlGutter) {
1313
- children.push(XMLBuilder.wSelf('rtlGutter'));
1340
+ // RTL gutter CT_OnOff per §17.6.16.
1341
+ if (this.properties.rtlGutter !== undefined) {
1342
+ children.push(
1343
+ this.properties.rtlGutter
1344
+ ? XMLBuilder.wSelf('rtlGutter')
1345
+ : XMLBuilder.wSelf('rtlGutter', { 'w:val': '0' })
1346
+ );
1314
1347
  }
1315
1348
 
1316
1349
  // Document grid
@@ -1411,19 +1444,20 @@ export class Section {
1411
1444
  prevChildren.push(XMLBuilder.wSelf('pgSz', pgSzAttrs));
1412
1445
  }
1413
1446
  if (prev.margins) {
1414
- const pgMarAttrs: Record<string, string> = {};
1415
- if (prev.margins.top !== undefined) pgMarAttrs['w:top'] = prev.margins.top.toString();
1416
- if (prev.margins.bottom !== undefined)
1417
- pgMarAttrs['w:bottom'] = prev.margins.bottom.toString();
1418
- if (prev.margins.left !== undefined) pgMarAttrs['w:left'] = prev.margins.left.toString();
1419
- if (prev.margins.right !== undefined)
1420
- pgMarAttrs['w:right'] = prev.margins.right.toString();
1421
- if (prev.margins.header !== undefined)
1422
- pgMarAttrs['w:header'] = prev.margins.header.toString();
1423
- if (prev.margins.footer !== undefined)
1424
- pgMarAttrs['w:footer'] = prev.margins.footer.toString();
1425
- if (prev.margins.gutter !== undefined)
1426
- pgMarAttrs['w:gutter'] = prev.margins.gutter.toString();
1447
+ // CT_PageMar §17.6.11 requires all 7 attributes. Supply defaults
1448
+ // (top/right/bottom/left 1440 twips = 1" following Word's default,
1449
+ // header/footer 720, gutter → 0) for any missing from the
1450
+ // sectPrChange previous-properties snapshot so the emitted
1451
+ // previous-state is still schema-compliant.
1452
+ const pgMarAttrs: Record<string, string> = {
1453
+ 'w:top': (prev.margins.top ?? 1440).toString(),
1454
+ 'w:right': (prev.margins.right ?? 1440).toString(),
1455
+ 'w:bottom': (prev.margins.bottom ?? 1440).toString(),
1456
+ 'w:left': (prev.margins.left ?? 1440).toString(),
1457
+ 'w:header': (prev.margins.header ?? 720).toString(),
1458
+ 'w:footer': (prev.margins.footer ?? 720).toString(),
1459
+ 'w:gutter': (prev.margins.gutter ?? 0).toString(),
1460
+ };
1427
1461
  prevChildren.push(XMLBuilder.wSelf('pgMar', pgMarAttrs));
1428
1462
  }
1429
1463
  if (prev.paperSource) {
@@ -1446,15 +1480,18 @@ export class Section {
1446
1480
  if (pgb.zOrder) pgbAttrs['w:zOrder'] = pgb.zOrder;
1447
1481
  const borderChildren: XMLElement[] = [];
1448
1482
  const buildPrevBorder = (side: string, def: PageBorderDef) => {
1449
- const bAttrs: Record<string, string | number> = {};
1450
- if (def.style) bAttrs['w:val'] = def.style;
1483
+ // CT_PageBorder §17.6.2: w:val required. Default to "nil".
1484
+ // Full CT_Border attribute set preserved for sectPrChange history.
1485
+ const bAttrs: Record<string, string | number> = { 'w:val': def.style ?? 'nil' };
1451
1486
  if (def.size !== undefined) bAttrs['w:sz'] = Math.max(2, Math.min(96, def.size));
1452
1487
  if (def.color) bAttrs['w:color'] = def.color;
1453
1488
  if (def.space !== undefined)
1454
1489
  bAttrs['w:space'] = Math.max(0, Math.min(31680, def.space));
1455
- if (def.shadow) bAttrs['w:shadow'] = '1';
1456
- if (def.frame) bAttrs['w:frame'] = '1';
1490
+ if (def.shadow !== undefined) bAttrs['w:shadow'] = def.shadow ? '1' : '0';
1491
+ if (def.frame !== undefined) bAttrs['w:frame'] = def.frame ? '1' : '0';
1457
1492
  if (def.themeColor) bAttrs['w:themeColor'] = def.themeColor;
1493
+ if (def.themeTint) bAttrs['w:themeTint'] = def.themeTint;
1494
+ if (def.themeShade) bAttrs['w:themeShade'] = def.themeShade;
1458
1495
  if (def.artId !== undefined) bAttrs['w:id'] = def.artId;
1459
1496
  borderChildren.push(XMLBuilder.wSelf(side, bAttrs));
1460
1497
  };
@@ -1479,11 +1516,17 @@ export class Section {
1479
1516
  prevChildren.push(XMLBuilder.wSelf('lnNumType', lnAttrs));
1480
1517
  }
1481
1518
  }
1482
- if (prev.pageNumbering) {
1519
+ if (prev.pageNumbering || prev.chapStyle !== undefined || prev.chapSep) {
1520
+ // CT_PageNumber §17.6.12 has four attributes: fmt / start /
1521
+ // chapStyle / chapSep. chapStyle/chapSep live on the root of
1522
+ // SectionProperties (not inside pageNumbering) — mirror the
1523
+ // main-sectPr emitter at line ~1215.
1483
1524
  const pnAttrs: Record<string, string> = {};
1484
- if (prev.pageNumbering.start !== undefined)
1525
+ if (prev.pageNumbering?.start !== undefined)
1485
1526
  pnAttrs['w:start'] = prev.pageNumbering.start.toString();
1486
- if (prev.pageNumbering.format) pnAttrs['w:fmt'] = prev.pageNumbering.format;
1527
+ if (prev.pageNumbering?.format) pnAttrs['w:fmt'] = prev.pageNumbering.format;
1528
+ if (prev.chapStyle !== undefined) pnAttrs['w:chapStyle'] = prev.chapStyle.toString();
1529
+ if (prev.chapSep) pnAttrs['w:chapSep'] = prev.chapSep;
1487
1530
  if (Object.keys(pnAttrs).length > 0) {
1488
1531
  prevChildren.push(XMLBuilder.wSelf('pgNumType', pnAttrs));
1489
1532
  }
@@ -1520,17 +1563,35 @@ export class Section {
1520
1563
  : XMLBuilder.wSelf('cols', colAttrs)
1521
1564
  );
1522
1565
  }
1523
- if (prev.formProt) {
1524
- prevChildren.push(XMLBuilder.wSelf('formProt'));
1566
+ // Section-level CT_OnOff flags (formProt §17.6.9 / noEndnote
1567
+ // §17.11.14 / titlePg §17.10.6 / bidi §17.6.1 / rtlGutter
1568
+ // §17.6.16). The main emitter already preserves the explicit-
1569
+ // false distinction via `!== undefined` (see §1286 formProt),
1570
+ // but the sectPrChange emitter used a truthy gate — so a
1571
+ // tracked change capturing a "previous state = false" (e.g.,
1572
+ // form protection was OFF before the revision that turned it
1573
+ // ON) silently dropped the `<w:formProt w:val="0"/>` marker on
1574
+ // save. Parity-fix: guard on presence and emit w:val="0" for
1575
+ // explicit false.
1576
+ if (prev.formProt !== undefined) {
1577
+ prevChildren.push(
1578
+ prev.formProt
1579
+ ? XMLBuilder.wSelf('formProt')
1580
+ : XMLBuilder.wSelf('formProt', { 'w:val': '0' })
1581
+ );
1525
1582
  }
1526
1583
  if (prev.verticalAlignment) {
1527
1584
  prevChildren.push(XMLBuilder.wSelf('vAlign', { 'w:val': prev.verticalAlignment }));
1528
1585
  }
1529
- if (prev.noEndnote) {
1530
- prevChildren.push(XMLBuilder.wSelf('noEndnote'));
1586
+ if (prev.noEndnote !== undefined) {
1587
+ prevChildren.push(
1588
+ prev.noEndnote
1589
+ ? XMLBuilder.wSelf('noEndnote')
1590
+ : XMLBuilder.wSelf('noEndnote', { 'w:val': '0' })
1591
+ );
1531
1592
  }
1532
- if (prev.titlePage) {
1533
- prevChildren.push(XMLBuilder.wSelf('titlePg'));
1593
+ if (prev.titlePage !== undefined) {
1594
+ prevChildren.push(XMLBuilder.wSelf('titlePg', { 'w:val': prev.titlePage ? '1' : '0' }));
1534
1595
  }
1535
1596
  if (prev.textDirection) {
1536
1597
  const tdMap: Record<string, string> = {
@@ -1549,11 +1610,17 @@ export class Section {
1549
1610
  })
1550
1611
  );
1551
1612
  }
1552
- if (prev.bidi) {
1553
- prevChildren.push(XMLBuilder.wSelf('bidi'));
1613
+ if (prev.bidi !== undefined) {
1614
+ prevChildren.push(
1615
+ prev.bidi ? XMLBuilder.wSelf('bidi') : XMLBuilder.wSelf('bidi', { 'w:val': '0' })
1616
+ );
1554
1617
  }
1555
- if (prev.rtlGutter) {
1556
- prevChildren.push(XMLBuilder.wSelf('rtlGutter'));
1618
+ if (prev.rtlGutter !== undefined) {
1619
+ prevChildren.push(
1620
+ prev.rtlGutter
1621
+ ? XMLBuilder.wSelf('rtlGutter')
1622
+ : XMLBuilder.wSelf('rtlGutter', { 'w:val': '0' })
1623
+ );
1557
1624
  }
1558
1625
  if (prev.docGrid) {
1559
1626
  const dgAttrs: Record<string, string> = {};
@@ -8,16 +8,16 @@
8
8
  * shapes in Word documents use the wps:wsp element structure.
9
9
  */
10
10
 
11
- import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
12
- import { pointsToHalfPoints } from '../utils/units';
13
- import { RunFormatting } from './Run';
11
+ import { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';
12
+ import { pointsToHalfPoints } from '../utils/units.js';
13
+ import { RunFormatting } from './Run.js';
14
14
  import {
15
15
  ImagePosition,
16
16
  ImageAnchor,
17
17
  PositionAnchor,
18
18
  HorizontalAlignment,
19
19
  VerticalAlignment,
20
- } from './Image';
20
+ } from './Image.js';
21
21
 
22
22
  /**
23
23
  * Preset shape types available in DrawingML
@@ -6,9 +6,9 @@
6
6
  * tables, or other block-level elements.
7
7
  */
8
8
 
9
- import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
10
- import { Paragraph } from './Paragraph';
11
- import { Table } from './Table';
9
+ import { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';
10
+ import { Paragraph } from './Paragraph.js';
11
+ import { Table } from './Table.js';
12
12
 
13
13
  /**
14
14
  * Type of content lock for SDT
@@ -2,23 +2,23 @@
2
2
  * Table - Represents a table in a document
3
3
  */
4
4
 
5
- import { Paragraph } from './Paragraph';
6
- import { TableRow, RowFormatting } from './TableRow';
7
- import { TableCell, CellFormatting } from './TableCell';
8
- import { Revision } from './Revision';
9
- import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
10
- import { deepClone } from '../utils/deepClone';
11
- import { TableGridChange } from './TableGridChange';
5
+ import { Paragraph } from './Paragraph.js';
6
+ import { TableRow, RowFormatting } from './TableRow.js';
7
+ import { TableCell, CellFormatting } from './TableCell.js';
8
+ import { Revision } from './Revision.js';
9
+ import { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';
10
+ import { deepClone } from '../utils/deepClone.js';
11
+ import { TableGridChange } from './TableGridChange.js';
12
12
  import {
13
13
  TableAlignment as CommonTableAlignment,
14
- BorderStyle,
14
+ FullBorderStyle,
15
15
  HorizontalAnchor,
16
16
  VerticalAnchor,
17
17
  HorizontalAlignment,
18
18
  VerticalAlignment,
19
19
  ShadingConfig,
20
20
  buildShadingAttributes,
21
- } from './CommonTypes';
21
+ } from './CommonTypes.js';
22
22
 
23
23
  // ============================================================================
24
24
  // RE-EXPORTED TYPES (for backward compatibility)
@@ -37,13 +37,28 @@ export type TableLayout = 'auto' | 'autofit' | 'fixed';
37
37
 
38
38
  /**
39
39
  * Table border definition (same as cell borders)
40
+ * Table border per ECMA-376 §17.4.66 (tblBorders) / §17.4.66 / etc.
41
+ * `style` accepts the full ST_Border enumeration (§17.18.2) — table
42
+ * borders support the 25+ multi-line / dot-dash / inset / outset
43
+ * variants, not just the narrow 6-value BorderStyle subset.
44
+ *
40
45
  * @see CommonTypes.BorderDefinition
41
46
  */
42
47
  export interface TableBorder {
43
- style?: BorderStyle;
48
+ style?: FullBorderStyle;
44
49
  size?: number;
45
50
  space?: number; // Border spacing (padding) in points
46
51
  color?: string;
52
+ /** Theme color reference (ST_ThemeColor per §17.18.97) */
53
+ themeColor?: string;
54
+ /** Theme tint (2-hex-digit string) */
55
+ themeTint?: string;
56
+ /** Theme shade (2-hex-digit string) */
57
+ themeShade?: string;
58
+ /** Border casts a shadow (CT_OnOff attribute on CT_Border §17.18.2) */
59
+ shadow?: boolean;
60
+ /** Border is part of a frame around the content (CT_OnOff) */
61
+ frame?: boolean;
47
62
  }
48
63
 
49
64
  /**
@@ -142,11 +157,19 @@ export interface TableCellMargins {
142
157
  /**
143
158
  * Builds tblLook attributes including extended attributes (firstRow, lastRow, etc.)
144
159
  * Per ECMA-376 Part 1 §17.4.57, Word expects both w:val and the extended boolean attributes.
160
+ *
161
+ * CT_TblLook's `w:val` is `ST_ShortHexNumber` (XSD `hexBinary`, 2 bytes → 4
162
+ * hex digits). Normalise upstream inputs to 4 uppercase hex digits so we
163
+ * never emit invalid forms like `w:val="620"` (pre-existing upstream
164
+ * issue: XMLParser coerces purely-numeric hex strings like "0620" to the
165
+ * number 620, which would otherwise flow through unpadded).
145
166
  */
146
- function buildTblLookAttributes(hex: string): Record<string, string> {
147
- const value = parseInt(hex, 16) || 0;
167
+ function buildTblLookAttributes(hex: string | number): Record<string, string> {
168
+ const raw = typeof hex === 'number' ? hex.toString(16) : String(hex ?? '');
169
+ const normalized = raw.toUpperCase().padStart(4, '0');
170
+ const value = parseInt(normalized, 16) || 0;
148
171
  return {
149
- 'w:val': hex,
172
+ 'w:val': normalized,
150
173
  'w:firstRow': (value & 0x0020) !== 0 ? '1' : '0',
151
174
  'w:lastRow': (value & 0x0040) !== 0 ? '1' : '0',
152
175
  'w:firstColumn': (value & 0x0080) !== 0 ? '1' : '0',
@@ -222,9 +245,9 @@ export class Table {
222
245
  private rows: TableRow[] = [];
223
246
  private formatting: TableFormatting;
224
247
  /** StylesManager reference for conditional formatting resolution */
225
- private _stylesManager?: import('../formatting/StylesManager').StylesManager;
248
+ private _stylesManager?: import('../formatting/StylesManager.js').StylesManager;
226
249
  /** Tracking context for automatic change tracking */
227
- private trackingContext?: import('../tracking/TrackingContext').TrackingContext;
250
+ private trackingContext?: import('../tracking/TrackingContext.js').TrackingContext;
228
251
  /** Table property change tracking (w:tblPrChange) */
229
252
  private tblPrChange?: TblPrChange;
230
253
  /** Table grid change tracking (w:tblGridChange) per ECMA-376 §17.13.5.35 */
@@ -260,7 +283,7 @@ export class Table {
260
283
  * Called by Document when track changes is enabled.
261
284
  * @internal
262
285
  */
263
- _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {
286
+ _setTrackingContext(context: import('../tracking/TrackingContext.js').TrackingContext): void {
264
287
  this.trackingContext = context;
265
288
  }
266
289
 
@@ -1585,7 +1608,7 @@ export class Table {
1585
1608
  * Propagates to all paragraphs in all cells.
1586
1609
  * @internal
1587
1610
  */
1588
- _setStylesManager(manager: import('../formatting/StylesManager').StylesManager): void {
1611
+ _setStylesManager(manager: import('../formatting/StylesManager.js').StylesManager): void {
1589
1612
  this._stylesManager = manager;
1590
1613
  // Propagate to all paragraphs in all cells
1591
1614
  for (const row of this.rows) {
@@ -1601,7 +1624,7 @@ export class Table {
1601
1624
  * Gets the StylesManager reference for conditional formatting resolution.
1602
1625
  * @internal
1603
1626
  */
1604
- _getStylesManager(): import('../formatting/StylesManager').StylesManager | undefined {
1627
+ _getStylesManager(): import('../formatting/StylesManager.js').StylesManager | undefined {
1605
1628
  return this._stylesManager;
1606
1629
  }
1607
1630
 
@@ -1652,9 +1675,15 @@ export class Table {
1652
1675
  );
1653
1676
  }
1654
1677
 
1655
- // 4. bidiVisual
1656
- if (this.formatting.bidiVisual) {
1657
- tblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));
1678
+ // 4. bidiVisual — OnOffOnlyType (not CT_OnOff); w:val is restricted to "on"/"off"
1679
+ // by ST_OnOffOnly. Emit "off" for explicit false so the override-of-style
1680
+ // distinction between "inherited" (absent) and "explicitly off" survives.
1681
+ if (this.formatting.bidiVisual !== undefined) {
1682
+ if (this.formatting.bidiVisual) {
1683
+ tblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));
1684
+ } else {
1685
+ tblPrChildren.push(XMLBuilder.wSelf('bidiVisual', { 'w:val': 'off' }));
1686
+ }
1658
1687
  }
1659
1688
 
1660
1689
  // 5-6. tblStyleRowBandSize / tblStyleColBandSize
@@ -1841,9 +1870,13 @@ export class Table {
1841
1870
  if (prev.overlap) {
1842
1871
  prevTblPrChildren.push(XMLBuilder.wSelf('tblOverlap', { 'w:val': prev.overlap }));
1843
1872
  }
1844
- // 4. bidiVisual
1845
- if (prev.bidiVisual) {
1846
- prevTblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));
1873
+ // 4. bidiVisual — OnOffOnlyType; preserve explicit false inside tblPrChange
1874
+ if (prev.bidiVisual !== undefined) {
1875
+ if (prev.bidiVisual) {
1876
+ prevTblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));
1877
+ } else {
1878
+ prevTblPrChildren.push(XMLBuilder.wSelf('bidiVisual', { 'w:val': 'off' }));
1879
+ }
1847
1880
  }
1848
1881
  // 5. tblStyleRowBandSize
1849
1882
  if (prev.tblStyleRowBandSize !== undefined) {
@@ -1884,17 +1917,32 @@ export class Table {
1884
1917
  XMLBuilder.wSelf('tblInd', { 'w:w': prev.indent, 'w:type': prev.indentType || 'dxa' })
1885
1918
  );
1886
1919
  }
1887
- // 11. tblBorders
1920
+ // 11. tblBorders — CT_Border §17.18.2 requires w:val; default "nil".
1921
+ // Full attribute set (themeColor/themeTint/themeShade/shadow/frame)
1922
+ // preserved so tblPrChange tracked history matches modern Word output.
1888
1923
  if (prev.borders) {
1889
1924
  const borderChildren: XMLElement[] = [];
1890
1925
  const bNames = ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'] as const;
1891
1926
  for (const name of bNames) {
1892
1927
  const b = prev.borders[name];
1893
1928
  if (b) {
1894
- const bAttrs: Record<string, string | number> = {};
1895
- if (b.style) bAttrs['w:val'] = b.style;
1929
+ const bAttrs: Record<string, string | number> = { 'w:val': b.style ?? 'nil' };
1896
1930
  if (b.size !== undefined) bAttrs['w:sz'] = b.size;
1897
1931
  if (b.color) bAttrs['w:color'] = b.color;
1932
+ const bx = b as {
1933
+ space?: number;
1934
+ themeColor?: string;
1935
+ themeTint?: string;
1936
+ themeShade?: string;
1937
+ shadow?: boolean;
1938
+ frame?: boolean;
1939
+ };
1940
+ if (bx.space !== undefined) bAttrs['w:space'] = bx.space;
1941
+ if (bx.themeColor) bAttrs['w:themeColor'] = bx.themeColor;
1942
+ if (bx.themeTint) bAttrs['w:themeTint'] = bx.themeTint;
1943
+ if (bx.themeShade) bAttrs['w:themeShade'] = bx.themeShade;
1944
+ if (bx.shadow !== undefined) bAttrs['w:shadow'] = bx.shadow ? '1' : '0';
1945
+ if (bx.frame !== undefined) bAttrs['w:frame'] = bx.frame ? '1' : '0';
1898
1946
  borderChildren.push(XMLBuilder.wSelf(name, bAttrs));
1899
1947
  }
1900
1948
  }
@@ -2045,6 +2093,22 @@ export class Table {
2045
2093
  return false;
2046
2094
  }
2047
2095
 
2096
+ /**
2097
+ * Internal: removes a row without triggering tracking-context side effects.
2098
+ * Used by the revision acceptor when resolving tracked row deletions —
2099
+ * accepting a pre-existing tracked deletion must NOT create a new
2100
+ * revision, so the usual `removeRow()` path (which wraps content in
2101
+ * `w:del`) is unsuitable. Bypasses the "at least one row" guard because
2102
+ * the caller is responsible for any empty-table cleanup.
2103
+ *
2104
+ * @internal
2105
+ */
2106
+ _removeRowAtIndex(index: number): boolean {
2107
+ if (index < 0 || index >= this.rows.length) return false;
2108
+ this.rows.splice(index, 1);
2109
+ return true;
2110
+ }
2111
+
2048
2112
  /**
2049
2113
  * Inserts a row at a specific position
2050
2114
  *