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,548 @@
1
+ /**
2
+ * AbstractNumbering - Defines a multi-level numbering scheme
3
+ *
4
+ * An abstract numbering definition is a template that defines up to 9 levels of
5
+ * list formatting. It's referenced by numbering instances which link it to actual
6
+ * paragraphs in the document.
7
+ */
8
+
9
+ import { XMLBuilder, XMLElement } from "../xml/XMLBuilder";
10
+ import { NumberingLevel } from "./NumberingLevel";
11
+ import { defaultLogger } from "../utils/logger";
12
+
13
+ /**
14
+ * Properties for creating an abstract numbering definition
15
+ */
16
+ export interface AbstractNumberingProperties {
17
+ /** Unique identifier for this abstract numbering */
18
+ abstractNumId: number;
19
+
20
+ /** Optional name for the numbering scheme */
21
+ name?: string;
22
+
23
+ /** The numbering levels (up to 9 levels, 0-8) */
24
+ levels?: NumberingLevel[];
25
+
26
+ /** Optional multiLevel type (0 = single level, 1 = multilevel) */
27
+ multiLevelType?: number;
28
+
29
+ /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */
30
+ numStyleLink?: string;
31
+
32
+ /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */
33
+ styleLink?: string;
34
+ }
35
+
36
+ /**
37
+ * Represents an abstract numbering definition
38
+ *
39
+ * Abstract numbering defines the template for a multi-level list. Each instance
40
+ * of a list in the document references an abstract numbering definition.
41
+ */
42
+ export class AbstractNumbering {
43
+ private abstractNumId: number;
44
+ private name?: string;
45
+ private levels: Map<number, NumberingLevel>;
46
+ private multiLevelType: number;
47
+ private numStyleLink?: string;
48
+ private styleLink?: string;
49
+
50
+ /**
51
+ * Creates a new abstract numbering definition
52
+ * @param idOrProps The abstract numbering ID (number) or properties object
53
+ * @param name Optional name (if first param is a number)
54
+ */
55
+ constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {
56
+ // Support both simple (numId) and object constructor patterns
57
+ if (typeof idOrProps === "number") {
58
+ // Simple constructor: new AbstractNumbering(id)
59
+ this.abstractNumId = idOrProps;
60
+ this.name = name;
61
+ this.levels = new Map();
62
+ this.multiLevelType = 1; // default multilevel
63
+ } else {
64
+ // Object constructor: new AbstractNumbering({ abstractNumId, ... })
65
+ const properties = idOrProps;
66
+ this.abstractNumId = properties.abstractNumId;
67
+ this.name = properties.name;
68
+ this.levels = new Map();
69
+ this.multiLevelType =
70
+ properties.multiLevelType !== undefined ? properties.multiLevelType : 1;
71
+ this.numStyleLink = properties.numStyleLink;
72
+ this.styleLink = properties.styleLink;
73
+
74
+ if (properties.levels) {
75
+ properties.levels.forEach((level) => {
76
+ this.addLevel(level);
77
+ });
78
+ }
79
+ }
80
+
81
+ this.validate();
82
+ }
83
+
84
+ /**
85
+ * Validates the abstract numbering
86
+ */
87
+ private validate(): void {
88
+ if (this.abstractNumId < 0) {
89
+ throw new Error("Abstract numbering ID must be non-negative");
90
+ }
91
+
92
+ if (this.levels.size > 9) {
93
+ throw new Error("Cannot have more than 9 levels (0-8)");
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Gets the abstract numbering ID
99
+ */
100
+ getAbstractNumId(): number {
101
+ return this.abstractNumId;
102
+ }
103
+
104
+ /**
105
+ * Alias for getAbstractNumId for backward compatibility
106
+ */
107
+ getId(): number {
108
+ return this.abstractNumId;
109
+ }
110
+
111
+ /**
112
+ * Gets the name
113
+ */
114
+ getName(): string | undefined {
115
+ return this.name;
116
+ }
117
+
118
+ /**
119
+ * Sets the name
120
+ * @param name The numbering scheme name
121
+ */
122
+ setName(name: string): this {
123
+ this.name = name;
124
+ return this;
125
+ }
126
+
127
+ /**
128
+ * Gets the multi-level type
129
+ */
130
+ getMultiLevelType(): string {
131
+ if (this.multiLevelType === 1) {
132
+ return "multilevel";
133
+ } else if (this.multiLevelType === 2) {
134
+ return "hybridMultilevel";
135
+ } else {
136
+ return "singleLevel";
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Sets the multi-level type
142
+ * @param type The multi-level type ('multilevel' or 'singleLevel')
143
+ */
144
+ setMultiLevelType(
145
+ type: "multilevel" | "singleLevel" | "hybridMultilevel"
146
+ ): this {
147
+ if (type === "multilevel") {
148
+ this.multiLevelType = 1;
149
+ } else if (type === "hybridMultilevel") {
150
+ this.multiLevelType = 2;
151
+ } else {
152
+ this.multiLevelType = 0;
153
+ }
154
+ return this;
155
+ }
156
+
157
+ /**
158
+ * Gets the numStyleLink (reference to a numbering style definition)
159
+ */
160
+ getNumStyleLink(): string | undefined {
161
+ return this.numStyleLink;
162
+ }
163
+
164
+ /**
165
+ * Sets the numStyleLink
166
+ * @param link The numbering style name
167
+ */
168
+ setNumStyleLink(link: string | undefined): this {
169
+ this.numStyleLink = link;
170
+ return this;
171
+ }
172
+
173
+ /**
174
+ * Gets the styleLink (reference to a style that uses this abstract numbering)
175
+ */
176
+ getStyleLink(): string | undefined {
177
+ return this.styleLink;
178
+ }
179
+
180
+ /**
181
+ * Sets the styleLink
182
+ * @param link The style name
183
+ */
184
+ setStyleLink(link: string | undefined): this {
185
+ this.styleLink = link;
186
+ return this;
187
+ }
188
+
189
+ /**
190
+ * Adds a numbering level
191
+ * @param level The numbering level to add
192
+ */
193
+ addLevel(level: NumberingLevel): this {
194
+ const levelIndex = level.getLevel();
195
+
196
+ if (levelIndex < 0 || levelIndex > 8) {
197
+ throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);
198
+ }
199
+
200
+ this.levels.set(levelIndex, level);
201
+ return this;
202
+ }
203
+
204
+ /**
205
+ * Adds multiple numbering levels at once
206
+ * @param levels The numbering levels to add
207
+ */
208
+ addLevels(levels: NumberingLevel[]): this {
209
+ levels.forEach((level) => this.addLevel(level));
210
+ return this;
211
+ }
212
+
213
+ /**
214
+ * Gets a numbering level by index
215
+ * @param levelIndex The level index (0-8)
216
+ */
217
+ getLevel(levelIndex: number): NumberingLevel | undefined {
218
+ return this.levels.get(levelIndex);
219
+ }
220
+
221
+ /**
222
+ * Gets all levels
223
+ */
224
+ getAllLevels(): NumberingLevel[] {
225
+ return Array.from(this.levels.values()).sort(
226
+ (a, b) => a.getLevel() - b.getLevel()
227
+ );
228
+ }
229
+
230
+ /**
231
+ * Alias for getAllLevels for backward compatibility
232
+ */
233
+ getLevels(): NumberingLevel[] {
234
+ return this.getAllLevels();
235
+ }
236
+
237
+ /**
238
+ * Gets the number of levels defined
239
+ */
240
+ getLevelCount(): number {
241
+ return this.levels.size;
242
+ }
243
+
244
+ /**
245
+ * Checks if a level exists
246
+ * @param levelIndex The level index (0-8)
247
+ */
248
+ hasLevel(levelIndex: number): boolean {
249
+ return this.levels.has(levelIndex);
250
+ }
251
+
252
+ /**
253
+ * Removes a level
254
+ * @param levelIndex The level index (0-8)
255
+ */
256
+ removeLevel(levelIndex: number): boolean {
257
+ return this.levels.delete(levelIndex);
258
+ }
259
+
260
+ /**
261
+ * Generates the WordprocessingML XML for this abstract numbering
262
+ */
263
+ toXML(): XMLElement {
264
+ const children: XMLElement[] = [];
265
+
266
+ // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*
267
+
268
+ // Add multiLevelType
269
+ let multiLevelTypeValue: string;
270
+ if (this.multiLevelType === 1) {
271
+ multiLevelTypeValue = "multilevel";
272
+ } else if (this.multiLevelType === 2) {
273
+ multiLevelTypeValue = "hybridMultilevel";
274
+ } else {
275
+ multiLevelTypeValue = "singleLevel";
276
+ }
277
+
278
+ children.push(
279
+ XMLBuilder.wSelf("multiLevelType", {
280
+ "w:val": multiLevelTypeValue,
281
+ })
282
+ );
283
+
284
+ // Add name if present
285
+ if (this.name) {
286
+ children.push(XMLBuilder.wSelf("name", { "w:val": this.name }));
287
+ }
288
+
289
+ // Add styleLink / numStyleLink if present
290
+ if (this.styleLink) {
291
+ children.push(XMLBuilder.wSelf("styleLink", { "w:val": this.styleLink }));
292
+ }
293
+ if (this.numStyleLink) {
294
+ children.push(XMLBuilder.wSelf("numStyleLink", { "w:val": this.numStyleLink }));
295
+ }
296
+
297
+ // Add all levels in order
298
+ const sortedLevels = this.getAllLevels();
299
+ sortedLevels.forEach((level) => {
300
+ children.push(level.toXML());
301
+ });
302
+
303
+ // If no levels defined, add a default level 0
304
+ if (sortedLevels.length === 0) {
305
+ children.push(NumberingLevel.createDecimalLevel(0).toXML());
306
+ }
307
+
308
+ return XMLBuilder.w(
309
+ "abstractNum",
310
+ { "w:abstractNumId": this.abstractNumId.toString() },
311
+ children
312
+ );
313
+ }
314
+
315
+ /**
316
+ * Creates a bullet list abstract numbering with specified levels
317
+ *
318
+ * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,
319
+ * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.
320
+ *
321
+ * @param abstractNumId The abstract numbering ID
322
+ * @param levels Number of levels (default: 9)
323
+ * @param bullets Array of bullet characters (default: ['•', '○', '▪'])
324
+ *
325
+ * @example
326
+ * // Standard bullet list
327
+ * const bulletList = AbstractNumbering.createBulletList(1);
328
+ *
329
+ * @example
330
+ * // Custom bullets using helper method
331
+ * const bullets = [];
332
+ * for (let i = 0; i < 9; i++) {
333
+ * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');
334
+ * bullets.push(symbol);
335
+ * }
336
+ * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);
337
+ */
338
+ static createBulletList(
339
+ abstractNumId: number,
340
+ levels = 9,
341
+ bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding
342
+ ): AbstractNumbering {
343
+ const abstractNum = new AbstractNumbering({
344
+ abstractNumId,
345
+ name: "Bullet List",
346
+ multiLevelType: 1,
347
+ });
348
+
349
+ for (let i = 0; i < levels && i < 9; i++) {
350
+ if (bullets && bullets.length > 0) {
351
+ // Custom bullets provided - use them with default font
352
+ const bullet = bullets[i % bullets.length] || "•";
353
+ abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));
354
+ } else {
355
+ // No custom bullets - use Word-native encoding (correct font per level)
356
+ abstractNum.addLevel(NumberingLevel.createBulletLevel(i));
357
+ }
358
+ }
359
+
360
+ return abstractNum;
361
+ }
362
+
363
+ /**
364
+ * Creates a numbered list abstract numbering with specified levels
365
+ * @param abstractNumId The abstract numbering ID
366
+ * @param levels Number of levels (default: 9)
367
+ * @param formats Array of formats for each level
368
+ */
369
+ static createNumberedList(
370
+ abstractNumId: number,
371
+ levels = 9,
372
+ formats: ("decimal" | "lowerLetter" | "lowerRoman" | "upperLetter" | "upperRoman")[] = ["decimal", "lowerLetter", "lowerRoman", "upperLetter", "upperRoman"]
373
+ ): AbstractNumbering {
374
+ const abstractNum = new AbstractNumbering({
375
+ abstractNumId,
376
+ name: "Numbered List",
377
+ multiLevelType: 1,
378
+ });
379
+
380
+ for (let i = 0; i < levels && i < 9; i++) {
381
+ const format = formats[i % formats.length] || "decimal";
382
+ const template = `%${i + 1}.`;
383
+
384
+ let level: NumberingLevel;
385
+ switch (format) {
386
+ case "lowerLetter":
387
+ level = NumberingLevel.createLowerLetterLevel(i, template);
388
+ break;
389
+ case "lowerRoman":
390
+ level = NumberingLevel.createLowerRomanLevel(i, template);
391
+ break;
392
+ case "upperLetter":
393
+ level = NumberingLevel.createUpperLetterLevel(i, template);
394
+ break;
395
+ case "upperRoman":
396
+ level = NumberingLevel.createUpperRomanLevel(i, template);
397
+ break;
398
+ case "decimal":
399
+ default:
400
+ level = NumberingLevel.createDecimalLevel(i, template);
401
+ break;
402
+ }
403
+
404
+ abstractNum.addLevel(level);
405
+ }
406
+
407
+ return abstractNum;
408
+ }
409
+
410
+ /**
411
+ * Creates a multi-level list with mixed formats
412
+ * @param abstractNumId The abstract numbering ID
413
+ */
414
+ static createMultiLevelList(abstractNumId: number): AbstractNumbering {
415
+ const abstractNum = new AbstractNumbering({
416
+ abstractNumId,
417
+ name: "Multi-Level List",
418
+ multiLevelType: 1,
419
+ });
420
+
421
+ // Level 0: 1, 2, 3, ...
422
+ abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, "%1."));
423
+
424
+ // Level 1: a, b, c, ...
425
+ abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, "%2."));
426
+
427
+ // Level 2: i, ii, iii, ...
428
+ abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, "%3."));
429
+
430
+ // Level 3: 1, 2, 3, ... (with more indent)
431
+ abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, "%4."));
432
+
433
+ return abstractNum;
434
+ }
435
+
436
+ /**
437
+ * Creates an outline list abstract numbering
438
+ * @param abstractNumId The abstract numbering ID
439
+ */
440
+ static createOutlineList(abstractNumId: number): AbstractNumbering {
441
+ const abstractNum = new AbstractNumbering({
442
+ abstractNumId,
443
+ name: "Outline List",
444
+ multiLevelType: 1,
445
+ });
446
+
447
+ // Level 0: I, II, III, ...
448
+ abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, "%1."));
449
+
450
+ // Level 1: A, B, C, ...
451
+ abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, "%2."));
452
+
453
+ // Level 2: 1, 2, 3, ...
454
+ abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, "%3."));
455
+
456
+ // Level 3: a, b, c, ...
457
+ abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, "%4."));
458
+
459
+ // Level 4: i, ii, iii, ...
460
+ abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, "%5."));
461
+
462
+ // Level 5: A, B, C, ... (repeating)
463
+ abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, "%6."));
464
+
465
+ // Level 6: 1, 2, 3, ... (repeating)
466
+ abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, "%7."));
467
+
468
+ // Level 7: a, b, c, ... (repeating)
469
+ abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, "%8."));
470
+
471
+ // Level 8: i, ii, iii, ... (repeating)
472
+ abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, "%9."));
473
+
474
+ return abstractNum;
475
+ }
476
+
477
+ /**
478
+ * Factory method for creating an abstract numbering definition
479
+ * @param properties The abstract numbering properties
480
+ */
481
+ static create(properties: AbstractNumberingProperties): AbstractNumbering {
482
+ return new AbstractNumbering(properties);
483
+ }
484
+
485
+ /**
486
+ * Creates an AbstractNumbering from XML element
487
+ * @param xml The XML string of the <w:abstractNum> element
488
+ * @returns AbstractNumbering instance
489
+ */
490
+ static fromXML(xml: string): AbstractNumbering {
491
+ // Extract abstractNumId (required)
492
+ const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId="([^"]+)"/.exec(xml);
493
+ if (!abstractNumIdMatch?.[1]) {
494
+ throw new Error("Missing required w:abstractNumId attribute");
495
+ }
496
+ const abstractNumId = parseInt(abstractNumIdMatch[1], 10);
497
+
498
+ // Extract name (optional)
499
+ const nameMatch = /<w:name[^>]*w:val="([^"]+)"/.exec(xml);
500
+ const name = nameMatch?.[1] ? nameMatch[1] : undefined;
501
+
502
+ // Extract multiLevelType (optional)
503
+ // Values: "singleLevel" = 0, "multilevel" = 1, "hybridMultilevel" = 2
504
+ const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val="([^"]+)"/.exec(xml);
505
+ let multiLevelType = 1; // default to multilevel
506
+ if (multiLevelTypeMatch?.[1]) {
507
+ const value = multiLevelTypeMatch[1];
508
+ if (value === "singleLevel") multiLevelType = 0;
509
+ else if (value === "multilevel") multiLevelType = 1;
510
+ else if (value === "hybridMultilevel") multiLevelType = 2;
511
+ }
512
+
513
+ // Extract numStyleLink (optional, ECMA-376 §17.9.21)
514
+ const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val="([^"]+)"/.exec(xml);
515
+ const numStyleLink = numStyleLinkMatch?.[1] || undefined;
516
+
517
+ // Extract styleLink (optional, ECMA-376 §17.9.27)
518
+ const styleLinkMatch = /<w:styleLink[^>]*w:val="([^"]+)"/.exec(xml);
519
+ const styleLink = styleLinkMatch?.[1] || undefined;
520
+
521
+ // Create abstract numbering
522
+ const abstractNum = new AbstractNumbering({
523
+ abstractNumId,
524
+ name,
525
+ multiLevelType,
526
+ numStyleLink,
527
+ styleLink,
528
+ });
529
+
530
+ // Extract and parse all levels
531
+ const lvlRegex = /<w:lvl[^>]*>[\s\S]*?<\/w:lvl>/g;
532
+ const lvlMatches = xml.match(lvlRegex);
533
+
534
+ if (lvlMatches) {
535
+ for (const lvlXml of lvlMatches) {
536
+ try {
537
+ const level = NumberingLevel.fromXML(lvlXml);
538
+ abstractNum.addLevel(level);
539
+ } catch (error: unknown) {
540
+ // Skip malformed levels but continue parsing
541
+ defaultLogger.warn(`Failed to parse level: ${error}`);
542
+ }
543
+ }
544
+ }
545
+
546
+ return abstractNum;
547
+ }
548
+ }
@@ -0,0 +1,74 @@
1
+ # Formatting Module
2
+
3
+ `src/formatting/` — Styles and numbering systems.
4
+
5
+ ## Style System
6
+
7
+ ### Style (`Style.ts`)
8
+
9
+ Types: `paragraph`, `character`, `table`, `numbering`.
10
+
11
+ Properties: `styleId`, `type`, `name`, `basedOn` (inheritance), `next`, `link`, `runFormatting`, `paragraphFormatting`, `tableFormatting`, `isDefault`.
12
+
13
+ **Inheritance:** Styles inherit via `basedOn`. Resolution: default → basedOn chain → own formatting.
14
+
15
+ Built-in styles: `Normal`, `Heading1`-`Heading6`, `Title`, `Subtitle`, `DefaultParagraphFont`, `TableGrid`.
16
+
17
+ ### StylesManager (`StylesManager.ts`)
18
+
19
+ Stores, validates, generates `word/styles.xml`, parses from existing documents. Validates unique IDs, basedOn existence, no circular inheritance.
20
+
21
+ ## Numbering System
22
+
23
+ ### Concepts
24
+
25
+ - **AbstractNumbering**: Reusable template defining structure (up to 9 levels) with format/indentation per level
26
+ - **NumberingInstance**: Links abstract numbering to usage (referenced by paragraphs via numId). Can override levels.
27
+ - **NumberingLevel**: Format for one level — format type, text pattern, alignment, indentation, font
28
+
29
+ ### NumberingLevel (`NumberingLevel.ts`)
30
+
31
+ **Formats:** `decimal`, `upperRoman`, `lowerRoman`, `upperLetter`, `lowerLetter`, `bullet`.
32
+
33
+ **Level text:** `%1.` (level 1 number), `%1.%2.` (two levels), `•` (bullet).
34
+
35
+ **Standard indentation:** `leftIndent = 720 + (level * 360)` twips, `hangingIndent = 360` twips.
36
+
37
+ **Factory methods:**
38
+ ```typescript
39
+ NumberingLevel.createBulletLevel(level, symbol)
40
+ NumberingLevel.createNumberedLevel(level, format, text)
41
+ NumberingLevel.calculateStandardIndentation(level)
42
+ NumberingLevel.getBulletSymbolWithFont(level, style)
43
+ ```
44
+
45
+ **Text formatting:** `setItalic()`, `setUnderline(style)`, `setBold()`, `setColor()`.
46
+
47
+ ### AbstractNumbering (`AbstractNumbering.ts`)
48
+
49
+ ```typescript
50
+ AbstractNumbering.createNumberedList(id, maxLevels) // 1., 2., 3.
51
+ AbstractNumbering.createBulletedList(id, maxLevels) // bullet symbols
52
+ ```
53
+
54
+ ### NumberingInstance (`NumberingInstance.ts`)
55
+
56
+ Links to abstract numbering. Level overrides:
57
+ ```typescript
58
+ const instance = new NumberingInstance(numId, abstractNumId);
59
+ instance.addLevelOverride(0, customLevel);
60
+ ```
61
+
62
+ ### NumberingManager (`NumberingManager.ts`)
63
+
64
+ Manages abstract numberings + instances. Generates `word/numbering.xml`. Assigns unique IDs.
65
+
66
+ ```typescript
67
+ manager.addAbstractNumbering(abstractNum);
68
+ manager.addNumberingInstance(instance);
69
+ paragraph.setNumbering(numId, level);
70
+ ```
71
+
72
+ ## Key Behavior: Indentation vs Numbering
73
+
74
+ Per ECMA-376 §17.3.1.12, paragraph-level indentation overrides numbering-level indentation. The framework auto-clears conflicting paragraph indentation when numbering is applied (left, firstLine, hanging cleared; right preserved). To change list indentation, change the numbering **level** instead of setting indent directly.