@usejunior/docx-core 0.9.1 → 0.11.0

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 (335) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +2 -0
  3. package/README.md +2 -2
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/atomizer.d.ts +28 -8
  6. package/dist/atomizer.d.ts.map +1 -1
  7. package/dist/atomizer.js +96 -25
  8. package/dist/atomizer.js.map +1 -1
  9. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
  10. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
  11. package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
  12. package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
  13. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
  14. package/dist/baselines/atomizer/documentReconstructor.js +333 -112
  15. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
  16. package/dist/baselines/atomizer/formattingFidelity.d.ts +99 -0
  17. package/dist/baselines/atomizer/formattingFidelity.d.ts.map +1 -0
  18. package/dist/baselines/atomizer/formattingFidelity.js +449 -0
  19. package/dist/baselines/atomizer/formattingFidelity.js.map +1 -0
  20. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts +37 -0
  21. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts.map +1 -0
  22. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js +189 -0
  23. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js.map +1 -0
  24. package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts +74 -0
  25. package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts.map +1 -0
  26. package/dist/baselines/atomizer/inPlaceModifier-containers.js +171 -0
  27. package/dist/baselines/atomizer/inPlaceModifier-containers.js.map +1 -0
  28. package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts +88 -0
  29. package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts.map +1 -0
  30. package/dist/baselines/atomizer/inPlaceModifier-deletion.js +326 -0
  31. package/dist/baselines/atomizer/inPlaceModifier-deletion.js.map +1 -0
  32. package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts +85 -0
  33. package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts.map +1 -0
  34. package/dist/baselines/atomizer/inPlaceModifier-postprocess.js +402 -0
  35. package/dist/baselines/atomizer/inPlaceModifier-postprocess.js.map +1 -0
  36. package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts +39 -0
  37. package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts.map +1 -0
  38. package/dist/baselines/atomizer/inPlaceModifier-presplit.js +265 -0
  39. package/dist/baselines/atomizer/inPlaceModifier-presplit.js.map +1 -0
  40. package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts +62 -0
  41. package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts.map +1 -0
  42. package/dist/baselines/atomizer/inPlaceModifier-shared.js +139 -0
  43. package/dist/baselines/atomizer/inPlaceModifier-shared.js.map +1 -0
  44. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +198 -0
  45. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -0
  46. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +475 -0
  47. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -0
  48. package/dist/baselines/atomizer/inPlaceModifier.d.ts +6 -290
  49. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
  50. package/dist/baselines/atomizer/inPlaceModifier.js +23 -1828
  51. package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
  52. package/dist/baselines/atomizer/pipeline.d.ts +36 -2
  53. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
  54. package/dist/baselines/atomizer/pipeline.js +216 -144
  55. package/dist/baselines/atomizer/pipeline.js.map +1 -1
  56. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
  57. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +199 -173
  58. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
  59. package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
  60. package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
  61. package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
  62. package/dist/cli/compare-two.d.ts.map +1 -1
  63. package/dist/cli/compare-two.js +3 -1
  64. package/dist/cli/compare-two.js.map +1 -1
  65. package/dist/cli/conformance-adapter.d.ts +3 -0
  66. package/dist/cli/conformance-adapter.d.ts.map +1 -0
  67. package/dist/cli/conformance-adapter.js +93 -0
  68. package/dist/cli/conformance-adapter.js.map +1 -0
  69. package/dist/cli/index.d.ts.map +1 -1
  70. package/dist/cli/index.js +5 -1
  71. package/dist/cli/index.js.map +1 -1
  72. package/dist/compare-types.d.ts +197 -0
  73. package/dist/compare-types.d.ts.map +1 -0
  74. package/dist/compare-types.js +2 -0
  75. package/dist/compare-types.js.map +1 -0
  76. package/dist/core-types.d.ts +5 -1
  77. package/dist/core-types.d.ts.map +1 -1
  78. package/dist/core-types.js +5 -1
  79. package/dist/core-types.js.map +1 -1
  80. package/dist/footnotes.d.ts +8 -3
  81. package/dist/footnotes.d.ts.map +1 -1
  82. package/dist/footnotes.js +8 -3
  83. package/dist/footnotes.js.map +1 -1
  84. package/dist/generation/compile.d.ts +21 -0
  85. package/dist/generation/compile.d.ts.map +1 -0
  86. package/dist/generation/compile.js +46 -0
  87. package/dist/generation/compile.js.map +1 -0
  88. package/dist/generation/context.d.ts +42 -0
  89. package/dist/generation/context.d.ts.map +1 -0
  90. package/dist/generation/context.js +65 -0
  91. package/dist/generation/context.js.map +1 -0
  92. package/dist/generation/emit/comments-part.d.ts +36 -0
  93. package/dist/generation/emit/comments-part.d.ts.map +1 -0
  94. package/dist/generation/emit/comments-part.js +116 -0
  95. package/dist/generation/emit/comments-part.js.map +1 -0
  96. package/dist/generation/emit/document-part.d.ts +24 -0
  97. package/dist/generation/emit/document-part.d.ts.map +1 -0
  98. package/dist/generation/emit/document-part.js +60 -0
  99. package/dist/generation/emit/document-part.js.map +1 -0
  100. package/dist/generation/emit/emit-context.d.ts +26 -0
  101. package/dist/generation/emit/emit-context.d.ts.map +1 -0
  102. package/dist/generation/emit/emit-context.js +19 -0
  103. package/dist/generation/emit/emit-context.js.map +1 -0
  104. package/dist/generation/emit/header-footer-part.d.ts +23 -0
  105. package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
  106. package/dist/generation/emit/header-footer-part.js +57 -0
  107. package/dist/generation/emit/header-footer-part.js.map +1 -0
  108. package/dist/generation/emit/numbering-part.d.ts +29 -0
  109. package/dist/generation/emit/numbering-part.d.ts.map +1 -0
  110. package/dist/generation/emit/numbering-part.js +100 -0
  111. package/dist/generation/emit/numbering-part.js.map +1 -0
  112. package/dist/generation/emit/package-parts.d.ts +24 -0
  113. package/dist/generation/emit/package-parts.d.ts.map +1 -0
  114. package/dist/generation/emit/package-parts.js +121 -0
  115. package/dist/generation/emit/package-parts.js.map +1 -0
  116. package/dist/generation/emit/paragraph.d.ts +24 -0
  117. package/dist/generation/emit/paragraph.d.ts.map +1 -0
  118. package/dist/generation/emit/paragraph.js +63 -0
  119. package/dist/generation/emit/paragraph.js.map +1 -0
  120. package/dist/generation/emit/properties.d.ts +34 -0
  121. package/dist/generation/emit/properties.d.ts.map +1 -0
  122. package/dist/generation/emit/properties.js +138 -0
  123. package/dist/generation/emit/properties.js.map +1 -0
  124. package/dist/generation/emit/run.d.ts +15 -0
  125. package/dist/generation/emit/run.d.ts.map +1 -0
  126. package/dist/generation/emit/run.js +71 -0
  127. package/dist/generation/emit/run.js.map +1 -0
  128. package/dist/generation/emit/section.d.ts +29 -0
  129. package/dist/generation/emit/section.d.ts.map +1 -0
  130. package/dist/generation/emit/section.js +117 -0
  131. package/dist/generation/emit/section.js.map +1 -0
  132. package/dist/generation/emit/settings-part.d.ts +13 -0
  133. package/dist/generation/emit/settings-part.d.ts.map +1 -0
  134. package/dist/generation/emit/settings-part.js +24 -0
  135. package/dist/generation/emit/settings-part.js.map +1 -0
  136. package/dist/generation/emit/styles-part.d.ts +16 -0
  137. package/dist/generation/emit/styles-part.d.ts.map +1 -0
  138. package/dist/generation/emit/styles-part.js +80 -0
  139. package/dist/generation/emit/styles-part.js.map +1 -0
  140. package/dist/generation/emit/table.d.ts +26 -0
  141. package/dist/generation/emit/table.d.ts.map +1 -0
  142. package/dist/generation/emit/table.js +196 -0
  143. package/dist/generation/emit/table.js.map +1 -0
  144. package/dist/generation/errors.d.ts +22 -0
  145. package/dist/generation/errors.d.ts.map +1 -0
  146. package/dist/generation/errors.js +29 -0
  147. package/dist/generation/errors.js.map +1 -0
  148. package/dist/generation/index.d.ts +13 -0
  149. package/dist/generation/index.d.ts.map +1 -0
  150. package/dist/generation/index.js +12 -0
  151. package/dist/generation/index.js.map +1 -0
  152. package/dist/generation/ordering.d.ts +46 -0
  153. package/dist/generation/ordering.d.ts.map +1 -0
  154. package/dist/generation/ordering.js +119 -0
  155. package/dist/generation/ordering.js.map +1 -0
  156. package/dist/generation/recipes.d.ts +47 -0
  157. package/dist/generation/recipes.d.ts.map +1 -0
  158. package/dist/generation/recipes.js +84 -0
  159. package/dist/generation/recipes.js.map +1 -0
  160. package/dist/generation/structural-checks.d.ts +24 -0
  161. package/dist/generation/structural-checks.d.ts.map +1 -0
  162. package/dist/generation/structural-checks.js +318 -0
  163. package/dist/generation/structural-checks.js.map +1 -0
  164. package/dist/generation/types.d.ts +217 -0
  165. package/dist/generation/types.d.ts.map +1 -0
  166. package/dist/generation/types.js +16 -0
  167. package/dist/generation/types.js.map +1 -0
  168. package/dist/generation/validate-spec.d.ts +27 -0
  169. package/dist/generation/validate-spec.d.ts.map +1 -0
  170. package/dist/generation/validate-spec.js +307 -0
  171. package/dist/generation/validate-spec.js.map +1 -0
  172. package/dist/index.d.ts +9 -150
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +14 -0
  175. package/dist/index.js.map +1 -1
  176. package/dist/integration/generation-probes.d.ts +15 -0
  177. package/dist/integration/generation-probes.d.ts.map +1 -0
  178. package/dist/integration/generation-probes.js +84 -0
  179. package/dist/integration/generation-probes.js.map +1 -0
  180. package/dist/integration/libreoffice-oracle.d.ts +49 -0
  181. package/dist/integration/libreoffice-oracle.d.ts.map +1 -0
  182. package/dist/integration/libreoffice-oracle.js +290 -0
  183. package/dist/integration/libreoffice-oracle.js.map +1 -0
  184. package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
  185. package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
  186. package/dist/integration/synthetic-docx-fixture.js +131 -4
  187. package/dist/integration/synthetic-docx-fixture.js.map +1 -1
  188. package/dist/primitives/accept_changes.d.ts +4 -3
  189. package/dist/primitives/accept_changes.d.ts.map +1 -1
  190. package/dist/primitives/accept_changes.js +163 -77
  191. package/dist/primitives/accept_changes.js.map +1 -1
  192. package/dist/primitives/comments.d.ts +12 -3
  193. package/dist/primitives/comments.d.ts.map +1 -1
  194. package/dist/primitives/comments.js +374 -97
  195. package/dist/primitives/comments.js.map +1 -1
  196. package/dist/primitives/content_fingerprint.d.ts +29 -0
  197. package/dist/primitives/content_fingerprint.d.ts.map +1 -0
  198. package/dist/primitives/content_fingerprint.js +63 -0
  199. package/dist/primitives/content_fingerprint.js.map +1 -0
  200. package/dist/primitives/document.d.ts +94 -15
  201. package/dist/primitives/document.d.ts.map +1 -1
  202. package/dist/primitives/document.js +373 -36
  203. package/dist/primitives/document.js.map +1 -1
  204. package/dist/primitives/document_view-comments.d.ts +18 -0
  205. package/dist/primitives/document_view-comments.d.ts.map +1 -0
  206. package/dist/primitives/document_view-comments.js +160 -0
  207. package/dist/primitives/document_view-comments.js.map +1 -0
  208. package/dist/primitives/document_view-headings.d.ts +45 -0
  209. package/dist/primitives/document_view-headings.d.ts.map +1 -0
  210. package/dist/primitives/document_view-headings.js +247 -0
  211. package/dist/primitives/document_view-headings.js.map +1 -0
  212. package/dist/primitives/document_view-styles.d.ts +11 -0
  213. package/dist/primitives/document_view-styles.d.ts.map +1 -0
  214. package/dist/primitives/document_view-styles.js +104 -0
  215. package/dist/primitives/document_view-styles.js.map +1 -0
  216. package/dist/primitives/document_view-toon.d.ts +37 -0
  217. package/dist/primitives/document_view-toon.d.ts.map +1 -0
  218. package/dist/primitives/document_view-toon.js +199 -0
  219. package/dist/primitives/document_view-toon.js.map +1 -0
  220. package/dist/primitives/document_view-types.d.ts +152 -0
  221. package/dist/primitives/document_view-types.d.ts.map +1 -0
  222. package/dist/primitives/document_view-types.js +2 -0
  223. package/dist/primitives/document_view-types.js.map +1 -0
  224. package/dist/primitives/document_view.d.ts +8 -106
  225. package/dist/primitives/document_view.d.ts.map +1 -1
  226. package/dist/primitives/document_view.js +153 -312
  227. package/dist/primitives/document_view.js.map +1 -1
  228. package/dist/primitives/dom-helpers.d.ts +9 -0
  229. package/dist/primitives/dom-helpers.d.ts.map +1 -1
  230. package/dist/primitives/dom-helpers.js +10 -1
  231. package/dist/primitives/dom-helpers.js.map +1 -1
  232. package/dist/primitives/footnotes.d.ts +4 -3
  233. package/dist/primitives/footnotes.d.ts.map +1 -1
  234. package/dist/primitives/footnotes.js +232 -44
  235. package/dist/primitives/footnotes.js.map +1 -1
  236. package/dist/primitives/formatting_tags.d.ts +7 -0
  237. package/dist/primitives/formatting_tags.d.ts.map +1 -1
  238. package/dist/primitives/formatting_tags.js +22 -11
  239. package/dist/primitives/formatting_tags.js.map +1 -1
  240. package/dist/primitives/index.d.ts +10 -0
  241. package/dist/primitives/index.d.ts.map +1 -1
  242. package/dist/primitives/index.js +9 -0
  243. package/dist/primitives/index.js.map +1 -1
  244. package/dist/primitives/layout.d.ts +4 -3
  245. package/dist/primitives/layout.d.ts.map +1 -1
  246. package/dist/primitives/layout.js +45 -3
  247. package/dist/primitives/layout.js.map +1 -1
  248. package/dist/primitives/merge_runs.d.ts +21 -3
  249. package/dist/primitives/merge_runs.d.ts.map +1 -1
  250. package/dist/primitives/merge_runs.js +32 -10
  251. package/dist/primitives/merge_runs.js.map +1 -1
  252. package/dist/primitives/minimal_save.d.ts +38 -0
  253. package/dist/primitives/minimal_save.d.ts.map +1 -0
  254. package/dist/primitives/minimal_save.js +323 -0
  255. package/dist/primitives/minimal_save.js.map +1 -0
  256. package/dist/primitives/namespaces.d.ts +47 -0
  257. package/dist/primitives/namespaces.d.ts.map +1 -1
  258. package/dist/primitives/namespaces.js +52 -0
  259. package/dist/primitives/namespaces.js.map +1 -1
  260. package/dist/primitives/reject_changes.d.ts +6 -4
  261. package/dist/primitives/reject_changes.d.ts.map +1 -1
  262. package/dist/primitives/reject_changes.js +187 -91
  263. package/dist/primitives/reject_changes.js.map +1 -1
  264. package/dist/primitives/revision-parts.d.ts +7 -0
  265. package/dist/primitives/revision-parts.d.ts.map +1 -0
  266. package/dist/primitives/revision-parts.js +27 -0
  267. package/dist/primitives/revision-parts.js.map +1 -0
  268. package/dist/primitives/revision-vocabulary.d.ts +7 -0
  269. package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
  270. package/dist/primitives/revision-vocabulary.js +39 -0
  271. package/dist/primitives/revision-vocabulary.js.map +1 -0
  272. package/dist/primitives/schema-corpus-capture.d.ts +19 -0
  273. package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
  274. package/dist/primitives/schema-corpus-capture.js +29 -0
  275. package/dist/primitives/schema-corpus-capture.js.map +1 -0
  276. package/dist/primitives/sectPrAudit.d.ts +19 -0
  277. package/dist/primitives/sectPrAudit.d.ts.map +1 -0
  278. package/dist/primitives/sectPrAudit.js +165 -0
  279. package/dist/primitives/sectPrAudit.js.map +1 -0
  280. package/dist/primitives/semantic_tags.d.ts +7 -0
  281. package/dist/primitives/semantic_tags.d.ts.map +1 -1
  282. package/dist/primitives/semantic_tags.js +23 -4
  283. package/dist/primitives/semantic_tags.js.map +1 -1
  284. package/dist/primitives/serialize_html.d.ts +37 -0
  285. package/dist/primitives/serialize_html.d.ts.map +1 -0
  286. package/dist/primitives/serialize_html.js +395 -0
  287. package/dist/primitives/serialize_html.js.map +1 -0
  288. package/dist/primitives/serialize_markdown.d.ts +16 -0
  289. package/dist/primitives/serialize_markdown.d.ts.map +1 -0
  290. package/dist/primitives/serialize_markdown.js +300 -0
  291. package/dist/primitives/serialize_markdown.js.map +1 -0
  292. package/dist/primitives/serialize_plaintext.d.ts +15 -0
  293. package/dist/primitives/serialize_plaintext.d.ts.map +1 -0
  294. package/dist/primitives/serialize_plaintext.js +154 -0
  295. package/dist/primitives/serialize_plaintext.js.map +1 -0
  296. package/dist/primitives/styles.d.ts +15 -0
  297. package/dist/primitives/styles.d.ts.map +1 -1
  298. package/dist/primitives/styles.js +33 -22
  299. package/dist/primitives/styles.js.map +1 -1
  300. package/dist/primitives/tables.d.ts.map +1 -1
  301. package/dist/primitives/tables.js +13 -3
  302. package/dist/primitives/tables.js.map +1 -1
  303. package/dist/primitives/text.d.ts +2 -1
  304. package/dist/primitives/text.d.ts.map +1 -1
  305. package/dist/primitives/text.js +116 -12
  306. package/dist/primitives/text.js.map +1 -1
  307. package/dist/primitives/track-changes-emitter.d.ts +148 -0
  308. package/dist/primitives/track-changes-emitter.d.ts.map +1 -0
  309. package/dist/primitives/track-changes-emitter.js +291 -0
  310. package/dist/primitives/track-changes-emitter.js.map +1 -0
  311. package/dist/primitives/validate_ai_revisions.d.ts +35 -0
  312. package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
  313. package/dist/primitives/validate_ai_revisions.js +323 -0
  314. package/dist/primitives/validate_ai_revisions.js.map +1 -0
  315. package/dist/primitives/xml-helpers.d.ts +29 -0
  316. package/dist/primitives/xml-helpers.d.ts.map +1 -0
  317. package/dist/primitives/xml-helpers.js +35 -0
  318. package/dist/primitives/xml-helpers.js.map +1 -0
  319. package/dist/primitives/xml.d.ts +5 -0
  320. package/dist/primitives/xml.d.ts.map +1 -1
  321. package/dist/primitives/xml.js +5 -0
  322. package/dist/primitives/xml.js.map +1 -1
  323. package/dist/primitives/zip.d.ts +1 -0
  324. package/dist/primitives/zip.d.ts.map +1 -1
  325. package/dist/primitives/zip.js +21 -3
  326. package/dist/primitives/zip.js.map +1 -1
  327. package/dist/shared/field-structure.d.ts +14 -0
  328. package/dist/shared/field-structure.d.ts.map +1 -0
  329. package/dist/shared/field-structure.js +166 -0
  330. package/dist/shared/field-structure.js.map +1 -0
  331. package/dist/shared/ooxml/namespaces.d.ts +4 -1
  332. package/dist/shared/ooxml/namespaces.d.ts.map +1 -1
  333. package/dist/shared/ooxml/namespaces.js +4 -1
  334. package/dist/shared/ooxml/namespaces.js.map +1 -1
  335. package/package.json +13 -9
@@ -0,0 +1,189 @@
1
+ /**
2
+ * In-Place AST Modifier
3
+ *
4
+ * Modifies the revised document's AST in-place to add track changes markup.
5
+ * This replaces the reconstruction-based approach with direct tree manipulation.
6
+ */
7
+ import { childElements, findChildByTagName, insertAfterElement } from '../../primitives/index.js';
8
+ import { findAncestor, findTreeRoot, hasAncestorTag, paragraphHasParaInsMarker, } from './inPlaceModifier-shared.js';
9
+ export function cloneParagraphBoundaryBookmarkMarkers(sourceParagraph) {
10
+ const kids = sourceParagraph ? childElements(sourceParagraph) : [];
11
+ if (!sourceParagraph || kids.length === 0) {
12
+ return { leading: [], trailing: [], sourceLeading: [], sourceTrailing: [] };
13
+ }
14
+ const children = kids;
15
+ let firstRunIdx = -1;
16
+ let lastRunIdx = -1;
17
+ for (let i = 0; i < children.length; i++) {
18
+ if (children[i]?.tagName === 'w:r') {
19
+ if (firstRunIdx < 0)
20
+ firstRunIdx = i;
21
+ lastRunIdx = i;
22
+ }
23
+ }
24
+ const leading = [];
25
+ const trailing = [];
26
+ const sourceLeading = [];
27
+ const sourceTrailing = [];
28
+ for (let i = 0; i < children.length; i++) {
29
+ const child = children[i];
30
+ if (child.tagName === 'w:bookmarkStart') {
31
+ if (firstRunIdx < 0 || i < firstRunIdx) {
32
+ const cloned = child.cloneNode(true);
33
+ leading.push(cloned);
34
+ sourceLeading.push(child);
35
+ }
36
+ continue;
37
+ }
38
+ if (child.tagName === 'w:bookmarkEnd') {
39
+ if (lastRunIdx < 0 || i > lastRunIdx) {
40
+ const cloned = child.cloneNode(true);
41
+ trailing.push(cloned);
42
+ sourceTrailing.push(child);
43
+ }
44
+ }
45
+ }
46
+ return { leading, trailing, sourceLeading, sourceTrailing };
47
+ }
48
+ export function insertLeadingMarkers(paragraph, markers) {
49
+ if (markers.length === 0)
50
+ return null;
51
+ const pPr = findChildByTagName(paragraph, 'w:pPr');
52
+ if (pPr) {
53
+ let anchor = pPr;
54
+ for (const marker of markers) {
55
+ insertAfterElement(anchor, marker);
56
+ anchor = marker;
57
+ }
58
+ return anchor;
59
+ }
60
+ for (let i = markers.length - 1; i >= 0; i--) {
61
+ paragraph.insertBefore(markers[i], paragraph.firstChild);
62
+ }
63
+ return markers[markers.length - 1] ?? null;
64
+ }
65
+ export function isBookmarkMarkerTag(tagName) {
66
+ return tagName === 'w:bookmarkStart' || tagName === 'w:bookmarkEnd';
67
+ }
68
+ /**
69
+ * Collect direct paragraph bookmark markers adjacent to a source run.
70
+ *
71
+ * Markers between runs (or at paragraph boundaries) are represented as siblings
72
+ * of w:r under w:p. We clone nearby markers so reconstructed deleted/moveFrom
73
+ * fragments preserve bookmark names/IDs needed for Reject All parity.
74
+ */
75
+ export function collectAdjacentSourceBookmarkMarkers(sourceRun) {
76
+ const paragraph = sourceRun.parentNode;
77
+ if (!paragraph || paragraph.tagName !== 'w:p') {
78
+ return [];
79
+ }
80
+ const children = childElements(paragraph);
81
+ const runIndex = children.indexOf(sourceRun);
82
+ if (runIndex < 0) {
83
+ return [];
84
+ }
85
+ const before = [];
86
+ for (let i = runIndex - 1; i >= 0; i--) {
87
+ const child = children[i];
88
+ if (!child)
89
+ break;
90
+ if (child.tagName === 'w:r')
91
+ break;
92
+ if (isBookmarkMarkerTag(child.tagName)) {
93
+ before.unshift(child);
94
+ }
95
+ }
96
+ const after = [];
97
+ for (let i = runIndex + 1; i < children.length; i++) {
98
+ const child = children[i];
99
+ if (!child)
100
+ break;
101
+ if (child.tagName === 'w:r')
102
+ break;
103
+ if (isBookmarkMarkerTag(child.tagName)) {
104
+ after.push(child);
105
+ }
106
+ }
107
+ return [...before, ...after];
108
+ }
109
+ export function markerSurvivesReject(marker, context) {
110
+ // Markers nested in inserted/move-to content are removed by Reject All.
111
+ if (hasAncestorTag(marker, new Set(['w:ins', 'w:moveTo']))) {
112
+ return false;
113
+ }
114
+ // Paragraph-level insertion markers remove whole paragraphs on Reject All.
115
+ const paragraph = findAncestor(marker, 'w:p');
116
+ if (paragraph && context?.isParagraphRemovedOnReject?.(paragraph)) {
117
+ return false;
118
+ }
119
+ if (paragraphHasParaInsMarker(paragraph)) {
120
+ return false;
121
+ }
122
+ return true;
123
+ }
124
+ export function targetTreeHasEquivalentBookmarkMarker(targetParagraph, marker, context) {
125
+ const treeRoot = findTreeRoot(targetParagraph);
126
+ if (marker.tagName === 'w:bookmarkStart') {
127
+ const markerId = marker.getAttribute('w:id');
128
+ const markerName = marker.getAttribute('w:name');
129
+ for (const existing of Array.from(treeRoot.getElementsByTagName('w:bookmarkStart'))) {
130
+ if (!markerSurvivesReject(existing, context)) {
131
+ continue;
132
+ }
133
+ const existingName = existing.getAttribute('w:name');
134
+ const existingId = existing.getAttribute('w:id');
135
+ if (markerName && existingName === markerName)
136
+ return true;
137
+ if (!markerName && markerId && existingId === markerId)
138
+ return true;
139
+ }
140
+ return false;
141
+ }
142
+ if (marker.tagName === 'w:bookmarkEnd') {
143
+ const markerId = marker.getAttribute('w:id');
144
+ if (!markerId)
145
+ return false;
146
+ for (const existing of Array.from(treeRoot.getElementsByTagName('w:bookmarkEnd'))) {
147
+ if (!markerSurvivesReject(existing, context)) {
148
+ continue;
149
+ }
150
+ if (existing.getAttribute('w:id') === markerId)
151
+ return true;
152
+ }
153
+ }
154
+ return false;
155
+ }
156
+ export function cloneUnemittedSourceBookmarkMarkers(sourceRun, targetParagraph, state, context) {
157
+ const markers = collectAdjacentSourceBookmarkMarkers(sourceRun);
158
+ const clones = [];
159
+ for (const marker of markers) {
160
+ if (state.emittedSourceBookmarkMarkers.has(marker)) {
161
+ continue;
162
+ }
163
+ if (targetTreeHasEquivalentBookmarkMarker(targetParagraph, marker, context)) {
164
+ state.emittedSourceBookmarkMarkers.add(marker);
165
+ continue;
166
+ }
167
+ state.emittedSourceBookmarkMarkers.add(marker);
168
+ const cloned = marker.cloneNode(true);
169
+ clones.push(cloned);
170
+ }
171
+ return clones;
172
+ }
173
+ export function insertMarkersBeforeWrapper(wrapper, markers) {
174
+ const parent = wrapper.parentNode;
175
+ if (!parent)
176
+ return;
177
+ for (const marker of markers) {
178
+ if (!marker)
179
+ continue;
180
+ parent.insertBefore(marker, wrapper);
181
+ }
182
+ }
183
+ export function filterEquivalentBookmarkMarkers(markers, targetNode, context) {
184
+ return markers.filter((marker) => !targetTreeHasEquivalentBookmarkMarker(targetNode, marker, context));
185
+ }
186
+ /**
187
+ * Track change wrapper tag names.
188
+ */
189
+ //# sourceMappingURL=inPlaceModifier-bookmarks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inPlaceModifier-bookmarks.js","sourceRoot":"","sources":["../../../src/baselines/atomizer/inPlaceModifier-bookmarks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * In-Place AST Modifier
3
+ *
4
+ * Modifies the revised document's AST in-place to add track changes markup.
5
+ * This replaces the reconstruction-based approach with direct tree manipulation.
6
+ */
7
+ import type { ComparisonUnitAtom } from '../../core-types.js';
8
+ import { CorrelationStatus } from '../../core-types.js';
9
+ interface ContainerResolutionContext {
10
+ body: Element;
11
+ lastProcessedParagraph: Element | null;
12
+ lastParaByContainer: Map<Element, Element>;
13
+ }
14
+ export declare class ContainerResolutionError extends Error {
15
+ constructor(message: string);
16
+ }
17
+ /** A single step in a structural path from a paragraph up to w:body. */
18
+ export interface ContainerPathStep {
19
+ tag: string;
20
+ index: number;
21
+ }
22
+ /**
23
+ * Compute the structural path from a paragraph to the document body.
24
+ * Walks `parentNode` from the paragraph, recording {tag, index} for each
25
+ * structural container (w:tc, w:tr, w:tbl). Stops at w:body.
26
+ * Returns innermost-first order.
27
+ *
28
+ * Uses original-tree nodes — safe because only the revised tree is mutated.
29
+ */
30
+ export declare function getContainerPath(paragraph: Element): ContainerPathStep[];
31
+ /**
32
+ * Resolve a container path in the revised tree.
33
+ * Walks the path in reverse (outermost → innermost) from `body`.
34
+ * Returns the deepest container (typically w:tc), or null on mismatch.
35
+ */
36
+ export declare function resolveContainerInRevised(path: ContainerPathStep[], body: Element): Element | null;
37
+ /**
38
+ * Validate that the revised tree has compatible topology at the given path.
39
+ * Checks row count and cell count match at the target position.
40
+ * Returns false if there's a structural mismatch (row/cell additions, gridSpan divergence).
41
+ */
42
+ export declare function validateContainerTopology(path: ContainerPathStep[], body: Element): boolean;
43
+ /**
44
+ * Find the correct container and insertion anchor for a deleted/moved-source atom.
45
+ *
46
+ * For body-level atoms, returns ctx.body with the global lastProcessedParagraph anchor.
47
+ * For table-cell atoms, maps from the original tree container to the revised tree container
48
+ * by structural position, and uses the per-container anchor from lastParaByContainer.
49
+ *
50
+ * Returns null if container resolution fails (topology mismatch) — caller must throw
51
+ * ContainerResolutionError to trigger rebuild fallback.
52
+ */
53
+ export declare function findTargetContainerForAtom(atom: ComparisonUnitAtom, ctx: ContainerResolutionContext): {
54
+ container: Element;
55
+ insertAfter: Element | null;
56
+ } | null;
57
+ /**
58
+ * Determine whether an atom is "whitespace-only" for paragraph-level classification.
59
+ *
60
+ * We treat pure whitespace runs/tabs/breaks as ignorable noise, because LCS alignment
61
+ * can mark them Equal even when a whole paragraph was inserted/deleted. If we don't
62
+ * ignore them, Word can end up with a stub paragraph after Accept/Reject All.
63
+ */
64
+ export declare function isWhitespaceAtom(atom: ComparisonUnitAtom): boolean;
65
+ /**
66
+ * Returns true if every non-empty atom in this paragraph is of the specified status,
67
+ * ignoring whitespace-only atoms.
68
+ *
69
+ * Mirrors the rebuild reconstructor's whole-paragraph classification so that inplace
70
+ * output behaves the same under Word's Accept/Reject All.
71
+ */
72
+ export declare function isEntireParagraphAtomsWithStatus(atoms: ComparisonUnitAtom[], status: CorrelationStatus): boolean;
73
+ export {};
74
+ //# sourceMappingURL=inPlaceModifier-containers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inPlaceModifier-containers.d.ts","sourceRoot":"","sources":["../../../src/baselines/atomizer/inPlaceModifier-containers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,UAAU,0BAA0B;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,sBAAsB,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,mBAAmB,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CAC5C;AAMD,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAwBxE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAalG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAW3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,0BAA0B,GAC9B;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAiC5D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAKlE;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,kBAAkB,EAAE,EAC3B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAoBT"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * In-Place AST Modifier
3
+ *
4
+ * Modifies the revised document's AST in-place to add track changes markup.
5
+ * This replaces the reconstruction-based approach with direct tree manipulation.
6
+ */
7
+ import { EMPTY_PARAGRAPH_TAG } from '../../atomizer.js';
8
+ import { childElements, getLeafText } from '../../primitives/index.js';
9
+ import { findAncestorByTag } from './inPlaceModifier-shared.js';
10
+ // @lean-segment: container-topology
11
+ // Lean traceability anchor — cited by verification/lean/LeanSpike/Spec.lean for
12
+ // the container-topology-mismatch failure mode that makes the inplace candidate
13
+ // partial. Grep this anchor instead of relying on line numbers (refactor-stable).
14
+ export class ContainerResolutionError extends Error {
15
+ constructor(message) {
16
+ super(message);
17
+ this.name = 'ContainerResolutionError';
18
+ }
19
+ }
20
+ /**
21
+ * Compute the structural path from a paragraph to the document body.
22
+ * Walks `parentNode` from the paragraph, recording {tag, index} for each
23
+ * structural container (w:tc, w:tr, w:tbl). Stops at w:body.
24
+ * Returns innermost-first order.
25
+ *
26
+ * Uses original-tree nodes — safe because only the revised tree is mutated.
27
+ */
28
+ export function getContainerPath(paragraph) {
29
+ const path = [];
30
+ let current = paragraph.parentNode;
31
+ while (current && current.tagName) {
32
+ const el = current;
33
+ if (el.tagName === 'w:body')
34
+ break;
35
+ if (el.tagName === 'w:tc' || el.tagName === 'w:tr' || el.tagName === 'w:tbl') {
36
+ const parent = el.parentNode;
37
+ if (parent) {
38
+ let index = 0;
39
+ let sibling = el.previousSibling;
40
+ while (sibling) {
41
+ if (sibling.nodeType === 1 && sibling.tagName === el.tagName) {
42
+ index++;
43
+ }
44
+ sibling = sibling.previousSibling;
45
+ }
46
+ path.push({ tag: el.tagName, index });
47
+ }
48
+ }
49
+ current = el.parentNode;
50
+ }
51
+ return path;
52
+ }
53
+ /**
54
+ * Resolve a container path in the revised tree.
55
+ * Walks the path in reverse (outermost → innermost) from `body`.
56
+ * Returns the deepest container (typically w:tc), or null on mismatch.
57
+ */
58
+ export function resolveContainerInRevised(path, body) {
59
+ if (path.length === 0)
60
+ return null;
61
+ let current = body;
62
+ // Walk outermost to innermost (path is innermost-first, so reverse)
63
+ for (let i = path.length - 1; i >= 0; i--) {
64
+ const step = path[i];
65
+ const children = childElements(current).filter(c => c.tagName === step.tag);
66
+ const child = children[step.index];
67
+ if (!child)
68
+ return null; // Structural mismatch
69
+ current = child;
70
+ }
71
+ return current;
72
+ }
73
+ /**
74
+ * Validate that the revised tree has compatible topology at the given path.
75
+ * Checks row count and cell count match at the target position.
76
+ * Returns false if there's a structural mismatch (row/cell additions, gridSpan divergence).
77
+ */
78
+ export function validateContainerTopology(path, body) {
79
+ if (path.length === 0)
80
+ return true; // Body-level, always valid
81
+ let current = body;
82
+ for (let i = path.length - 1; i >= 0; i--) {
83
+ const step = path[i];
84
+ const children = childElements(current).filter(c => c.tagName === step.tag);
85
+ if (step.index >= children.length)
86
+ return false;
87
+ current = children[step.index];
88
+ }
89
+ return true;
90
+ }
91
+ /**
92
+ * Find the correct container and insertion anchor for a deleted/moved-source atom.
93
+ *
94
+ * For body-level atoms, returns ctx.body with the global lastProcessedParagraph anchor.
95
+ * For table-cell atoms, maps from the original tree container to the revised tree container
96
+ * by structural position, and uses the per-container anchor from lastParaByContainer.
97
+ *
98
+ * Returns null if container resolution fails (topology mismatch) — caller must throw
99
+ * ContainerResolutionError to trigger rebuild fallback.
100
+ */
101
+ export function findTargetContainerForAtom(atom, ctx) {
102
+ // 1. Check if atom was in a table cell (original tree ancestors)
103
+ const sourceTc = findAncestorByTag(atom, 'w:tc');
104
+ if (!sourceTc) {
105
+ // Body-level paragraph — use global anchor (current behavior, correct)
106
+ return { container: ctx.body, insertAfter: ctx.lastProcessedParagraph };
107
+ }
108
+ // 2. Compute structural path from original tree
109
+ const sourcePara = atom.sourceParagraphElement;
110
+ if (!sourcePara) {
111
+ return null; // Can't resolve → force rebuild
112
+ }
113
+ const path = getContainerPath(sourcePara);
114
+ if (path.length === 0) {
115
+ // Paragraph has a w:tc ancestor but path is empty — shouldn't happen
116
+ return null;
117
+ }
118
+ // 3. Validate topology match before resolving
119
+ if (!validateContainerTopology(path, ctx.body)) {
120
+ return null; // Structural mismatch → force rebuild
121
+ }
122
+ // 4. Resolve container in revised tree
123
+ const revisedContainer = resolveContainerInRevised(path, ctx.body);
124
+ if (!revisedContainer) {
125
+ return null; // Resolution failed → force rebuild
126
+ }
127
+ // 5. Find container-local insertion anchor
128
+ const anchor = ctx.lastParaByContainer.get(revisedContainer) ?? null;
129
+ return { container: revisedContainer, insertAfter: anchor };
130
+ }
131
+ /**
132
+ * Determine whether an atom is "whitespace-only" for paragraph-level classification.
133
+ *
134
+ * We treat pure whitespace runs/tabs/breaks as ignorable noise, because LCS alignment
135
+ * can mark them Equal even when a whole paragraph was inserted/deleted. If we don't
136
+ * ignore them, Word can end up with a stub paragraph after Accept/Reject All.
137
+ */
138
+ export function isWhitespaceAtom(atom) {
139
+ const el = atom.contentElement;
140
+ if (el.tagName === EMPTY_PARAGRAPH_TAG)
141
+ return true;
142
+ if (el.tagName === 'w:t')
143
+ return ((getLeafText(el) ?? '').trim() === '');
144
+ return el.tagName === 'w:tab' || el.tagName === 'w:br' || el.tagName === 'w:cr';
145
+ }
146
+ /**
147
+ * Returns true if every non-empty atom in this paragraph is of the specified status,
148
+ * ignoring whitespace-only atoms.
149
+ *
150
+ * Mirrors the rebuild reconstructor's whole-paragraph classification so that inplace
151
+ * output behaves the same under Word's Accept/Reject All.
152
+ */
153
+ export function isEntireParagraphAtomsWithStatus(atoms, status) {
154
+ let sawAnyContent = false;
155
+ let sawTargetStatus = false;
156
+ for (const atom of atoms) {
157
+ const el = atom.contentElement;
158
+ if (el.tagName === EMPTY_PARAGRAPH_TAG)
159
+ continue;
160
+ sawAnyContent = true;
161
+ if (atom.correlationStatus === status) {
162
+ sawTargetStatus = true;
163
+ continue;
164
+ }
165
+ if (isWhitespaceAtom(atom))
166
+ continue;
167
+ return false;
168
+ }
169
+ return sawAnyContent && sawTargetStatus;
170
+ }
171
+ //# sourceMappingURL=inPlaceModifier-containers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inPlaceModifier-containers.js","sourceRoot":"","sources":["../../../src/baselines/atomizer/inPlaceModifier-containers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * In-Place AST Modifier
3
+ *
4
+ * Modifies the revised document's AST in-place to add track changes markup.
5
+ * This replaces the reconstruction-based approach with direct tree manipulation.
6
+ */
7
+ import type { ComparisonUnitAtom } from '../../core-types.js';
8
+ import { type RevisionIdState } from './inPlaceModifier-shared.js';
9
+ import { type BookmarkSurvivalContext } from './inPlaceModifier-bookmarks.js';
10
+ export declare function getInsertableAtomContentElements(atom: ComparisonUnitAtom, filterRun?: Element): Element[];
11
+ /**
12
+ * Clone a source run and replace its non-rPr children with atom content.
13
+ *
14
+ * This keeps run-level formatting while allowing atom-level fragment insertion.
15
+ *
16
+ * @param filterRun - When provided, only include content elements belonging
17
+ * to this source run (for multi-run collapsed field replay).
18
+ */
19
+ export declare function cloneRunWithAtomContent(sourceRun: Element, atom: ComparisonUnitAtom, filterRun?: Element): Element;
20
+ /**
21
+ * Clone a deleted run from the original document and insert it into the revised document.
22
+ *
23
+ * For a single-content atom this wraps one cloned run in `<w:del>` and returns
24
+ * the `<w:del>` element. For a collapsed-field atom (issue #217), control
25
+ * routes to `insertFragmentedDeletedField` which emits multiple sibling
26
+ * elements — `w:fldChar` runs at sibling level (unwrapped) and individual
27
+ * `<w:del>` wrappers around each payload run — and returns the LAST inserted
28
+ * sibling (which may be a `<w:r>` carrying the end fldChar, not a `<w:del>`).
29
+ * Callers use the return value purely as the next insertion anchor.
30
+ *
31
+ * @param deletedAtom - Atom with the deleted content
32
+ * @param insertAfterRun - The run to insert after (null to insert at beginning of paragraph)
33
+ * @param targetParagraph - The paragraph to insert into
34
+ * @param author - Author name
35
+ * @param dateStr - Formatted date
36
+ * @param state - Revision ID state
37
+ * @returns The last inserted sibling element (a `<w:del>` for non-collapsed-field
38
+ * atoms; possibly a `<w:r>` for fragmented collapsed-field atoms), or null
39
+ * if insertion failed.
40
+ */
41
+ export declare function insertDeletedRun(deletedAtom: ComparisonUnitAtom, insertAfterRun: Element | null, targetParagraph: Element, author: string, dateStr: string, state: RevisionIdState, context?: BookmarkSurvivalContext): Element | null;
42
+ /**
43
+ * Emit a fragmented deletion of a collapsed-field atom: walks the constituent
44
+ * source runs in document order, cloning each into the target paragraph as
45
+ * either a sibling-level unwrapped run (for `w:fldChar`) or a `<w:del>`-wrapped
46
+ * run (for payload runs whose text is renamed to `w:delText` / `w:delInstrText`).
47
+ *
48
+ * Returns the last sibling element inserted, which the caller uses as the
49
+ * next insertion anchor (preserving the contract of `insertDeletedRun`).
50
+ *
51
+ * @conformance ECMA-376 edition 5, Part 4 § 17.16.5
52
+ *
53
+ * Rule: `w:delInstrText` MUST appear inside `<w:del>`;
54
+ * by extension and by issue #217's deep-research conclusion, `w:fldChar` runs
55
+ * stay at sibling level.
56
+ */
57
+ export declare function insertFragmentedDeletedField(deletedAtom: ComparisonUnitAtom, sourceRun: Element, insertAfterRun: Element | null, targetParagraph: Element, author: string, dateStr: string, state: RevisionIdState, context?: BookmarkSurvivalContext): Element | null;
58
+ /**
59
+ * Clone a moved-from run from the original document and insert it into the revised document.
60
+ *
61
+ * MovedSource atoms have their sourceRunElement in the ORIGINAL tree, but we need to
62
+ * insert the content into the REVISED tree. This function clones the run, wraps it with
63
+ * <w:moveFrom> and range markers, and inserts at the correct position.
64
+ *
65
+ * @param atom - Atom with the moved-from content
66
+ * @param moveName - Name for linking source and destination
67
+ * @param insertAfterRun - The run to insert after (null to insert at beginning of paragraph)
68
+ * @param targetParagraph - The paragraph to insert into
69
+ * @param author - Author name
70
+ * @param dateStr - Formatted date
71
+ * @param state - Revision ID state
72
+ * @returns The inserted moveFrom element, or null if insertion failed
73
+ */
74
+ export declare function insertMoveFromRun(atom: ComparisonUnitAtom, moveName: string, insertAfterRun: Element | null, targetParagraph: Element, author: string, dateStr: string, state: RevisionIdState, context?: BookmarkSurvivalContext): Element | null;
75
+ /**
76
+ * Clone a deleted paragraph from the original document and insert it.
77
+ *
78
+ * @param deletedAtom - Atom representing the deleted paragraph
79
+ * @param insertAfterParagraph - Paragraph to insert after (null to insert at body start)
80
+ * @param targetBody - The body element to insert into
81
+ * @param author - Author name
82
+ * @param dateStr - Formatted date
83
+ * @param state - Revision ID state
84
+ * @returns The inserted paragraph, or null if insertion failed
85
+ */
86
+ export declare function insertDeletedParagraph(deletedAtom: ComparisonUnitAtom, insertAfterParagraph: Element | null, targetContainer: Element, author: string, dateStr: string, state: RevisionIdState): Element | null;
87
+ export declare const FIELD_CHAR_TAG_NAMES: ReadonlySet<string>;
88
+ //# sourceMappingURL=inPlaceModifier-deletion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inPlaceModifier-deletion.d.ts","sourceRoot":"","sources":["../../../src/baselines/atomizer/inPlaceModifier-deletion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,gCAAgC,CAAC;AAGxC,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,kBAAkB,EACxB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,EAAE,CAaX;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,kBAAkB,EACxB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAwBT;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,kBAAkB,EAC/B,cAAc,EAAE,OAAO,GAAG,IAAI,EAC9B,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,GAAG,IAAI,CA2DhB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,kBAAkB,EAC/B,SAAS,EAAE,OAAO,EAClB,cAAc,EAAE,OAAO,GAAG,IAAI,EAC9B,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,GAAG,IAAI,CA2DhB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,OAAO,GAAG,IAAI,EAC9B,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,GAAG,IAAI,CA0EhB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,kBAAkB,EAC/B,oBAAoB,EAAE,OAAO,GAAG,IAAI,EACpC,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,GACrB,OAAO,GAAG,IAAI,CA+BhB;AAGD,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEnD,CAAC"}