docxmlater 11.0.10 → 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 +427 -81
  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 +427 -81
  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 +681 -114
  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":"TextBox.js","sourceRoot":"","sources":["../../../src/elements/TextBox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TextBox - Represents a floating text box in a Word document\n *\n * Text boxes use DrawingML (a:) and WordprocessingML Drawing (wp:) namespaces,\n * plus WordprocessingShape (wps:) namespace for Word 2010+ features.\n *\n * Per ECMA-376 Part 4 (Transitional) and Office Open XML extensions,\n * text boxes in Word documents use the wps:wsp element with wps:txbx content.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\nimport { UNITS } from '../utils/units.js';\nimport { Paragraph } from './Paragraph.js';\nimport {\n ImagePosition,\n ImageAnchor,\n PositionAnchor,\n HorizontalAlignment,\n VerticalAlignment,\n} from './Image.js';\nimport { BorderDefinition } from './Paragraph.js';\n\n/**\n * TextBox margins configuration\n */\nexport interface TextBoxMargins {\n /** Top margin in EMUs */\n top: number;\n /** Bottom margin in EMUs */\n bottom: number;\n /** Left margin in EMUs */\n left: number;\n /** Right margin in EMUs */\n right: number;\n}\n\n/**\n * TextBox fill configuration\n */\nexport interface TextBoxFill {\n /** Fill color in hex (e.g., 'F0F0F0') */\n color: string;\n /** Transparency percentage (0-100) */\n transparency?: number;\n}\n\n/**\n * TextBox properties\n */\nexport interface TextBoxProperties {\n /** Width in EMUs */\n width: number;\n /** Height in EMUs */\n height: number;\n /** Paragraphs within the text box */\n paragraphs?: Paragraph[];\n /** Position configuration */\n position?: ImagePosition;\n /** Anchor configuration */\n anchor?: ImageAnchor;\n /** Fill color and transparency */\n fill?: TextBoxFill;\n /** Border configuration */\n borders?: BorderDefinition;\n /** Internal margins */\n margins?: TextBoxMargins;\n /** TextBox name */\n name?: string;\n /** TextBox description (for accessibility) */\n description?: string;\n}\n\n/**\n * Represents a floating text box\n */\nexport class TextBox {\n private width: number;\n private height: number;\n private paragraphs: Paragraph[] = [];\n private position?: ImagePosition;\n private anchor?: ImageAnchor;\n private fill?: TextBoxFill;\n private borders?: BorderDefinition;\n private margins?: TextBoxMargins;\n private name: string;\n private description: string;\n private docPrId = 1;\n\n /**\n * Creates a new text box\n * @param properties TextBox properties\n * @private Use static factory methods instead (create)\n */\n private constructor(properties: TextBoxProperties) {\n this.width = properties.width;\n this.height = properties.height;\n if (properties.paragraphs) {\n this.paragraphs = properties.paragraphs;\n }\n this.position = properties.position;\n this.anchor = properties.anchor;\n this.fill = properties.fill;\n this.borders = properties.borders;\n this.margins = properties.margins;\n this.name = properties.name || 'TextBox';\n this.description = properties.description || '';\n }\n\n /**\n * Factory method for creating a text box\n * @param width Width in EMUs\n * @param height Height in EMUs\n * @returns New TextBox instance\n * @example\n * const textbox = TextBox.create(inchesToEmus(3), inchesToEmus(2));\n */\n static create(width: number, height: number): TextBox {\n return new TextBox({ width, height });\n }\n\n /**\n * Gets the width in EMUs\n * @returns Width\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Gets the height in EMUs\n * @returns Height\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Adds a paragraph to the text box\n * @param paragraph Paragraph to add\n * @returns This text box for chaining\n */\n addParagraph(paragraph: Paragraph): this {\n this.paragraphs.push(paragraph);\n return this;\n }\n\n /**\n * Gets all paragraphs\n * @returns Array of paragraphs\n */\n getParagraphs(): Paragraph[] {\n return this.paragraphs;\n }\n\n /**\n * Sets text box position (for floating text boxes)\n * @param horizontal Horizontal positioning configuration\n * @param vertical Vertical positioning configuration\n * @returns This text box for chaining\n */\n setPosition(\n horizontal: { anchor: PositionAnchor; offset?: number; alignment?: HorizontalAlignment },\n vertical: { anchor: PositionAnchor; offset?: number; alignment?: VerticalAlignment }\n ): this {\n this.position = { horizontal, vertical };\n return this;\n }\n\n /**\n * Gets the position configuration\n * @returns Position or undefined\n */\n getPosition(): ImagePosition | undefined {\n return this.position;\n }\n\n /**\n * Sets anchor configuration\n * @param options Anchor configuration\n * @returns This text box for chaining\n */\n setAnchor(options: ImageAnchor): this {\n this.anchor = options;\n return this;\n }\n\n /**\n * Gets the anchor configuration\n * @returns Anchor configuration or undefined\n */\n getAnchor(): ImageAnchor | undefined {\n return this.anchor;\n }\n\n /**\n * Sets the fill color\n * @param color Fill color in hex\n * @param transparency Optional transparency percentage (0-100)\n * @returns This text box for chaining\n */\n setFill(color: string, transparency?: number): this {\n this.fill = { color, transparency };\n return this;\n }\n\n /**\n * Gets the fill configuration\n * @returns Fill or undefined\n */\n getFill(): TextBoxFill | undefined {\n return this.fill;\n }\n\n /**\n * Sets the borders\n * @param borders Border configuration\n * @returns This text box for chaining\n */\n setBorders(borders: BorderDefinition): this {\n this.borders = borders;\n return this;\n }\n\n /**\n * Gets the borders configuration\n * @returns Borders or undefined\n */\n getBorders(): BorderDefinition | undefined {\n return this.borders;\n }\n\n /**\n * Sets internal margins\n * @param margins Margin configuration\n * @returns This text box for chaining\n */\n setMargins(margins: TextBoxMargins): this {\n this.margins = margins;\n return this;\n }\n\n /**\n * Gets the margins configuration\n * @returns Margins or undefined\n */\n getMargins(): TextBoxMargins | undefined {\n return this.margins;\n }\n\n /**\n * Sets the text box name\n * @param name TextBox name\n * @returns This text box for chaining\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the text box name\n * @returns TextBox name\n */\n getName(): string {\n return this.name;\n }\n\n /**\n * Sets the text box description (for accessibility)\n * @param description TextBox description\n * @returns This text box for chaining\n */\n setDescription(description: string): this {\n this.description = description;\n return this;\n }\n\n /**\n * Gets the text box description\n * @returns TextBox description\n */\n getDescription(): string {\n return this.description;\n }\n\n /**\n * Sets the docPr ID (drawing object ID)\n * @param id Document property ID\n * @returns This text box for chaining\n */\n setDocPrId(id: number): this {\n this.docPrId = id;\n return this;\n }\n\n /**\n * Checks if this text box is floating (has anchor or position configuration)\n * @returns True if floating, false if inline\n */\n isFloating(): boolean {\n return this.anchor !== undefined || this.position !== undefined;\n }\n\n /**\n * Generates DrawingML XML for the text box\n * Creates either inline or floating (anchor) text box based on configuration\n * @returns XML element representing the text box\n */\n toXML(): XMLElement {\n // Text boxes are typically floating, but support inline as well\n const textboxElement = this.isFloating() ? this.createAnchor() : this.createInline();\n\n // Create the drawing structure\n return XMLBuilder.w('drawing', undefined, [textboxElement]);\n }\n\n /**\n * Creates the wp:inline element for inline text boxes\n * @private\n */\n private createInline(): XMLElement {\n const children: XMLElement[] = [];\n\n // Extent (size)\n children.push({\n name: 'wp:extent',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n });\n\n // Effect extent\n children.push({\n name: 'wp:effectExtent',\n attributes: {\n l: '0',\n t: '0',\n r: '0',\n b: '0',\n },\n selfClosing: true,\n });\n\n // Document properties\n children.push({\n name: 'wp:docPr',\n attributes: {\n id: this.docPrId.toString(),\n name: this.name,\n descr: this.description,\n },\n selfClosing: true,\n });\n\n // Non-visual graphic frame properties\n children.push({\n name: 'wp:cNvGraphicFramePr',\n selfClosing: true,\n });\n\n // Graphic data (the text box)\n children.push(this.createGraphic());\n\n return {\n name: 'wp:inline',\n attributes: {\n distT: '0',\n distB: '0',\n distL: '0',\n distR: '0',\n },\n children,\n };\n }\n\n /**\n * Creates the wp:anchor element for floating text boxes\n * @private\n */\n private createAnchor(): XMLElement {\n const children: XMLElement[] = [];\n\n const anchorConfig = this.anchor || {\n behindDoc: false,\n locked: false,\n layoutInCell: true,\n allowOverlap: false,\n relativeHeight: 251658240,\n };\n\n // Position H (horizontal)\n if (this.position) {\n const posH = this.position.horizontal;\n const posHChildren: XMLElement[] = [];\n\n if (posH.offset !== undefined) {\n posHChildren.push({\n name: 'wp:posOffset',\n children: [posH.offset.toString()],\n });\n } else if (posH.alignment) {\n posHChildren.push({\n name: 'wp:align',\n children: [posH.alignment],\n });\n }\n\n children.push({\n name: 'wp:positionH',\n attributes: {\n relativeFrom: posH.anchor,\n },\n children: posHChildren,\n });\n }\n\n // Position V (vertical)\n if (this.position) {\n const posV = this.position.vertical;\n const posVChildren: XMLElement[] = [];\n\n if (posV.offset !== undefined) {\n posVChildren.push({\n name: 'wp:posOffset',\n children: [posV.offset.toString()],\n });\n } else if (posV.alignment) {\n posVChildren.push({\n name: 'wp:align',\n children: [posV.alignment],\n });\n }\n\n children.push({\n name: 'wp:positionV',\n attributes: {\n relativeFrom: posV.anchor,\n },\n children: posVChildren,\n });\n }\n\n // Extent (size)\n children.push({\n name: 'wp:extent',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n });\n\n // Effect extent\n children.push({\n name: 'wp:effectExtent',\n attributes: {\n l: '0',\n t: '0',\n r: '0',\n b: '0',\n },\n selfClosing: true,\n });\n\n // Wrap square (default for text boxes)\n children.push({\n name: 'wp:wrapSquare',\n attributes: {\n wrapText: 'bothSides',\n },\n selfClosing: true,\n });\n\n // Document properties\n children.push({\n name: 'wp:docPr',\n attributes: {\n id: this.docPrId.toString(),\n name: this.name,\n descr: this.description,\n },\n selfClosing: true,\n });\n\n // Non-visual graphic frame properties\n children.push({\n name: 'wp:cNvGraphicFramePr',\n selfClosing: true,\n });\n\n // Graphic data (the text box)\n children.push(this.createGraphic());\n\n return {\n name: 'wp:anchor',\n attributes: {\n distT: '0',\n distB: '0',\n distL: '0',\n distR: '0',\n simplePos: '0',\n relativeHeight: anchorConfig.relativeHeight.toString(),\n behindDoc: anchorConfig.behindDoc ? '1' : '0',\n locked: anchorConfig.locked ? '1' : '0',\n layoutInCell: anchorConfig.layoutInCell ? '1' : '0',\n allowOverlap: anchorConfig.allowOverlap ? '1' : '0',\n },\n children,\n };\n }\n\n /**\n * Creates the a:graphic element containing the text box\n * @private\n */\n private createGraphic(): XMLElement {\n return {\n name: 'a:graphic',\n attributes: {\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n },\n children: [\n {\n name: 'a:graphicData',\n attributes: {\n uri: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n },\n children: [this.createWps()],\n },\n ],\n };\n }\n\n /**\n * Creates the wps:wsp element (WordprocessingShape for text box)\n * @private\n */\n private createWps(): XMLElement {\n const children: XMLElement[] = [];\n\n // Non-visual shape properties\n children.push({\n name: 'wps:cNvSpPr',\n attributes: {\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n txBox: '1', // Indicates this is a text box\n },\n selfClosing: true,\n });\n\n // Shape properties (size, fill, borders)\n children.push(this.createSpPr());\n\n // Text box content\n children.push(this.createTextBoxContent());\n\n // Body properties (margins/insets)\n children.push(this.createBodyPr());\n\n return {\n name: 'wps:wsp',\n attributes: {\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n },\n children,\n };\n }\n\n /**\n * Creates the wps:bodyPr element (text body properties including margins)\n * Per ECMA-376 Part 4, bodyPr specifies inset margins via lIns/tIns/rIns/bIns attributes\n * @private\n */\n private createBodyPr(): XMLElement {\n const attrs: Record<string, string> = {\n rot: '0',\n vert: 'horz',\n wrap: 'square',\n anchor: 't',\n };\n\n // Add margin insets if set\n if (this.margins) {\n if (this.margins.left !== undefined) attrs.lIns = this.margins.left.toString();\n if (this.margins.top !== undefined) attrs.tIns = this.margins.top.toString();\n if (this.margins.right !== undefined) attrs.rIns = this.margins.right.toString();\n if (this.margins.bottom !== undefined) attrs.bIns = this.margins.bottom.toString();\n }\n\n return {\n name: 'wps:bodyPr',\n attributes: attrs,\n selfClosing: true,\n };\n }\n\n /**\n * Creates the wps:spPr element (shape properties for text box)\n * @private\n */\n private createSpPr(): XMLElement {\n const children: XMLElement[] = [];\n\n // Transform (position and size)\n children.push({\n name: 'a:xfrm',\n children: [\n {\n name: 'a:off',\n attributes: { x: '0', y: '0' },\n selfClosing: true,\n },\n {\n name: 'a:ext',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Preset geometry (rectangle for text box)\n children.push({\n name: 'a:prstGeom',\n attributes: {\n prst: 'rect',\n },\n children: [\n {\n name: 'a:avLst',\n selfClosing: true,\n },\n ],\n });\n\n // Fill\n if (this.fill) {\n const fillChildren: XMLElement[] = [];\n\n // Transparency\n if (this.fill.transparency !== undefined) {\n const alpha = 100 - this.fill.transparency;\n fillChildren.push({\n name: 'a:alpha',\n attributes: {\n val: Math.round(alpha * 1000).toString(),\n },\n selfClosing: true,\n });\n }\n\n children.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: this.fill.color.toUpperCase(),\n },\n ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),\n },\n ],\n });\n } else {\n // No fill (transparent background)\n children.push({\n name: 'a:noFill',\n selfClosing: true,\n });\n }\n\n // Borders\n if (this.borders?.size !== undefined) {\n const lnAttrs: Record<string, string> = {\n w: (this.borders.size * UNITS.EMUS_PER_POINT).toString(), // Convert points to EMUs\n };\n\n const lnChildren: XMLElement[] = [];\n\n // Border color\n lnChildren.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: (this.borders.color || '000000').toUpperCase(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Border style\n if (this.borders.style && this.borders.style !== 'single') {\n const dashMap: Record<string, string> = {\n dash: 'dash',\n dot: 'dot',\n dashDot: 'dashDot',\n dashDotDot: 'lgDashDotDot',\n };\n const dashStyle = dashMap[this.borders.style] || 'solid';\n if (dashStyle !== 'solid') {\n lnChildren.push({\n name: 'a:prstDash',\n attributes: {\n val: dashStyle,\n },\n selfClosing: true,\n });\n }\n }\n\n children.push({\n name: 'a:ln',\n attributes: lnAttrs,\n children: lnChildren,\n });\n }\n\n return {\n name: 'wps:spPr',\n children,\n };\n }\n\n /**\n * Creates the wps:txbx element (text box content)\n * @private\n */\n private createTextBoxContent(): XMLElement {\n if (this.paragraphs.length === 0) {\n // Empty text box - create empty paragraph\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: [\n XMLBuilder.w('p', undefined, [\n XMLBuilder.w('r', undefined, [XMLBuilder.w('t', undefined, [''])]),\n ]),\n ],\n },\n ],\n };\n }\n\n // Convert paragraphs to XML\n const paragraphXml = this.paragraphs.map((p) => p.toXML());\n\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: paragraphXml,\n },\n ],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../../src/elements/TextBox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TextBox - Represents a floating text box in a Word document\n *\n * Text boxes use DrawingML (a:) and WordprocessingML Drawing (wp:) namespaces,\n * plus WordprocessingShape (wps:) namespace for Word 2010+ features.\n *\n * Per ECMA-376 Part 4 (Transitional) and Office Open XML extensions,\n * text boxes in Word documents use the wps:wsp element with wps:txbx content.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\nimport { UNITS } from '../utils/units.js';\nimport { Paragraph } from './Paragraph.js';\nimport {\n ImagePosition,\n ImageAnchor,\n PositionAnchor,\n HorizontalAlignment,\n VerticalAlignment,\n} from './Image.js';\nimport { BorderDefinition } from './Paragraph.js';\n\n/**\n * TextBox margins configuration\n */\nexport interface TextBoxMargins {\n /** Top margin in EMUs */\n top: number;\n /** Bottom margin in EMUs */\n bottom: number;\n /** Left margin in EMUs */\n left: number;\n /** Right margin in EMUs */\n right: number;\n}\n\n/**\n * TextBox fill configuration\n */\nexport interface TextBoxFill {\n /** Fill color in hex (e.g., 'F0F0F0') */\n color: string;\n /** Transparency percentage (0-100) */\n transparency?: number;\n}\n\n/**\n * TextBox properties\n */\nexport interface TextBoxProperties {\n /** Width in EMUs */\n width: number;\n /** Height in EMUs */\n height: number;\n /** Paragraphs within the text box */\n paragraphs?: Paragraph[];\n /** Position configuration */\n position?: ImagePosition;\n /** Anchor configuration */\n anchor?: ImageAnchor;\n /** Fill color and transparency */\n fill?: TextBoxFill;\n /** Border configuration */\n borders?: BorderDefinition;\n /** Internal margins */\n margins?: TextBoxMargins;\n /** TextBox name */\n name?: string;\n /** TextBox description (for accessibility) */\n description?: string;\n}\n\n/**\n * Represents a floating text box\n */\nexport class TextBox {\n private width: number;\n private height: number;\n private paragraphs: Paragraph[] = [];\n private position?: ImagePosition;\n private anchor?: ImageAnchor;\n private fill?: TextBoxFill;\n private borders?: BorderDefinition;\n private margins?: TextBoxMargins;\n private name: string;\n private description: string;\n private docPrId = 1;\n\n /**\n * Creates a new text box\n * @param properties TextBox properties\n * @private Use static factory methods instead (create)\n */\n private constructor(properties: TextBoxProperties) {\n this.width = properties.width;\n this.height = properties.height;\n if (properties.paragraphs) {\n this.paragraphs = properties.paragraphs;\n }\n this.position = properties.position;\n this.anchor = properties.anchor;\n this.fill = properties.fill;\n this.borders = properties.borders;\n this.margins = properties.margins;\n this.name = properties.name || 'TextBox';\n this.description = properties.description || '';\n }\n\n /**\n * Factory method for creating a text box\n * @param width Width in EMUs\n * @param height Height in EMUs\n * @returns New TextBox instance\n * @example\n * const textbox = TextBox.create(inchesToEmus(3), inchesToEmus(2));\n */\n static create(width: number, height: number): TextBox {\n return new TextBox({ width, height });\n }\n\n /**\n * Gets the width in EMUs\n * @returns Width\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Gets the height in EMUs\n * @returns Height\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Adds a paragraph to the text box\n * @param paragraph Paragraph to add\n * @returns This text box for chaining\n */\n addParagraph(paragraph: Paragraph): this {\n this.paragraphs.push(paragraph);\n return this;\n }\n\n /**\n * Gets all paragraphs\n * @returns Array of paragraphs\n */\n getParagraphs(): Paragraph[] {\n return this.paragraphs;\n }\n\n /**\n * Sets text box position (for floating text boxes)\n * @param horizontal Horizontal positioning configuration\n * @param vertical Vertical positioning configuration\n * @returns This text box for chaining\n */\n setPosition(\n horizontal: { anchor: PositionAnchor; offset?: number; alignment?: HorizontalAlignment },\n vertical: { anchor: PositionAnchor; offset?: number; alignment?: VerticalAlignment }\n ): this {\n this.position = { horizontal, vertical };\n return this;\n }\n\n /**\n * Gets the position configuration\n * @returns Position or undefined\n */\n getPosition(): ImagePosition | undefined {\n return this.position;\n }\n\n /**\n * Sets anchor configuration\n * @param options Anchor configuration\n * @returns This text box for chaining\n */\n setAnchor(options: ImageAnchor): this {\n this.anchor = options;\n return this;\n }\n\n /**\n * Gets the anchor configuration\n * @returns Anchor configuration or undefined\n */\n getAnchor(): ImageAnchor | undefined {\n return this.anchor;\n }\n\n /**\n * Sets the fill color\n * @param color Fill color in hex\n * @param transparency Optional transparency percentage (0-100)\n * @returns This text box for chaining\n */\n setFill(color: string, transparency?: number): this {\n this.fill = { color, transparency };\n return this;\n }\n\n /**\n * Gets the fill configuration\n * @returns Fill or undefined\n */\n getFill(): TextBoxFill | undefined {\n return this.fill;\n }\n\n /**\n * Sets the borders\n * @param borders Border configuration\n * @returns This text box for chaining\n */\n setBorders(borders: BorderDefinition): this {\n this.borders = borders;\n return this;\n }\n\n /**\n * Gets the borders configuration\n * @returns Borders or undefined\n */\n getBorders(): BorderDefinition | undefined {\n return this.borders;\n }\n\n /**\n * Sets internal margins\n * @param margins Margin configuration\n * @returns This text box for chaining\n */\n setMargins(margins: TextBoxMargins): this {\n this.margins = margins;\n return this;\n }\n\n /**\n * Gets the margins configuration\n * @returns Margins or undefined\n */\n getMargins(): TextBoxMargins | undefined {\n return this.margins;\n }\n\n /**\n * Sets the text box name\n * @param name TextBox name\n * @returns This text box for chaining\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the text box name\n * @returns TextBox name\n */\n getName(): string {\n return this.name;\n }\n\n /**\n * Sets the text box description (for accessibility)\n * @param description TextBox description\n * @returns This text box for chaining\n */\n setDescription(description: string): this {\n this.description = description;\n return this;\n }\n\n /**\n * Gets the text box description\n * @returns TextBox description\n */\n getDescription(): string {\n return this.description;\n }\n\n /**\n * Sets the docPr ID (drawing object ID)\n * @param id Document property ID\n * @returns This text box for chaining\n */\n setDocPrId(id: number): this {\n this.docPrId = id;\n return this;\n }\n\n /**\n * Checks if this text box is floating (has anchor or position configuration)\n * @returns True if floating, false if inline\n */\n isFloating(): boolean {\n return this.anchor !== undefined || this.position !== undefined;\n }\n\n /**\n * Generates DrawingML XML for the text box\n * Creates either inline or floating (anchor) text box based on configuration\n * @returns XML element representing the text box\n */\n toXML(): XMLElement {\n // Text boxes are typically floating, but support inline as well\n const textboxElement = this.isFloating() ? this.createAnchor() : this.createInline();\n\n // Create the drawing structure\n return XMLBuilder.w('drawing', undefined, [textboxElement]);\n }\n\n /**\n * Creates the wp:inline element for inline text boxes\n * @private\n */\n private createInline(): XMLElement {\n const children: XMLElement[] = [];\n\n // Extent (size)\n children.push({\n name: 'wp:extent',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n });\n\n // Effect extent\n children.push({\n name: 'wp:effectExtent',\n attributes: {\n l: '0',\n t: '0',\n r: '0',\n b: '0',\n },\n selfClosing: true,\n });\n\n // Document properties\n children.push({\n name: 'wp:docPr',\n attributes: {\n id: this.docPrId.toString(),\n name: this.name,\n descr: this.description,\n },\n selfClosing: true,\n });\n\n // Non-visual graphic frame properties\n children.push({\n name: 'wp:cNvGraphicFramePr',\n selfClosing: true,\n });\n\n // Graphic data (the text box)\n children.push(this.createGraphic());\n\n return {\n name: 'wp:inline',\n attributes: {\n distT: '0',\n distB: '0',\n distL: '0',\n distR: '0',\n },\n children,\n };\n }\n\n /**\n * Creates the wp:anchor element for floating text boxes\n * @private\n */\n private createAnchor(): XMLElement {\n const children: XMLElement[] = [];\n\n const anchorConfig = this.anchor || {\n behindDoc: false,\n locked: false,\n layoutInCell: true,\n allowOverlap: false,\n relativeHeight: 251658240,\n };\n\n // simplePos (required first child per CT_Anchor)\n children.push({\n name: 'wp:simplePos',\n attributes: { x: '0', y: '0' },\n selfClosing: true,\n });\n\n // Position H (horizontal) — required child of wp:anchor per CT_Anchor\n // (minOccurs=1), so fall back to a zero page offset when no explicit\n // position is configured (anchor-only floating text boxes)\n const posH = this.position?.horizontal;\n const posHChildren: XMLElement[] = [];\n\n if (posH?.offset !== undefined) {\n posHChildren.push({\n name: 'wp:posOffset',\n children: [posH.offset.toString()],\n });\n } else if (posH?.alignment) {\n posHChildren.push({\n name: 'wp:align',\n children: [posH.alignment],\n });\n } else {\n posHChildren.push({\n name: 'wp:posOffset',\n children: ['0'],\n });\n }\n\n children.push({\n name: 'wp:positionH',\n attributes: {\n relativeFrom: posH?.anchor ?? 'page',\n },\n children: posHChildren,\n });\n\n // Position V (vertical) — required child of wp:anchor per CT_Anchor\n const posV = this.position?.vertical;\n const posVChildren: XMLElement[] = [];\n\n if (posV?.offset !== undefined) {\n posVChildren.push({\n name: 'wp:posOffset',\n children: [posV.offset.toString()],\n });\n } else if (posV?.alignment) {\n posVChildren.push({\n name: 'wp:align',\n children: [posV.alignment],\n });\n } else {\n posVChildren.push({\n name: 'wp:posOffset',\n children: ['0'],\n });\n }\n\n children.push({\n name: 'wp:positionV',\n attributes: {\n relativeFrom: posV?.anchor ?? 'page',\n },\n children: posVChildren,\n });\n\n // Extent (size)\n children.push({\n name: 'wp:extent',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n });\n\n // Effect extent\n children.push({\n name: 'wp:effectExtent',\n attributes: {\n l: '0',\n t: '0',\n r: '0',\n b: '0',\n },\n selfClosing: true,\n });\n\n // Wrap square (default for text boxes)\n children.push({\n name: 'wp:wrapSquare',\n attributes: {\n wrapText: 'bothSides',\n },\n selfClosing: true,\n });\n\n // Document properties\n children.push({\n name: 'wp:docPr',\n attributes: {\n id: this.docPrId.toString(),\n name: this.name,\n descr: this.description,\n },\n selfClosing: true,\n });\n\n // Non-visual graphic frame properties\n children.push({\n name: 'wp:cNvGraphicFramePr',\n selfClosing: true,\n });\n\n // Graphic data (the text box)\n children.push(this.createGraphic());\n\n return {\n name: 'wp:anchor',\n attributes: {\n distT: '0',\n distB: '0',\n distL: '0',\n distR: '0',\n simplePos: '0',\n relativeHeight: anchorConfig.relativeHeight.toString(),\n behindDoc: anchorConfig.behindDoc ? '1' : '0',\n locked: anchorConfig.locked ? '1' : '0',\n layoutInCell: anchorConfig.layoutInCell ? '1' : '0',\n allowOverlap: anchorConfig.allowOverlap ? '1' : '0',\n },\n children,\n };\n }\n\n /**\n * Creates the a:graphic element containing the text box\n * @private\n */\n private createGraphic(): XMLElement {\n return {\n name: 'a:graphic',\n attributes: {\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n },\n children: [\n {\n name: 'a:graphicData',\n attributes: {\n uri: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n },\n children: [this.createWps()],\n },\n ],\n };\n }\n\n /**\n * Creates the wps:wsp element (WordprocessingShape for text box)\n * @private\n */\n private createWps(): XMLElement {\n const children: XMLElement[] = [];\n\n // Non-visual shape properties\n children.push({\n name: 'wps:cNvSpPr',\n attributes: {\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n txBox: '1', // Indicates this is a text box\n },\n selfClosing: true,\n });\n\n // Shape properties (size, fill, borders)\n children.push(this.createSpPr());\n\n // Text box content\n children.push(this.createTextBoxContent());\n\n // Body properties (margins/insets)\n children.push(this.createBodyPr());\n\n return {\n name: 'wps:wsp',\n attributes: {\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n },\n children,\n };\n }\n\n /**\n * Creates the wps:bodyPr element (text body properties including margins)\n * Per ECMA-376 Part 4, bodyPr specifies inset margins via lIns/tIns/rIns/bIns attributes\n * @private\n */\n private createBodyPr(): XMLElement {\n const attrs: Record<string, string> = {\n rot: '0',\n vert: 'horz',\n wrap: 'square',\n anchor: 't',\n };\n\n // Add margin insets if set\n if (this.margins) {\n if (this.margins.left !== undefined) attrs.lIns = this.margins.left.toString();\n if (this.margins.top !== undefined) attrs.tIns = this.margins.top.toString();\n if (this.margins.right !== undefined) attrs.rIns = this.margins.right.toString();\n if (this.margins.bottom !== undefined) attrs.bIns = this.margins.bottom.toString();\n }\n\n return {\n name: 'wps:bodyPr',\n attributes: attrs,\n selfClosing: true,\n };\n }\n\n /**\n * Creates the wps:spPr element (shape properties for text box)\n * @private\n */\n private createSpPr(): XMLElement {\n const children: XMLElement[] = [];\n\n // Transform (position and size)\n children.push({\n name: 'a:xfrm',\n children: [\n {\n name: 'a:off',\n attributes: { x: '0', y: '0' },\n selfClosing: true,\n },\n {\n name: 'a:ext',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Preset geometry (rectangle for text box)\n children.push({\n name: 'a:prstGeom',\n attributes: {\n prst: 'rect',\n },\n children: [\n {\n name: 'a:avLst',\n selfClosing: true,\n },\n ],\n });\n\n // Fill\n if (this.fill) {\n const fillChildren: XMLElement[] = [];\n\n // Transparency\n if (this.fill.transparency !== undefined) {\n const alpha = 100 - this.fill.transparency;\n fillChildren.push({\n name: 'a:alpha',\n attributes: {\n val: Math.round(alpha * 1000).toString(),\n },\n selfClosing: true,\n });\n }\n\n children.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: this.fill.color.toUpperCase(),\n },\n ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),\n },\n ],\n });\n } else {\n // No fill (transparent background)\n children.push({\n name: 'a:noFill',\n selfClosing: true,\n });\n }\n\n // Borders\n if (this.borders?.size !== undefined) {\n const lnAttrs: Record<string, string> = {\n w: (this.borders.size * UNITS.EMUS_PER_POINT).toString(), // Convert points to EMUs\n };\n\n const lnChildren: XMLElement[] = [];\n\n // Border color\n lnChildren.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: (this.borders.color || '000000').toUpperCase(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Border style\n if (this.borders.style && this.borders.style !== 'single') {\n const dashMap: Record<string, string> = {\n dash: 'dash',\n dot: 'dot',\n dashDot: 'dashDot',\n dashDotDot: 'lgDashDotDot',\n };\n const dashStyle = dashMap[this.borders.style] || 'solid';\n if (dashStyle !== 'solid') {\n lnChildren.push({\n name: 'a:prstDash',\n attributes: {\n val: dashStyle,\n },\n selfClosing: true,\n });\n }\n }\n\n children.push({\n name: 'a:ln',\n attributes: lnAttrs,\n children: lnChildren,\n });\n }\n\n return {\n name: 'wps:spPr',\n children,\n };\n }\n\n /**\n * Creates the wps:txbx element (text box content)\n * @private\n */\n private createTextBoxContent(): XMLElement {\n if (this.paragraphs.length === 0) {\n // Empty text box - create empty paragraph\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: [\n XMLBuilder.w('p', undefined, [\n XMLBuilder.w('r', undefined, [XMLBuilder.w('t', undefined, [''])]),\n ]),\n ],\n },\n ],\n };\n }\n\n // Convert paragraphs to XML\n const paragraphXml = this.paragraphs.map((p) => p.toXML());\n\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: paragraphXml,\n },\n ],\n };\n }\n}\n"]}
@@ -178,7 +178,7 @@ export class AbstractNumbering {
178
178
  sortedLevels.forEach((level) => {
179
179
  children.push(level.toXML());
180
180
  });
181
- if (sortedLevels.length === 0) {
181
+ if (sortedLevels.length === 0 && !this.numStyleLink) {
182
182
  children.push(NumberingLevel.createDecimalLevel(0).toXML());
183
183
  }
184
184
  return XMLBuilder.w('abstractNum', { 'w:abstractNumId': this.abstractNumId.toString() }, children);
@@ -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"]}
@@ -17,10 +17,10 @@ export class NumberingLevel {
17
17
  leftIndent: properties.leftIndent !== undefined ? properties.leftIndent : 720 + properties.level * 360,
18
18
  hangingIndent: properties.hangingIndent !== undefined ? properties.hangingIndent : 360,
19
19
  font: properties.font || 'Calibri',
20
- fontSize: properties.fontSize || 22,
20
+ fontSize: properties.fontSize,
21
21
  isLegalNumberingStyle: properties.isLegalNumberingStyle !== undefined ? properties.isLegalNumberingStyle : false,
22
22
  suffix: properties.suffix || 'tab',
23
- color: properties.color || '000000',
23
+ color: properties.color,
24
24
  bold: properties.bold !== undefined ? properties.bold : false,
25
25
  italic: properties.italic !== undefined ? properties.italic : false,
26
26
  underline: properties.underline,
@@ -208,11 +208,13 @@ export class NumberingLevel {
208
208
  rPrChildren.push(XMLBuilder.wSelf('i'));
209
209
  rPrChildren.push(XMLBuilder.wSelf('iCs'));
210
210
  }
211
- if (this.properties.color) {
211
+ if (this.properties.color !== undefined) {
212
212
  rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.properties.color }));
213
213
  }
214
- rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));
215
- rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));
214
+ if (this.properties.fontSize !== undefined) {
215
+ rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));
216
+ rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));
217
+ }
216
218
  if (this.properties.underline) {
217
219
  rPrChildren.push(XMLBuilder.wSelf('u', { 'w:val': this.properties.underline }));
218
220
  }
@@ -561,7 +563,7 @@ export class NumberingLevel {
561
563
  hangingIndent = parseInt(hangingMatch[1], 10);
562
564
  }
563
565
  let font = 'Calibri';
564
- let fontSize = 22;
566
+ let fontSize;
565
567
  const rFontsMatch = /<w:rFonts[^>]*\/>/.exec(xml);
566
568
  if (rFontsMatch) {
567
569
  const rFontsElement = rFontsMatch[0];