@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,163 @@
1
+ import { 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 { REVISION_ID_ELEMENT_NAME_SET } from './revision-vocabulary.js';
6
+ import { inventoryTableOccupancy, TableOccupancyError } from './table_occupancy.js';
7
+ export function failTableEdit(code, message, detail) {
8
+ throw new SafeDocxError(code, message, undefined, detail);
9
+ }
10
+ export function tableAncestor(node, name) {
11
+ for (let parent = node?.parentNode; parent; parent = parent.parentNode) {
12
+ if (parent.nodeType === 1 && isW(parent, name))
13
+ return parent;
14
+ }
15
+ return null;
16
+ }
17
+ export function tableAttr(element, name) {
18
+ return element.getAttributeNS(OOXML.W_NS, name) ?? element.getAttribute(`w:${name}`);
19
+ }
20
+ export function setTableAttr(element, name, value) {
21
+ element.setAttributeNS(OOXML.W_NS, `w:${name}`, String(value));
22
+ }
23
+ /** Resolve a body-level table and reject geometry unsupported by the clean edit phase. */
24
+ export function tableEditTarget(doc, anchorId, columnIndex, operation = 'column') {
25
+ const base = { anchorId, tableIndex: -1, rowIndex: -1, columnIndex, feature: 'anchor' };
26
+ const paragraph = findParagraphByBookmarkId(doc, anchorId);
27
+ if (!paragraph)
28
+ failTableEdit('INVALID_ARGUMENT', `Paragraph anchor not found: ${anchorId}`, base);
29
+ const cell = tableAncestor(paragraph, 'tc');
30
+ const row = tableAncestor(paragraph, 'tr');
31
+ const table = tableAncestor(paragraph, 'tbl');
32
+ const body = tableAncestor(table, 'body');
33
+ if (!cell || !row || !table || !body || row.parentNode !== table || table.parentNode !== body) {
34
+ failTableEdit('UNSUPPORTED_EDIT', `${operation === 'column' ? 'Column' : 'Cell'} anchor must be in a direct row of a body-level table`, base);
35
+ }
36
+ const tableIndex = childElements(body).filter((part) => isW(part, 'tbl')).indexOf(table);
37
+ const detail = { ...base, tableIndex };
38
+ if (table.getElementsByTagNameNS(OOXML.W_NS, 'tbl').length > 0) {
39
+ failTableEdit('UNSUPPORTED_EDIT', `Nested tables are unsupported for ${operation} edits`, { ...detail, feature: 'nestedTable' });
40
+ }
41
+ let occupancy;
42
+ try {
43
+ occupancy = inventoryTableOccupancy(table);
44
+ }
45
+ catch (error) {
46
+ if (error instanceof TableOccupancyError) {
47
+ failTableEdit('UNSUPPORTED_EDIT', error.message, { ...detail, rowIndex: error.rowIndex, cellIndex: error.cellIndex, feature: error.feature });
48
+ }
49
+ throw error;
50
+ }
51
+ const { rows } = occupancy;
52
+ for (const occupiedRow of rows) {
53
+ if (occupiedRow.before || occupiedRow.after) {
54
+ failTableEdit('UNSUPPORTED_EDIT', `Offset rows are unsupported for ${operation} edits`, { ...detail, rowIndex: occupiedRow.rowIndex, feature: 'gridBefore/gridAfter' });
55
+ }
56
+ for (const occupiedCell of occupiedRow.cells) {
57
+ if (occupiedCell.merge !== 'none') {
58
+ failTableEdit('UNSUPPORTED_EDIT', `Vertical merges are unsupported for ${operation} edits`, { ...detail, rowIndex: occupiedRow.rowIndex, cellIndex: occupiedCell.cellIndex, feature: 'vMerge' });
59
+ }
60
+ const cellContent = childElements(occupiedCell.element).filter((element) => isW(element, 'p') || isW(element, 'tbl'));
61
+ if (!cellContent.length || !isW(cellContent.at(-1), 'p')) {
62
+ failTableEdit('UNSUPPORTED_EDIT', 'Every surviving cell must end in a direct paragraph', { ...detail, rowIndex: occupiedRow.rowIndex, cellIndex: occupiedCell.cellIndex, feature: 'trailingParagraph' });
63
+ }
64
+ }
65
+ }
66
+ const anchorRow = rows.find((candidate) => candidate.element === row);
67
+ const anchorCell = anchorRow?.cells.find((candidate) => candidate.element === cell);
68
+ if (!anchorRow || !anchorCell)
69
+ failTableEdit('UNSUPPORTED_EDIT', 'Anchor cell is not in the table occupancy inventory', { ...detail, feature: 'occupancy' });
70
+ const grid = getDirectChildrenByName(table, 'tblGrid')[0];
71
+ return { table, tableIndex, rows, grid, columns: getDirectChildrenByName(grid, 'gridCol'), anchorRow, anchorCell };
72
+ }
73
+ export function plannedWidthChange(element, delta, detail) {
74
+ if (!element)
75
+ return null;
76
+ const type = tableAttr(element, 'type');
77
+ const raw = tableAttr(element, 'w');
78
+ if (!type || !['dxa', 'pct', 'auto', 'nil'].includes(type)) {
79
+ failTableEdit('UNSUPPORTED_EDIT', 'Unresolvable width', { ...detail, feature: 'width' });
80
+ }
81
+ if (type !== 'dxa')
82
+ return null;
83
+ if (raw === null || !/^\d+$/.test(raw))
84
+ failTableEdit('UNSUPPORTED_EDIT', 'Non-integer dxa width', { ...detail, feature: 'width' });
85
+ const next = Number(raw) + delta;
86
+ if (!Number.isSafeInteger(next) || next < 0) {
87
+ failTableEdit('UNSUPPORTED_EDIT', 'Width arithmetic exceeds supported range', { ...detail, feature: 'width' });
88
+ }
89
+ return { element, next };
90
+ }
91
+ export function plannedCellWidthChange(cell, delta, detail) {
92
+ const tcPr = getDirectChildrenByName(cell, 'tcPr')[0];
93
+ return plannedWidthChange(tcPr ? getDirectChildrenByName(tcPr, 'tcW')[0] : undefined, delta, detail);
94
+ }
95
+ export function plannedTableWidthChange(table, delta, detail) {
96
+ const tblPr = getDirectChildrenByName(table, 'tblPr')[0];
97
+ return plannedWidthChange(tblPr ? getDirectChildrenByName(tblPr, 'tblW')[0] : undefined, delta, detail);
98
+ }
99
+ export function applyWidthUpdates(updates) {
100
+ for (const update of updates)
101
+ if (update)
102
+ setTableAttr(update.element, 'w', update.next);
103
+ }
104
+ function spanElement(cell) {
105
+ let tcPr = getDirectChildrenByName(cell, 'tcPr')[0];
106
+ if (!tcPr) {
107
+ tcPr = createWmlElement(cell.ownerDocument, 'tcPr');
108
+ cell.insertBefore(tcPr, cell.firstChild);
109
+ }
110
+ let span = getDirectChildrenByName(tcPr, 'gridSpan')[0];
111
+ if (!span) {
112
+ span = createWmlElement(cell.ownerDocument, 'gridSpan');
113
+ const tcW = getDirectChildrenByName(tcPr, 'tcW')[0];
114
+ const cnfStyle = getDirectChildrenByName(tcPr, 'cnfStyle')[0];
115
+ const preceding = tcW ?? cnfStyle;
116
+ tcPr.insertBefore(span, preceding ? preceding.nextSibling : tcPr.firstChild);
117
+ }
118
+ return span;
119
+ }
120
+ export function setCellSpan(cell, next) {
121
+ const tcPr = getDirectChildrenByName(cell.element, 'tcPr')[0];
122
+ const span = tcPr ? getDirectChildrenByName(tcPr, 'gridSpan')[0] : undefined;
123
+ if (next === 1)
124
+ span?.parentNode?.removeChild(span);
125
+ else
126
+ setTableAttr(spanElement(cell.element), 'val', next);
127
+ }
128
+ const NEW_CELL_EXCLUDED_PROPERTIES = new Set([
129
+ 'tcW', 'gridSpan', 'vMerge', 'hMerge', 'cellIns', 'cellDel', 'cellMerge', 'tcPrChange',
130
+ 'cnfStyle', 'hideMark', 'headers',
131
+ ]);
132
+ export function createTableCell(doc, source, text, width) {
133
+ const cell = createWmlElement(doc, 'tc');
134
+ const tcPr = createWmlElement(doc, 'tcPr');
135
+ const sourcePr = getDirectChildrenByName(source, 'tcPr')[0];
136
+ if (sourcePr)
137
+ for (const property of childElements(sourcePr)) {
138
+ if (!NEW_CELL_EXCLUDED_PROPERTIES.has(property.localName))
139
+ tcPr.appendChild(property.cloneNode(true));
140
+ }
141
+ const tcW = createWmlElement(doc, 'tcW');
142
+ setTableAttr(tcW, 'w', width);
143
+ setTableAttr(tcW, 'type', 'dxa');
144
+ tcPr.insertBefore(tcW, tcPr.firstChild);
145
+ cell.appendChild(tcPr);
146
+ const paragraph = createWmlElement(doc, 'p');
147
+ if (text) {
148
+ const run = createWmlElement(doc, 'r');
149
+ const leaf = createWmlElement(doc, 't');
150
+ if (/^\s|\s$/.test(text))
151
+ leaf.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
152
+ leaf.appendChild(doc.createTextNode(text));
153
+ run.appendChild(leaf);
154
+ paragraph.appendChild(run);
155
+ }
156
+ cell.appendChild(paragraph);
157
+ return { cell, paragraph };
158
+ }
159
+ export function hasPendingRevision(element) {
160
+ return Array.from(element.getElementsByTagNameNS(OOXML.W_NS, '*'))
161
+ .some((descendant) => REVISION_ID_ELEMENT_NAME_SET.has(descendant.localName));
162
+ }
163
+ //# sourceMappingURL=table_edit_common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table_edit_common.js","sourceRoot":"","sources":["../../src/primitives/table_edit_common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export type MergeState = 'none' | 'restart' | 'continue';
2
+ export type OccupiedCell = {
3
+ element: Element;
4
+ cellIndex: number;
5
+ start: number;
6
+ end: number;
7
+ merge: MergeState;
8
+ owner: OccupiedCell;
9
+ };
10
+ export type OccupiedRow = {
11
+ element: Element;
12
+ rowIndex: number;
13
+ before: number;
14
+ after: number;
15
+ cells: OccupiedCell[];
16
+ slots: Array<OccupiedCell | null>;
17
+ };
18
+ export type TableOccupancy = {
19
+ gridColumns: number;
20
+ rows: OccupiedRow[];
21
+ };
22
+ export declare class TableOccupancyError extends Error {
23
+ readonly feature: 'occupancy' | 'gridSpan' | 'hMerge' | 'vMerge' | 'gridBefore' | 'gridAfter' | 'topologyRevision';
24
+ readonly rowIndex: number;
25
+ readonly cellIndex: number | undefined;
26
+ constructor(feature: 'occupancy' | 'gridSpan' | 'hMerge' | 'vMerge' | 'gridBefore' | 'gridAfter' | 'topologyRevision', rowIndex: number, cellIndex: number | undefined, message: string);
27
+ }
28
+ /**
29
+ * Inventory direct physical cells in logical grid coordinates without rewriting XML.
30
+ * Each continuation points to the restart cell owning the exact same interval.
31
+ *
32
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.48
33
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.17
34
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.23
35
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.84
36
+ * @see #1040
37
+ */
38
+ export declare function inventoryTableOccupancy(table: Element): TableOccupancy;
39
+ //# sourceMappingURL=table_occupancy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table_occupancy.d.ts","sourceRoot":"","sources":["../../src/primitives/table_occupancy.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE1E,qBAAa,mBAAoB,SAAQ,KAAK;IAE1C,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,kBAAkB;IAClH,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;gBAF7B,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,kBAAkB,EACzG,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EACtC,OAAO,EAAE,MAAM;CAKlB;AA6CD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAqEtE"}
@@ -0,0 +1,145 @@
1
+ import { childElements, getDirectChildrenByName, isW } from './dom-helpers.js';
2
+ import { OOXML } from './namespaces.js';
3
+ export class TableOccupancyError extends Error {
4
+ feature;
5
+ rowIndex;
6
+ cellIndex;
7
+ constructor(feature, rowIndex, cellIndex, message) {
8
+ super(message);
9
+ this.feature = feature;
10
+ this.rowIndex = rowIndex;
11
+ this.cellIndex = cellIndex;
12
+ this.name = 'TableOccupancyError';
13
+ }
14
+ }
15
+ const RANGE_MARKERS = new Set([
16
+ 'bookmarkStart', 'bookmarkEnd', 'commentRangeStart', 'commentRangeEnd',
17
+ 'permStart', 'permEnd', 'proofErr', 'moveFromRangeStart', 'moveFromRangeEnd',
18
+ 'moveToRangeStart', 'moveToRangeEnd', 'customXmlInsRangeStart',
19
+ 'customXmlInsRangeEnd', 'customXmlDelRangeStart', 'customXmlDelRangeEnd',
20
+ 'customXmlMoveFromRangeStart', 'customXmlMoveFromRangeEnd',
21
+ 'customXmlMoveToRangeStart', 'customXmlMoveToRangeEnd',
22
+ ]);
23
+ function oneChild(parent, name, rowIndex, cellIndex) {
24
+ if (!parent)
25
+ return undefined;
26
+ const children = getDirectChildrenByName(parent, name);
27
+ if (children.length > 1) {
28
+ throw new TableOccupancyError('occupancy', rowIndex, cellIndex, `Duplicate ${name}`);
29
+ }
30
+ return children[0];
31
+ }
32
+ function value(element) {
33
+ return element.getAttributeNS(OOXML.W_NS, 'val') ?? element.getAttribute('w:val');
34
+ }
35
+ function width(element, feature, rowIndex, cellIndex) {
36
+ if (!element)
37
+ return feature === 'gridSpan' ? 1 : 0;
38
+ const raw = value(element);
39
+ const parsed = raw === null ? NaN : Number(raw);
40
+ if (!Number.isSafeInteger(parsed) || parsed < (feature === 'gridSpan' ? 1 : 0)) {
41
+ throw new TableOccupancyError(feature, rowIndex, cellIndex, `Invalid ${feature} value`);
42
+ }
43
+ return parsed;
44
+ }
45
+ function verticalState(cell, rowIndex, cellIndex) {
46
+ const tcPr = getDirectChildrenByName(cell, 'tcPr')[0];
47
+ const markers = tcPr ? getDirectChildrenByName(tcPr, 'vMerge') : [];
48
+ if (markers.length > 1)
49
+ throw new TableOccupancyError('vMerge', rowIndex, cellIndex, 'Duplicate vMerge');
50
+ if (!markers.length)
51
+ return 'none';
52
+ const raw = value(markers[0]);
53
+ if (raw === null || raw === 'continue')
54
+ return 'continue';
55
+ if (raw === 'restart')
56
+ return 'restart';
57
+ throw new TableOccupancyError('vMerge', rowIndex, cellIndex, `Invalid vMerge value: ${raw}`);
58
+ }
59
+ /**
60
+ * Inventory direct physical cells in logical grid coordinates without rewriting XML.
61
+ * Each continuation points to the restart cell owning the exact same interval.
62
+ *
63
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.48
64
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.17
65
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.23
66
+ * @conformance ECMA-376 edition 5, Part 1 § 17.4.84
67
+ * @see #1040
68
+ */
69
+ export function inventoryTableOccupancy(table) {
70
+ const grids = getDirectChildrenByName(table, 'tblGrid');
71
+ const gridColumns = grids.length === 1 ? getDirectChildrenByName(grids[0], 'gridCol').length : 0;
72
+ if (gridColumns < 1)
73
+ throw new TableOccupancyError('occupancy', -1, undefined, 'Table must have one nonempty tblGrid');
74
+ if (grids[0].getElementsByTagNameNS(OOXML.W_NS, 'tblGridChange').length) {
75
+ throw new TableOccupancyError('topologyRevision', -1, undefined, 'Tracked grid changes are unsupported');
76
+ }
77
+ const rows = [];
78
+ let previousActive = new Map();
79
+ for (const rowElement of childElements(table)) {
80
+ if (isW(rowElement, 'tblPr') || isW(rowElement, 'tblGrid') || RANGE_MARKERS.has(rowElement.localName))
81
+ continue;
82
+ const rowIndex = rows.length;
83
+ if (!isW(rowElement, 'tr'))
84
+ throw new TableOccupancyError('occupancy', rowIndex, undefined, 'Unsupported row container');
85
+ if (getDirectChildrenByName(rowElement, 'tblPrEx').length) {
86
+ throw new TableOccupancyError('topologyRevision', rowIndex, undefined, 'Row table-property exceptions are unsupported');
87
+ }
88
+ const trPr = oneChild(rowElement, 'trPr', rowIndex);
89
+ if (trPr && getDirectChildrenByName(trPr, 'trPrChange').length) {
90
+ throw new TableOccupancyError('topologyRevision', rowIndex, undefined, 'Pending row-property changes are unsupported');
91
+ }
92
+ const before = width(oneChild(trPr, 'gridBefore', rowIndex), 'gridBefore', rowIndex);
93
+ const after = width(oneChild(trPr, 'gridAfter', rowIndex), 'gridAfter', rowIndex);
94
+ if (before + after >= gridColumns) {
95
+ throw new TableOccupancyError('occupancy', rowIndex, undefined, 'Row offsets leave no physical cell slots');
96
+ }
97
+ const cells = [];
98
+ const slots = Array(gridColumns).fill(null);
99
+ const currentActive = new Map();
100
+ let column = before;
101
+ for (const cellElement of childElements(rowElement)) {
102
+ if (isW(cellElement, 'trPr') || RANGE_MARKERS.has(cellElement.localName))
103
+ continue;
104
+ const cellIndex = cells.length;
105
+ if (!isW(cellElement, 'tc')) {
106
+ throw new TableOccupancyError('occupancy', rowIndex, cellIndex, 'Unsupported cell container');
107
+ }
108
+ const tcPr = oneChild(cellElement, 'tcPr', rowIndex, cellIndex);
109
+ if (tcPr && getDirectChildrenByName(tcPr, 'hMerge').length) {
110
+ throw new TableOccupancyError('hMerge', rowIndex, cellIndex, 'Legacy hMerge is unsupported');
111
+ }
112
+ if (tcPr && ['cellIns', 'cellDel', 'cellMerge', 'tcPrChange'].some((name) => getDirectChildrenByName(tcPr, name).length > 0)) {
113
+ throw new TableOccupancyError('topologyRevision', rowIndex, cellIndex, 'Pending cell topology changes are unsupported');
114
+ }
115
+ const span = width(oneChild(tcPr, 'gridSpan', rowIndex, cellIndex), 'gridSpan', rowIndex, cellIndex);
116
+ const end = column + span;
117
+ if (end > gridColumns - after) {
118
+ throw new TableOccupancyError('occupancy', rowIndex, cellIndex, 'Cell extends beyond effective grid');
119
+ }
120
+ const merge = verticalState(cellElement, rowIndex, cellIndex);
121
+ const interval = `${column}:${end}`;
122
+ const previousOwner = previousActive.get(interval);
123
+ if (merge === 'continue' && !previousOwner) {
124
+ throw new TableOccupancyError('vMerge', rowIndex, cellIndex, 'Orphan or changed-width continuation');
125
+ }
126
+ const occupied = { element: cellElement, cellIndex, start: column, end, merge, owner: null };
127
+ occupied.owner = merge === 'continue' ? previousOwner : occupied;
128
+ cells.push(occupied);
129
+ for (let slot = column; slot < end; slot++)
130
+ slots[slot] = occupied;
131
+ if (merge !== 'none')
132
+ currentActive.set(interval, occupied.owner);
133
+ column = end;
134
+ }
135
+ if (column !== gridColumns - after || cells.length === 0) {
136
+ throw new TableOccupancyError('occupancy', rowIndex, undefined, 'Row occupancy does not match tblGrid and offsets');
137
+ }
138
+ rows.push({ element: rowElement, rowIndex, before, after, cells, slots });
139
+ previousActive = currentActive;
140
+ }
141
+ if (!rows.length)
142
+ throw new TableOccupancyError('occupancy', -1, undefined, 'Table has no direct rows');
143
+ return { gridColumns, rows };
144
+ }
145
+ //# sourceMappingURL=table_occupancy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table_occupancy.js","sourceRoot":"","sources":["../../src/primitives/table_occupancy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { type BookmarkReservation } from './bookmarks.js';
2
+ import { type RevisionContext } from './track-changes-emitter.js';
3
+ export type TableRowEditFeature = 'gridSpan' | 'hMerge' | 'vMerge' | 'gridBefore' | 'gridAfter' | 'nestedTable' | 'rowContainer' | 'cellContainer' | 'tblPrEx' | 'occupancy' | 'trailingParagraph' | 'topologyRevision' | 'lastRow' | 'nestedAnchor' | 'alreadyInserted' | 'alreadyDeleted';
4
+ export type TableRowEditDetail = {
5
+ anchorId: string;
6
+ tableIndex: number;
7
+ rowIndex: number;
8
+ cellIndex?: number;
9
+ childIndex?: number;
10
+ feature: TableRowEditFeature;
11
+ };
12
+ export type InsertTableRowParams = {
13
+ positionalAnchorNodeId: string;
14
+ relativePosition: 'BEFORE' | 'AFTER';
15
+ cellTexts: string[];
16
+ /** @experimental Opt into validated horizontal spans; vertical merges still fail closed. */
17
+ mergeAware?: boolean;
18
+ };
19
+ export type InsertTableRowResult = {
20
+ rowIndex: number;
21
+ cellParagraphIds: string[];
22
+ };
23
+ export type DeleteTableRowParams = {
24
+ targetParagraphId: string;
25
+ /** @experimental Opt into validated horizontal spans; vertical merges still fail closed. */
26
+ mergeAware?: boolean;
27
+ };
28
+ export type DeleteTableRowResult = {
29
+ rowIndex: number;
30
+ deleted: true;
31
+ };
32
+ /** Remove the surviving half of any supported range cut by subtree removal. */
33
+ export declare function removeOrphanedRangeEndpointsForSubtree(root: Element, subtree: Element): void;
34
+ /**
35
+ * Resolve a deleted or rejected row without discarding surviving row containers.
36
+ * A table-level sdt/customXml child can hold rows even when no direct tr remains.
37
+ *
38
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.17
39
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.12
40
+ * @see #1073
41
+ */
42
+ export declare function removeTableRowAndEmptyTable(root: Element, row: Element): void;
43
+ /**
44
+ * Remove a resolved row marker and its now-empty property container.
45
+ * An authored empty trPr is normalized to absence after row resolution.
46
+ *
47
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.17
48
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.5.12
49
+ * @see #1040
50
+ */
51
+ export declare function removeResolvedRowMarker(marker: Element): void;
52
+ /** Insert a rectangular unmerged row using an anchored row's safe formatting shell. */
53
+ export declare function insertTableRow(doc: Document, params: InsertTableRowParams, ctx?: RevisionContext, bookmarkReservation?: BookmarkReservation): InsertTableRowResult;
54
+ /** Delete or deletion-mark a rectangular unmerged row. */
55
+ export declare function deleteTableRow(doc: Document, params: DeleteTableRowParams, ctx?: RevisionContext): DeleteTableRowResult;
56
+ //# sourceMappingURL=table_rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table_rows.d.ts","sourceRoot":"","sources":["../../src/primitives/table_rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAA+C,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE/G,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAC7D,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,SAAS,GAC5D,WAAW,GAAG,mBAAmB,GAAG,kBAAkB,GACtD,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,QAAQ,GAAG,OAAO,CAAC;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AACpF,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC;AAqCvE,+EAA+E;AAC/E,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB5F;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CA6B7E;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAO7D;AAoLD,uFAAuF;AACvF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,oBAAoB,EAC5B,GAAG,CAAC,EAAE,eAAe,EACrB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,oBAAoB,CA8CtB;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,oBAAoB,CAmCvH"}