@usejunior/docx-core 0.23.0 → 0.24.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 (40) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/generation/emit/document-part.d.ts +7 -5
  3. package/dist/generation/emit/document-part.d.ts.map +1 -1
  4. package/dist/generation/emit/document-part.js +23 -5
  5. package/dist/generation/emit/document-part.js.map +1 -1
  6. package/dist/generation/emit/font-table-part.d.ts +3 -2
  7. package/dist/generation/emit/font-table-part.d.ts.map +1 -1
  8. package/dist/generation/emit/font-table-part.js +7 -6
  9. package/dist/generation/emit/font-table-part.js.map +1 -1
  10. package/dist/generation/emit/properties.d.ts +2 -2
  11. package/dist/generation/emit/properties.d.ts.map +1 -1
  12. package/dist/generation/emit/properties.js +11 -10
  13. package/dist/generation/emit/properties.js.map +1 -1
  14. package/dist/generation/emit/styles-part.d.ts +2 -0
  15. package/dist/generation/emit/styles-part.d.ts.map +1 -1
  16. package/dist/generation/emit/styles-part.js +28 -13
  17. package/dist/generation/emit/styles-part.js.map +1 -1
  18. package/dist/generation/index.d.ts +1 -1
  19. package/dist/generation/index.d.ts.map +1 -1
  20. package/dist/generation/types.d.ts +23 -1
  21. package/dist/generation/types.d.ts.map +1 -1
  22. package/dist/generation/types.js.map +1 -1
  23. package/dist/generation/validate-spec.d.ts.map +1 -1
  24. package/dist/generation/validate-spec.js +25 -0
  25. package/dist/generation/validate-spec.js.map +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/primitives/index.d.ts +1 -0
  29. package/dist/primitives/index.d.ts.map +1 -1
  30. package/dist/primitives/index.js +1 -0
  31. package/dist/primitives/index.js.map +1 -1
  32. package/dist/primitives/structural_validation.d.ts +54 -0
  33. package/dist/primitives/structural_validation.d.ts.map +1 -0
  34. package/dist/primitives/structural_validation.js +301 -0
  35. package/dist/primitives/structural_validation.js.map +1 -0
  36. package/dist/primitives/styles.d.ts +39 -17
  37. package/dist/primitives/styles.d.ts.map +1 -1
  38. package/dist/primitives/styles.js +412 -89
  39. package/dist/primitives/styles.js.map +1 -1
  40. package/package.json +2 -2
@@ -0,0 +1,301 @@
1
+ import { getParagraphBookmarkId } from './bookmarks.js';
2
+ import { getDirectChildrenByName } from './dom-helpers.js';
3
+ function hierarchyLevel(node) {
4
+ if (!node)
5
+ return null;
6
+ if (node.heading?.level != null && (node.heading.source === 'word_style'
7
+ || node.heading.source === 'list_metadata'
8
+ || node.heading.source === 'outline_level'))
9
+ return node.heading.level;
10
+ if (node.numbering.is_auto_numbered && node.numbering.ilvl != null)
11
+ return node.numbering.ilvl + 1;
12
+ return null;
13
+ }
14
+ function structuralStyle(node) {
15
+ return node?.paragraph_style_id ?? node?.style ?? '';
16
+ }
17
+ const parentChildSlicing = (nodes, context) => {
18
+ const anchorIndex = nodes.findIndex((node) => node.id === context.anchorId);
19
+ const source = nodes.find((node) => node.id === (context.styleSourceId ?? context.anchorId));
20
+ if (anchorIndex < 0 || !source)
21
+ return [];
22
+ const intendedLevel = hierarchyLevel(source);
23
+ if (intendedLevel == null)
24
+ return [];
25
+ // The insertion lands in the gap between `gapIndex` and `gapIndex + 1`.
26
+ const gapIndex = context.position === 'AFTER' ? anchorIndex : anchorIndex - 1;
27
+ // The run the new paragraph would capture: every following paragraph until
28
+ // one at or above the intended level.
29
+ let firstCaptured;
30
+ let lastCapturedId;
31
+ for (let index = gapIndex + 1; index < nodes.length; index += 1) {
32
+ const level = hierarchyLevel(nodes[index]);
33
+ if (level != null && level <= intendedLevel)
34
+ break;
35
+ if (level != null && !firstCaptured)
36
+ firstCaptured = { id: nodes[index].id, level };
37
+ lastCapturedId = nodes[index].id;
38
+ }
39
+ if (!firstCaptured)
40
+ return [];
41
+ // Slicing only happens when the captured paragraph already has a parent
42
+ // before the gap: the insertion would steal it from that parent.
43
+ let hasExistingParent = false;
44
+ for (let index = gapIndex; index >= 0; index -= 1) {
45
+ const level = hierarchyLevel(nodes[index]);
46
+ if (level != null && level < firstCaptured.level) {
47
+ hasExistingParent = true;
48
+ break;
49
+ }
50
+ }
51
+ if (!hasExistingParent)
52
+ return [];
53
+ const suggestedAnchorId = lastCapturedId;
54
+ return [{
55
+ code: 'PARENT_CHILD_SLICE',
56
+ severity: 'error',
57
+ operation_id: context.operationId,
58
+ anchor_id: context.anchorId,
59
+ message: `Insertion ${context.operationId} would separate ${firstCaptured.id} from its existing parent; insert after ${suggestedAnchorId} instead.`,
60
+ evidence: {
61
+ anchor_level: hierarchyLevel(nodes[anchorIndex]),
62
+ intended_level: intendedLevel,
63
+ first_descendant_id: firstCaptured.id,
64
+ first_descendant_level: firstCaptured.level,
65
+ style_source_id: context.styleSourceId,
66
+ },
67
+ suggested_anchor_id: suggestedAnchorId,
68
+ suggested_position: 'AFTER',
69
+ }];
70
+ };
71
+ const listLevelMismatch = (nodes, context) => {
72
+ const anchor = nodes.find((node) => node.id === context.anchorId);
73
+ const source = nodes.find((node) => node.id === (context.styleSourceId ?? context.anchorId));
74
+ if (!anchor?.numbering.is_auto_numbered || !source?.numbering.is_auto_numbered)
75
+ return [];
76
+ if (anchor.numbering.ilvl == null || source.numbering.ilvl == null || anchor.numbering.ilvl === source.numbering.ilvl)
77
+ return [];
78
+ return [{
79
+ code: 'LIST_LEVEL_MISMATCH',
80
+ severity: 'warning',
81
+ operation_id: context.operationId,
82
+ anchor_id: context.anchorId,
83
+ message: `Insertion ${context.operationId} uses list level ${source.numbering.ilvl} beside level ${anchor.numbering.ilvl}; confirm that nesting is intentional.`,
84
+ evidence: {
85
+ anchor_level: anchor.numbering.ilvl + 1,
86
+ intended_level: source.numbering.ilvl + 1,
87
+ style_source_id: context.styleSourceId,
88
+ anchor_num_id: anchor.numbering.num_id ?? undefined,
89
+ style_source_num_id: source.numbering.num_id ?? undefined,
90
+ },
91
+ }];
92
+ };
93
+ const midListRenumbering = (nodes, context) => {
94
+ const anchorIndex = nodes.findIndex((node) => node.id === context.anchorId);
95
+ const source = nodes.find((node) => node.id === (context.styleSourceId ?? context.anchorId));
96
+ if (anchorIndex < 0 || !source?.numbering.is_auto_numbered)
97
+ return [];
98
+ const anchor = nodes[anchorIndex];
99
+ const neighbor = context.position === 'AFTER' ? nodes[anchorIndex + 1] : nodes[anchorIndex - 1];
100
+ if (!anchor.numbering.is_auto_numbered || !neighbor?.numbering.is_auto_numbered)
101
+ return [];
102
+ const sameListWindow = anchor.numbering.num_id != null
103
+ && anchor.numbering.num_id === neighbor.numbering.num_id
104
+ && anchor.numbering.ilvl === neighbor.numbering.ilvl;
105
+ if (!sameListWindow || source.numbering.num_id == null || source.numbering.num_id === anchor.numbering.num_id)
106
+ return [];
107
+ return [{
108
+ code: 'MID_LIST_RENUMBERING',
109
+ severity: 'error',
110
+ operation_id: context.operationId,
111
+ anchor_id: context.anchorId,
112
+ message: `Insertion ${context.operationId} would introduce numbering ${source.numbering.num_id} inside list ${anchor.numbering.num_id}; use a peer from the surrounding list.`,
113
+ evidence: {
114
+ anchor_level: hierarchyLevel(anchor),
115
+ intended_level: hierarchyLevel(source),
116
+ style_source_id: context.styleSourceId,
117
+ anchor_num_id: anchor.numbering.num_id ?? undefined,
118
+ style_source_num_id: source.numbering.num_id ?? undefined,
119
+ },
120
+ suggested_anchor_id: anchor.id,
121
+ }];
122
+ };
123
+ export const structuralValidators = [
124
+ parentChildSlicing,
125
+ listLevelMismatch,
126
+ midListRenumbering,
127
+ ];
128
+ export function validateStructuralInsertion(nodes, context) {
129
+ return structuralValidators.flatMap((validator) => validator(nodes, context));
130
+ }
131
+ export function validateStructuralInsertions(nodes, contexts, options = {}) {
132
+ const diagnostics = contexts.flatMap((context) => validateStructuralInsertion(nodes, context));
133
+ diagnostics.push(...validateBondedPairs(nodes, contexts, options));
134
+ return diagnostics;
135
+ }
136
+ function sourceNode(nodes, context) {
137
+ return nodes.find((node) => node.id === (context.styleSourceId ?? context.anchorId));
138
+ }
139
+ /**
140
+ * A heading style is bonded to a follower style only when the source shows the
141
+ * Word run-in construction (a style-separator paragraph mark on the heading)
142
+ * followed by the same follower style at the same indent, at least twice.
143
+ * Title casing and punctuation are not structural authorities.
144
+ */
145
+ function bondedTransitions(nodes, options) {
146
+ const runInHeadingIds = options.runInHeadingIds;
147
+ if (!runInHeadingIds || runInHeadingIds.size === 0)
148
+ return [];
149
+ const transitions = new Map();
150
+ for (let index = 0; index < nodes.length - 1; index += 1) {
151
+ const heading = nodes[index];
152
+ const body = nodes[index + 1];
153
+ if (!runInHeadingIds.has(heading.id))
154
+ continue;
155
+ if (hierarchyLevel(heading) == null || hierarchyLevel(body) != null)
156
+ continue;
157
+ if (Math.abs(heading.paragraph_indents_pt.left - body.paragraph_indents_pt.left) > 0.5)
158
+ continue;
159
+ const headingStyle = structuralStyle(heading);
160
+ const bodyStyle = structuralStyle(body);
161
+ if (!headingStyle || !bodyStyle || headingStyle === bodyStyle)
162
+ continue;
163
+ const key = `${headingStyle}\u0000${bodyStyle}`;
164
+ const current = transitions.get(key);
165
+ transitions.set(key, { headingStyle, bodyStyle, count: (current?.count ?? 0) + 1 });
166
+ }
167
+ return [...transitions.values()].filter((transition) => transition.count >= 2);
168
+ }
169
+ function validateBondedPairs(nodes, contexts, options) {
170
+ const bonded = bondedTransitions(nodes, options);
171
+ if (bonded.length === 0)
172
+ return [];
173
+ const diagnostics = [];
174
+ // Group operations by insertion slot. Repeated AFTER insertion lands each
175
+ // new paragraph directly after the anchor, so the slot's document order is
176
+ // the reverse of operation order; repeated BEFORE preserves operation order.
177
+ const slots = new Map();
178
+ contexts.forEach((context, index) => {
179
+ const key = `${context.anchorId}\u0000${context.position}`;
180
+ slots.set(key, [...(slots.get(key) ?? []), index]);
181
+ });
182
+ for (const operationIndexes of slots.values()) {
183
+ const position = contexts[operationIndexes[0]].position;
184
+ const documentOrder = position === 'AFTER' ? [...operationIndexes].reverse() : operationIndexes;
185
+ const styleOf = (operationIndex) => structuralStyle(sourceNode(nodes, contexts[operationIndex]));
186
+ const consumedBodies = new Set();
187
+ const unpaired = [];
188
+ documentOrder.forEach((operationIndex, slotIndex) => {
189
+ // Only a run-in heading source binds a body; an ordinary paragraph that
190
+ // happens to share the run-in style (e.g. a Heading2 with Heading3
191
+ // children) does not.
192
+ const headingSource = sourceNode(nodes, contexts[operationIndex]);
193
+ if (!headingSource || !options.runInHeadingIds?.has(headingSource.id))
194
+ return;
195
+ const candidatePairs = bonded.filter((transition) => transition.headingStyle === styleOf(operationIndex));
196
+ if (candidatePairs.length === 0)
197
+ return;
198
+ const next = documentOrder[slotIndex + 1];
199
+ const nextStyle = next == null ? undefined : styleOf(next);
200
+ const adjacentPair = candidatePairs.find((pair) => pair.bodyStyle === nextStyle);
201
+ if (next != null && adjacentPair && !consumedBodies.has(next)) {
202
+ consumedBodies.add(next);
203
+ return;
204
+ }
205
+ unpaired.push({ operationIndex, candidatePairs });
206
+ });
207
+ for (const { operationIndex, candidatePairs } of unpaired) {
208
+ const context = contexts[operationIndex];
209
+ const source = sourceNode(nodes, context);
210
+ const availableBodyStyles = new Set(operationIndexes
211
+ .filter((index) => !consumedBodies.has(index))
212
+ .map(styleOf));
213
+ const matchingPairs = candidatePairs.filter((pair) => availableBodyStyles.has(pair.bodyStyle));
214
+ const baseEvidence = {
215
+ anchor_level: hierarchyLevel(nodes.find((node) => node.id === context.anchorId)),
216
+ intended_level: hierarchyLevel(source),
217
+ style_source_id: context.styleSourceId,
218
+ };
219
+ if (candidatePairs.length > 1 && matchingPairs.length !== 1) {
220
+ const candidates = candidatePairs.map((pair) => pair.bodyStyle).sort();
221
+ diagnostics.push({
222
+ code: 'BONDED_PARAGRAPH_PAIR_AMBIGUOUS', severity: 'error', operation_id: context.operationId,
223
+ anchor_id: context.anchorId,
224
+ message: `Style ${structuralStyle(source)} has multiple repeated run-in body followers (${candidates.join(', ')}); supply exactly one matching body peer immediately after the heading in this insertion slot.`,
225
+ evidence: { ...baseEvidence, bonded_heading_style: structuralStyle(source), bonded_body_style_candidates: candidates },
226
+ });
227
+ continue;
228
+ }
229
+ const pair = matchingPairs[0] ?? candidatePairs[0];
230
+ const evidence = { ...baseEvidence, bonded_heading_style: pair.headingStyle, bonded_body_style: pair.bodyStyle };
231
+ if (matchingPairs.length === 0) {
232
+ diagnostics.push({
233
+ code: 'BONDED_PARAGRAPH_PAIR_REQUIRED', severity: 'error', operation_id: context.operationId,
234
+ anchor_id: context.anchorId,
235
+ message: `Style ${pair.headingStyle} is a run-in heading repeatedly followed by ${pair.bodyStyle}; insert both paragraphs with distinct structural peers.`,
236
+ evidence,
237
+ });
238
+ continue;
239
+ }
240
+ const requiredOrder = position === 'AFTER'
241
+ ? `${pair.bodyStyle} immediately before ${pair.headingStyle}`
242
+ : `${pair.headingStyle} immediately before ${pair.bodyStyle}`;
243
+ diagnostics.push({
244
+ code: 'RUN_IN_PAIR_ORDER', severity: 'error', operation_id: context.operationId,
245
+ anchor_id: context.anchorId,
246
+ message: `For repeated ${position} insertion, order operations ${requiredOrder} so the document yields each heading directly followed by its body.`,
247
+ evidence,
248
+ });
249
+ }
250
+ }
251
+ return diagnostics;
252
+ }
253
+ /**
254
+ * Paragraph ids whose paragraph mark carries `w:specVanish` (Word's style
255
+ * separator), i.e. headings that render run-in with the next paragraph.
256
+ */
257
+ export function collectRunInHeadingIds(paragraphs) {
258
+ const ids = new Set();
259
+ for (const paragraph of paragraphs) {
260
+ if (!isRunInHeadingParagraph(paragraph))
261
+ continue;
262
+ const id = getParagraphBookmarkId(paragraph);
263
+ if (id)
264
+ ids.add(id);
265
+ }
266
+ return ids;
267
+ }
268
+ export function isRunInHeadingParagraph(paragraph) {
269
+ const pPr = getDirectChildrenByName(paragraph, 'pPr')[0];
270
+ const markRPr = pPr ? getDirectChildrenByName(pPr, 'rPr')[0] : undefined;
271
+ const specVanish = markRPr ? getDirectChildrenByName(markRPr, 'specVanish')[0] : undefined;
272
+ if (!specVanish)
273
+ return false;
274
+ const value = (specVanish.getAttribute('w:val') ?? '').trim().toLowerCase();
275
+ return value !== '0' && value !== 'false' && value !== 'off';
276
+ }
277
+ /** True only for the explicit two-operation form of a source-proven bonded pair. */
278
+ export function isRecognizedBondedInsertionPair(nodes, contexts, options = {}) {
279
+ if (contexts.length !== 2)
280
+ return false;
281
+ const [first, second] = contexts;
282
+ if (!first || !second || first.anchorId !== second.anchorId || first.position !== second.position)
283
+ return false;
284
+ const sources = contexts.map((context) => sourceNode(nodes, context));
285
+ if (!sources[0] || !sources[1] || structuralStyle(sources[0]) === structuralStyle(sources[1]))
286
+ return false;
287
+ const headingIndex = sources.findIndex((source) => hierarchyLevel(source) != null);
288
+ const bodyIndex = sources.findIndex((source) => hierarchyLevel(source) == null);
289
+ if (headingIndex < 0 || bodyIndex < 0)
290
+ return false;
291
+ if (!options.runInHeadingIds?.has(sources[headingIndex].id))
292
+ return false;
293
+ const headingStyle = structuralStyle(sources[headingIndex]);
294
+ const bodyStyle = structuralStyle(sources[bodyIndex]);
295
+ const proven = bondedTransitions(nodes, options)
296
+ .some((transition) => transition.headingStyle === headingStyle && transition.bodyStyle === bodyStyle);
297
+ if (!proven)
298
+ return false;
299
+ return !validateBondedPairs(nodes, contexts, options).length;
300
+ }
301
+ //# sourceMappingURL=structural_validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural_validation.js","sourceRoot":"","sources":["../../src/primitives/structural_validation.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,14 @@ export type StyleDef = {
5
5
  basedOn: string | null;
6
6
  pPr: Element | null;
7
7
  rPr: Element | null;
8
+ /**
9
+ * Table styles only: the style's own `w:tblPr` (read for
10
+ * `w:tblStyleRowBandSize` / `w:tblStyleColBandSize`), and the `w:rPr` of
11
+ * each conditional `w:tblStylePr`, keyed by its `w:type`. Optional so
12
+ * hand-built models remain source-compatible.
13
+ */
14
+ tblPr?: Element | null;
15
+ conditionalRPrs?: Map<string, Element>;
8
16
  };
9
17
  export type StylesModel = {
10
18
  byId: Map<string, StyleDef>;
@@ -16,11 +24,18 @@ export type StylesModel = {
16
24
  * defaults.
17
25
  */
18
26
  docDefaultsRPr?: Element | null;
27
+ /**
28
+ * The `w:styleId` of the default table style (`w:type="table"` with
29
+ * `w:default="1"`), which applies to a table that names no `w:tblStyle`.
30
+ */
31
+ defaultTableStyleId?: string | null;
19
32
  /**
20
33
  * Every `w:rPr` carried by a table style, including the conditional
21
- * `w:tblStylePr/w:rPr` blocks. A detection-only probe: the resolver does not
22
- * read table styles, so a declaration here that could change a property of a
23
- * run inside a table makes that property unresolved.
34
+ * `w:tblStylePr/w:rPr` blocks.
35
+ *
36
+ * @deprecated No longer read: {@link extractEffectiveRunFormatting} resolves
37
+ * table styles from the run's table context since #1159. Still populated so
38
+ * existing readers keep compiling.
24
39
  */
25
40
  tableStyleRPrs?: Element[];
26
41
  };
@@ -52,10 +67,6 @@ export declare function extractParagraphFormatting(pPr: Element | null, styles:
52
67
  /**
53
68
  * Effective run formatting. `null` means the resolver could not establish the
54
69
  * property, and never stands in for a rendered default. That happens when:
55
- * - no layer the resolver reads above `w:docDefaults` declares the property,
56
- * the run is inside a table, and a table style's run properties declare a
57
- * value that differs from what `w:docDefaults` (or the OOXML default) gives
58
- * — table styles sit above document defaults and are not read;
59
70
  * - the nearest layer that declares it does so through a theme colour or
60
71
  * theme font reference that cannot be resolved (no theme, or no matching
61
72
  * theme entry, and no explicit fallback value); or
@@ -109,8 +120,9 @@ export declare function extractStyleRunFormatting(styles: StylesModel, styleId:
109
120
  * the run declares. Ordinary properties are taken from the first layer that
110
121
  * specifies them: direct `w:rPr` on the run, then the `w:rStyle`
111
122
  * character-style `basedOn` chain, then the paragraph mark's `w:rPr` inside
112
- * `pPr`, then the paragraph style's `basedOn` chain, and finally the
113
- * document defaults (`w:docDefaults/w:rPrDefault/w:rPr`).
123
+ * `pPr`, then the paragraph style's `basedOn` chain, then — for a run inside
124
+ * a table — the table style, and finally the document defaults
125
+ * (`w:docDefaults/w:rPrDefault/w:rPr`).
114
126
  *
115
127
  * Each property is resolved independently down the chain — a style that
116
128
  * specifies only color does not mask an ancestor's bold.
@@ -125,14 +137,21 @@ export declare function extractStyleRunFormatting(styles: StylesModel, styleId:
125
137
  * Document defaults seed toggle evaluation as an absolute base value rather
126
138
  * than acting as another parity level (see {@link resolveToggleProperty}).
127
139
  *
128
- * Not read: table-style run properties. For a run inside a table, when a
129
- * property is declared nowhere above the document defaults and a table style
130
- * declares a value that would change it (for a toggle: turns it on), the
131
- * result is `null` (unresolved) rather than a guess; when no layer declares it
132
- * at all, the result is the OOXML default (see {@link RunFormatting}). A
133
- * toggle that a direct layer sets absolutely is resolved regardless of table
134
- * styles. Numbering-level `rPr` formats only the list label (`w:lvlText`),
135
- * never the paragraph's runs, so it is out of scope.
140
+ * Table styles (#1159): the table context is read from the run's ancestors —
141
+ * the innermost `w:tbl`, its `w:tblStyle` (or the default table style), the
142
+ * `basedOn` chain, `w:tblLook`, and the cell's row and column. The style's
143
+ * `w:rPr` and every conditional `w:tblStylePr/w:rPr` that applies to the
144
+ * cell merge into one layer between the document defaults and the paragraph
145
+ * style (see {@link tableStyleLayers} for the order). For toggles the
146
+ * merged layer's nearest declaration resets the value rather than toggling
147
+ * it: the standard says a table style toggles like any other style, but Word
148
+ * assigns the declared value (MS-OI29500 note on § 17.7.6), and this follows
149
+ * Word.
150
+ *
151
+ * @see https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oi29500/14452bbe-be4d-4dbb-90e6-3d23ae9361bc
152
+ *
153
+ * Numbering-level `rPr` formats only the list label (`w:lvlText`), never the
154
+ * paragraph's runs, so it is out of scope.
136
155
  *
137
156
  * Part of docx-core's public surface (see `src/index.ts`) so external
138
157
  * diagnostics — `scripts/check_docx_formatting_loss.mjs` today, the planned
@@ -147,11 +166,14 @@ export declare function extractStyleRunFormatting(styles: StylesModel, styleId:
147
166
  * @param params.theme the model produced by {@link parseThemeXml}; when
148
167
  * omitted, direct font/color fallbacks retain their previous behavior
149
168
  *
169
+ * @conformance ECMA-376 edition 5, Part 1 § 17.7.2
150
170
  * @conformance ECMA-376 edition 5, Part 1 § 17.7.3
151
171
  * @conformance ECMA-376 edition 5, Part 1 § 17.7.5.1
172
+ * @conformance ECMA-376 edition 5, Part 1 § 17.7.6
152
173
  * @see https://github.com/UseJunior/safe-docx/issues/737
153
174
  * @see https://github.com/UseJunior/safe-docx/issues/752
154
175
  * @see https://github.com/UseJunior/safe-docx/issues/753
176
+ * @see https://github.com/UseJunior/safe-docx/issues/1159
155
177
  */
156
178
  export declare function extractEffectiveRunFormatting(params: {
157
179
  run: Element;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/primitives/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/primitives/styles.ts"],"names":[],"mappings":"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"}