@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,829 @@
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
+ var __read = (this && this.__read) || function (o, n) {
12
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
13
+ if (!m) return o;
14
+ var i = m.call(o), r, ar = [], e;
15
+ try {
16
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
17
+ }
18
+ catch (error) { e = { error: error }; }
19
+ finally {
20
+ try {
21
+ if (r && !r.done && (m = i["return"])) m.call(i);
22
+ }
23
+ finally { if (e) throw e.error; }
24
+ }
25
+ return ar;
26
+ };
27
+ var __spread = (this && this.__spread) || function () {
28
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
29
+ return ar;
30
+ };
31
+ export * from './attached-template';
32
+ export * from './compat-settings';
33
+ export * from './document-background';
34
+ export * from './document-protection';
35
+ export * from './document-settings-facades';
36
+ export * from './document-settings-values';
37
+ export * from './footnote-properties';
38
+ export * from './settings-children';
39
+ export * from './web-settings';
40
+ export * from './zoom';
41
+ /**
42
+ * WordDocument Settings feature (`word/settings.xml`).
43
+ *
44
+ * Load builds a typed child graph (`SettingsPart` → modeled/opaque nodes);
45
+ * dirty serialize emits only from that graph (not a flat element bag dump).
46
+ *
47
+ * @public
48
+ */
49
+ import { DocxError } from '../../core/errors/docx-error';
50
+ import { elementChildren, isWml, wmlElement } from '../document/wml';
51
+ import { partName, resolveInternalTarget } from '../../core/opc/part-name';
52
+ import { officeDocumentPartName, relationshipsForPart } from '../../core/opc/package';
53
+ import { TargetMode } from '../../core/opc/relationships';
54
+ import { featureId, registerFeature, registerFeaturePartHandler, registerFeatureMaterializeHandler, } from '../../core/registry/index';
55
+ import { parseXml, serializeXml, WML_TRANSITIONAL_NAMESPACE } from '../../core/xml/index';
56
+ import { CompatSettings } from './compat-settings';
57
+ import { DocumentProtection } from './document-protection';
58
+ import { createBackground } from './document-background';
59
+ import { EndnoteProperties, FootnoteProperties, } from './footnote-properties';
60
+ import { findChildIndex, parseSettingsChild, replaceOrInsertChild, serializeSettingsChildren, SettingsAttachedTemplateChild, SettingsCompatChild, SettingsDefaultTabStopChild, SettingsDocumentProtectionChild, SettingsCharacterSpacingControlChild, SettingsEndnotePrChild, SettingsFootnotePrChild, SettingsOnOffChild, SettingsViewChild, SettingsZoomChild, } from './settings-children';
61
+ import { registerWebSettingsFeature, resetWebSettingsFeatureForTests, } from './web-settings';
62
+ import { ZoomSettings } from './zoom';
63
+ /**
64
+ * @private
65
+ */
66
+ /**
67
+ * @private
68
+ */
69
+ /**
70
+ * @private
71
+ */
72
+ /**
73
+ * @private
74
+ */
75
+ import { bindDocumentSettingsFacades, registerDocumentSettingsFacades, } from './document-settings-facades';
76
+ var SETTINGS = featureId('settings');
77
+ /**
78
+ * @private
79
+ * Transitional settings relationship (ECMA-376-4 §9.2.3). */
80
+ export var SETTINGS_RELATIONSHIP_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';
81
+ /**
82
+ * @private
83
+ * Strict settings relationship (ECMA-376-1 §11.3.3). */
84
+ export var STRICT_SETTINGS_RELATIONSHIP_TYPE = 'http://purl.oclc.org/ooxml/officeDocument/relationships/settings';
85
+ /**
86
+ * @private
87
+ * ECMA-376-1 §11.3.3 WordDocument Settings content type. */
88
+ export var SETTINGS_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';
89
+ /**
90
+ * @private
91
+ * Transitional attached-template relationship (ECMA-376-4 §14.12.22). */
92
+ export var ATTACHED_TEMPLATE_RELATIONSHIP_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';
93
+ /**
94
+ * @private
95
+ * Strict attached-template relationship (ECMA-376-1 §11.4). */
96
+ export var STRICT_ATTACHED_TEMPLATE_RELATIONSHIP_TYPE = 'http://purl.oclc.org/ooxml/officeDocument/relationships/attachedTemplate';
97
+ var ATTACHED_TEMPLATE_RELATIONSHIP_TYPES = [
98
+ ATTACHED_TEMPLATE_RELATIONSHIP_TYPE,
99
+ STRICT_ATTACHED_TEMPLATE_RELATIONSHIP_TYPE,
100
+ ];
101
+ /**
102
+ * @private
103
+ */
104
+ export var SETTINGS_PART_NAME = partName('/word/settings.xml');
105
+ var utf8Decoder = new TextDecoder('utf-8');
106
+ var utf8 = new TextEncoder();
107
+ function resolveSettingsPartName(pkg) {
108
+ var e_1, _a;
109
+ var main = officeDocumentPartName(pkg);
110
+ try {
111
+ for (var _b = __values(relationshipsForPart(pkg, main).items), _c = _b.next(); !_c.done; _c = _b.next()) {
112
+ var rel = _c.value;
113
+ if (rel.type !== SETTINGS_RELATIONSHIP_TYPE &&
114
+ rel.type !== STRICT_SETTINGS_RELATIONSHIP_TYPE) {
115
+ continue;
116
+ }
117
+ return resolveInternalTarget(rel.target, main);
118
+ }
119
+ }
120
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
121
+ finally {
122
+ try {
123
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
124
+ }
125
+ finally { if (e_1) throw e_1.error; }
126
+ }
127
+ return undefined;
128
+ }
129
+ function resolveAttachedTemplateTarget(pkg, settingsPartName, relationshipId) {
130
+ var e_2, _a;
131
+ try {
132
+ for (var _b = __values(relationshipsForPart(pkg, settingsPartName).items), _c = _b.next(); !_c.done; _c = _b.next()) {
133
+ var rel = _c.value;
134
+ if (rel.id !== relationshipId) {
135
+ continue;
136
+ }
137
+ if (ATTACHED_TEMPLATE_RELATIONSHIP_TYPES.indexOf(rel.type) === -1) {
138
+ return undefined;
139
+ }
140
+ if (rel.targetMode === TargetMode.External) {
141
+ return rel.target;
142
+ }
143
+ return resolveInternalTarget(rel.target, settingsPartName);
144
+ }
145
+ }
146
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
147
+ finally {
148
+ try {
149
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
150
+ }
151
+ finally { if (e_2) throw e_2.error; }
152
+ }
153
+ return undefined;
154
+ }
155
+ /**
156
+ * In-memory WordDocument Settings part (`word/settings.xml`).
157
+ *
158
+ * Children are a typed ordered graph: modeled OnOff / protection / attachedTemplate /
159
+ * compat nodes plus opaque shells for the rest of `CT_Settings`.
160
+ *
161
+ * @private
162
+ */
163
+ var SettingsPart = /** @class */ (function () {
164
+ /**
165
+ * @private
166
+ */
167
+ function SettingsPart(rootAttributes, rootNamespaceDeclarations, children, dirty) {
168
+ this.rootAttributes = rootAttributes;
169
+ this.rootNamespaceDeclarations = rootNamespaceDeclarations;
170
+ this.children = children;
171
+ this.dirty = dirty;
172
+ }
173
+ SettingsPart.prototype.findOnOff = function (localName) {
174
+ var index = findChildIndex(this.children, localName);
175
+ if (index < 0) {
176
+ return undefined;
177
+ }
178
+ var child = this.children[index];
179
+ return child instanceof SettingsOnOffChild ? child : undefined;
180
+ };
181
+ SettingsPart.prototype.setOnOff = function (localName, value) {
182
+ replaceOrInsertChild(this.children, localName, value === undefined ? undefined : new SettingsOnOffChild(localName, value));
183
+ this.dirty = true;
184
+ };
185
+ /**
186
+ * `w:evenAndOddHeaders` as a boolean, or `undefined` when the element is absent.
187
+ *
188
+ * @public
189
+ */
190
+ SettingsPart.prototype.evenAndOddHeaders = function () {
191
+ var child = this.findOnOff('evenAndOddHeaders');
192
+ return child === undefined ? undefined : child.read();
193
+ };
194
+ /**
195
+ * Set or clear `w:evenAndOddHeaders`. `undefined` removes the element.
196
+ *
197
+ * @public
198
+ */
199
+ SettingsPart.prototype.setEvenAndOddHeaders = function (value) {
200
+ this.setOnOff('evenAndOddHeaders', value);
201
+ };
202
+ /**
203
+ * `w:trackRevisions` as a boolean, or `undefined` when the element is absent.
204
+ *
205
+ * @public
206
+ */
207
+ SettingsPart.prototype.trackRevisions = function () {
208
+ var child = this.findOnOff('trackRevisions');
209
+ return child === undefined ? undefined : child.read();
210
+ };
211
+ /**
212
+ * Set or clear `w:trackRevisions`. `undefined` removes the element.
213
+ *
214
+ * @public
215
+ */
216
+ SettingsPart.prototype.setTrackRevisions = function (value) {
217
+ this.setOnOff('trackRevisions', value);
218
+ };
219
+ /**
220
+ * Modeled `w:documentProtection` flags snapshot. Password/hash attributes are omitted.
221
+ *
222
+ * Prefer {@link documentProtectionNode} when the typed class is needed.
223
+ *
224
+ * @public
225
+ */
226
+ SettingsPart.prototype.documentProtection = function () {
227
+ var node = this.documentProtectionNode();
228
+ return node === undefined ? undefined : node.flags();
229
+ };
230
+ /**
231
+ * First-class `w:documentProtection` node, or `undefined` when absent.
232
+ *
233
+ * @public
234
+ */
235
+ SettingsPart.prototype.documentProtectionNode = function () {
236
+ var index = findChildIndex(this.children, 'documentProtection');
237
+ if (index < 0) {
238
+ return undefined;
239
+ }
240
+ var child = this.children[index];
241
+ return child instanceof SettingsDocumentProtectionChild ? child.protection() : undefined;
242
+ };
243
+ /**
244
+ * Replace or remove `w:documentProtection`. Clearing the element also drops preserved
245
+ * password/hash attributes. Flag-only updates keep leftover attributes on the existing node.
246
+ *
247
+ * @public
248
+ */
249
+ SettingsPart.prototype.setDocumentProtection = function (flags) {
250
+ if (flags === undefined) {
251
+ replaceOrInsertChild(this.children, 'documentProtection', undefined);
252
+ this.dirty = true;
253
+ return;
254
+ }
255
+ var existing = this.documentProtectionNode();
256
+ if (existing !== undefined) {
257
+ existing.applyFlags(flags);
258
+ this.dirty = true;
259
+ return;
260
+ }
261
+ replaceOrInsertChild(this.children, 'documentProtection', new SettingsDocumentProtectionChild(DocumentProtection.fromFlags(flags)));
262
+ this.dirty = true;
263
+ };
264
+ /**
265
+ * Whether `w:attachedTemplate` is present in settings.
266
+ *
267
+ * @public
268
+ */
269
+ SettingsPart.prototype.hasAttachedTemplate = function () {
270
+ return this.attachedTemplate() !== undefined;
271
+ };
272
+ /**
273
+ * First-class `w:attachedTemplate` node, or `undefined` when absent.
274
+ *
275
+ * @public
276
+ */
277
+ SettingsPart.prototype.attachedTemplate = function () {
278
+ var index = findChildIndex(this.children, 'attachedTemplate');
279
+ if (index < 0) {
280
+ return undefined;
281
+ }
282
+ var child = this.children[index];
283
+ return child instanceof SettingsAttachedTemplateChild ? child.template() : undefined;
284
+ };
285
+ /**
286
+ * `r:id` on `w:attachedTemplate`, or `undefined` when absent.
287
+ *
288
+ * @public
289
+ */
290
+ SettingsPart.prototype.attachedTemplateRelationshipId = function () {
291
+ var template = this.attachedTemplate();
292
+ return template === undefined ? undefined : template.id();
293
+ };
294
+ /**
295
+ * First-class `w:compat` node, or `undefined` when absent.
296
+ *
297
+ * Mutations on the returned node (for example {@link CompatSettings.setNoColumnBalance})
298
+ * mark the settings part dirty.
299
+ *
300
+ * @public
301
+ */
302
+ SettingsPart.prototype.compat = function () {
303
+ var _this = this;
304
+ var index = findChildIndex(this.children, 'compat');
305
+ if (index < 0) {
306
+ return undefined;
307
+ }
308
+ var child = this.children[index];
309
+ if (!(child instanceof SettingsCompatChild)) {
310
+ return undefined;
311
+ }
312
+ var compat = child.compat();
313
+ compat.bindDirty(function () {
314
+ _this.dirty = true;
315
+ });
316
+ return compat;
317
+ };
318
+ /**
319
+ * Ensure a `w:compat` node exists and return it.
320
+ *
321
+ * @private
322
+ */
323
+ SettingsPart.prototype.ensureCompat = function () {
324
+ var _this = this;
325
+ var existing = this.compat();
326
+ if (existing !== undefined) {
327
+ return existing;
328
+ }
329
+ var created = CompatSettings.createEmpty(function () {
330
+ _this.dirty = true;
331
+ });
332
+ replaceOrInsertChild(this.children, 'compat', new SettingsCompatChild(created));
333
+ this.dirty = true;
334
+ return created;
335
+ };
336
+ /**
337
+ * Names from `w:compat/w:compatSetting/@w:name`, in document order.
338
+ *
339
+ * @public
340
+ */
341
+ SettingsPart.prototype.compatSettingNames = function () {
342
+ var compat = this.compat();
343
+ return compat === undefined ? [] : compat.settingNames();
344
+ };
345
+ /**
346
+ * Count of `w:compatSetting` children under `w:compat`.
347
+ *
348
+ * @public
349
+ */
350
+ SettingsPart.prototype.compatSettingCount = function () {
351
+ var compat = this.compat();
352
+ return compat === undefined ? 0 : compat.settingCount();
353
+ };
354
+ /**
355
+ * `w:displayBackgroundShape` as a boolean, or `undefined` when the element is absent.
356
+ *
357
+ * @public
358
+ */
359
+ SettingsPart.prototype.displayBackgroundShape = function () {
360
+ var child = this.findOnOff('displayBackgroundShape');
361
+ return child === undefined ? undefined : child.read();
362
+ };
363
+ /**
364
+ * Set or clear `w:displayBackgroundShape`. `undefined` removes the element.
365
+ *
366
+ * @private
367
+ */
368
+ SettingsPart.prototype.setDisplayBackgroundShape = function (value) {
369
+ this.setOnOff('displayBackgroundShape', value);
370
+ };
371
+ // ── View ────────────────────────────────────────────────────────────────────
372
+ /**
373
+ * First-class `w:view` child, or `undefined` when absent.
374
+ *
375
+ * @private
376
+ */
377
+ SettingsPart.prototype.view = function () {
378
+ var index = findChildIndex(this.children, 'view');
379
+ if (index < 0) {
380
+ return undefined;
381
+ }
382
+ var child = this.children[index];
383
+ return child instanceof SettingsViewChild ? child : undefined;
384
+ };
385
+ /**
386
+ * Set or clear `w:view`. `undefined` removes the element.
387
+ *
388
+ * Accepts a known {@link DocumentViewType}, wire string, or modeled child.
389
+ *
390
+ * @private
391
+ */
392
+ SettingsPart.prototype.setView = function (value) {
393
+ if (value === undefined) {
394
+ replaceOrInsertChild(this.children, 'view', undefined);
395
+ this.dirty = true;
396
+ return;
397
+ }
398
+ if (value instanceof SettingsViewChild) {
399
+ replaceOrInsertChild(this.children, 'view', value);
400
+ this.dirty = true;
401
+ return;
402
+ }
403
+ var wire = typeof value === 'string' ? value : value;
404
+ replaceOrInsertChild(this.children, 'view', new SettingsViewChild(wire));
405
+ this.dirty = true;
406
+ };
407
+ // ── Zoom ────────────────────────────────────────────────────────────────────
408
+ /**
409
+ * First-class `w:zoom` node, or `undefined` when absent.
410
+ *
411
+ * @public
412
+ */
413
+ SettingsPart.prototype.zoom = function () {
414
+ var index = findChildIndex(this.children, 'zoom');
415
+ if (index < 0)
416
+ return undefined;
417
+ var child = this.children[index];
418
+ return child instanceof SettingsZoomChild ? child.zoom() : undefined;
419
+ };
420
+ /**
421
+ * Set `w:zoom` from a {@link ZoomSettings} instance, or remove it when `undefined`.
422
+ *
423
+ * @public
424
+ */
425
+ SettingsPart.prototype.setZoom = function (value) {
426
+ replaceOrInsertChild(this.children, 'zoom', value === undefined ? undefined : new SettingsZoomChild(value));
427
+ this.dirty = true;
428
+ };
429
+ // ── Footnote / endnote properties (document-level) ──────────────────────────
430
+ /**
431
+ * First-class `w:footnotePr` node, or `undefined` when absent.
432
+ *
433
+ * Mutations on the returned node mark the settings part dirty.
434
+ *
435
+ * @public
436
+ */
437
+ SettingsPart.prototype.footnoteProperties = function () {
438
+ var _this = this;
439
+ var index = findChildIndex(this.children, 'footnotePr');
440
+ if (index < 0) {
441
+ return undefined;
442
+ }
443
+ var child = this.children[index];
444
+ if (!(child instanceof SettingsFootnotePrChild)) {
445
+ return undefined;
446
+ }
447
+ var props = child.props();
448
+ props.bindDirty(function () {
449
+ _this.dirty = true;
450
+ });
451
+ return props;
452
+ };
453
+ /**
454
+ * Ensure a `w:footnotePr` node exists and return it.
455
+ *
456
+ * @public
457
+ */
458
+ SettingsPart.prototype.ensureFootnoteProperties = function () {
459
+ var _this = this;
460
+ var existing = this.footnoteProperties();
461
+ if (existing !== undefined) {
462
+ return existing;
463
+ }
464
+ var props = FootnoteProperties.create();
465
+ props.bindDirty(function () {
466
+ _this.dirty = true;
467
+ });
468
+ replaceOrInsertChild(this.children, 'footnotePr', new SettingsFootnotePrChild(props));
469
+ this.dirty = true;
470
+ return props;
471
+ };
472
+ /**
473
+ * Replace or clear `w:footnotePr`. `undefined` removes the element.
474
+ *
475
+ * @public
476
+ */
477
+ SettingsPart.prototype.setFootnoteProperties = function (value) {
478
+ var _this = this;
479
+ if (value === undefined) {
480
+ replaceOrInsertChild(this.children, 'footnotePr', undefined);
481
+ this.dirty = true;
482
+ return;
483
+ }
484
+ value.bindDirty(function () {
485
+ _this.dirty = true;
486
+ });
487
+ replaceOrInsertChild(this.children, 'footnotePr', new SettingsFootnotePrChild(value));
488
+ this.dirty = true;
489
+ };
490
+ /**
491
+ * First-class `w:endnotePr` node, or `undefined` when absent.
492
+ *
493
+ * Mutations on the returned node mark the settings part dirty.
494
+ *
495
+ * @public
496
+ */
497
+ SettingsPart.prototype.endnoteProperties = function () {
498
+ var _this = this;
499
+ var index = findChildIndex(this.children, 'endnotePr');
500
+ if (index < 0) {
501
+ return undefined;
502
+ }
503
+ var child = this.children[index];
504
+ if (!(child instanceof SettingsEndnotePrChild)) {
505
+ return undefined;
506
+ }
507
+ var props = child.props();
508
+ props.bindDirty(function () {
509
+ _this.dirty = true;
510
+ });
511
+ return props;
512
+ };
513
+ /**
514
+ * Ensure a `w:endnotePr` node exists and return it.
515
+ *
516
+ * @public
517
+ */
518
+ SettingsPart.prototype.ensureEndnoteProperties = function () {
519
+ var _this = this;
520
+ var existing = this.endnoteProperties();
521
+ if (existing !== undefined) {
522
+ return existing;
523
+ }
524
+ var props = EndnoteProperties.create();
525
+ props.bindDirty(function () {
526
+ _this.dirty = true;
527
+ });
528
+ replaceOrInsertChild(this.children, 'endnotePr', new SettingsEndnotePrChild(props));
529
+ this.dirty = true;
530
+ return props;
531
+ };
532
+ /**
533
+ * Replace or clear `w:endnotePr`. `undefined` removes the element.
534
+ *
535
+ * @public
536
+ */
537
+ SettingsPart.prototype.setEndnoteProperties = function (value) {
538
+ var _this = this;
539
+ if (value === undefined) {
540
+ replaceOrInsertChild(this.children, 'endnotePr', undefined);
541
+ this.dirty = true;
542
+ return;
543
+ }
544
+ value.bindDirty(function () {
545
+ _this.dirty = true;
546
+ });
547
+ replaceOrInsertChild(this.children, 'endnotePr', new SettingsEndnotePrChild(value));
548
+ this.dirty = true;
549
+ };
550
+ // ── Default tab stop ────────────────────────────────────────────────────────
551
+ /**
552
+ * `w:defaultTabStop/@w:val` in plain points, or `undefined` when the element is absent.
553
+ * Wire unit is twips (`ST_TwipsMeasure`); conversion is at the parse/serialize boundary.
554
+ *
555
+ * The default value in Word is half an inch (`720` twips → `36` points).
556
+ *
557
+ * @public
558
+ */
559
+ SettingsPart.prototype.defaultTabStop = function () {
560
+ var index = findChildIndex(this.children, 'defaultTabStop');
561
+ if (index < 0)
562
+ return undefined;
563
+ var child = this.children[index];
564
+ return child instanceof SettingsDefaultTabStopChild ? child.read() : undefined;
565
+ };
566
+ /**
567
+ * Set or clear `w:defaultTabStop`. `undefined` removes the element.
568
+ *
569
+ * @param value - Plain points (e.g. `36` = 0.5 inch). Serialized as twips on the wire.
570
+ *
571
+ * @public
572
+ */
573
+ SettingsPart.prototype.setDefaultTabStop = function (value) {
574
+ replaceOrInsertChild(this.children, 'defaultTabStop', value === undefined ? undefined : new SettingsDefaultTabStopChild(value));
575
+ this.dirty = true;
576
+ };
577
+ // ── Character spacing control ───────────────────────────────────────────────
578
+ /**
579
+ * `w:characterSpacingControl/@w:val`, or `undefined` when the element is absent.
580
+ *
581
+ * @public
582
+ */
583
+ SettingsPart.prototype.characterSpacingControl = function () {
584
+ var index = findChildIndex(this.children, 'characterSpacingControl');
585
+ if (index < 0)
586
+ return undefined;
587
+ var child = this.children[index];
588
+ return child instanceof SettingsCharacterSpacingControlChild ? child.read() : undefined;
589
+ };
590
+ /**
591
+ * Set or clear `w:characterSpacingControl`. `undefined` removes the element.
592
+ *
593
+ * @public
594
+ */
595
+ SettingsPart.prototype.setCharacterSpacingControl = function (value) {
596
+ replaceOrInsertChild(this.children, 'characterSpacingControl', value === undefined ? undefined : new SettingsCharacterSpacingControlChild(value));
597
+ this.dirty = true;
598
+ };
599
+ // ── compat convenience ──────────────────────────────────────────────────────
600
+ /**
601
+ * `compatibilityMode` from `w:compat/w:compatSetting[@w:name='compatibilityMode']/@w:val`.
602
+ *
603
+ * Common values: `"15"` = Word 2013+, `"14"` = Word 2010, `"12"` = Word 2007.
604
+ * Returns `undefined` when the `w:compat` element or the named setting is absent.
605
+ *
606
+ * @public
607
+ */
608
+ SettingsPart.prototype.compatibilityMode = function () {
609
+ var compat = this.compat();
610
+ return compat === undefined ? undefined : compat.compatibilityMode();
611
+ };
612
+ /**
613
+ * Set Word `compatibilityMode` on `w:compat`, creating the compat block when needed.
614
+ *
615
+ * @param value Wire token or {@link CompatibilityMode}.
616
+ * @private
617
+ */
618
+ SettingsPart.prototype.setCompatibilityMode = function (value) {
619
+ this.ensureCompat().setCompatibilityMode(value);
620
+ this.dirty = true;
621
+ };
622
+ /**
623
+ * `w:compat/w:noColumnBalance` (`CT_OnOff`) — do not balance multi-column section
624
+ * content. See {@link CompatSettings.noColumnBalance}.
625
+ *
626
+ * Returns `undefined` when `w:compat` or the element is absent (Word default:
627
+ * balance columns). Layout engines are out of scope for this library.
628
+ *
629
+ * @private
630
+ */
631
+ SettingsPart.prototype.noColumnBalance = function () {
632
+ var compat = this.compat();
633
+ return compat === undefined ? undefined : compat.noColumnBalance();
634
+ };
635
+ /**
636
+ * Set or clear `w:compat/w:noColumnBalance`. Creates `w:compat` when needed.
637
+ * Pass `undefined` to remove the element. Marks the settings part dirty.
638
+ *
639
+ * @private
640
+ */
641
+ SettingsPart.prototype.setNoColumnBalance = function (value) {
642
+ if (value === undefined) {
643
+ var compat = this.compat();
644
+ if (compat === undefined) {
645
+ return;
646
+ }
647
+ compat.setNoColumnBalance(undefined);
648
+ this.dirty = true;
649
+ return;
650
+ }
651
+ this.ensureCompat().setNoColumnBalance(value);
652
+ this.dirty = true;
653
+ };
654
+ /**
655
+ * @private
656
+ */
657
+ SettingsPart.prototype.isDirty = function () {
658
+ return this.dirty;
659
+ };
660
+ /**
661
+ * @private
662
+ */
663
+ SettingsPart.prototype.serialize = function () {
664
+ var root = wmlElement('settings', {
665
+ attributes: this.rootAttributes,
666
+ namespaceDeclarations: this.rootNamespaceDeclarations.length > 0
667
+ ? this.rootNamespaceDeclarations
668
+ : [{ prefix: 'w', namespaceUri: WML_TRANSITIONAL_NAMESPACE }],
669
+ children: serializeSettingsChildren(this.children),
670
+ });
671
+ return utf8.encode(serializeXml(root));
672
+ };
673
+ return SettingsPart;
674
+ }());
675
+ export { SettingsPart };
676
+ function loadSettingsPart(part) {
677
+ if (part === undefined) {
678
+ // Absent settings part (WordDocument.create scaffold, or package without
679
+ // settings.xml): attach Word-2013 defaults and mark dirty so the next save
680
+ // always emits settings.xml (TASK-8026 / settings-preserve-basic).
681
+ return createDefaultSettingsPart();
682
+ }
683
+ var root = parseXml(utf8Decoder.decode(part.data));
684
+ if (!isWml(root, 'settings')) {
685
+ return new SettingsPart([], [], [], false);
686
+ }
687
+ var children = elementChildren(root).map(function (child) { return parseSettingsChild(child); });
688
+ return new SettingsPart(root.attributes, root.namespaceDeclarations, children, false);
689
+ }
690
+ /**
691
+ * Build the canonical default `CT_Settings` children that Microsoft Word emits
692
+ * for a new document containing only a "Hello World" paragraph.
693
+ *
694
+ * - `w:zoom val="none" percent="100"`
695
+ * - `w:defaultTabStop val="720"` (0.5 inch / 36 points; stored as points, wire twips)
696
+ * - `w:characterSpacingControl val="doNotCompress"`
697
+ * - `w:compat` with five Word-2013 compat settings
698
+ * - `w:clrSchemeMapping` (empty element)
699
+ */
700
+ function buildDefaultSettingsChildren() {
701
+ return __spread([
702
+ new SettingsZoomChild(ZoomSettings.create(100, 'none')),
703
+ new SettingsDefaultTabStopChild(36),
704
+ new SettingsCharacterSpacingControlChild('doNotCompress'),
705
+ new SettingsCompatChild(CompatSettings.createDefault())
706
+ ], elementChildren(parseXml('<w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:clrSchemeMapping/></w:settings>')).map(function (child) { return parseSettingsChild(child); }));
707
+ }
708
+ /**
709
+ * Creates a new {@link SettingsPart} pre-populated with the canonical Word-2013
710
+ * default settings and marked **dirty** so `WordDocument.saveSync` always writes
711
+ * `settings.xml` — even when no further mutation is made.
712
+ *
713
+ * Emitted children (matching Microsoft Word for a minimal new document):
714
+ * - `w:zoom val="none" percent="100"`
715
+ * - `w:defaultTabStop val="720"` (wire twips; DOM value is `36` points)
716
+ * - `w:characterSpacingControl val="doNotCompress"`
717
+ * - `w:compat` with five Word-2013 compat settings
718
+ * - `w:clrSchemeMapping`
719
+ *
720
+ * @private
721
+ */
722
+ export function createDefaultSettingsPart() {
723
+ return new SettingsPart([], [], buildDefaultSettingsChildren(), true);
724
+ }
725
+ var registered = false;
726
+ /**
727
+ * @private
728
+ * Test hook */
729
+ export function resetSettingsFeatureForTests() {
730
+ registered = false;
731
+ resetWebSettingsFeatureForTests();
732
+ }
733
+ /**
734
+ * @private
735
+ * Register the document-settings package-part handler. Idempotent. */
736
+ export function registerSettingsFeature() {
737
+ if (registered) {
738
+ return;
739
+ }
740
+ registered = true;
741
+ registerWebSettingsFeature();
742
+ registerFeature({ id: SETTINGS });
743
+ registerFeaturePartHandler({
744
+ featureId: SETTINGS,
745
+ relationshipTypes: [SETTINGS_RELATIONSHIP_TYPE, STRICT_SETTINGS_RELATIONSHIP_TYPE],
746
+ defaultRelativeTarget: 'settings.xml',
747
+ partName: SETTINGS_PART_NAME,
748
+ contentType: SETTINGS_CONTENT_TYPE,
749
+ loadPart: function (part, ctx) {
750
+ void ctx;
751
+ return loadSettingsPart(part);
752
+ },
753
+ });
754
+ // Materialize handler: ensure a default settings part is attached before every
755
+ // save — even when the caller never explicitly invoked `settingsFor()`.
756
+ // This guarantees settings.xml is always emitted (OOXML conformance requirement).
757
+ registerFeatureMaterializeHandler({
758
+ featureId: SETTINGS,
759
+ materialize: function (document) {
760
+ var existing = document.featurePart(SETTINGS);
761
+ // Attach Word-2013 defaults only when no settings part is present.
762
+ // A loaded empty `<w:settings/>` is a real part and must not be replaced.
763
+ if (!(existing instanceof SettingsPart)) {
764
+ document.setFeaturePart(SETTINGS, createDefaultSettingsPart());
765
+ }
766
+ },
767
+ });
768
+ }
769
+ /**
770
+ * Settings catalog for a document. Requires {@link registerSettingsFeature}.
771
+ *
772
+ * On {@link WordDocument.create} (and any document that has no settings state yet), the first
773
+ * access attaches a default {@link SettingsPart} pre-populated with canonical Word-2013
774
+ * settings (zoom, defaultTabStop, characterSpacingControl, compat, clrSchemeMapping) and
775
+ * marked dirty so that `WordDocument.saveSync` **always** materializes `/word/settings.xml`,
776
+ * its content-type override, and its Main Document relationship — even when no further
777
+ * mutation is made. This matches the OOXML conformance requirement that a DOCX file
778
+ * contains a settings part by default.
779
+ *
780
+ * @throws DocxError `UNKNOWN_FEATURE` when the module was not registered.
781
+ *
782
+ * @private
783
+ */
784
+ export function settingsFor(document) {
785
+ var existing = document.featurePart(SETTINGS);
786
+ if (existing instanceof SettingsPart) {
787
+ return existing;
788
+ }
789
+ if (!registered) {
790
+ throw new DocxError('feature/not-registered', 'Settings part was not loaded; call registerSettingsFeature() before WordDocument.open or WordDocument.create');
791
+ }
792
+ // Absent part only: attach Word-2013 defaults so save always emits settings.xml.
793
+ // WordDocument.create loads via loadSettingsPart(undefined), which already attaches defaults.
794
+ var part = createDefaultSettingsPart();
795
+ document.setFeaturePart(SETTINGS, part);
796
+ return part;
797
+ }
798
+ /**
799
+ * Attached template relationship target from the settings part, without fetching.
800
+ *
801
+ * @private
802
+ */
803
+ export function attachedTemplateTarget(document) {
804
+ var settings = settingsFor(document);
805
+ var id = settings.attachedTemplateRelationshipId();
806
+ if (id === undefined) {
807
+ return undefined;
808
+ }
809
+ var settingsPart = resolveSettingsPartName(document.opcPackage());
810
+ if (settingsPart === undefined) {
811
+ return undefined;
812
+ }
813
+ return resolveAttachedTemplateTarget(document.opcPackage(), settingsPart, id);
814
+ }
815
+ /**
816
+ * Main Document page background metadata. Requires {@link registerSettingsFeature}.
817
+ *
818
+ * @private
819
+ */
820
+ export function backgroundFor(document) {
821
+ return createBackground(document, settingsFor(document).displayBackgroundShape());
822
+ }
823
+ registerSettingsFeature();
824
+ bindDocumentSettingsFacades({
825
+ settingsFor: settingsFor,
826
+ registerSettingsFeature: registerSettingsFeature,
827
+ attachedTemplateTarget: attachedTemplateTarget,
828
+ });
829
+ registerDocumentSettingsFacades();