@usejunior/docx-core 0.15.0 → 0.17.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 (221) hide show
  1. package/README.md +18 -83
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/conformance-adapter.d.ts +14 -0
  4. package/dist/cli/conformance-adapter.d.ts.map +1 -1
  5. package/dist/cli/conformance-adapter.js +104 -12
  6. package/dist/cli/conformance-adapter.js.map +1 -1
  7. package/dist/footnotes.d.ts +7 -5
  8. package/dist/footnotes.d.ts.map +1 -1
  9. package/dist/footnotes.js +7 -5
  10. package/dist/footnotes.js.map +1 -1
  11. package/dist/generated/ecma-376-vocabulary.d.ts +93 -0
  12. package/dist/generated/ecma-376-vocabulary.d.ts.map +1 -0
  13. package/dist/generated/ecma-376-vocabulary.js +87 -0
  14. package/dist/generated/ecma-376-vocabulary.js.map +1 -0
  15. package/dist/generation/compile.js +2 -2
  16. package/dist/generation/compile.js.map +1 -1
  17. package/dist/generation/emit/comments-part.d.ts +2 -0
  18. package/dist/generation/emit/comments-part.d.ts.map +1 -1
  19. package/dist/generation/emit/comments-part.js +2 -0
  20. package/dist/generation/emit/comments-part.js.map +1 -1
  21. package/dist/generation/emit/paragraph.d.ts +3 -0
  22. package/dist/generation/emit/paragraph.d.ts.map +1 -1
  23. package/dist/generation/emit/paragraph.js +3 -0
  24. package/dist/generation/emit/paragraph.js.map +1 -1
  25. package/dist/generation/emit/run.d.ts.map +1 -1
  26. package/dist/generation/emit/run.js +6 -1
  27. package/dist/generation/emit/run.js.map +1 -1
  28. package/dist/generation/emit/settings-part.d.ts +12 -3
  29. package/dist/generation/emit/settings-part.d.ts.map +1 -1
  30. package/dist/generation/emit/settings-part.js +23 -5
  31. package/dist/generation/emit/settings-part.js.map +1 -1
  32. package/dist/generation/ordering.d.ts +3 -1
  33. package/dist/generation/ordering.d.ts.map +1 -1
  34. package/dist/generation/ordering.js +3 -1
  35. package/dist/generation/ordering.js.map +1 -1
  36. package/dist/generation/schema-enum-domains.d.ts +27 -0
  37. package/dist/generation/schema-enum-domains.d.ts.map +1 -0
  38. package/dist/generation/schema-enum-domains.js +69 -0
  39. package/dist/generation/schema-enum-domains.js.map +1 -0
  40. package/dist/generation/structural-checks.js +7 -1
  41. package/dist/generation/structural-checks.js.map +1 -1
  42. package/dist/generation/validate-spec.d.ts.map +1 -1
  43. package/dist/generation/validate-spec.js +149 -31
  44. package/dist/generation/validate-spec.js.map +1 -1
  45. package/dist/index.d.ts +7 -24
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +7 -46
  48. package/dist/index.js.map +1 -1
  49. package/dist/primitives/accept_ai_edits.d.ts +87 -0
  50. package/dist/primitives/accept_ai_edits.d.ts.map +1 -0
  51. package/dist/primitives/accept_ai_edits.js +253 -0
  52. package/dist/primitives/accept_ai_edits.js.map +1 -0
  53. package/dist/primitives/accept_changes.d.ts +36 -3
  54. package/dist/primitives/accept_changes.d.ts.map +1 -1
  55. package/dist/primitives/accept_changes.js +67 -31
  56. package/dist/primitives/accept_changes.js.map +1 -1
  57. package/dist/primitives/bookmarks.d.ts +44 -0
  58. package/dist/primitives/bookmarks.d.ts.map +1 -1
  59. package/dist/primitives/bookmarks.js +149 -11
  60. package/dist/primitives/bookmarks.js.map +1 -1
  61. package/dist/primitives/document.d.ts +53 -1
  62. package/dist/primitives/document.d.ts.map +1 -1
  63. package/dist/primitives/document.js +146 -2
  64. package/dist/primitives/document.js.map +1 -1
  65. package/dist/primitives/dom-helpers.d.ts.map +1 -1
  66. package/dist/primitives/dom-helpers.js +7 -2
  67. package/dist/primitives/dom-helpers.js.map +1 -1
  68. package/dist/primitives/index.d.ts +2 -1
  69. package/dist/primitives/index.d.ts.map +1 -1
  70. package/dist/primitives/index.js +2 -1
  71. package/dist/primitives/index.js.map +1 -1
  72. package/dist/primitives/layout.d.ts.map +1 -1
  73. package/dist/primitives/layout.js +41 -1
  74. package/dist/primitives/layout.js.map +1 -1
  75. package/dist/primitives/namespaces.d.ts +2 -0
  76. package/dist/primitives/namespaces.d.ts.map +1 -1
  77. package/dist/primitives/namespaces.js +2 -0
  78. package/dist/primitives/namespaces.js.map +1 -1
  79. package/dist/primitives/reject_changes.d.ts +21 -2
  80. package/dist/primitives/reject_changes.d.ts.map +1 -1
  81. package/dist/primitives/reject_changes.js +71 -31
  82. package/dist/primitives/reject_changes.js.map +1 -1
  83. package/dist/primitives/relationships.d.ts +33 -0
  84. package/dist/primitives/relationships.d.ts.map +1 -1
  85. package/dist/primitives/relationships.js +84 -1
  86. package/dist/primitives/relationships.js.map +1 -1
  87. package/dist/primitives/sectPrAudit.d.ts +11 -2
  88. package/dist/primitives/sectPrAudit.d.ts.map +1 -1
  89. package/dist/primitives/sectPrAudit.js +148 -23
  90. package/dist/primitives/sectPrAudit.js.map +1 -1
  91. package/dist/primitives/track-changes-emitter.d.ts +4 -0
  92. package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
  93. package/dist/primitives/track-changes-emitter.js +5 -2
  94. package/dist/primitives/track-changes-emitter.js.map +1 -1
  95. package/dist/primitives/validate_ai_revisions.d.ts.map +1 -1
  96. package/dist/primitives/validate_ai_revisions.js +13 -5
  97. package/dist/primitives/validate_ai_revisions.js.map +1 -1
  98. package/dist/primitives/zip.d.ts.map +1 -1
  99. package/dist/primitives/zip.js +6 -2
  100. package/dist/primitives/zip.js.map +1 -1
  101. package/dist/shared/field-structure.d.ts +6 -0
  102. package/dist/shared/field-structure.d.ts.map +1 -1
  103. package/dist/shared/field-structure.js +6 -0
  104. package/dist/shared/field-structure.js.map +1 -1
  105. package/package.json +4 -8
  106. package/dist/atomizer.d.ts +0 -273
  107. package/dist/atomizer.d.ts.map +0 -1
  108. package/dist/atomizer.js +0 -1002
  109. package/dist/atomizer.js.map +0 -1
  110. package/dist/baselines/atomizer/atomLcs.d.ts +0 -82
  111. package/dist/baselines/atomizer/atomLcs.d.ts.map +0 -1
  112. package/dist/baselines/atomizer/atomLcs.js +0 -376
  113. package/dist/baselines/atomizer/atomLcs.js.map +0 -1
  114. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +0 -99
  115. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +0 -1
  116. package/dist/baselines/atomizer/auxiliaryIdCollision.js +0 -415
  117. package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +0 -1
  118. package/dist/baselines/atomizer/consumerCompatibility.d.ts +0 -2
  119. package/dist/baselines/atomizer/consumerCompatibility.d.ts.map +0 -1
  120. package/dist/baselines/atomizer/consumerCompatibility.js +0 -188
  121. package/dist/baselines/atomizer/consumerCompatibility.js.map +0 -1
  122. package/dist/baselines/atomizer/debug.d.ts +0 -41
  123. package/dist/baselines/atomizer/debug.d.ts.map +0 -1
  124. package/dist/baselines/atomizer/debug.js +0 -85
  125. package/dist/baselines/atomizer/debug.js.map +0 -1
  126. package/dist/baselines/atomizer/documentReconstructor.d.ts +0 -75
  127. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +0 -1
  128. package/dist/baselines/atomizer/documentReconstructor.js +0 -1449
  129. package/dist/baselines/atomizer/documentReconstructor.js.map +0 -1
  130. package/dist/baselines/atomizer/formattingFidelity.d.ts +0 -99
  131. package/dist/baselines/atomizer/formattingFidelity.d.ts.map +0 -1
  132. package/dist/baselines/atomizer/formattingFidelity.js +0 -449
  133. package/dist/baselines/atomizer/formattingFidelity.js.map +0 -1
  134. package/dist/baselines/atomizer/hierarchicalLcs.d.ts +0 -121
  135. package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +0 -1
  136. package/dist/baselines/atomizer/hierarchicalLcs.js +0 -753
  137. package/dist/baselines/atomizer/hierarchicalLcs.js.map +0 -1
  138. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts +0 -37
  139. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts.map +0 -1
  140. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js +0 -189
  141. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js.map +0 -1
  142. package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts +0 -74
  143. package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts.map +0 -1
  144. package/dist/baselines/atomizer/inPlaceModifier-containers.js +0 -171
  145. package/dist/baselines/atomizer/inPlaceModifier-containers.js.map +0 -1
  146. package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts +0 -88
  147. package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts.map +0 -1
  148. package/dist/baselines/atomizer/inPlaceModifier-deletion.js +0 -326
  149. package/dist/baselines/atomizer/inPlaceModifier-deletion.js.map +0 -1
  150. package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts +0 -85
  151. package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts.map +0 -1
  152. package/dist/baselines/atomizer/inPlaceModifier-postprocess.js +0 -402
  153. package/dist/baselines/atomizer/inPlaceModifier-postprocess.js.map +0 -1
  154. package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts +0 -39
  155. package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts.map +0 -1
  156. package/dist/baselines/atomizer/inPlaceModifier-presplit.js +0 -265
  157. package/dist/baselines/atomizer/inPlaceModifier-presplit.js.map +0 -1
  158. package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts +0 -62
  159. package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts.map +0 -1
  160. package/dist/baselines/atomizer/inPlaceModifier-shared.js +0 -139
  161. package/dist/baselines/atomizer/inPlaceModifier-shared.js.map +0 -1
  162. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +0 -198
  163. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +0 -1
  164. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +0 -475
  165. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +0 -1
  166. package/dist/baselines/atomizer/inPlaceModifier.d.ts +0 -27
  167. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +0 -1
  168. package/dist/baselines/atomizer/inPlaceModifier.js +0 -648
  169. package/dist/baselines/atomizer/inPlaceModifier.js.map +0 -1
  170. package/dist/baselines/atomizer/numberingIntegration.d.ts +0 -59
  171. package/dist/baselines/atomizer/numberingIntegration.d.ts.map +0 -1
  172. package/dist/baselines/atomizer/numberingIntegration.js +0 -209
  173. package/dist/baselines/atomizer/numberingIntegration.js.map +0 -1
  174. package/dist/baselines/atomizer/pipeline.d.ts +0 -103
  175. package/dist/baselines/atomizer/pipeline.d.ts.map +0 -1
  176. package/dist/baselines/atomizer/pipeline.js +0 -1160
  177. package/dist/baselines/atomizer/pipeline.js.map +0 -1
  178. package/dist/baselines/atomizer/premergeRuns.d.ts +0 -26
  179. package/dist/baselines/atomizer/premergeRuns.d.ts.map +0 -1
  180. package/dist/baselines/atomizer/premergeRuns.js +0 -153
  181. package/dist/baselines/atomizer/premergeRuns.js.map +0 -1
  182. package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +0 -63
  183. package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +0 -1
  184. package/dist/baselines/atomizer/trackChangesAcceptor.js +0 -254
  185. package/dist/baselines/atomizer/trackChangesAcceptor.js.map +0 -1
  186. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +0 -64
  187. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +0 -1
  188. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +0 -642
  189. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +0 -1
  190. package/dist/baselines/atomizer/xmlToWmlElement.d.ts +0 -65
  191. package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +0 -1
  192. package/dist/baselines/atomizer/xmlToWmlElement.js +0 -96
  193. package/dist/baselines/atomizer/xmlToWmlElement.js.map +0 -1
  194. package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +0 -51
  195. package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +0 -1
  196. package/dist/baselines/wmlcomparer/DocxodusWasm.js +0 -83
  197. package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +0 -1
  198. package/dist/baselines/wmlcomparer/DotnetCli.d.ts +0 -40
  199. package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +0 -1
  200. package/dist/baselines/wmlcomparer/DotnetCli.js +0 -142
  201. package/dist/baselines/wmlcomparer/DotnetCli.js.map +0 -1
  202. package/dist/cli/compare-two.d.ts +0 -28
  203. package/dist/cli/compare-two.d.ts.map +0 -1
  204. package/dist/cli/compare-two.js +0 -112
  205. package/dist/cli/compare-two.js.map +0 -1
  206. package/dist/cli/index.d.ts +0 -3
  207. package/dist/cli/index.d.ts.map +0 -1
  208. package/dist/cli/index.js +0 -25
  209. package/dist/cli/index.js.map +0 -1
  210. package/dist/compare-types.d.ts +0 -197
  211. package/dist/compare-types.d.ts.map +0 -1
  212. package/dist/compare-types.js +0 -2
  213. package/dist/compare-types.js.map +0 -1
  214. package/dist/format-detection.d.ts +0 -120
  215. package/dist/format-detection.d.ts.map +0 -1
  216. package/dist/format-detection.js +0 -339
  217. package/dist/format-detection.js.map +0 -1
  218. package/dist/move-detection.d.ts +0 -211
  219. package/dist/move-detection.d.ts.map +0 -1
  220. package/dist/move-detection.js +0 -390
  221. package/dist/move-detection.js.map +0 -1
@@ -0,0 +1,253 @@
1
+ /**
2
+ * accept_ai_edits — selective accept/reject of tracked changes by revision id or
3
+ * author (#123).
4
+ *
5
+ * The strongest argument for tracked-changes-as-canonical (#118/#120) is that
6
+ * acceptance can target only the AI actor's revisions, leaving any pre-existing
7
+ * third-party tracked changes byte-untouched. This module resolves a target set
8
+ * of revision ids (directly, or from an author string), refuses ambiguous
9
+ * overlaps by default, and drives the existing (whole-document) accept/reject
10
+ * engines through a revision-id filter so only the targeted revisions are
11
+ * resolved.
12
+ *
13
+ * Ambiguity: OOXML permits — but Word does not define behavior for — a revision
14
+ * of one actor structurally containing a revision of another (nested
15
+ * `w:ins`/`w:del`/`w:moveFrom`/`w:moveTo`). Selective accept/reject is defined
16
+ * only on a normalized, non-overlapping revision graph; the ambiguous case
17
+ * hard-errors with a structured list of the offending pairs unless the caller
18
+ * opts into `normalizeFirst` (best-effort, no byte-identical promise).
19
+ */
20
+ import { OOXML } from './namespaces.js';
21
+ import { TRACKED_CHANGE_ELEMENT_NAME_SET } from './revision-vocabulary.js';
22
+ import { acceptChanges, revisionElementId, } from './accept_changes.js';
23
+ import { rejectChanges } from './reject_changes.js';
24
+ const W_NS = OOXML.W_NS;
25
+ /**
26
+ * Content-wrapper revisions whose cross-actor nesting is the ambiguous case the
27
+ * spec calls out ("Word doesn't support nested ins/del/move"). Property-change
28
+ * and cell-topology revisions are excluded: a `w:rPrChange` legitimately sits
29
+ * inside an inserted run without making acceptance ambiguous.
30
+ */
31
+ const OVERLAP_CONTAINER_LOCALS = new Set(['ins', 'del', 'moveFrom', 'moveTo']);
32
+ /**
33
+ * Property-change revision records. Accepting removes the record; rejecting
34
+ * rewrites the enclosing property element — so a selected one that shares its
35
+ * property container with a foreign revision is ambiguous.
36
+ */
37
+ const PROPERTY_CHANGE_LOCALS = new Set([
38
+ 'rPrChange', 'pPrChange', 'sectPrChange', 'tblPrChange',
39
+ 'tblPrExChange', 'trPrChange', 'tcPrChange', 'tblGridChange', 'numberingChange',
40
+ ]);
41
+ /** A `w:ins`/`w:del` that is a paragraph-mark marker (child of `w:pPr > w:rPr`). */
42
+ function isParagraphMarkMarker(el) {
43
+ if (el.localName !== 'ins' && el.localName !== 'del')
44
+ return false;
45
+ const parent = el.parentNode;
46
+ const grand = parent?.parentNode;
47
+ return (!!parent && parent.namespaceURI === W_NS && parent.localName === 'rPr' &&
48
+ !!grand && grand.namespaceURI === W_NS && grand.localName === 'pPr');
49
+ }
50
+ /**
51
+ * The property element whose contents accept/reject would rewrite or drop when
52
+ * resolving `el`: the nearest enclosing `w:pPr` (so a paragraph-mark or pPrChange
53
+ * collision is seen across the whole paragraph properties), else `el`'s direct
54
+ * parent property element (a run's `w:rPr` for a run-level rPrChange).
55
+ */
56
+ function enclosingPropertyContainer(el) {
57
+ let cur = el.parentNode;
58
+ while (cur) {
59
+ if (cur.nodeType === 1 && cur.namespaceURI === W_NS && cur.localName === 'pPr') {
60
+ return cur;
61
+ }
62
+ cur = cur.parentNode;
63
+ }
64
+ const parent = el.parentNode;
65
+ return parent && parent.nodeType === 1 ? parent : null;
66
+ }
67
+ /** Thrown when selective accept/reject would touch an ambiguous revision graph. */
68
+ export class AmbiguousRevisionOverlapError extends Error {
69
+ code = 'AMBIGUOUS_REVISION_OVERLAP';
70
+ overlaps;
71
+ constructor(overlaps) {
72
+ super(`Selective accept/reject is ambiguous: ${overlaps.length} revision overlap(s) where a ` +
73
+ `targeted revision structurally contains, or is contained by, a non-targeted revision. ` +
74
+ `Pass normalizeFirst to attempt best-effort resolution.`);
75
+ this.name = 'AmbiguousRevisionOverlapError';
76
+ this.overlaps = overlaps;
77
+ }
78
+ }
79
+ function storyRoot(doc) {
80
+ return doc.getElementsByTagNameNS(W_NS, 'body').item(0) ?? doc.documentElement ?? null;
81
+ }
82
+ function revisionAuthor(el) {
83
+ return el.getAttributeNS(W_NS, 'author') ?? el.getAttribute('w:author');
84
+ }
85
+ /** Every tracked-change element under `root` (any revision type). */
86
+ export function collectRevisionElements(root) {
87
+ const out = [];
88
+ const all = root.getElementsByTagNameNS(W_NS, '*');
89
+ for (let i = 0; i < all.length; i++) {
90
+ const el = all[i];
91
+ if (TRACKED_CHANGE_ELEMENT_NAME_SET.has(el.localName))
92
+ out.push(el);
93
+ }
94
+ return out;
95
+ }
96
+ /**
97
+ * Resolve the target revision-id set from a selector, given the revision
98
+ * elements available across all stories. `revisionIds` wins when provided;
99
+ * otherwise `author` resolves to the ids of every revision it authored.
100
+ */
101
+ export function resolveSelectedIds(revisionElements, selector) {
102
+ const ids = new Set();
103
+ if (selector.revisionIds && selector.revisionIds.length > 0) {
104
+ for (const id of selector.revisionIds)
105
+ ids.add(String(id));
106
+ return ids;
107
+ }
108
+ if (selector.author != null) {
109
+ for (const el of revisionElements) {
110
+ if (revisionAuthor(el) === selector.author) {
111
+ const id = revisionElementId(el);
112
+ if (id != null)
113
+ ids.add(id);
114
+ }
115
+ }
116
+ return ids;
117
+ }
118
+ throw new Error('AiEditSelector requires either revisionIds or author.');
119
+ }
120
+ /**
121
+ * Find ambiguous overlaps within a single story: a targeted content-wrapper
122
+ * revision that structurally contains — or is contained by — a non-targeted
123
+ * content-wrapper revision.
124
+ */
125
+ export function detectAmbiguousOverlaps(root, selectedIds) {
126
+ const overlaps = [];
127
+ const seen = new Set();
128
+ const record = (outer, inner) => {
129
+ const oid = revisionElementId(outer);
130
+ const iid = revisionElementId(inner);
131
+ const key = `${oid}|${iid}|${outer.localName}|${inner.localName}`;
132
+ if (seen.has(key))
133
+ return;
134
+ seen.add(key);
135
+ overlaps.push({
136
+ outerId: oid,
137
+ outerLocalName: outer.localName,
138
+ outerAuthor: revisionAuthor(outer),
139
+ innerId: iid,
140
+ innerLocalName: inner.localName,
141
+ innerAuthor: revisionAuthor(inner),
142
+ });
143
+ };
144
+ const isSelectedContainer = (el) => {
145
+ if (!OVERLAP_CONTAINER_LOCALS.has(el.localName))
146
+ return false;
147
+ const id = revisionElementId(el);
148
+ return id != null && selectedIds.has(id);
149
+ };
150
+ const all = root.getElementsByTagNameNS(W_NS, '*');
151
+ for (let i = 0; i < all.length; i++) {
152
+ const el = all[i];
153
+ if (!isSelectedContainer(el))
154
+ continue;
155
+ // Foreign container revision nested INSIDE the selected one.
156
+ const descendants = el.getElementsByTagNameNS(W_NS, '*');
157
+ for (let j = 0; j < descendants.length; j++) {
158
+ const d = descendants[j];
159
+ if (!OVERLAP_CONTAINER_LOCALS.has(d.localName))
160
+ continue;
161
+ const did = revisionElementId(d);
162
+ if (did == null || !selectedIds.has(did))
163
+ record(el, d);
164
+ }
165
+ // Selected revision nested INSIDE a foreign container revision.
166
+ let anc = el.parentNode;
167
+ while (anc) {
168
+ if (anc.nodeType === 1) {
169
+ const a = anc;
170
+ if (a.namespaceURI === W_NS && OVERLAP_CONTAINER_LOCALS.has(a.localName)) {
171
+ const aid = revisionElementId(a);
172
+ if (aid == null || !selectedIds.has(aid))
173
+ record(a, el);
174
+ }
175
+ }
176
+ anc = anc.parentNode;
177
+ }
178
+ }
179
+ // Property-container collision: a selected property-change or paragraph-mark
180
+ // revision that shares its property container (w:pPr or a run's w:rPr) with a
181
+ // foreign revision. Accepting a paragraph-mark merge drops the source w:pPr,
182
+ // and rejecting a property change rewrites the container — either would alter
183
+ // the foreign revision, so it is ambiguous.
184
+ for (let i = 0; i < all.length; i++) {
185
+ const el = all[i];
186
+ const isProperty = PROPERTY_CHANGE_LOCALS.has(el.localName) || isParagraphMarkMarker(el);
187
+ if (!isProperty)
188
+ continue;
189
+ const id = revisionElementId(el);
190
+ if (id == null || !selectedIds.has(id))
191
+ continue;
192
+ const container = enclosingPropertyContainer(el);
193
+ if (!container)
194
+ continue;
195
+ const siblings = container.getElementsByTagNameNS(W_NS, '*');
196
+ for (let j = 0; j < siblings.length; j++) {
197
+ const s = siblings[j];
198
+ if (s === el)
199
+ continue;
200
+ if (!TRACKED_CHANGE_ELEMENT_NAME_SET.has(s.localName))
201
+ continue;
202
+ const sid = revisionElementId(s);
203
+ if (sid == null || !selectedIds.has(sid))
204
+ record(el, s);
205
+ }
206
+ }
207
+ return overlaps;
208
+ }
209
+ /** Build a revision filter that matches exactly the selected ids. */
210
+ export function selectedIdFilter(selectedIds) {
211
+ return (el) => {
212
+ const id = revisionElementId(el);
213
+ return id != null && selectedIds.has(id);
214
+ };
215
+ }
216
+ /**
217
+ * Accept only the targeted revisions in a single story `doc`, leaving all other
218
+ * revisions byte-untouched. Hard-errors on an ambiguous overlap unless
219
+ * `normalizeFirst` is set. Mutates `doc` in place.
220
+ */
221
+ export function acceptAIEdits(doc, selector) {
222
+ const root = storyRoot(doc);
223
+ if (!root)
224
+ return { result: emptyAccept(), selectedIds: [], overlaps: [] };
225
+ const selectedIds = resolveSelectedIds(collectRevisionElements(root), selector);
226
+ const overlaps = selector.normalizeFirst ? [] : detectAmbiguousOverlaps(root, selectedIds);
227
+ if (overlaps.length > 0)
228
+ throw new AmbiguousRevisionOverlapError(overlaps);
229
+ const result = acceptChanges(doc, { filter: selectedIdFilter(selectedIds) });
230
+ return { result, selectedIds: [...selectedIds], overlaps };
231
+ }
232
+ /**
233
+ * Reject only the targeted revisions in a single story `doc`, leaving all other
234
+ * revisions byte-untouched. Symmetric to {@link acceptAIEdits}.
235
+ */
236
+ export function rejectAIEdits(doc, selector) {
237
+ const root = storyRoot(doc);
238
+ if (!root)
239
+ return { result: emptyReject(), selectedIds: [], overlaps: [] };
240
+ const selectedIds = resolveSelectedIds(collectRevisionElements(root), selector);
241
+ const overlaps = selector.normalizeFirst ? [] : detectAmbiguousOverlaps(root, selectedIds);
242
+ if (overlaps.length > 0)
243
+ throw new AmbiguousRevisionOverlapError(overlaps);
244
+ const result = rejectChanges(doc, { filter: selectedIdFilter(selectedIds) });
245
+ return { result, selectedIds: [...selectedIds], overlaps };
246
+ }
247
+ function emptyAccept() {
248
+ return { insertionsAccepted: 0, deletionsAccepted: 0, movesResolved: 0, propertyChangesResolved: 0 };
249
+ }
250
+ function emptyReject() {
251
+ return { insertionsRemoved: 0, deletionsRestored: 0, movesReverted: 0, propertyChangesReverted: 0 };
252
+ }
253
+ //# sourceMappingURL=accept_ai_edits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accept_ai_edits.js","sourceRoot":"","sources":["../../src/primitives/accept_ai_edits.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * accept_changes — accept all tracked changes in a OOXML document body.
3
3
  *
4
- * Produces a clean document with no revision markup by:
4
+ * Resolves the supported revision subset by:
5
5
  * - Removing w:del elements and their content
6
6
  * - Unwrapping w:ins elements (promoting children)
7
7
  * - Removing w:moveFrom (source), unwrapping w:moveTo (destination)
@@ -10,6 +10,10 @@
10
10
  * mark was a tracked deletion into the following paragraph
11
11
  * - Cleaning up move range markers and rsidDel attributes
12
12
  *
13
+ * Numbering, table-grid/exception, cell-topology, custom XML, and extension
14
+ * conflict records are not semantically resolved here; see the advanced
15
+ * revision classification manifest.
16
+ *
13
17
  * Operates on the W3C DOM (`@xmldom/xmldom`) — the same API used
14
18
  * throughout docx-primitives-ts (contrast with docx-comparison's
15
19
  * custom WmlElement AST).
@@ -20,12 +24,41 @@ export type AcceptChangesResult = {
20
24
  movesResolved: number;
21
25
  propertyChangesResolved: number;
22
26
  };
27
+ /**
28
+ * Predicate selecting which revision elements a sweep processes. The default
29
+ * ({@link ACCEPT_ALL}) processes every revision — the original whole-document
30
+ * behavior. `acceptAIEdits`/`rejectAIEdits` (#123) pass a predicate that matches
31
+ * only the targeted revision ids so foreign (non-target) revisions are left
32
+ * byte-untouched.
33
+ */
34
+ export type RevisionFilter = (el: Element) => boolean;
35
+ /** The package-wide revision id (`w:id`) of a revision element, if any. */
36
+ export declare function revisionElementId(el: Element): string | null;
23
37
  /**
24
38
  * Accept all tracked changes in the document body or story root, producing a
25
- * clean document with no revision markup.
39
+ * document with supported revision records resolved.
26
40
  *
27
41
  * Mutates the Document in place (same convention as simplifyRedlines
28
42
  * and mergeRuns).
43
+ *
44
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.21
45
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.22
46
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.25
47
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.26
48
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.29
49
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.30
50
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.31
51
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.32
52
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.34
53
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.36
54
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.37
55
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.moves
56
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.run-properties-paragraph-mark
57
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.section-properties
58
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.table-properties
59
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.table-cell-properties
29
60
  */
30
- export declare function acceptChanges(doc: Document): AcceptChangesResult;
61
+ export declare function acceptChanges(doc: Document, opts?: {
62
+ filter?: RevisionFilter;
63
+ }): AcceptChangesResult;
31
64
  //# sourceMappingURL=accept_changes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accept_changes.d.ts","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AA+NF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,mBAAmB,CA8FhE"}
1
+ {"version":3,"file":"accept_changes.d.ts","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC;AAItD,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE5D;AA2OD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,QAAQ,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,GACjC,mBAAmB,CAwGrB"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * accept_changes — accept all tracked changes in a OOXML document body.
3
3
  *
4
- * Produces a clean document with no revision markup by:
4
+ * Resolves the supported revision subset by:
5
5
  * - Removing w:del elements and their content
6
6
  * - Unwrapping w:ins elements (promoting children)
7
7
  * - Removing w:moveFrom (source), unwrapping w:moveTo (destination)
@@ -10,12 +10,21 @@
10
10
  * mark was a tracked deletion into the following paragraph
11
11
  * - Cleaning up move range markers and rsidDel attributes
12
12
  *
13
+ * Numbering, table-grid/exception, cell-topology, custom XML, and extension
14
+ * conflict records are not semantically resolved here; see the advanced
15
+ * revision classification manifest.
16
+ *
13
17
  * Operates on the W3C DOM (`@xmldom/xmldom`) — the same API used
14
18
  * throughout docx-primitives-ts (contrast with docx-comparison's
15
19
  * custom WmlElement AST).
16
20
  */
17
21
  import { OOXML } from './namespaces.js';
18
22
  const W_NS = OOXML.W_NS;
23
+ const ACCEPT_ALL = () => true;
24
+ /** The package-wide revision id (`w:id`) of a revision element, if any. */
25
+ export function revisionElementId(el) {
26
+ return el.getAttributeNS(W_NS, 'id') ?? el.getAttribute('w:id');
27
+ }
19
28
  // ── DOM helpers (internal) ──────────────────────────────────────────
20
29
  function isW(node, localName) {
21
30
  return (node.nodeType === 1 &&
@@ -34,8 +43,8 @@ function getDepth(node) {
34
43
  function collectByLocalName(container, localName) {
35
44
  return Array.from(container.getElementsByTagNameNS(W_NS, localName));
36
45
  }
37
- function removeAllByLocalName(container, localName) {
38
- const elements = collectByLocalName(container, localName);
46
+ function removeAllByLocalName(container, localName, filter = ACCEPT_ALL) {
47
+ const elements = collectByLocalName(container, localName).filter(filter);
39
48
  let count = 0;
40
49
  for (const el of elements) {
41
50
  if (el.parentNode) {
@@ -45,8 +54,8 @@ function removeAllByLocalName(container, localName) {
45
54
  }
46
55
  return count;
47
56
  }
48
- function unwrapAllByLocalName(container, localName) {
49
- const elements = collectByLocalName(container, localName);
57
+ function unwrapAllByLocalName(container, localName, filter = ACCEPT_ALL) {
58
+ const elements = collectByLocalName(container, localName).filter(filter);
50
59
  // Sort deepest-first to handle nested wrappers correctly
51
60
  elements.sort((a, b) => getDepth(b) - getDepth(a));
52
61
  let count = 0;
@@ -67,7 +76,7 @@ function unwrapAllByLocalName(container, localName) {
67
76
  * Check if a paragraph has a paragraph-level revision marker.
68
77
  * Pattern: w:p > w:pPr > w:rPr > w:del (or w:ins)
69
78
  */
70
- function paragraphHasParaMarker(p, markerLocalName) {
79
+ function paragraphHasParaMarker(p, markerLocalName, filter = ACCEPT_ALL) {
71
80
  for (let i = 0; i < p.childNodes.length; i++) {
72
81
  const child = p.childNodes[i];
73
82
  if (!isW(child, 'pPr'))
@@ -78,7 +87,7 @@ function paragraphHasParaMarker(p, markerLocalName) {
78
87
  continue;
79
88
  for (let k = 0; k < pPrChild.childNodes.length; k++) {
80
89
  const rPrChild = pPrChild.childNodes[k];
81
- if (isW(rPrChild, markerLocalName))
90
+ if (isW(rPrChild, markerLocalName) && filter(rPrChild))
82
91
  return true;
83
92
  }
84
93
  }
@@ -231,12 +240,31 @@ function resolveParagraphMarkRevision(p) {
231
240
  // ── Public API ──────────────────────────────────────────────────────
232
241
  /**
233
242
  * Accept all tracked changes in the document body or story root, producing a
234
- * clean document with no revision markup.
243
+ * document with supported revision records resolved.
235
244
  *
236
245
  * Mutates the Document in place (same convention as simplifyRedlines
237
246
  * and mergeRuns).
247
+ *
248
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.21
249
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.22
250
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.25
251
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.26
252
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.29
253
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.30
254
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.31
255
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.32
256
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.34
257
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.36
258
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.37
259
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.moves
260
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.run-properties-paragraph-mark
261
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.section-properties
262
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.table-properties
263
+ * @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.table-cell-properties
238
264
  */
239
- export function acceptChanges(doc) {
265
+ export function acceptChanges(doc, opts) {
266
+ const filter = opts?.filter ?? ACCEPT_ALL;
267
+ const selective = filter !== ACCEPT_ALL;
240
268
  const root = doc.getElementsByTagNameNS(W_NS, 'body').item(0) ?? doc.documentElement;
241
269
  if (!root) {
242
270
  return { insertionsAccepted: 0, deletionsAccepted: 0, movesResolved: 0, propertyChangesResolved: 0 };
@@ -255,27 +283,29 @@ export function acceptChanges(doc) {
255
283
  // accept. safe-docx's deleted paragraphs always carry the mark now, so the
256
284
  // mark-based rule suffices and is Word-faithful. (Mirrors acceptAllChanges and the
257
285
  // reject-side rule.)
258
- if (paragraphHasParaMarker(p, 'del')) {
286
+ if (paragraphHasParaMarker(p, 'del', filter)) {
259
287
  markDeletedParagraphs.push(p);
260
288
  }
261
289
  }
262
290
  // Phase B — Remove deletions and move sources
263
- const deletionsAccepted = removeAllByLocalName(root, 'del');
264
- const moveFromRemoved = removeAllByLocalName(root, 'moveFrom');
265
- removeAllByLocalName(root, 'moveFromRangeStart');
266
- removeAllByLocalName(root, 'moveFromRangeEnd');
267
- removeAllByLocalName(root, 'moveToRangeStart');
268
- removeAllByLocalName(root, 'moveToRangeEnd');
291
+ const deletionsAccepted = removeAllByLocalName(root, 'del', filter);
292
+ const moveFromRemoved = removeAllByLocalName(root, 'moveFrom', filter);
293
+ removeAllByLocalName(root, 'moveFromRangeStart', filter);
294
+ removeAllByLocalName(root, 'moveFromRangeEnd', filter);
295
+ removeAllByLocalName(root, 'moveToRangeStart', filter);
296
+ removeAllByLocalName(root, 'moveToRangeEnd', filter);
269
297
  // Phase C — Unwrap insertions and move destinations (depth-sorted)
270
- const insertionsAccepted = unwrapAllByLocalName(root, 'ins');
271
- const moveToUnwrapped = unwrapAllByLocalName(root, 'moveTo');
298
+ const insertionsAccepted = unwrapAllByLocalName(root, 'ins', filter);
299
+ const moveToUnwrapped = unwrapAllByLocalName(root, 'moveTo', filter);
272
300
  // Phase D — Remove property change records
273
301
  let propertyChangesResolved = 0;
274
302
  for (const localName of PR_CHANGE_LOCALS) {
275
- propertyChangesResolved += removeAllByLocalName(root, localName);
303
+ propertyChangesResolved += removeAllByLocalName(root, localName, filter);
276
304
  }
277
305
  // Phase E — Cleanup
278
- // Strip paragraph-level revision markers from w:pPr/w:rPr
306
+ // Strip paragraph-level revision markers from w:pPr/w:rPr (only those the
307
+ // filter selects, so a selective accept leaves foreign paragraph-mark
308
+ // revisions byte-untouched).
279
309
  for (const p of collectByLocalName(root, 'p')) {
280
310
  for (let i = 0; i < p.childNodes.length; i++) {
281
311
  const child = p.childNodes[i];
@@ -289,7 +319,7 @@ export function acceptChanges(doc) {
289
319
  const toRemove = [];
290
320
  for (let k = 0; k < pPrChild.childNodes.length; k++) {
291
321
  const rPrChild = pPrChild.childNodes[k];
292
- if (isW(rPrChild, 'ins') || isW(rPrChild, 'del')) {
322
+ if ((isW(rPrChild, 'ins') || isW(rPrChild, 'del')) && filter(rPrChild)) {
293
323
  toRemove.push(rPrChild);
294
324
  }
295
325
  }
@@ -305,16 +335,22 @@ export function acceptChanges(doc) {
305
335
  for (const p of markDeletedParagraphs) {
306
336
  resolveParagraphMarkRevision(p);
307
337
  }
308
- // Strip w:rsidDel attributes on remaining elements
309
- const allElements = root.getElementsByTagNameNS(W_NS, '*');
310
- for (let i = 0; i < allElements.length; i++) {
311
- const el = allElements[i];
312
- if (el.hasAttributeNS(W_NS, 'rsidDel')) {
313
- el.removeAttributeNS(W_NS, 'rsidDel');
314
- }
315
- // Also check prefixed form
316
- if (el.hasAttribute('w:rsidDel')) {
317
- el.removeAttribute('w:rsidDel');
338
+ // Strip w:rsidDel attributes on remaining elements. Skipped in selective
339
+ // mode: rsidDel is a document-wide save-id, and a selective accept must not
340
+ // mutate elements outside the targeted revision set (the mixed-author
341
+ // byte-identical invariant, #125). The accepted revisions are removed/unwrapped
342
+ // above, taking their own rsidDel with them.
343
+ if (!selective) {
344
+ const allElements = root.getElementsByTagNameNS(W_NS, '*');
345
+ for (let i = 0; i < allElements.length; i++) {
346
+ const el = allElements[i];
347
+ if (el.hasAttributeNS(W_NS, 'rsidDel')) {
348
+ el.removeAttributeNS(W_NS, 'rsidDel');
349
+ }
350
+ // Also check prefixed form
351
+ if (el.hasAttribute('w:rsidDel')) {
352
+ el.removeAttribute('w:rsidDel');
353
+ }
318
354
  }
319
355
  }
320
356
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"accept_changes.js","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accept_changes.js","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,55 @@ export type ParagraphBookmark = {
2
2
  name: string;
3
3
  numericId: number;
4
4
  };
5
+ /**
6
+ * Collect every bookmark name attached to a paragraph, in discovery order.
7
+ *
8
+ * Supports both attachment styles:
9
+ * 1) sibling: `<w:bookmarkStart/> <w:p/> <w:bookmarkEnd/>`
10
+ * 2) inside: `<w:p><w:bookmarkStart/> ... </w:p>`
11
+ *
12
+ * NOTE: this is a *reporting* helper — it answers "what names sit around/inside
13
+ * this paragraph", by adjacency. It deliberately does NOT pair start/end by
14
+ * `w:id`, so it can include a neighbouring point bookmark or one end of a
15
+ * multi-paragraph range. Do not use it to resolve a caller-supplied anchor;
16
+ * `findParagraphByBookmarkId` does the id-paired, exactly-one-paragraph check.
17
+ */
18
+ export declare function getParagraphBookmarkNames(p: Element): string[];
19
+ /**
20
+ * The paragraph's canonical safe-docx id (`_bk_*`), or null when it has none.
21
+ *
22
+ * This intentionally stays `_bk_`-only: it is the id we *report* for a paragraph.
23
+ * To *resolve* an anchor the caller supplied, use `findParagraphByBookmarkId`,
24
+ * which accepts any bookmark name on the paragraph.
25
+ */
5
26
  export declare function getParagraphBookmarkId(p: Element): string | null;
6
27
  export declare function cleanupInternalBookmarks(doc: Document): number;
7
28
  export declare function insertParagraphBookmarks(doc: Document, _attachmentId: string): {
8
29
  indexedParagraphs: number;
9
30
  };
10
31
  export declare function insertSingleParagraphBookmark(doc: Document, p: Element): string;
32
+ /**
33
+ * Resolve a caller-supplied anchor to its paragraph.
34
+ *
35
+ * Two strictly separated paths:
36
+ *
37
+ * 1. **Canonical `_bk_*`** — unchanged from before foreign anchors existed:
38
+ * the first paragraph whose reported id equals `bookmarkId`. A `_bk_*` anchor
39
+ * NEVER falls through to the foreign path, so widening cannot move an
40
+ * existing lookup (a paragraph can carry several `_bk_*` names; only the
41
+ * reported one may resolve it).
42
+ *
43
+ * 2. **Foreign name** (a host application's own stable paragraph bookmark, or a
44
+ * Word `_Toc*`/`_Ref*`) — accepted ONLY when the `w:id`-paired bookmark range
45
+ * covers exactly one paragraph. This rejects a zero-length point bookmark
46
+ * adjacent to a paragraph (covers none) and a heading/TOC bookmark spanning
47
+ * several (covers many). Both would otherwise resolve to a paragraph the
48
+ * bookmark does not actually mark — i.e. edit the wrong clause.
49
+ *
50
+ * Anything ambiguous returns null so the caller can fall back rather than guess.
51
+ * Matching is exact on the bookmark name.
52
+ *
53
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.6.2
54
+ */
11
55
  export declare function findParagraphByBookmarkId(doc: Document, bookmarkId: string): Element | null;
12
56
  //# sourceMappingURL=bookmarks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bookmarks.d.ts","sourceRoot":"","sources":["../../src/primitives/bookmarks.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAwHF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA+BhE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAuB9D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAkD5G;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAoC/E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAO3F"}
1
+ {"version":3,"file":"bookmarks.d.ts","sourceRoot":"","sources":["../../src/primitives/bookmarks.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAgNF;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CA4B9D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAuB9D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAkD5G;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAoC/E;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa3F"}