docxmlater 10.1.4 → 10.1.6

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 (372) 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 +51 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +486 -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 +1 -0
  146. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  147. package/dist/formatting/NumberingManager.js +27 -9
  148. package/dist/formatting/NumberingManager.js.map +1 -1
  149. package/dist/formatting/Style.d.ts +11 -11
  150. package/dist/formatting/Style.d.ts.map +1 -1
  151. package/dist/formatting/Style.js +219 -247
  152. package/dist/formatting/Style.js.map +1 -1
  153. package/dist/formatting/StylesManager.d.ts +2 -2
  154. package/dist/formatting/StylesManager.d.ts.map +1 -1
  155. package/dist/formatting/StylesManager.js +96 -102
  156. package/dist/formatting/StylesManager.js.map +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts +1 -1
  158. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  159. package/dist/helpers/CleanupHelper.js +6 -6
  160. package/dist/helpers/CleanupHelper.js.map +1 -1
  161. package/dist/images/ImageOptimizer.js +7 -7
  162. package/dist/images/ImageOptimizer.js.map +1 -1
  163. package/dist/index.d.ts +9 -9
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js.map +1 -1
  166. package/dist/managers/DrawingManager.js.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  168. package/dist/tracking/DocumentTrackingContext.js +23 -7
  169. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  170. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  171. package/dist/tracking/TrackingContext.js.map +1 -1
  172. package/dist/types/compatibility-types.js.map +1 -1
  173. package/dist/types/formatting.js.map +1 -1
  174. package/dist/types/list-types.d.ts +6 -6
  175. package/dist/types/list-types.js.map +1 -1
  176. package/dist/types/settings-types.js.map +1 -1
  177. package/dist/types/styleConfig.d.ts +2 -2
  178. package/dist/types/styleConfig.js.map +1 -1
  179. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  180. package/dist/utils/ChangelogGenerator.js +97 -101
  181. package/dist/utils/ChangelogGenerator.js.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js +1 -1
  184. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  186. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  187. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  188. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  189. package/dist/utils/MoveOperationHelper.js +1 -1
  190. package/dist/utils/MoveOperationHelper.js.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  192. package/dist/utils/RevisionAwareProcessor.js +2 -4
  193. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  194. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  195. package/dist/utils/RevisionWalker.js +4 -12
  196. package/dist/utils/RevisionWalker.js.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  198. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  199. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  200. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  201. package/dist/utils/ShadingResolver.js +1 -1
  202. package/dist/utils/ShadingResolver.js.map +1 -1
  203. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  204. package/dist/utils/acceptRevisions.js +23 -12
  205. package/dist/utils/acceptRevisions.js.map +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  207. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  208. package/dist/utils/cnfStyleDecoder.js +40 -40
  209. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  210. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  211. package/dist/utils/corruptionDetection.js.map +1 -1
  212. package/dist/utils/dateFormatting.js.map +1 -1
  213. package/dist/utils/deepClone.js +1 -1
  214. package/dist/utils/deepClone.js.map +1 -1
  215. package/dist/utils/diagnostics.d.ts.map +1 -1
  216. package/dist/utils/diagnostics.js +1 -1
  217. package/dist/utils/diagnostics.js.map +1 -1
  218. package/dist/utils/errorHandling.js.map +1 -1
  219. package/dist/utils/formatting.d.ts.map +1 -1
  220. package/dist/utils/formatting.js +10 -2
  221. package/dist/utils/formatting.js.map +1 -1
  222. package/dist/utils/list-detection.d.ts +2 -2
  223. package/dist/utils/list-detection.d.ts.map +1 -1
  224. package/dist/utils/list-detection.js +21 -23
  225. package/dist/utils/list-detection.js.map +1 -1
  226. package/dist/utils/logger.d.ts.map +1 -1
  227. package/dist/utils/logger.js +12 -7
  228. package/dist/utils/logger.js.map +1 -1
  229. package/dist/utils/parsingHelpers.js.map +1 -1
  230. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  231. package/dist/utils/stripTrackedChanges.js +3 -3
  232. package/dist/utils/stripTrackedChanges.js.map +1 -1
  233. package/dist/utils/textDiff.d.ts +1 -1
  234. package/dist/utils/textDiff.js +8 -8
  235. package/dist/utils/textDiff.js.map +1 -1
  236. package/dist/utils/units.js.map +1 -1
  237. package/dist/utils/validation.d.ts.map +1 -1
  238. package/dist/utils/validation.js +24 -7
  239. package/dist/utils/validation.js.map +1 -1
  240. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  241. package/dist/utils/xmlSanitization.js +3 -3
  242. package/dist/utils/xmlSanitization.js.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  244. package/dist/validation/RevisionAutoFixer.js +5 -5
  245. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  246. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  247. package/dist/validation/RevisionValidator.js +7 -9
  248. package/dist/validation/RevisionValidator.js.map +1 -1
  249. package/dist/validation/ValidationRules.js +3 -3
  250. package/dist/validation/ValidationRules.js.map +1 -1
  251. package/dist/validation/index.js.map +1 -1
  252. package/dist/xml/XMLBuilder.d.ts +1 -1
  253. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  254. package/dist/xml/XMLBuilder.js +98 -100
  255. package/dist/xml/XMLBuilder.js.map +1 -1
  256. package/dist/xml/XMLParser.d.ts.map +1 -1
  257. package/dist/xml/XMLParser.js +61 -66
  258. package/dist/xml/XMLParser.js.map +1 -1
  259. package/dist/zip/ZipHandler.d.ts.map +1 -1
  260. package/dist/zip/ZipHandler.js.map +1 -1
  261. package/dist/zip/ZipReader.d.ts.map +1 -1
  262. package/dist/zip/ZipReader.js +1 -3
  263. package/dist/zip/ZipReader.js.map +1 -1
  264. package/dist/zip/ZipWriter.d.ts +1 -1
  265. package/dist/zip/ZipWriter.d.ts.map +1 -1
  266. package/dist/zip/ZipWriter.js +28 -36
  267. package/dist/zip/ZipWriter.js.map +1 -1
  268. package/dist/zip/types.js +1 -1
  269. package/dist/zip/types.js.map +1 -1
  270. package/package.json +92 -92
  271. package/src/__tests__/helper-methods.test.ts +512 -512
  272. package/src/constants/legacyCompatFlags.ts +138 -138
  273. package/src/constants/limits.ts +50 -50
  274. package/src/core/Document.ts +1010 -1145
  275. package/src/core/DocumentContent.ts +461 -467
  276. package/src/core/DocumentGenerator.ts +1133 -1104
  277. package/src/core/DocumentIdManager.ts +158 -158
  278. package/src/core/DocumentParser.ts +2347 -2716
  279. package/src/core/DocumentValidator.ts +363 -372
  280. package/src/core/Relationship.ts +367 -367
  281. package/src/core/RelationshipManager.ts +429 -428
  282. package/src/elements/AlternateContent.ts +42 -42
  283. package/src/elements/Bookmark.ts +212 -210
  284. package/src/elements/BookmarkManager.ts +247 -250
  285. package/src/elements/Comment.ts +356 -359
  286. package/src/elements/CommentManager.ts +499 -502
  287. package/src/elements/CommonTypes.ts +524 -549
  288. package/src/elements/CustomXml.ts +36 -36
  289. package/src/elements/Endnote.ts +221 -217
  290. package/src/elements/EndnoteManager.ts +246 -249
  291. package/src/elements/Field.ts +1292 -1233
  292. package/src/elements/FieldHelpers.ts +329 -333
  293. package/src/elements/FontManager.ts +336 -339
  294. package/src/elements/Footer.ts +269 -269
  295. package/src/elements/Footnote.ts +221 -217
  296. package/src/elements/FootnoteManager.ts +246 -249
  297. package/src/elements/Header.ts +269 -269
  298. package/src/elements/HeaderFooterManager.ts +219 -219
  299. package/src/elements/Hyperlink.ts +1288 -1193
  300. package/src/elements/Image.ts +1982 -1756
  301. package/src/elements/ImageManager.ts +437 -432
  302. package/src/elements/ImageRun.ts +59 -59
  303. package/src/elements/MathElement.ts +65 -65
  304. package/src/elements/Paragraph.ts +4347 -4287
  305. package/src/elements/PreservedElement.ts +53 -53
  306. package/src/elements/PropertyChangeTypes.ts +458 -442
  307. package/src/elements/RangeMarker.ts +382 -400
  308. package/src/elements/Revision.ts +1198 -1217
  309. package/src/elements/RevisionContent.ts +73 -73
  310. package/src/elements/RevisionManager.ts +1070 -1070
  311. package/src/elements/Run.ts +3103 -3073
  312. package/src/elements/Section.ts +1521 -1421
  313. package/src/elements/Shape.ts +884 -873
  314. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  315. package/src/elements/Table.ts +2468 -2524
  316. package/src/elements/TableCell.ts +1617 -1621
  317. package/src/elements/TableGridChange.ts +149 -151
  318. package/src/elements/TableOfContents.ts +701 -691
  319. package/src/elements/TableOfContentsElement.ts +89 -89
  320. package/src/elements/TableRow.ts +960 -929
  321. package/src/elements/TextBox.ts +766 -768
  322. package/src/formatting/AbstractNumbering.ts +580 -579
  323. package/src/formatting/NumberingInstance.ts +295 -299
  324. package/src/formatting/NumberingLevel.ts +981 -1040
  325. package/src/formatting/NumberingManager.ts +875 -827
  326. package/src/formatting/Style.ts +1785 -1879
  327. package/src/formatting/StylesManager.ts +1090 -1130
  328. package/src/helpers/CleanupHelper.ts +524 -524
  329. package/src/images/ImageOptimizer.ts +274 -274
  330. package/src/index.ts +559 -554
  331. package/src/managers/DrawingManager.ts +319 -319
  332. package/src/tracking/DocumentTrackingContext.ts +687 -674
  333. package/src/tracking/TrackingContext.ts +175 -173
  334. package/src/types/compatibility-types.ts +49 -49
  335. package/src/types/formatting.ts +210 -210
  336. package/src/types/list-types.ts +14 -14
  337. package/src/types/settings-types.ts +59 -59
  338. package/src/types/styleConfig.ts +189 -189
  339. package/src/utils/ChangelogGenerator.ts +1583 -1581
  340. package/src/utils/CompatibilityUpgrader.ts +235 -237
  341. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  342. package/src/utils/MoveOperationHelper.ts +233 -238
  343. package/src/utils/RevisionAwareProcessor.ts +518 -526
  344. package/src/utils/RevisionWalker.ts +427 -457
  345. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  346. package/src/utils/ShadingResolver.ts +105 -107
  347. package/src/utils/acceptRevisions.ts +723 -714
  348. package/src/utils/cnfStyleDecoder.ts +212 -217
  349. package/src/utils/corruptionDetection.ts +346 -345
  350. package/src/utils/dateFormatting.ts +20 -20
  351. package/src/utils/deepClone.ts +77 -78
  352. package/src/utils/diagnostics.ts +125 -129
  353. package/src/utils/errorHandling.ts +80 -80
  354. package/src/utils/formatting.ts +220 -213
  355. package/src/utils/list-detection.ts +32 -42
  356. package/src/utils/logger.ts +412 -404
  357. package/src/utils/parsingHelpers.ts +190 -190
  358. package/src/utils/stripTrackedChanges.ts +356 -353
  359. package/src/utils/textDiff.ts +100 -100
  360. package/src/utils/units.ts +421 -421
  361. package/src/utils/validation.ts +553 -542
  362. package/src/utils/xmlSanitization.ts +179 -182
  363. package/src/validation/RevisionAutoFixer.ts +541 -542
  364. package/src/validation/RevisionValidator.ts +470 -460
  365. package/src/validation/ValidationRules.ts +338 -338
  366. package/src/validation/index.ts +30 -30
  367. package/src/xml/XMLBuilder.ts +857 -871
  368. package/src/xml/XMLParser.ts +877 -919
  369. package/src/zip/ZipHandler.ts +629 -637
  370. package/src/zip/ZipReader.ts +295 -299
  371. package/src/zip/ZipWriter.ts +374 -390
  372. package/src/zip/types.ts +116 -116
@@ -1,549 +1,524 @@
1
- /**
2
- * CommonTypes - Consolidated type definitions for docxmlater elements
3
- *
4
- * This file consolidates duplicate type definitions that were scattered across multiple
5
- * element files (Paragraph.ts, Run.ts, Table.ts, TableCell.ts, TableRow.ts, Image.ts, Section.ts).
6
- *
7
- * Benefits:
8
- * - Single source of truth for shared types
9
- * - Consistent type definitions across all elements
10
- * - Easier maintenance and updates
11
- * - Better type safety when passing values between elements
12
- *
13
- * @module CommonTypes
14
- */
15
-
16
- // ============================================================================
17
- // SHADING PATTERNS
18
- // ============================================================================
19
-
20
- /**
21
- * Shading pattern types per ECMA-376 Part 1 Section 17.18.78 (ST_Shd)
22
- *
23
- * Consolidated from: Paragraph.ts, Run.ts, TableRow.ts, TableCell.ts
24
- * This is the complete set of shading patterns supported by Word.
25
- */
26
- export type ShadingPattern =
27
- // Solid patterns
28
- | "clear" // No pattern (transparent)
29
- | "solid" // Solid fill
30
- // Stripe patterns
31
- | "horzStripe" // Horizontal stripes
32
- | "vertStripe" // Vertical stripes
33
- | "reverseDiagStripe" // Reverse diagonal stripes (/)
34
- | "diagStripe" // Diagonal stripes (\)
35
- // Cross patterns
36
- | "horzCross" // Horizontal cross-hatch
37
- | "diagCross" // Diagonal cross-hatch
38
- // Thin stripe patterns
39
- | "thinHorzStripe" // Thin horizontal stripes
40
- | "thinVertStripe" // Thin vertical stripes
41
- | "thinReverseDiagStripe" // Thin reverse diagonal stripes
42
- | "thinDiagStripe" // Thin diagonal stripes
43
- // Thin cross patterns
44
- | "thinHorzCross" // Thin horizontal cross-hatch
45
- | "thinDiagCross" // Thin diagonal cross-hatch
46
- // Percentage fill patterns (5% increments with some extras)
47
- | "pct5"
48
- | "pct10"
49
- | "pct12"
50
- | "pct15"
51
- | "pct20"
52
- | "pct25"
53
- | "pct30"
54
- | "pct35"
55
- | "pct37"
56
- | "pct40"
57
- | "pct45"
58
- | "pct50"
59
- | "pct55"
60
- | "pct60"
61
- | "pct62"
62
- | "pct65"
63
- | "pct70"
64
- | "pct75"
65
- | "pct80"
66
- | "pct85"
67
- | "pct87"
68
- | "pct90"
69
- | "pct95"
70
- | "nil"; // Explicitly clear inherited shading (ECMA-376 §17.18.78)
71
-
72
- /**
73
- * Basic shading patterns (without percentage fills)
74
- * Use this for contexts where percentage patterns are not needed
75
- */
76
- export type BasicShadingPattern =
77
- | "clear"
78
- | "solid"
79
- | "horzStripe"
80
- | "vertStripe"
81
- | "reverseDiagStripe"
82
- | "diagStripe"
83
- | "horzCross"
84
- | "diagCross"
85
- | "thinHorzStripe"
86
- | "thinVertStripe"
87
- | "thinReverseDiagStripe"
88
- | "thinDiagStripe"
89
- | "thinHorzCross"
90
- | "thinDiagCross";
91
-
92
- // ============================================================================
93
- // BORDER STYLES
94
- // ============================================================================
95
-
96
- /**
97
- * Basic border styles per ECMA-376 Part 1 Section 17.18.2 (ST_Border)
98
- *
99
- * Consolidated from: Paragraph.ts, TableCell.ts, Table.ts
100
- * This covers the most commonly used border styles.
101
- */
102
- export type BorderStyle =
103
- | "none" // No border
104
- | "single" // Single line
105
- | "double" // Double line
106
- | "dashed" // Dashed line
107
- | "dotted" // Dotted line
108
- | "thick"; // Thick single line
109
-
110
- /**
111
- * Extended border styles including decorative effects
112
- *
113
- * Consolidated from: Run.ts (TextBorderStyle)
114
- * Includes 3D effects and other decorative styles.
115
- */
116
- export type ExtendedBorderStyle =
117
- | BorderStyle
118
- | "wave" // Wavy line
119
- | "dashDotStroked" // Dash-dot stroked
120
- | "threeDEmboss" // 3D embossed effect
121
- | "threeDEngrave"; // 3D engraved effect
122
-
123
- /**
124
- * Full border style set per ECMA-376
125
- * Includes all possible border values from the spec.
126
- */
127
- export type FullBorderStyle =
128
- | ExtendedBorderStyle
129
- | "dotDash" // Dot-dash pattern
130
- | "dotDotDash" // Dot-dot-dash pattern
131
- | "triple" // Triple line
132
- | "thinThickSmallGap"
133
- | "thickThinSmallGap"
134
- | "thinThickThinSmallGap"
135
- | "thinThickMediumGap"
136
- | "thickThinMediumGap"
137
- | "thinThickThinMediumGap"
138
- | "thinThickLargeGap"
139
- | "thickThinLargeGap"
140
- | "thinThickThinLargeGap"
141
- | "dashSmallGap"
142
- | "dashDotStroked"
143
- | "outset"
144
- | "inset";
145
-
146
- /**
147
- * Generic border definition interface
148
- *
149
- * Consolidated from: Paragraph.ts (BorderDefinition), Run.ts (TextBorder),
150
- * TableCell.ts (CellBorder), Table.ts (TableBorder)
151
- */
152
- export interface BorderDefinition {
153
- /** Border style */
154
- style?: BorderStyle | ExtendedBorderStyle;
155
- /** Border width in eighths of a point (1-96) */
156
- size?: number;
157
- /** Border color in hex format (without #) */
158
- color?: string;
159
- /** Space between border and content in points (0-31) */
160
- space?: number;
161
- }
162
-
163
- /**
164
- * Four-sided border definitions
165
- */
166
- export interface FourSidedBorders {
167
- top?: BorderDefinition;
168
- bottom?: BorderDefinition;
169
- left?: BorderDefinition;
170
- right?: BorderDefinition;
171
- }
172
-
173
- /**
174
- * Table border definitions (includes inside borders)
175
- */
176
- export interface TableBorderDefinitions extends FourSidedBorders {
177
- /** Inside horizontal borders (between rows) */
178
- insideH?: BorderDefinition;
179
- /** Inside vertical borders (between columns) */
180
- insideV?: BorderDefinition;
181
- }
182
-
183
- // ============================================================================
184
- // ALIGNMENT TYPES
185
- // ============================================================================
186
-
187
- /**
188
- * Horizontal alignment for general use
189
- *
190
- * Consolidated from: Image.ts, Table.ts (TableHorizontalAlignment)
191
- */
192
- export type HorizontalAlignment =
193
- | "left"
194
- | "center"
195
- | "right"
196
- | "inside" // Toward binding edge
197
- | "outside"; // Away from binding edge
198
-
199
- /**
200
- * Vertical alignment for general use
201
- *
202
- * Consolidated from: Image.ts, Table.ts (TableVerticalAlignment)
203
- */
204
- export type VerticalAlignment =
205
- | "top"
206
- | "center"
207
- | "bottom"
208
- | "inside" // Toward top of page in header
209
- | "outside"; // Toward bottom of page in footer
210
-
211
- /**
212
- * Vertical alignment for page content (Section-level)
213
- *
214
- * From: Section.ts - includes 'both' for justified vertical alignment
215
- */
216
- export type PageVerticalAlignment = "top" | "center" | "bottom" | "both";
217
-
218
- /**
219
- * Vertical alignment for table cells
220
- *
221
- * From: TableCell.ts (CellVerticalAlignment)
222
- */
223
- export type CellVerticalAlignment = "top" | "center" | "bottom";
224
-
225
- /**
226
- * Paragraph text alignment
227
- *
228
- * From: Paragraph.ts (ParagraphAlignment)
229
- * Note: 'both' is an alias for 'justify' in some contexts
230
- */
231
- export type ParagraphAlignment =
232
- | "left"
233
- | "center"
234
- | "right"
235
- | "justify"
236
- | "both";
237
-
238
- /**
239
- * Table alignment (horizontal positioning)
240
- *
241
- * From: Table.ts (TableAlignment)
242
- */
243
- export type TableAlignment = "left" | "center" | "right";
244
-
245
- /**
246
- * Row justification/alignment options
247
- *
248
- * From: TableRow.ts (RowJustification)
249
- */
250
- export type RowJustification = "left" | "center" | "right" | "start" | "end";
251
-
252
- /**
253
- * Text vertical alignment within line/cell
254
- *
255
- * From: Paragraph.ts (TextAlignment)
256
- */
257
- export type TextVerticalAlignment =
258
- | "top"
259
- | "center"
260
- | "baseline"
261
- | "bottom"
262
- | "auto";
263
-
264
- /**
265
- * Tab stop alignment types
266
- *
267
- * From: Paragraph.ts (TabAlignment)
268
- */
269
- export type TabAlignment =
270
- | "clear" // Remove tab stop
271
- | "left" // Left-aligned
272
- | "center" // Center-aligned
273
- | "right" // Right-aligned
274
- | "decimal" // Decimal-aligned (for numbers)
275
- | "bar" // Bar tab (vertical line)
276
- | "num"; // List number alignment
277
-
278
- // ============================================================================
279
- // POSITIONING & ANCHORING
280
- // ============================================================================
281
-
282
- /**
283
- * Position anchor type (what to position relative to)
284
- *
285
- * From: Image.ts (PositionAnchor)
286
- */
287
- export type PositionAnchor =
288
- | "page"
289
- | "margin"
290
- | "column"
291
- | "character"
292
- | "paragraph";
293
-
294
- /**
295
- * Horizontal anchor for floating elements
296
- *
297
- * From: Table.ts (TableHorizontalAnchor), Paragraph.ts (FrameProperties.hAnchor)
298
- */
299
- export type HorizontalAnchor = "text" | "margin" | "page";
300
-
301
- /**
302
- * Vertical anchor for floating elements
303
- *
304
- * From: Table.ts (TableVerticalAnchor), Paragraph.ts (FrameProperties.vAnchor)
305
- */
306
- export type VerticalAnchor = "text" | "margin" | "page";
307
-
308
- // ============================================================================
309
- // TEXT DIRECTION
310
- // ============================================================================
311
-
312
- /**
313
- * Text direction for paragraphs and cells
314
- *
315
- * Consolidated from: Paragraph.ts, Section.ts
316
- * Per ECMA-376 Part 1 Section 17.18.93 (ST_TextDirection)
317
- */
318
- export type TextDirection =
319
- | "lrTb" // Left-to-right, top-to-bottom (Western default)
320
- | "tbRl" // Top-to-bottom, right-to-left (East Asian vertical)
321
- | "btLr" // Bottom-to-top, left-to-right
322
- | "lrTbV" // Left-to-right, top-to-bottom (vertical variant)
323
- | "tbRlV" // Top-to-bottom, right-to-left (vertical variant)
324
- | "tbLrV"; // Top-to-bottom, left-to-right (vertical variant)
325
-
326
- /**
327
- * Simplified text direction for sections
328
- *
329
- * From: Section.ts
330
- */
331
- export type SectionTextDirection = "ltr" | "rtl" | "tbRl" | "btLr";
332
-
333
- // ============================================================================
334
- // WIDTH TYPES
335
- // ============================================================================
336
-
337
- /**
338
- * Width type specification per ECMA-376
339
- *
340
- * Consolidated from: Table.ts, TableCell.ts
341
- */
342
- export type WidthType =
343
- | "auto" // Automatically determined
344
- | "dxa" // Twips (twentieths of a point)
345
- | "pct"; // Percentage (in fiftieths of a percent)
346
-
347
- // ============================================================================
348
- // SHADING CONFIGURATION
349
- // ============================================================================
350
-
351
- /**
352
- * Generic shading configuration
353
- *
354
- * Consolidated from: Run.ts (CharacterShading), TableRow.ts (Shading), TableCell.ts (CellShading)
355
- */
356
- export interface ShadingConfig {
357
- /** Background fill color in hex format (without #), or "auto" to inherit from style/parent */
358
- fill?: string;
359
- /** Foreground/pattern color in hex format (without #), or "auto" to inherit from style/parent */
360
- color?: string;
361
- /** Shading pattern type (maps to w:val in XML) */
362
- pattern?: ShadingPattern;
363
- /** Theme fill color reference (e.g., "accent1") */
364
- themeFill?: string;
365
- /** Theme foreground color reference */
366
- themeColor?: string;
367
- /** Tint on theme fill (hex 00-FF) */
368
- themeFillTint?: string;
369
- /** Shade on theme fill (hex 00-FF) */
370
- themeFillShade?: string;
371
- /** Tint on theme color (hex 00-FF) */
372
- themeTint?: string;
373
- /** Shade on theme color (hex 00-FF) */
374
- themeShade?: string;
375
- }
376
-
377
- // ============================================================================
378
- // TAB STOPS
379
- // ============================================================================
380
-
381
- /**
382
- * Tab stop leader types
383
- *
384
- * From: Paragraph.ts (TabLeader)
385
- */
386
- export type TabLeader =
387
- | "none" // No leader
388
- | "dot" // Dots ......
389
- | "hyphen" // Hyphens ------
390
- | "underscore" // Underscores ______
391
- | "heavy" // Heavy line
392
- | "middleDot"; // Middle dots
393
-
394
- /**
395
- * Tab stop definition
396
- *
397
- * From: Paragraph.ts (TabStop)
398
- */
399
- export interface TabStop {
400
- /** Position in twips from left margin */
401
- position: number;
402
- /** Alignment type */
403
- alignment?: TabAlignment;
404
- /** Leader character type */
405
- leader?: TabLeader;
406
- }
407
-
408
- // ============================================================================
409
- // TYPE GUARDS
410
- // ============================================================================
411
-
412
- /**
413
- * Check if a value is a valid ShadingPattern
414
- */
415
- export function isShadingPattern(value: string): value is ShadingPattern {
416
- const patterns = [
417
- "clear",
418
- "solid",
419
- "horzStripe",
420
- "vertStripe",
421
- "reverseDiagStripe",
422
- "diagStripe",
423
- "horzCross",
424
- "diagCross",
425
- "thinHorzStripe",
426
- "thinVertStripe",
427
- "thinReverseDiagStripe",
428
- "thinDiagStripe",
429
- "thinHorzCross",
430
- "thinDiagCross",
431
- "pct5",
432
- "pct10",
433
- "pct12",
434
- "pct15",
435
- "pct20",
436
- "pct25",
437
- "pct30",
438
- "pct35",
439
- "pct37",
440
- "pct40",
441
- "pct45",
442
- "pct50",
443
- "pct55",
444
- "pct60",
445
- "pct62",
446
- "pct65",
447
- "pct70",
448
- "pct75",
449
- "pct80",
450
- "pct85",
451
- "pct87",
452
- "pct90",
453
- "pct95",
454
- "nil",
455
- ];
456
- return patterns.includes(value);
457
- }
458
-
459
- /**
460
- * Check if a value is a valid BorderStyle
461
- */
462
- export function isBorderStyle(value: string): value is BorderStyle {
463
- return ["none", "single", "double", "dashed", "dotted", "thick"].includes(
464
- value
465
- );
466
- }
467
-
468
- /**
469
- * Check if a value is a valid HorizontalAlignment
470
- */
471
- export function isHorizontalAlignment(
472
- value: string
473
- ): value is HorizontalAlignment {
474
- return ["left", "center", "right", "inside", "outside"].includes(value);
475
- }
476
-
477
- /**
478
- * Check if a value is a valid VerticalAlignment
479
- */
480
- export function isVerticalAlignment(value: string): value is VerticalAlignment {
481
- return ["top", "center", "bottom", "inside", "outside"].includes(value);
482
- }
483
-
484
- /**
485
- * Check if a value is a valid ParagraphAlignment
486
- */
487
- export function isParagraphAlignment(
488
- value: string
489
- ): value is ParagraphAlignment {
490
- return ["left", "center", "right", "justify", "both"].includes(value);
491
- }
492
-
493
- /**
494
- * Check if a value is a valid WidthType
495
- */
496
- export function isWidthType(value: string): value is WidthType {
497
- return ["auto", "dxa", "pct"].includes(value);
498
- }
499
-
500
- // ============================================================================
501
- // CONSTANTS
502
- // ============================================================================
503
-
504
- /**
505
- * Default border definition
506
- */
507
- export const DEFAULT_BORDER: BorderDefinition = {
508
- style: "single",
509
- size: 4, // 0.5pt (4 eighths)
510
- color: "000000",
511
- space: 0,
512
- };
513
-
514
- /**
515
- * No border definition
516
- */
517
- export const NO_BORDER: BorderDefinition = {
518
- style: "none",
519
- size: 0,
520
- color: "auto",
521
- space: 0,
522
- };
523
-
524
- // ============================================================================
525
- // SHADING UTILITIES
526
- // ============================================================================
527
-
528
- /**
529
- * Builds XML attributes for a w:shd element from a ShadingConfig.
530
- * Shared across all element types for consistent shading generation.
531
- */
532
- export function buildShadingAttributes(
533
- shading: ShadingConfig
534
- ): Record<string, string> {
535
- const attrs: Record<string, string> = {};
536
- // w:val is REQUIRED per ECMA-376 — default to "clear" if no pattern specified
537
- attrs["w:val"] = shading.pattern || "clear";
538
- if (shading.fill) attrs["w:fill"] = shading.fill;
539
- if (shading.color) attrs["w:color"] = shading.color;
540
- if (shading.themeFill) attrs["w:themeFill"] = shading.themeFill;
541
- if (shading.themeColor) attrs["w:themeColor"] = shading.themeColor;
542
- if (shading.themeFillTint)
543
- attrs["w:themeFillTint"] = shading.themeFillTint;
544
- if (shading.themeFillShade)
545
- attrs["w:themeFillShade"] = shading.themeFillShade;
546
- if (shading.themeTint) attrs["w:themeTint"] = shading.themeTint;
547
- if (shading.themeShade) attrs["w:themeShade"] = shading.themeShade;
548
- return attrs;
549
- }
1
+ /**
2
+ * CommonTypes - Consolidated type definitions for docxmlater elements
3
+ *
4
+ * This file consolidates duplicate type definitions that were scattered across multiple
5
+ * element files (Paragraph.ts, Run.ts, Table.ts, TableCell.ts, TableRow.ts, Image.ts, Section.ts).
6
+ *
7
+ * Benefits:
8
+ * - Single source of truth for shared types
9
+ * - Consistent type definitions across all elements
10
+ * - Easier maintenance and updates
11
+ * - Better type safety when passing values between elements
12
+ *
13
+ * @module CommonTypes
14
+ */
15
+
16
+ // ============================================================================
17
+ // SHADING PATTERNS
18
+ // ============================================================================
19
+
20
+ /**
21
+ * Shading pattern types per ECMA-376 Part 1 Section 17.18.78 (ST_Shd)
22
+ *
23
+ * Consolidated from: Paragraph.ts, Run.ts, TableRow.ts, TableCell.ts
24
+ * This is the complete set of shading patterns supported by Word.
25
+ */
26
+ export type ShadingPattern =
27
+ // Solid patterns
28
+ | 'clear' // No pattern (transparent)
29
+ | 'solid' // Solid fill
30
+ // Stripe patterns
31
+ | 'horzStripe' // Horizontal stripes
32
+ | 'vertStripe' // Vertical stripes
33
+ | 'reverseDiagStripe' // Reverse diagonal stripes (/)
34
+ | 'diagStripe' // Diagonal stripes (\)
35
+ // Cross patterns
36
+ | 'horzCross' // Horizontal cross-hatch
37
+ | 'diagCross' // Diagonal cross-hatch
38
+ // Thin stripe patterns
39
+ | 'thinHorzStripe' // Thin horizontal stripes
40
+ | 'thinVertStripe' // Thin vertical stripes
41
+ | 'thinReverseDiagStripe' // Thin reverse diagonal stripes
42
+ | 'thinDiagStripe' // Thin diagonal stripes
43
+ // Thin cross patterns
44
+ | 'thinHorzCross' // Thin horizontal cross-hatch
45
+ | 'thinDiagCross' // Thin diagonal cross-hatch
46
+ // Percentage fill patterns (5% increments with some extras)
47
+ | 'pct5'
48
+ | 'pct10'
49
+ | 'pct12'
50
+ | 'pct15'
51
+ | 'pct20'
52
+ | 'pct25'
53
+ | 'pct30'
54
+ | 'pct35'
55
+ | 'pct37'
56
+ | 'pct40'
57
+ | 'pct45'
58
+ | 'pct50'
59
+ | 'pct55'
60
+ | 'pct60'
61
+ | 'pct62'
62
+ | 'pct65'
63
+ | 'pct70'
64
+ | 'pct75'
65
+ | 'pct80'
66
+ | 'pct85'
67
+ | 'pct87'
68
+ | 'pct90'
69
+ | 'pct95'
70
+ | 'nil'; // Explicitly clear inherited shading (ECMA-376 §17.18.78)
71
+
72
+ /**
73
+ * Basic shading patterns (without percentage fills)
74
+ * Use this for contexts where percentage patterns are not needed
75
+ */
76
+ export type BasicShadingPattern =
77
+ | 'clear'
78
+ | 'solid'
79
+ | 'horzStripe'
80
+ | 'vertStripe'
81
+ | 'reverseDiagStripe'
82
+ | 'diagStripe'
83
+ | 'horzCross'
84
+ | 'diagCross'
85
+ | 'thinHorzStripe'
86
+ | 'thinVertStripe'
87
+ | 'thinReverseDiagStripe'
88
+ | 'thinDiagStripe'
89
+ | 'thinHorzCross'
90
+ | 'thinDiagCross';
91
+
92
+ // ============================================================================
93
+ // BORDER STYLES
94
+ // ============================================================================
95
+
96
+ /**
97
+ * Basic border styles per ECMA-376 Part 1 Section 17.18.2 (ST_Border)
98
+ *
99
+ * Consolidated from: Paragraph.ts, TableCell.ts, Table.ts
100
+ * This covers the most commonly used border styles.
101
+ */
102
+ export type BorderStyle =
103
+ | 'none' // No border
104
+ | 'single' // Single line
105
+ | 'double' // Double line
106
+ | 'dashed' // Dashed line
107
+ | 'dotted' // Dotted line
108
+ | 'thick'; // Thick single line
109
+
110
+ /**
111
+ * Extended border styles including decorative effects
112
+ *
113
+ * Consolidated from: Run.ts (TextBorderStyle)
114
+ * Includes 3D effects and other decorative styles.
115
+ */
116
+ export type ExtendedBorderStyle =
117
+ | BorderStyle
118
+ | 'wave' // Wavy line
119
+ | 'dashDotStroked' // Dash-dot stroked
120
+ | 'threeDEmboss' // 3D embossed effect
121
+ | 'threeDEngrave'; // 3D engraved effect
122
+
123
+ /**
124
+ * Full border style set per ECMA-376
125
+ * Includes all possible border values from the spec.
126
+ */
127
+ export type FullBorderStyle =
128
+ | ExtendedBorderStyle
129
+ | 'dotDash' // Dot-dash pattern
130
+ | 'dotDotDash' // Dot-dot-dash pattern
131
+ | 'triple' // Triple line
132
+ | 'thinThickSmallGap'
133
+ | 'thickThinSmallGap'
134
+ | 'thinThickThinSmallGap'
135
+ | 'thinThickMediumGap'
136
+ | 'thickThinMediumGap'
137
+ | 'thinThickThinMediumGap'
138
+ | 'thinThickLargeGap'
139
+ | 'thickThinLargeGap'
140
+ | 'thinThickThinLargeGap'
141
+ | 'dashSmallGap'
142
+ | 'dashDotStroked'
143
+ | 'outset'
144
+ | 'inset';
145
+
146
+ /**
147
+ * Generic border definition interface
148
+ *
149
+ * Consolidated from: Paragraph.ts (BorderDefinition), Run.ts (TextBorder),
150
+ * TableCell.ts (CellBorder), Table.ts (TableBorder)
151
+ */
152
+ export interface BorderDefinition {
153
+ /** Border style */
154
+ style?: BorderStyle | ExtendedBorderStyle;
155
+ /** Border width in eighths of a point (1-96) */
156
+ size?: number;
157
+ /** Border color in hex format (without #) */
158
+ color?: string;
159
+ /** Space between border and content in points (0-31) */
160
+ space?: number;
161
+ }
162
+
163
+ /**
164
+ * Four-sided border definitions
165
+ */
166
+ export interface FourSidedBorders {
167
+ top?: BorderDefinition;
168
+ bottom?: BorderDefinition;
169
+ left?: BorderDefinition;
170
+ right?: BorderDefinition;
171
+ }
172
+
173
+ /**
174
+ * Table border definitions (includes inside borders)
175
+ */
176
+ export interface TableBorderDefinitions extends FourSidedBorders {
177
+ /** Inside horizontal borders (between rows) */
178
+ insideH?: BorderDefinition;
179
+ /** Inside vertical borders (between columns) */
180
+ insideV?: BorderDefinition;
181
+ }
182
+
183
+ // ============================================================================
184
+ // ALIGNMENT TYPES
185
+ // ============================================================================
186
+
187
+ /**
188
+ * Horizontal alignment for general use
189
+ *
190
+ * Consolidated from: Image.ts, Table.ts (TableHorizontalAlignment)
191
+ */
192
+ export type HorizontalAlignment =
193
+ | 'left'
194
+ | 'center'
195
+ | 'right'
196
+ | 'inside' // Toward binding edge
197
+ | 'outside'; // Away from binding edge
198
+
199
+ /**
200
+ * Vertical alignment for general use
201
+ *
202
+ * Consolidated from: Image.ts, Table.ts (TableVerticalAlignment)
203
+ */
204
+ export type VerticalAlignment =
205
+ | 'top'
206
+ | 'center'
207
+ | 'bottom'
208
+ | 'inside' // Toward top of page in header
209
+ | 'outside'; // Toward bottom of page in footer
210
+
211
+ /**
212
+ * Vertical alignment for page content (Section-level)
213
+ *
214
+ * From: Section.ts - includes 'both' for justified vertical alignment
215
+ */
216
+ export type PageVerticalAlignment = 'top' | 'center' | 'bottom' | 'both';
217
+
218
+ /**
219
+ * Vertical alignment for table cells
220
+ *
221
+ * From: TableCell.ts (CellVerticalAlignment)
222
+ */
223
+ export type CellVerticalAlignment = 'top' | 'center' | 'bottom';
224
+
225
+ /**
226
+ * Paragraph text alignment
227
+ *
228
+ * From: Paragraph.ts (ParagraphAlignment)
229
+ * Note: 'both' is an alias for 'justify' in some contexts
230
+ */
231
+ export type ParagraphAlignment = 'left' | 'center' | 'right' | 'justify' | 'both';
232
+
233
+ /**
234
+ * Table alignment (horizontal positioning)
235
+ *
236
+ * From: Table.ts (TableAlignment)
237
+ */
238
+ export type TableAlignment = 'left' | 'center' | 'right';
239
+
240
+ /**
241
+ * Row justification/alignment options
242
+ *
243
+ * From: TableRow.ts (RowJustification)
244
+ */
245
+ export type RowJustification = 'left' | 'center' | 'right' | 'start' | 'end';
246
+
247
+ /**
248
+ * Text vertical alignment within line/cell
249
+ *
250
+ * From: Paragraph.ts (TextAlignment)
251
+ */
252
+ export type TextVerticalAlignment = 'top' | 'center' | 'baseline' | 'bottom' | 'auto';
253
+
254
+ /**
255
+ * Tab stop alignment types
256
+ *
257
+ * From: Paragraph.ts (TabAlignment)
258
+ */
259
+ export type TabAlignment =
260
+ | 'clear' // Remove tab stop
261
+ | 'left' // Left-aligned
262
+ | 'center' // Center-aligned
263
+ | 'right' // Right-aligned
264
+ | 'decimal' // Decimal-aligned (for numbers)
265
+ | 'bar' // Bar tab (vertical line)
266
+ | 'num'; // List number alignment
267
+
268
+ // ============================================================================
269
+ // POSITIONING & ANCHORING
270
+ // ============================================================================
271
+
272
+ /**
273
+ * Position anchor type (what to position relative to)
274
+ *
275
+ * From: Image.ts (PositionAnchor)
276
+ */
277
+ export type PositionAnchor = 'page' | 'margin' | 'column' | 'character' | 'paragraph';
278
+
279
+ /**
280
+ * Horizontal anchor for floating elements
281
+ *
282
+ * From: Table.ts (TableHorizontalAnchor), Paragraph.ts (FrameProperties.hAnchor)
283
+ */
284
+ export type HorizontalAnchor = 'text' | 'margin' | 'page';
285
+
286
+ /**
287
+ * Vertical anchor for floating elements
288
+ *
289
+ * From: Table.ts (TableVerticalAnchor), Paragraph.ts (FrameProperties.vAnchor)
290
+ */
291
+ export type VerticalAnchor = 'text' | 'margin' | 'page';
292
+
293
+ // ============================================================================
294
+ // TEXT DIRECTION
295
+ // ============================================================================
296
+
297
+ /**
298
+ * Text direction for paragraphs and cells
299
+ *
300
+ * Consolidated from: Paragraph.ts, Section.ts
301
+ * Per ECMA-376 Part 1 Section 17.18.93 (ST_TextDirection)
302
+ */
303
+ export type TextDirection =
304
+ | 'lrTb' // Left-to-right, top-to-bottom (Western default)
305
+ | 'tbRl' // Top-to-bottom, right-to-left (East Asian vertical)
306
+ | 'btLr' // Bottom-to-top, left-to-right
307
+ | 'lrTbV' // Left-to-right, top-to-bottom (vertical variant)
308
+ | 'tbRlV' // Top-to-bottom, right-to-left (vertical variant)
309
+ | 'tbLrV'; // Top-to-bottom, left-to-right (vertical variant)
310
+
311
+ /**
312
+ * Simplified text direction for sections
313
+ *
314
+ * From: Section.ts
315
+ */
316
+ export type SectionTextDirection = 'ltr' | 'rtl' | 'tbRl' | 'btLr';
317
+
318
+ // ============================================================================
319
+ // WIDTH TYPES
320
+ // ============================================================================
321
+
322
+ /**
323
+ * Width type specification per ECMA-376
324
+ *
325
+ * Consolidated from: Table.ts, TableCell.ts
326
+ */
327
+ export type WidthType =
328
+ | 'auto' // Automatically determined
329
+ | 'dxa' // Twips (twentieths of a point)
330
+ | 'pct'; // Percentage (in fiftieths of a percent)
331
+
332
+ // ============================================================================
333
+ // SHADING CONFIGURATION
334
+ // ============================================================================
335
+
336
+ /**
337
+ * Generic shading configuration
338
+ *
339
+ * Consolidated from: Run.ts (CharacterShading), TableRow.ts (Shading), TableCell.ts (CellShading)
340
+ */
341
+ export interface ShadingConfig {
342
+ /** Background fill color in hex format (without #), or "auto" to inherit from style/parent */
343
+ fill?: string;
344
+ /** Foreground/pattern color in hex format (without #), or "auto" to inherit from style/parent */
345
+ color?: string;
346
+ /** Shading pattern type (maps to w:val in XML) */
347
+ pattern?: ShadingPattern;
348
+ /** Theme fill color reference (e.g., "accent1") */
349
+ themeFill?: string;
350
+ /** Theme foreground color reference */
351
+ themeColor?: string;
352
+ /** Tint on theme fill (hex 00-FF) */
353
+ themeFillTint?: string;
354
+ /** Shade on theme fill (hex 00-FF) */
355
+ themeFillShade?: string;
356
+ /** Tint on theme color (hex 00-FF) */
357
+ themeTint?: string;
358
+ /** Shade on theme color (hex 00-FF) */
359
+ themeShade?: string;
360
+ }
361
+
362
+ // ============================================================================
363
+ // TAB STOPS
364
+ // ============================================================================
365
+
366
+ /**
367
+ * Tab stop leader types
368
+ *
369
+ * From: Paragraph.ts (TabLeader)
370
+ */
371
+ export type TabLeader =
372
+ | 'none' // No leader
373
+ | 'dot' // Dots ......
374
+ | 'hyphen' // Hyphens ------
375
+ | 'underscore' // Underscores ______
376
+ | 'heavy' // Heavy line
377
+ | 'middleDot'; // Middle dots
378
+
379
+ /**
380
+ * Tab stop definition
381
+ *
382
+ * From: Paragraph.ts (TabStop)
383
+ */
384
+ export interface TabStop {
385
+ /** Position in twips from left margin */
386
+ position: number;
387
+ /** Alignment type */
388
+ alignment?: TabAlignment;
389
+ /** Leader character type */
390
+ leader?: TabLeader;
391
+ }
392
+
393
+ // ============================================================================
394
+ // TYPE GUARDS
395
+ // ============================================================================
396
+
397
+ /**
398
+ * Check if a value is a valid ShadingPattern
399
+ */
400
+ export function isShadingPattern(value: string): value is ShadingPattern {
401
+ const patterns = [
402
+ 'clear',
403
+ 'solid',
404
+ 'horzStripe',
405
+ 'vertStripe',
406
+ 'reverseDiagStripe',
407
+ 'diagStripe',
408
+ 'horzCross',
409
+ 'diagCross',
410
+ 'thinHorzStripe',
411
+ 'thinVertStripe',
412
+ 'thinReverseDiagStripe',
413
+ 'thinDiagStripe',
414
+ 'thinHorzCross',
415
+ 'thinDiagCross',
416
+ 'pct5',
417
+ 'pct10',
418
+ 'pct12',
419
+ 'pct15',
420
+ 'pct20',
421
+ 'pct25',
422
+ 'pct30',
423
+ 'pct35',
424
+ 'pct37',
425
+ 'pct40',
426
+ 'pct45',
427
+ 'pct50',
428
+ 'pct55',
429
+ 'pct60',
430
+ 'pct62',
431
+ 'pct65',
432
+ 'pct70',
433
+ 'pct75',
434
+ 'pct80',
435
+ 'pct85',
436
+ 'pct87',
437
+ 'pct90',
438
+ 'pct95',
439
+ 'nil',
440
+ ];
441
+ return patterns.includes(value);
442
+ }
443
+
444
+ /**
445
+ * Check if a value is a valid BorderStyle
446
+ */
447
+ export function isBorderStyle(value: string): value is BorderStyle {
448
+ return ['none', 'single', 'double', 'dashed', 'dotted', 'thick'].includes(value);
449
+ }
450
+
451
+ /**
452
+ * Check if a value is a valid HorizontalAlignment
453
+ */
454
+ export function isHorizontalAlignment(value: string): value is HorizontalAlignment {
455
+ return ['left', 'center', 'right', 'inside', 'outside'].includes(value);
456
+ }
457
+
458
+ /**
459
+ * Check if a value is a valid VerticalAlignment
460
+ */
461
+ export function isVerticalAlignment(value: string): value is VerticalAlignment {
462
+ return ['top', 'center', 'bottom', 'inside', 'outside'].includes(value);
463
+ }
464
+
465
+ /**
466
+ * Check if a value is a valid ParagraphAlignment
467
+ */
468
+ export function isParagraphAlignment(value: string): value is ParagraphAlignment {
469
+ return ['left', 'center', 'right', 'justify', 'both'].includes(value);
470
+ }
471
+
472
+ /**
473
+ * Check if a value is a valid WidthType
474
+ */
475
+ export function isWidthType(value: string): value is WidthType {
476
+ return ['auto', 'dxa', 'pct'].includes(value);
477
+ }
478
+
479
+ // ============================================================================
480
+ // CONSTANTS
481
+ // ============================================================================
482
+
483
+ /**
484
+ * Default border definition
485
+ */
486
+ export const DEFAULT_BORDER: BorderDefinition = {
487
+ style: 'single',
488
+ size: 4, // 0.5pt (4 eighths)
489
+ color: '000000',
490
+ space: 0,
491
+ };
492
+
493
+ /**
494
+ * No border definition
495
+ */
496
+ export const NO_BORDER: BorderDefinition = {
497
+ style: 'none',
498
+ size: 0,
499
+ color: 'auto',
500
+ space: 0,
501
+ };
502
+
503
+ // ============================================================================
504
+ // SHADING UTILITIES
505
+ // ============================================================================
506
+
507
+ /**
508
+ * Builds XML attributes for a w:shd element from a ShadingConfig.
509
+ * Shared across all element types for consistent shading generation.
510
+ */
511
+ export function buildShadingAttributes(shading: ShadingConfig): Record<string, string> {
512
+ const attrs: Record<string, string> = {};
513
+ // w:val is REQUIRED per ECMA-376 — default to "clear" if no pattern specified
514
+ attrs['w:val'] = shading.pattern || 'clear';
515
+ if (shading.fill) attrs['w:fill'] = shading.fill;
516
+ if (shading.color) attrs['w:color'] = shading.color;
517
+ if (shading.themeFill) attrs['w:themeFill'] = shading.themeFill;
518
+ if (shading.themeColor) attrs['w:themeColor'] = shading.themeColor;
519
+ if (shading.themeFillTint) attrs['w:themeFillTint'] = shading.themeFillTint;
520
+ if (shading.themeFillShade) attrs['w:themeFillShade'] = shading.themeFillShade;
521
+ if (shading.themeTint) attrs['w:themeTint'] = shading.themeTint;
522
+ if (shading.themeShade) attrs['w:themeShade'] = shading.themeShade;
523
+ return attrs;
524
+ }