docxmlater 10.0.2 → 10.0.3

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 (393) hide show
  1. package/README.md +2 -2
  2. package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
  3. package/dist/constants/legacyCompatFlags.js.map +1 -1
  4. package/dist/constants/limits.d.ts +0 -27
  5. package/dist/constants/limits.d.ts.map +1 -1
  6. package/dist/constants/limits.js +13 -13
  7. package/dist/constants/limits.js.map +1 -1
  8. package/dist/core/Document.d.ts +23 -19
  9. package/dist/core/Document.d.ts.map +1 -1
  10. package/dist/core/Document.js +197 -63
  11. package/dist/core/Document.js.map +1 -1
  12. package/dist/core/DocumentContent.d.ts.map +1 -1
  13. package/dist/core/DocumentContent.js.map +1 -1
  14. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  15. package/dist/core/DocumentGenerator.js +59 -24
  16. package/dist/core/DocumentGenerator.js.map +1 -1
  17. package/dist/core/DocumentIdManager.d.ts.map +1 -1
  18. package/dist/core/DocumentIdManager.js.map +1 -1
  19. package/dist/core/DocumentParser.d.ts +6 -6
  20. package/dist/core/DocumentParser.d.ts.map +1 -1
  21. package/dist/core/DocumentParser.js +60 -54
  22. package/dist/core/DocumentParser.js.map +1 -1
  23. package/dist/core/DocumentValidator.d.ts.map +1 -1
  24. package/dist/core/DocumentValidator.js.map +1 -1
  25. package/dist/core/Relationship.d.ts.map +1 -1
  26. package/dist/core/Relationship.js +1 -1
  27. package/dist/core/Relationship.js.map +1 -1
  28. package/dist/core/RelationshipManager.js +3 -3
  29. package/dist/core/RelationshipManager.js.map +1 -1
  30. package/dist/elements/AlternateContent.js.map +1 -1
  31. package/dist/elements/Bookmark.d.ts.map +1 -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.js +1 -1
  36. package/dist/elements/Comment.js.map +1 -1
  37. package/dist/elements/CommentManager.d.ts.map +1 -1
  38. package/dist/elements/CommentManager.js +8 -2
  39. package/dist/elements/CommentManager.js.map +1 -1
  40. package/dist/elements/CommonTypes.d.ts.map +1 -1
  41. package/dist/elements/CommonTypes.js +1 -2
  42. package/dist/elements/CommonTypes.js.map +1 -1
  43. package/dist/elements/CustomXml.js.map +1 -1
  44. package/dist/elements/Endnote.d.ts.map +1 -1
  45. package/dist/elements/Endnote.js.map +1 -1
  46. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  47. package/dist/elements/EndnoteManager.js.map +1 -1
  48. package/dist/elements/Field.d.ts.map +1 -1
  49. package/dist/elements/Field.js +31 -28
  50. package/dist/elements/Field.js.map +1 -1
  51. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  52. package/dist/elements/FieldHelpers.js +6 -6
  53. package/dist/elements/FieldHelpers.js.map +1 -1
  54. package/dist/elements/FontManager.d.ts.map +1 -1
  55. package/dist/elements/FontManager.js.map +1 -1
  56. package/dist/elements/Footer.js.map +1 -1
  57. package/dist/elements/Footnote.d.ts.map +1 -1
  58. package/dist/elements/Footnote.js.map +1 -1
  59. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  60. package/dist/elements/FootnoteManager.js.map +1 -1
  61. package/dist/elements/Header.js.map +1 -1
  62. package/dist/elements/HeaderFooterManager.js.map +1 -1
  63. package/dist/elements/Hyperlink.d.ts.map +1 -1
  64. package/dist/elements/Hyperlink.js +5 -5
  65. package/dist/elements/Hyperlink.js.map +1 -1
  66. package/dist/elements/Image.d.ts +2 -2
  67. package/dist/elements/Image.d.ts.map +1 -1
  68. package/dist/elements/Image.js +21 -5
  69. package/dist/elements/Image.js.map +1 -1
  70. package/dist/elements/ImageManager.d.ts.map +1 -1
  71. package/dist/elements/ImageManager.js +2 -2
  72. package/dist/elements/ImageManager.js.map +1 -1
  73. package/dist/elements/ImageRun.js.map +1 -1
  74. package/dist/elements/MathElement.js.map +1 -1
  75. package/dist/elements/Paragraph.d.ts.map +1 -1
  76. package/dist/elements/Paragraph.js +128 -117
  77. package/dist/elements/Paragraph.js.map +1 -1
  78. package/dist/elements/PreservedElement.js.map +1 -1
  79. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  80. package/dist/elements/RangeMarker.js.map +1 -1
  81. package/dist/elements/Revision.d.ts +1 -0
  82. package/dist/elements/Revision.d.ts.map +1 -1
  83. package/dist/elements/Revision.js +44 -5
  84. package/dist/elements/Revision.js.map +1 -1
  85. package/dist/elements/RevisionContent.js.map +1 -1
  86. package/dist/elements/RevisionManager.d.ts.map +1 -1
  87. package/dist/elements/RevisionManager.js.map +1 -1
  88. package/dist/elements/Run.d.ts.map +1 -1
  89. package/dist/elements/Run.js +1 -3
  90. package/dist/elements/Run.js.map +1 -1
  91. package/dist/elements/Section.d.ts.map +1 -1
  92. package/dist/elements/Section.js +127 -118
  93. package/dist/elements/Section.js.map +1 -1
  94. package/dist/elements/Shape.d.ts.map +1 -1
  95. package/dist/elements/Shape.js +21 -0
  96. package/dist/elements/Shape.js.map +1 -1
  97. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  98. package/dist/elements/StructuredDocumentTag.js +20 -8
  99. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  100. package/dist/elements/Table.d.ts +2 -2
  101. package/dist/elements/Table.d.ts.map +1 -1
  102. package/dist/elements/Table.js +29 -35
  103. package/dist/elements/Table.js.map +1 -1
  104. package/dist/elements/TableCell.d.ts +2 -2
  105. package/dist/elements/TableCell.d.ts.map +1 -1
  106. package/dist/elements/TableCell.js +63 -67
  107. package/dist/elements/TableCell.js.map +1 -1
  108. package/dist/elements/TableGridChange.js.map +1 -1
  109. package/dist/elements/TableOfContents.d.ts +6 -6
  110. package/dist/elements/TableOfContents.d.ts.map +1 -1
  111. package/dist/elements/TableOfContents.js.map +1 -1
  112. package/dist/elements/TableOfContentsElement.js.map +1 -1
  113. package/dist/elements/TableRow.d.ts.map +1 -1
  114. package/dist/elements/TableRow.js +65 -47
  115. package/dist/elements/TableRow.js.map +1 -1
  116. package/dist/elements/TextBox.d.ts.map +1 -1
  117. package/dist/elements/TextBox.js +1 -1
  118. package/dist/elements/TextBox.js.map +1 -1
  119. package/dist/formatting/AbstractNumbering.d.ts +1 -1
  120. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  121. package/dist/formatting/AbstractNumbering.js +11 -11
  122. package/dist/formatting/AbstractNumbering.js.map +1 -1
  123. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  124. package/dist/formatting/NumberingInstance.js +4 -4
  125. package/dist/formatting/NumberingInstance.js.map +1 -1
  126. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  127. package/dist/formatting/NumberingLevel.js +26 -26
  128. package/dist/formatting/NumberingLevel.js.map +1 -1
  129. package/dist/formatting/NumberingManager.d.ts +1 -1
  130. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  131. package/dist/formatting/NumberingManager.js.map +1 -1
  132. package/dist/formatting/Style.d.ts.map +1 -1
  133. package/dist/formatting/Style.js +87 -95
  134. package/dist/formatting/Style.js.map +1 -1
  135. package/dist/formatting/StylesManager.d.ts +3 -3
  136. package/dist/formatting/StylesManager.d.ts.map +1 -1
  137. package/dist/formatting/StylesManager.js.map +1 -1
  138. package/dist/helpers/CleanupHelper.js.map +1 -1
  139. package/dist/images/ImageOptimizer.js.map +1 -1
  140. package/dist/index.js.map +1 -1
  141. package/dist/managers/DrawingManager.d.ts.map +1 -1
  142. package/dist/managers/DrawingManager.js.map +1 -1
  143. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  144. package/dist/tracking/TrackingContext.js.map +1 -1
  145. package/dist/types/compatibility-types.js.map +1 -1
  146. package/dist/types/formatting.js.map +1 -1
  147. package/dist/types/list-types.d.ts +4 -4
  148. package/dist/types/list-types.d.ts.map +1 -1
  149. package/dist/types/list-types.js.map +1 -1
  150. package/dist/types/settings-types.js.map +1 -1
  151. package/dist/types/styleConfig.js.map +1 -1
  152. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  153. package/dist/utils/ChangelogGenerator.js.map +1 -1
  154. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  155. package/dist/utils/CompatibilityUpgrader.js +7 -7
  156. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  157. package/dist/utils/InMemoryRevisionAcceptor.js +1 -1
  158. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  159. package/dist/utils/MoveOperationHelper.js.map +1 -1
  160. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  161. package/dist/utils/RevisionWalker.js.map +1 -1
  162. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  163. package/dist/utils/ShadingResolver.js +1 -1
  164. package/dist/utils/ShadingResolver.js.map +1 -1
  165. package/dist/utils/acceptRevisions.d.ts +0 -28
  166. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  167. package/dist/utils/acceptRevisions.js +5 -7
  168. package/dist/utils/acceptRevisions.js.map +1 -1
  169. package/dist/utils/cnfStyleDecoder.js +1 -1
  170. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  171. package/dist/utils/corruptionDetection.js.map +1 -1
  172. package/dist/utils/dateFormatting.js.map +1 -1
  173. package/dist/utils/deepClone.d.ts +0 -1
  174. package/dist/utils/deepClone.d.ts.map +1 -1
  175. package/dist/utils/deepClone.js +0 -7
  176. package/dist/utils/deepClone.js.map +1 -1
  177. package/dist/utils/diagnostics.d.ts +2 -2
  178. package/dist/utils/diagnostics.d.ts.map +1 -1
  179. package/dist/utils/diagnostics.js.map +1 -1
  180. package/dist/utils/errorHandling.js.map +1 -1
  181. package/dist/utils/formatting.js.map +1 -1
  182. package/dist/utils/list-detection.d.ts +2 -2
  183. package/dist/utils/list-detection.d.ts.map +1 -1
  184. package/dist/utils/list-detection.js +3 -3
  185. package/dist/utils/list-detection.js.map +1 -1
  186. package/dist/utils/logger.d.ts +2 -4
  187. package/dist/utils/logger.d.ts.map +1 -1
  188. package/dist/utils/logger.js +0 -2
  189. package/dist/utils/logger.js.map +1 -1
  190. package/dist/utils/parsingHelpers.js.map +1 -1
  191. package/dist/utils/stripTrackedChanges.d.ts +0 -19
  192. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  193. package/dist/utils/stripTrackedChanges.js +0 -2
  194. package/dist/utils/stripTrackedChanges.js.map +1 -1
  195. package/dist/utils/textDiff.js.map +1 -1
  196. package/dist/utils/units.js.map +1 -1
  197. package/dist/utils/validation.d.ts.map +1 -1
  198. package/dist/utils/validation.js.map +1 -1
  199. package/dist/utils/xmlSanitization.js.map +1 -1
  200. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  201. package/dist/validation/RevisionValidator.js.map +1 -1
  202. package/dist/validation/ValidationRules.js.map +1 -1
  203. package/dist/validation/index.js.map +1 -1
  204. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  205. package/dist/xml/XMLBuilder.js +10 -0
  206. package/dist/xml/XMLBuilder.js.map +1 -1
  207. package/dist/xml/XMLParser.d.ts.map +1 -1
  208. package/dist/xml/XMLParser.js +4 -5
  209. package/dist/xml/XMLParser.js.map +1 -1
  210. package/dist/zip/ZipHandler.js.map +1 -1
  211. package/dist/zip/ZipReader.js.map +1 -1
  212. package/dist/zip/ZipWriter.js.map +1 -1
  213. package/dist/zip/errors.js.map +1 -1
  214. package/dist/zip/types.js.map +1 -1
  215. package/package.json +34 -4
  216. package/src/__tests__/helper-methods.test.ts +512 -0
  217. package/src/constants/legacyCompatFlags.ts +138 -0
  218. package/src/constants/limits.ts +50 -0
  219. package/src/core/CLAUDE.md +109 -0
  220. package/src/core/Document.ts +15569 -0
  221. package/src/core/DocumentContent.ts +467 -0
  222. package/src/core/DocumentGenerator.ts +1104 -0
  223. package/src/core/DocumentIdManager.ts +158 -0
  224. package/src/core/DocumentParser.ts +10107 -0
  225. package/src/core/DocumentValidator.ts +372 -0
  226. package/src/core/Relationship.ts +367 -0
  227. package/src/core/RelationshipManager.ts +428 -0
  228. package/src/elements/AlternateContent.ts +42 -0
  229. package/src/elements/Bookmark.ts +210 -0
  230. package/src/elements/BookmarkManager.ts +250 -0
  231. package/src/elements/CLAUDE.md +126 -0
  232. package/src/elements/Comment.ts +359 -0
  233. package/src/elements/CommentManager.ts +502 -0
  234. package/src/elements/CommonTypes.ts +549 -0
  235. package/src/elements/CustomXml.ts +36 -0
  236. package/src/elements/Endnote.ts +217 -0
  237. package/src/elements/EndnoteManager.ts +249 -0
  238. package/src/elements/Field.ts +1233 -0
  239. package/src/elements/FieldHelpers.ts +333 -0
  240. package/src/elements/FontManager.ts +339 -0
  241. package/src/elements/Footer.ts +269 -0
  242. package/src/elements/Footnote.ts +217 -0
  243. package/src/elements/FootnoteManager.ts +249 -0
  244. package/src/elements/Header.ts +269 -0
  245. package/src/elements/HeaderFooterManager.ts +219 -0
  246. package/src/elements/Hyperlink.ts +1146 -0
  247. package/src/elements/Image.ts +1756 -0
  248. package/src/elements/ImageManager.ts +432 -0
  249. package/src/elements/ImageRun.ts +59 -0
  250. package/src/elements/MathElement.ts +65 -0
  251. package/src/elements/Paragraph.ts +4227 -0
  252. package/src/elements/PreservedElement.ts +53 -0
  253. package/src/elements/PropertyChangeTypes.ts +442 -0
  254. package/src/elements/RangeMarker.ts +400 -0
  255. package/src/elements/Revision.ts +1217 -0
  256. package/src/elements/RevisionContent.ts +73 -0
  257. package/src/elements/RevisionManager.ts +1070 -0
  258. package/src/elements/Run.ts +3068 -0
  259. package/src/elements/Section.ts +1421 -0
  260. package/src/elements/Shape.ts +873 -0
  261. package/src/elements/StructuredDocumentTag.ts +978 -0
  262. package/src/elements/Table.ts +2524 -0
  263. package/src/elements/TableCell.ts +1586 -0
  264. package/src/elements/TableGridChange.ts +151 -0
  265. package/src/elements/TableOfContents.ts +691 -0
  266. package/src/elements/TableOfContentsElement.ts +89 -0
  267. package/src/elements/TableRow.ts +906 -0
  268. package/src/elements/TextBox.ts +768 -0
  269. package/src/formatting/AbstractNumbering.ts +548 -0
  270. package/src/formatting/CLAUDE.md +74 -0
  271. package/src/formatting/NumberingInstance.ts +212 -0
  272. package/src/formatting/NumberingLevel.ts +1006 -0
  273. package/src/formatting/NumberingManager.ts +827 -0
  274. package/src/formatting/Style.ts +1833 -0
  275. package/src/formatting/StylesManager.ts +1005 -0
  276. package/src/helpers/CleanupHelper.ts +524 -0
  277. package/src/images/ImageOptimizer.ts +274 -0
  278. package/src/index.ts +554 -0
  279. package/src/managers/CLAUDE.md +47 -0
  280. package/src/managers/DrawingManager.ts +319 -0
  281. package/src/tracking/DocumentTrackingContext.ts +643 -0
  282. package/src/tracking/TrackingContext.ts +173 -0
  283. package/src/types/compatibility-types.ts +49 -0
  284. package/src/types/formatting.ts +210 -0
  285. package/src/types/list-types.ts +152 -0
  286. package/src/types/settings-types.ts +59 -0
  287. package/src/types/styleConfig.ts +189 -0
  288. package/src/utils/CLAUDE.md +153 -0
  289. package/src/utils/ChangelogGenerator.ts +1581 -0
  290. package/src/utils/CompatibilityUpgrader.ts +237 -0
  291. package/src/utils/InMemoryRevisionAcceptor.ts +668 -0
  292. package/src/utils/MoveOperationHelper.ts +238 -0
  293. package/src/utils/RevisionAwareProcessor.ts +526 -0
  294. package/src/utils/RevisionWalker.ts +457 -0
  295. package/src/utils/SelectiveRevisionAcceptor.ts +613 -0
  296. package/src/utils/ShadingResolver.ts +107 -0
  297. package/src/utils/acceptRevisions.ts +714 -0
  298. package/src/utils/cnfStyleDecoder.ts +217 -0
  299. package/src/utils/corruptionDetection.ts +345 -0
  300. package/src/utils/dateFormatting.ts +20 -0
  301. package/src/utils/deepClone.ts +78 -0
  302. package/src/utils/diagnostics.ts +129 -0
  303. package/src/utils/errorHandling.ts +80 -0
  304. package/src/utils/formatting.ts +213 -0
  305. package/src/utils/list-detection.ts +274 -0
  306. package/src/utils/logger.ts +404 -0
  307. package/src/utils/parsingHelpers.ts +190 -0
  308. package/src/utils/stripTrackedChanges.ts +353 -0
  309. package/src/utils/textDiff.ts +100 -0
  310. package/src/utils/units.ts +421 -0
  311. package/src/utils/validation.ts +542 -0
  312. package/src/utils/xmlSanitization.ts +182 -0
  313. package/src/validation/RevisionAutoFixer.ts +542 -0
  314. package/src/validation/RevisionValidator.ts +460 -0
  315. package/src/validation/ValidationRules.ts +338 -0
  316. package/src/validation/index.ts +30 -0
  317. package/src/xml/CLAUDE.md +65 -0
  318. package/src/xml/XMLBuilder.ts +871 -0
  319. package/src/xml/XMLParser.ts +919 -0
  320. package/src/zip/CLAUDE.md +55 -0
  321. package/src/zip/ZipHandler.ts +637 -0
  322. package/src/zip/ZipReader.ts +299 -0
  323. package/src/zip/ZipWriter.ts +390 -0
  324. package/src/zip/errors.ts +69 -0
  325. package/src/zip/types.ts +116 -0
  326. package/dist/core/ListNormalizer.d.ts +0 -23
  327. package/dist/core/ListNormalizer.d.ts.map +0 -1
  328. package/dist/core/ListNormalizer.js +0 -624
  329. package/dist/core/ListNormalizer.js.map +0 -1
  330. package/dist/images/index.d.ts +0 -2
  331. package/dist/images/index.d.ts.map +0 -1
  332. package/dist/images/index.js +0 -8
  333. package/dist/images/index.js.map +0 -1
  334. package/dist/ms-doc/cfb/CFBReader.d.ts +0 -35
  335. package/dist/ms-doc/cfb/CFBReader.d.ts.map +0 -1
  336. package/dist/ms-doc/cfb/CFBReader.js +0 -360
  337. package/dist/ms-doc/cfb/CFBReader.js.map +0 -1
  338. package/dist/ms-doc/converter/DocToDocxConverter.d.ts +0 -55
  339. package/dist/ms-doc/converter/DocToDocxConverter.d.ts.map +0 -1
  340. package/dist/ms-doc/converter/DocToDocxConverter.js +0 -324
  341. package/dist/ms-doc/converter/DocToDocxConverter.js.map +0 -1
  342. package/dist/ms-doc/fib/FIB.d.ts +0 -18
  343. package/dist/ms-doc/fib/FIB.d.ts.map +0 -1
  344. package/dist/ms-doc/fib/FIB.js +0 -342
  345. package/dist/ms-doc/fib/FIB.js.map +0 -1
  346. package/dist/ms-doc/fields/FieldParser.d.ts +0 -31
  347. package/dist/ms-doc/fields/FieldParser.d.ts.map +0 -1
  348. package/dist/ms-doc/fields/FieldParser.js +0 -266
  349. package/dist/ms-doc/fields/FieldParser.js.map +0 -1
  350. package/dist/ms-doc/images/PictureExtractor.d.ts +0 -22
  351. package/dist/ms-doc/images/PictureExtractor.d.ts.map +0 -1
  352. package/dist/ms-doc/images/PictureExtractor.js +0 -233
  353. package/dist/ms-doc/images/PictureExtractor.js.map +0 -1
  354. package/dist/ms-doc/index.d.ts +0 -20
  355. package/dist/ms-doc/index.d.ts.map +0 -1
  356. package/dist/ms-doc/index.js +0 -59
  357. package/dist/ms-doc/index.js.map +0 -1
  358. package/dist/ms-doc/properties/SPRM.d.ts +0 -210
  359. package/dist/ms-doc/properties/SPRM.d.ts.map +0 -1
  360. package/dist/ms-doc/properties/SPRM.js +0 -633
  361. package/dist/ms-doc/properties/SPRM.js.map +0 -1
  362. package/dist/ms-doc/sections/SectionParser.d.ts +0 -25
  363. package/dist/ms-doc/sections/SectionParser.d.ts.map +0 -1
  364. package/dist/ms-doc/sections/SectionParser.js +0 -214
  365. package/dist/ms-doc/sections/SectionParser.js.map +0 -1
  366. package/dist/ms-doc/styles/StyleSheet.d.ts +0 -23
  367. package/dist/ms-doc/styles/StyleSheet.d.ts.map +0 -1
  368. package/dist/ms-doc/styles/StyleSheet.js +0 -268
  369. package/dist/ms-doc/styles/StyleSheet.js.map +0 -1
  370. package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts +0 -61
  371. package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts.map +0 -1
  372. package/dist/ms-doc/subdocuments/SubdocumentParser.js +0 -208
  373. package/dist/ms-doc/subdocuments/SubdocumentParser.js.map +0 -1
  374. package/dist/ms-doc/tables/TableParser.d.ts +0 -29
  375. package/dist/ms-doc/tables/TableParser.d.ts.map +0 -1
  376. package/dist/ms-doc/tables/TableParser.js +0 -176
  377. package/dist/ms-doc/tables/TableParser.js.map +0 -1
  378. package/dist/ms-doc/text/PieceTable.d.ts +0 -21
  379. package/dist/ms-doc/text/PieceTable.d.ts.map +0 -1
  380. package/dist/ms-doc/text/PieceTable.js +0 -171
  381. package/dist/ms-doc/text/PieceTable.js.map +0 -1
  382. package/dist/ms-doc/types/Constants.d.ts +0 -99
  383. package/dist/ms-doc/types/Constants.d.ts.map +0 -1
  384. package/dist/ms-doc/types/Constants.js +0 -102
  385. package/dist/ms-doc/types/Constants.js.map +0 -1
  386. package/dist/ms-doc/types/DocTypes.d.ts +0 -368
  387. package/dist/ms-doc/types/DocTypes.d.ts.map +0 -1
  388. package/dist/ms-doc/types/DocTypes.js +0 -3
  389. package/dist/ms-doc/types/DocTypes.js.map +0 -1
  390. package/dist/tracking/index.d.ts +0 -3
  391. package/dist/tracking/index.d.ts.map +0 -1
  392. package/dist/tracking/index.js +0 -6
  393. package/dist/tracking/index.js.map +0 -1
@@ -0,0 +1,768 @@
1
+ /**
2
+ * TextBox - Represents a floating text box in a Word document
3
+ *
4
+ * Text boxes use DrawingML (a:) and WordprocessingML Drawing (wp:) namespaces,
5
+ * plus WordprocessingShape (wps:) namespace for Word 2010+ features.
6
+ *
7
+ * Per ECMA-376 Part 4 (Transitional) and Office Open XML extensions,
8
+ * text boxes in Word documents use the wps:wsp element with wps:txbx content.
9
+ */
10
+
11
+ import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
12
+ import { UNITS } from '../utils/units';
13
+ import { Paragraph } from './Paragraph';
14
+ import {
15
+ ImagePosition,
16
+ ImageAnchor,
17
+ PositionAnchor,
18
+ HorizontalAlignment,
19
+ VerticalAlignment
20
+ } from './Image';
21
+ import { BorderDefinition } from './Paragraph';
22
+
23
+ /**
24
+ * TextBox margins configuration
25
+ */
26
+ export interface TextBoxMargins {
27
+ /** Top margin in EMUs */
28
+ top: number;
29
+ /** Bottom margin in EMUs */
30
+ bottom: number;
31
+ /** Left margin in EMUs */
32
+ left: number;
33
+ /** Right margin in EMUs */
34
+ right: number;
35
+ }
36
+
37
+ /**
38
+ * TextBox fill configuration
39
+ */
40
+ export interface TextBoxFill {
41
+ /** Fill color in hex (e.g., 'F0F0F0') */
42
+ color: string;
43
+ /** Transparency percentage (0-100) */
44
+ transparency?: number;
45
+ }
46
+
47
+ /**
48
+ * TextBox properties
49
+ */
50
+ export interface TextBoxProperties {
51
+ /** Width in EMUs */
52
+ width: number;
53
+ /** Height in EMUs */
54
+ height: number;
55
+ /** Paragraphs within the text box */
56
+ paragraphs?: Paragraph[];
57
+ /** Position configuration */
58
+ position?: ImagePosition;
59
+ /** Anchor configuration */
60
+ anchor?: ImageAnchor;
61
+ /** Fill color and transparency */
62
+ fill?: TextBoxFill;
63
+ /** Border configuration */
64
+ borders?: BorderDefinition;
65
+ /** Internal margins */
66
+ margins?: TextBoxMargins;
67
+ /** TextBox name */
68
+ name?: string;
69
+ /** TextBox description (for accessibility) */
70
+ description?: string;
71
+ }
72
+
73
+ /**
74
+ * Represents a floating text box
75
+ */
76
+ export class TextBox {
77
+ private width: number;
78
+ private height: number;
79
+ private paragraphs: Paragraph[] = [];
80
+ private position?: ImagePosition;
81
+ private anchor?: ImageAnchor;
82
+ private fill?: TextBoxFill;
83
+ private borders?: BorderDefinition;
84
+ private margins?: TextBoxMargins;
85
+ private name: string;
86
+ private description: string;
87
+ private docPrId = 1;
88
+
89
+ /**
90
+ * Creates a new text box
91
+ * @param properties TextBox properties
92
+ * @private Use static factory methods instead (create)
93
+ */
94
+ private constructor(properties: TextBoxProperties) {
95
+ this.width = properties.width;
96
+ this.height = properties.height;
97
+ if (properties.paragraphs) {
98
+ this.paragraphs = properties.paragraphs;
99
+ }
100
+ this.position = properties.position;
101
+ this.anchor = properties.anchor;
102
+ this.fill = properties.fill;
103
+ this.borders = properties.borders;
104
+ this.margins = properties.margins;
105
+ this.name = properties.name || 'TextBox';
106
+ this.description = properties.description || '';
107
+ }
108
+
109
+ /**
110
+ * Factory method for creating a text box
111
+ * @param width Width in EMUs
112
+ * @param height Height in EMUs
113
+ * @returns New TextBox instance
114
+ * @example
115
+ * const textbox = TextBox.create(inchesToEmus(3), inchesToEmus(2));
116
+ */
117
+ static create(width: number, height: number): TextBox {
118
+ return new TextBox({ width, height });
119
+ }
120
+
121
+ /**
122
+ * Gets the width in EMUs
123
+ * @returns Width
124
+ */
125
+ getWidth(): number {
126
+ return this.width;
127
+ }
128
+
129
+ /**
130
+ * Gets the height in EMUs
131
+ * @returns Height
132
+ */
133
+ getHeight(): number {
134
+ return this.height;
135
+ }
136
+
137
+ /**
138
+ * Adds a paragraph to the text box
139
+ * @param paragraph Paragraph to add
140
+ * @returns This text box for chaining
141
+ */
142
+ addParagraph(paragraph: Paragraph): this {
143
+ this.paragraphs.push(paragraph);
144
+ return this;
145
+ }
146
+
147
+ /**
148
+ * Gets all paragraphs
149
+ * @returns Array of paragraphs
150
+ */
151
+ getParagraphs(): Paragraph[] {
152
+ return this.paragraphs;
153
+ }
154
+
155
+ /**
156
+ * Sets text box position (for floating text boxes)
157
+ * @param horizontal Horizontal positioning configuration
158
+ * @param vertical Vertical positioning configuration
159
+ * @returns This text box for chaining
160
+ */
161
+ setPosition(
162
+ horizontal: { anchor: PositionAnchor; offset?: number; alignment?: HorizontalAlignment },
163
+ vertical: { anchor: PositionAnchor; offset?: number; alignment?: VerticalAlignment }
164
+ ): this {
165
+ this.position = { horizontal, vertical };
166
+ return this;
167
+ }
168
+
169
+ /**
170
+ * Gets the position configuration
171
+ * @returns Position or undefined
172
+ */
173
+ getPosition(): ImagePosition | undefined {
174
+ return this.position;
175
+ }
176
+
177
+ /**
178
+ * Sets anchor configuration
179
+ * @param options Anchor configuration
180
+ * @returns This text box for chaining
181
+ */
182
+ setAnchor(options: ImageAnchor): this {
183
+ this.anchor = options;
184
+ return this;
185
+ }
186
+
187
+ /**
188
+ * Gets the anchor configuration
189
+ * @returns Anchor configuration or undefined
190
+ */
191
+ getAnchor(): ImageAnchor | undefined {
192
+ return this.anchor;
193
+ }
194
+
195
+ /**
196
+ * Sets the fill color
197
+ * @param color Fill color in hex
198
+ * @param transparency Optional transparency percentage (0-100)
199
+ * @returns This text box for chaining
200
+ */
201
+ setFill(color: string, transparency?: number): this {
202
+ this.fill = { color, transparency };
203
+ return this;
204
+ }
205
+
206
+ /**
207
+ * Gets the fill configuration
208
+ * @returns Fill or undefined
209
+ */
210
+ getFill(): TextBoxFill | undefined {
211
+ return this.fill;
212
+ }
213
+
214
+ /**
215
+ * Sets the borders
216
+ * @param borders Border configuration
217
+ * @returns This text box for chaining
218
+ */
219
+ setBorders(borders: BorderDefinition): this {
220
+ this.borders = borders;
221
+ return this;
222
+ }
223
+
224
+ /**
225
+ * Gets the borders configuration
226
+ * @returns Borders or undefined
227
+ */
228
+ getBorders(): BorderDefinition | undefined {
229
+ return this.borders;
230
+ }
231
+
232
+ /**
233
+ * Sets internal margins
234
+ * @param margins Margin configuration
235
+ * @returns This text box for chaining
236
+ */
237
+ setMargins(margins: TextBoxMargins): this {
238
+ this.margins = margins;
239
+ return this;
240
+ }
241
+
242
+ /**
243
+ * Gets the margins configuration
244
+ * @returns Margins or undefined
245
+ */
246
+ getMargins(): TextBoxMargins | undefined {
247
+ return this.margins;
248
+ }
249
+
250
+ /**
251
+ * Sets the text box name
252
+ * @param name TextBox name
253
+ * @returns This text box for chaining
254
+ */
255
+ setName(name: string): this {
256
+ this.name = name;
257
+ return this;
258
+ }
259
+
260
+ /**
261
+ * Gets the text box name
262
+ * @returns TextBox name
263
+ */
264
+ getName(): string {
265
+ return this.name;
266
+ }
267
+
268
+ /**
269
+ * Sets the text box description (for accessibility)
270
+ * @param description TextBox description
271
+ * @returns This text box for chaining
272
+ */
273
+ setDescription(description: string): this {
274
+ this.description = description;
275
+ return this;
276
+ }
277
+
278
+ /**
279
+ * Gets the text box description
280
+ * @returns TextBox description
281
+ */
282
+ getDescription(): string {
283
+ return this.description;
284
+ }
285
+
286
+ /**
287
+ * Sets the docPr ID (drawing object ID)
288
+ * @param id Document property ID
289
+ * @returns This text box for chaining
290
+ */
291
+ setDocPrId(id: number): this {
292
+ this.docPrId = id;
293
+ return this;
294
+ }
295
+
296
+ /**
297
+ * Checks if this text box is floating (has anchor or position configuration)
298
+ * @returns True if floating, false if inline
299
+ */
300
+ isFloating(): boolean {
301
+ return this.anchor !== undefined || this.position !== undefined;
302
+ }
303
+
304
+ /**
305
+ * Generates DrawingML XML for the text box
306
+ * Creates either inline or floating (anchor) text box based on configuration
307
+ * @returns XML element representing the text box
308
+ */
309
+ toXML(): XMLElement {
310
+ // Text boxes are typically floating, but support inline as well
311
+ const textboxElement = this.isFloating() ? this.createAnchor() : this.createInline();
312
+
313
+ // Create the drawing structure
314
+ return XMLBuilder.w('drawing', undefined, [textboxElement]);
315
+ }
316
+
317
+ /**
318
+ * Creates the wp:inline element for inline text boxes
319
+ * @private
320
+ */
321
+ private createInline(): XMLElement {
322
+ const children: XMLElement[] = [];
323
+
324
+ // Extent (size)
325
+ children.push({
326
+ name: 'wp:extent',
327
+ attributes: {
328
+ cx: this.width.toString(),
329
+ cy: this.height.toString(),
330
+ },
331
+ selfClosing: true,
332
+ });
333
+
334
+ // Effect extent
335
+ children.push({
336
+ name: 'wp:effectExtent',
337
+ attributes: {
338
+ l: '0',
339
+ t: '0',
340
+ r: '0',
341
+ b: '0',
342
+ },
343
+ selfClosing: true,
344
+ });
345
+
346
+ // Document properties
347
+ children.push({
348
+ name: 'wp:docPr',
349
+ attributes: {
350
+ id: this.docPrId.toString(),
351
+ name: this.name,
352
+ descr: this.description,
353
+ },
354
+ selfClosing: true,
355
+ });
356
+
357
+ // Non-visual graphic frame properties
358
+ children.push({
359
+ name: 'wp:cNvGraphicFramePr',
360
+ selfClosing: true,
361
+ });
362
+
363
+ // Graphic data (the text box)
364
+ children.push(this.createGraphic());
365
+
366
+ return {
367
+ name: 'wp:inline',
368
+ attributes: {
369
+ distT: '0',
370
+ distB: '0',
371
+ distL: '0',
372
+ distR: '0',
373
+ },
374
+ children,
375
+ };
376
+ }
377
+
378
+ /**
379
+ * Creates the wp:anchor element for floating text boxes
380
+ * @private
381
+ */
382
+ private createAnchor(): XMLElement {
383
+ const children: XMLElement[] = [];
384
+
385
+ const anchorConfig = this.anchor || {
386
+ behindDoc: false,
387
+ locked: false,
388
+ layoutInCell: true,
389
+ allowOverlap: false,
390
+ relativeHeight: 251658240,
391
+ };
392
+
393
+ // Position H (horizontal)
394
+ if (this.position) {
395
+ const posH = this.position.horizontal;
396
+ const posHChildren: XMLElement[] = [];
397
+
398
+ if (posH.offset !== undefined) {
399
+ posHChildren.push({
400
+ name: 'wp:posOffset',
401
+ children: [posH.offset.toString()],
402
+ });
403
+ } else if (posH.alignment) {
404
+ posHChildren.push({
405
+ name: 'wp:align',
406
+ children: [posH.alignment],
407
+ });
408
+ }
409
+
410
+ children.push({
411
+ name: 'wp:positionH',
412
+ attributes: {
413
+ relativeFrom: posH.anchor,
414
+ },
415
+ children: posHChildren,
416
+ });
417
+ }
418
+
419
+ // Position V (vertical)
420
+ if (this.position) {
421
+ const posV = this.position.vertical;
422
+ const posVChildren: XMLElement[] = [];
423
+
424
+ if (posV.offset !== undefined) {
425
+ posVChildren.push({
426
+ name: 'wp:posOffset',
427
+ children: [posV.offset.toString()],
428
+ });
429
+ } else if (posV.alignment) {
430
+ posVChildren.push({
431
+ name: 'wp:align',
432
+ children: [posV.alignment],
433
+ });
434
+ }
435
+
436
+ children.push({
437
+ name: 'wp:positionV',
438
+ attributes: {
439
+ relativeFrom: posV.anchor,
440
+ },
441
+ children: posVChildren,
442
+ });
443
+ }
444
+
445
+ // Extent (size)
446
+ children.push({
447
+ name: 'wp:extent',
448
+ attributes: {
449
+ cx: this.width.toString(),
450
+ cy: this.height.toString(),
451
+ },
452
+ selfClosing: true,
453
+ });
454
+
455
+ // Effect extent
456
+ children.push({
457
+ name: 'wp:effectExtent',
458
+ attributes: {
459
+ l: '0',
460
+ t: '0',
461
+ r: '0',
462
+ b: '0',
463
+ },
464
+ selfClosing: true,
465
+ });
466
+
467
+ // Wrap square (default for text boxes)
468
+ children.push({
469
+ name: 'wp:wrapSquare',
470
+ attributes: {
471
+ wrapText: 'bothSides',
472
+ },
473
+ selfClosing: true,
474
+ });
475
+
476
+ // Document properties
477
+ children.push({
478
+ name: 'wp:docPr',
479
+ attributes: {
480
+ id: this.docPrId.toString(),
481
+ name: this.name,
482
+ descr: this.description,
483
+ },
484
+ selfClosing: true,
485
+ });
486
+
487
+ // Non-visual graphic frame properties
488
+ children.push({
489
+ name: 'wp:cNvGraphicFramePr',
490
+ selfClosing: true,
491
+ });
492
+
493
+ // Graphic data (the text box)
494
+ children.push(this.createGraphic());
495
+
496
+ return {
497
+ name: 'wp:anchor',
498
+ attributes: {
499
+ distT: '0',
500
+ distB: '0',
501
+ distL: '0',
502
+ distR: '0',
503
+ simplePos: '0',
504
+ relativeHeight: anchorConfig.relativeHeight.toString(),
505
+ behindDoc: anchorConfig.behindDoc ? '1' : '0',
506
+ locked: anchorConfig.locked ? '1' : '0',
507
+ layoutInCell: anchorConfig.layoutInCell ? '1' : '0',
508
+ allowOverlap: anchorConfig.allowOverlap ? '1' : '0',
509
+ },
510
+ children,
511
+ };
512
+ }
513
+
514
+ /**
515
+ * Creates the a:graphic element containing the text box
516
+ * @private
517
+ */
518
+ private createGraphic(): XMLElement {
519
+ return {
520
+ name: 'a:graphic',
521
+ attributes: {
522
+ 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
523
+ },
524
+ children: [
525
+ {
526
+ name: 'a:graphicData',
527
+ attributes: {
528
+ uri: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
529
+ },
530
+ children: [this.createWps()],
531
+ },
532
+ ],
533
+ };
534
+ }
535
+
536
+ /**
537
+ * Creates the wps:wsp element (WordprocessingShape for text box)
538
+ * @private
539
+ */
540
+ private createWps(): XMLElement {
541
+ const children: XMLElement[] = [];
542
+
543
+ // Non-visual shape properties
544
+ children.push({
545
+ name: 'wps:cNvSpPr',
546
+ attributes: {
547
+ 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
548
+ txBox: '1', // Indicates this is a text box
549
+ },
550
+ selfClosing: true,
551
+ });
552
+
553
+ // Shape properties (size, fill, borders)
554
+ children.push(this.createSpPr());
555
+
556
+ // Text box content
557
+ children.push(this.createTextBoxContent());
558
+
559
+ // Body properties (margins/insets)
560
+ children.push(this.createBodyPr());
561
+
562
+ return {
563
+ name: 'wps:wsp',
564
+ attributes: {
565
+ 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
566
+ },
567
+ children,
568
+ };
569
+ }
570
+
571
+ /**
572
+ * Creates the wps:bodyPr element (text body properties including margins)
573
+ * Per ECMA-376 Part 4, bodyPr specifies inset margins via lIns/tIns/rIns/bIns attributes
574
+ * @private
575
+ */
576
+ private createBodyPr(): XMLElement {
577
+ const attrs: Record<string, string> = {
578
+ rot: '0',
579
+ vert: 'horz',
580
+ wrap: 'square',
581
+ anchor: 't',
582
+ };
583
+
584
+ // Add margin insets if set
585
+ if (this.margins) {
586
+ if (this.margins.left !== undefined) attrs.lIns = this.margins.left.toString();
587
+ if (this.margins.top !== undefined) attrs.tIns = this.margins.top.toString();
588
+ if (this.margins.right !== undefined) attrs.rIns = this.margins.right.toString();
589
+ if (this.margins.bottom !== undefined) attrs.bIns = this.margins.bottom.toString();
590
+ }
591
+
592
+ return {
593
+ name: 'wps:bodyPr',
594
+ attributes: attrs,
595
+ selfClosing: true,
596
+ };
597
+ }
598
+
599
+ /**
600
+ * Creates the wps:spPr element (shape properties for text box)
601
+ * @private
602
+ */
603
+ private createSpPr(): XMLElement {
604
+ const children: XMLElement[] = [];
605
+
606
+ // Transform (position and size)
607
+ children.push({
608
+ name: 'a:xfrm',
609
+ children: [
610
+ {
611
+ name: 'a:off',
612
+ attributes: { x: '0', y: '0' },
613
+ selfClosing: true,
614
+ },
615
+ {
616
+ name: 'a:ext',
617
+ attributes: {
618
+ cx: this.width.toString(),
619
+ cy: this.height.toString(),
620
+ },
621
+ selfClosing: true,
622
+ },
623
+ ],
624
+ });
625
+
626
+ // Preset geometry (rectangle for text box)
627
+ children.push({
628
+ name: 'a:prstGeom',
629
+ attributes: {
630
+ prst: 'rect',
631
+ },
632
+ children: [
633
+ {
634
+ name: 'a:avLst',
635
+ selfClosing: true,
636
+ },
637
+ ],
638
+ });
639
+
640
+ // Fill
641
+ if (this.fill) {
642
+ const fillChildren: XMLElement[] = [];
643
+
644
+ // Transparency
645
+ if (this.fill.transparency !== undefined) {
646
+ const alpha = 100 - this.fill.transparency;
647
+ fillChildren.push({
648
+ name: 'a:alpha',
649
+ attributes: {
650
+ val: Math.round(alpha * 1000).toString(),
651
+ },
652
+ selfClosing: true,
653
+ });
654
+ }
655
+
656
+ children.push({
657
+ name: 'a:solidFill',
658
+ children: [
659
+ {
660
+ name: 'a:srgbClr',
661
+ attributes: {
662
+ val: this.fill.color.toUpperCase(),
663
+ },
664
+ ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),
665
+ },
666
+ ],
667
+ });
668
+ } else {
669
+ // No fill (transparent background)
670
+ children.push({
671
+ name: 'a:noFill',
672
+ selfClosing: true,
673
+ });
674
+ }
675
+
676
+ // Borders
677
+ if (this.borders?.size !== undefined) {
678
+ const lnAttrs: Record<string, string> = {
679
+ w: (this.borders.size * UNITS.EMUS_PER_POINT).toString(), // Convert points to EMUs
680
+ };
681
+
682
+ const lnChildren: XMLElement[] = [];
683
+
684
+ // Border color
685
+ lnChildren.push({
686
+ name: 'a:solidFill',
687
+ children: [
688
+ {
689
+ name: 'a:srgbClr',
690
+ attributes: {
691
+ val: (this.borders.color || '000000').toUpperCase(),
692
+ },
693
+ selfClosing: true,
694
+ },
695
+ ],
696
+ });
697
+
698
+ // Border style
699
+ if (this.borders.style && this.borders.style !== 'single') {
700
+ const dashMap: Record<string, string> = {
701
+ dash: 'dash',
702
+ dot: 'dot',
703
+ dashDot: 'dashDot',
704
+ dashDotDot: 'lgDashDotDot',
705
+ };
706
+ const dashStyle = dashMap[this.borders.style] || 'solid';
707
+ if (dashStyle !== 'solid') {
708
+ lnChildren.push({
709
+ name: 'a:prstDash',
710
+ attributes: {
711
+ val: dashStyle,
712
+ },
713
+ selfClosing: true,
714
+ });
715
+ }
716
+ }
717
+
718
+ children.push({
719
+ name: 'a:ln',
720
+ attributes: lnAttrs,
721
+ children: lnChildren,
722
+ });
723
+ }
724
+
725
+ return {
726
+ name: 'wps:spPr',
727
+ children,
728
+ };
729
+ }
730
+
731
+ /**
732
+ * Creates the wps:txbx element (text box content)
733
+ * @private
734
+ */
735
+ private createTextBoxContent(): XMLElement {
736
+ if (this.paragraphs.length === 0) {
737
+ // Empty text box - create empty paragraph
738
+ return {
739
+ name: 'wps:txbx',
740
+ children: [
741
+ {
742
+ name: 'w:txbxContent',
743
+ children: [
744
+ XMLBuilder.w('p', undefined, [
745
+ XMLBuilder.w('r', undefined, [
746
+ XMLBuilder.w('t', undefined, [''])
747
+ ])
748
+ ])
749
+ ],
750
+ },
751
+ ],
752
+ };
753
+ }
754
+
755
+ // Convert paragraphs to XML
756
+ const paragraphXml = this.paragraphs.map(p => p.toXML());
757
+
758
+ return {
759
+ name: 'wps:txbx',
760
+ children: [
761
+ {
762
+ name: 'w:txbxContent',
763
+ children: paragraphXml,
764
+ },
765
+ ],
766
+ };
767
+ }
768
+ }