docxmlater 10.4.0 → 11.0.4

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 (699) hide show
  1. package/README.md +3 -3
  2. package/dist/constants/legacyCompatFlags.d.ts +1 -1
  3. package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
  4. package/dist/constants/legacyCompatFlags.js.map +1 -1
  5. package/dist/core/Document.d.ts +75 -67
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +618 -414
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +11 -10
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +19 -19
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentEvents.d.ts +39 -0
  14. package/dist/core/DocumentEvents.d.ts.map +1 -0
  15. package/dist/core/DocumentEvents.js +51 -0
  16. package/dist/core/DocumentEvents.js.map +1 -0
  17. package/dist/core/DocumentGenerator.d.ts +11 -11
  18. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  19. package/dist/core/DocumentGenerator.js +72 -52
  20. package/dist/core/DocumentGenerator.js.map +1 -1
  21. package/dist/core/DocumentParser.d.ts +15 -15
  22. package/dist/core/DocumentParser.d.ts.map +1 -1
  23. package/dist/core/DocumentParser.js +2100 -1076
  24. package/dist/core/DocumentParser.js.map +1 -1
  25. package/dist/core/DocumentValidator.d.ts +3 -3
  26. package/dist/core/DocumentValidator.d.ts.map +1 -1
  27. package/dist/core/DocumentValidator.js +31 -31
  28. package/dist/core/DocumentValidator.js.map +1 -1
  29. package/dist/core/ElementRegistry.d.ts +22 -0
  30. package/dist/core/ElementRegistry.d.ts.map +1 -0
  31. package/dist/core/ElementRegistry.js +27 -0
  32. package/dist/core/ElementRegistry.js.map +1 -0
  33. package/dist/core/Relationship.js +4 -4
  34. package/dist/core/Relationship.js.map +1 -1
  35. package/dist/core/RelationshipManager.d.ts +1 -1
  36. package/dist/core/RelationshipManager.d.ts.map +1 -1
  37. package/dist/core/RelationshipManager.js +32 -32
  38. package/dist/core/RelationshipManager.js.map +1 -1
  39. package/dist/elements/AlternateContent.d.ts +1 -1
  40. package/dist/elements/AlternateContent.d.ts.map +1 -1
  41. package/dist/elements/AlternateContent.js.map +1 -1
  42. package/dist/elements/Bookmark.d.ts +6 -1
  43. package/dist/elements/Bookmark.d.ts.map +1 -1
  44. package/dist/elements/Bookmark.js +19 -3
  45. package/dist/elements/Bookmark.js.map +1 -1
  46. package/dist/elements/BookmarkManager.d.ts +1 -1
  47. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  48. package/dist/elements/BookmarkManager.js +7 -7
  49. package/dist/elements/BookmarkManager.js.map +1 -1
  50. package/dist/elements/Comment.d.ts +2 -2
  51. package/dist/elements/Comment.d.ts.map +1 -1
  52. package/dist/elements/Comment.js +4 -4
  53. package/dist/elements/Comment.js.map +1 -1
  54. package/dist/elements/CommentManager.d.ts +2 -2
  55. package/dist/elements/CommentManager.d.ts.map +1 -1
  56. package/dist/elements/CommentManager.js +9 -9
  57. package/dist/elements/CommentManager.js.map +1 -1
  58. package/dist/elements/CommonTypes.d.ts +9 -4
  59. package/dist/elements/CommonTypes.d.ts.map +1 -1
  60. package/dist/elements/CommonTypes.js +1 -0
  61. package/dist/elements/CommonTypes.js.map +1 -1
  62. package/dist/elements/CustomXml.d.ts +1 -1
  63. package/dist/elements/CustomXml.d.ts.map +1 -1
  64. package/dist/elements/CustomXml.js.map +1 -1
  65. package/dist/elements/Endnote.d.ts +2 -2
  66. package/dist/elements/Endnote.d.ts.map +1 -1
  67. package/dist/elements/Endnote.js +9 -9
  68. package/dist/elements/Endnote.js.map +1 -1
  69. package/dist/elements/EndnoteManager.d.ts +1 -1
  70. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  71. package/dist/elements/EndnoteManager.js +11 -11
  72. package/dist/elements/EndnoteManager.js.map +1 -1
  73. package/dist/elements/Field.d.ts +9 -5
  74. package/dist/elements/Field.d.ts.map +1 -1
  75. package/dist/elements/Field.js +21 -9
  76. package/dist/elements/Field.js.map +1 -1
  77. package/dist/elements/FieldHelpers.d.ts +1 -1
  78. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  79. package/dist/elements/FieldHelpers.js +10 -10
  80. package/dist/elements/FieldHelpers.js.map +1 -1
  81. package/dist/elements/Footer.d.ts +3 -3
  82. package/dist/elements/Footer.d.ts.map +1 -1
  83. package/dist/elements/Footer.js +5 -5
  84. package/dist/elements/Footer.js.map +1 -1
  85. package/dist/elements/Footnote.d.ts +2 -2
  86. package/dist/elements/Footnote.d.ts.map +1 -1
  87. package/dist/elements/Footnote.js +9 -9
  88. package/dist/elements/Footnote.js.map +1 -1
  89. package/dist/elements/FootnoteManager.d.ts +1 -1
  90. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  91. package/dist/elements/FootnoteManager.js +11 -11
  92. package/dist/elements/FootnoteManager.js.map +1 -1
  93. package/dist/elements/Header.d.ts +3 -3
  94. package/dist/elements/Header.d.ts.map +1 -1
  95. package/dist/elements/Header.js +5 -5
  96. package/dist/elements/Header.js.map +1 -1
  97. package/dist/elements/HeaderFooterManager.d.ts +2 -2
  98. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  99. package/dist/elements/HeaderFooterManager.js.map +1 -1
  100. package/dist/elements/Hyperlink.d.ts +5 -5
  101. package/dist/elements/Hyperlink.d.ts.map +1 -1
  102. package/dist/elements/Hyperlink.js +29 -29
  103. package/dist/elements/Hyperlink.js.map +1 -1
  104. package/dist/elements/Image.d.ts +1 -1
  105. package/dist/elements/Image.d.ts.map +1 -1
  106. package/dist/elements/Image.js +67 -67
  107. package/dist/elements/Image.js.map +1 -1
  108. package/dist/elements/ImageManager.d.ts +1 -1
  109. package/dist/elements/ImageManager.d.ts.map +1 -1
  110. package/dist/elements/ImageManager.js +4 -4
  111. package/dist/elements/ImageManager.js.map +1 -1
  112. package/dist/elements/ImageRun.d.ts +3 -3
  113. package/dist/elements/ImageRun.d.ts.map +1 -1
  114. package/dist/elements/ImageRun.js +2 -2
  115. package/dist/elements/ImageRun.js.map +1 -1
  116. package/dist/elements/MathElement.d.ts +1 -1
  117. package/dist/elements/MathElement.d.ts.map +1 -1
  118. package/dist/elements/MathElement.js.map +1 -1
  119. package/dist/elements/Paragraph.d.ts +34 -19
  120. package/dist/elements/Paragraph.d.ts.map +1 -1
  121. package/dist/elements/Paragraph.js +286 -231
  122. package/dist/elements/Paragraph.js.map +1 -1
  123. package/dist/elements/PreservedElement.d.ts +1 -1
  124. package/dist/elements/PreservedElement.d.ts.map +1 -1
  125. package/dist/elements/PreservedElement.js.map +1 -1
  126. package/dist/elements/PropertyChangeTypes.d.ts +2 -2
  127. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  128. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  129. package/dist/elements/RangeMarker.d.ts +14 -1
  130. package/dist/elements/RangeMarker.d.ts.map +1 -1
  131. package/dist/elements/RangeMarker.js +46 -8
  132. package/dist/elements/RangeMarker.js.map +1 -1
  133. package/dist/elements/RegisteredBodyElement.d.ts +15 -0
  134. package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
  135. package/dist/elements/RegisteredBodyElement.js +44 -0
  136. package/dist/elements/RegisteredBodyElement.js.map +1 -0
  137. package/dist/elements/Revision.d.ts +8 -8
  138. package/dist/elements/Revision.d.ts.map +1 -1
  139. package/dist/elements/Revision.js +12 -12
  140. package/dist/elements/Revision.js.map +1 -1
  141. package/dist/elements/RevisionContent.d.ts +3 -3
  142. package/dist/elements/RevisionContent.d.ts.map +1 -1
  143. package/dist/elements/RevisionContent.js.map +1 -1
  144. package/dist/elements/RevisionManager.d.ts +2 -2
  145. package/dist/elements/RevisionManager.d.ts.map +1 -1
  146. package/dist/elements/RevisionManager.js +2 -2
  147. package/dist/elements/RevisionManager.js.map +1 -1
  148. package/dist/elements/Run.d.ts +16 -10
  149. package/dist/elements/Run.d.ts.map +1 -1
  150. package/dist/elements/Run.js +199 -173
  151. package/dist/elements/Run.js.map +1 -1
  152. package/dist/elements/Section.d.ts +4 -2
  153. package/dist/elements/Section.d.ts.map +1 -1
  154. package/dist/elements/Section.js +152 -145
  155. package/dist/elements/Section.js.map +1 -1
  156. package/dist/elements/Shape.d.ts +3 -3
  157. package/dist/elements/Shape.d.ts.map +1 -1
  158. package/dist/elements/Shape.js +12 -12
  159. package/dist/elements/Shape.js.map +1 -1
  160. package/dist/elements/StructuredDocumentTag.d.ts +3 -3
  161. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  162. package/dist/elements/StructuredDocumentTag.js +39 -39
  163. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  164. package/dist/elements/Table.d.ts +16 -10
  165. package/dist/elements/Table.d.ts.map +1 -1
  166. package/dist/elements/Table.js +118 -89
  167. package/dist/elements/Table.js.map +1 -1
  168. package/dist/elements/TableCell.d.ts +11 -11
  169. package/dist/elements/TableCell.d.ts.map +1 -1
  170. package/dist/elements/TableCell.js +108 -78
  171. package/dist/elements/TableCell.js.map +1 -1
  172. package/dist/elements/TableGridChange.d.ts +1 -1
  173. package/dist/elements/TableGridChange.d.ts.map +1 -1
  174. package/dist/elements/TableGridChange.js +3 -3
  175. package/dist/elements/TableGridChange.js.map +1 -1
  176. package/dist/elements/TableOfContents.d.ts +1 -1
  177. package/dist/elements/TableOfContents.d.ts.map +1 -1
  178. package/dist/elements/TableOfContents.js +2 -2
  179. package/dist/elements/TableOfContents.js.map +1 -1
  180. package/dist/elements/TableOfContentsElement.d.ts +2 -2
  181. package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
  182. package/dist/elements/TableOfContentsElement.js +5 -5
  183. package/dist/elements/TableOfContentsElement.js.map +1 -1
  184. package/dist/elements/TableRow.d.ts +18 -7
  185. package/dist/elements/TableRow.d.ts.map +1 -1
  186. package/dist/elements/TableRow.js +127 -74
  187. package/dist/elements/TableRow.js.map +1 -1
  188. package/dist/elements/TextBox.d.ts +4 -4
  189. package/dist/elements/TextBox.d.ts.map +1 -1
  190. package/dist/elements/TextBox.js +6 -6
  191. package/dist/elements/TextBox.js.map +1 -1
  192. package/dist/esm/constants/legacyCompatFlags.js +97 -0
  193. package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
  194. package/dist/esm/constants/limits.js +36 -0
  195. package/dist/esm/constants/limits.js.map +1 -0
  196. package/dist/esm/core/Document.js +8498 -0
  197. package/dist/esm/core/Document.js.map +1 -0
  198. package/dist/esm/core/DocumentContent.js +190 -0
  199. package/dist/esm/core/DocumentContent.js.map +1 -0
  200. package/dist/esm/core/DocumentEvents.js +47 -0
  201. package/dist/esm/core/DocumentEvents.js.map +1 -0
  202. package/dist/esm/core/DocumentGenerator.js +764 -0
  203. package/dist/esm/core/DocumentGenerator.js.map +1 -0
  204. package/dist/esm/core/DocumentIdManager.js +67 -0
  205. package/dist/esm/core/DocumentIdManager.js.map +1 -0
  206. package/dist/esm/core/DocumentParser.js +8760 -0
  207. package/dist/esm/core/DocumentParser.js.map +1 -0
  208. package/dist/esm/core/DocumentValidator.js +222 -0
  209. package/dist/esm/core/DocumentValidator.js.map +1 -0
  210. package/dist/esm/core/ElementRegistry.js +24 -0
  211. package/dist/esm/core/ElementRegistry.js.map +1 -0
  212. package/dist/esm/core/Relationship.js +177 -0
  213. package/dist/esm/core/Relationship.js.map +1 -0
  214. package/dist/esm/core/RelationshipManager.js +202 -0
  215. package/dist/esm/core/RelationshipManager.js.map +1 -0
  216. package/dist/esm/elements/AlternateContent.js +19 -0
  217. package/dist/esm/elements/AlternateContent.js.map +1 -0
  218. package/dist/esm/elements/Bookmark.js +115 -0
  219. package/dist/esm/elements/Bookmark.js.map +1 -0
  220. package/dist/esm/elements/BookmarkManager.js +99 -0
  221. package/dist/esm/elements/BookmarkManager.js.map +1 -0
  222. package/dist/esm/elements/Comment.js +181 -0
  223. package/dist/esm/elements/Comment.js.map +1 -0
  224. package/dist/esm/elements/CommentManager.js +233 -0
  225. package/dist/esm/elements/CommentManager.js.map +1 -0
  226. package/dist/esm/elements/CommonTypes.js +106 -0
  227. package/dist/esm/elements/CommonTypes.js.map +1 -0
  228. package/dist/esm/elements/CustomXml.js +19 -0
  229. package/dist/esm/elements/CustomXml.js.map +1 -0
  230. package/dist/esm/elements/Endnote.js +107 -0
  231. package/dist/esm/elements/Endnote.js.map +1 -0
  232. package/dist/esm/elements/EndnoteManager.js +119 -0
  233. package/dist/esm/elements/EndnoteManager.js.map +1 -0
  234. package/dist/esm/elements/Field.js +856 -0
  235. package/dist/esm/elements/Field.js.map +1 -0
  236. package/dist/esm/elements/FieldHelpers.js +134 -0
  237. package/dist/esm/elements/FieldHelpers.js.map +1 -0
  238. package/dist/esm/elements/FontManager.js +158 -0
  239. package/dist/esm/elements/FontManager.js.map +1 -0
  240. package/dist/esm/elements/Footer.js +141 -0
  241. package/dist/esm/elements/Footer.js.map +1 -0
  242. package/dist/esm/elements/Footnote.js +107 -0
  243. package/dist/esm/elements/Footnote.js.map +1 -0
  244. package/dist/esm/elements/FootnoteManager.js +119 -0
  245. package/dist/esm/elements/FootnoteManager.js.map +1 -0
  246. package/dist/esm/elements/Header.js +141 -0
  247. package/dist/esm/elements/Header.js.map +1 -0
  248. package/dist/esm/elements/HeaderFooterManager.js +87 -0
  249. package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
  250. package/dist/esm/elements/Hyperlink.js +586 -0
  251. package/dist/esm/elements/Hyperlink.js.map +1 -0
  252. package/dist/esm/elements/Image.js +1288 -0
  253. package/dist/esm/elements/Image.js.map +1 -0
  254. package/dist/esm/elements/ImageManager.js +223 -0
  255. package/dist/esm/elements/ImageManager.js.map +1 -0
  256. package/dist/esm/elements/ImageRun.js +29 -0
  257. package/dist/esm/elements/ImageRun.js.map +1 -0
  258. package/dist/esm/elements/MathElement.js +37 -0
  259. package/dist/esm/elements/MathElement.js.map +1 -0
  260. package/dist/esm/elements/Paragraph.js +2308 -0
  261. package/dist/esm/elements/Paragraph.js.map +1 -0
  262. package/dist/esm/elements/PreservedElement.js +29 -0
  263. package/dist/esm/elements/PreservedElement.js.map +1 -0
  264. package/dist/esm/elements/PropertyChangeTypes.js +53 -0
  265. package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
  266. package/dist/esm/elements/RangeMarker.js +219 -0
  267. package/dist/esm/elements/RangeMarker.js.map +1 -0
  268. package/dist/esm/elements/RegisteredBodyElement.js +40 -0
  269. package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
  270. package/dist/esm/elements/Revision.js +498 -0
  271. package/dist/esm/elements/Revision.js.map +1 -0
  272. package/dist/esm/elements/RevisionContent.js +18 -0
  273. package/dist/esm/elements/RevisionContent.js.map +1 -0
  274. package/dist/esm/elements/RevisionManager.js +486 -0
  275. package/dist/esm/elements/RevisionManager.js.map +1 -0
  276. package/dist/esm/elements/Run.js +1465 -0
  277. package/dist/esm/elements/Run.js.map +1 -0
  278. package/dist/esm/elements/Section.js +978 -0
  279. package/dist/esm/elements/Section.js.map +1 -0
  280. package/dist/esm/elements/Shape.js +493 -0
  281. package/dist/esm/elements/Shape.js.map +1 -0
  282. package/dist/esm/elements/StructuredDocumentTag.js +471 -0
  283. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
  284. package/dist/esm/elements/Table.js +1456 -0
  285. package/dist/esm/elements/Table.js.map +1 -0
  286. package/dist/esm/elements/TableCell.js +835 -0
  287. package/dist/esm/elements/TableCell.js.map +1 -0
  288. package/dist/esm/elements/TableGridChange.js +52 -0
  289. package/dist/esm/elements/TableGridChange.js.map +1 -0
  290. package/dist/esm/elements/TableOfContents.js +389 -0
  291. package/dist/esm/elements/TableOfContents.js.map +1 -0
  292. package/dist/esm/elements/TableOfContentsElement.js +29 -0
  293. package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
  294. package/dist/esm/elements/TableRow.js +555 -0
  295. package/dist/esm/elements/TableRow.js.map +1 -0
  296. package/dist/esm/elements/TextBox.js +459 -0
  297. package/dist/esm/elements/TextBox.js.map +1 -0
  298. package/dist/esm/formatting/AbstractNumbering.js +325 -0
  299. package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
  300. package/dist/esm/formatting/NumberingInstance.js +150 -0
  301. package/dist/esm/formatting/NumberingInstance.js.map +1 -0
  302. package/dist/esm/formatting/NumberingLevel.js +608 -0
  303. package/dist/esm/formatting/NumberingLevel.js.map +1 -0
  304. package/dist/esm/formatting/NumberingManager.js +423 -0
  305. package/dist/esm/formatting/NumberingManager.js.map +1 -0
  306. package/dist/esm/formatting/Style.js +1151 -0
  307. package/dist/esm/formatting/Style.js.map +1 -0
  308. package/dist/esm/formatting/StylesManager.js +557 -0
  309. package/dist/esm/formatting/StylesManager.js.map +1 -0
  310. package/dist/esm/helpers/CleanupHelper.js +350 -0
  311. package/dist/esm/helpers/CleanupHelper.js.map +1 -0
  312. package/dist/esm/images/ImageOptimizer.js +161 -0
  313. package/dist/esm/images/ImageOptimizer.js.map +1 -0
  314. package/dist/esm/index.js +75 -0
  315. package/dist/esm/index.js.map +1 -0
  316. package/dist/esm/internal.js +16 -0
  317. package/dist/esm/internal.js.map +1 -0
  318. package/dist/esm/managers/DrawingManager.js +163 -0
  319. package/dist/esm/managers/DrawingManager.js.map +1 -0
  320. package/dist/esm/package.json +3 -0
  321. package/dist/esm/processors/ChangelogGenerator.js +970 -0
  322. package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
  323. package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
  324. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
  325. package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
  326. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
  327. package/dist/esm/processors/MoveOperationHelper.js +57 -0
  328. package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
  329. package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
  330. package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
  331. package/dist/esm/processors/RevisionWalker.js +278 -0
  332. package/dist/esm/processors/RevisionWalker.js.map +1 -0
  333. package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
  334. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
  335. package/dist/esm/processors/ShadingResolver.js +66 -0
  336. package/dist/esm/processors/ShadingResolver.js.map +1 -0
  337. package/dist/esm/processors/acceptRevisions.js +416 -0
  338. package/dist/esm/processors/acceptRevisions.js.map +1 -0
  339. package/dist/esm/processors/cnfStyleDecoder.js +89 -0
  340. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
  341. package/dist/esm/processors/stripTrackedChanges.js +201 -0
  342. package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
  343. package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
  344. package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
  345. package/dist/esm/tracking/TrackingContext.js +2 -0
  346. package/dist/esm/tracking/TrackingContext.js.map +1 -0
  347. package/dist/esm/types/compatibility-types.js +8 -0
  348. package/dist/esm/types/compatibility-types.js.map +1 -0
  349. package/dist/esm/types/document-types.js +2 -0
  350. package/dist/esm/types/document-types.js.map +1 -0
  351. package/dist/esm/types/formatting.js +2 -0
  352. package/dist/esm/types/formatting.js.map +1 -0
  353. package/dist/esm/types/list-types.js +2 -0
  354. package/dist/esm/types/list-types.js.map +1 -0
  355. package/dist/esm/types/settings-types.js +2 -0
  356. package/dist/esm/types/settings-types.js.map +1 -0
  357. package/dist/esm/types/styleConfig.js +2 -0
  358. package/dist/esm/types/styleConfig.js.map +1 -0
  359. package/dist/esm/utils/KeyedRegistry.js +32 -0
  360. package/dist/esm/utils/KeyedRegistry.js.map +1 -0
  361. package/dist/esm/utils/corruptionDetection.js +155 -0
  362. package/dist/esm/utils/corruptionDetection.js.map +1 -0
  363. package/dist/esm/utils/dateFormatting.js +4 -0
  364. package/dist/esm/utils/dateFormatting.js.map +1 -0
  365. package/dist/esm/utils/deepClone.js +40 -0
  366. package/dist/esm/utils/deepClone.js.map +1 -0
  367. package/dist/esm/utils/deepEqual.js +47 -0
  368. package/dist/esm/utils/deepEqual.js.map +1 -0
  369. package/dist/esm/utils/diagnostics.js +69 -0
  370. package/dist/esm/utils/diagnostics.js.map +1 -0
  371. package/dist/esm/utils/errorHandling.js +36 -0
  372. package/dist/esm/utils/errorHandling.js.map +1 -0
  373. package/dist/esm/utils/formatting.js +93 -0
  374. package/dist/esm/utils/formatting.js.map +1 -0
  375. package/dist/esm/utils/list-detection.js +148 -0
  376. package/dist/esm/utils/list-detection.js.map +1 -0
  377. package/dist/esm/utils/logger.js +205 -0
  378. package/dist/esm/utils/logger.js.map +1 -0
  379. package/dist/esm/utils/parsingHelpers.js +56 -0
  380. package/dist/esm/utils/parsingHelpers.js.map +1 -0
  381. package/dist/esm/utils/textDiff.js +42 -0
  382. package/dist/esm/utils/textDiff.js.map +1 -0
  383. package/dist/esm/utils/units.js +152 -0
  384. package/dist/esm/utils/units.js.map +1 -0
  385. package/dist/esm/utils/validation.js +285 -0
  386. package/dist/esm/utils/validation.js.map +1 -0
  387. package/dist/esm/utils/xmlSanitization.js +54 -0
  388. package/dist/esm/utils/xmlSanitization.js.map +1 -0
  389. package/dist/esm/validation/RevisionAutoFixer.js +340 -0
  390. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
  391. package/dist/esm/validation/RevisionValidator.js +240 -0
  392. package/dist/esm/validation/RevisionValidator.js.map +1 -0
  393. package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
  394. package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
  395. package/dist/esm/validation/ValidationRules.js +92 -0
  396. package/dist/esm/validation/ValidationRules.js.map +1 -0
  397. package/dist/esm/validation/index.js +4 -0
  398. package/dist/esm/validation/index.js.map +1 -0
  399. package/dist/esm/xml/XMLBuilder.js +434 -0
  400. package/dist/esm/xml/XMLBuilder.js.map +1 -0
  401. package/dist/esm/xml/XMLParser.js +486 -0
  402. package/dist/esm/xml/XMLParser.js.map +1 -0
  403. package/dist/esm/zip/ZipHandler.js +298 -0
  404. package/dist/esm/zip/ZipHandler.js.map +1 -0
  405. package/dist/esm/zip/ZipReader.js +147 -0
  406. package/dist/esm/zip/ZipReader.js.map +1 -0
  407. package/dist/esm/zip/ZipWriter.js +199 -0
  408. package/dist/esm/zip/ZipWriter.js.map +1 -0
  409. package/dist/esm/zip/errors.js +43 -0
  410. package/dist/esm/zip/errors.js.map +1 -0
  411. package/dist/esm/zip/types.js +31 -0
  412. package/dist/esm/zip/types.js.map +1 -0
  413. package/dist/formatting/AbstractNumbering.d.ts +2 -2
  414. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  415. package/dist/formatting/AbstractNumbering.js +33 -33
  416. package/dist/formatting/AbstractNumbering.js.map +1 -1
  417. package/dist/formatting/NumberingInstance.d.ts +2 -2
  418. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  419. package/dist/formatting/NumberingInstance.js +7 -7
  420. package/dist/formatting/NumberingInstance.js.map +1 -1
  421. package/dist/formatting/NumberingLevel.d.ts +11 -2
  422. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  423. package/dist/formatting/NumberingLevel.js +111 -25
  424. package/dist/formatting/NumberingLevel.js.map +1 -1
  425. package/dist/formatting/NumberingManager.d.ts +4 -4
  426. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  427. package/dist/formatting/NumberingManager.js +28 -28
  428. package/dist/formatting/NumberingManager.js.map +1 -1
  429. package/dist/formatting/Style.d.ts +14 -7
  430. package/dist/formatting/Style.d.ts.map +1 -1
  431. package/dist/formatting/Style.js +309 -112
  432. package/dist/formatting/Style.js.map +1 -1
  433. package/dist/formatting/StylesManager.d.ts +2 -2
  434. package/dist/formatting/StylesManager.d.ts.map +1 -1
  435. package/dist/formatting/StylesManager.js +52 -52
  436. package/dist/formatting/StylesManager.js.map +1 -1
  437. package/dist/helpers/CleanupHelper.d.ts +1 -1
  438. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  439. package/dist/helpers/CleanupHelper.js +15 -15
  440. package/dist/helpers/CleanupHelper.js.map +1 -1
  441. package/dist/index.d.ts +81 -90
  442. package/dist/index.d.ts.map +1 -1
  443. package/dist/index.js +286 -317
  444. package/dist/index.js.map +1 -1
  445. package/dist/internal.d.ts +16 -0
  446. package/dist/internal.d.ts.map +1 -0
  447. package/dist/internal.js +42 -0
  448. package/dist/internal.js.map +1 -0
  449. package/dist/managers/DrawingManager.d.ts +3 -3
  450. package/dist/managers/DrawingManager.d.ts.map +1 -1
  451. package/dist/managers/DrawingManager.js +12 -12
  452. package/dist/managers/DrawingManager.js.map +1 -1
  453. package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
  454. package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
  455. package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
  456. package/dist/processors/ChangelogGenerator.js.map +1 -0
  457. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
  458. package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
  459. package/dist/processors/CompatibilityUpgrader.js.map +1 -0
  460. package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
  461. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
  462. package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
  463. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
  464. package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
  465. package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
  466. package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
  467. package/dist/processors/MoveOperationHelper.js.map +1 -0
  468. package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
  469. package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
  470. package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
  471. package/dist/processors/RevisionAwareProcessor.js.map +1 -0
  472. package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
  473. package/dist/processors/RevisionWalker.d.ts.map +1 -0
  474. package/dist/{utils → processors}/RevisionWalker.js +28 -0
  475. package/dist/processors/RevisionWalker.js.map +1 -0
  476. package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
  477. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
  478. package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
  479. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
  480. package/dist/processors/ShadingResolver.d.ts +6 -0
  481. package/dist/processors/ShadingResolver.d.ts.map +1 -0
  482. package/dist/{utils → processors}/ShadingResolver.js +2 -2
  483. package/dist/processors/ShadingResolver.js.map +1 -0
  484. package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
  485. package/dist/processors/acceptRevisions.d.ts.map +1 -0
  486. package/dist/{utils → processors}/acceptRevisions.js +24 -4
  487. package/dist/processors/acceptRevisions.js.map +1 -0
  488. package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
  489. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
  490. package/dist/processors/cnfStyleDecoder.js.map +1 -0
  491. package/dist/processors/stripTrackedChanges.d.ts +3 -0
  492. package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
  493. package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
  494. package/dist/processors/stripTrackedChanges.js.map +1 -0
  495. package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
  496. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  497. package/dist/tracking/DocumentTrackingContext.js +38 -43
  498. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  499. package/dist/tracking/TrackingContext.d.ts +8 -8
  500. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  501. package/dist/tracking/TrackingContext.js.map +1 -1
  502. package/dist/types/document-types.d.ts +28 -0
  503. package/dist/types/document-types.d.ts.map +1 -0
  504. package/dist/types/document-types.js +3 -0
  505. package/dist/types/document-types.js.map +1 -0
  506. package/dist/types/formatting.d.ts +4 -4
  507. package/dist/types/formatting.d.ts.map +1 -1
  508. package/dist/types/formatting.js.map +1 -1
  509. package/dist/types/settings-types.d.ts +6 -0
  510. package/dist/types/settings-types.d.ts.map +1 -1
  511. package/dist/types/settings-types.js.map +1 -1
  512. package/dist/utils/KeyedRegistry.d.ts +13 -0
  513. package/dist/utils/KeyedRegistry.d.ts.map +1 -0
  514. package/dist/utils/KeyedRegistry.js +36 -0
  515. package/dist/utils/KeyedRegistry.js.map +1 -0
  516. package/dist/utils/corruptionDetection.d.ts +1 -1
  517. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  518. package/dist/utils/corruptionDetection.js +4 -4
  519. package/dist/utils/corruptionDetection.js.map +1 -1
  520. package/dist/utils/deepEqual.d.ts +2 -0
  521. package/dist/utils/deepEqual.d.ts.map +1 -0
  522. package/dist/utils/deepEqual.js +50 -0
  523. package/dist/utils/deepEqual.js.map +1 -0
  524. package/dist/utils/list-detection.d.ts +2 -2
  525. package/dist/utils/list-detection.d.ts.map +1 -1
  526. package/dist/utils/list-detection.js.map +1 -1
  527. package/dist/utils/parsingHelpers.d.ts +1 -1
  528. package/dist/utils/parsingHelpers.d.ts.map +1 -1
  529. package/dist/utils/parsingHelpers.js +2 -2
  530. package/dist/utils/parsingHelpers.js.map +1 -1
  531. package/dist/utils/validation.js +7 -7
  532. package/dist/utils/validation.js.map +1 -1
  533. package/dist/utils/xmlSanitization.js +2 -2
  534. package/dist/utils/xmlSanitization.js.map +1 -1
  535. package/dist/validation/RevisionAutoFixer.d.ts +4 -4
  536. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  537. package/dist/validation/RevisionAutoFixer.js +11 -11
  538. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  539. package/dist/validation/RevisionValidator.d.ts +5 -4
  540. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  541. package/dist/validation/RevisionValidator.js +29 -30
  542. package/dist/validation/RevisionValidator.js.map +1 -1
  543. package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
  544. package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
  545. package/dist/validation/ValidationRuleRegistry.js +43 -0
  546. package/dist/validation/ValidationRuleRegistry.js.map +1 -0
  547. package/dist/validation/index.d.ts +3 -3
  548. package/dist/validation/index.d.ts.map +1 -1
  549. package/dist/validation/index.js +10 -10
  550. package/dist/validation/index.js.map +1 -1
  551. package/dist/xml/XMLBuilder.d.ts +6 -1
  552. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  553. package/dist/xml/XMLBuilder.js +11 -6
  554. package/dist/xml/XMLBuilder.js.map +1 -1
  555. package/dist/xml/XMLParser.js +6 -6
  556. package/dist/xml/XMLParser.js.map +1 -1
  557. package/dist/zip/ZipHandler.d.ts +1 -1
  558. package/dist/zip/ZipHandler.d.ts.map +1 -1
  559. package/dist/zip/ZipHandler.js +8 -8
  560. package/dist/zip/ZipHandler.js.map +1 -1
  561. package/dist/zip/ZipReader.d.ts +1 -1
  562. package/dist/zip/ZipReader.d.ts.map +1 -1
  563. package/dist/zip/ZipReader.js +14 -14
  564. package/dist/zip/ZipReader.js.map +1 -1
  565. package/dist/zip/ZipWriter.d.ts +1 -1
  566. package/dist/zip/ZipWriter.d.ts.map +1 -1
  567. package/dist/zip/ZipWriter.js +10 -10
  568. package/dist/zip/ZipWriter.js.map +1 -1
  569. package/package.json +20 -4
  570. package/src/constants/legacyCompatFlags.ts +1 -1
  571. package/src/core/Document.ts +478 -167
  572. package/src/core/DocumentContent.ts +14 -11
  573. package/src/core/DocumentEvents.ts +90 -0
  574. package/src/core/DocumentGenerator.ts +49 -22
  575. package/src/core/DocumentParser.ts +2235 -620
  576. package/src/core/DocumentValidator.ts +7 -7
  577. package/src/core/ElementRegistry.ts +69 -0
  578. package/src/core/Relationship.ts +1 -1
  579. package/src/core/RelationshipManager.ts +4 -4
  580. package/src/elements/AlternateContent.ts +1 -1
  581. package/src/elements/Bookmark.ts +52 -4
  582. package/src/elements/BookmarkManager.ts +2 -2
  583. package/src/elements/Comment.ts +3 -3
  584. package/src/elements/CommentManager.ts +4 -4
  585. package/src/elements/CommonTypes.ts +45 -7
  586. package/src/elements/CustomXml.ts +1 -1
  587. package/src/elements/Endnote.ts +2 -2
  588. package/src/elements/EndnoteManager.ts +3 -3
  589. package/src/elements/Field.ts +44 -10
  590. package/src/elements/FieldHelpers.ts +2 -2
  591. package/src/elements/Footer.ts +4 -4
  592. package/src/elements/Footnote.ts +2 -2
  593. package/src/elements/FootnoteManager.ts +3 -3
  594. package/src/elements/Header.ts +4 -4
  595. package/src/elements/HeaderFooterManager.ts +2 -2
  596. package/src/elements/Hyperlink.ts +16 -12
  597. package/src/elements/Image.ts +3 -3
  598. package/src/elements/ImageManager.ts +2 -2
  599. package/src/elements/ImageRun.ts +3 -3
  600. package/src/elements/MathElement.ts +1 -1
  601. package/src/elements/Paragraph.ts +221 -88
  602. package/src/elements/PreservedElement.ts +1 -1
  603. package/src/elements/PropertyChangeTypes.ts +2 -2
  604. package/src/elements/RangeMarker.ts +153 -12
  605. package/src/elements/RegisteredBodyElement.ts +52 -0
  606. package/src/elements/Revision.ts +14 -14
  607. package/src/elements/RevisionContent.ts +3 -3
  608. package/src/elements/RevisionManager.ts +3 -3
  609. package/src/elements/Run.ts +221 -94
  610. package/src/elements/Section.ts +136 -69
  611. package/src/elements/Shape.ts +4 -4
  612. package/src/elements/StructuredDocumentTag.ts +3 -3
  613. package/src/elements/Table.ts +91 -27
  614. package/src/elements/TableCell.ts +62 -34
  615. package/src/elements/TableGridChange.ts +1 -1
  616. package/src/elements/TableOfContents.ts +1 -1
  617. package/src/elements/TableOfContentsElement.ts +2 -2
  618. package/src/elements/TableRow.ts +192 -48
  619. package/src/elements/TextBox.ts +5 -5
  620. package/src/formatting/AbstractNumbering.ts +3 -3
  621. package/src/formatting/NumberingInstance.ts +2 -2
  622. package/src/formatting/NumberingLevel.ts +201 -10
  623. package/src/formatting/NumberingManager.ts +5 -5
  624. package/src/formatting/Style.ts +382 -86
  625. package/src/formatting/StylesManager.ts +4 -4
  626. package/src/helpers/CleanupHelper.ts +6 -6
  627. package/src/index.ts +118 -127
  628. package/src/internal.ts +79 -0
  629. package/src/managers/DrawingManager.ts +3 -3
  630. package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
  631. package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
  632. package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
  633. package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
  634. package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
  635. package/src/{utils → processors}/RevisionWalker.ts +42 -1
  636. package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
  637. package/src/{utils → processors}/ShadingResolver.ts +5 -5
  638. package/src/{utils → processors}/acceptRevisions.ts +77 -9
  639. package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
  640. package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
  641. package/src/tracking/DocumentTrackingContext.ts +12 -14
  642. package/src/tracking/TrackingContext.ts +8 -8
  643. package/src/types/document-types.ts +53 -0
  644. package/src/types/formatting.ts +4 -4
  645. package/src/types/settings-types.ts +32 -0
  646. package/src/utils/KeyedRegistry.ts +41 -0
  647. package/src/utils/corruptionDetection.ts +2 -2
  648. package/src/utils/deepEqual.ts +58 -0
  649. package/src/utils/list-detection.ts +2 -2
  650. package/src/utils/parsingHelpers.ts +11 -3
  651. package/src/utils/validation.ts +3 -3
  652. package/src/utils/xmlSanitization.ts +1 -1
  653. package/src/validation/RevisionAutoFixer.ts +5 -5
  654. package/src/validation/RevisionValidator.ts +39 -28
  655. package/src/validation/ValidationRuleRegistry.ts +86 -0
  656. package/src/validation/index.ts +3 -3
  657. package/src/xml/XMLBuilder.ts +13 -3
  658. package/src/xml/XMLParser.ts +2 -2
  659. package/src/zip/ZipHandler.ts +4 -4
  660. package/src/zip/ZipReader.ts +3 -3
  661. package/src/zip/ZipWriter.ts +3 -3
  662. package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
  663. package/dist/utils/ChangelogGenerator.js.map +0 -1
  664. package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
  665. package/dist/utils/CompatibilityUpgrader.js.map +0 -1
  666. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
  667. package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
  668. package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
  669. package/dist/utils/MoveOperationHelper.js.map +0 -1
  670. package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
  671. package/dist/utils/RevisionAwareProcessor.js.map +0 -1
  672. package/dist/utils/RevisionWalker.d.ts.map +0 -1
  673. package/dist/utils/RevisionWalker.js.map +0 -1
  674. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
  675. package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
  676. package/dist/utils/ShadingResolver.d.ts +0 -6
  677. package/dist/utils/ShadingResolver.d.ts.map +0 -1
  678. package/dist/utils/ShadingResolver.js.map +0 -1
  679. package/dist/utils/acceptRevisions.d.ts.map +0 -1
  680. package/dist/utils/acceptRevisions.js.map +0 -1
  681. package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
  682. package/dist/utils/cnfStyleDecoder.js.map +0 -1
  683. package/dist/utils/stripTrackedChanges.d.ts +0 -3
  684. package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
  685. package/dist/utils/stripTrackedChanges.js.map +0 -1
  686. package/src/__tests__/helper-methods.test.ts +0 -512
  687. package/src/constants/CLAUDE.md +0 -28
  688. package/src/core/CLAUDE.md +0 -113
  689. package/src/elements/CLAUDE.md +0 -142
  690. package/src/formatting/CLAUDE.md +0 -78
  691. package/src/managers/CLAUDE.md +0 -47
  692. package/src/tracking/CLAUDE.md +0 -30
  693. package/src/types/CLAUDE.md +0 -39
  694. package/src/utils/CLAUDE.md +0 -168
  695. package/src/validation/CLAUDE.md +0 -40
  696. package/src/xml/CLAUDE.md +0 -65
  697. package/src/zip/CLAUDE.md +0 -55
  698. /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
  699. /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
@@ -0,0 +1,493 @@
1
+ import { XMLBuilder } from '../xml/XMLBuilder.js';
2
+ import { pointsToHalfPoints } from '../utils/units.js';
3
+ export class Shape {
4
+ shapeType;
5
+ width;
6
+ height;
7
+ fill;
8
+ outline;
9
+ position;
10
+ anchor;
11
+ rotation = 0;
12
+ text;
13
+ textFormatting;
14
+ name;
15
+ description;
16
+ docPrId = 1;
17
+ constructor(properties) {
18
+ this.shapeType = properties.shapeType;
19
+ this.width = properties.width;
20
+ this.height = properties.height;
21
+ this.fill = properties.fill;
22
+ this.outline = properties.outline;
23
+ this.position = properties.position;
24
+ this.anchor = properties.anchor;
25
+ this.rotation = properties.rotation || 0;
26
+ this.text = properties.text;
27
+ this.textFormatting = properties.textFormatting;
28
+ this.name = properties.name || 'Shape';
29
+ this.description = properties.description || '';
30
+ }
31
+ static create(shapeType, width, height) {
32
+ return new Shape({ shapeType, width, height });
33
+ }
34
+ static createRectangle(width, height) {
35
+ return Shape.create('rect', width, height);
36
+ }
37
+ static createCircle(diameter) {
38
+ return Shape.create('ellipse', diameter, diameter);
39
+ }
40
+ static createEllipse(width, height) {
41
+ return Shape.create('ellipse', width, height);
42
+ }
43
+ static createArrow(direction, width, height) {
44
+ const shapeType = `${direction}Arrow`;
45
+ return Shape.create(shapeType, width, height);
46
+ }
47
+ static createLine(width) {
48
+ return Shape.create('straightConnector1', width, 12700);
49
+ }
50
+ getShapeType() {
51
+ return this.shapeType;
52
+ }
53
+ getWidth() {
54
+ return this.width;
55
+ }
56
+ getHeight() {
57
+ return this.height;
58
+ }
59
+ setFill(color, transparency) {
60
+ this.fill = { color, transparency };
61
+ return this;
62
+ }
63
+ getFill() {
64
+ return this.fill;
65
+ }
66
+ setOutline(color, width, style) {
67
+ this.outline = { color, width, style: style || 'solid' };
68
+ return this;
69
+ }
70
+ getOutline() {
71
+ return this.outline;
72
+ }
73
+ setPosition(horizontal, vertical) {
74
+ this.position = { horizontal, vertical };
75
+ return this;
76
+ }
77
+ getPosition() {
78
+ return this.position;
79
+ }
80
+ setAnchor(options) {
81
+ this.anchor = options;
82
+ return this;
83
+ }
84
+ getAnchor() {
85
+ return this.anchor;
86
+ }
87
+ setRotation(degrees) {
88
+ this.rotation = ((degrees % 360) + 360) % 360;
89
+ return this;
90
+ }
91
+ getRotation() {
92
+ return this.rotation;
93
+ }
94
+ setText(text, formatting) {
95
+ this.text = text;
96
+ if (formatting) {
97
+ this.textFormatting = formatting;
98
+ }
99
+ return this;
100
+ }
101
+ getText() {
102
+ return this.text;
103
+ }
104
+ setName(name) {
105
+ this.name = name;
106
+ return this;
107
+ }
108
+ getName() {
109
+ return this.name;
110
+ }
111
+ setDescription(description) {
112
+ this.description = description;
113
+ return this;
114
+ }
115
+ getDescription() {
116
+ return this.description;
117
+ }
118
+ setDocPrId(id) {
119
+ this.docPrId = id;
120
+ return this;
121
+ }
122
+ isFloating() {
123
+ return this.anchor !== undefined || this.position !== undefined;
124
+ }
125
+ toXML() {
126
+ const shapeElement = this.isFloating() ? this.createAnchor() : this.createInline();
127
+ return XMLBuilder.w('drawing', undefined, [shapeElement]);
128
+ }
129
+ createInline() {
130
+ const children = [];
131
+ children.push({
132
+ name: 'wp:extent',
133
+ attributes: {
134
+ cx: this.width.toString(),
135
+ cy: this.height.toString(),
136
+ },
137
+ selfClosing: true,
138
+ });
139
+ children.push({
140
+ name: 'wp:effectExtent',
141
+ attributes: {
142
+ l: '0',
143
+ t: '0',
144
+ r: '0',
145
+ b: '0',
146
+ },
147
+ selfClosing: true,
148
+ });
149
+ children.push({
150
+ name: 'wp:docPr',
151
+ attributes: {
152
+ id: this.docPrId.toString(),
153
+ name: this.name,
154
+ descr: this.description,
155
+ },
156
+ selfClosing: true,
157
+ });
158
+ children.push({
159
+ name: 'wp:cNvGraphicFramePr',
160
+ selfClosing: true,
161
+ });
162
+ children.push(this.createGraphic());
163
+ return {
164
+ name: 'wp:inline',
165
+ attributes: {
166
+ distT: '0',
167
+ distB: '0',
168
+ distL: '0',
169
+ distR: '0',
170
+ },
171
+ children,
172
+ };
173
+ }
174
+ createAnchor() {
175
+ const children = [];
176
+ const anchorConfig = this.anchor || {
177
+ behindDoc: false,
178
+ locked: false,
179
+ layoutInCell: true,
180
+ allowOverlap: false,
181
+ relativeHeight: 251658240,
182
+ };
183
+ children.push({
184
+ name: 'wp:simplePos',
185
+ attributes: { x: '0', y: '0' },
186
+ selfClosing: true,
187
+ });
188
+ if (this.position) {
189
+ const posH = this.position.horizontal;
190
+ const posHChildren = [];
191
+ if (posH.offset !== undefined) {
192
+ posHChildren.push({
193
+ name: 'wp:posOffset',
194
+ children: [posH.offset.toString()],
195
+ });
196
+ }
197
+ else if (posH.alignment) {
198
+ posHChildren.push({
199
+ name: 'wp:align',
200
+ children: [posH.alignment],
201
+ });
202
+ }
203
+ children.push({
204
+ name: 'wp:positionH',
205
+ attributes: {
206
+ relativeFrom: posH.anchor,
207
+ },
208
+ children: posHChildren,
209
+ });
210
+ }
211
+ if (this.position) {
212
+ const posV = this.position.vertical;
213
+ const posVChildren = [];
214
+ if (posV.offset !== undefined) {
215
+ posVChildren.push({
216
+ name: 'wp:posOffset',
217
+ children: [posV.offset.toString()],
218
+ });
219
+ }
220
+ else if (posV.alignment) {
221
+ posVChildren.push({
222
+ name: 'wp:align',
223
+ children: [posV.alignment],
224
+ });
225
+ }
226
+ children.push({
227
+ name: 'wp:positionV',
228
+ attributes: {
229
+ relativeFrom: posV.anchor,
230
+ },
231
+ children: posVChildren,
232
+ });
233
+ }
234
+ children.push({
235
+ name: 'wp:extent',
236
+ attributes: {
237
+ cx: this.width.toString(),
238
+ cy: this.height.toString(),
239
+ },
240
+ selfClosing: true,
241
+ });
242
+ children.push({
243
+ name: 'wp:effectExtent',
244
+ attributes: {
245
+ l: '0',
246
+ t: '0',
247
+ r: '0',
248
+ b: '0',
249
+ },
250
+ selfClosing: true,
251
+ });
252
+ children.push({
253
+ name: 'wp:wrapSquare',
254
+ attributes: {
255
+ wrapText: 'bothSides',
256
+ },
257
+ selfClosing: true,
258
+ });
259
+ children.push({
260
+ name: 'wp:docPr',
261
+ attributes: {
262
+ id: this.docPrId.toString(),
263
+ name: this.name,
264
+ descr: this.description,
265
+ },
266
+ selfClosing: true,
267
+ });
268
+ children.push({
269
+ name: 'wp:cNvGraphicFramePr',
270
+ selfClosing: true,
271
+ });
272
+ children.push(this.createGraphic());
273
+ return {
274
+ name: 'wp:anchor',
275
+ attributes: {
276
+ distT: '0',
277
+ distB: '0',
278
+ distL: '0',
279
+ distR: '0',
280
+ simplePos: '0',
281
+ relativeHeight: anchorConfig.relativeHeight.toString(),
282
+ behindDoc: anchorConfig.behindDoc ? '1' : '0',
283
+ locked: anchorConfig.locked ? '1' : '0',
284
+ layoutInCell: anchorConfig.layoutInCell ? '1' : '0',
285
+ allowOverlap: anchorConfig.allowOverlap ? '1' : '0',
286
+ },
287
+ children,
288
+ };
289
+ }
290
+ createGraphic() {
291
+ return {
292
+ name: 'a:graphic',
293
+ attributes: {
294
+ 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
295
+ },
296
+ children: [
297
+ {
298
+ name: 'a:graphicData',
299
+ attributes: {
300
+ uri: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
301
+ },
302
+ children: [this.createWps()],
303
+ },
304
+ ],
305
+ };
306
+ }
307
+ createWps() {
308
+ const children = [];
309
+ children.push({
310
+ name: 'wps:cNvSpPr',
311
+ attributes: {
312
+ 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
313
+ },
314
+ selfClosing: true,
315
+ });
316
+ children.push(this.createSpPr());
317
+ if (this.text) {
318
+ children.push(this.createTextBox());
319
+ }
320
+ children.push({
321
+ name: 'wps:bodyPr',
322
+ attributes: {
323
+ rot: '0',
324
+ vert: 'horz',
325
+ wrap: 'square',
326
+ lIns: '91440',
327
+ tIns: '45720',
328
+ rIns: '91440',
329
+ bIns: '45720',
330
+ anchor: 't',
331
+ anchorCtr: '0',
332
+ upright: '1',
333
+ },
334
+ selfClosing: true,
335
+ });
336
+ return {
337
+ name: 'wps:wsp',
338
+ attributes: {
339
+ 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
340
+ },
341
+ children,
342
+ };
343
+ }
344
+ createSpPr() {
345
+ const children = [];
346
+ const xfrmAttrs = this.rotation > 0 ? { rot: (this.rotation * 60000).toString() } : undefined;
347
+ children.push({
348
+ name: 'a:xfrm',
349
+ attributes: xfrmAttrs,
350
+ children: [
351
+ {
352
+ name: 'a:off',
353
+ attributes: { x: '0', y: '0' },
354
+ selfClosing: true,
355
+ },
356
+ {
357
+ name: 'a:ext',
358
+ attributes: {
359
+ cx: this.width.toString(),
360
+ cy: this.height.toString(),
361
+ },
362
+ selfClosing: true,
363
+ },
364
+ ],
365
+ });
366
+ children.push({
367
+ name: 'a:prstGeom',
368
+ attributes: {
369
+ prst: this.shapeType,
370
+ },
371
+ children: [
372
+ {
373
+ name: 'a:avLst',
374
+ selfClosing: true,
375
+ },
376
+ ],
377
+ });
378
+ if (this.fill) {
379
+ const fillChildren = [];
380
+ const colorAttrs = {
381
+ val: this.fill.color.toUpperCase(),
382
+ };
383
+ if (this.fill.transparency !== undefined) {
384
+ const alpha = 100 - this.fill.transparency;
385
+ fillChildren.push({
386
+ name: 'a:alpha',
387
+ attributes: {
388
+ val: Math.round(alpha * 1000).toString(),
389
+ },
390
+ selfClosing: true,
391
+ });
392
+ }
393
+ children.push({
394
+ name: 'a:solidFill',
395
+ children: [
396
+ {
397
+ name: 'a:srgbClr',
398
+ attributes: colorAttrs,
399
+ ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),
400
+ },
401
+ ],
402
+ });
403
+ }
404
+ if (this.outline) {
405
+ const lnAttrs = {
406
+ w: this.outline.width.toString(),
407
+ };
408
+ if (this.outline.cap)
409
+ lnAttrs.cap = this.outline.cap;
410
+ if (this.outline.compound)
411
+ lnAttrs.cmpd = this.outline.compound;
412
+ const lnChildren = [];
413
+ lnChildren.push({
414
+ name: 'a:solidFill',
415
+ children: [
416
+ {
417
+ name: 'a:srgbClr',
418
+ attributes: {
419
+ val: this.outline.color.toUpperCase(),
420
+ },
421
+ selfClosing: true,
422
+ },
423
+ ],
424
+ });
425
+ if (this.outline.style && this.outline.style !== 'solid') {
426
+ lnChildren.push({
427
+ name: 'a:prstDash',
428
+ attributes: {
429
+ val: this.outline.style,
430
+ },
431
+ selfClosing: true,
432
+ });
433
+ }
434
+ if (this.outline.join) {
435
+ const joinNames = { bevel: 'a:bevel', miter: 'a:miter', round: 'a:round' };
436
+ const joinName = joinNames[this.outline.join];
437
+ if (joinName) {
438
+ lnChildren.push({
439
+ name: joinName,
440
+ selfClosing: true,
441
+ });
442
+ }
443
+ }
444
+ children.push({
445
+ name: 'a:ln',
446
+ attributes: lnAttrs,
447
+ children: lnChildren,
448
+ });
449
+ }
450
+ return {
451
+ name: 'wps:spPr',
452
+ children,
453
+ };
454
+ }
455
+ createTextBox() {
456
+ if (!this.text) {
457
+ return { name: 'wps:txbx', selfClosing: true };
458
+ }
459
+ const rPrChildren = [];
460
+ if (this.textFormatting) {
461
+ if (this.textFormatting.bold) {
462
+ rPrChildren.push(XMLBuilder.wSelf('b'));
463
+ }
464
+ if (this.textFormatting.italic) {
465
+ rPrChildren.push(XMLBuilder.wSelf('i'));
466
+ }
467
+ if (this.textFormatting.color) {
468
+ rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.textFormatting.color }));
469
+ }
470
+ if (this.textFormatting.size) {
471
+ const halfPoints = pointsToHalfPoints(this.textFormatting.size);
472
+ rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': halfPoints }));
473
+ rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': halfPoints }));
474
+ }
475
+ }
476
+ const runChildren = [];
477
+ if (rPrChildren.length > 0) {
478
+ runChildren.push(XMLBuilder.w('rPr', undefined, rPrChildren));
479
+ }
480
+ runChildren.push(XMLBuilder.w('t', { 'xml:space': 'preserve' }, [this.text]));
481
+ const paragraph = XMLBuilder.w('p', undefined, [XMLBuilder.w('r', undefined, runChildren)]);
482
+ return {
483
+ name: 'wps:txbx',
484
+ children: [
485
+ {
486
+ name: 'w:txbxContent',
487
+ children: [paragraph],
488
+ },
489
+ ],
490
+ };
491
+ }
492
+ }
493
+ //# sourceMappingURL=Shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/elements/Shape.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAkGvD,MAAM,OAAO,KAAK;IACR,SAAS,CAAY;IACrB,KAAK,CAAS;IACd,MAAM,CAAS;IACf,IAAI,CAAa;IACjB,OAAO,CAAgB;IACvB,QAAQ,CAAiB;IACzB,MAAM,CAAe;IACrB,QAAQ,GAAG,CAAC,CAAC;IACb,IAAI,CAAU;IACd,cAAc,CAAiB;IAC/B,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,OAAO,GAAG,CAAC,CAAC;IAOpB,YAAoB,UAA2B;QAC7C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;IAClD,CAAC;IAWD,MAAM,CAAC,MAAM,CAAC,SAAoB,EAAE,KAAa,EAAE,MAAc;QAC/D,OAAO,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAQD,MAAM,CAAC,eAAe,CAAC,KAAa,EAAE,MAAc;QAClD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAOD,MAAM,CAAC,YAAY,CAAC,QAAgB;QAClC,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAQD,MAAM,CAAC,aAAa,CAAC,KAAa,EAAE,MAAc;QAChD,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IASD,MAAM,CAAC,WAAW,CAChB,SAA2C,EAC3C,KAAa,EACb,MAAc;QAEd,MAAM,SAAS,GAAG,GAAG,SAAS,OAAoB,CAAC;QACnD,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,KAAa;QAE7B,OAAO,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAMD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAMD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAQD,OAAO,CAAC,KAAa,EAAE,YAAqB;QAC1C,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IASD,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,KAA4C;QACnF,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAQD,WAAW,CACT,UAAwF,EACxF,QAAoF;QAEpF,IAAI,CAAC,QAAQ,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAOD,SAAS,CAAC,OAAoB;QAC5B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAOD,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAQD,OAAO,CAAC,IAAY,EAAE,UAA0B;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAOD,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAOD,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAOD,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;IAClE,CAAC;IAOD,KAAK;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAGnF,OAAO,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,CAAC;IAMO,YAAY;QAClB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAGlC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACzB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;aAC3B;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,UAAU,EAAE;gBACV,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;aACP;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE;gBACV,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,WAAW;aACxB;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAEpC,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;aACX;YACD,QAAQ;SACT,CAAC;IACJ,CAAC;IAMO,YAAY;QAClB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI;YAClC,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,SAAS;SAC1B,CAAC;QAGF,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;YAC9B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACtC,MAAM,YAAY,GAAiB,EAAE,CAAC;YAEtC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE;oBACV,YAAY,EAAE,IAAI,CAAC,MAAM;iBAC1B;gBACD,QAAQ,EAAE,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,MAAM,YAAY,GAAiB,EAAE,CAAC;YAEtC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE;oBACV,YAAY,EAAE,IAAI,CAAC,MAAM;iBAC1B;gBACD,QAAQ,EAAE,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;QAGD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACzB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;aAC3B;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,UAAU,EAAE;gBACV,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;aACP;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,eAAe;YACrB,UAAU,EAAE;gBACV,QAAQ,EAAE,WAAW;aACtB;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE;gBACV,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,WAAW;aACxB;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAEpC,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,GAAG;gBACV,SAAS,EAAE,GAAG;gBACd,cAAc,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE;gBACtD,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;gBAC7C,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;gBACvC,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;gBACnD,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;aACpD;YACD,QAAQ;SACT,CAAC;IACJ,CAAC;IAMO,aAAa;QACnB,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,SAAS,EAAE,uDAAuD;aACnE;YACD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,eAAe;oBACrB,UAAU,EAAE;wBACV,GAAG,EAAE,mEAAmE;qBACzE;oBACD,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;IAMO,SAAS;QACf,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAGlC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE;gBACV,WAAW,EAAE,mEAAmE;aACjF;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAGjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACtC,CAAC;QAGD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE;gBACV,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,GAAG;gBACX,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,GAAG;aACb;YACD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACV,WAAW,EAAE,mEAAmE;aACjF;YACD,QAAQ;SACT,CAAC;IACJ,CAAC;IAMO,UAAU;QAChB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAGlC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;oBAC9B,WAAW,EAAE,IAAI;iBAClB;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE;wBACV,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;wBACzB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;qBAC3B;oBACD,WAAW,EAAE,IAAI;iBAClB;aACF;SACF,CAAC,CAAC;QAGH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE;gBACV,IAAI,EAAE,IAAI,CAAC,SAAS;aACrB;YACD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,IAAI;iBAClB;aACF;SACF,CAAC,CAAC;QAGH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,YAAY,GAAiB,EAAE,CAAC;YAGtC,MAAM,UAAU,GAA2B;gBACzC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;aACnC,CAAC;YAGF,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAEzC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC3C,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE;wBACV,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE;qBACzC;oBACD,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,WAAW;wBACjB,UAAU,EAAE,UAAU;wBACtB,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;qBAClF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,OAAO,GAA2B;gBACtC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;aACjC,CAAC;YACF,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACrD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAEhE,MAAM,UAAU,GAAiB,EAAE,CAAC;YAGpC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,WAAW;wBACjB,UAAU,EAAE;4BACV,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;yBACtC;wBACD,WAAW,EAAE,IAAI;qBAClB;iBACF;aACF,CAAC,CAAC;YAGH,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBACzD,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE;wBACV,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;qBACxB;oBACD,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC;YAGD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAW,CAAC;gBACpF,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,QAAQ,EAAE,CAAC;oBACb,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ;SACT,CAAC;IACJ,CAAC;IAMO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACjD,CAAC;QAGD,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC7B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;gBAClE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAGD,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9E,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAE5F,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;aACF;SACF,CAAC;IACJ,CAAC;CACF","sourcesContent":["/**\n * Shape - Represents a drawing shape in a Word document\n *\n * Shapes use DrawingML (a:) and WordprocessingML Drawing (wp:) namespaces,\n * plus WordprocessingShape (wps:) namespace for Word 2010+ shape features.\n *\n * Per ECMA-376 Part 4 (Transitional) and Office Open XML extensions,\n * shapes in Word documents use the wps:wsp element structure.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\nimport { pointsToHalfPoints } from '../utils/units.js';\nimport { RunFormatting } from './Run.js';\nimport {\n ImagePosition,\n ImageAnchor,\n PositionAnchor,\n HorizontalAlignment,\n VerticalAlignment,\n} from './Image.js';\n\n/**\n * Preset shape types available in DrawingML\n * Based on ECMA-376 Part 1 §20.1.10.56 ST_ShapeType\n */\nexport type ShapeType =\n | 'rect' // Rectangle\n | 'ellipse' // Circle/Ellipse\n | 'rightArrow' // Right arrow\n | 'leftArrow' // Left arrow\n | 'upArrow' // Up arrow\n | 'downArrow' // Down arrow\n | 'straightConnector1' // Straight line\n | 'roundRect' // Rounded rectangle\n | 'triangle' // Triangle\n | 'diamond'; // Diamond\n\n/**\n * Shape fill configuration\n */\nexport interface ShapeFill {\n /** Fill color in hex (e.g., 'FF0000' for red) */\n color: string;\n /** Transparency percentage (0-100, where 100 is fully transparent) */\n transparency?: number;\n}\n\n/**\n * Shape outline/border configuration\n */\nexport interface ShapeOutline {\n /** Outline color in hex */\n color: string;\n /** Outline width in EMUs */\n width: number;\n /** Line dash style */\n style?:\n | 'solid'\n | 'dash'\n | 'dot'\n | 'dashDot'\n | 'lgDash'\n | 'lgDashDot'\n | 'lgDashDotDot'\n | 'sysDash'\n | 'sysDot'\n | 'sysDashDot'\n | 'sysDashDotDot';\n /** Line cap style (ECMA-376 §20.1.10.31) */\n cap?: 'flat' | 'rnd' | 'sq';\n /** Line join style (ECMA-376 §20.1.10.32) */\n join?: 'bevel' | 'miter' | 'round';\n /** Compound line type (ECMA-376 §20.1.10.15) */\n compound?: 'sng' | 'dbl' | 'thickThin' | 'thinThick' | 'tri';\n}\n\n/**\n * Shape properties\n */\nexport interface ShapeProperties {\n /** Shape type (preset geometry) */\n shapeType: ShapeType;\n /** Width in EMUs */\n width: number;\n /** Height in EMUs */\n height: number;\n /** Fill color and transparency */\n fill?: ShapeFill;\n /** Outline/border properties */\n outline?: ShapeOutline;\n /** Position configuration (reuses Image position types) */\n position?: ImagePosition;\n /** Anchor configuration (reuses Image anchor types) */\n anchor?: ImageAnchor;\n /** Rotation angle in degrees (0-360) */\n rotation?: number;\n /** Text content within the shape */\n text?: string;\n /** Text formatting */\n textFormatting?: RunFormatting;\n /** Shape name/title */\n name?: string;\n /** Shape description (for accessibility) */\n description?: string;\n}\n\n/**\n * Represents a drawing shape\n */\nexport class Shape {\n private shapeType: ShapeType;\n private width: number;\n private height: number;\n private fill?: ShapeFill;\n private outline?: ShapeOutline;\n private position?: ImagePosition;\n private anchor?: ImageAnchor;\n private rotation = 0;\n private text?: string;\n private textFormatting?: RunFormatting;\n private name: string;\n private description: string;\n private docPrId = 1;\n\n /**\n * Creates a new shape\n * @param properties Shape properties\n * @private Use static factory methods instead (create, createRectangle, etc.)\n */\n private constructor(properties: ShapeProperties) {\n this.shapeType = properties.shapeType;\n this.width = properties.width;\n this.height = properties.height;\n this.fill = properties.fill;\n this.outline = properties.outline;\n this.position = properties.position;\n this.anchor = properties.anchor;\n this.rotation = properties.rotation || 0;\n this.text = properties.text;\n this.textFormatting = properties.textFormatting;\n this.name = properties.name || 'Shape';\n this.description = properties.description || '';\n }\n\n /**\n * Factory method for creating a shape\n * @param shapeType Shape type\n * @param width Width in EMUs (or use inchesToEmus)\n * @param height Height in EMUs (or use inchesToEmus)\n * @returns New Shape instance\n * @example\n * const rect = Shape.create('rect', inchesToEmus(2), inchesToEmus(1));\n */\n static create(shapeType: ShapeType, width: number, height: number): Shape {\n return new Shape({ shapeType, width, height });\n }\n\n /**\n * Creates a rectangle shape\n * @param width Width in EMUs\n * @param height Height in EMUs\n * @returns New Shape instance\n */\n static createRectangle(width: number, height: number): Shape {\n return Shape.create('rect', width, height);\n }\n\n /**\n * Creates a circle shape\n * @param diameter Diameter in EMUs\n * @returns New Shape instance\n */\n static createCircle(diameter: number): Shape {\n return Shape.create('ellipse', diameter, diameter);\n }\n\n /**\n * Creates an ellipse shape\n * @param width Width in EMUs\n * @param height Height in EMUs\n * @returns New Shape instance\n */\n static createEllipse(width: number, height: number): Shape {\n return Shape.create('ellipse', width, height);\n }\n\n /**\n * Creates an arrow shape\n * @param direction Arrow direction\n * @param width Width in EMUs\n * @param height Height in EMUs\n * @returns New Shape instance\n */\n static createArrow(\n direction: 'right' | 'left' | 'up' | 'down',\n width: number,\n height: number\n ): Shape {\n const shapeType = `${direction}Arrow` as ShapeType;\n return Shape.create(shapeType, width, height);\n }\n\n /**\n * Creates a line shape\n * @param width Line width in EMUs\n * @returns New Shape instance\n */\n static createLine(width: number): Shape {\n // Lines are typically very thin in height\n return Shape.create('straightConnector1', width, 12700); // 12700 EMU ≈ 1pt height\n }\n\n /**\n * Gets the shape type\n * @returns Shape type\n */\n getShapeType(): ShapeType {\n return this.shapeType;\n }\n\n /**\n * Gets the shape width in EMUs\n * @returns Width\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Gets the shape height in EMUs\n * @returns Height\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Sets the shape fill color\n * @param color Fill color in hex (e.g., 'FF0000')\n * @param transparency Optional transparency percentage (0-100)\n * @returns This shape 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(): ShapeFill | undefined {\n return this.fill;\n }\n\n /**\n * Sets the shape outline\n * @param color Outline color in hex\n * @param width Outline width in EMUs\n * @param style Line style\n * @returns This shape for chaining\n */\n setOutline(color: string, width: number, style?: 'solid' | 'dash' | 'dot' | 'dashDot'): this {\n this.outline = { color, width, style: style || 'solid' };\n return this;\n }\n\n /**\n * Gets the outline configuration\n * @returns Outline or undefined\n */\n getOutline(): ShapeOutline | undefined {\n return this.outline;\n }\n\n /**\n * Sets shape position (for floating shapes)\n * @param horizontal Horizontal positioning configuration\n * @param vertical Vertical positioning configuration\n * @returns This shape 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 (converts shape to floating)\n * @param options Anchor configuration\n * @returns This shape 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 rotation angle\n * @param degrees Rotation in degrees (0-360)\n * @returns This shape for chaining\n */\n setRotation(degrees: number): this {\n this.rotation = ((degrees % 360) + 360) % 360;\n return this;\n }\n\n /**\n * Gets the rotation angle\n * @returns Rotation in degrees\n */\n getRotation(): number {\n return this.rotation;\n }\n\n /**\n * Sets text content within the shape\n * @param text Text content\n * @param formatting Optional text formatting\n * @returns This shape for chaining\n */\n setText(text: string, formatting?: RunFormatting): this {\n this.text = text;\n if (formatting) {\n this.textFormatting = formatting;\n }\n return this;\n }\n\n /**\n * Gets the text content\n * @returns Text or undefined\n */\n getText(): string | undefined {\n return this.text;\n }\n\n /**\n * Sets the shape name\n * @param name Shape name\n * @returns This shape for chaining\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the shape name\n * @returns Shape name\n */\n getName(): string {\n return this.name;\n }\n\n /**\n * Sets the shape description (for accessibility)\n * @param description Shape description\n * @returns This shape for chaining\n */\n setDescription(description: string): this {\n this.description = description;\n return this;\n }\n\n /**\n * Gets the shape description\n * @returns Shape 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 shape for chaining\n */\n setDocPrId(id: number): this {\n this.docPrId = id;\n return this;\n }\n\n /**\n * Checks if this shape 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 shape\n * Creates either inline or floating (anchor) shape based on configuration\n * @returns XML element representing the shape\n */\n toXML(): XMLElement {\n // Choose between inline and anchor based on configuration\n const shapeElement = this.isFloating() ? this.createAnchor() : this.createInline();\n\n // Create the drawing structure\n return XMLBuilder.w('drawing', undefined, [shapeElement]);\n }\n\n /**\n * Creates the wp:inline element for inline shapes\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 (set to 0 for shapes)\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 actual shape)\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 shapes\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)\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 shapes)\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 actual shape)\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 shape\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)\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 },\n selfClosing: true,\n });\n\n // Shape properties (geometry, fill, outline)\n children.push(this.createSpPr());\n\n // Text box (if text is present)\n if (this.text) {\n children.push(this.createTextBox());\n }\n\n // Body properties (required per CT_WordprocessingShape)\n children.push({\n name: 'wps:bodyPr',\n attributes: {\n rot: '0',\n vert: 'horz',\n wrap: 'square',\n lIns: '91440',\n tIns: '45720',\n rIns: '91440',\n bIns: '45720',\n anchor: 't',\n anchorCtr: '0',\n upright: '1',\n },\n selfClosing: true,\n });\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:spPr element (shape properties)\n * @private\n */\n private createSpPr(): XMLElement {\n const children: XMLElement[] = [];\n\n // Transform (position and size)\n const xfrmAttrs = this.rotation > 0 ? { rot: (this.rotation * 60000).toString() } : undefined;\n children.push({\n name: 'a:xfrm',\n attributes: xfrmAttrs,\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 (shape type)\n children.push({\n name: 'a:prstGeom',\n attributes: {\n prst: this.shapeType,\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 // Color\n const colorAttrs: Record<string, string> = {\n val: this.fill.color.toUpperCase(),\n };\n\n // Transparency (alpha percentage)\n if (this.fill.transparency !== undefined) {\n // Convert 0-100 to 0-100000 (percentage * 1000)\n const alpha = 100 - this.fill.transparency; // Invert (0=transparent, 100=opaque)\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: colorAttrs,\n ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),\n },\n ],\n });\n }\n\n // Outline\n if (this.outline) {\n const lnAttrs: Record<string, string> = {\n w: this.outline.width.toString(),\n };\n if (this.outline.cap) lnAttrs.cap = this.outline.cap;\n if (this.outline.compound) lnAttrs.cmpd = this.outline.compound;\n\n const lnChildren: XMLElement[] = [];\n\n // Outline color\n lnChildren.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: this.outline.color.toUpperCase(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Line style (prstDash)\n if (this.outline.style && this.outline.style !== 'solid') {\n lnChildren.push({\n name: 'a:prstDash',\n attributes: {\n val: this.outline.style,\n },\n selfClosing: true,\n });\n }\n\n // Line join style\n if (this.outline.join) {\n const joinNames = { bevel: 'a:bevel', miter: 'a:miter', round: 'a:round' } as const;\n const joinName = joinNames[this.outline.join];\n if (joinName) {\n lnChildren.push({\n name: joinName,\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 within shape)\n * @private\n */\n private createTextBox(): XMLElement {\n if (!this.text) {\n return { name: 'wps:txbx', selfClosing: true };\n }\n\n // Build run properties\n const rPrChildren: XMLElement[] = [];\n if (this.textFormatting) {\n if (this.textFormatting.bold) {\n rPrChildren.push(XMLBuilder.wSelf('b'));\n }\n if (this.textFormatting.italic) {\n rPrChildren.push(XMLBuilder.wSelf('i'));\n }\n if (this.textFormatting.color) {\n rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.textFormatting.color }));\n }\n if (this.textFormatting.size) {\n const halfPoints = pointsToHalfPoints(this.textFormatting.size);\n rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': halfPoints }));\n rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': halfPoints }));\n }\n }\n\n // Build paragraph with run\n const runChildren: XMLElement[] = [];\n if (rPrChildren.length > 0) {\n runChildren.push(XMLBuilder.w('rPr', undefined, rPrChildren));\n }\n runChildren.push(XMLBuilder.w('t', { 'xml:space': 'preserve' }, [this.text]));\n\n const paragraph = XMLBuilder.w('p', undefined, [XMLBuilder.w('r', undefined, runChildren)]);\n\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: [paragraph],\n },\n ],\n };\n }\n}\n"]}