docxmlater 11.0.9 → 12.0.1

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 (354) hide show
  1. package/README.md +51 -13
  2. package/dist/core/Document.d.ts +28 -2
  3. package/dist/core/Document.d.ts.map +1 -1
  4. package/dist/core/Document.js +725 -170
  5. package/dist/core/Document.js.map +1 -1
  6. package/dist/core/DocumentGenerator.d.ts +1 -0
  7. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  8. package/dist/core/DocumentGenerator.js +77 -25
  9. package/dist/core/DocumentGenerator.js.map +1 -1
  10. package/dist/core/DocumentParser.d.ts +7 -3
  11. package/dist/core/DocumentParser.d.ts.map +1 -1
  12. package/dist/core/DocumentParser.js +431 -85
  13. package/dist/core/DocumentParser.js.map +1 -1
  14. package/dist/core/RelationshipManager.d.ts.map +1 -1
  15. package/dist/core/RelationshipManager.js +2 -2
  16. package/dist/core/RelationshipManager.js.map +1 -1
  17. package/dist/elements/Comment.d.ts +15 -1
  18. package/dist/elements/Comment.d.ts.map +1 -1
  19. package/dist/elements/Comment.js +67 -12
  20. package/dist/elements/Comment.js.map +1 -1
  21. package/dist/elements/CommentManager.d.ts +4 -0
  22. package/dist/elements/CommentManager.d.ts.map +1 -1
  23. package/dist/elements/CommentManager.js +74 -16
  24. package/dist/elements/CommentManager.js.map +1 -1
  25. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  26. package/dist/elements/EndnoteManager.js.map +1 -1
  27. package/dist/elements/Field.d.ts +10 -1
  28. package/dist/elements/Field.d.ts.map +1 -1
  29. package/dist/elements/Field.js +76 -34
  30. package/dist/elements/Field.js.map +1 -1
  31. package/dist/elements/FieldHelpers.d.ts +1 -0
  32. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  33. package/dist/elements/FieldHelpers.js +8 -4
  34. package/dist/elements/FieldHelpers.js.map +1 -1
  35. package/dist/elements/Footer.d.ts +3 -1
  36. package/dist/elements/Footer.d.ts.map +1 -1
  37. package/dist/elements/Footer.js +39 -53
  38. package/dist/elements/Footer.js.map +1 -1
  39. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  40. package/dist/elements/FootnoteManager.js.map +1 -1
  41. package/dist/elements/Header.d.ts +3 -1
  42. package/dist/elements/Header.d.ts.map +1 -1
  43. package/dist/elements/Header.js +39 -53
  44. package/dist/elements/Header.js.map +1 -1
  45. package/dist/elements/HeaderFooterManager.d.ts +4 -2
  46. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  47. package/dist/elements/HeaderFooterManager.js +36 -6
  48. package/dist/elements/HeaderFooterManager.js.map +1 -1
  49. package/dist/elements/Hyperlink.d.ts +6 -1
  50. package/dist/elements/Hyperlink.d.ts.map +1 -1
  51. package/dist/elements/Hyperlink.js +69 -44
  52. package/dist/elements/Hyperlink.js.map +1 -1
  53. package/dist/elements/Image.d.ts.map +1 -1
  54. package/dist/elements/Image.js +33 -6
  55. package/dist/elements/Image.js.map +1 -1
  56. package/dist/elements/ImageManager.d.ts +1 -0
  57. package/dist/elements/ImageManager.d.ts.map +1 -1
  58. package/dist/elements/ImageManager.js +11 -0
  59. package/dist/elements/ImageManager.js.map +1 -1
  60. package/dist/elements/Paragraph.d.ts +3 -0
  61. package/dist/elements/Paragraph.d.ts.map +1 -1
  62. package/dist/elements/Paragraph.js +91 -26
  63. package/dist/elements/Paragraph.js.map +1 -1
  64. package/dist/elements/Revision.d.ts +4 -0
  65. package/dist/elements/Revision.d.ts.map +1 -1
  66. package/dist/elements/Revision.js +369 -29
  67. package/dist/elements/Revision.js.map +1 -1
  68. package/dist/elements/Run.d.ts +1 -0
  69. package/dist/elements/Run.d.ts.map +1 -1
  70. package/dist/elements/Run.js +24 -4
  71. package/dist/elements/Run.js.map +1 -1
  72. package/dist/elements/Section.d.ts.map +1 -1
  73. package/dist/elements/Section.js +17 -7
  74. package/dist/elements/Section.js.map +1 -1
  75. package/dist/elements/Shape.d.ts.map +1 -1
  76. package/dist/elements/Shape.js +50 -42
  77. package/dist/elements/Shape.js.map +1 -1
  78. package/dist/elements/StructuredDocumentTag.d.ts +9 -1
  79. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  80. package/dist/elements/StructuredDocumentTag.js +46 -6
  81. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  82. package/dist/elements/Table.d.ts +2 -0
  83. package/dist/elements/Table.d.ts.map +1 -1
  84. package/dist/elements/Table.js +90 -42
  85. package/dist/elements/Table.js.map +1 -1
  86. package/dist/elements/TableCell.d.ts +1 -0
  87. package/dist/elements/TableCell.d.ts.map +1 -1
  88. package/dist/elements/TableCell.js +32 -13
  89. package/dist/elements/TableCell.js.map +1 -1
  90. package/dist/elements/TableOfContents.d.ts.map +1 -1
  91. package/dist/elements/TableOfContents.js +5 -7
  92. package/dist/elements/TableOfContents.js.map +1 -1
  93. package/dist/elements/TableRow.d.ts +1 -0
  94. package/dist/elements/TableRow.d.ts.map +1 -1
  95. package/dist/elements/TableRow.js +16 -1
  96. package/dist/elements/TableRow.js.map +1 -1
  97. package/dist/elements/TextBox.d.ts.map +1 -1
  98. package/dist/elements/TextBox.js +55 -42
  99. package/dist/elements/TextBox.js.map +1 -1
  100. package/dist/esm/core/Document.js +726 -171
  101. package/dist/esm/core/Document.js.map +1 -1
  102. package/dist/esm/core/DocumentGenerator.js +77 -25
  103. package/dist/esm/core/DocumentGenerator.js.map +1 -1
  104. package/dist/esm/core/DocumentParser.js +431 -85
  105. package/dist/esm/core/DocumentParser.js.map +1 -1
  106. package/dist/esm/core/RelationshipManager.js +2 -2
  107. package/dist/esm/core/RelationshipManager.js.map +1 -1
  108. package/dist/esm/elements/Comment.js +67 -12
  109. package/dist/esm/elements/Comment.js.map +1 -1
  110. package/dist/esm/elements/CommentManager.js +74 -16
  111. package/dist/esm/elements/CommentManager.js.map +1 -1
  112. package/dist/esm/elements/EndnoteManager.js.map +1 -1
  113. package/dist/esm/elements/Field.js +77 -35
  114. package/dist/esm/elements/Field.js.map +1 -1
  115. package/dist/esm/elements/FieldHelpers.js +7 -4
  116. package/dist/esm/elements/FieldHelpers.js.map +1 -1
  117. package/dist/esm/elements/Footer.js +39 -53
  118. package/dist/esm/elements/Footer.js.map +1 -1
  119. package/dist/esm/elements/FootnoteManager.js.map +1 -1
  120. package/dist/esm/elements/Header.js +39 -53
  121. package/dist/esm/elements/Header.js.map +1 -1
  122. package/dist/esm/elements/HeaderFooterManager.js +36 -6
  123. package/dist/esm/elements/HeaderFooterManager.js.map +1 -1
  124. package/dist/esm/elements/Hyperlink.js +69 -44
  125. package/dist/esm/elements/Hyperlink.js.map +1 -1
  126. package/dist/esm/elements/Image.js +33 -6
  127. package/dist/esm/elements/Image.js.map +1 -1
  128. package/dist/esm/elements/ImageManager.js +11 -0
  129. package/dist/esm/elements/ImageManager.js.map +1 -1
  130. package/dist/esm/elements/Paragraph.js +91 -26
  131. package/dist/esm/elements/Paragraph.js.map +1 -1
  132. package/dist/esm/elements/Revision.js +369 -29
  133. package/dist/esm/elements/Revision.js.map +1 -1
  134. package/dist/esm/elements/Run.js +24 -4
  135. package/dist/esm/elements/Run.js.map +1 -1
  136. package/dist/esm/elements/Section.js +17 -7
  137. package/dist/esm/elements/Section.js.map +1 -1
  138. package/dist/esm/elements/Shape.js +50 -42
  139. package/dist/esm/elements/Shape.js.map +1 -1
  140. package/dist/esm/elements/StructuredDocumentTag.js +46 -6
  141. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -1
  142. package/dist/esm/elements/Table.js +90 -42
  143. package/dist/esm/elements/Table.js.map +1 -1
  144. package/dist/esm/elements/TableCell.js +32 -13
  145. package/dist/esm/elements/TableCell.js.map +1 -1
  146. package/dist/esm/elements/TableOfContents.js +5 -7
  147. package/dist/esm/elements/TableOfContents.js.map +1 -1
  148. package/dist/esm/elements/TableRow.js +16 -1
  149. package/dist/esm/elements/TableRow.js.map +1 -1
  150. package/dist/esm/elements/TextBox.js +55 -42
  151. package/dist/esm/elements/TextBox.js.map +1 -1
  152. package/dist/esm/formatting/AbstractNumbering.js +1 -1
  153. package/dist/esm/formatting/AbstractNumbering.js.map +1 -1
  154. package/dist/esm/formatting/NumberingLevel.js +8 -6
  155. package/dist/esm/formatting/NumberingLevel.js.map +1 -1
  156. package/dist/esm/formatting/NumberingManager.js +16 -1
  157. package/dist/esm/formatting/NumberingManager.js.map +1 -1
  158. package/dist/esm/formatting/Style.js +14 -0
  159. package/dist/esm/formatting/Style.js.map +1 -1
  160. package/dist/esm/formatting/StylesManager.js +14 -2
  161. package/dist/esm/formatting/StylesManager.js.map +1 -1
  162. package/dist/esm/helpers/CleanupHelper.js +103 -26
  163. package/dist/esm/helpers/CleanupHelper.js.map +1 -1
  164. package/dist/esm/images/ImageOptimizer.js +52 -4
  165. package/dist/esm/images/ImageOptimizer.js.map +1 -1
  166. package/dist/esm/index.js +1 -0
  167. package/dist/esm/index.js.map +1 -1
  168. package/dist/esm/internal.js +1 -1
  169. package/dist/esm/internal.js.map +1 -1
  170. package/dist/esm/processors/CompatibilityUpgrader.js +7 -1
  171. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -1
  172. package/dist/esm/processors/InMemoryRevisionAcceptor.js +134 -13
  173. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -1
  174. package/dist/esm/processors/RevisionWalker.js +58 -8
  175. package/dist/esm/processors/RevisionWalker.js.map +1 -1
  176. package/dist/esm/processors/SelectiveRevisionAcceptor.js +116 -17
  177. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -1
  178. package/dist/esm/processors/cnfStyleDecoder.js +7 -7
  179. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -1
  180. package/dist/esm/processors/stripTrackedChanges.js +16 -5
  181. package/dist/esm/processors/stripTrackedChanges.js.map +1 -1
  182. package/dist/esm/utils/deepClone.js +24 -11
  183. package/dist/esm/utils/deepClone.js.map +1 -1
  184. package/dist/esm/utils/units.js +1 -1
  185. package/dist/esm/utils/units.js.map +1 -1
  186. package/dist/esm/utils/validation.js +11 -23
  187. package/dist/esm/utils/validation.js.map +1 -1
  188. package/dist/esm/utils/xmlSanitization.js +131 -7
  189. package/dist/esm/utils/xmlSanitization.js.map +1 -1
  190. package/dist/esm/validation/RevisionAutoFixer.js +69 -55
  191. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -1
  192. package/dist/esm/validation/RevisionValidator.js +24 -20
  193. package/dist/esm/validation/RevisionValidator.js.map +1 -1
  194. package/dist/esm/xml/XMLBuilder.js +52 -20
  195. package/dist/esm/xml/XMLBuilder.js.map +1 -1
  196. package/dist/esm/xml/XMLParser.js +55 -13
  197. package/dist/esm/xml/XMLParser.js.map +1 -1
  198. package/dist/esm/zip/ZipHandler.js +37 -13
  199. package/dist/esm/zip/ZipHandler.js.map +1 -1
  200. package/dist/esm/zip/ZipReader.js +53 -6
  201. package/dist/esm/zip/ZipReader.js.map +1 -1
  202. package/dist/esm/zip/errors.js +7 -0
  203. package/dist/esm/zip/errors.js.map +1 -1
  204. package/dist/esm/zip/types.js +4 -0
  205. package/dist/esm/zip/types.js.map +1 -1
  206. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  207. package/dist/formatting/AbstractNumbering.js +1 -1
  208. package/dist/formatting/AbstractNumbering.js.map +1 -1
  209. package/dist/formatting/NumberingLevel.d.ts +1 -1
  210. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  211. package/dist/formatting/NumberingLevel.js +8 -6
  212. package/dist/formatting/NumberingLevel.js.map +1 -1
  213. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  214. package/dist/formatting/NumberingManager.js +16 -1
  215. package/dist/formatting/NumberingManager.js.map +1 -1
  216. package/dist/formatting/Style.d.ts.map +1 -1
  217. package/dist/formatting/Style.js +14 -0
  218. package/dist/formatting/Style.js.map +1 -1
  219. package/dist/formatting/StylesManager.d.ts +2 -0
  220. package/dist/formatting/StylesManager.d.ts.map +1 -1
  221. package/dist/formatting/StylesManager.js +14 -2
  222. package/dist/formatting/StylesManager.js.map +1 -1
  223. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  224. package/dist/helpers/CleanupHelper.js +103 -26
  225. package/dist/helpers/CleanupHelper.js.map +1 -1
  226. package/dist/images/ImageOptimizer.d.ts.map +1 -1
  227. package/dist/images/ImageOptimizer.js +52 -4
  228. package/dist/images/ImageOptimizer.js.map +1 -1
  229. package/dist/index.d.ts +3 -1
  230. package/dist/index.d.ts.map +1 -1
  231. package/dist/index.js +4 -2
  232. package/dist/index.js.map +1 -1
  233. package/dist/internal.d.ts +1 -1
  234. package/dist/internal.d.ts.map +1 -1
  235. package/dist/internal.js +2 -1
  236. package/dist/internal.js.map +1 -1
  237. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -1
  238. package/dist/processors/CompatibilityUpgrader.js +7 -1
  239. package/dist/processors/CompatibilityUpgrader.js.map +1 -1
  240. package/dist/processors/InMemoryRevisionAcceptor.d.ts +1 -0
  241. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -1
  242. package/dist/processors/InMemoryRevisionAcceptor.js +135 -13
  243. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -1
  244. package/dist/processors/RevisionWalker.d.ts +2 -0
  245. package/dist/processors/RevisionWalker.d.ts.map +1 -1
  246. package/dist/processors/RevisionWalker.js +58 -8
  247. package/dist/processors/RevisionWalker.js.map +1 -1
  248. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -1
  249. package/dist/processors/SelectiveRevisionAcceptor.js +116 -17
  250. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -1
  251. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -1
  252. package/dist/processors/cnfStyleDecoder.js +7 -7
  253. package/dist/processors/cnfStyleDecoder.js.map +1 -1
  254. package/dist/processors/stripTrackedChanges.d.ts.map +1 -1
  255. package/dist/processors/stripTrackedChanges.js +16 -5
  256. package/dist/processors/stripTrackedChanges.js.map +1 -1
  257. package/dist/utils/deepClone.d.ts.map +1 -1
  258. package/dist/utils/deepClone.js +24 -11
  259. package/dist/utils/deepClone.js.map +1 -1
  260. package/dist/utils/units.d.ts.map +1 -1
  261. package/dist/utils/units.js +1 -1
  262. package/dist/utils/units.js.map +1 -1
  263. package/dist/utils/validation.d.ts.map +1 -1
  264. package/dist/utils/validation.js +11 -23
  265. package/dist/utils/validation.js.map +1 -1
  266. package/dist/utils/xmlSanitization.d.ts +2 -0
  267. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  268. package/dist/utils/xmlSanitization.js +133 -7
  269. package/dist/utils/xmlSanitization.js.map +1 -1
  270. package/dist/validation/RevisionAutoFixer.d.ts +6 -2
  271. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  272. package/dist/validation/RevisionAutoFixer.js +68 -54
  273. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  274. package/dist/validation/RevisionValidator.d.ts +2 -0
  275. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  276. package/dist/validation/RevisionValidator.js +26 -21
  277. package/dist/validation/RevisionValidator.js.map +1 -1
  278. package/dist/xml/XMLBuilder.d.ts +1 -0
  279. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  280. package/dist/xml/XMLBuilder.js +52 -20
  281. package/dist/xml/XMLBuilder.js.map +1 -1
  282. package/dist/xml/XMLParser.d.ts +1 -0
  283. package/dist/xml/XMLParser.d.ts.map +1 -1
  284. package/dist/xml/XMLParser.js +55 -13
  285. package/dist/xml/XMLParser.js.map +1 -1
  286. package/dist/zip/ZipHandler.d.ts.map +1 -1
  287. package/dist/zip/ZipHandler.js +37 -13
  288. package/dist/zip/ZipHandler.js.map +1 -1
  289. package/dist/zip/ZipReader.d.ts.map +1 -1
  290. package/dist/zip/ZipReader.js +52 -5
  291. package/dist/zip/ZipReader.js.map +1 -1
  292. package/dist/zip/errors.d.ts +3 -0
  293. package/dist/zip/errors.d.ts.map +1 -1
  294. package/dist/zip/errors.js +9 -1
  295. package/dist/zip/errors.js.map +1 -1
  296. package/dist/zip/types.d.ts +4 -0
  297. package/dist/zip/types.d.ts.map +1 -1
  298. package/dist/zip/types.js +4 -0
  299. package/dist/zip/types.js.map +1 -1
  300. package/package.json +2 -2
  301. package/src/core/Document.ts +1159 -240
  302. package/src/core/DocumentGenerator.ts +106 -26
  303. package/src/core/DocumentParser.ts +692 -120
  304. package/src/core/RelationshipManager.ts +446 -442
  305. package/src/elements/Comment.ts +123 -18
  306. package/src/elements/CommentManager.ts +121 -22
  307. package/src/elements/EndnoteManager.ts +4 -1
  308. package/src/elements/Field.ts +134 -43
  309. package/src/elements/FieldHelpers.ts +20 -4
  310. package/src/elements/Footer.ts +62 -67
  311. package/src/elements/FootnoteManager.ts +4 -1
  312. package/src/elements/Header.ts +62 -67
  313. package/src/elements/HeaderFooterManager.ts +56 -8
  314. package/src/elements/Hyperlink.ts +150 -55
  315. package/src/elements/Image.ts +51 -7
  316. package/src/elements/ImageManager.ts +24 -0
  317. package/src/elements/Paragraph.ts +161 -40
  318. package/src/elements/Revision.ts +446 -47
  319. package/src/elements/Run.ts +44 -6
  320. package/src/elements/Section.ts +25 -9
  321. package/src/elements/Shape.ts +52 -44
  322. package/src/elements/StructuredDocumentTag.ts +83 -8
  323. package/src/elements/Table.ts +151 -50
  324. package/src/elements/TableCell.ts +57 -17
  325. package/src/elements/TableOfContents.ts +10 -9
  326. package/src/elements/TableRow.ts +35 -3
  327. package/src/elements/TextBox.ts +58 -43
  328. package/src/formatting/AbstractNumbering.ts +4 -2
  329. package/src/formatting/NumberingLevel.ts +50 -12
  330. package/src/formatting/NumberingManager.ts +32 -3
  331. package/src/formatting/Style.ts +14 -0
  332. package/src/formatting/StylesManager.ts +29 -2
  333. package/src/helpers/CleanupHelper.ts +122 -30
  334. package/src/images/ImageOptimizer.ts +64 -5
  335. package/src/index.ts +7 -0
  336. package/src/internal.ts +1 -0
  337. package/src/processors/CompatibilityUpgrader.ts +15 -2
  338. package/src/processors/InMemoryRevisionAcceptor.ts +276 -17
  339. package/src/processors/RevisionWalker.ts +83 -7
  340. package/src/processors/SelectiveRevisionAcceptor.ts +164 -28
  341. package/src/processors/cnfStyleDecoder.ts +18 -12
  342. package/src/processors/stripTrackedChanges.ts +47 -10
  343. package/src/utils/deepClone.ts +48 -14
  344. package/src/utils/units.ts +3 -1
  345. package/src/utils/validation.ts +30 -32
  346. package/src/utils/xmlSanitization.ts +218 -22
  347. package/src/validation/RevisionAutoFixer.ts +109 -65
  348. package/src/validation/RevisionValidator.ts +48 -23
  349. package/src/xml/XMLBuilder.ts +82 -22
  350. package/src/xml/XMLParser.ts +87 -20
  351. package/src/zip/ZipHandler.ts +61 -21
  352. package/src/zip/ZipReader.ts +135 -13
  353. package/src/zip/errors.ts +15 -0
  354. package/src/zip/types.ts +44 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AbstractNumbering - Defines a multi-level numbering scheme\n *\n * An abstract numbering definition is a template that defines up to 9 levels of\n * list formatting. It's referenced by numbering instances which link it to actual\n * paragraphs in the document.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\nimport { NumberingLevel } from './NumberingLevel.js';\nimport { defaultLogger } from '../utils/logger.js';\n\n/**\n * Properties for creating an abstract numbering definition\n */\nexport interface AbstractNumberingProperties {\n /** Unique identifier for this abstract numbering */\n abstractNumId: number;\n\n /** Optional name for the numbering scheme */\n name?: string;\n\n /** The numbering levels (up to 9 levels, 0-8) */\n levels?: NumberingLevel[];\n\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\n multiLevelType?: number;\n\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\n numStyleLink?: string;\n\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\n styleLink?: string;\n\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\n tmpl?: string;\n\n /** Namespace-scoped unique ID (ECMA-376 §17.9.17) - 8-char hex string */\n nsid?: string;\n}\n\n/**\n * Represents an abstract numbering definition\n *\n * Abstract numbering defines the template for a multi-level list. Each instance\n * of a list in the document references an abstract numbering definition.\n */\nexport class AbstractNumbering {\n private abstractNumId: number;\n private name?: string;\n private levels: Map<number, NumberingLevel>;\n private multiLevelType: number;\n private numStyleLink?: string;\n private styleLink?: string;\n private tmpl?: string;\n private nsid?: string;\n\n /**\n * Creates a new abstract numbering definition\n * @param idOrProps The abstract numbering ID (number) or properties object\n * @param name Optional name (if first param is a number)\n */\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\n // Support both simple (numId) and object constructor patterns\n if (typeof idOrProps === 'number') {\n // Simple constructor: new AbstractNumbering(id)\n this.abstractNumId = idOrProps;\n this.name = name;\n this.levels = new Map();\n this.multiLevelType = 1; // default multilevel\n this.nsid = AbstractNumbering.generateNsid();\n } else {\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\n const properties = idOrProps;\n this.abstractNumId = properties.abstractNumId;\n this.name = properties.name;\n this.levels = new Map();\n this.multiLevelType = properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\n this.numStyleLink = properties.numStyleLink;\n this.styleLink = properties.styleLink;\n this.tmpl = properties.tmpl;\n this.nsid = properties.nsid ?? AbstractNumbering.generateNsid();\n\n if (properties.levels) {\n properties.levels.forEach((level) => {\n this.addLevel(level);\n });\n }\n }\n\n this.validate();\n }\n\n /**\n * Validates the abstract numbering\n */\n private validate(): void {\n if (this.abstractNumId < 0) {\n throw new Error('Abstract numbering ID must be non-negative');\n }\n\n if (this.levels.size > 9) {\n throw new Error('Cannot have more than 9 levels (0-8)');\n }\n }\n\n /**\n * Gets the abstract numbering ID\n */\n getAbstractNumId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Alias for getAbstractNumId for backward compatibility\n */\n getId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Gets the namespace-scoped unique ID (ECMA-376 §17.9.17)\n */\n getNsid(): string | undefined {\n return this.nsid;\n }\n\n /**\n * Sets the namespace-scoped unique ID\n */\n setNsid(nsid: string): void {\n this.nsid = nsid;\n }\n\n /**\n * Generates a random 8-character uppercase hex nsid value\n */\n private static generateNsid(): string {\n const hex = Math.floor(Math.random() * 0xffffffff)\n .toString(16)\n .toUpperCase()\n .padStart(8, '0');\n return hex;\n }\n\n /**\n * Gets the name\n */\n getName(): string | undefined {\n return this.name;\n }\n\n /**\n * Sets the name\n * @param name The numbering scheme name\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the multi-level type\n */\n getMultiLevelType(): string {\n if (this.multiLevelType === 1) {\n return 'multilevel';\n } else if (this.multiLevelType === 2) {\n return 'hybridMultilevel';\n } else {\n return 'singleLevel';\n }\n }\n\n /**\n * Sets the multi-level type\n * @param type The multi-level type ('multilevel' or 'singleLevel')\n */\n setMultiLevelType(type: 'multilevel' | 'singleLevel' | 'hybridMultilevel'): this {\n if (type === 'multilevel') {\n this.multiLevelType = 1;\n } else if (type === 'hybridMultilevel') {\n this.multiLevelType = 2;\n } else {\n this.multiLevelType = 0;\n }\n return this;\n }\n\n /**\n * Gets the numStyleLink (reference to a numbering style definition)\n */\n getNumStyleLink(): string | undefined {\n return this.numStyleLink;\n }\n\n /**\n * Sets the numStyleLink\n * @param link The numbering style name\n */\n setNumStyleLink(link: string | undefined): this {\n this.numStyleLink = link;\n return this;\n }\n\n /**\n * Gets the styleLink (reference to a style that uses this abstract numbering)\n */\n getStyleLink(): string | undefined {\n return this.styleLink;\n }\n\n /**\n * Sets the styleLink\n * @param link The style name\n */\n setStyleLink(link: string | undefined): this {\n this.styleLink = link;\n return this;\n }\n\n /**\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\n */\n getTemplate(): string | undefined {\n return this.tmpl;\n }\n\n /**\n * Sets the template code\n * @param tmpl 8-char hex string identifying the template\n */\n setTemplate(tmpl: string): this {\n this.tmpl = tmpl;\n return this;\n }\n\n /**\n * Adds a numbering level\n * @param level The numbering level to add\n */\n addLevel(level: NumberingLevel): this {\n const levelIndex = level.getLevel();\n\n if (levelIndex < 0 || levelIndex > 8) {\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\n }\n\n this.levels.set(levelIndex, level);\n return this;\n }\n\n /**\n * Adds multiple numbering levels at once\n * @param levels The numbering levels to add\n */\n addLevels(levels: NumberingLevel[]): this {\n levels.forEach((level) => this.addLevel(level));\n return this;\n }\n\n /**\n * Gets a numbering level by index\n * @param levelIndex The level index (0-8)\n */\n getLevel(levelIndex: number): NumberingLevel | undefined {\n return this.levels.get(levelIndex);\n }\n\n /**\n * Gets all levels\n */\n getAllLevels(): NumberingLevel[] {\n return Array.from(this.levels.values()).sort((a, b) => a.getLevel() - b.getLevel());\n }\n\n /**\n * Alias for getAllLevels for backward compatibility\n */\n getLevels(): NumberingLevel[] {\n return this.getAllLevels();\n }\n\n /**\n * Gets the number of levels defined\n */\n getLevelCount(): number {\n return this.levels.size;\n }\n\n /**\n * Checks if a level exists\n * @param levelIndex The level index (0-8)\n */\n hasLevel(levelIndex: number): boolean {\n return this.levels.has(levelIndex);\n }\n\n /**\n * Removes a level\n * @param levelIndex The level index (0-8)\n */\n removeLevel(levelIndex: number): boolean {\n return this.levels.delete(levelIndex);\n }\n\n /**\n * Generates the WordprocessingML XML for this abstract numbering\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\n\n // 1. nsid (ECMA-376 §17.9.17) — namespace-scoped unique identifier\n if (this.nsid) {\n children.push(XMLBuilder.wSelf('nsid', { 'w:val': this.nsid }));\n }\n\n // 2. multiLevelType\n let multiLevelTypeValue: string;\n if (this.multiLevelType === 1) {\n multiLevelTypeValue = 'multilevel';\n } else if (this.multiLevelType === 2) {\n multiLevelTypeValue = 'hybridMultilevel';\n } else {\n multiLevelTypeValue = 'singleLevel';\n }\n\n children.push(\n XMLBuilder.wSelf('multiLevelType', {\n 'w:val': multiLevelTypeValue,\n })\n );\n\n // Add template code (position 3 per CT_AbstractNum)\n if (this.tmpl) {\n children.push(XMLBuilder.wSelf('tmpl', { 'w:val': this.tmpl }));\n }\n\n // Add name if present\n if (this.name) {\n children.push(XMLBuilder.wSelf('name', { 'w:val': this.name }));\n }\n\n // Add styleLink / numStyleLink if present\n if (this.styleLink) {\n children.push(XMLBuilder.wSelf('styleLink', { 'w:val': this.styleLink }));\n }\n if (this.numStyleLink) {\n children.push(XMLBuilder.wSelf('numStyleLink', { 'w:val': this.numStyleLink }));\n }\n\n // Add all levels in order\n const sortedLevels = this.getAllLevels();\n sortedLevels.forEach((level) => {\n children.push(level.toXML());\n });\n\n // If no levels defined, add a default level 0\n if (sortedLevels.length === 0) {\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\n }\n\n return XMLBuilder.w(\n 'abstractNum',\n { 'w:abstractNumId': this.abstractNumId.toString() },\n children\n );\n }\n\n /**\n * Creates a bullet list abstract numbering with specified levels\n *\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\n *\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\n *\n * @example\n * // Standard bullet list\n * const bulletList = AbstractNumbering.createBulletList(1);\n *\n * @example\n * // Custom bullets using helper method\n * const bullets = [];\n * for (let i = 0; i < 9; i++) {\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\n * bullets.push(symbol);\n * }\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\n */\n static createBulletList(\n abstractNumId: number,\n levels = 9,\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Bullet List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n if (bullets && bullets.length > 0) {\n // Custom bullets provided - use them with default font\n const bullet = bullets[i % bullets.length] || '•';\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\n } else {\n // No custom bullets - use Word-native encoding (correct font per level)\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\n }\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a numbered list abstract numbering with specified levels\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param formats Array of formats for each level\n */\n static createNumberedList(\n abstractNumId: number,\n levels = 9,\n formats: ('decimal' | 'lowerLetter' | 'lowerRoman' | 'upperLetter' | 'upperRoman')[] = [\n 'decimal',\n 'lowerLetter',\n 'lowerRoman',\n 'upperLetter',\n 'upperRoman',\n ]\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Numbered List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n const format = formats[i % formats.length] || 'decimal';\n const template = `%${i + 1}.`;\n\n let level: NumberingLevel;\n switch (format) {\n case 'lowerLetter':\n level = NumberingLevel.createLowerLetterLevel(i, template);\n break;\n case 'lowerRoman':\n level = NumberingLevel.createLowerRomanLevel(i, template);\n break;\n case 'upperLetter':\n level = NumberingLevel.createUpperLetterLevel(i, template);\n break;\n case 'upperRoman':\n level = NumberingLevel.createUpperRomanLevel(i, template);\n break;\n case 'decimal':\n default:\n level = NumberingLevel.createDecimalLevel(i, template);\n break;\n }\n\n abstractNum.addLevel(level);\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a multi-level list with mixed formats\n * @param abstractNumId The abstract numbering ID\n */\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Multi-Level List',\n multiLevelType: 1,\n });\n\n // Level 0: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, '%1.'));\n\n // Level 1: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, '%2.'));\n\n // Level 2: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, '%3.'));\n\n // Level 3: 1, 2, 3, ... (with more indent)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, '%4.'));\n\n return abstractNum;\n }\n\n /**\n * Creates an outline list abstract numbering\n * @param abstractNumId The abstract numbering ID\n */\n static createOutlineList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Outline List',\n multiLevelType: 1,\n });\n\n // Level 0: I, II, III, ...\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, '%1.'));\n\n // Level 1: A, B, C, ...\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, '%2.'));\n\n // Level 2: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, '%3.'));\n\n // Level 3: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, '%4.'));\n\n // Level 4: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, '%5.'));\n\n // Level 5: A, B, C, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, '%6.'));\n\n // Level 6: 1, 2, 3, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, '%7.'));\n\n // Level 7: a, b, c, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, '%8.'));\n\n // Level 8: i, ii, iii, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, '%9.'));\n\n return abstractNum;\n }\n\n /**\n * Factory method for creating an abstract numbering definition\n * @param properties The abstract numbering properties\n */\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\n return new AbstractNumbering(properties);\n }\n\n /**\n * Creates an AbstractNumbering from XML element\n * @param xml The XML string of the <w:abstractNum> element\n * @returns AbstractNumbering instance\n */\n static fromXML(xml: string): AbstractNumbering {\n // Extract abstractNumId (required)\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\n if (!abstractNumIdMatch?.[1]) {\n throw new Error('Missing required w:abstractNumId attribute');\n }\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\n\n // Extract name (optional)\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\n\n // Extract multiLevelType (optional)\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n let multiLevelType = 1; // default to multilevel\n if (multiLevelTypeMatch?.[1]) {\n const value = multiLevelTypeMatch[1];\n if (value === 'singleLevel') multiLevelType = 0;\n else if (value === 'multilevel') multiLevelType = 1;\n else if (value === 'hybridMultilevel') multiLevelType = 2;\n }\n\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\n\n // Extract styleLink (optional, ECMA-376 §17.9.27)\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const styleLink = styleLinkMatch?.[1] || undefined;\n\n // Extract template code (optional, ECMA-376 §17.9.30)\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const tmpl = tmplMatch?.[1] || undefined;\n\n // Extract nsid (optional, ECMA-376 §17.9.17) — 8-char hex namespace ID\n const nsidMatch = /<w:nsid[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const nsid = nsidMatch?.[1] || undefined;\n\n // Create abstract numbering\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name,\n multiLevelType,\n numStyleLink,\n styleLink,\n tmpl,\n nsid,\n });\n\n // Extract and parse all levels\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\n const lvlMatches = xml.match(lvlRegex);\n\n if (lvlMatches) {\n for (const lvlXml of lvlMatches) {\n try {\n const level = NumberingLevel.fromXML(lvlXml);\n abstractNum.addLevel(level);\n } catch (error: unknown) {\n // Skip malformed levels but continue parsing\n defaultLogger.warn(`Failed to parse level: ${error}`);\n }\n }\n }\n\n return abstractNum;\n }\n}\n"]}
1
+ {"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AbstractNumbering - Defines a multi-level numbering scheme\n *\n * An abstract numbering definition is a template that defines up to 9 levels of\n * list formatting. It's referenced by numbering instances which link it to actual\n * paragraphs in the document.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\nimport { NumberingLevel } from './NumberingLevel.js';\nimport { defaultLogger } from '../utils/logger.js';\n\n/**\n * Properties for creating an abstract numbering definition\n */\nexport interface AbstractNumberingProperties {\n /** Unique identifier for this abstract numbering */\n abstractNumId: number;\n\n /** Optional name for the numbering scheme */\n name?: string;\n\n /** The numbering levels (up to 9 levels, 0-8) */\n levels?: NumberingLevel[];\n\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\n multiLevelType?: number;\n\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\n numStyleLink?: string;\n\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\n styleLink?: string;\n\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\n tmpl?: string;\n\n /** Namespace-scoped unique ID (ECMA-376 §17.9.17) - 8-char hex string */\n nsid?: string;\n}\n\n/**\n * Represents an abstract numbering definition\n *\n * Abstract numbering defines the template for a multi-level list. Each instance\n * of a list in the document references an abstract numbering definition.\n */\nexport class AbstractNumbering {\n private abstractNumId: number;\n private name?: string;\n private levels: Map<number, NumberingLevel>;\n private multiLevelType: number;\n private numStyleLink?: string;\n private styleLink?: string;\n private tmpl?: string;\n private nsid?: string;\n\n /**\n * Creates a new abstract numbering definition\n * @param idOrProps The abstract numbering ID (number) or properties object\n * @param name Optional name (if first param is a number)\n */\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\n // Support both simple (numId) and object constructor patterns\n if (typeof idOrProps === 'number') {\n // Simple constructor: new AbstractNumbering(id)\n this.abstractNumId = idOrProps;\n this.name = name;\n this.levels = new Map();\n this.multiLevelType = 1; // default multilevel\n this.nsid = AbstractNumbering.generateNsid();\n } else {\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\n const properties = idOrProps;\n this.abstractNumId = properties.abstractNumId;\n this.name = properties.name;\n this.levels = new Map();\n this.multiLevelType = properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\n this.numStyleLink = properties.numStyleLink;\n this.styleLink = properties.styleLink;\n this.tmpl = properties.tmpl;\n this.nsid = properties.nsid ?? AbstractNumbering.generateNsid();\n\n if (properties.levels) {\n properties.levels.forEach((level) => {\n this.addLevel(level);\n });\n }\n }\n\n this.validate();\n }\n\n /**\n * Validates the abstract numbering\n */\n private validate(): void {\n if (this.abstractNumId < 0) {\n throw new Error('Abstract numbering ID must be non-negative');\n }\n\n if (this.levels.size > 9) {\n throw new Error('Cannot have more than 9 levels (0-8)');\n }\n }\n\n /**\n * Gets the abstract numbering ID\n */\n getAbstractNumId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Alias for getAbstractNumId for backward compatibility\n */\n getId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Gets the namespace-scoped unique ID (ECMA-376 §17.9.17)\n */\n getNsid(): string | undefined {\n return this.nsid;\n }\n\n /**\n * Sets the namespace-scoped unique ID\n */\n setNsid(nsid: string): void {\n this.nsid = nsid;\n }\n\n /**\n * Generates a random 8-character uppercase hex nsid value\n */\n private static generateNsid(): string {\n const hex = Math.floor(Math.random() * 0xffffffff)\n .toString(16)\n .toUpperCase()\n .padStart(8, '0');\n return hex;\n }\n\n /**\n * Gets the name\n */\n getName(): string | undefined {\n return this.name;\n }\n\n /**\n * Sets the name\n * @param name The numbering scheme name\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the multi-level type\n */\n getMultiLevelType(): string {\n if (this.multiLevelType === 1) {\n return 'multilevel';\n } else if (this.multiLevelType === 2) {\n return 'hybridMultilevel';\n } else {\n return 'singleLevel';\n }\n }\n\n /**\n * Sets the multi-level type\n * @param type The multi-level type ('multilevel' or 'singleLevel')\n */\n setMultiLevelType(type: 'multilevel' | 'singleLevel' | 'hybridMultilevel'): this {\n if (type === 'multilevel') {\n this.multiLevelType = 1;\n } else if (type === 'hybridMultilevel') {\n this.multiLevelType = 2;\n } else {\n this.multiLevelType = 0;\n }\n return this;\n }\n\n /**\n * Gets the numStyleLink (reference to a numbering style definition)\n */\n getNumStyleLink(): string | undefined {\n return this.numStyleLink;\n }\n\n /**\n * Sets the numStyleLink\n * @param link The numbering style name\n */\n setNumStyleLink(link: string | undefined): this {\n this.numStyleLink = link;\n return this;\n }\n\n /**\n * Gets the styleLink (reference to a style that uses this abstract numbering)\n */\n getStyleLink(): string | undefined {\n return this.styleLink;\n }\n\n /**\n * Sets the styleLink\n * @param link The style name\n */\n setStyleLink(link: string | undefined): this {\n this.styleLink = link;\n return this;\n }\n\n /**\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\n */\n getTemplate(): string | undefined {\n return this.tmpl;\n }\n\n /**\n * Sets the template code\n * @param tmpl 8-char hex string identifying the template\n */\n setTemplate(tmpl: string): this {\n this.tmpl = tmpl;\n return this;\n }\n\n /**\n * Adds a numbering level\n * @param level The numbering level to add\n */\n addLevel(level: NumberingLevel): this {\n const levelIndex = level.getLevel();\n\n if (levelIndex < 0 || levelIndex > 8) {\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\n }\n\n this.levels.set(levelIndex, level);\n return this;\n }\n\n /**\n * Adds multiple numbering levels at once\n * @param levels The numbering levels to add\n */\n addLevels(levels: NumberingLevel[]): this {\n levels.forEach((level) => this.addLevel(level));\n return this;\n }\n\n /**\n * Gets a numbering level by index\n * @param levelIndex The level index (0-8)\n */\n getLevel(levelIndex: number): NumberingLevel | undefined {\n return this.levels.get(levelIndex);\n }\n\n /**\n * Gets all levels\n */\n getAllLevels(): NumberingLevel[] {\n return Array.from(this.levels.values()).sort((a, b) => a.getLevel() - b.getLevel());\n }\n\n /**\n * Alias for getAllLevels for backward compatibility\n */\n getLevels(): NumberingLevel[] {\n return this.getAllLevels();\n }\n\n /**\n * Gets the number of levels defined\n */\n getLevelCount(): number {\n return this.levels.size;\n }\n\n /**\n * Checks if a level exists\n * @param levelIndex The level index (0-8)\n */\n hasLevel(levelIndex: number): boolean {\n return this.levels.has(levelIndex);\n }\n\n /**\n * Removes a level\n * @param levelIndex The level index (0-8)\n */\n removeLevel(levelIndex: number): boolean {\n return this.levels.delete(levelIndex);\n }\n\n /**\n * Generates the WordprocessingML XML for this abstract numbering\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\n\n // 1. nsid (ECMA-376 §17.9.17) — namespace-scoped unique identifier\n if (this.nsid) {\n children.push(XMLBuilder.wSelf('nsid', { 'w:val': this.nsid }));\n }\n\n // 2. multiLevelType\n let multiLevelTypeValue: string;\n if (this.multiLevelType === 1) {\n multiLevelTypeValue = 'multilevel';\n } else if (this.multiLevelType === 2) {\n multiLevelTypeValue = 'hybridMultilevel';\n } else {\n multiLevelTypeValue = 'singleLevel';\n }\n\n children.push(\n XMLBuilder.wSelf('multiLevelType', {\n 'w:val': multiLevelTypeValue,\n })\n );\n\n // Add template code (position 3 per CT_AbstractNum)\n if (this.tmpl) {\n children.push(XMLBuilder.wSelf('tmpl', { 'w:val': this.tmpl }));\n }\n\n // Add name if present\n if (this.name) {\n children.push(XMLBuilder.wSelf('name', { 'w:val': this.name }));\n }\n\n // Add styleLink / numStyleLink if present\n if (this.styleLink) {\n children.push(XMLBuilder.wSelf('styleLink', { 'w:val': this.styleLink }));\n }\n if (this.numStyleLink) {\n children.push(XMLBuilder.wSelf('numStyleLink', { 'w:val': this.numStyleLink }));\n }\n\n // Add all levels in order\n const sortedLevels = this.getAllLevels();\n sortedLevels.forEach((level) => {\n children.push(level.toXML());\n });\n\n // If no levels defined, add a default level 0 — except for numStyleLink\n // definitions, which are pure style references per ECMA-376 §17.9.21 and\n // must carry no w:lvl children (the linked style supplies the levels)\n if (sortedLevels.length === 0 && !this.numStyleLink) {\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\n }\n\n return XMLBuilder.w(\n 'abstractNum',\n { 'w:abstractNumId': this.abstractNumId.toString() },\n children\n );\n }\n\n /**\n * Creates a bullet list abstract numbering with specified levels\n *\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\n *\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\n *\n * @example\n * // Standard bullet list\n * const bulletList = AbstractNumbering.createBulletList(1);\n *\n * @example\n * // Custom bullets using helper method\n * const bullets = [];\n * for (let i = 0; i < 9; i++) {\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\n * bullets.push(symbol);\n * }\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\n */\n static createBulletList(\n abstractNumId: number,\n levels = 9,\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Bullet List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n if (bullets && bullets.length > 0) {\n // Custom bullets provided - use them with default font\n const bullet = bullets[i % bullets.length] || '•';\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\n } else {\n // No custom bullets - use Word-native encoding (correct font per level)\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\n }\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a numbered list abstract numbering with specified levels\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param formats Array of formats for each level\n */\n static createNumberedList(\n abstractNumId: number,\n levels = 9,\n formats: ('decimal' | 'lowerLetter' | 'lowerRoman' | 'upperLetter' | 'upperRoman')[] = [\n 'decimal',\n 'lowerLetter',\n 'lowerRoman',\n 'upperLetter',\n 'upperRoman',\n ]\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Numbered List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n const format = formats[i % formats.length] || 'decimal';\n const template = `%${i + 1}.`;\n\n let level: NumberingLevel;\n switch (format) {\n case 'lowerLetter':\n level = NumberingLevel.createLowerLetterLevel(i, template);\n break;\n case 'lowerRoman':\n level = NumberingLevel.createLowerRomanLevel(i, template);\n break;\n case 'upperLetter':\n level = NumberingLevel.createUpperLetterLevel(i, template);\n break;\n case 'upperRoman':\n level = NumberingLevel.createUpperRomanLevel(i, template);\n break;\n case 'decimal':\n default:\n level = NumberingLevel.createDecimalLevel(i, template);\n break;\n }\n\n abstractNum.addLevel(level);\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a multi-level list with mixed formats\n * @param abstractNumId The abstract numbering ID\n */\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Multi-Level List',\n multiLevelType: 1,\n });\n\n // Level 0: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, '%1.'));\n\n // Level 1: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, '%2.'));\n\n // Level 2: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, '%3.'));\n\n // Level 3: 1, 2, 3, ... (with more indent)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, '%4.'));\n\n return abstractNum;\n }\n\n /**\n * Creates an outline list abstract numbering\n * @param abstractNumId The abstract numbering ID\n */\n static createOutlineList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Outline List',\n multiLevelType: 1,\n });\n\n // Level 0: I, II, III, ...\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, '%1.'));\n\n // Level 1: A, B, C, ...\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, '%2.'));\n\n // Level 2: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, '%3.'));\n\n // Level 3: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, '%4.'));\n\n // Level 4: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, '%5.'));\n\n // Level 5: A, B, C, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, '%6.'));\n\n // Level 6: 1, 2, 3, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, '%7.'));\n\n // Level 7: a, b, c, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, '%8.'));\n\n // Level 8: i, ii, iii, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, '%9.'));\n\n return abstractNum;\n }\n\n /**\n * Factory method for creating an abstract numbering definition\n * @param properties The abstract numbering properties\n */\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\n return new AbstractNumbering(properties);\n }\n\n /**\n * Creates an AbstractNumbering from XML element\n * @param xml The XML string of the <w:abstractNum> element\n * @returns AbstractNumbering instance\n */\n static fromXML(xml: string): AbstractNumbering {\n // Extract abstractNumId (required)\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\n if (!abstractNumIdMatch?.[1]) {\n throw new Error('Missing required w:abstractNumId attribute');\n }\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\n\n // Extract name (optional)\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\n\n // Extract multiLevelType (optional)\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n let multiLevelType = 1; // default to multilevel\n if (multiLevelTypeMatch?.[1]) {\n const value = multiLevelTypeMatch[1];\n if (value === 'singleLevel') multiLevelType = 0;\n else if (value === 'multilevel') multiLevelType = 1;\n else if (value === 'hybridMultilevel') multiLevelType = 2;\n }\n\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\n\n // Extract styleLink (optional, ECMA-376 §17.9.27)\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const styleLink = styleLinkMatch?.[1] || undefined;\n\n // Extract template code (optional, ECMA-376 §17.9.30)\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const tmpl = tmplMatch?.[1] || undefined;\n\n // Extract nsid (optional, ECMA-376 §17.9.17) — 8-char hex namespace ID\n const nsidMatch = /<w:nsid[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const nsid = nsidMatch?.[1] || undefined;\n\n // Create abstract numbering\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name,\n multiLevelType,\n numStyleLink,\n styleLink,\n tmpl,\n nsid,\n });\n\n // Extract and parse all levels\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\n const lvlMatches = xml.match(lvlRegex);\n\n if (lvlMatches) {\n for (const lvlXml of lvlMatches) {\n try {\n const level = NumberingLevel.fromXML(lvlXml);\n abstractNum.addLevel(level);\n } catch (error: unknown) {\n // Skip malformed levels but continue parsing\n defaultLogger.warn(`Failed to parse level: ${error}`);\n }\n }\n }\n\n return abstractNum;\n }\n}\n"]}
@@ -54,7 +54,7 @@ export declare class NumberingLevel {
54
54
  };
55
55
  getLevel(): number;
56
56
  getFormat(): NumberFormat;
57
- getProperties(): Required<Omit<NumberingLevelProperties, 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'>> & Pick<NumberingLevelProperties, 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'>;
57
+ getProperties(): Required<Omit<NumberingLevelProperties, 'fontSize' | 'color' | 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'>> & Pick<NumberingLevelProperties, 'fontSize' | 'color' | 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'>;
58
58
  setLeftIndent(twips: number): this;
59
59
  setHangingIndent(twips: number): this;
60
60
  setFont(font: string): this;
@@ -1 +1 @@
1
- {"version":3,"file":"NumberingLevel.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingLevel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NumberingLevel.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingLevel.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,10 @@ class NumberingLevel {
20
20
  leftIndent: properties.leftIndent !== undefined ? properties.leftIndent : 720 + properties.level * 360,
21
21
  hangingIndent: properties.hangingIndent !== undefined ? properties.hangingIndent : 360,
22
22
  font: properties.font || 'Calibri',
23
- fontSize: properties.fontSize || 22,
23
+ fontSize: properties.fontSize,
24
24
  isLegalNumberingStyle: properties.isLegalNumberingStyle !== undefined ? properties.isLegalNumberingStyle : false,
25
25
  suffix: properties.suffix || 'tab',
26
- color: properties.color || '000000',
26
+ color: properties.color,
27
27
  bold: properties.bold !== undefined ? properties.bold : false,
28
28
  italic: properties.italic !== undefined ? properties.italic : false,
29
29
  underline: properties.underline,
@@ -211,11 +211,13 @@ class NumberingLevel {
211
211
  rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('i'));
212
212
  rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('iCs'));
213
213
  }
214
- if (this.properties.color) {
214
+ if (this.properties.color !== undefined) {
215
215
  rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('color', { 'w:val': this.properties.color }));
216
216
  }
217
- rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));
218
- rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));
217
+ if (this.properties.fontSize !== undefined) {
218
+ rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));
219
+ rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));
220
+ }
219
221
  if (this.properties.underline) {
220
222
  rPrChildren.push(XMLBuilder_js_1.XMLBuilder.wSelf('u', { 'w:val': this.properties.underline }));
221
223
  }
@@ -564,7 +566,7 @@ class NumberingLevel {
564
566
  hangingIndent = parseInt(hangingMatch[1], 10);
565
567
  }
566
568
  let font = 'Calibri';
567
- let fontSize = 22;
569
+ let fontSize;
568
570
  const rFontsMatch = /<w:rFonts[^>]*\/>/.exec(xml);
569
571
  if (rFontsMatch) {
570
572
  const rFontsElement = rFontsMatch[0];
@@ -1 +1 @@
1
- {"version":3,"file":"NumberingLevel.js","sourceRoot":"","sources":["../../src/formatting/NumberingLevel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * NumberingLevel - Defines formatting for a single level in a list\n *\n * A numbering level specifies how a particular list level (0-8) should be formatted,\n * including the numbering format (bullet, decimal, roman, etc.), text template,\n * alignment, and indentation.\n */\n\nimport { parseOnOffAttribute } from '../utils/parsingHelpers.js';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\n\n/**\n * Word-native bullet character mappings\n *\n * Microsoft Word uses specific fonts with Private Use Area (PUA) characters\n * for bullet points. These mappings ensure 100% compatibility with Word's\n * native bullet rendering.\n *\n * Pattern: Levels 0,3,6 = filled bullet; 1,4,7 = open circle; 2,5,8 = filled square\n */\nexport const WORD_NATIVE_BULLETS = {\n /** Filled bullet (levels 0, 3, 6) - Symbol font U+F0B7 */\n FILLED_BULLET: { char: '\\uF0B7', font: 'Symbol' },\n /** Open circle (levels 1, 4, 7) - Courier New U+006F (lowercase 'o') */\n OPEN_CIRCLE: { char: '\\u006F', font: 'Courier New' },\n /** Filled square (levels 2, 5, 8) - Wingdings U+F0A7 */\n FILLED_SQUARE: { char: '\\uF0A7', font: 'Wingdings' },\n} as const;\n\n/**\n * Type for Word-native bullet definition\n */\nexport type WordNativeBullet = (typeof WORD_NATIVE_BULLETS)[keyof typeof WORD_NATIVE_BULLETS];\n\n/**\n * Numbering format types supported by Word\n */\nexport type NumberFormat =\n | 'bullet' // Bullet character\n | 'decimal' // 1, 2, 3, ...\n | 'lowerRoman' // i, ii, iii, ...\n | 'upperRoman' // I, II, III, ...\n | 'lowerLetter' // a, b, c, ...\n | 'upperLetter' // A, B, C, ...\n | 'ordinal' // 1st, 2nd, 3rd, ...\n | 'cardinalText' // One, Two, Three, ...\n | 'ordinalText' // First, Second, Third, ...\n | 'hex' // 0x01, 0x02, ...\n | 'chicago' // *, †, ‡, §, ...\n | 'decimal zero'; // 01, 02, 03, ...\n\n/**\n * Alignment for the numbering text\n */\nexport type NumberAlignment = 'left' | 'center' | 'right' | 'start' | 'end';\n\n/**\n * Properties for creating a numbering level\n */\nexport interface NumberingLevelProperties {\n /** The level index (0-8, where 0 is the outermost level) */\n level: number;\n\n /** The numbering format */\n format: NumberFormat;\n\n /** The text template (e.g., \"%1.\" for decimal, \"•\" for bullet) */\n text: string;\n\n /** Alignment of the numbering text */\n alignment?: NumberAlignment;\n\n /** Starting value (for numeric formats, default: 1) */\n start?: number;\n\n /** Left indentation in twips (can be negative for outdents into margin) */\n leftIndent?: number;\n\n /** Hanging indentation in twips (for the text after the number) */\n hangingIndent?: number;\n\n /** Font family for the numbering character (useful for bullets) */\n font?: string;\n\n /** Font size in half-points (e.g., 22 = 11pt) */\n fontSize?: number;\n\n /** Whether to show text after the number (default: true) */\n isLegalNumberingStyle?: boolean;\n\n /** Suffix after the number (tab, space, or nothing) */\n suffix?: 'tab' | 'space' | 'nothing';\n\n /** Text color in hex (without #) */\n color?: string;\n\n /** Whether the numbering text is bold */\n bold?: boolean;\n\n /** Whether the numbering text is italic */\n italic?: boolean;\n\n /** Underline style for numbering text ('single', 'double', 'wave', 'dotted', 'dash', etc.) */\n underline?: string;\n\n /**\n * Level at which numbering should restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n * Specifies when to restart this level's numbering based on a higher-level change:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined (default): Restart when level-1 changes (standard behavior)\n */\n lvlRestart?: number;\n\n /** Paragraph style ID linked to this numbering level (w:pStyle per ECMA-376 §17.9.23) */\n pStyle?: string;\n\n /**\n * Tentative level flag (w:tentative per ECMA-376 §17.9.29).\n * When true, the level is present in the definition but not displayed by\n * default — Word uses this for the unused upper levels of a hybrid\n * multilevel list so they can be offered in the list picker without\n * polluting the visible outline. `undefined` / `false` = non-tentative.\n */\n tentative?: boolean;\n\n /**\n * Template code (w:tplc per ECMA-376 §17.9.30) — ST_ShortHexNumber.\n * An 8-character hex string Word uses to identify the level template so\n * that sibling list definitions across documents can recognise each\n * other. Preserved verbatim for round-trip fidelity.\n */\n tplc?: string;\n\n /**\n * Picture bullet reference (w:lvlPicBulletId per ECMA-376 §17.9.15) —\n * numeric ID of a `<w:numPicBullet>` definition elsewhere in\n * numbering.xml. When set, the level renders its bullet as the linked\n * picture. MUST be parsed and round-tripped or `removeOrphanedNumPicBullets`\n * will treat every `<w:numPicBullet>` as unreferenced and delete them on save.\n */\n lvlPicBulletId?: number;\n\n /**\n * Legacy Word 97-style numbering state (`<w:legacy>` per ECMA-376 §17.9.10).\n * Preserved on levels imported from documents that record legacy rendering\n * information — losing this can shift the level's indentation and bullet/\n * number spacing to Word's modern defaults on round-trip.\n */\n legacy?: LegacyNumbering;\n}\n\n/**\n * CT_LvlLegacy (ECMA-376 §17.9.10) — carries Word 97 compatibility numbering.\n * All three attributes are independently optional; presence of the element\n * without any attributes is a valid placeholder Word emits in some cases.\n */\nexport interface LegacyNumbering {\n /** w:legacy — ST_OnOff. Whether to render this level with legacy rules. */\n legacy?: boolean;\n /** w:legacySpace — ST_TwipsMeasure (non-negative). Space after the number. */\n legacySpace?: number;\n /** w:legacyIndent — ST_SignedTwipsMeasure. Indent (can be negative). */\n legacyIndent?: number;\n}\n\n/**\n * Represents a single level in a numbering definition\n */\nexport class NumberingLevel {\n private properties: Required<\n Omit<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n >\n > &\n Pick<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n >;\n\n /**\n * Creates a new numbering level\n * @param properties The level properties\n */\n constructor(properties: NumberingLevelProperties) {\n // Set defaults\n this.properties = {\n level: properties.level,\n format: properties.format,\n text: properties.text,\n alignment: properties.alignment || 'left',\n start: properties.start !== undefined ? properties.start : 1,\n leftIndent:\n properties.leftIndent !== undefined ? properties.leftIndent : 720 + properties.level * 360,\n hangingIndent: properties.hangingIndent !== undefined ? properties.hangingIndent : 360,\n font: properties.font || 'Calibri',\n fontSize: properties.fontSize || 22, // 11pt default\n isLegalNumberingStyle:\n properties.isLegalNumberingStyle !== undefined ? properties.isLegalNumberingStyle : false,\n suffix: properties.suffix || 'tab',\n color: properties.color || '000000',\n bold: properties.bold !== undefined ? properties.bold : false,\n italic: properties.italic !== undefined ? properties.italic : false,\n underline: properties.underline,\n lvlRestart: properties.lvlRestart, // undefined means default behavior (restart on level-1 change)\n pStyle: properties.pStyle,\n // Explicit false differs from undefined only at serialization time;\n // both collapse to \"not tentative\" semantically.\n tentative: properties.tentative,\n tplc: properties.tplc,\n lvlPicBulletId: properties.lvlPicBulletId,\n legacy: properties.legacy,\n };\n\n this.validate();\n }\n\n /**\n * Validates the level properties\n */\n private validate(): void {\n if (this.properties.level < 0 || this.properties.level > 8) {\n throw new Error(`Level must be between 0 and 8, got ${this.properties.level}`);\n }\n\n // Note: leftIndent CAN be negative (outdent into margin) per ECMA-376\n // This is valid and used for hanging indents where bullets appear in margin\n\n if (this.properties.hangingIndent < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n\n if (this.properties.start < 0) {\n throw new Error('Start value must be non-negative');\n }\n }\n\n /**\n * Calculates safe indentation values for a given level based on page constraints.\n *\n * Use this instead of default indentation when working with narrow pages or\n * deep nesting levels to ensure content stays within page margins.\n *\n * @param level The level index (0-8)\n * @param pageWidthTwips Page width in twips (default: 12240 = 8.5 inches)\n * @param leftMarginTwips Left margin in twips (default: 1440 = 1 inch)\n * @param rightMarginTwips Right margin in twips (default: 1440 = 1 inch)\n * @param minContentWidth Minimum content width in twips (default: 2880 = 2 inches)\n * @returns Safe indentation values that won't exceed available space\n *\n * @example\n * ```typescript\n * // For a narrow page (6\" wide with 0.5\" margins)\n * const indent = NumberingLevel.calculateSafeIndentation(\n * 5, // level 5\n * 8640, // 6 inches page width\n * 720, // 0.5 inch left margin\n * 720 // 0.5 inch right margin\n * );\n * ```\n */\n static calculateSafeIndentation(\n level: number,\n pageWidthTwips = 12240,\n leftMarginTwips = 1440,\n rightMarginTwips = 1440,\n minContentWidth = 2880\n ): { leftIndent: number; hangingIndent: number } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n // Calculate available content width\n const availableWidth = pageWidthTwips - leftMarginTwips - rightMarginTwips;\n\n // Calculate max safe indent (leave space for content)\n const maxSafeIndent = Math.max(0, availableWidth - minContentWidth);\n\n // Standard indentation\n const standardLeftIndent = 720 + level * 360;\n const hangingIndent = 360;\n\n // Cap at safe maximum\n const safeLeftIndent = Math.min(standardLeftIndent, maxSafeIndent);\n\n return {\n leftIndent: safeLeftIndent,\n hangingIndent,\n };\n }\n\n /**\n * Gets the level index\n */\n getLevel(): number {\n return this.properties.level;\n }\n\n /**\n * Gets the numbering format\n */\n getFormat(): NumberFormat {\n return this.properties.format;\n }\n\n /**\n * Gets the level properties\n */\n getProperties(): Required<\n Omit<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n >\n > &\n Pick<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n > {\n return { ...this.properties };\n }\n\n /**\n * Sets the left indentation\n * @param twips Indentation in twips\n */\n setLeftIndent(twips: number): this {\n // Note: Negative values are valid (outdent into margin) per ECMA-376\n this.properties.leftIndent = twips;\n return this;\n }\n\n /**\n * Sets the hanging indentation\n * @param twips Indentation in twips\n */\n setHangingIndent(twips: number): this {\n if (twips < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n this.properties.hangingIndent = twips;\n return this;\n }\n\n /**\n * Sets the font for the numbering character\n * @param font Font family name\n */\n setFont(font: string): this {\n this.properties.font = font;\n return this;\n }\n\n /**\n * Sets the alignment\n * @param alignment Alignment type\n */\n setAlignment(alignment: NumberAlignment): this {\n this.properties.alignment = alignment;\n return this;\n }\n\n /**\n * Sets the font size in half-points\n * @param halfPoints Font size in half-points (e.g., 24 = 12pt)\n */\n setFontSize(halfPoints: number): this {\n this.properties.fontSize = halfPoints;\n return this;\n }\n\n /**\n * Sets the level text (bullet character or number template)\n * @param text The text template (e.g., '•' for bullets, '%1.' for numbered)\n */\n setText(text: string): this {\n this.properties.text = text;\n return this;\n }\n\n /**\n * Sets the text color\n * @param color Hex color without # (e.g., '000000' for black)\n */\n setColor(color: string): this {\n this.properties.color = color;\n return this;\n }\n\n /**\n * Sets whether the numbering text is bold\n * @param bold Whether to make bold\n */\n setBold(bold: boolean): this {\n this.properties.bold = bold;\n return this;\n }\n\n /**\n * Sets whether the numbering text is italic\n * @param italic Whether to make italic\n */\n setItalic(italic: boolean): this {\n this.properties.italic = italic;\n return this;\n }\n\n /**\n * Gets whether the numbering text is italic\n */\n getItalic(): boolean {\n return this.properties.italic ?? false;\n }\n\n /**\n * Sets the underline style for numbering text\n * @param style Underline style ('single', 'double', 'wave', 'dotted', 'dash', etc.)\n */\n setUnderline(style: string | undefined): this {\n this.properties.underline = style;\n return this;\n }\n\n /**\n * Gets the underline style\n */\n getUnderline(): string | undefined {\n return this.properties.underline;\n }\n\n /**\n * Clears the underline style\n */\n clearUnderline(): this {\n this.properties.underline = undefined;\n return this;\n }\n\n /**\n * Sets the level restart behavior (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n *\n * Controls when this level's numbering restarts based on higher-level changes:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined: Restart when level-1 changes (standard/default behavior)\n *\n * @param level The level that triggers restart (0-8), or undefined for default\n * @example\n * // Level 1 that never restarts (continuous across document)\n * level1.setLvlRestart(0);\n *\n * // Level 2 that restarts when level 0 changes (not level 1)\n * level2.setLvlRestart(0);\n */\n setLvlRestart(level: number | undefined): this {\n if (level !== undefined && (level < 0 || level > 8)) {\n throw new Error(`lvlRestart must be between 0 and 8, got ${level}`);\n }\n this.properties.lvlRestart = level;\n return this;\n }\n\n /**\n * Gets the level restart value\n * @returns The level that triggers restart, or undefined for default behavior\n */\n getLvlRestart(): number | undefined {\n return this.properties.lvlRestart;\n }\n\n /**\n * Sets the paragraph style ID linked to this numbering level\n * Links this level to a paragraph style definition (w:pStyle per ECMA-376 §17.9.23)\n * @param styleId The paragraph style ID\n */\n setParagraphStyle(styleId: string): this {\n this.properties.pStyle = styleId;\n return this;\n }\n\n /**\n * Gets the paragraph style ID linked to this numbering level\n */\n getParagraphStyle(): string | undefined {\n return this.properties.pStyle;\n }\n\n /**\n * Sets the numbering format (decimal, lowerLetter, bullet, etc.)\n * @param format The numbering format\n */\n setFormat(format: NumberFormat): this {\n this.properties.format = NumberingLevel.normalizeFormat(format);\n return this;\n }\n\n /**\n * Normalizes display-string format values to ECMA-376 ST_NumberFormat names.\n * Accepts both standard format names and common display shortcuts.\n */\n static normalizeFormat(format: string): NumberFormat {\n const corrections: Record<string, NumberFormat> = {\n 'a.': 'lowerLetter',\n 'A.': 'upperLetter',\n 'i.': 'lowerRoman',\n 'I.': 'upperRoman',\n '1.': 'decimal',\n };\n return (corrections[format] ?? format) as NumberFormat;\n }\n\n /**\n * Generates the WordprocessingML XML for this level\n */\n toXML(): XMLElement {\n // ECMA-376 CT_Lvl element order (§17.9.6):\n // start, numFmt, lvlRestart, pStyle, isLgl, suff, lvlText, lvlPicBulletId, legacy, lvlJc, pPr, rPr\n const children: XMLElement[] = [];\n\n // 1. Start value\n children.push(XMLBuilder.wSelf('start', { 'w:val': this.properties.start.toString() }));\n\n // 2. Number format\n children.push(XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.format }));\n\n // 3. Level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n if (this.properties.lvlRestart !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlRestart', { 'w:val': this.properties.lvlRestart.toString() })\n );\n }\n\n // 4. pStyle (paragraph style link)\n if (this.properties.pStyle) {\n children.push(XMLBuilder.wSelf('pStyle', { 'w:val': this.properties.pStyle }));\n }\n\n // 5. Legal numbering style\n if (this.properties.isLegalNumberingStyle) {\n children.push(XMLBuilder.wSelf('isLgl'));\n }\n\n // 6. Suffix (what comes after the number)\n if (this.properties.suffix) {\n children.push(XMLBuilder.wSelf('suff', { 'w:val': this.properties.suffix }));\n }\n\n // 7. Level text (e.g., \"%1.\" or \"•\")\n children.push(XMLBuilder.wSelf('lvlText', { 'w:val': this.properties.text }));\n\n // 7a. Picture bullet reference (w:lvlPicBulletId per §17.9.15). CT_Lvl order\n // places this AFTER lvlText and BEFORE lvlJc. Must be emitted so that\n // orphan-cleanup of <w:numPicBullet> doesn't delete the referenced bullet.\n if (this.properties.lvlPicBulletId !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlPicBulletId', {\n 'w:val': this.properties.lvlPicBulletId.toString(),\n })\n );\n }\n\n // 7b. Legacy numbering state (w:legacy per §17.9.10). CT_Lvl order places\n // this AFTER lvlPicBulletId and BEFORE lvlJc. Emit every attribute that\n // is explicitly set; omit when legacy is undefined entirely.\n if (this.properties.legacy) {\n const legacyAttrs: Record<string, string> = {};\n if (this.properties.legacy.legacy !== undefined) {\n legacyAttrs['w:legacy'] = this.properties.legacy.legacy ? '1' : '0';\n }\n if (this.properties.legacy.legacySpace !== undefined) {\n legacyAttrs['w:legacySpace'] = this.properties.legacy.legacySpace.toString();\n }\n if (this.properties.legacy.legacyIndent !== undefined) {\n legacyAttrs['w:legacyIndent'] = this.properties.legacy.legacyIndent.toString();\n }\n children.push(XMLBuilder.wSelf('legacy', legacyAttrs));\n }\n\n // 8. Alignment\n children.push(XMLBuilder.wSelf('lvlJc', { 'w:val': this.properties.alignment }));\n\n // 9. Paragraph properties (indentation)\n const ind = XMLBuilder.wSelf('ind', {\n 'w:left': this.properties.leftIndent.toString(),\n 'w:hanging': this.properties.hangingIndent.toString(),\n });\n const pPr = XMLBuilder.w('pPr', undefined, [ind]);\n children.push(pPr);\n\n // 10. Run properties (font)\n const rPrChildren: XMLElement[] = [];\n\n // Font\n rPrChildren.push(\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': this.properties.font,\n 'w:hAnsi': this.properties.font,\n 'w:cs': this.properties.font,\n 'w:hint': 'default',\n })\n );\n\n // Bold\n if (this.properties.bold) {\n rPrChildren.push(XMLBuilder.wSelf('b'));\n rPrChildren.push(XMLBuilder.wSelf('bCs'));\n }\n\n // Italic\n if (this.properties.italic) {\n rPrChildren.push(XMLBuilder.wSelf('i'));\n rPrChildren.push(XMLBuilder.wSelf('iCs'));\n }\n\n // CT_RPr element order per ECMA-376 §17.3.2.28:\n // ... b, bCs, i, iCs, ... color (#19), ... sz (#24), szCs (#25), ... u (#27)\n\n // Color (#19)\n if (this.properties.color) {\n rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.properties.color }));\n }\n\n // Font size (#24, #25)\n rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));\n rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));\n\n // Underline (#27)\n if (this.properties.underline) {\n rPrChildren.push(XMLBuilder.wSelf('u', { 'w:val': this.properties.underline }));\n }\n\n const rPr = XMLBuilder.w('rPr', undefined, rPrChildren);\n children.push(rPr);\n\n // <w:lvl> opening attributes: w:ilvl (required), plus optional w:tplc\n // (template code, §17.9.30) and w:tentative (§17.9.29). w:tentative and\n // w:tplc were both silently dropped on parse before this — so neither\n // could ever be regenerated on save.\n const lvlAttrs: Record<string, string> = { 'w:ilvl': this.properties.level.toString() };\n if (this.properties.tplc) {\n lvlAttrs['w:tplc'] = this.properties.tplc;\n }\n if (this.properties.tentative) {\n lvlAttrs['w:tentative'] = '1';\n }\n return XMLBuilder.w('lvl', lvlAttrs, children);\n }\n\n /**\n * Gets the recommended bullet symbol and font for a given level\n * @param level The level index (0-8)\n * @param style Optional bullet style ('standard', 'circle', 'square', 'arrow', 'check', 'word-native')\n * @returns Object with symbol and font properties\n */\n static getBulletSymbolWithFont(\n level: number,\n style: 'standard' | 'circle' | 'square' | 'arrow' | 'check' | 'word-native' = 'standard'\n ): { symbol: string; font: string } {\n const bulletSets = {\n // Standard style now uses Word-native encoding for maximum compatibility\n standard: [\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n circle: [\n { symbol: '●', font: 'Calibri' }, // Level 0: Filled circle (bold)\n { symbol: '○', font: 'Calibri' }, // Level 1: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 2: Fisheye\n { symbol: '◯', font: 'Calibri' }, // Level 3: Large circle\n { symbol: '⦿', font: 'Calibri' }, // Level 4: Circled bullet\n { symbol: '○', font: 'Calibri' }, // Level 5: Empty circle\n { symbol: '●', font: 'Calibri' }, // Level 6: Filled circle\n { symbol: '○', font: 'Calibri' }, // Level 7: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 8: Fisheye\n ],\n square: [\n { symbol: '■', font: 'Calibri' }, // Level 0: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 1: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 2: Small filled square\n { symbol: '▫', font: 'Calibri' }, // Level 3: Small empty square\n { symbol: '◼', font: 'Calibri' }, // Level 4: Medium filled square\n { symbol: '◻', font: 'Calibri' }, // Level 5: Medium empty square\n { symbol: '■', font: 'Calibri' }, // Level 6: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 7: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 8: Small filled square\n ],\n arrow: [\n { symbol: '➢', font: 'Calibri' }, // Level 0: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 1: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 2: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 3: Right arrow simple\n { symbol: '➜', font: 'Calibri' }, // Level 4: Right arrow outline\n { symbol: '➢', font: 'Calibri' }, // Level 5: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 6: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 7: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 8: Right arrow simple\n ],\n check: [\n { symbol: '✓', font: 'Calibri' }, // Level 0: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 1: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 2: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 3: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 4: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 5: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 6: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 7: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 8: Checked box\n ],\n 'word-native': [\n // Word-native bullets using PUA characters with Symbol/Wingdings fonts\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n };\n\n const selectedSet = bulletSets[style];\n const levelIndex = level % selectedSet.length;\n const result = selectedSet[levelIndex];\n\n // Fallback to standard bullet if somehow undefined\n return result || { symbol: '•', font: 'Calibri' };\n }\n\n /**\n * Calculates the standard indentation values for a given level\n * @param level The level index (0-8)\n * @returns Object with leftIndent and hangingIndent in twips\n * @example\n * const indent = NumberingLevel.calculateStandardIndentation(0);\n * // Returns: { leftIndent: 720, hangingIndent: 360 } (0.5\" left, 0.25\" hanging)\n *\n * const indent2 = NumberingLevel.calculateStandardIndentation(2);\n * // Returns: { leftIndent: 1440, hangingIndent: 360 } (1.0\" left, 0.25\" hanging)\n */\n static calculateStandardIndentation(level: number): {\n leftIndent: number;\n hangingIndent: number;\n } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n return {\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n };\n }\n\n /**\n * Gets the standard number format for a given level\n * @param level The level index (0-8)\n * @returns The recommended number format for this level\n * @example\n * NumberingLevel.getStandardNumberFormat(0); // 'decimal' (1., 2., 3.)\n * NumberingLevel.getStandardNumberFormat(1); // 'lowerLetter' (a., b., c.)\n * NumberingLevel.getStandardNumberFormat(2); // 'lowerRoman' (i., ii., iii.)\n * NumberingLevel.getStandardNumberFormat(3); // 'upperLetter' (A., B., C.)\n * NumberingLevel.getStandardNumberFormat(4); // 'upperRoman' (I., II., III.)\n */\n static getStandardNumberFormat(level: number): NumberFormat {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n const formats: NumberFormat[] = [\n 'decimal', // Level 0: 1., 2., 3.\n 'lowerLetter', // Level 1: a., b., c.\n 'lowerRoman', // Level 2: i., ii., iii.\n 'upperLetter', // Level 3: A., B., C.\n 'upperRoman', // Level 4: I., II., III.\n ];\n\n const result = formats[level % formats.length];\n return result || 'decimal'; // Fallback to decimal (should never happen)\n }\n\n /**\n * Creates a bullet list level\n *\n * When called without parameters, uses Word-native encoding for the level:\n * - Levels 0, 3, 6: Filled bullet (Symbol font, U+F0B7)\n * - Levels 1, 4, 7: Open circle (Courier New, U+006F)\n * - Levels 2, 5, 8: Filled square (Wingdings, U+F0A7)\n *\n * @param level The level index (0-8)\n * @param bullet Optional bullet character (defaults to Word-native for level)\n * @param font Optional font to use for the bullet (defaults to Word-native for level)\n */\n static createBulletLevel(level: number, bullet?: string, font?: string): NumberingLevel {\n // Use Word-native defaults when not specified\n const defaults = NumberingLevel.getBulletSymbolWithFont(level, 'standard');\n const actualBullet = bullet ?? defaults.symbol;\n const actualFont = font ?? defaults.font;\n\n return new NumberingLevel({\n level,\n format: 'bullet',\n text: actualBullet,\n alignment: 'left',\n font: actualFont,\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a decimal list level (1, 2, 3, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createDecimalLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'decimal',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower roman list level (i, ii, iii, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper roman list level (I, II, III, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower letter list level (a, b, c, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper letter list level (A, B, C, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Factory method for creating a numbering level\n * @param properties The level properties\n */\n static create(properties: NumberingLevelProperties): NumberingLevel {\n return new NumberingLevel(properties);\n }\n\n /**\n * Creates a NumberingLevel from XML element\n * @param xml The XML string of the <w:lvl> element\n * @returns NumberingLevel instance\n */\n static fromXML(xml: string): NumberingLevel {\n // Extract level index (required)\n const ilvlMatch = /<w:lvl[^>]*w:ilvl=\"([^\"]+)\"/.exec(xml);\n if (!ilvlMatch?.[1]) {\n throw new Error('Missing required w:ilvl attribute');\n }\n const level = parseInt(ilvlMatch[1], 10);\n\n // Extract attributes from the <w:lvl> opening tag specifically. Restrict\n // the regexes to the substring before the first `>` so they can't stray\n // onto a child element that happens to also carry a similarly-named attr.\n let tentative: boolean | undefined;\n let tplc: string | undefined;\n const lvlOpenEnd = xml.indexOf('>');\n if (lvlOpenEnd !== -1) {\n const lvlOpenTag = xml.substring(0, lvlOpenEnd);\n // w:tentative per ECMA-376 §17.9.29 — ST_OnOff.\n const tentativeMatch = /w:tentative\\s*=\\s*\"([^\"]*)\"/.exec(lvlOpenTag);\n if (tentativeMatch?.[1] !== undefined) {\n tentative = parseOnOffAttribute(tentativeMatch[1]);\n }\n // w:tplc per ECMA-376 §17.9.30 — ST_ShortHexNumber (8-char hex).\n const tplcMatch = /w:tplc\\s*=\\s*\"([^\"]*)\"/.exec(lvlOpenTag);\n if (tplcMatch?.[1]) {\n tplc = tplcMatch[1];\n }\n }\n\n // Extract w:lvlPicBulletId child element per ECMA-376 §17.9.15.\n // Zero is a valid ID, so use explicit check instead of truthy coercion.\n let lvlPicBulletId: number | undefined;\n const picBulletMatch = /<w:lvlPicBulletId\\s[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (picBulletMatch?.[1] !== undefined) {\n const parsed = parseInt(picBulletMatch[1], 10);\n if (!isNaN(parsed)) {\n lvlPicBulletId = parsed;\n }\n }\n\n // Extract <w:legacy> child per ECMA-376 §17.9.10. All three attributes are\n // independently optional; the element itself may be bare (a valid Word\n // placeholder). Presence of the tag at all means the level has legacy state\n // the source author wanted preserved, so we must emit it back on save even\n // if no attributes are set.\n let legacy: LegacyNumbering | undefined;\n const legacyMatch = /<w:legacy\\b([^>]*)\\/?>/.exec(xml);\n if (legacyMatch) {\n const attrs = legacyMatch[1] ?? '';\n legacy = {};\n const legacyValMatch = /\\bw:legacy\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (legacyValMatch?.[1] !== undefined) {\n legacy.legacy = parseOnOffAttribute(legacyValMatch[1]);\n }\n const spaceMatch = /\\bw:legacySpace\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (spaceMatch?.[1] !== undefined) {\n const parsed = parseInt(spaceMatch[1], 10);\n if (!isNaN(parsed)) legacy.legacySpace = parsed;\n }\n const indentMatch = /\\bw:legacyIndent\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (indentMatch?.[1] !== undefined) {\n const parsed = parseInt(indentMatch[1], 10);\n if (!isNaN(parsed)) legacy.legacyIndent = parsed;\n }\n }\n\n // Extract number format (required)\n const numFmtMatch = /<w:numFmt[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (!numFmtMatch?.[1]) {\n throw new Error('Missing required w:numFmt element');\n }\n const format = NumberingLevel.normalizeFormat(numFmtMatch[1]);\n\n // Extract level text (optional - can be empty for placeholder levels)\n const lvlTextMatch = /<w:lvlText[^>]*w:val=\"([^\"]*)\"/.exec(xml);\n const text = lvlTextMatch?.[1] !== undefined ? lvlTextMatch[1] : '';\n\n // Extract alignment (optional, default: left)\n const lvlJcMatch = /<w:lvlJc[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const alignment = (lvlJcMatch?.[1] ? lvlJcMatch[1] : 'left') as NumberAlignment;\n\n // Extract start value (optional, default: 1)\n const startMatch = /<w:start[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const start = startMatch?.[1] ? parseInt(startMatch[1], 10) : 1;\n\n // Extract suffix (optional, default: tab)\n const suffixMatch = /<w:suff[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const suffix = suffixMatch?.[1] ? (suffixMatch[1] as 'tab' | 'space' | 'nothing') : 'tab';\n\n // Extract level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n let lvlRestart: number | undefined;\n const lvlRestartMatch = /<w:lvlRestart[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (lvlRestartMatch?.[1]) {\n lvlRestart = parseInt(lvlRestartMatch[1], 10);\n }\n\n // Extract pStyle (paragraph style link)\n let pStyle: string | undefined;\n const pStyleMatch = /<w:pStyle[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (pStyleMatch?.[1]) {\n pStyle = pStyleMatch[1];\n }\n\n // Extract w:isLgl (legal numbering style) per ECMA-376 §17.9.4 — CT_OnOff.\n // Previously not parsed at all, so a source document's `<w:isLgl/>` was\n // silently dropped on load and the level reverted to non-legal formatting\n // on any round-trip through docxmlater.\n let isLegalNumberingStyle: boolean | undefined;\n const isLglMatch = /<w:isLgl\\b([^>]*)\\/?>/.exec(xml);\n if (isLglMatch) {\n const attrs = isLglMatch[1] ?? '';\n const valMatch = /w:val\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n isLegalNumberingStyle = valMatch?.[1] !== undefined ? parseOnOffAttribute(valMatch[1]) : true;\n }\n\n // Extract indentation from <w:pPr><w:ind> per ECMA-376 §17.3.1.12\n // CT_Ind. Both legacy LTR attrs (w:left / w:right) and bidi-aware\n // aliases (w:start / w:end) are valid; Word commonly emits the\n // bidi-aware form on modern documents. The previous regex read only\n // w:left / w:hanging, losing the numbering-level indent entirely on\n // any list authored or edited by a bidi-aware tool.\n //\n // The `[^>]*>` pattern (rather than `[^>]*\\/>`) also captures the\n // less-common non-self-closing form (`<w:ind …></w:ind>`).\n let leftIndent = 720 + level * 360; // default\n let hangingIndent = 360; // default\n const indMatch = /<w:ind\\b[^>]*>/.exec(xml);\n if (indMatch) {\n const indElement = indMatch[0];\n const leftMatch =\n /\\bw:start\\s*=\\s*\"([^\"]+)\"/.exec(indElement) || /\\bw:left\\s*=\\s*\"([^\"]+)\"/.exec(indElement);\n const hangingMatch = /\\bw:hanging\\s*=\\s*\"([^\"]+)\"/.exec(indElement);\n\n if (leftMatch?.[1]) leftIndent = parseInt(leftMatch[1], 10);\n if (hangingMatch?.[1]) hangingIndent = parseInt(hangingMatch[1], 10);\n }\n\n // Extract font and size from <w:rPr>\n let font = 'Calibri';\n let fontSize = 22;\n\n const rFontsMatch = /<w:rFonts[^>]*\\/>/.exec(xml);\n if (rFontsMatch) {\n const rFontsElement = rFontsMatch[0];\n const asciiMatch = /w:ascii=\"([^\"]+)\"/.exec(rFontsElement);\n if (asciiMatch?.[1]) font = asciiMatch[1];\n }\n\n const szMatch = /<w:sz[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (szMatch?.[1]) fontSize = parseInt(szMatch[1], 10);\n\n // List prefixes should never have bold, italic, or underline - ignore source XML formatting\n const bold = false;\n const italic = false;\n const underline: string | undefined = undefined;\n\n // Extract color from <w:rPr>\n let color: string | undefined;\n const colorMatch = /<w:color[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (colorMatch?.[1]) {\n color = colorMatch[1];\n }\n\n return new NumberingLevel({\n level,\n format,\n text,\n alignment,\n start,\n leftIndent,\n hangingIndent,\n font,\n fontSize,\n suffix,\n bold,\n italic,\n underline,\n color,\n lvlRestart,\n pStyle,\n isLegalNumberingStyle,\n tentative,\n tplc,\n lvlPicBulletId,\n legacy,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"NumberingLevel.js","sourceRoot":"","sources":["../../src/formatting/NumberingLevel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * NumberingLevel - Defines formatting for a single level in a list\n *\n * A numbering level specifies how a particular list level (0-8) should be formatted,\n * including the numbering format (bullet, decimal, roman, etc.), text template,\n * alignment, and indentation.\n */\n\nimport { parseOnOffAttribute } from '../utils/parsingHelpers.js';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\n\n/**\n * Word-native bullet character mappings\n *\n * Microsoft Word uses specific fonts with Private Use Area (PUA) characters\n * for bullet points. These mappings ensure 100% compatibility with Word's\n * native bullet rendering.\n *\n * Pattern: Levels 0,3,6 = filled bullet; 1,4,7 = open circle; 2,5,8 = filled square\n */\nexport const WORD_NATIVE_BULLETS = {\n /** Filled bullet (levels 0, 3, 6) - Symbol font U+F0B7 */\n FILLED_BULLET: { char: '\\uF0B7', font: 'Symbol' },\n /** Open circle (levels 1, 4, 7) - Courier New U+006F (lowercase 'o') */\n OPEN_CIRCLE: { char: '\\u006F', font: 'Courier New' },\n /** Filled square (levels 2, 5, 8) - Wingdings U+F0A7 */\n FILLED_SQUARE: { char: '\\uF0A7', font: 'Wingdings' },\n} as const;\n\n/**\n * Type for Word-native bullet definition\n */\nexport type WordNativeBullet = (typeof WORD_NATIVE_BULLETS)[keyof typeof WORD_NATIVE_BULLETS];\n\n/**\n * Numbering format types supported by Word\n */\nexport type NumberFormat =\n | 'bullet' // Bullet character\n | 'decimal' // 1, 2, 3, ...\n | 'lowerRoman' // i, ii, iii, ...\n | 'upperRoman' // I, II, III, ...\n | 'lowerLetter' // a, b, c, ...\n | 'upperLetter' // A, B, C, ...\n | 'ordinal' // 1st, 2nd, 3rd, ...\n | 'cardinalText' // One, Two, Three, ...\n | 'ordinalText' // First, Second, Third, ...\n | 'hex' // 0x01, 0x02, ...\n | 'chicago' // *, †, ‡, §, ...\n | 'decimal zero'; // 01, 02, 03, ...\n\n/**\n * Alignment for the numbering text\n */\nexport type NumberAlignment = 'left' | 'center' | 'right' | 'start' | 'end';\n\n/**\n * Properties for creating a numbering level\n */\nexport interface NumberingLevelProperties {\n /** The level index (0-8, where 0 is the outermost level) */\n level: number;\n\n /** The numbering format */\n format: NumberFormat;\n\n /** The text template (e.g., \"%1.\" for decimal, \"•\" for bullet) */\n text: string;\n\n /** Alignment of the numbering text */\n alignment?: NumberAlignment;\n\n /** Starting value (for numeric formats, default: 1) */\n start?: number;\n\n /** Left indentation in twips (can be negative for outdents into margin) */\n leftIndent?: number;\n\n /** Hanging indentation in twips (for the text after the number) */\n hangingIndent?: number;\n\n /** Font family for the numbering character (useful for bullets) */\n font?: string;\n\n /** Font size in half-points (e.g., 22 = 11pt) */\n fontSize?: number;\n\n /** Whether to show text after the number (default: true) */\n isLegalNumberingStyle?: boolean;\n\n /** Suffix after the number (tab, space, or nothing) */\n suffix?: 'tab' | 'space' | 'nothing';\n\n /** Text color in hex (without #) */\n color?: string;\n\n /** Whether the numbering text is bold */\n bold?: boolean;\n\n /** Whether the numbering text is italic */\n italic?: boolean;\n\n /** Underline style for numbering text ('single', 'double', 'wave', 'dotted', 'dash', etc.) */\n underline?: string;\n\n /**\n * Level at which numbering should restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n * Specifies when to restart this level's numbering based on a higher-level change:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined (default): Restart when level-1 changes (standard behavior)\n */\n lvlRestart?: number;\n\n /** Paragraph style ID linked to this numbering level (w:pStyle per ECMA-376 §17.9.23) */\n pStyle?: string;\n\n /**\n * Tentative level flag (w:tentative per ECMA-376 §17.9.29).\n * When true, the level is present in the definition but not displayed by\n * default — Word uses this for the unused upper levels of a hybrid\n * multilevel list so they can be offered in the list picker without\n * polluting the visible outline. `undefined` / `false` = non-tentative.\n */\n tentative?: boolean;\n\n /**\n * Template code (w:tplc per ECMA-376 §17.9.30) — ST_ShortHexNumber.\n * An 8-character hex string Word uses to identify the level template so\n * that sibling list definitions across documents can recognise each\n * other. Preserved verbatim for round-trip fidelity.\n */\n tplc?: string;\n\n /**\n * Picture bullet reference (w:lvlPicBulletId per ECMA-376 §17.9.15) —\n * numeric ID of a `<w:numPicBullet>` definition elsewhere in\n * numbering.xml. When set, the level renders its bullet as the linked\n * picture. MUST be parsed and round-tripped or `removeOrphanedNumPicBullets`\n * will treat every `<w:numPicBullet>` as unreferenced and delete them on save.\n */\n lvlPicBulletId?: number;\n\n /**\n * Legacy Word 97-style numbering state (`<w:legacy>` per ECMA-376 §17.9.10).\n * Preserved on levels imported from documents that record legacy rendering\n * information — losing this can shift the level's indentation and bullet/\n * number spacing to Word's modern defaults on round-trip.\n */\n legacy?: LegacyNumbering;\n}\n\n/**\n * CT_LvlLegacy (ECMA-376 §17.9.10) — carries Word 97 compatibility numbering.\n * All three attributes are independently optional; presence of the element\n * without any attributes is a valid placeholder Word emits in some cases.\n */\nexport interface LegacyNumbering {\n /** w:legacy — ST_OnOff. Whether to render this level with legacy rules. */\n legacy?: boolean;\n /** w:legacySpace — ST_TwipsMeasure (non-negative). Space after the number. */\n legacySpace?: number;\n /** w:legacyIndent — ST_SignedTwipsMeasure. Indent (can be negative). */\n legacyIndent?: number;\n}\n\n/**\n * Represents a single level in a numbering definition\n */\nexport class NumberingLevel {\n private properties: Required<\n Omit<\n NumberingLevelProperties,\n | 'fontSize'\n | 'color'\n | 'lvlRestart'\n | 'underline'\n | 'pStyle'\n | 'tentative'\n | 'tplc'\n | 'lvlPicBulletId'\n | 'legacy'\n >\n > &\n Pick<\n NumberingLevelProperties,\n | 'fontSize'\n | 'color'\n | 'lvlRestart'\n | 'underline'\n | 'pStyle'\n | 'tentative'\n | 'tplc'\n | 'lvlPicBulletId'\n | 'legacy'\n >;\n\n /**\n * Creates a new numbering level\n * @param properties The level properties\n */\n constructor(properties: NumberingLevelProperties) {\n // Set defaults\n this.properties = {\n level: properties.level,\n format: properties.format,\n text: properties.text,\n alignment: properties.alignment || 'left',\n start: properties.start !== undefined ? properties.start : 1,\n leftIndent:\n properties.leftIndent !== undefined ? properties.leftIndent : 720 + properties.level * 360,\n hangingIndent: properties.hangingIndent !== undefined ? properties.hangingIndent : 360,\n font: properties.font || 'Calibri',\n // undefined = inherit per ECMA-376 (absent w:sz/w:color rPr child);\n // forcing defaults here would inject explicit size/color into\n // re-serialized levels that the source document never specified\n fontSize: properties.fontSize,\n isLegalNumberingStyle:\n properties.isLegalNumberingStyle !== undefined ? properties.isLegalNumberingStyle : false,\n suffix: properties.suffix || 'tab',\n color: properties.color,\n bold: properties.bold !== undefined ? properties.bold : false,\n italic: properties.italic !== undefined ? properties.italic : false,\n underline: properties.underline,\n lvlRestart: properties.lvlRestart, // undefined means default behavior (restart on level-1 change)\n pStyle: properties.pStyle,\n // Explicit false differs from undefined only at serialization time;\n // both collapse to \"not tentative\" semantically.\n tentative: properties.tentative,\n tplc: properties.tplc,\n lvlPicBulletId: properties.lvlPicBulletId,\n legacy: properties.legacy,\n };\n\n this.validate();\n }\n\n /**\n * Validates the level properties\n */\n private validate(): void {\n if (this.properties.level < 0 || this.properties.level > 8) {\n throw new Error(`Level must be between 0 and 8, got ${this.properties.level}`);\n }\n\n // Note: leftIndent CAN be negative (outdent into margin) per ECMA-376\n // This is valid and used for hanging indents where bullets appear in margin\n\n if (this.properties.hangingIndent < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n\n if (this.properties.start < 0) {\n throw new Error('Start value must be non-negative');\n }\n }\n\n /**\n * Calculates safe indentation values for a given level based on page constraints.\n *\n * Use this instead of default indentation when working with narrow pages or\n * deep nesting levels to ensure content stays within page margins.\n *\n * @param level The level index (0-8)\n * @param pageWidthTwips Page width in twips (default: 12240 = 8.5 inches)\n * @param leftMarginTwips Left margin in twips (default: 1440 = 1 inch)\n * @param rightMarginTwips Right margin in twips (default: 1440 = 1 inch)\n * @param minContentWidth Minimum content width in twips (default: 2880 = 2 inches)\n * @returns Safe indentation values that won't exceed available space\n *\n * @example\n * ```typescript\n * // For a narrow page (6\" wide with 0.5\" margins)\n * const indent = NumberingLevel.calculateSafeIndentation(\n * 5, // level 5\n * 8640, // 6 inches page width\n * 720, // 0.5 inch left margin\n * 720 // 0.5 inch right margin\n * );\n * ```\n */\n static calculateSafeIndentation(\n level: number,\n pageWidthTwips = 12240,\n leftMarginTwips = 1440,\n rightMarginTwips = 1440,\n minContentWidth = 2880\n ): { leftIndent: number; hangingIndent: number } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n // Calculate available content width\n const availableWidth = pageWidthTwips - leftMarginTwips - rightMarginTwips;\n\n // Calculate max safe indent (leave space for content)\n const maxSafeIndent = Math.max(0, availableWidth - minContentWidth);\n\n // Standard indentation\n const standardLeftIndent = 720 + level * 360;\n const hangingIndent = 360;\n\n // Cap at safe maximum\n const safeLeftIndent = Math.min(standardLeftIndent, maxSafeIndent);\n\n return {\n leftIndent: safeLeftIndent,\n hangingIndent,\n };\n }\n\n /**\n * Gets the level index\n */\n getLevel(): number {\n return this.properties.level;\n }\n\n /**\n * Gets the numbering format\n */\n getFormat(): NumberFormat {\n return this.properties.format;\n }\n\n /**\n * Gets the level properties\n */\n getProperties(): Required<\n Omit<\n NumberingLevelProperties,\n | 'fontSize'\n | 'color'\n | 'lvlRestart'\n | 'underline'\n | 'pStyle'\n | 'tentative'\n | 'tplc'\n | 'lvlPicBulletId'\n | 'legacy'\n >\n > &\n Pick<\n NumberingLevelProperties,\n | 'fontSize'\n | 'color'\n | 'lvlRestart'\n | 'underline'\n | 'pStyle'\n | 'tentative'\n | 'tplc'\n | 'lvlPicBulletId'\n | 'legacy'\n > {\n return { ...this.properties };\n }\n\n /**\n * Sets the left indentation\n * @param twips Indentation in twips\n */\n setLeftIndent(twips: number): this {\n // Note: Negative values are valid (outdent into margin) per ECMA-376\n this.properties.leftIndent = twips;\n return this;\n }\n\n /**\n * Sets the hanging indentation\n * @param twips Indentation in twips\n */\n setHangingIndent(twips: number): this {\n if (twips < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n this.properties.hangingIndent = twips;\n return this;\n }\n\n /**\n * Sets the font for the numbering character\n * @param font Font family name\n */\n setFont(font: string): this {\n this.properties.font = font;\n return this;\n }\n\n /**\n * Sets the alignment\n * @param alignment Alignment type\n */\n setAlignment(alignment: NumberAlignment): this {\n this.properties.alignment = alignment;\n return this;\n }\n\n /**\n * Sets the font size in half-points\n * @param halfPoints Font size in half-points (e.g., 24 = 12pt)\n */\n setFontSize(halfPoints: number): this {\n this.properties.fontSize = halfPoints;\n return this;\n }\n\n /**\n * Sets the level text (bullet character or number template)\n * @param text The text template (e.g., '•' for bullets, '%1.' for numbered)\n */\n setText(text: string): this {\n this.properties.text = text;\n return this;\n }\n\n /**\n * Sets the text color\n * @param color Hex color without # (e.g., '000000' for black)\n */\n setColor(color: string): this {\n this.properties.color = color;\n return this;\n }\n\n /**\n * Sets whether the numbering text is bold\n * @param bold Whether to make bold\n */\n setBold(bold: boolean): this {\n this.properties.bold = bold;\n return this;\n }\n\n /**\n * Sets whether the numbering text is italic\n * @param italic Whether to make italic\n */\n setItalic(italic: boolean): this {\n this.properties.italic = italic;\n return this;\n }\n\n /**\n * Gets whether the numbering text is italic\n */\n getItalic(): boolean {\n return this.properties.italic ?? false;\n }\n\n /**\n * Sets the underline style for numbering text\n * @param style Underline style ('single', 'double', 'wave', 'dotted', 'dash', etc.)\n */\n setUnderline(style: string | undefined): this {\n this.properties.underline = style;\n return this;\n }\n\n /**\n * Gets the underline style\n */\n getUnderline(): string | undefined {\n return this.properties.underline;\n }\n\n /**\n * Clears the underline style\n */\n clearUnderline(): this {\n this.properties.underline = undefined;\n return this;\n }\n\n /**\n * Sets the level restart behavior (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n *\n * Controls when this level's numbering restarts based on higher-level changes:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined: Restart when level-1 changes (standard/default behavior)\n *\n * @param level The level that triggers restart (0-8), or undefined for default\n * @example\n * // Level 1 that never restarts (continuous across document)\n * level1.setLvlRestart(0);\n *\n * // Level 2 that restarts when level 0 changes (not level 1)\n * level2.setLvlRestart(0);\n */\n setLvlRestart(level: number | undefined): this {\n if (level !== undefined && (level < 0 || level > 8)) {\n throw new Error(`lvlRestart must be between 0 and 8, got ${level}`);\n }\n this.properties.lvlRestart = level;\n return this;\n }\n\n /**\n * Gets the level restart value\n * @returns The level that triggers restart, or undefined for default behavior\n */\n getLvlRestart(): number | undefined {\n return this.properties.lvlRestart;\n }\n\n /**\n * Sets the paragraph style ID linked to this numbering level\n * Links this level to a paragraph style definition (w:pStyle per ECMA-376 §17.9.23)\n * @param styleId The paragraph style ID\n */\n setParagraphStyle(styleId: string): this {\n this.properties.pStyle = styleId;\n return this;\n }\n\n /**\n * Gets the paragraph style ID linked to this numbering level\n */\n getParagraphStyle(): string | undefined {\n return this.properties.pStyle;\n }\n\n /**\n * Sets the numbering format (decimal, lowerLetter, bullet, etc.)\n * @param format The numbering format\n */\n setFormat(format: NumberFormat): this {\n this.properties.format = NumberingLevel.normalizeFormat(format);\n return this;\n }\n\n /**\n * Normalizes display-string format values to ECMA-376 ST_NumberFormat names.\n * Accepts both standard format names and common display shortcuts.\n */\n static normalizeFormat(format: string): NumberFormat {\n const corrections: Record<string, NumberFormat> = {\n 'a.': 'lowerLetter',\n 'A.': 'upperLetter',\n 'i.': 'lowerRoman',\n 'I.': 'upperRoman',\n '1.': 'decimal',\n };\n return (corrections[format] ?? format) as NumberFormat;\n }\n\n /**\n * Generates the WordprocessingML XML for this level\n */\n toXML(): XMLElement {\n // ECMA-376 CT_Lvl element order (§17.9.6):\n // start, numFmt, lvlRestart, pStyle, isLgl, suff, lvlText, lvlPicBulletId, legacy, lvlJc, pPr, rPr\n const children: XMLElement[] = [];\n\n // 1. Start value\n children.push(XMLBuilder.wSelf('start', { 'w:val': this.properties.start.toString() }));\n\n // 2. Number format\n children.push(XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.format }));\n\n // 3. Level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n if (this.properties.lvlRestart !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlRestart', { 'w:val': this.properties.lvlRestart.toString() })\n );\n }\n\n // 4. pStyle (paragraph style link)\n if (this.properties.pStyle) {\n children.push(XMLBuilder.wSelf('pStyle', { 'w:val': this.properties.pStyle }));\n }\n\n // 5. Legal numbering style\n if (this.properties.isLegalNumberingStyle) {\n children.push(XMLBuilder.wSelf('isLgl'));\n }\n\n // 6. Suffix (what comes after the number)\n if (this.properties.suffix) {\n children.push(XMLBuilder.wSelf('suff', { 'w:val': this.properties.suffix }));\n }\n\n // 7. Level text (e.g., \"%1.\" or \"•\")\n children.push(XMLBuilder.wSelf('lvlText', { 'w:val': this.properties.text }));\n\n // 7a. Picture bullet reference (w:lvlPicBulletId per §17.9.15). CT_Lvl order\n // places this AFTER lvlText and BEFORE lvlJc. Must be emitted so that\n // orphan-cleanup of <w:numPicBullet> doesn't delete the referenced bullet.\n if (this.properties.lvlPicBulletId !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlPicBulletId', {\n 'w:val': this.properties.lvlPicBulletId.toString(),\n })\n );\n }\n\n // 7b. Legacy numbering state (w:legacy per §17.9.10). CT_Lvl order places\n // this AFTER lvlPicBulletId and BEFORE lvlJc. Emit every attribute that\n // is explicitly set; omit when legacy is undefined entirely.\n if (this.properties.legacy) {\n const legacyAttrs: Record<string, string> = {};\n if (this.properties.legacy.legacy !== undefined) {\n legacyAttrs['w:legacy'] = this.properties.legacy.legacy ? '1' : '0';\n }\n if (this.properties.legacy.legacySpace !== undefined) {\n legacyAttrs['w:legacySpace'] = this.properties.legacy.legacySpace.toString();\n }\n if (this.properties.legacy.legacyIndent !== undefined) {\n legacyAttrs['w:legacyIndent'] = this.properties.legacy.legacyIndent.toString();\n }\n children.push(XMLBuilder.wSelf('legacy', legacyAttrs));\n }\n\n // 8. Alignment\n children.push(XMLBuilder.wSelf('lvlJc', { 'w:val': this.properties.alignment }));\n\n // 9. Paragraph properties (indentation)\n const ind = XMLBuilder.wSelf('ind', {\n 'w:left': this.properties.leftIndent.toString(),\n 'w:hanging': this.properties.hangingIndent.toString(),\n });\n const pPr = XMLBuilder.w('pPr', undefined, [ind]);\n children.push(pPr);\n\n // 10. Run properties (font)\n const rPrChildren: XMLElement[] = [];\n\n // Font\n rPrChildren.push(\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': this.properties.font,\n 'w:hAnsi': this.properties.font,\n 'w:cs': this.properties.font,\n 'w:hint': 'default',\n })\n );\n\n // Bold\n if (this.properties.bold) {\n rPrChildren.push(XMLBuilder.wSelf('b'));\n rPrChildren.push(XMLBuilder.wSelf('bCs'));\n }\n\n // Italic\n if (this.properties.italic) {\n rPrChildren.push(XMLBuilder.wSelf('i'));\n rPrChildren.push(XMLBuilder.wSelf('iCs'));\n }\n\n // CT_RPr element order per ECMA-376 §17.3.2.28:\n // ... b, bCs, i, iCs, ... color (#19), ... sz (#24), szCs (#25), ... u (#27)\n\n // Color (#19)\n if (this.properties.color !== undefined) {\n rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.properties.color }));\n }\n\n // Font size (#24, #25) — omit when unset so the level inherits size\n if (this.properties.fontSize !== undefined) {\n rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));\n rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));\n }\n\n // Underline (#27)\n if (this.properties.underline) {\n rPrChildren.push(XMLBuilder.wSelf('u', { 'w:val': this.properties.underline }));\n }\n\n const rPr = XMLBuilder.w('rPr', undefined, rPrChildren);\n children.push(rPr);\n\n // <w:lvl> opening attributes: w:ilvl (required), plus optional w:tplc\n // (template code, §17.9.30) and w:tentative (§17.9.29). w:tentative and\n // w:tplc were both silently dropped on parse before this — so neither\n // could ever be regenerated on save.\n const lvlAttrs: Record<string, string> = { 'w:ilvl': this.properties.level.toString() };\n if (this.properties.tplc) {\n lvlAttrs['w:tplc'] = this.properties.tplc;\n }\n if (this.properties.tentative) {\n lvlAttrs['w:tentative'] = '1';\n }\n return XMLBuilder.w('lvl', lvlAttrs, children);\n }\n\n /**\n * Gets the recommended bullet symbol and font for a given level\n * @param level The level index (0-8)\n * @param style Optional bullet style ('standard', 'circle', 'square', 'arrow', 'check', 'word-native')\n * @returns Object with symbol and font properties\n */\n static getBulletSymbolWithFont(\n level: number,\n style: 'standard' | 'circle' | 'square' | 'arrow' | 'check' | 'word-native' = 'standard'\n ): { symbol: string; font: string } {\n const bulletSets = {\n // Standard style now uses Word-native encoding for maximum compatibility\n standard: [\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n circle: [\n { symbol: '●', font: 'Calibri' }, // Level 0: Filled circle (bold)\n { symbol: '○', font: 'Calibri' }, // Level 1: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 2: Fisheye\n { symbol: '◯', font: 'Calibri' }, // Level 3: Large circle\n { symbol: '⦿', font: 'Calibri' }, // Level 4: Circled bullet\n { symbol: '○', font: 'Calibri' }, // Level 5: Empty circle\n { symbol: '●', font: 'Calibri' }, // Level 6: Filled circle\n { symbol: '○', font: 'Calibri' }, // Level 7: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 8: Fisheye\n ],\n square: [\n { symbol: '■', font: 'Calibri' }, // Level 0: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 1: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 2: Small filled square\n { symbol: '▫', font: 'Calibri' }, // Level 3: Small empty square\n { symbol: '◼', font: 'Calibri' }, // Level 4: Medium filled square\n { symbol: '◻', font: 'Calibri' }, // Level 5: Medium empty square\n { symbol: '■', font: 'Calibri' }, // Level 6: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 7: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 8: Small filled square\n ],\n arrow: [\n { symbol: '➢', font: 'Calibri' }, // Level 0: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 1: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 2: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 3: Right arrow simple\n { symbol: '➜', font: 'Calibri' }, // Level 4: Right arrow outline\n { symbol: '➢', font: 'Calibri' }, // Level 5: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 6: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 7: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 8: Right arrow simple\n ],\n check: [\n { symbol: '✓', font: 'Calibri' }, // Level 0: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 1: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 2: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 3: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 4: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 5: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 6: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 7: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 8: Checked box\n ],\n 'word-native': [\n // Word-native bullets using PUA characters with Symbol/Wingdings fonts\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n };\n\n const selectedSet = bulletSets[style];\n const levelIndex = level % selectedSet.length;\n const result = selectedSet[levelIndex];\n\n // Fallback to standard bullet if somehow undefined\n return result || { symbol: '•', font: 'Calibri' };\n }\n\n /**\n * Calculates the standard indentation values for a given level\n * @param level The level index (0-8)\n * @returns Object with leftIndent and hangingIndent in twips\n * @example\n * const indent = NumberingLevel.calculateStandardIndentation(0);\n * // Returns: { leftIndent: 720, hangingIndent: 360 } (0.5\" left, 0.25\" hanging)\n *\n * const indent2 = NumberingLevel.calculateStandardIndentation(2);\n * // Returns: { leftIndent: 1440, hangingIndent: 360 } (1.0\" left, 0.25\" hanging)\n */\n static calculateStandardIndentation(level: number): {\n leftIndent: number;\n hangingIndent: number;\n } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n return {\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n };\n }\n\n /**\n * Gets the standard number format for a given level\n * @param level The level index (0-8)\n * @returns The recommended number format for this level\n * @example\n * NumberingLevel.getStandardNumberFormat(0); // 'decimal' (1., 2., 3.)\n * NumberingLevel.getStandardNumberFormat(1); // 'lowerLetter' (a., b., c.)\n * NumberingLevel.getStandardNumberFormat(2); // 'lowerRoman' (i., ii., iii.)\n * NumberingLevel.getStandardNumberFormat(3); // 'upperLetter' (A., B., C.)\n * NumberingLevel.getStandardNumberFormat(4); // 'upperRoman' (I., II., III.)\n */\n static getStandardNumberFormat(level: number): NumberFormat {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n const formats: NumberFormat[] = [\n 'decimal', // Level 0: 1., 2., 3.\n 'lowerLetter', // Level 1: a., b., c.\n 'lowerRoman', // Level 2: i., ii., iii.\n 'upperLetter', // Level 3: A., B., C.\n 'upperRoman', // Level 4: I., II., III.\n ];\n\n const result = formats[level % formats.length];\n return result || 'decimal'; // Fallback to decimal (should never happen)\n }\n\n /**\n * Creates a bullet list level\n *\n * When called without parameters, uses Word-native encoding for the level:\n * - Levels 0, 3, 6: Filled bullet (Symbol font, U+F0B7)\n * - Levels 1, 4, 7: Open circle (Courier New, U+006F)\n * - Levels 2, 5, 8: Filled square (Wingdings, U+F0A7)\n *\n * @param level The level index (0-8)\n * @param bullet Optional bullet character (defaults to Word-native for level)\n * @param font Optional font to use for the bullet (defaults to Word-native for level)\n */\n static createBulletLevel(level: number, bullet?: string, font?: string): NumberingLevel {\n // Use Word-native defaults when not specified\n const defaults = NumberingLevel.getBulletSymbolWithFont(level, 'standard');\n const actualBullet = bullet ?? defaults.symbol;\n const actualFont = font ?? defaults.font;\n\n return new NumberingLevel({\n level,\n format: 'bullet',\n text: actualBullet,\n alignment: 'left',\n font: actualFont,\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a decimal list level (1, 2, 3, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createDecimalLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'decimal',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower roman list level (i, ii, iii, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper roman list level (I, II, III, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower letter list level (a, b, c, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper letter list level (A, B, C, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Factory method for creating a numbering level\n * @param properties The level properties\n */\n static create(properties: NumberingLevelProperties): NumberingLevel {\n return new NumberingLevel(properties);\n }\n\n /**\n * Creates a NumberingLevel from XML element\n * @param xml The XML string of the <w:lvl> element\n * @returns NumberingLevel instance\n */\n static fromXML(xml: string): NumberingLevel {\n // Extract level index (required)\n const ilvlMatch = /<w:lvl[^>]*w:ilvl=\"([^\"]+)\"/.exec(xml);\n if (!ilvlMatch?.[1]) {\n throw new Error('Missing required w:ilvl attribute');\n }\n const level = parseInt(ilvlMatch[1], 10);\n\n // Extract attributes from the <w:lvl> opening tag specifically. Restrict\n // the regexes to the substring before the first `>` so they can't stray\n // onto a child element that happens to also carry a similarly-named attr.\n let tentative: boolean | undefined;\n let tplc: string | undefined;\n const lvlOpenEnd = xml.indexOf('>');\n if (lvlOpenEnd !== -1) {\n const lvlOpenTag = xml.substring(0, lvlOpenEnd);\n // w:tentative per ECMA-376 §17.9.29 — ST_OnOff.\n const tentativeMatch = /w:tentative\\s*=\\s*\"([^\"]*)\"/.exec(lvlOpenTag);\n if (tentativeMatch?.[1] !== undefined) {\n tentative = parseOnOffAttribute(tentativeMatch[1]);\n }\n // w:tplc per ECMA-376 §17.9.30 — ST_ShortHexNumber (8-char hex).\n const tplcMatch = /w:tplc\\s*=\\s*\"([^\"]*)\"/.exec(lvlOpenTag);\n if (tplcMatch?.[1]) {\n tplc = tplcMatch[1];\n }\n }\n\n // Extract w:lvlPicBulletId child element per ECMA-376 §17.9.15.\n // Zero is a valid ID, so use explicit check instead of truthy coercion.\n let lvlPicBulletId: number | undefined;\n const picBulletMatch = /<w:lvlPicBulletId\\s[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (picBulletMatch?.[1] !== undefined) {\n const parsed = parseInt(picBulletMatch[1], 10);\n if (!isNaN(parsed)) {\n lvlPicBulletId = parsed;\n }\n }\n\n // Extract <w:legacy> child per ECMA-376 §17.9.10. All three attributes are\n // independently optional; the element itself may be bare (a valid Word\n // placeholder). Presence of the tag at all means the level has legacy state\n // the source author wanted preserved, so we must emit it back on save even\n // if no attributes are set.\n let legacy: LegacyNumbering | undefined;\n const legacyMatch = /<w:legacy\\b([^>]*)\\/?>/.exec(xml);\n if (legacyMatch) {\n const attrs = legacyMatch[1] ?? '';\n legacy = {};\n const legacyValMatch = /\\bw:legacy\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (legacyValMatch?.[1] !== undefined) {\n legacy.legacy = parseOnOffAttribute(legacyValMatch[1]);\n }\n const spaceMatch = /\\bw:legacySpace\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (spaceMatch?.[1] !== undefined) {\n const parsed = parseInt(spaceMatch[1], 10);\n if (!isNaN(parsed)) legacy.legacySpace = parsed;\n }\n const indentMatch = /\\bw:legacyIndent\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (indentMatch?.[1] !== undefined) {\n const parsed = parseInt(indentMatch[1], 10);\n if (!isNaN(parsed)) legacy.legacyIndent = parsed;\n }\n }\n\n // Extract number format (required)\n const numFmtMatch = /<w:numFmt[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (!numFmtMatch?.[1]) {\n throw new Error('Missing required w:numFmt element');\n }\n const format = NumberingLevel.normalizeFormat(numFmtMatch[1]);\n\n // Extract level text (optional - can be empty for placeholder levels)\n const lvlTextMatch = /<w:lvlText[^>]*w:val=\"([^\"]*)\"/.exec(xml);\n const text = lvlTextMatch?.[1] !== undefined ? lvlTextMatch[1] : '';\n\n // Extract alignment (optional, default: left)\n const lvlJcMatch = /<w:lvlJc[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const alignment = (lvlJcMatch?.[1] ? lvlJcMatch[1] : 'left') as NumberAlignment;\n\n // Extract start value (optional, default: 1)\n const startMatch = /<w:start[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const start = startMatch?.[1] ? parseInt(startMatch[1], 10) : 1;\n\n // Extract suffix (optional, default: tab)\n const suffixMatch = /<w:suff[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const suffix = suffixMatch?.[1] ? (suffixMatch[1] as 'tab' | 'space' | 'nothing') : 'tab';\n\n // Extract level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n let lvlRestart: number | undefined;\n const lvlRestartMatch = /<w:lvlRestart[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (lvlRestartMatch?.[1]) {\n lvlRestart = parseInt(lvlRestartMatch[1], 10);\n }\n\n // Extract pStyle (paragraph style link)\n let pStyle: string | undefined;\n const pStyleMatch = /<w:pStyle[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (pStyleMatch?.[1]) {\n pStyle = pStyleMatch[1];\n }\n\n // Extract w:isLgl (legal numbering style) per ECMA-376 §17.9.4 — CT_OnOff.\n // Previously not parsed at all, so a source document's `<w:isLgl/>` was\n // silently dropped on load and the level reverted to non-legal formatting\n // on any round-trip through docxmlater.\n let isLegalNumberingStyle: boolean | undefined;\n const isLglMatch = /<w:isLgl\\b([^>]*)\\/?>/.exec(xml);\n if (isLglMatch) {\n const attrs = isLglMatch[1] ?? '';\n const valMatch = /w:val\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n isLegalNumberingStyle = valMatch?.[1] !== undefined ? parseOnOffAttribute(valMatch[1]) : true;\n }\n\n // Extract indentation from <w:pPr><w:ind> per ECMA-376 §17.3.1.12\n // CT_Ind. Both legacy LTR attrs (w:left / w:right) and bidi-aware\n // aliases (w:start / w:end) are valid; Word commonly emits the\n // bidi-aware form on modern documents. The previous regex read only\n // w:left / w:hanging, losing the numbering-level indent entirely on\n // any list authored or edited by a bidi-aware tool.\n //\n // The `[^>]*>` pattern (rather than `[^>]*\\/>`) also captures the\n // less-common non-self-closing form (`<w:ind …></w:ind>`).\n let leftIndent = 720 + level * 360; // default\n let hangingIndent = 360; // default\n const indMatch = /<w:ind\\b[^>]*>/.exec(xml);\n if (indMatch) {\n const indElement = indMatch[0];\n const leftMatch =\n /\\bw:start\\s*=\\s*\"([^\"]+)\"/.exec(indElement) || /\\bw:left\\s*=\\s*\"([^\"]+)\"/.exec(indElement);\n const hangingMatch = /\\bw:hanging\\s*=\\s*\"([^\"]+)\"/.exec(indElement);\n\n if (leftMatch?.[1]) leftIndent = parseInt(leftMatch[1], 10);\n if (hangingMatch?.[1]) hangingIndent = parseInt(hangingMatch[1], 10);\n }\n\n // Extract font and size from <w:rPr>. An absent w:sz means the level\n // inherits its size — keep it undefined so toXML doesn't fabricate one.\n let font = 'Calibri';\n let fontSize: number | undefined;\n\n const rFontsMatch = /<w:rFonts[^>]*\\/>/.exec(xml);\n if (rFontsMatch) {\n const rFontsElement = rFontsMatch[0];\n const asciiMatch = /w:ascii=\"([^\"]+)\"/.exec(rFontsElement);\n if (asciiMatch?.[1]) font = asciiMatch[1];\n }\n\n const szMatch = /<w:sz[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (szMatch?.[1]) fontSize = parseInt(szMatch[1], 10);\n\n // List prefixes should never have bold, italic, or underline - ignore source XML formatting\n const bold = false;\n const italic = false;\n const underline: string | undefined = undefined;\n\n // Extract color from <w:rPr>\n let color: string | undefined;\n const colorMatch = /<w:color[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (colorMatch?.[1]) {\n color = colorMatch[1];\n }\n\n return new NumberingLevel({\n level,\n format,\n text,\n alignment,\n start,\n leftIndent,\n hangingIndent,\n font,\n fontSize,\n suffix,\n bold,\n italic,\n underline,\n color,\n lvlRestart,\n pStyle,\n isLegalNumberingStyle,\n tentative,\n tplc,\n lvlPicBulletId,\n legacy,\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NumberingManager.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NumberingManager.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingManager.ts"],"names":[],"mappings":"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"}