@stll/folio-core 0.47.6 → 0.48.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 (163) hide show
  1. package/dist/ai-edits/word-diff.d.ts +25 -6
  2. package/dist/ai-edits/word-diff.js +210 -38
  3. package/dist/controller/fontReadiness.js +3 -3
  4. package/dist/controller/hyphenationReadiness.d.ts +19 -0
  5. package/dist/controller/hyphenationReadiness.js +47 -0
  6. package/dist/controller/layoutPipeline.d.ts +3 -0
  7. package/dist/controller/layoutPipeline.js +59 -17
  8. package/dist/display-list/build/buildDisplayList.js +39 -12
  9. package/dist/display-list/build/pageFurniture.d.ts +7 -1
  10. package/dist/display-list/build/pageFurniture.js +21 -8
  11. package/dist/display-list/build/paragraphPrimitives.js +5 -4
  12. package/dist/display-list/build/tablePrimitives.js +10 -6
  13. package/dist/docx/attributeRemainder.js +10 -2
  14. package/dist/docx/blockContentParser.d.ts +2 -0
  15. package/dist/docx/blockContentParser.js +77 -62
  16. package/dist/docx/commentParser.d.ts +2 -1
  17. package/dist/docx/commentParser.js +57 -45
  18. package/dist/docx/containerChildren.d.ts +21 -8
  19. package/dist/docx/containerChildren.js +39 -9
  20. package/dist/docx/documentParser.d.ts +5 -1
  21. package/dist/docx/documentParser.js +8 -5
  22. package/dist/docx/documentSectionFacts.d.ts +22 -0
  23. package/dist/docx/documentSectionFacts.js +43 -0
  24. package/dist/docx/fieldParser.d.ts +8 -1
  25. package/dist/docx/fieldParser.js +47 -3
  26. package/dist/docx/fontTableParser.js +34 -27
  27. package/dist/docx/footnoteParser.d.ts +3 -2
  28. package/dist/docx/footnoteParser.js +15 -12
  29. package/dist/docx/groupDrawingParser.d.ts +2 -1
  30. package/dist/docx/groupDrawingParser.js +3 -6
  31. package/dist/docx/headerFooterParser.d.ts +7 -2
  32. package/dist/docx/headerFooterParser.js +15 -5
  33. package/dist/docx/hyperlinkParser.d.ts +48 -36
  34. package/dist/docx/hyperlinkParser.js +97 -82
  35. package/dist/docx/numberingParser.js +108 -84
  36. package/dist/docx/paragraphParser.d.ts +5 -1
  37. package/dist/docx/paragraphParser.js +381 -362
  38. package/dist/docx/paragraphProperties.js +123 -109
  39. package/dist/docx/paragraphPropertySource.d.ts +6 -1
  40. package/dist/docx/paragraphPropertySource.js +9 -1
  41. package/dist/docx/paragraphTextBoxEnrichment.d.ts +2 -1
  42. package/dist/docx/paragraphTextBoxEnrichment.js +17 -6
  43. package/dist/docx/parser.d.ts +7 -1
  44. package/dist/docx/parser.js +33 -16
  45. package/dist/docx/previewBudget.d.ts +55 -33
  46. package/dist/docx/previewBudget.js +59 -65
  47. package/dist/docx/relsParser.js +9 -1
  48. package/dist/docx/rezip.js +41 -58
  49. package/dist/docx/runParser.d.ts +4 -1
  50. package/dist/docx/runParser.js +172 -184
  51. package/dist/docx/sdtProperties.js +87 -84
  52. package/dist/docx/sectionParser.js +169 -160
  53. package/dist/docx/serializer/paragraphSerializer.js +42 -38
  54. package/dist/docx/serializer/settingsSerializer.js +19 -1
  55. package/dist/docx/settingsParser.js +8 -0
  56. package/dist/docx/streamingXmlParser.d.ts +6 -2
  57. package/dist/docx/streamingXmlParser.js +12 -7
  58. package/dist/docx/styleParser.js +34 -8
  59. package/dist/docx/tableParser.d.ts +21 -12
  60. package/dist/docx/tableParser.js +518 -441
  61. package/dist/docx/textBoxParser.d.ts +8 -3
  62. package/dist/docx/textBoxParser.js +3 -3
  63. package/dist/docx/verbatimCapture.d.ts +10 -8
  64. package/dist/docx/verbatimCapture.js +45 -2
  65. package/dist/docx/vmlImageParser.d.ts +15 -13
  66. package/dist/docx/vmlImageParser.js +75 -60
  67. package/dist/docx/vmlPreview.d.ts +3 -3
  68. package/dist/docx/vmlPreview.js +3 -4
  69. package/dist/docx/xmlNamespaceContext.d.ts +9 -0
  70. package/dist/docx/xmlNamespaceContext.js +54 -0
  71. package/dist/docx/xmlParser.d.ts +6 -3
  72. package/dist/docx/xmlParser.js +11 -41
  73. package/dist/docx/xmlResourceLimits.d.ts +2 -1
  74. package/dist/docx/xmlResourceLimits.js +4 -1
  75. package/dist/fonts/headlessMeasure.js +0 -0
  76. package/dist/headless-layout.d.ts +11 -2
  77. package/dist/headless-layout.js +153 -107
  78. package/dist/internal/paragraphFormattingSerialization.js +3 -3
  79. package/dist/layout-bridge/convert/endnoteLayout.d.ts +65 -0
  80. package/dist/layout-bridge/convert/endnoteLayout.js +227 -0
  81. package/dist/layout-bridge/convert/footnoteLayout.d.ts +19 -3
  82. package/dist/layout-bridge/convert/footnoteLayout.js +40 -31
  83. package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -7
  84. package/dist/layout-bridge/convert/headerFooterLayout.js +5 -20
  85. package/dist/layout-bridge/convert/paragraphMarkFormatting.d.ts +10 -0
  86. package/dist/layout-bridge/convert/paragraphMarkFormatting.js +59 -0
  87. package/dist/layout-bridge/convert/toFlowBlocks.d.ts +29 -1
  88. package/dist/layout-bridge/convert/toFlowBlocks.js +258 -35
  89. package/dist/layout-bridge/engine/hitTest.js +5 -3
  90. package/dist/layout-bridge/engine/selectionRects.js +5 -3
  91. package/dist/layout-engine/anchorLayoutInCellCompatibility.d.ts +10 -0
  92. package/dist/layout-engine/anchorLayoutInCellCompatibility.js +22 -0
  93. package/dist/layout-engine/index.d.ts +2 -2
  94. package/dist/layout-engine/index.js +70 -11
  95. package/dist/layout-engine/justificationCompatibility.d.ts +1 -1
  96. package/dist/layout-engine/justificationCompatibility.js +9 -5
  97. package/dist/layout-engine/keep-together.d.ts +11 -5
  98. package/dist/layout-engine/keep-together.js +39 -16
  99. package/dist/layout-engine/layoutInstrumentation.d.ts +8 -2
  100. package/dist/layout-engine/layoutInstrumentation.js +8 -1
  101. package/dist/layout-engine/measure/advanceComposition.js +4 -7
  102. package/dist/layout-engine/measure/hyphenationDictionaries.d.ts +74 -0
  103. package/dist/layout-engine/measure/hyphenationDictionaries.js +138 -0
  104. package/dist/layout-engine/measure/hyphenationPreload.d.ts +11 -0
  105. package/dist/layout-engine/measure/hyphenationPreload.js +24 -0
  106. package/dist/layout-engine/measure/lineBreakProvider.d.ts +12 -2
  107. package/dist/layout-engine/measure/lineBreakProvider.js +30 -30
  108. package/dist/layout-engine/measure/lineBreaks.d.ts +6 -1
  109. package/dist/layout-engine/measure/lineBreaks.js +10 -3
  110. package/dist/layout-engine/measure/listMarkerWidth.d.ts +9 -6
  111. package/dist/layout-engine/measure/listMarkerWidth.js +20 -22
  112. package/dist/layout-engine/measure/measureBlocks.js +42 -8
  113. package/dist/layout-engine/measure/measureContainer.js +5 -5
  114. package/dist/layout-engine/measure/measureHelpers.d.ts +15 -3
  115. package/dist/layout-engine/measure/measureHelpers.js +21 -5
  116. package/dist/layout-engine/measure/measureParagraph.js +109 -30
  117. package/dist/layout-engine/measure/measureTypes.d.ts +5 -0
  118. package/dist/layout-engine/measure/tabCalculator.d.ts +2 -0
  119. package/dist/layout-engine/measure/tabCalculator.js +2 -1
  120. package/dist/layout-engine/measure/tableCellFloating.d.ts +2 -0
  121. package/dist/layout-engine/measure/tableCellFloating.js +51 -19
  122. package/dist/layout-engine/measure/tableCellGrid.d.ts +28 -3
  123. package/dist/layout-engine/measure/tableCellGrid.js +45 -5
  124. package/dist/layout-engine/measure/tableFragmentBorderGeometry.js +2 -1
  125. package/dist/layout-engine/noteAreaFlow.d.ts +19 -0
  126. package/dist/layout-engine/noteAreaFlow.js +83 -0
  127. package/dist/layout-engine/paginator.d.ts +10 -1
  128. package/dist/layout-engine/paginator.js +13 -1
  129. package/dist/layout-engine/tableRowBreak.js +3 -1
  130. package/dist/layout-engine/types.d.ts +89 -3
  131. package/dist/layout-engine/types.js +96 -1
  132. package/dist/layout-painter/index.d.ts +3 -0
  133. package/dist/layout-painter/renderPage.js +32 -83
  134. package/dist/layout-painter/renderParagraph.d.ts +6 -1
  135. package/dist/layout-painter/renderParagraph.js +34 -22
  136. package/dist/layout-painter/renderTable.js +26 -13
  137. package/dist/prosemirror/attrs/index.d.ts +9 -9
  138. package/dist/prosemirror/attrs/index.js +43 -11
  139. package/dist/prosemirror/conversion/fromProseDoc.js +8 -1
  140. package/dist/prosemirror/conversion/markInterner.d.ts +21 -0
  141. package/dist/prosemirror/conversion/markInterner.js +90 -0
  142. package/dist/prosemirror/conversion/toProseDoc.js +77 -41
  143. package/dist/prosemirror/extensions/core/DocExtension.js +2 -1
  144. package/dist/prosemirror/extensions/core/ParagraphExtension.js +1 -0
  145. package/dist/prosemirror/extensions/marks/markUtils.d.ts +6 -2
  146. package/dist/prosemirror/extensions/marks/markUtils.js +39 -51
  147. package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +2 -1
  148. package/dist/prosemirror/listMarker.d.ts +1 -0
  149. package/dist/prosemirror/listMarker.js +2 -0
  150. package/dist/prosemirror/listRenderingAttrs.d.ts +1 -0
  151. package/dist/prosemirror/listRenderingAttrs.js +3 -0
  152. package/dist/prosemirror/schema/nodes.d.ts +13 -1
  153. package/dist/prosemirror/textBoxHostParagraph.d.ts +13 -0
  154. package/dist/prosemirror/textBoxHostParagraph.js +21 -0
  155. package/dist/prosemirror/validation.js +91 -80
  156. package/dist/utils/createDocument.js +10 -1
  157. package/dist/utils/scriptSegments.d.ts +33 -4
  158. package/dist/utils/scriptSegments.js +39 -6
  159. package/dist/utils/textFormattingMerge.d.ts +17 -3
  160. package/dist/utils/textFormattingMerge.js +18 -12
  161. package/dist/utils/trailingText.d.ts +22 -0
  162. package/dist/utils/trailingText.js +32 -0
  163. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { DERIVED_PART_ROOT_ATTRIBUTES, attributeRemainder } from "./attributeRemainder.js";
2
- import { CAPTURE, dispatchChildren, sequencePositions } from "./containerChildren.js";
2
+ import { CAPTURE, dispatchChildrenWithContext, sequencePositions } from "./containerChildren.js";
3
3
  import { isNumberingReference } from "./numberingReference.js";
4
4
  import { formatOoxmlCounter, padDecimal } from "./ooxmlCounterFormatter.js";
5
5
  import { parseParagraphProperties } from "./paragraphProperties.js";
@@ -25,6 +25,29 @@ const integerValue = (element) => {
25
25
  return parsed === void 0 || !Number.isFinite(parsed) ? void 0 : parsed;
26
26
  };
27
27
  /**
28
+ * A field read off a sequence child, when the child stated one.
29
+ *
30
+ * `CT_AbstractNum` and `CT_Lvl` are sequences and the serializer writes these
31
+ * fields back in that order, so the sink's index is a count of what has been
32
+ * read and a capture lands between the same two neighbours it sat between.
33
+ */
34
+ const assignDefined = (target, key, carried) => {
35
+ if (carried === void 0) return;
36
+ target[key] = carried;
37
+ };
38
+ const NUMBERING_HANDLERS = {
39
+ abstractNum: (child, definitions) => {
40
+ const parsed = parseAbstractNumbering(child);
41
+ if (parsed) definitions.abstractNums.push(parsed);
42
+ },
43
+ num: (child, definitions) => {
44
+ const parsed = parseNumberingInstance(child);
45
+ if (parsed) definitions.nums.push(parsed);
46
+ },
47
+ numPicBullet: CAPTURE,
48
+ numIdMacAtCleanup: CAPTURE
49
+ };
50
+ /**
28
51
  * Parse numbering.xml into NumberingDefinitions
29
52
  *
30
53
  * @param numberingXml - Raw XML string from word/numbering.xml (or null if not present)
@@ -38,22 +61,12 @@ function parseNumbering(numberingXml) {
38
61
  if (!numberingXml) return createNumberingMap(definitions);
39
62
  const root = parseXmlDocument(numberingXml);
40
63
  if (!root) return createNumberingMap(definitions);
41
- const preserved = dispatchChildren({
64
+ const preserved = dispatchChildrenWithContext({
42
65
  element: root,
43
66
  container: "w:numbering",
44
67
  capturePosition: sequencePositions("w:numbering", root),
45
- handlers: {
46
- abstractNum: (child) => {
47
- const parsed = parseAbstractNumbering(child);
48
- if (parsed) definitions.abstractNums.push(parsed);
49
- },
50
- num: (child) => {
51
- const parsed = parseNumberingInstance(child);
52
- if (parsed) definitions.nums.push(parsed);
53
- },
54
- numPicBullet: CAPTURE,
55
- numIdMacAtCleanup: CAPTURE
56
- }
68
+ handlers: NUMBERING_HANDLERS,
69
+ context: definitions
57
70
  });
58
71
  if (preserved !== void 0) definitions.preserved = preserved;
59
72
  const preservedAttributes = attributeRemainder({
@@ -63,6 +76,18 @@ function parseNumbering(numberingXml) {
63
76
  if (preservedAttributes !== void 0) definitions.preservedAttributes = preservedAttributes;
64
77
  return createNumberingMap(definitions);
65
78
  }
79
+ const ABSTRACT_NUM_HANDLERS = {
80
+ nsid: (child, abstractNum) => assignDefined(abstractNum, "nsid", attributeValue(child)),
81
+ multiLevelType: (child, abstractNum) => assignDefined(abstractNum, "multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
82
+ tmpl: (child, abstractNum) => assignDefined(abstractNum, "tmpl", attributeValue(child)),
83
+ name: (child, abstractNum) => assignDefined(abstractNum, "name", attributeValue(child)),
84
+ styleLink: (child, abstractNum) => assignDefined(abstractNum, "styleLink", attributeValue(child)),
85
+ numStyleLink: (child, abstractNum) => assignDefined(abstractNum, "numStyleLink", attributeValue(child)),
86
+ lvl: (child, abstractNum) => {
87
+ const level = parseListLevel(child);
88
+ if (level) abstractNum.levels.push(level);
89
+ }
90
+ };
66
91
  /**
67
92
  * Parse a single w:abstractNum element
68
93
  */
@@ -75,26 +100,12 @@ function parseAbstractNumbering(element) {
75
100
  abstractNumId,
76
101
  levels: []
77
102
  };
78
- const read = (key, value) => {
79
- if (value === void 0) return;
80
- abstractNum[key] = value;
81
- };
82
- const preserved = dispatchChildren({
103
+ const preserved = dispatchChildrenWithContext({
83
104
  element,
84
105
  container: "w:abstractNum",
85
106
  capturePosition: sequencePositions("w:abstractNum", element),
86
- handlers: {
87
- nsid: (child) => read("nsid", attributeValue(child)),
88
- multiLevelType: (child) => read("multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
89
- tmpl: (child) => read("tmpl", attributeValue(child)),
90
- name: (child) => read("name", attributeValue(child)),
91
- styleLink: (child) => read("styleLink", attributeValue(child)),
92
- numStyleLink: (child) => read("numStyleLink", attributeValue(child)),
93
- lvl: (child) => {
94
- const level = parseListLevel(child);
95
- if (level) abstractNum.levels.push(level);
96
- }
97
- }
107
+ handlers: ABSTRACT_NUM_HANDLERS,
108
+ context: abstractNum
98
109
  });
99
110
  if (preserved !== void 0) abstractNum.preserved = preserved;
100
111
  const preservedAttributes = attributeRemainder({
@@ -113,6 +124,16 @@ const MULTI_LEVEL_TYPES = [
113
124
  "singleLevel"
114
125
  ];
115
126
  const narrow = (carried, members) => members.find((member) => member === carried);
127
+ const NUMBERING_INSTANCE_HANDLERS = {
128
+ abstractNumId: (child, walk) => {
129
+ if (walk.abstractNumId !== void 0) return;
130
+ walk.abstractNumId = integerValue(child);
131
+ },
132
+ lvlOverride: (child, { levelOverrides }) => {
133
+ const override = parseLevelOverride(child);
134
+ if (override) levelOverrides.push(override);
135
+ }
136
+ };
116
137
  /**
117
138
  * Parse a single w:num element (numbering instance)
118
139
  */
@@ -121,23 +142,18 @@ function parseNumberingInstance(element) {
121
142
  if (numIdStr === null) return null;
122
143
  const numId = Number.parseInt(numIdStr, 10);
123
144
  if (Number.isNaN(numId)) return null;
124
- const levelOverrides = [];
125
- let abstractNumId;
126
- const preserved = dispatchChildren({
145
+ const walk = {
146
+ abstractNumId: void 0,
147
+ levelOverrides: []
148
+ };
149
+ const preserved = dispatchChildrenWithContext({
127
150
  element,
128
151
  container: "w:num",
129
152
  capturePosition: sequencePositions("w:num", element),
130
- handlers: {
131
- abstractNumId: (child) => {
132
- if (abstractNumId !== void 0) return;
133
- abstractNumId = integerValue(child);
134
- },
135
- lvlOverride: (child) => {
136
- const override = parseLevelOverride(child);
137
- if (override) levelOverrides.push(override);
138
- }
139
- }
153
+ handlers: NUMBERING_INSTANCE_HANDLERS,
154
+ context: walk
140
155
  });
156
+ const { abstractNumId, levelOverrides } = walk;
141
157
  if (abstractNumId === void 0) return null;
142
158
  const instance = {
143
159
  numId,
@@ -152,6 +168,16 @@ function parseNumberingInstance(element) {
152
168
  if (preservedAttributes !== void 0) instance.preservedAttributes = preservedAttributes;
153
169
  return instance;
154
170
  }
171
+ const LEVEL_OVERRIDE_HANDLERS = {
172
+ startOverride: (child, override) => {
173
+ const start = integerValue(child);
174
+ if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
175
+ },
176
+ lvl: (child, override) => {
177
+ const level = parseListLevel(child);
178
+ if (level && override.lvl === void 0) override.lvl = level;
179
+ }
180
+ };
155
181
  /**
156
182
  * Parse a single w:lvlOverride element (one level of one numbering instance)
157
183
  */
@@ -159,20 +185,12 @@ function parseLevelOverride(element) {
159
185
  const ilvl = parseNumericAttribute(element, "w", "ilvl");
160
186
  if (ilvl === void 0) return null;
161
187
  const override = { ilvl };
162
- const preserved = dispatchChildren({
188
+ const preserved = dispatchChildrenWithContext({
163
189
  element,
164
190
  container: "w:lvlOverride",
165
191
  capturePosition: sequencePositions("w:lvlOverride", element),
166
- handlers: {
167
- startOverride: (child) => {
168
- const start = integerValue(child);
169
- if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
170
- },
171
- lvl: (child) => {
172
- const level = parseListLevel(child);
173
- if (level && override.lvl === void 0) override.lvl = level;
174
- }
175
- }
192
+ handlers: LEVEL_OVERRIDE_HANDLERS,
193
+ context: override
176
194
  });
177
195
  if (preserved !== void 0) override.preserved = preserved;
178
196
  const preservedAttributes = attributeRemainder({
@@ -182,6 +200,34 @@ function parseLevelOverride(element) {
182
200
  if (preservedAttributes !== void 0) override.preservedAttributes = preservedAttributes;
183
201
  return override;
184
202
  }
203
+ const LIST_LEVEL_HANDLERS = {
204
+ start: (child, level) => assignDefined(level, "start", integerValue(child)),
205
+ numFmt: (child, level) => {
206
+ const resolved = resolveNumFmt(child);
207
+ if (resolved === null) return CAPTURE;
208
+ Object.assign(level, resolved);
209
+ },
210
+ lvlRestart: (child, level) => assignDefined(level, "lvlRestart", integerValue(child)),
211
+ pStyle: (child, level) => assignDefined(level, "pStyle", attributeValue(child)),
212
+ isLgl: (child, level) => assignDefined(level, "isLgl", parseBooleanElement(child)),
213
+ suff: (child, level) => assignDefined(level, "suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
214
+ lvlText: (child, level) => {
215
+ assignDefined(level, "lvlText", attributeValue(child) ?? "");
216
+ const isNull = parseOnOffAttribute(child, "w", "null");
217
+ if (isNull !== void 0) level.lvlTextNull = isNull;
218
+ },
219
+ lvlPicBulletId: (child, level) => assignDefined(level, "lvlPicBulletId", integerValue(child)),
220
+ legacy: (child, level) => assignDefined(level, "legacy", legacyOf(child)),
221
+ lvlJc: (child, level) => assignDefined(level, "lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
222
+ pPr: (child, level) => assignDefined(level, "pPr", parseParagraphProperties(child, null) ?? {}),
223
+ rPr: (child, level) => assignDefined(level, "rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
224
+ };
225
+ /**
226
+ * `mc:AlternateContent` around a custom `w:numFmt` is read for its format by
227
+ * {@link parseListLevel}, and the writer re-emits that format as the level's
228
+ * own `w:numFmt`, so the walk takes it without a capture.
229
+ */
230
+ const LIST_LEVEL_UNDECLARED = { AlternateContent: () => void 0 };
185
231
  /**
186
232
  * Parse a single w:lvl element (list level definition)
187
233
  */
@@ -194,37 +240,13 @@ function parseListLevel(element) {
194
240
  lvlText: ""
195
241
  };
196
242
  const alternateEl = findChild(element, "mc", "AlternateContent");
197
- const read = (key, value) => {
198
- if (value === void 0) return;
199
- level[key] = value;
200
- };
201
- const preserved = dispatchChildren({
243
+ const preserved = dispatchChildrenWithContext({
202
244
  element,
203
245
  container: "w:lvl",
204
246
  capturePosition: sequencePositions("w:lvl", element),
205
- handlers: {
206
- start: (child) => read("start", integerValue(child)),
207
- numFmt: (child) => {
208
- const resolved = resolveNumFmt(child);
209
- if (resolved === null) return CAPTURE;
210
- Object.assign(level, resolved);
211
- },
212
- lvlRestart: (child) => read("lvlRestart", integerValue(child)),
213
- pStyle: (child) => read("pStyle", attributeValue(child)),
214
- isLgl: (child) => read("isLgl", parseBooleanElement(child)),
215
- suff: (child) => read("suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
216
- lvlText: (child) => {
217
- read("lvlText", attributeValue(child) ?? "");
218
- const isNull = parseOnOffAttribute(child, "w", "null");
219
- if (isNull !== void 0) level.lvlTextNull = isNull;
220
- },
221
- lvlPicBulletId: (child) => read("lvlPicBulletId", integerValue(child)),
222
- legacy: (child) => read("legacy", legacyOf(child)),
223
- lvlJc: (child) => read("lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
224
- pPr: (child) => read("pPr", parseParagraphProperties(child, null) ?? {}),
225
- rPr: (child) => read("rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
226
- },
227
- undeclared: { AlternateContent: () => void 0 }
247
+ handlers: LIST_LEVEL_HANDLERS,
248
+ undeclared: LIST_LEVEL_UNDECLARED,
249
+ context: level
228
250
  });
229
251
  if (preserved !== void 0) level.preserved = preserved;
230
252
  const preservedAttributes = attributeRemainder({
@@ -340,7 +362,8 @@ const markerFormattingFromLevel = (formatting) => {
340
362
  ...formatting.italic !== void 0 ? { italic: formatting.italic } : {},
341
363
  ...formatting.italicCs !== void 0 ? { italicCs: formatting.italicCs } : {},
342
364
  ...formatting.rtl !== void 0 ? { rtl: formatting.rtl } : {},
343
- ...formatting.cs !== void 0 ? { cs: formatting.cs } : {}
365
+ ...formatting.cs !== void 0 ? { cs: formatting.cs } : {},
366
+ ...formatting.color !== void 0 ? { color: formatting.color } : {}
344
367
  };
345
368
  return Object.keys(markerFormatting).length > 0 ? markerFormatting : void 0;
346
369
  };
@@ -450,6 +473,7 @@ function computeListRendering(numPr, numbering) {
450
473
  if (level.rPr?.hidden) rendering.markerHidden = true;
451
474
  const markerFormatting = markerFormattingFromLevel(level.rPr);
452
475
  if (markerFormatting) rendering.markerFormatting = markerFormatting;
476
+ if (level.pPr?.tabs?.length) rendering.levelTabs = level.pPr.tabs;
453
477
  if (level.rPr?.allCaps) rendering.markerAllCaps = true;
454
478
  const markerAlignment = markerAlignmentForLevel(level.lvlJc);
455
479
  if (markerAlignment !== void 0) rendering.markerAlignment = markerAlignment;
@@ -1,12 +1,15 @@
1
1
  import { document_d_exports } from "../types/document.js";
2
2
  import { NumberingMap } from "./numberingParser.js";
3
3
  import { XmlElement } from "./xmlParser.js";
4
+ import { PreviewLedger } from "./previewBudget.js";
4
5
  import { StyleMap } from "./styleParser.js";
5
6
  //#region src/docx/paragraphParser.d.ts
6
7
  declare function parseParagraphPropertyChanges(pPr: XmlElement | null, theme: document_d_exports.Theme | null, currentFormatting: document_d_exports.ParagraphFormatting | undefined): document_d_exports.ParagraphPropertyChange[] | undefined;
7
8
  type ParseParagraphOptions = {
8
9
  inHeaderFooter?: boolean;
9
10
  rootXmlns?: Record<string, string>;
11
+ /** The ledger of the package this paragraph belongs to. */
12
+ previews: PreviewLedger;
10
13
  /** Delay run merging until a source-position-dependent enrichment pass completes. */
11
14
  runConsolidation?: "immediate" | "deferred";
12
15
  };
@@ -19,7 +22,8 @@ type ParseParagraphOptions = {
19
22
  * @param numbering - Numbering definitions for list info
20
23
  * @param rels - Relationship map for resolving hyperlink URLs
21
24
  * @param media - Media files map for image data
22
- * @param options - Parsing options for context-specific body behavior
25
+ * @param options - Parsing options for context-specific body behavior; a
26
+ * paragraph read without them charges its previews to no package
23
27
  * @returns Parsed Paragraph object
24
28
  */
25
29
  declare function parseParagraph(node: XmlElement, styles: StyleMap | null, theme: document_d_exports.Theme | null, numbering: NumberingMap | null, rels?: document_d_exports.RelationshipMap | null, media?: Map<string, document_d_exports.MediaFile> | null, options?: ParseParagraphOptions): document_d_exports.Paragraph;