@syncfusion/ej2-docx 0.0.0-stage → 35.1.40

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 (417) hide show
  1. package/.gitleaksignore +35 -0
  2. package/README.md +68 -2
  3. package/core.js +4 -0
  4. package/dist/ej2-docx.umd.min.js +11 -0
  5. package/dist/ej2-docx.umd.min.js.map +1 -0
  6. package/dist/es6/ej2-docx.es2015.js +66697 -0
  7. package/dist/es6/ej2-docx.es2015.js.map +1 -0
  8. package/dist/es6/ej2-docx.es5.js +77568 -0
  9. package/dist/es6/ej2-docx.es5.js.map +1 -0
  10. package/dist/global/ej2-docx.min.js +11 -0
  11. package/dist/global/ej2-docx.min.js.map +1 -0
  12. package/dist/global/index.d.ts +14 -0
  13. package/features.js +4 -0
  14. package/index.js +4 -0
  15. package/license +10 -0
  16. package/package.json +30 -3
  17. package/src/all.d.ts +50 -0
  18. package/src/all.js +147 -0
  19. package/src/core/compat/base64.d.ts +13 -0
  20. package/src/core/compat/base64.js +90 -0
  21. package/src/core/compat/object-compat.d.ts +30 -0
  22. package/src/core/compat/object-compat.js +40 -0
  23. package/src/core/compat/sha256.d.ts +9 -0
  24. package/src/core/compat/sha256.js +98 -0
  25. package/src/core/errors/docx-error.d.ts +89 -0
  26. package/src/core/errors/docx-error.js +138 -0
  27. package/src/core/errors/error-codes.d.ts +8 -0
  28. package/src/core/errors/error-codes.js +0 -0
  29. package/src/core/errors/index.d.ts +10 -0
  30. package/src/core/errors/index.js +9 -0
  31. package/src/core/index.d.ts +12 -0
  32. package/src/core/index.js +12 -0
  33. package/src/core/mc/alternate-content.d.ts +7 -0
  34. package/src/core/mc/alternate-content.js +67 -0
  35. package/src/core/mc/attributes.d.ts +24 -0
  36. package/src/core/mc/attributes.js +82 -0
  37. package/src/core/mc/index.d.ts +7 -0
  38. package/src/core/mc/index.js +5 -0
  39. package/src/core/mc/inspect.d.ts +16 -0
  40. package/src/core/mc/inspect.js +148 -0
  41. package/src/core/mc/namespaces.d.ts +4 -0
  42. package/src/core/mc/namespaces.js +4 -0
  43. package/src/core/mc/scope.d.ts +6 -0
  44. package/src/core/mc/scope.js +47 -0
  45. package/src/core/opc/content-types.d.ts +34 -0
  46. package/src/core/opc/content-types.js +162 -0
  47. package/src/core/opc/index.d.ts +8 -0
  48. package/src/core/opc/index.js +4 -0
  49. package/src/core/opc/package.d.ts +49 -0
  50. package/src/core/opc/package.js +324 -0
  51. package/src/core/opc/part-name.d.ts +47 -0
  52. package/src/core/opc/part-name.js +205 -0
  53. package/src/core/opc/relationships.d.ts +46 -0
  54. package/src/core/opc/relationships.js +212 -0
  55. package/src/core/preservation/index.d.ts +2 -0
  56. package/src/core/preservation/index.js +1 -0
  57. package/src/core/preservation/opaque-body.d.ts +16 -0
  58. package/src/core/preservation/opaque-body.js +69 -0
  59. package/src/core/registry/block-handlers.d.ts +30 -0
  60. package/src/core/registry/block-handlers.js +36 -0
  61. package/src/core/registry/create-defaults.d.ts +39 -0
  62. package/src/core/registry/create-defaults.js +42 -0
  63. package/src/core/registry/feature-registry.d.ts +20 -0
  64. package/src/core/registry/feature-registry.js +29 -0
  65. package/src/core/registry/index.d.ts +9 -0
  66. package/src/core/registry/index.js +8 -0
  67. package/src/core/registry/inline-handlers.d.ts +20 -0
  68. package/src/core/registry/inline-handlers.js +30 -0
  69. package/src/core/registry/materialize-handlers.d.ts +35 -0
  70. package/src/core/registry/materialize-handlers.js +75 -0
  71. package/src/core/registry/multi-part-handlers.d.ts +37 -0
  72. package/src/core/registry/multi-part-handlers.js +206 -0
  73. package/src/core/registry/package-part-handlers.d.ts +28 -0
  74. package/src/core/registry/package-part-handlers.js +190 -0
  75. package/src/core/registry/part-handlers.d.ts +24 -0
  76. package/src/core/registry/part-handlers.js +172 -0
  77. package/src/core/registry/run-leaf-handlers.d.ts +26 -0
  78. package/src/core/registry/run-leaf-handlers.js +72 -0
  79. package/src/core/security/limits.d.ts +40 -0
  80. package/src/core/security/limits.js +26 -0
  81. package/src/core/xml/index.d.ts +7 -0
  82. package/src/core/xml/index.js +3 -0
  83. package/src/core/xml/model.d.ts +66 -0
  84. package/src/core/xml/model.js +17 -0
  85. package/src/core/xml/parse.d.ts +12 -0
  86. package/src/core/xml/parse.js +382 -0
  87. package/src/core/xml/serialize.d.ts +6 -0
  88. package/src/core/xml/serialize.js +93 -0
  89. package/src/core/zip/crc32.d.ts +2 -0
  90. package/src/core/zip/crc32.js +25 -0
  91. package/src/core/zip/deflate.d.ts +6 -0
  92. package/src/core/zip/deflate.js +6 -0
  93. package/src/core/zip/index.d.ts +10 -0
  94. package/src/core/zip/index.js +4 -0
  95. package/src/core/zip/inflate-raw.d.ts +17 -0
  96. package/src/core/zip/inflate-raw.js +450 -0
  97. package/src/core/zip/names.d.ts +6 -0
  98. package/src/core/zip/names.js +52 -0
  99. package/src/core/zip/read.d.ts +8 -0
  100. package/src/core/zip/read.js +262 -0
  101. package/src/core/zip/write.d.ts +7 -0
  102. package/src/core/zip/write.js +189 -0
  103. package/src/core/zip/zip-entry.d.ts +4 -0
  104. package/src/core/zip/zip-entry.js +0 -0
  105. package/src/features/bibliography/index.d.ts +100 -0
  106. package/src/features/bibliography/index.js +290 -0
  107. package/src/features/bookmarks/index.d.ts +331 -0
  108. package/src/features/bookmarks/index.js +1009 -0
  109. package/src/features/comments/comment-extensions.d.ts +157 -0
  110. package/src/features/comments/comment-extensions.js +356 -0
  111. package/src/features/comments/index.d.ts +579 -0
  112. package/src/features/comments/index.js +1727 -0
  113. package/src/features/content-controls/index.d.ts +821 -0
  114. package/src/features/content-controls/index.js +2857 -0
  115. package/src/features/custom-xml/index.d.ts +236 -0
  116. package/src/features/custom-xml/index.js +661 -0
  117. package/src/features/document/alignment.d.ts +23 -0
  118. package/src/features/document/alignment.js +36 -0
  119. package/src/features/document/alt-chunk.d.ts +103 -0
  120. package/src/features/document/alt-chunk.js +221 -0
  121. package/src/features/document/assert-never.d.ts +1 -0
  122. package/src/features/document/assert-never.js +4 -0
  123. package/src/features/document/augmentations.d.ts +578 -0
  124. package/src/features/document/augmentations.js +0 -0
  125. package/src/features/document/body-always-on.d.ts +36 -0
  126. package/src/features/document/body-always-on.js +66 -0
  127. package/src/features/document/body-blocks.d.ts +7 -0
  128. package/src/features/document/body-blocks.js +78 -0
  129. package/src/features/document/body-item-adapters.d.ts +62 -0
  130. package/src/features/document/body-item-adapters.js +97 -0
  131. package/src/features/document/body-item-collection.d.ts +151 -0
  132. package/src/features/document/body-item-collection.js +440 -0
  133. package/src/features/document/body-item.d.ts +35 -0
  134. package/src/features/document/body-item.js +8 -0
  135. package/src/features/document/body.d.ts +150 -0
  136. package/src/features/document/body.js +263 -0
  137. package/src/features/document/character-format.d.ts +413 -0
  138. package/src/features/document/character-format.js +2054 -0
  139. package/src/features/document/color.d.ts +178 -0
  140. package/src/features/document/color.js +495 -0
  141. package/src/features/document/document.d.ts +410 -0
  142. package/src/features/document/document.js +1049 -0
  143. package/src/features/document/element-type.d.ts +68 -0
  144. package/src/features/document/element-type.js +133 -0
  145. package/src/features/document/entity-type.d.ts +92 -0
  146. package/src/features/document/entity-type.js +93 -0
  147. package/src/features/document/feature-block.d.ts +16 -0
  148. package/src/features/document/feature-block.js +0 -0
  149. package/src/features/document/feature-inline.d.ts +13 -0
  150. package/src/features/document/feature-inline.js +0 -0
  151. package/src/features/document/feature-multi-package-part.d.ts +19 -0
  152. package/src/features/document/feature-multi-package-part.js +8 -0
  153. package/src/features/document/feature-package-level-part.d.ts +18 -0
  154. package/src/features/document/feature-package-level-part.js +8 -0
  155. package/src/features/document/feature-package-part.d.ts +14 -0
  156. package/src/features/document/feature-package-part.js +0 -0
  157. package/src/features/document/feature-run-leaf.d.ts +9 -0
  158. package/src/features/document/feature-run-leaf.js +0 -0
  159. package/src/features/document/headers-footers.d.ts +206 -0
  160. package/src/features/document/headers-footers.js +384 -0
  161. package/src/features/document/index.d.ts +41 -0
  162. package/src/features/document/index.js +34 -0
  163. package/src/features/document/length.d.ts +152 -0
  164. package/src/features/document/length.js +245 -0
  165. package/src/features/document/load-options.d.ts +14 -0
  166. package/src/features/document/load-options.js +0 -0
  167. package/src/features/document/locale-ids.d.ts +227 -0
  168. package/src/features/document/locale-ids.js +485 -0
  169. package/src/features/document/on-off.d.ts +9 -0
  170. package/src/features/document/on-off.js +27 -0
  171. package/src/features/document/page-setup.d.ts +339 -0
  172. package/src/features/document/page-setup.js +244 -0
  173. package/src/features/document/paragraph-format.d.ts +880 -0
  174. package/src/features/document/paragraph-format.js +2807 -0
  175. package/src/features/document/paragraph-item-collection.d.ts +162 -0
  176. package/src/features/document/paragraph-item-collection.js +363 -0
  177. package/src/features/document/paragraph-item.d.ts +83 -0
  178. package/src/features/document/paragraph-item.js +103 -0
  179. package/src/features/document/paragraph.d.ts +435 -0
  180. package/src/features/document/paragraph.js +888 -0
  181. package/src/features/document/run.d.ts +1 -0
  182. package/src/features/document/run.js +768 -0
  183. package/src/features/document/section-partition-flatten.d.ts +124 -0
  184. package/src/features/document/section-partition-flatten.js +217 -0
  185. package/src/features/document/section-properties-model.d.ts +13 -0
  186. package/src/features/document/section-properties-model.js +0 -0
  187. package/src/features/document/section.d.ts +93 -0
  188. package/src/features/document/section.js +178 -0
  189. package/src/features/document/sections.d.ts +103 -0
  190. package/src/features/document/sections.js +217 -0
  191. package/src/features/document/sub-super-script.d.ts +23 -0
  192. package/src/features/document/sub-super-script.js +43 -0
  193. package/src/features/document/text-range.d.ts +445 -0
  194. package/src/features/document/text-range.js +1156 -0
  195. package/src/features/document/typed-body-collections.d.ts +162 -0
  196. package/src/features/document/typed-body-collections.js +371 -0
  197. package/src/features/document/underline-style.d.ts +38 -0
  198. package/src/features/document/underline-style.js +126 -0
  199. package/src/features/document/units.d.ts +8 -0
  200. package/src/features/document/units.js +7 -0
  201. package/src/features/document/wml.d.ts +16 -0
  202. package/src/features/document/wml.js +67 -0
  203. package/src/features/drawing/authoring.d.ts +27 -0
  204. package/src/features/drawing/authoring.js +271 -0
  205. package/src/features/drawing/body-pr.d.ts +271 -0
  206. package/src/features/drawing/body-pr.js +663 -0
  207. package/src/features/drawing/drawing-shape.d.ts +1192 -0
  208. package/src/features/drawing/drawing-shape.js +3239 -0
  209. package/src/features/drawing/encode-builders.d.ts +176 -0
  210. package/src/features/drawing/encode-builders.js +390 -0
  211. package/src/features/drawing/fill-format.d.ts +52 -0
  212. package/src/features/drawing/fill-format.js +124 -0
  213. package/src/features/drawing/host-codec.d.ts +632 -0
  214. package/src/features/drawing/host-codec.js +2595 -0
  215. package/src/features/drawing/index.d.ts +13 -0
  216. package/src/features/drawing/index.js +33 -0
  217. package/src/features/drawing/line-format.d.ts +76 -0
  218. package/src/features/drawing/line-format.js +343 -0
  219. package/src/features/drawing/parse-register.d.ts +50 -0
  220. package/src/features/drawing/parse-register.js +257 -0
  221. package/src/features/drawing/residual-utils.d.ts +47 -0
  222. package/src/features/drawing/residual-utils.js +290 -0
  223. package/src/features/drawing/shape-types.d.ts +433 -0
  224. package/src/features/drawing/shape-types.js +437 -0
  225. package/src/features/drawing/sp-pr.d.ts +396 -0
  226. package/src/features/drawing/sp-pr.js +610 -0
  227. package/src/features/drawing/text-frame.d.ts +90 -0
  228. package/src/features/drawing/text-frame.js +152 -0
  229. package/src/features/drawing/types.d.ts +352 -0
  230. package/src/features/drawing/types.js +60 -0
  231. package/src/features/drawing/wrap-format.d.ts +62 -0
  232. package/src/features/drawing/wrap-format.js +114 -0
  233. package/src/features/editable-ranges/index.d.ts +494 -0
  234. package/src/features/editable-ranges/index.js +1348 -0
  235. package/src/features/fields/index.d.ts +428 -0
  236. package/src/features/fields/index.js +2148 -0
  237. package/src/features/fields/paragraph-field.d.ts +187 -0
  238. package/src/features/fields/paragraph-field.js +692 -0
  239. package/src/features/font-table/font-substitution-table.d.ts +75 -0
  240. package/src/features/font-table/font-substitution-table.js +257 -0
  241. package/src/features/font-table/font-table-entry.d.ts +255 -0
  242. package/src/features/font-table/font-table-entry.js +823 -0
  243. package/src/features/font-table/font-table.d.ts +128 -0
  244. package/src/features/font-table/font-table.js +313 -0
  245. package/src/features/font-table/index.d.ts +27 -0
  246. package/src/features/font-table/index.js +48 -0
  247. package/src/features/glossary/index.d.ts +97 -0
  248. package/src/features/glossary/index.js +286 -0
  249. package/src/features/headers-footers/index.d.ts +506 -0
  250. package/src/features/headers-footers/index.js +1666 -0
  251. package/src/features/hyperlinks/index.d.ts +230 -0
  252. package/src/features/hyperlinks/index.js +685 -0
  253. package/src/features/images/caption-authoring-api.d.ts +33 -0
  254. package/src/features/images/caption-authoring-api.js +33 -0
  255. package/src/features/images/caption-enums.d.ts +52 -0
  256. package/src/features/images/caption-enums.js +141 -0
  257. package/src/features/images/caption-host.d.ts +10 -0
  258. package/src/features/images/caption-host.js +21 -0
  259. package/src/features/images/captions.d.ts +13 -0
  260. package/src/features/images/captions.js +142 -0
  261. package/src/features/images/host-codec.d.ts +103 -0
  262. package/src/features/images/host-codec.js +720 -0
  263. package/src/features/images/image-sniff.d.ts +21 -0
  264. package/src/features/images/image-sniff.js +71 -0
  265. package/src/features/images/index.d.ts +506 -0
  266. package/src/features/images/index.js +1429 -0
  267. package/src/features/images/layout-types.d.ts +232 -0
  268. package/src/features/images/layout-types.js +294 -0
  269. package/src/features/images/public-entry.d.ts +9 -0
  270. package/src/features/images/public-entry.js +9 -0
  271. package/src/features/index.d.ts +35 -0
  272. package/src/features/index.js +36 -0
  273. package/src/features/mail-merge/index.d.ts +113 -0
  274. package/src/features/mail-merge/index.js +315 -0
  275. package/src/features/notes/index.d.ts +573 -0
  276. package/src/features/notes/index.js +1725 -0
  277. package/src/features/numbering/abstract-numbering.d.ts +90 -0
  278. package/src/features/numbering/abstract-numbering.js +292 -0
  279. package/src/features/numbering/index.d.ts +182 -0
  280. package/src/features/numbering/index.js +668 -0
  281. package/src/features/numbering/list-format.d.ts +158 -0
  282. package/src/features/numbering/list-format.js +590 -0
  283. package/src/features/numbering/list-string.d.ts +7 -0
  284. package/src/features/numbering/list-string.js +423 -0
  285. package/src/features/numbering/list-style.d.ts +204 -0
  286. package/src/features/numbering/list-style.js +1084 -0
  287. package/src/features/numbering/numbering-instance.d.ts +101 -0
  288. package/src/features/numbering/numbering-instance.js +329 -0
  289. package/src/features/numbering/numbering-level.d.ts +118 -0
  290. package/src/features/numbering/numbering-level.js +501 -0
  291. package/src/features/numbering/picture-bullet.d.ts +34 -0
  292. package/src/features/numbering/picture-bullet.js +88 -0
  293. package/src/features/ole-object/catalog.d.ts +300 -0
  294. package/src/features/ole-object/catalog.js +908 -0
  295. package/src/features/ole-object/index.d.ts +526 -0
  296. package/src/features/ole-object/index.js +1421 -0
  297. package/src/features/ole-object/relationship.d.ts +27 -0
  298. package/src/features/ole-object/relationship.js +27 -0
  299. package/src/features/ole-object/typed-dom.d.ts +186 -0
  300. package/src/features/ole-object/typed-dom.js +595 -0
  301. package/src/features/properties/index.d.ts +205 -0
  302. package/src/features/properties/index.js +549 -0
  303. package/src/features/revisions/index.d.ts +204 -0
  304. package/src/features/revisions/index.js +695 -0
  305. package/src/features/sections/column-collection.d.ts +119 -0
  306. package/src/features/sections/column-collection.js +478 -0
  307. package/src/features/sections/column.d.ts +15 -0
  308. package/src/features/sections/column.js +37 -0
  309. package/src/features/sections/index.d.ts +91 -0
  310. package/src/features/sections/index.js +1096 -0
  311. package/src/features/sections/margins.d.ts +40 -0
  312. package/src/features/sections/margins.js +105 -0
  313. package/src/features/sections/page-number-style.d.ts +21 -0
  314. package/src/features/sections/page-number-style.js +62 -0
  315. package/src/features/sections/page-orientation.d.ts +10 -0
  316. package/src/features/sections/page-orientation.js +10 -0
  317. package/src/features/sections/page-setup.d.ts +435 -0
  318. package/src/features/sections/page-setup.js +1479 -0
  319. package/src/features/sections/page-size.d.ts +59 -0
  320. package/src/features/sections/page-size.js +68 -0
  321. package/src/features/sections/section-break-code.d.ts +27 -0
  322. package/src/features/sections/section-break-code.js +60 -0
  323. package/src/features/sections/section-document-association.d.ts +18 -0
  324. package/src/features/sections/section-document-association.js +31 -0
  325. package/src/features/sections/section-validation.d.ts +43 -0
  326. package/src/features/sections/section-validation.js +97 -0
  327. package/src/features/settings/attached-template.d.ts +35 -0
  328. package/src/features/settings/attached-template.js +98 -0
  329. package/src/features/settings/compat-settings.d.ts +216 -0
  330. package/src/features/settings/compat-settings.js +508 -0
  331. package/src/features/settings/document-background.d.ts +59 -0
  332. package/src/features/settings/document-background.js +131 -0
  333. package/src/features/settings/document-protection.d.ts +65 -0
  334. package/src/features/settings/document-protection.js +157 -0
  335. package/src/features/settings/document-settings-facades.d.ts +108 -0
  336. package/src/features/settings/document-settings-facades.js +312 -0
  337. package/src/features/settings/document-settings-values.d.ts +43 -0
  338. package/src/features/settings/document-settings-values.js +60 -0
  339. package/src/features/settings/footnote-properties.d.ts +211 -0
  340. package/src/features/settings/footnote-properties.js +591 -0
  341. package/src/features/settings/index.d.ts +356 -0
  342. package/src/features/settings/index.js +829 -0
  343. package/src/features/settings/settings-children.d.ts +151 -0
  344. package/src/features/settings/settings-children.js +505 -0
  345. package/src/features/settings/web-settings.d.ts +88 -0
  346. package/src/features/settings/web-settings.js +227 -0
  347. package/src/features/settings/zoom.d.ts +79 -0
  348. package/src/features/settings/zoom.js +147 -0
  349. package/src/features/styles/builtin-catalog.d.ts +159 -0
  350. package/src/features/styles/builtin-catalog.js +963 -0
  351. package/src/features/styles/builtin-resolver.d.ts +49 -0
  352. package/src/features/styles/builtin-resolver.js +165 -0
  353. package/src/features/styles/default-styles.d.ts +37 -0
  354. package/src/features/styles/default-styles.js +186 -0
  355. package/src/features/styles/default-theme.d.ts +13 -0
  356. package/src/features/styles/default-theme.js +13 -0
  357. package/src/features/styles/doc-defaults.d.ts +58 -0
  358. package/src/features/styles/doc-defaults.js +178 -0
  359. package/src/features/styles/formatting-resolver.d.ts +27 -0
  360. package/src/features/styles/formatting-resolver.js +72 -0
  361. package/src/features/styles/index.d.ts +256 -0
  362. package/src/features/styles/index.js +1325 -0
  363. package/src/features/styles/latent-styles.d.ts +68 -0
  364. package/src/features/styles/latent-styles.js +305 -0
  365. package/src/features/styles/paragraph-properties.d.ts +71 -0
  366. package/src/features/styles/paragraph-properties.js +237 -0
  367. package/src/features/styles/run-properties.d.ts +93 -0
  368. package/src/features/styles/run-properties.js +516 -0
  369. package/src/features/styles/style-base.d.ts +402 -0
  370. package/src/features/styles/style-base.js +1026 -0
  371. package/src/features/styles/style-collection.d.ts +264 -0
  372. package/src/features/styles/style-collection.js +714 -0
  373. package/src/features/styles/style-format-bridge.d.ts +64 -0
  374. package/src/features/styles/style-format-bridge.js +100 -0
  375. package/src/features/styles/style.d.ts +84 -0
  376. package/src/features/styles/style.js +375 -0
  377. package/src/features/styles/styles-with-effects.d.ts +71 -0
  378. package/src/features/styles/styles-with-effects.js +180 -0
  379. package/src/features/styles/table-style.d.ts +272 -0
  380. package/src/features/styles/table-style.js +1226 -0
  381. package/src/features/styles/theme.d.ts +126 -0
  382. package/src/features/styles/theme.js +377 -0
  383. package/src/features/tables/border-style-map.d.ts +24 -0
  384. package/src/features/tables/border-style-map.js +81 -0
  385. package/src/features/tables/borders.d.ts +126 -0
  386. package/src/features/tables/borders.js +527 -0
  387. package/src/features/tables/collections.d.ts +113 -0
  388. package/src/features/tables/collections.js +261 -0
  389. package/src/features/tables/format.d.ts +208 -0
  390. package/src/features/tables/format.js +716 -0
  391. package/src/features/tables/index.d.ts +597 -0
  392. package/src/features/tables/index.js +2386 -0
  393. package/src/features/tables/paddings.d.ts +41 -0
  394. package/src/features/tables/paddings.js +97 -0
  395. package/src/features/tables/tbl-pr-positioning.d.ts +27 -0
  396. package/src/features/tables/tbl-pr-positioning.js +178 -0
  397. package/src/features/tables/tbl-pr.d.ts +528 -0
  398. package/src/features/tables/tbl-pr.js +1208 -0
  399. package/src/features/tables/tc-pr.d.ts +168 -0
  400. package/src/features/tables/tc-pr.js +553 -0
  401. package/src/features/tables/tr-pr.d.ts +60 -0
  402. package/src/features/tables/tr-pr.js +215 -0
  403. package/src/features/watermark/detect.d.ts +76 -0
  404. package/src/features/watermark/detect.js +219 -0
  405. package/src/features/watermark/index.d.ts +28 -0
  406. package/src/features/watermark/index.js +91 -0
  407. package/src/features/watermark/logical-store.d.ts +29 -0
  408. package/src/features/watermark/logical-store.js +31 -0
  409. package/src/features/watermark/model.d.ts +285 -0
  410. package/src/features/watermark/model.js +597 -0
  411. package/src/features/watermark/parse.d.ts +84 -0
  412. package/src/features/watermark/parse.js +815 -0
  413. package/src/features/watermark/serialize.d.ts +98 -0
  414. package/src/features/watermark/serialize.js +1517 -0
  415. package/src/global.js +1 -0
  416. package/src/index.d.ts +2 -0
  417. package/src/index.js +2 -0
@@ -0,0 +1,888 @@
1
+ var __values = (this && this.__values) || function (o) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
3
+ if (m) return m.call(o);
4
+ return {
5
+ next: function () {
6
+ if (o && i >= o.length) o = void 0;
7
+ return { value: o && o[i++], done: !o };
8
+ }
9
+ };
10
+ };
11
+ import { DetachedObjectError, DocxError } from '../../core/errors/docx-error';
12
+ import { tryParseFeatureInline, } from '../../core/registry/inline-handlers';
13
+ import { CharacterFormat, parseCharacterFormat, } from './character-format';
14
+ import { emptyParagraphFormatSnapshot, ParagraphFormat, parseParagraphFormat, } from './paragraph-format';
15
+ import { ParagraphItemCollection, } from './paragraph-item-collection';
16
+ import { Break, BreakClearType, BreakType, createStandaloneBreakItem, createStandaloneSymbolItem, createTextAndTabItems, FeatureInlineParagraphItem, FeatureRunParagraphItem, OpaqueParagraphItem, parseTextRangeGroup, serializeParagraphItems, Tab, TextRange, WireRunGroup, } from './text-range';
17
+ import { elementChildren, isWml, wValAttribute, wmlAttr, wmlElement } from './wml';
18
+ /**
19
+ * Factory for {@link Paragraph.listFormat} — registered by the numbering feature
20
+ * to avoid Vitest ESM-breaking extensionless CJS require of list-format.
21
+ * @private
22
+ */
23
+ var listFormatFactory;
24
+ /**
25
+ * @private Registers the ListFormat constructor bridge (called from numbering feature load).
26
+ */
27
+ export function setListFormatFactory(factory) {
28
+ listFormatFactory = factory;
29
+ }
30
+ /**
31
+ * @private Test-only reset.
32
+ */
33
+ export function resetListFormatFactoryForTests() {
34
+ listFormatFactory = undefined;
35
+ }
36
+ /**
37
+ * WordprocessingML paragraph (`w:p`).
38
+ *
39
+ * Paragraph properties live on {@link Paragraph.paragraphFormat} (`w:pPr`).
40
+ * Paragraph-mark character formatting lives on
41
+ * {@link Paragraph.breakCharacterFormat} (`w:pPr/w:rPr`). Text-range character
42
+ * formatting remains on {@link TextRange.characterFormat} (`w:r/w:rPr`).
43
+ *
44
+ * Items appear directly on {@link Paragraph.items} — there is no nested run
45
+ * collection. Physical `w:r` grouping is reconstructed on serialize.
46
+ *
47
+ * @public
48
+ */
49
+ var Paragraph = /** @class */ (function () {
50
+ /** @private */
51
+ function Paragraph(owner) {
52
+ this.owner = owner;
53
+ this.extraAttributes = [];
54
+ this.numPrExtra = [];
55
+ this.sectionBreakSectPrElement = undefined;
56
+ this.paragraphItems = new ParagraphItemCollection(this);
57
+ this.paragraphFormatField = undefined;
58
+ this.breakCharacterFormatField = undefined;
59
+ this.listFormatField = undefined;
60
+ }
61
+ Object.defineProperty(Paragraph.prototype, "paragraphFormat", {
62
+ /**
63
+ * The direct paragraph formatting (`w:pPr`) of this paragraph — the only
64
+ * public paragraph-formatting surface.
65
+ *
66
+ * A live view over the typed `w:pPr` state: every read/write goes to the
67
+ * same storage the parser fills and the serializer reads. Lazily created
68
+ * on first access and cached; never null.
69
+ *
70
+ * Mutating it validates attachment — writes on a detached paragraph throw
71
+ * {@link DetachedObjectError}.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * paragraph.paragraphFormat.beforeSpacing = 18;
76
+ * paragraph.paragraphFormat.lineSpacing = 10;
77
+ * paragraph.paragraphFormat.firstLineIndent = 10; // negative = hanging
78
+ * paragraph.paragraphFormat.backColor = 'D3D3D3';
79
+ * ```
80
+ *
81
+ * @public
82
+ */
83
+ get: function () {
84
+ if (this.paragraphFormatField === undefined) {
85
+ this.paragraphFormatField = new ParagraphFormat(this);
86
+ }
87
+ return this.paragraphFormatField;
88
+ },
89
+ enumerable: true,
90
+ configurable: true
91
+ });
92
+ Object.defineProperty(Paragraph.prototype, "breakCharacterFormat", {
93
+ /**
94
+ * Character formatting of the paragraph mark (`w:pPr/w:rPr`).
95
+ *
96
+ * Reuses the same {@link CharacterFormat} type as {@link TextRange.characterFormat}.
97
+ * Lazily constructed; never null. Empty format does not emit an empty `w:rPr`.
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * paragraph.breakCharacterFormat.bold = true;
102
+ * paragraph.breakCharacterFormat.italic = true;
103
+ * paragraph.breakCharacterFormat.fontSize = 14;
104
+ * ```
105
+ *
106
+ * @public
107
+ */
108
+ get: function () {
109
+ if (this.breakCharacterFormatField === undefined) {
110
+ this.breakCharacterFormatField = new CharacterFormat(this);
111
+ }
112
+ return this.breakCharacterFormatField;
113
+ },
114
+ enumerable: true,
115
+ configurable: true
116
+ });
117
+ Object.defineProperty(Paragraph.prototype, "listFormat", {
118
+ /**
119
+ * Paragraph list formatting (`w:numPr`).
120
+ *
121
+ * A live list-format interface for applying and modifying numbering and
122
+ * bullet formatting on this paragraph. Lazily created on first access
123
+ * and cached; never null.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * paragraph.listFormat.applyDefBulletStyle();
128
+ * paragraph.listFormat.increaseIndentLevel();
129
+ * paragraph.listFormat.listId = 5;
130
+ * ```
131
+ *
132
+ * @public
133
+ */
134
+ get: function () {
135
+ if (this.listFormatField === undefined) {
136
+ // Factory is registered by the numbering feature (avoids circular
137
+ // import and extensionless CJS require under Vitest).
138
+ if (listFormatFactory === undefined) {
139
+ throw new DocxError('feature/not-registered', 'ListFormat is unavailable; register the numbering feature before accessing paragraph.listFormat');
140
+ }
141
+ this.listFormatField = listFormatFactory(this);
142
+ }
143
+ return this.listFormatField;
144
+ },
145
+ enumerable: true,
146
+ configurable: true
147
+ });
148
+ /** @private ParagraphFormatHost — mutation notification + detachment guard. */
149
+ Paragraph.prototype.notifyParagraphFormatMutation = function () {
150
+ this.mutate();
151
+ };
152
+ /** @private CharacterFormatHost — mark rPr mutation notification. */
153
+ Paragraph.prototype.notifyCharacterFormatMutation = function () {
154
+ this.mutate();
155
+ };
156
+ /** @private */
157
+ Paragraph.prototype.detach = function () {
158
+ this.owner = undefined;
159
+ this.paragraphItems.detachAll();
160
+ };
161
+ /** @private */
162
+ Paragraph.prototype.attach = function (owner) {
163
+ this.owner = owner;
164
+ this.paragraphItems.reattachAll();
165
+ };
166
+ /**
167
+ * @private ParagraphItemOwner — gate item property mutation.
168
+ */
169
+ Paragraph.prototype.assertAttachedItem = function (target) {
170
+ this.mutate();
171
+ if (!this.paragraphItems.containsIdentity(target)) {
172
+ throw new DetachedObjectError('This paragraph item is no longer in its paragraph');
173
+ }
174
+ };
175
+ /**
176
+ * @private Gate paragraph-level authoring.
177
+ */
178
+ Paragraph.prototype.assertMutable = function () {
179
+ this.mutate();
180
+ };
181
+ Paragraph.prototype.mutate = function () {
182
+ if (this.owner === undefined) {
183
+ throw new DetachedObjectError('This paragraph is no longer in a document');
184
+ }
185
+ this.owner.assertAttachedParagraph(this);
186
+ };
187
+ /** @private */
188
+ Paragraph.prototype.owningDocument = function () {
189
+ if (this.owner === undefined) {
190
+ throw new DetachedObjectError('This paragraph is no longer in a document');
191
+ }
192
+ return this.owner.owningDocument();
193
+ };
194
+ Object.defineProperty(Paragraph.prototype, "styleId", {
195
+ /**
196
+ * Gets or sets the identifier of the paragraph style applied to this paragraph.
197
+ *
198
+ * If undefined, no paragraph style is applied and formatting comes from the
199
+ * document defaults. The identifier must name a style that exists in the
200
+ * document when the file is saved.
201
+ *
202
+ * @defaultValue No paragraph style when omitted (body text formatting).
203
+ *
204
+ * @public
205
+ */
206
+ get: function () {
207
+ return this.styleIdValue;
208
+ },
209
+ set: function (value) {
210
+ this.mutate();
211
+ this.styleIdValue = value;
212
+ },
213
+ enumerable: true,
214
+ configurable: true
215
+ });
216
+ /**
217
+ * Applies a paragraph style by id or BuiltInStyle.
218
+ * Implementation is registered by the styles feature (writes resolved styleId only).
219
+ * @public
220
+ */
221
+ Paragraph.prototype.applyStyle = function (_style) {
222
+ throw new Error('Styles feature is not loaded');
223
+ };
224
+ /**
225
+ * @private Optional CharacterFormatHost effective resolver (overwritten by styles feature).
226
+ */
227
+ Paragraph.prototype.resolveEffectiveCharacterValue = function (_key) {
228
+ return undefined;
229
+ };
230
+ /**
231
+ * @private Optional ParagraphFormatHost effective resolver (overwritten by styles feature).
232
+ */
233
+ Paragraph.prototype.resolveEffectiveParagraphValue = function (_key) {
234
+ return undefined;
235
+ };
236
+ Object.defineProperty(Paragraph.prototype, "numId", {
237
+ /**
238
+ * @private
239
+ * Direct `w:numPr/w:numId/@w:val`. `undefined` means absent (not in a list). */
240
+ get: function () {
241
+ return this.numIdValue;
242
+ },
243
+ /**
244
+ * @private
245
+ * Direct `w:numPr/w:numId/@w:val`. `undefined` means absent (not in a list). */
246
+ set: function (value) {
247
+ this.mutate();
248
+ this.numIdValue = value;
249
+ },
250
+ enumerable: true,
251
+ configurable: true
252
+ });
253
+ Object.defineProperty(Paragraph.prototype, "listLevel", {
254
+ /**
255
+ * Zero-based list level (`w:ilvl`). Prefer {@link listFormat.listLevelNumber}.
256
+ *
257
+ * @private
258
+ */
259
+ get: function () {
260
+ return this.listLevelValue;
261
+ },
262
+ /**
263
+ * @private
264
+ */
265
+ set: function (value) {
266
+ this.mutate();
267
+ this.listLevelValue = value;
268
+ },
269
+ enumerable: true,
270
+ configurable: true
271
+ });
272
+ /**
273
+ * @private
274
+ * Conditional table-style membership on `w:pPr/w:cnfStyle`.
275
+ */
276
+ Paragraph.prototype.getConditionalFormatting = function () {
277
+ return this.paragraphFormat.readCnfStyle();
278
+ };
279
+ /**
280
+ * @private
281
+ * Set or clear conditional table-style membership on this paragraph.
282
+ * Does not call {@link mutate} beyond ParagraphFormat's write path so
283
+ * detached table rebuilds during calculation can still write masks.
284
+ */
285
+ Paragraph.prototype.setConditionalFormatting = function (state) {
286
+ this.paragraphFormat.writeCnfStyle(state);
287
+ };
288
+ Object.defineProperty(Paragraph.prototype, "isInCell", {
289
+ /**
290
+ * True when this paragraph’s nearest body owner is a table cell
291
+ * (including nested table cells). False for body, header/footer, text box,
292
+ * footnote, endnote, or detached paragraphs.
293
+ *
294
+ * @public
295
+ */
296
+ get: function () {
297
+ var owner = this.owner;
298
+ return owner !== undefined && owner.bodyOwnerKind === 'tableCell';
299
+ },
300
+ enumerable: true,
301
+ configurable: true
302
+ });
303
+ /** @private Paragraph section-break `w:pPr/w:sectPr`, when present. */
304
+ Paragraph.prototype.sectionBreakSectPr = function () {
305
+ return this.sectionBreakSectPrElement;
306
+ };
307
+ /**
308
+ * @private
309
+ * Replace paragraph section-break `w:sectPr`.
310
+ *
311
+ * Load/partition/flatten may dual-hold before the paragraph is attached to a
312
+ * body (parse uses a detached context; save may append an empty terminator).
313
+ * When already attached, still assert ownership via {@link mutate}.
314
+ */
315
+ Paragraph.prototype.replaceSectionBreakSectPr = function (value) {
316
+ if (this.owner !== undefined) {
317
+ this.mutate();
318
+ }
319
+ this.sectionBreakSectPrElement = value;
320
+ if (value !== undefined) {
321
+ this.sectionBreakPropertiesModelValue = undefined;
322
+ }
323
+ };
324
+ /**
325
+ * @private
326
+ * Live paragraph section-break properties model (sections feature), if any.
327
+ */
328
+ Paragraph.prototype.sectionBreakPropertiesModel = function () {
329
+ return this.sectionBreakPropertiesModelValue;
330
+ };
331
+ /**
332
+ * @private
333
+ * Attach or clear the live paragraph section-break properties model.
334
+ * When set, clears preserved `w:sectPr` XML so the model is the sole source of truth.
335
+ *
336
+ * Same attach rules as {@link replaceSectionBreakSectPr}: dual-hold is allowed
337
+ * before body ownership is established (TASK-8075 partition/flatten).
338
+ */
339
+ Paragraph.prototype.replaceSectionBreakPropertiesModel = function (value) {
340
+ if (this.owner !== undefined) {
341
+ this.mutate();
342
+ }
343
+ this.sectionBreakPropertiesModelValue = value;
344
+ if (value !== undefined) {
345
+ this.sectionBreakSectPrElement = undefined;
346
+ }
347
+ };
348
+ Object.defineProperty(Paragraph.prototype, "items", {
349
+ /**
350
+ * Ordered paragraph items (text ranges, breaks, tabs, symbols, feature
351
+ * content, opaque markup) in document order.
352
+ *
353
+ * Stable collection identity for the life of the paragraph. Physical `w:r`
354
+ * grouping is reconstructed on serialize via shared wire groups.
355
+ *
356
+ * @public
357
+ */
358
+ get: function () {
359
+ return this.paragraphItems;
360
+ },
361
+ enumerable: true,
362
+ configurable: true
363
+ });
364
+ Object.defineProperty(Paragraph.prototype, "text", {
365
+ /**
366
+ * Gets the concatenated plain text of modeled text ranges and tab characters
367
+ * in document order.
368
+ *
369
+ * Opaque and feature inlines (for example hyperlinks owned by feature modules)
370
+ * are skipped. Field instruction text is also skipped; only field result text
371
+ * is included. {@link Tab} items contribute U+0009 so plain-text views match
372
+ * run-level tab characters authored via {@link appendText} or loaded from
373
+ * `w:tab`.
374
+ *
375
+ * @public
376
+ */
377
+ get: function () {
378
+ var parts = [];
379
+ var items = this.paragraphItems.snapshot();
380
+ var fieldStack = [];
381
+ for (var i = 0; i < items.length; i += 1) {
382
+ var item = items[i];
383
+ // Check if this is a Field (begin marker)
384
+ if (item !== undefined && typeof item === 'object' && 'fieldType' in item && !('fieldMarkType' in item)) {
385
+ fieldStack.push({ phase: 'instruction' });
386
+ continue;
387
+ }
388
+ // Check if this is a FieldMark (separator or end)
389
+ if (item !== undefined && typeof item === 'object' && 'fieldMarkType' in item) {
390
+ var mark = item;
391
+ if (mark.fieldMarkType === 'separate') {
392
+ if (fieldStack.length > 0) {
393
+ var top_1 = fieldStack[fieldStack.length - 1];
394
+ if (top_1 !== undefined) {
395
+ top_1.phase = 'result';
396
+ }
397
+ }
398
+ continue;
399
+ }
400
+ else if (mark.fieldMarkType === 'end') {
401
+ if (fieldStack.length > 0) {
402
+ fieldStack.pop();
403
+ }
404
+ continue;
405
+ }
406
+ }
407
+ // Include text / tabs only if not in field instruction phase
408
+ var inResult = fieldStack.length === 0 || fieldStack[fieldStack.length - 1].phase === 'result';
409
+ if (!inResult) {
410
+ continue;
411
+ }
412
+ if (item instanceof TextRange) {
413
+ parts.push(item.text);
414
+ }
415
+ else if (item instanceof Tab) {
416
+ parts.push('\t');
417
+ }
418
+ }
419
+ return parts.join('');
420
+ },
421
+ enumerable: true,
422
+ configurable: true
423
+ });
424
+ /**
425
+ * Appends an empty text range to the end of this paragraph and returns it.
426
+ *
427
+ * @returns The newly created empty text range.
428
+ * @throws DetachedObjectError if this paragraph is no longer attached to a document.
429
+ *
430
+ * @public
431
+ */
432
+ Paragraph.prototype.appendTextRange = function () {
433
+ this.mutate();
434
+ var textRange = new TextRange();
435
+ this.paragraphItems.add(textRange);
436
+ return textRange;
437
+ };
438
+ /**
439
+ * Append text as one or more paragraph items, optionally with common character
440
+ * formatting. U+0009 (tab) characters become dedicated {@link Tab} items
441
+ * (`w:r/w:tab`) interleaved with {@link TextRange} segments that share one
442
+ * wire run group, matching Word / OOXML run-inner content.
443
+ *
444
+ * @returns The first {@link TextRange} created for non-empty text segments, or
445
+ * an empty trailing {@link TextRange} when `text` is empty or tab-only (so the
446
+ * return type stays {@link TextRange}).
447
+ *
448
+ * @public
449
+ */
450
+ Paragraph.prototype.appendText = function (text, options) {
451
+ this.mutate();
452
+ var group = new WireRunGroup();
453
+ var items = createTextAndTabItems(text, group);
454
+ var firstTextRange;
455
+ for (var i = 0; i < items.length; i += 1) {
456
+ var item = items[i];
457
+ if (item === undefined) {
458
+ continue;
459
+ }
460
+ this.paragraphItems.add(item);
461
+ if (firstTextRange === undefined && item instanceof TextRange) {
462
+ firstTextRange = item;
463
+ }
464
+ }
465
+ if (firstTextRange === undefined) {
466
+ // Tab-only input: keep API contract with an empty range on the same wire group.
467
+ firstTextRange = new TextRange(undefined, group);
468
+ this.paragraphItems.add(firstTextRange);
469
+ }
470
+ // Shared WireRunGroup CF — any member's characterFormat is the run's rPr.
471
+ if (options != null && options.bold !== undefined) {
472
+ firstTextRange.characterFormat.bold = options.bold;
473
+ }
474
+ if (options != null && options.italic !== undefined) {
475
+ firstTextRange.characterFormat.italic = options.italic;
476
+ }
477
+ if (options != null && options.fontSize !== undefined) {
478
+ firstTextRange.characterFormat.fontSize = options.fontSize;
479
+ }
480
+ return firstTextRange;
481
+ };
482
+ /**
483
+ * Append a break (`w:br`) as a direct paragraph item.
484
+ *
485
+ * Always run content on the wire (`w:r/w:br`), never a paragraph-level
486
+ * sibling of `w:r`. Serialization rebuilds the physical run.
487
+ *
488
+ * @param type - Break kind ({@link BreakType}).
489
+ * @param options - Optional text-wrapping clear (Line / TextWrappingBreak only).
490
+ * @returns The break item.
491
+ * @throws DocxError `content/invalid-break` if `clear` is set on Page or Column.
492
+ *
493
+ * @example
494
+ * ```ts
495
+ * paragraph.appendBreak(BreakType.PageBreak);
496
+ * paragraph.appendBreak(BreakType.LineBreak, { clear: BreakClearType.All });
497
+ * ```
498
+ *
499
+ * @public
500
+ */
501
+ Paragraph.prototype.appendBreak = function (type, options) {
502
+ this.mutate();
503
+ var clear = options == null ? undefined : options.clear;
504
+ var item = createStandaloneBreakItem(type, clear != null ? clear : BreakClearType.None);
505
+ this.paragraphItems.add(item);
506
+ return item;
507
+ };
508
+ /**
509
+ * Append a symbol character (`w:sym`) as a direct paragraph item.
510
+ *
511
+ * Always run content on the wire (`w:r/w:sym`, ECMA-376-1 §17.3.3.30).
512
+ *
513
+ * @param font - Symbol font name (`w:font`), for example `"Wingdings"`.
514
+ * @param char - `ST_ShortHexNumber` hex digits for `w:char` (four hex digits, e.g. `"F0FC"`).
515
+ * @returns The symbol paragraph item that was created.
516
+ *
517
+ * @example
518
+ * ```ts
519
+ * paragraph.appendText('checkmark: ');
520
+ * paragraph.appendSymbol('Wingdings', 'F0FC');
521
+ * ```
522
+ *
523
+ * @public
524
+ */
525
+ Paragraph.prototype.appendSymbol = function (font, char) {
526
+ this.mutate();
527
+ var item = createStandaloneSymbolItem(font, char);
528
+ this.paragraphItems.add(item);
529
+ return item;
530
+ };
531
+ /**
532
+ * Appends a feature-owned run-level item (for example an image) as a direct
533
+ * paragraph child. Serializes inside a physical `w:r` via its wire group.
534
+ *
535
+ * @private
536
+ */
537
+ Paragraph.prototype.appendFeatureRunItem = function (featureId, value) {
538
+ this.mutate();
539
+ var item = new FeatureRunParagraphItem(featureId, value, new WireRunGroup());
540
+ this.paragraphItems.add(item);
541
+ return item;
542
+ };
543
+ /**
544
+ * Appends a feature-owned inline sibling (for example `w:hyperlink`).
545
+ *
546
+ * @private
547
+ */
548
+ Paragraph.prototype.appendFeatureInline = function (featureId, value) {
549
+ this.mutate();
550
+ var item = new FeatureInlineParagraphItem(featureId, value);
551
+ this.paragraphItems.add(item);
552
+ return item;
553
+ };
554
+ /**
555
+ * Inserts a feature-owned inline at a raw content index (`0…items.count` inclusive).
556
+ *
557
+ * @private
558
+ */
559
+ Paragraph.prototype.insertFeatureInlineAt = function (index, featureId, value) {
560
+ this.mutate();
561
+ var item = new FeatureInlineParagraphItem(featureId, value);
562
+ this.paragraphItems.insert(index, item);
563
+ return item;
564
+ };
565
+ /** @private Remove a feature inline from this paragraph. */
566
+ Paragraph.prototype.removeFeatureInline = function (value) {
567
+ this.mutate();
568
+ var items = this.paragraphItems.snapshot();
569
+ for (var i = 0; i < items.length; i += 1) {
570
+ var item = items[i];
571
+ if (item instanceof FeatureInlineParagraphItem && item.value === value) {
572
+ this.paragraphItems.removeAt(i);
573
+ return;
574
+ }
575
+ }
576
+ throw new DetachedObjectError('This inline is no longer in its paragraph');
577
+ };
578
+ /**
579
+ * @private Remove a feature run-level item (image, drawing residual, …).
580
+ */
581
+ Paragraph.prototype.removeFeatureRunItem = function (value) {
582
+ this.mutate();
583
+ var items = this.paragraphItems.snapshot();
584
+ for (var i = 0; i < items.length; i += 1) {
585
+ var item = items[i];
586
+ if (item instanceof FeatureRunParagraphItem && item.value === value) {
587
+ this.paragraphItems.removeAt(i);
588
+ return;
589
+ }
590
+ }
591
+ throw new DetachedObjectError('This item is no longer in its paragraph');
592
+ };
593
+ /**
594
+ * @private Append a pre-built paragraph item (feature modules).
595
+ */
596
+ Paragraph.prototype.appendParagraphItem = function (item) {
597
+ this.mutate();
598
+ this.paragraphItems.add(item);
599
+ };
600
+ /**
601
+ * @private Remove a text range by identity.
602
+ */
603
+ Paragraph.prototype.removeTextRange = function (run) {
604
+ this.mutate();
605
+ var at = this.paragraphItems.indexOfIdentity(run);
606
+ if (at === -1) {
607
+ throw new DetachedObjectError('This text range is no longer in its paragraph');
608
+ }
609
+ this.paragraphItems.removeAt(at);
610
+ };
611
+ /**
612
+ * Advanced hatch: `w:p` tree. Unstable; prefer semantic properties.
613
+ */
614
+ Paragraph.prototype.toOpenXml = function () {
615
+ return serializeParagraph(this);
616
+ };
617
+ /** @private */
618
+ Paragraph.fromXml = function (el, owner) {
619
+ return parseParagraph(el, owner);
620
+ };
621
+ /** @private */
622
+ Paragraph.prototype.hydrate = function (data) {
623
+ this.extraAttributes = data.extraAttributes;
624
+ this.styleIdValue = data.styleIdValue;
625
+ this.numIdValue = data.numIdValue;
626
+ this.listLevelValue = data.listLevelValue;
627
+ this.numPrExtra = data.numPrExtra;
628
+ this.sectionBreakSectPrElement = data.sectionBreakSectPr;
629
+ // Detach any prior owner on incoming items so collection hydrate can attach.
630
+ for (var i = 0; i < data.items.length; i += 1) {
631
+ var incoming = data.items[i];
632
+ if (incoming.owner !== undefined) {
633
+ incoming.detach();
634
+ }
635
+ }
636
+ this.paragraphItems.hydrate(data.items);
637
+ // TASK-9020-C: formatting state hydrates from parseParagraphFormat snapshot.
638
+ this.paragraphFormat.hydrate(data.paragraphFormat);
639
+ if (data.breakCharacterFormat !== undefined) {
640
+ this.breakCharacterFormat.hydrate(data.breakCharacterFormat);
641
+ }
642
+ };
643
+ /** @private */
644
+ Paragraph.prototype.snapshot = function () {
645
+ return {
646
+ extraAttributes: this.extraAttributes,
647
+ styleIdValue: this.styleIdValue,
648
+ numIdValue: this.numIdValue,
649
+ listLevelValue: this.listLevelValue,
650
+ numPrExtra: this.numPrExtra,
651
+ // Prefer the live sections-feature model when present (clears preserved XML).
652
+ sectionBreakSectPr: this.sectionBreakPropertiesModelValue !== undefined
653
+ ? this.sectionBreakPropertiesModelValue.toOpenXml()
654
+ : this.sectionBreakSectPrElement,
655
+ items: this.paragraphItems.snapshot(),
656
+ paragraphFormat: this.paragraphFormat.snapshot(),
657
+ breakCharacterFormat: this.breakCharacterFormat.snapshot(),
658
+ };
659
+ };
660
+ return Paragraph;
661
+ }());
662
+ export { Paragraph };
663
+ function parseDecimalVal(raw) {
664
+ if (raw === undefined || !/^-?\d+$/.test(raw)) {
665
+ return undefined;
666
+ }
667
+ return Number.parseInt(raw, 10);
668
+ }
669
+ /**
670
+ * Parse `w:p`. Paragraph-owned: `pStyle` / `numPr` / `rPr` / `sectPr` / content.
671
+ * Format-owned `w:pPr` children go through {@link parseParagraphFormat}.
672
+ */
673
+ function parseParagraph(el, owner) {
674
+ var e_1, _a, e_2, _b, e_3, _c;
675
+ var paragraph = new Paragraph(owner);
676
+ var styleIdValue;
677
+ var numIdValue;
678
+ var listLevelValue;
679
+ var sectionBreakSectPr;
680
+ var numPrExtra = [];
681
+ var items = [];
682
+ var formatSnap;
683
+ var breakCfSnap;
684
+ try {
685
+ for (var _d = __values(elementChildren(el)), _e = _d.next(); !_e.done; _e = _d.next()) {
686
+ var child = _e.value;
687
+ if (isWml(child, 'pPr')) {
688
+ try {
689
+ // Paragraph-owned children first, then format codec for the rest.
690
+ for (var _f = __values(elementChildren(child)), _g = _f.next(); !_g.done; _g = _f.next()) {
691
+ var prop = _g.value;
692
+ if (isWml(prop, 'pStyle')) {
693
+ styleIdValue = wValAttribute(prop);
694
+ continue;
695
+ }
696
+ if (isWml(prop, 'numPr')) {
697
+ try {
698
+ for (var _h = __values(elementChildren(prop)), _j = _h.next(); !_j.done; _j = _h.next()) {
699
+ var numChild = _j.value;
700
+ if (isWml(numChild, 'ilvl')) {
701
+ var parsed = parseDecimalVal(wValAttribute(numChild));
702
+ if (parsed === undefined) {
703
+ numPrExtra.push(numChild);
704
+ }
705
+ else {
706
+ listLevelValue = parsed;
707
+ }
708
+ continue;
709
+ }
710
+ if (isWml(numChild, 'numId')) {
711
+ var parsed = parseDecimalVal(wValAttribute(numChild));
712
+ if (parsed === undefined) {
713
+ numPrExtra.push(numChild);
714
+ }
715
+ else {
716
+ numIdValue = parsed;
717
+ }
718
+ continue;
719
+ }
720
+ numPrExtra.push(numChild);
721
+ }
722
+ }
723
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
724
+ finally {
725
+ try {
726
+ if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
727
+ }
728
+ finally { if (e_3) throw e_3.error; }
729
+ }
730
+ continue;
731
+ }
732
+ if (isWml(prop, 'rPr')) {
733
+ // Paragraph-mark character formatting (`w:pPr/w:rPr`).
734
+ breakCfSnap = parseCharacterFormat(prop);
735
+ continue;
736
+ }
737
+ if (isWml(prop, 'sectPr')) {
738
+ sectionBreakSectPr = prop;
739
+ continue;
740
+ }
741
+ }
742
+ }
743
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
744
+ finally {
745
+ try {
746
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
747
+ }
748
+ finally { if (e_2) throw e_2.error; }
749
+ }
750
+ // TASK-9020-C: format-owned pPr interpretation (skips pStyle/numPr/rPr/sectPr).
751
+ formatSnap = parseParagraphFormat(child);
752
+ continue;
753
+ }
754
+ if (isWml(child, 'r')) {
755
+ // Owner is applied by paragraph.hydrate → collection.hydrate.
756
+ var groupItems = parseTextRangeGroup(child, undefined);
757
+ for (var gi = 0; gi < groupItems.length; gi += 1) {
758
+ items.push(groupItems[gi]);
759
+ }
760
+ continue;
761
+ }
762
+ var feature = tryParseFeatureInline(child);
763
+ if (feature !== undefined) {
764
+ items.push(new FeatureInlineParagraphItem(feature.featureId, feature.value));
765
+ continue;
766
+ }
767
+ items.push(new OpaqueParagraphItem(child));
768
+ }
769
+ }
770
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
771
+ finally {
772
+ try {
773
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
774
+ }
775
+ finally { if (e_1) throw e_1.error; }
776
+ }
777
+ paragraph.hydrate({
778
+ extraAttributes: el.attributes,
779
+ styleIdValue: styleIdValue,
780
+ numIdValue: numIdValue,
781
+ listLevelValue: listLevelValue,
782
+ numPrExtra: numPrExtra,
783
+ sectionBreakSectPr: sectionBreakSectPr,
784
+ items: items,
785
+ paragraphFormat: formatSnap !== undefined
786
+ ? formatSnap
787
+ : emptyParagraphFormatSnapshot(),
788
+ breakCharacterFormat: breakCfSnap,
789
+ });
790
+ return paragraph;
791
+ }
792
+ /**
793
+ * Serialize a paragraph. `w:pPr` children after `pStyle` come from
794
+ * {@link ParagraphFormat.buildPPrChildren} (CT_PPr order; TASK-9020-D).
795
+ * Mark `w:rPr` is injected from {@link Paragraph.breakCharacterFormat}.
796
+ */
797
+ export function serializeParagraph(paragraph) {
798
+ var snap = paragraph.snapshot();
799
+ var pPrChildren = [];
800
+ if (snap.styleIdValue !== undefined) {
801
+ pPrChildren.push(wmlElement('pStyle', { attributes: [wmlAttr('val', snap.styleIdValue)] }));
802
+ }
803
+ var numPr;
804
+ if (snap.numIdValue !== undefined ||
805
+ snap.listLevelValue !== undefined ||
806
+ snap.numPrExtra.length > 0) {
807
+ var numPrChildren = [];
808
+ if (snap.listLevelValue !== undefined) {
809
+ numPrChildren.push(wmlElement('ilvl', { attributes: [wmlAttr('val', String(snap.listLevelValue))] }));
810
+ }
811
+ if (snap.numIdValue !== undefined) {
812
+ numPrChildren.push(wmlElement('numId', { attributes: [wmlAttr('val', String(snap.numIdValue))] }));
813
+ }
814
+ for (var i = 0; i < snap.numPrExtra.length; i++) {
815
+ numPrChildren.push(snap.numPrExtra[i]);
816
+ }
817
+ numPr = wmlElement('numPr', { children: numPrChildren });
818
+ }
819
+ // Match TextRange: omit empty mark rPr (no empty <w:rPr/>).
820
+ var rPrChildList = paragraph.breakCharacterFormat.buildRPrChildren();
821
+ var rPr;
822
+ if (rPrChildList.length > 0) {
823
+ rPr = wmlElement('rPr', { children: rPrChildList });
824
+ }
825
+ var formatChildren = paragraph.paragraphFormat.buildPPrChildren({
826
+ numPr: numPr,
827
+ rPr: rPr,
828
+ sectPr: snap.sectionBreakSectPr,
829
+ });
830
+ for (var i = 0; i < formatChildren.length; i++) {
831
+ pPrChildren.push(formatChildren[i]);
832
+ }
833
+ var children = [];
834
+ if (pPrChildren.length > 0) {
835
+ children.push(wmlElement('pPr', { children: pPrChildren }));
836
+ }
837
+ var itemXml = serializeParagraphItems(snap.items);
838
+ for (var i = 0; i < itemXml.length; i++) {
839
+ children.push(itemXml[i]);
840
+ }
841
+ // DocIO pageBreakAfter has no ECMA pPr child. Body serializers emit a
842
+ // following page-break-only paragraph via shouldEmitPageBreakAfterParagraph /
843
+ // createPageBreakAfterParagraphElement — do not append w:br into this w:p.
844
+ // Citation: docs/specs/paragraph-formatting.md (deliberate omissions); ECMA-376-1 §17.3.3.1 w:br.
845
+ return wmlElement('p', { attributes: snap.extraAttributes, children: children });
846
+ }
847
+ /**
848
+ * True when {@link ParagraphFormat.pageBreakAfter} should emit a dedicated
849
+ * following paragraph containing only `w:br/@w:type="page"`.
850
+ *
851
+ * Skips when the content paragraph already contains a page-break item so
852
+ * authoring does not duplicate breaks.
853
+ *
854
+ * @private
855
+ */
856
+ export function shouldEmitPageBreakAfterParagraph(paragraph) {
857
+ var snap = paragraph.snapshot();
858
+ if (snap.paragraphFormat.pageBreakAfterValue !== true) {
859
+ return false;
860
+ }
861
+ return !paragraphItemsIncludePageBreak(snap.items);
862
+ }
863
+ /**
864
+ * Build a standalone `w:p` whose only content is a page break run.
865
+ * Used after a content paragraph when {@link shouldEmitPageBreakAfterParagraph}.
866
+ *
867
+ * @private
868
+ */
869
+ export function createPageBreakAfterParagraphElement() {
870
+ var pageBreakItem = createStandaloneBreakItem(BreakType.PageBreak);
871
+ var breakXml = serializeParagraphItems([pageBreakItem]);
872
+ return wmlElement('p', { children: breakXml });
873
+ }
874
+ /**
875
+ * True when paragraph items already contain a page break (`w:br/@w:type="page"`).
876
+ * @private
877
+ */
878
+ function paragraphItemsIncludePageBreak(items) {
879
+ for (var i = 0; i < items.length; i++) {
880
+ var item = items[i];
881
+ if (item instanceof Break && item.breakType === BreakType.PageBreak) {
882
+ return true;
883
+ }
884
+ }
885
+ return false;
886
+ }
887
+ // Re-export BodyItem for historical import sites (paragraph was the old home).
888
+ // TS 3.3.1: no export type { ... } from (3.8+). Use import() type queries.