@usejunior/docx-core 0.19.1 → 0.21.2

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 (180) hide show
  1. package/README.md +12 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/conformance-adapter.d.ts.map +1 -1
  4. package/dist/cli/conformance-adapter.js +0 -27
  5. package/dist/cli/conformance-adapter.js.map +1 -1
  6. package/dist/core-types.d.ts +1 -139
  7. package/dist/core-types.d.ts.map +1 -1
  8. package/dist/core-types.js +1 -3
  9. package/dist/core-types.js.map +1 -1
  10. package/dist/generation/compile.d.ts.map +1 -1
  11. package/dist/generation/compile.js +1 -3
  12. package/dist/generation/compile.js.map +1 -1
  13. package/dist/index.d.ts +5 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +13 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/integration/generation-probes.d.ts +36 -2
  18. package/dist/integration/generation-probes.d.ts.map +1 -1
  19. package/dist/integration/generation-probes.js +137 -15
  20. package/dist/integration/generation-probes.js.map +1 -1
  21. package/dist/integration/libreoffice-oracle.d.ts +3 -1
  22. package/dist/integration/libreoffice-oracle.d.ts.map +1 -1
  23. package/dist/integration/libreoffice-oracle.js +10 -4
  24. package/dist/integration/libreoffice-oracle.js.map +1 -1
  25. package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
  26. package/dist/integration/synthetic-docx-fixture.js +8 -0
  27. package/dist/integration/synthetic-docx-fixture.js.map +1 -1
  28. package/dist/primitives/accept_ai_edits.js +14 -2
  29. package/dist/primitives/accept_ai_edits.js.map +1 -1
  30. package/dist/primitives/accept_changes.d.ts +6 -0
  31. package/dist/primitives/accept_changes.d.ts.map +1 -1
  32. package/dist/primitives/accept_changes.js +236 -62
  33. package/dist/primitives/accept_changes.js.map +1 -1
  34. package/dist/primitives/bookmarks.d.ts +8 -2
  35. package/dist/primitives/bookmarks.d.ts.map +1 -1
  36. package/dist/primitives/bookmarks.js +31 -7
  37. package/dist/primitives/bookmarks.js.map +1 -1
  38. package/dist/primitives/comments.d.ts +101 -5
  39. package/dist/primitives/comments.d.ts.map +1 -1
  40. package/dist/primitives/comments.js +356 -156
  41. package/dist/primitives/comments.js.map +1 -1
  42. package/dist/primitives/conformance.d.ts +42 -0
  43. package/dist/primitives/conformance.d.ts.map +1 -0
  44. package/dist/primitives/conformance.js +61 -0
  45. package/dist/primitives/conformance.js.map +1 -0
  46. package/dist/primitives/document.d.ts +145 -2
  47. package/dist/primitives/document.d.ts.map +1 -1
  48. package/dist/primitives/document.js +505 -27
  49. package/dist/primitives/document.js.map +1 -1
  50. package/dist/primitives/document_view-headings.d.ts +3 -1
  51. package/dist/primitives/document_view-headings.d.ts.map +1 -1
  52. package/dist/primitives/document_view-headings.js +5 -5
  53. package/dist/primitives/document_view-headings.js.map +1 -1
  54. package/dist/primitives/document_view.d.ts +2 -0
  55. package/dist/primitives/document_view.d.ts.map +1 -1
  56. package/dist/primitives/document_view.js +18 -4
  57. package/dist/primitives/document_view.js.map +1 -1
  58. package/dist/primitives/errors.d.ts +3 -2
  59. package/dist/primitives/errors.d.ts.map +1 -1
  60. package/dist/primitives/errors.js +3 -1
  61. package/dist/primitives/errors.js.map +1 -1
  62. package/dist/primitives/extract_revisions.d.ts +23 -6
  63. package/dist/primitives/extract_revisions.d.ts.map +1 -1
  64. package/dist/primitives/extract_revisions.js +208 -38
  65. package/dist/primitives/extract_revisions.js.map +1 -1
  66. package/dist/primitives/field_evaluation.d.ts +70 -0
  67. package/dist/primitives/field_evaluation.d.ts.map +1 -0
  68. package/dist/primitives/field_evaluation.js +462 -0
  69. package/dist/primitives/field_evaluation.js.map +1 -0
  70. package/dist/primitives/footnotes.d.ts +53 -3
  71. package/dist/primitives/footnotes.d.ts.map +1 -1
  72. package/dist/primitives/footnotes.js +228 -83
  73. package/dist/primitives/footnotes.js.map +1 -1
  74. package/dist/primitives/index.d.ts +12 -1
  75. package/dist/primitives/index.d.ts.map +1 -1
  76. package/dist/primitives/index.js +12 -1
  77. package/dist/primitives/index.js.map +1 -1
  78. package/dist/primitives/merge_runs.d.ts +3 -1
  79. package/dist/primitives/merge_runs.d.ts.map +1 -1
  80. package/dist/primitives/merge_runs.js +12 -2
  81. package/dist/primitives/merge_runs.js.map +1 -1
  82. package/dist/primitives/namespaces.d.ts +10 -2
  83. package/dist/primitives/namespaces.d.ts.map +1 -1
  84. package/dist/primitives/namespaces.js +11 -2
  85. package/dist/primitives/namespaces.js.map +1 -1
  86. package/dist/primitives/note_conversion.d.ts +11 -0
  87. package/dist/primitives/note_conversion.d.ts.map +1 -0
  88. package/dist/primitives/note_conversion.js +12 -0
  89. package/dist/primitives/note_conversion.js.map +1 -0
  90. package/dist/primitives/paragraph-index.d.ts +31 -0
  91. package/dist/primitives/paragraph-index.d.ts.map +1 -0
  92. package/dist/primitives/paragraph-index.js +140 -0
  93. package/dist/primitives/paragraph-index.js.map +1 -0
  94. package/dist/primitives/paragraph_merge_formatting.d.ts +24 -0
  95. package/dist/primitives/paragraph_merge_formatting.d.ts.map +1 -0
  96. package/dist/primitives/paragraph_merge_formatting.js +86 -0
  97. package/dist/primitives/paragraph_merge_formatting.js.map +1 -0
  98. package/dist/primitives/paragraph_numbering.d.ts +40 -0
  99. package/dist/primitives/paragraph_numbering.d.ts.map +1 -0
  100. package/dist/primitives/paragraph_numbering.js +198 -0
  101. package/dist/primitives/paragraph_numbering.js.map +1 -0
  102. package/dist/primitives/paragraph_structure.d.ts +19 -0
  103. package/dist/primitives/paragraph_structure.d.ts.map +1 -0
  104. package/dist/primitives/paragraph_structure.js +66 -0
  105. package/dist/primitives/paragraph_structure.js.map +1 -0
  106. package/dist/primitives/reject_changes.d.ts +6 -0
  107. package/dist/primitives/reject_changes.d.ts.map +1 -1
  108. package/dist/primitives/reject_changes.js +278 -68
  109. package/dist/primitives/reject_changes.js.map +1 -1
  110. package/dist/primitives/relationships.d.ts +22 -0
  111. package/dist/primitives/relationships.d.ts.map +1 -1
  112. package/dist/primitives/relationships.js +87 -0
  113. package/dist/primitives/relationships.js.map +1 -1
  114. package/dist/primitives/revision-parts.d.ts +15 -0
  115. package/dist/primitives/revision-parts.d.ts.map +1 -1
  116. package/dist/primitives/revision-parts.js +33 -1
  117. package/dist/primitives/revision-parts.js.map +1 -1
  118. package/dist/primitives/sectPrAudit.d.ts.map +1 -1
  119. package/dist/primitives/sectPrAudit.js +10 -1
  120. package/dist/primitives/sectPrAudit.js.map +1 -1
  121. package/dist/primitives/sections.d.ts +135 -0
  122. package/dist/primitives/sections.d.ts.map +1 -0
  123. package/dist/primitives/sections.js +644 -0
  124. package/dist/primitives/sections.js.map +1 -0
  125. package/dist/primitives/styles.d.ts +61 -0
  126. package/dist/primitives/styles.d.ts.map +1 -1
  127. package/dist/primitives/styles.js +207 -25
  128. package/dist/primitives/styles.js.map +1 -1
  129. package/dist/primitives/symbol_run_content.d.ts +42 -0
  130. package/dist/primitives/symbol_run_content.d.ts.map +1 -0
  131. package/dist/primitives/symbol_run_content.js +79 -0
  132. package/dist/primitives/symbol_run_content.js.map +1 -0
  133. package/dist/primitives/table_cells.d.ts +49 -0
  134. package/dist/primitives/table_cells.d.ts.map +1 -0
  135. package/dist/primitives/table_cells.js +149 -0
  136. package/dist/primitives/table_cells.js.map +1 -0
  137. package/dist/primitives/table_columns.d.ts +50 -0
  138. package/dist/primitives/table_columns.d.ts.map +1 -0
  139. package/dist/primitives/table_columns.js +138 -0
  140. package/dist/primitives/table_columns.js.map +1 -0
  141. package/dist/primitives/table_edit_common.d.ts +39 -0
  142. package/dist/primitives/table_edit_common.d.ts.map +1 -0
  143. package/dist/primitives/table_edit_common.js +163 -0
  144. package/dist/primitives/table_edit_common.js.map +1 -0
  145. package/dist/primitives/table_occupancy.d.ts +39 -0
  146. package/dist/primitives/table_occupancy.d.ts.map +1 -0
  147. package/dist/primitives/table_occupancy.js +145 -0
  148. package/dist/primitives/table_occupancy.js.map +1 -0
  149. package/dist/primitives/table_rows.d.ts +56 -0
  150. package/dist/primitives/table_rows.d.ts.map +1 -0
  151. package/dist/primitives/table_rows.js +390 -0
  152. package/dist/primitives/table_rows.js.map +1 -0
  153. package/dist/primitives/text.d.ts +69 -1
  154. package/dist/primitives/text.d.ts.map +1 -1
  155. package/dist/primitives/text.js +592 -102
  156. package/dist/primitives/text.js.map +1 -1
  157. package/dist/primitives/track-changes-emitter.d.ts +23 -0
  158. package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
  159. package/dist/primitives/track-changes-emitter.js +64 -1
  160. package/dist/primitives/track-changes-emitter.js.map +1 -1
  161. package/dist/primitives/validate_document.d.ts.map +1 -1
  162. package/dist/primitives/validate_document.js +22 -1
  163. package/dist/primitives/validate_document.js.map +1 -1
  164. package/dist/primitives/zip.d.ts +22 -1
  165. package/dist/primitives/zip.d.ts.map +1 -1
  166. package/dist/primitives/zip.js +47 -8
  167. package/dist/primitives/zip.js.map +1 -1
  168. package/dist/shared/docx/DocxArchive.d.ts +6 -2
  169. package/dist/shared/docx/DocxArchive.d.ts.map +1 -1
  170. package/dist/shared/docx/DocxArchive.js +17 -4
  171. package/dist/shared/docx/DocxArchive.js.map +1 -1
  172. package/dist/shared/field-semantics.d.ts +26 -0
  173. package/dist/shared/field-semantics.d.ts.map +1 -0
  174. package/dist/shared/field-semantics.js +232 -0
  175. package/dist/shared/field-semantics.js.map +1 -0
  176. package/dist/shared/field-structure.d.ts +10 -1
  177. package/dist/shared/field-structure.d.ts.map +1 -1
  178. package/dist/shared/field-structure.js +31 -12
  179. package/dist/shared/field-structure.js.map +1 -1
  180. package/package.json +4 -5
@@ -0,0 +1,390 @@
1
+ import { insertSingleParagraphBookmark, findParagraphByBookmarkId, } from './bookmarks.js';
2
+ import { childElements, createWmlElement, getDirectChildrenByName, isW } from './dom-helpers.js';
3
+ import { SafeDocxError } from './errors.js';
4
+ import { OOXML } from './namespaces.js';
5
+ import { inventoryTableOccupancy, TableOccupancyError } from './table_occupancy.js';
6
+ import { allocateRevisionId, createRevisionContainer } from './track-changes-emitter.js';
7
+ const ALLOWED_TABLE_RANGE_MARKERS = new Set([
8
+ 'bookmarkStart', 'bookmarkEnd', 'commentRangeStart', 'commentRangeEnd',
9
+ 'permStart', 'permEnd', 'proofErr', 'moveFromRangeStart', 'moveFromRangeEnd',
10
+ 'moveToRangeStart', 'moveToRangeEnd', 'customXmlInsRangeStart',
11
+ 'customXmlInsRangeEnd', 'customXmlDelRangeStart', 'customXmlDelRangeEnd',
12
+ 'customXmlMoveFromRangeStart', 'customXmlMoveFromRangeEnd',
13
+ 'customXmlMoveToRangeStart', 'customXmlMoveToRangeEnd',
14
+ ]);
15
+ const TRPR_EXCLUDED = new Set(['cnfStyle', 'tblHeader', 'hidden', 'divId', 'ins', 'del', 'trPrChange']);
16
+ const TCPR_EXCLUDED = new Set(['cnfStyle', 'hideMark', 'cellIns', 'cellDel', 'cellMerge', 'tcPrChange']);
17
+ const PPR_EXCLUDED = new Set(['numPr', 'sectPr', 'pPrChange']);
18
+ const RPR_EXCLUDED = new Set(['ins', 'del', 'moveFrom', 'moveTo', 'rPrChange']);
19
+ const RANGE_PAIRS = [
20
+ ['bookmarkStart', 'bookmarkEnd'], ['commentRangeStart', 'commentRangeEnd'],
21
+ ['permStart', 'permEnd'], ['moveFromRangeStart', 'moveFromRangeEnd'],
22
+ ['moveToRangeStart', 'moveToRangeEnd'],
23
+ ['customXmlInsRangeStart', 'customXmlInsRangeEnd'],
24
+ ['customXmlDelRangeStart', 'customXmlDelRangeEnd'],
25
+ ['customXmlMoveFromRangeStart', 'customXmlMoveFromRangeEnd'],
26
+ ['customXmlMoveToRangeStart', 'customXmlMoveToRangeEnd'],
27
+ ];
28
+ function markerId(marker) {
29
+ return marker.getAttributeNS(OOXML.W_NS, 'id') ?? marker.getAttribute('w:id');
30
+ }
31
+ /** Remove the surviving half of any supported range cut by subtree removal. */
32
+ export function removeOrphanedRangeEndpointsForSubtree(root, subtree) {
33
+ for (const [startName, endName] of RANGE_PAIRS) {
34
+ const starts = Array.from(root.getElementsByTagNameNS(OOXML.W_NS, startName));
35
+ const ends = Array.from(root.getElementsByTagNameNS(OOXML.W_NS, endName));
36
+ for (const start of starts) {
37
+ const id = markerId(start);
38
+ if (!id)
39
+ continue;
40
+ const end = ends.find((candidate) => markerId(candidate) === id);
41
+ if (!end)
42
+ continue;
43
+ const startInside = subtree === start || subtree.contains(start);
44
+ const endInside = subtree === end || subtree.contains(end);
45
+ if (startInside !== endInside) {
46
+ const survivor = startInside ? end : start;
47
+ survivor.parentNode?.removeChild(survivor);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ /**
53
+ * Resolve a deleted or rejected row without discarding surviving row containers.
54
+ * A table-level sdt/customXml child can hold rows even when no direct tr remains.
55
+ *
56
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.17
57
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.12
58
+ * @see #1073
59
+ */
60
+ export function removeTableRowAndEmptyTable(root, row) {
61
+ const wrappers = [];
62
+ let parent = row.parentNode;
63
+ while (parent?.nodeType === 1 && !isW(parent, 'tbl')) {
64
+ if (isW(parent, 'sdtContent') && parent.parentNode?.nodeType === 1
65
+ && isW(parent.parentNode, 'sdt')) {
66
+ wrappers.push(parent.parentNode);
67
+ parent = parent.parentNode.parentNode;
68
+ }
69
+ else if (isW(parent, 'customXml')) {
70
+ wrappers.push(parent);
71
+ parent = parent.parentNode;
72
+ }
73
+ else {
74
+ return;
75
+ }
76
+ }
77
+ if (!parent || parent.nodeType !== 1 || !isW(parent, 'tbl'))
78
+ return;
79
+ const table = parent;
80
+ removeOrphanedRangeEndpointsForSubtree(root, row);
81
+ row.parentNode?.removeChild(row);
82
+ for (const wrapper of wrappers) {
83
+ if (wrapper.getElementsByTagNameNS(OOXML.W_NS, 'tr').length === 0) {
84
+ removeOrphanedRangeEndpointsForSubtree(root, wrapper);
85
+ wrapper.parentNode?.removeChild(wrapper);
86
+ }
87
+ }
88
+ if (!childElements(table).some((child) => isW(child, 'tr') || isW(child, 'sdt') || isW(child, 'customXml'))) {
89
+ table.parentNode?.removeChild(table);
90
+ }
91
+ }
92
+ /**
93
+ * Remove a resolved row marker and its now-empty property container.
94
+ * An authored empty trPr is normalized to absence after row resolution.
95
+ *
96
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.17
97
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.12
98
+ * @see #1040
99
+ */
100
+ export function removeResolvedRowMarker(marker) {
101
+ const trPr = marker.parentNode;
102
+ trPr?.removeChild(marker);
103
+ if (trPr?.nodeType === 1 && isW(trPr, 'trPr')
104
+ && childElements(trPr).length === 0 && trPr.attributes.length === 0) {
105
+ trPr.parentNode?.removeChild(trPr);
106
+ }
107
+ }
108
+ function nearestWAncestor(node, localName) {
109
+ let current = node?.parentNode ?? null;
110
+ while (current) {
111
+ if (current.nodeType === 1 && isW(current, localName))
112
+ return current;
113
+ current = current.parentNode;
114
+ }
115
+ return null;
116
+ }
117
+ function detail(anchorId, tableIndex, rowIndex, feature, extra) {
118
+ return { anchorId, tableIndex, rowIndex, feature, ...extra };
119
+ }
120
+ function fail(code, message, info) {
121
+ throw new SafeDocxError(code, message, undefined, info);
122
+ }
123
+ function directBodyTables(body) {
124
+ return childElements(body).filter((element) => isW(element, 'tbl'));
125
+ }
126
+ /**
127
+ * Validate a phase-one table-row target without mutating the DOM.
128
+ *
129
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.48
130
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.65
131
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.23
132
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.84
133
+ * @see #764
134
+ */
135
+ function resolveTableShape(doc, anchorId, mergeAware = false) {
136
+ const paragraph = findParagraphByBookmarkId(doc, anchorId);
137
+ if (!paragraph) {
138
+ fail('INVALID_ARGUMENT', `Paragraph anchor not found: ${anchorId}`, detail(anchorId, -1, -1, 'nestedAnchor'));
139
+ }
140
+ const cell = nearestWAncestor(paragraph, 'tc');
141
+ const row = nearestWAncestor(paragraph, 'tr');
142
+ const table = nearestWAncestor(paragraph, 'tbl');
143
+ const body = nearestWAncestor(table, 'body');
144
+ if (!cell || !row || !table || !body || row.parentNode !== table || table.parentNode !== body) {
145
+ fail('UNSUPPORTED_EDIT', 'Table row anchor must resolve to a direct row in a body-level table', detail(anchorId, -1, -1, 'nestedAnchor'));
146
+ }
147
+ const tableIndex = directBodyTables(body).indexOf(table);
148
+ const grid = getDirectChildrenByName(table, 'tblGrid')[0];
149
+ const gridColumns = grid ? getDirectChildrenByName(grid, 'gridCol').length : 0;
150
+ if (gridColumns < 1)
151
+ fail('UNSUPPORTED_EDIT', 'Table has no direct grid columns', detail(anchorId, tableIndex, -1, 'occupancy'));
152
+ if (grid && grid.getElementsByTagNameNS(OOXML.W_NS, 'tblGridChange').length > 0) {
153
+ fail('UNSUPPORTED_EDIT', 'Table grid has tracked topology', detail(anchorId, tableIndex, -1, 'topologyRevision'));
154
+ }
155
+ const rows = [];
156
+ for (const [childIndex, child] of childElements(table).entries()) {
157
+ if (isW(child, 'tblPr') || isW(child, 'tblGrid') || ALLOWED_TABLE_RANGE_MARKERS.has(child.localName))
158
+ continue;
159
+ if (!isW(child, 'tr')) {
160
+ fail('UNSUPPORTED_EDIT', 'Table contains an unsupported row container', detail(anchorId, tableIndex, rows.length, 'rowContainer', { childIndex }));
161
+ }
162
+ rows.push(child);
163
+ }
164
+ const rowIndex = rows.indexOf(row);
165
+ if (rowIndex < 0)
166
+ fail('UNSUPPORTED_EDIT', 'Anchor row is not a direct table row', detail(anchorId, tableIndex, -1, 'nestedAnchor'));
167
+ const cells = [];
168
+ for (const [currentRowIndex, currentRow] of rows.entries()) {
169
+ const tblPrEx = getDirectChildrenByName(currentRow, 'tblPrEx')[0];
170
+ if (tblPrEx?.getElementsByTagNameNS(OOXML.W_NS, 'tblPrExChange').length) {
171
+ fail('UNSUPPORTED_EDIT', 'Row contains a topology revision', detail(anchorId, tableIndex, currentRowIndex, 'topologyRevision'));
172
+ }
173
+ if (tblPrEx) {
174
+ fail('UNSUPPORTED_EDIT', 'Row carries table-property exceptions', detail(anchorId, tableIndex, currentRowIndex, 'tblPrEx'));
175
+ }
176
+ const trPr = getDirectChildrenByName(currentRow, 'trPr')[0];
177
+ for (const feature of ['gridBefore', 'gridAfter']) {
178
+ if (trPr && getDirectChildrenByName(trPr, feature).length > 0) {
179
+ fail('UNSUPPORTED_EDIT', `Row uses ${feature}`, detail(anchorId, tableIndex, currentRowIndex, feature));
180
+ }
181
+ }
182
+ if (trPr?.getElementsByTagNameNS(OOXML.W_NS, 'trPrChange').length) {
183
+ const snapshot = trPr.getElementsByTagNameNS(OOXML.W_NS, 'trPrChange').item(0);
184
+ if (snapshot.getElementsByTagNameNS(OOXML.W_NS, 'gridBefore').length || snapshot.getElementsByTagNameNS(OOXML.W_NS, 'gridAfter').length) {
185
+ fail('UNSUPPORTED_EDIT', 'Row property change affects topology', detail(anchorId, tableIndex, currentRowIndex, 'topologyRevision'));
186
+ }
187
+ }
188
+ const rowCells = [];
189
+ for (const [childIndex, child] of childElements(currentRow).entries()) {
190
+ if (isW(child, 'trPr') || isW(child, 'tblPrEx') || ALLOWED_TABLE_RANGE_MARKERS.has(child.localName))
191
+ continue;
192
+ if (!isW(child, 'tc')) {
193
+ fail('UNSUPPORTED_EDIT', 'Row contains an unsupported cell container', detail(anchorId, tableIndex, currentRowIndex, 'cellContainer', { childIndex }));
194
+ }
195
+ rowCells.push(child);
196
+ }
197
+ if (!mergeAware && rowCells.length !== gridColumns) {
198
+ fail('UNSUPPORTED_EDIT', 'Row occupancy does not match tblGrid', detail(anchorId, tableIndex, currentRowIndex, 'occupancy'));
199
+ }
200
+ for (const [cellIndex, currentCell] of rowCells.entries()) {
201
+ const tcPr = getDirectChildrenByName(currentCell, 'tcPr')[0];
202
+ for (const feature of (mergeAware ? ['hMerge', 'vMerge'] : ['gridSpan', 'hMerge', 'vMerge'])) {
203
+ if (tcPr && getDirectChildrenByName(tcPr, feature).length > 0) {
204
+ fail('UNSUPPORTED_EDIT', `Cell uses ${feature}`, detail(anchorId, tableIndex, currentRowIndex, feature, { cellIndex }));
205
+ }
206
+ }
207
+ const tcPrChange = tcPr ? getDirectChildrenByName(tcPr, 'tcPrChange')[0] : undefined;
208
+ if (tcPrChange && (tcPrChange.getElementsByTagNameNS(OOXML.W_NS, 'gridSpan').length
209
+ || tcPrChange.getElementsByTagNameNS(OOXML.W_NS, 'vMerge').length)) {
210
+ fail('UNSUPPORTED_EDIT', 'Cell property change affects topology', detail(anchorId, tableIndex, currentRowIndex, 'topologyRevision', { cellIndex }));
211
+ }
212
+ if (currentCell.getElementsByTagNameNS(OOXML.W_NS, 'tbl').length > 0) {
213
+ fail('UNSUPPORTED_EDIT', 'Cell contains a nested table', detail(anchorId, tableIndex, currentRowIndex, 'nestedTable', { cellIndex }));
214
+ }
215
+ for (const revision of ['cellIns', 'cellDel', 'cellMerge', 'tblPrExChange']) {
216
+ if (currentCell.getElementsByTagNameNS(OOXML.W_NS, revision).length > 0) {
217
+ fail('UNSUPPORTED_EDIT', 'Cell contains a topology revision', detail(anchorId, tableIndex, currentRowIndex, 'topologyRevision', { cellIndex }));
218
+ }
219
+ }
220
+ const blocks = childElements(currentCell).filter((child) => !isW(child, 'tcPr') && !ALLOWED_TABLE_RANGE_MARKERS.has(child.localName));
221
+ if (!blocks.length || !isW(blocks[blocks.length - 1], 'p')) {
222
+ fail('UNSUPPORTED_EDIT', 'Cell does not end in a direct paragraph', detail(anchorId, tableIndex, currentRowIndex, 'trailingParagraph', { cellIndex }));
223
+ }
224
+ }
225
+ cells.push(rowCells);
226
+ }
227
+ if (mergeAware) {
228
+ try {
229
+ inventoryTableOccupancy(table);
230
+ }
231
+ catch (error) {
232
+ if (!(error instanceof TableOccupancyError))
233
+ throw error;
234
+ fail('UNSUPPORTED_EDIT', error.message, detail(anchorId, tableIndex, error.rowIndex, error.feature, { cellIndex: error.cellIndex }));
235
+ }
236
+ }
237
+ return { table, rows, anchorRow: row, rowIndex, tableIndex, cells };
238
+ }
239
+ function cloneFilteredProperties(source, localName, excluded) {
240
+ if (!source)
241
+ return null;
242
+ const doc = source.ownerDocument;
243
+ const clone = createWmlElement(doc, localName);
244
+ for (let i = 0; i < source.attributes.length; i++) {
245
+ const attribute = source.attributes.item(i);
246
+ clone.setAttributeNS(attribute.namespaceURI, attribute.name, attribute.value);
247
+ }
248
+ for (const child of childElements(source)) {
249
+ if (!excluded.has(child.localName))
250
+ clone.appendChild(child.cloneNode(true));
251
+ }
252
+ return clone;
253
+ }
254
+ function appendRevisionMarker(parent, kind, ctx) {
255
+ const marker = createWmlElement(parent.ownerDocument, kind, {
256
+ 'w:id': String(allocateRevisionId(ctx.idState)), 'w:author': ctx.author, 'w:date': ctx.date,
257
+ });
258
+ const change = getDirectChildrenByName(parent, 'trPrChange')[0];
259
+ parent.insertBefore(marker, change ?? null);
260
+ }
261
+ function ensureParagraphMarker(paragraph, kind, ctx) {
262
+ let pPr = getDirectChildrenByName(paragraph, 'pPr')[0];
263
+ if (!pPr) {
264
+ pPr = createWmlElement(paragraph.ownerDocument, 'pPr');
265
+ paragraph.insertBefore(pPr, paragraph.firstChild);
266
+ }
267
+ let rPr = getDirectChildrenByName(pPr, 'rPr')[0];
268
+ if (!rPr) {
269
+ rPr = createWmlElement(paragraph.ownerDocument, 'rPr');
270
+ const before = getDirectChildrenByName(pPr, 'sectPr')[0]
271
+ ?? getDirectChildrenByName(pPr, 'pPrChange')[0]
272
+ ?? null;
273
+ pPr.insertBefore(rPr, before);
274
+ }
275
+ const marker = createWmlElement(paragraph.ownerDocument, kind, {
276
+ 'w:id': String(allocateRevisionId(ctx.idState)), 'w:author': ctx.author, 'w:date': ctx.date,
277
+ });
278
+ rPr.insertBefore(marker, rPr.firstChild);
279
+ }
280
+ function appendText(run, text) {
281
+ const t = createWmlElement(run.ownerDocument, 't');
282
+ if (text.startsWith(' ') || text.endsWith(' '))
283
+ t.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
284
+ t.appendChild(run.ownerDocument.createTextNode(text));
285
+ run.appendChild(t);
286
+ }
287
+ /** Insert a rectangular unmerged row using an anchored row's safe formatting shell. */
288
+ export function insertTableRow(doc, params, ctx, bookmarkReservation) {
289
+ const shape = resolveTableShape(doc, params.positionalAnchorNodeId, params.mergeAware);
290
+ const anchorCells = shape.cells[shape.rowIndex];
291
+ if (params.cellTexts.length !== anchorCells.length) {
292
+ fail('INVALID_ARGUMENT', 'cellTexts must match the table grid column count', detail(params.positionalAnchorNodeId, shape.tableIndex, shape.rowIndex, 'occupancy'));
293
+ }
294
+ const newRow = createWmlElement(doc, 'tr');
295
+ const trPr = cloneFilteredProperties(getDirectChildrenByName(shape.anchorRow, 'trPr')[0], 'trPr', TRPR_EXCLUDED) ?? createWmlElement(doc, 'trPr');
296
+ if (ctx)
297
+ appendRevisionMarker(trPr, 'ins', ctx);
298
+ if (trPr.childNodes.length > 0)
299
+ newRow.appendChild(trPr);
300
+ const newParagraphs = [];
301
+ for (const [cellIndex, text] of params.cellTexts.entries()) {
302
+ const sourceCell = anchorCells[cellIndex];
303
+ const newCell = createWmlElement(doc, 'tc');
304
+ const tcPr = cloneFilteredProperties(getDirectChildrenByName(sourceCell, 'tcPr')[0], 'tcPr', TCPR_EXCLUDED);
305
+ if (tcPr)
306
+ newCell.appendChild(tcPr);
307
+ const sourceParagraph = getDirectChildrenByName(sourceCell, 'p')[0];
308
+ const paragraph = createWmlElement(doc, 'p');
309
+ const pPr = cloneFilteredProperties(sourceParagraph ? getDirectChildrenByName(sourceParagraph, 'pPr')[0] : undefined, 'pPr', PPR_EXCLUDED);
310
+ if (pPr) {
311
+ const markRPr = getDirectChildrenByName(pPr, 'rPr')[0];
312
+ if (markRPr)
313
+ for (const child of childElements(markRPr))
314
+ if (RPR_EXCLUDED.has(child.localName))
315
+ markRPr.removeChild(child);
316
+ paragraph.appendChild(pPr);
317
+ }
318
+ const run = createWmlElement(doc, 'r');
319
+ const sourceMarkRPr = pPr ? getDirectChildrenByName(pPr, 'rPr')[0] : undefined;
320
+ const runRPr = cloneFilteredProperties(sourceMarkRPr, 'rPr', RPR_EXCLUDED);
321
+ if (runRPr)
322
+ run.appendChild(runRPr);
323
+ appendText(run, text);
324
+ if (ctx) {
325
+ ensureParagraphMarker(paragraph, 'ins', ctx);
326
+ const wrapper = createRevisionContainer(doc, 'ins', ctx);
327
+ wrapper.appendChild(run);
328
+ paragraph.appendChild(wrapper);
329
+ }
330
+ else
331
+ paragraph.appendChild(run);
332
+ newCell.appendChild(paragraph);
333
+ newRow.appendChild(newCell);
334
+ newParagraphs.push(paragraph);
335
+ }
336
+ const ref = params.relativePosition === 'BEFORE' ? shape.anchorRow : shape.anchorRow.nextSibling;
337
+ shape.table.insertBefore(newRow, ref);
338
+ const cellParagraphIds = newParagraphs.map((paragraph) => insertSingleParagraphBookmark(doc, paragraph, bookmarkReservation));
339
+ return { rowIndex: shape.rowIndex + (params.relativePosition === 'AFTER' ? 1 : 0), cellParagraphIds };
340
+ }
341
+ /** Delete or deletion-mark a rectangular unmerged row. */
342
+ export function deleteTableRow(doc, params, ctx) {
343
+ const shape = resolveTableShape(doc, params.targetParagraphId, params.mergeAware);
344
+ if (shape.rows.length === 1)
345
+ fail('INVALID_ARGUMENT', 'Cannot delete the final table row', detail(params.targetParagraphId, shape.tableIndex, shape.rowIndex, 'lastRow'));
346
+ if (!ctx) {
347
+ removeOrphanedRangeEndpointsForSubtree(doc.documentElement, shape.anchorRow);
348
+ shape.table.removeChild(shape.anchorRow);
349
+ return { rowIndex: shape.rowIndex, deleted: true };
350
+ }
351
+ let trPr = getDirectChildrenByName(shape.anchorRow, 'trPr')[0];
352
+ if (!trPr) {
353
+ trPr = createWmlElement(doc, 'trPr');
354
+ shape.anchorRow.insertBefore(trPr, shape.anchorRow.firstChild);
355
+ }
356
+ if (getDirectChildrenByName(trPr, 'ins').length)
357
+ fail('INVALID_ARGUMENT', 'Cannot deletion-mark an already inserted row', detail(params.targetParagraphId, shape.tableIndex, shape.rowIndex, 'alreadyInserted'));
358
+ if (getDirectChildrenByName(trPr, 'del').length)
359
+ fail('INVALID_ARGUMENT', 'Row is already deletion-marked', detail(params.targetParagraphId, shape.tableIndex, shape.rowIndex, 'alreadyDeleted'));
360
+ appendRevisionMarker(trPr, 'del', ctx);
361
+ for (const cell of shape.cells[shape.rowIndex]) {
362
+ const paragraphs = getDirectChildrenByName(cell, 'p');
363
+ for (const [paragraphIndex, paragraph] of paragraphs.entries()) {
364
+ if (paragraphIndex < paragraphs.length - 1)
365
+ ensureParagraphMarker(paragraph, 'del', ctx);
366
+ for (const run of Array.from(paragraph.getElementsByTagNameNS(OOXML.W_NS, 'r'))) {
367
+ const parent = run.parentNode;
368
+ const parentElement = parent?.nodeType === 1 ? parent : null;
369
+ if (!parentElement || isW(parentElement, 'ins') || isW(parentElement, 'del') || isW(parentElement, 'moveFrom') || isW(parentElement, 'moveTo'))
370
+ continue;
371
+ const wrapper = createRevisionContainer(doc, 'del', ctx);
372
+ const cloned = run.cloneNode(true);
373
+ for (const text of Array.from(cloned.getElementsByTagNameNS(OOXML.W_NS, 't'))) {
374
+ const renamed = createWmlElement(doc, 'delText');
375
+ for (let i = 0; i < text.attributes.length; i++) {
376
+ const a = text.attributes.item(i);
377
+ renamed.setAttributeNS(a.namespaceURI, a.name, a.value);
378
+ }
379
+ while (text.firstChild)
380
+ renamed.appendChild(text.firstChild);
381
+ text.parentNode?.replaceChild(renamed, text);
382
+ }
383
+ wrapper.appendChild(cloned);
384
+ parentElement.replaceChild(wrapper, run);
385
+ }
386
+ }
387
+ }
388
+ return { rowIndex: shape.rowIndex, deleted: true };
389
+ }
390
+ //# sourceMappingURL=table_rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table_rows.js","sourceRoot":"","sources":["../../src/primitives/table_rows.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,30 @@ export type TextRun = {
3
3
  r: Element;
4
4
  text: string;
5
5
  isFieldResult: boolean;
6
+ fieldResultId?: number | null;
7
+ fieldInstruction?: string | null;
6
8
  };
9
+ /**
10
+ * Return the paragraph's visible runs while retaining enough complex-field
11
+ * provenance to distinguish a safe cached-result edit from a field-boundary
12
+ * rewrite.
13
+ *
14
+ * @conformance ECMA-376 edition 5, Part 1 § 17.16.18
15
+ * @see #651
16
+ */
7
17
  export declare function getParagraphRuns(p: Element): TextRun[];
8
18
  export declare function getParagraphText(p: Element): string;
9
19
  export declare function visibleLengthForEl(el: Element): number;
10
20
  export declare function getDirectContentElements(run: Element): Element[];
11
- export declare function splitRunAtVisibleOffset(run: Element, offset: number): {
21
+ /**
22
+ * Which side of a split receives the zero-length run content (field markers,
23
+ * note references, proofing marks, ...) that sits exactly at the split offset,
24
+ * between the last visible character before it and the first one after it.
25
+ * A range boundary uses the side outside the range: `left` at a range start,
26
+ * `right` at a range end (issue #1096).
27
+ */
28
+ export type ZeroLengthAtOffsetSide = 'left' | 'right';
29
+ export declare function splitRunAtVisibleOffset(run: Element, offset: number, zeroLengthAtOffset?: ZeroLengthAtOffsetSide): {
12
30
  left: Element;
13
31
  right: Element;
14
32
  };
@@ -26,6 +44,56 @@ export type ReplacementPart = {
26
44
  templateRun?: Element | null;
27
45
  addRunProps?: AddRunProps;
28
46
  clearHighlight?: boolean;
47
+ /** Preserve an intentional xml:space marker during text-identical rebuilds. */
48
+ preserveXmlSpace?: boolean;
29
49
  };
50
+ export type TextRangeRunFormat = {
51
+ underline?: 'single' | 'none';
52
+ highlight?: 'yellow' | 'none';
53
+ };
54
+ /**
55
+ * Change direct run properties over an exact visible-text range while keeping
56
+ * every character and each touched run's undeclared direct properties.
57
+ *
58
+ * The existing bounded replacement engine owns boundary splitting and rejects
59
+ * unsafe container crossings. This wrapper supplies one text-identical part
60
+ * per touched run, so harmless physical fragmentation is retained rather than
61
+ * flattened.
62
+ *
63
+ * @conformance ECMA-376 edition 5, Part 1 § 17.3.2.28
64
+ * @see #998
65
+ */
66
+ export declare function formatParagraphTextRange(paragraph: Element, start: number, end: number, format: TextRangeRunFormat): void;
67
+ /**
68
+ * Replace a visible paragraph range while keeping tracked runs inside their
69
+ * existing run container. In particular, edits wholly inside `w:hyperlink`
70
+ * remain nested there, while cross-container ranges are refused before the
71
+ * DOM is changed.
72
+ *
73
+ * Embedded content (`w:drawing`, `w:pict`, `w:object`, `w:contentPart`)
74
+ * inside the replaced range is preserved as live runs: it contributes no
75
+ * visible text, so no text match ever covers it and no text edit may delete
76
+ * it. Tracked deletions around preserved content are emitted as in-place
77
+ * segments so rejectChanges() restores the original content order exactly.
78
+ * A comment's reference mark is preserved the same way, and zero-length
79
+ * sibling markers inside the range (comment range start/end, a result-less
80
+ * `w:fldSimple`, bookmarks) stay live where they are, with the deletion split
81
+ * around them, so reject-all equals the original paragraph.
82
+ *
83
+ * Blanking the whole paragraph deletes its paragraph mark (tracked) or
84
+ * removes the paragraph (untracked) only when nothing that renders or
85
+ * anchors is left: embedded content, a bookmark or a comment range keeps the
86
+ * paragraph in both modes, so accept-all of the tracked edit equals the
87
+ * untracked edit and a bookmark never disappears.
88
+ *
89
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.14
90
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.15
91
+ * @conformance ECMA-376 edition 5, Part 1 § 17.16.22
92
+ * @see #652
93
+ * @see #741
94
+ * @see #739
95
+ * @see #1083
96
+ * @see #1098
97
+ */
30
98
  export declare function replaceParagraphTextRange(p: Element, start: number, end: number, replacement: string | ReplacementPart[], ctx?: RevisionContext): void;
31
99
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/primitives/text.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,OAAO,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAsDtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAInD;AAoGD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAMtD;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAWhE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAgEvG;AA0BD,MAAM,MAAM,WAAW,GAAG;IAGxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AA2KF,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,OAAO,EACV,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,EACvC,GAAG,CAAC,EAAE,eAAe,GACpB,IAAI,CAsJN"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/primitives/text.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAKpC,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,OAAO,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAUtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAInD;AAiHD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAMtD;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAWhE;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,sBAAgC,GACnD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAiEnC;AAyID,MAAM,MAAM,WAAW,GAAG;IAGxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,kBAAkB,GACzB,IAAI,CAwDN;AA6UD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,OAAO,EACV,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,EACvC,GAAG,CAAC,EAAE,eAAe,GACpB,IAAI,CAqUN"}