@beyondwork/docx-react-component 1.0.102 → 1.0.103

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 (33) hide show
  1. package/package.json +1 -1
  2. package/src/core/commands/formatting-commands.ts +8 -7
  3. package/src/core/commands/paragraph-layout-commands.ts +11 -10
  4. package/src/core/commands/section-layout-commands.ts +7 -6
  5. package/src/core/commands/style-commands.ts +3 -2
  6. package/src/io/normalize/normalize-text.ts +6 -5
  7. package/src/io/ooxml/parse-anchor.ts +15 -15
  8. package/src/io/ooxml/parse-drawing.ts +5 -5
  9. package/src/io/ooxml/parse-fields.ts +16 -15
  10. package/src/io/ooxml/parse-font-table.ts +2 -1
  11. package/src/io/ooxml/parse-footnotes.ts +3 -2
  12. package/src/io/ooxml/parse-headers-footers.ts +7 -6
  13. package/src/io/ooxml/parse-main-document.ts +41 -40
  14. package/src/io/ooxml/parse-numbering.ts +3 -2
  15. package/src/io/ooxml/parse-object.ts +6 -6
  16. package/src/io/ooxml/parse-paragraph-formatting.ts +12 -11
  17. package/src/io/ooxml/parse-picture.ts +16 -16
  18. package/src/io/ooxml/parse-run-formatting.ts +11 -10
  19. package/src/io/ooxml/parse-settings.ts +2 -1
  20. package/src/io/ooxml/parse-shapes.ts +18 -17
  21. package/src/io/ooxml/parse-styles.ts +16 -16
  22. package/src/io/ooxml/parse-theme.ts +5 -4
  23. package/src/model/canonical-document.ts +835 -833
  24. package/src/runtime/formatting/document-lookup.ts +3 -2
  25. package/src/runtime/formatting/formatting-context.ts +66 -25
  26. package/src/runtime/formatting/index.ts +18 -0
  27. package/src/runtime/formatting/layout-inputs.ts +256 -0
  28. package/src/runtime/formatting/numbering/geometry.ts +13 -12
  29. package/src/runtime/formatting/style-cascade.ts +2 -1
  30. package/src/runtime/formatting/table-style-resolver.ts +8 -7
  31. package/src/runtime/surface-projection.ts +31 -36
  32. package/src/session/import/normalize.ts +2 -1
  33. package/src/session/import/source-package-evidence.ts +612 -1
@@ -41,6 +41,7 @@ import type {
41
41
  ShapeContent,
42
42
  VmlShapeNode,
43
43
  WordArtNode,
44
+ Mutable,
44
45
  } from "../model/canonical-document.ts";
45
46
  import {
46
47
  describeOpaqueFragment,
@@ -575,7 +576,7 @@ function createSurfaceBlock(
575
576
 
576
577
  function createTableBlock(
577
578
  tableIndex: number,
578
- table: TableNode,
579
+ table: Mutable<TableNode>,
579
580
  document: CanonicalDocumentEnvelope,
580
581
  cursor: number,
581
582
  counters: {
@@ -769,7 +770,7 @@ function createTableBlock(
769
770
  };
770
771
  }
771
772
 
772
- function computeTableRowSpans(table: TableNode): Map<string, number> {
773
+ function computeTableRowSpans(table: Mutable<TableNode>): Map<string, number> {
773
774
  const positionedRows = table.rows.map((row) => {
774
775
  let startColumn = 0;
775
776
 
@@ -933,7 +934,7 @@ function toSurfaceFrameProperties(
933
934
  }
934
935
 
935
936
  function resolveSurfaceParagraphFormatting(
936
- formatting: CanonicalParagraphFormatting,
937
+ formatting: Mutable<CanonicalParagraphFormatting>,
937
938
  themeResolver: ThemeColorResolver | undefined,
938
939
  ): CanonicalParagraphFormatting {
939
940
  if (!formatting.shading) {
@@ -1065,7 +1066,7 @@ function resolveCellBorderStyles(
1065
1066
 
1066
1067
  function createSdtBlock(
1067
1068
  sdtIndex: number,
1068
- block: SdtNode,
1069
+ block: Mutable<SdtNode>,
1069
1070
  document: CanonicalDocumentEnvelope,
1070
1071
  cursor: number,
1071
1072
  counters: {
@@ -1123,7 +1124,7 @@ function createSdtBlock(
1123
1124
 
1124
1125
  function createParagraphBlock(
1125
1126
  paragraphIndex: number,
1126
- paragraph: ParagraphNode,
1127
+ paragraph: Mutable<ParagraphNode>,
1127
1128
  document: CanonicalDocumentEnvelope,
1128
1129
  start: number,
1129
1130
  formattingContext: FormattingContext,
@@ -1757,13 +1758,7 @@ function appendInlineSegments(
1757
1758
  const fieldLabel =
1758
1759
  node.fieldFamily === "TOC"
1759
1760
  ? "Table of Contents"
1760
- : node.fieldFamily === "PAGE"
1761
- ? "Current page number"
1762
- : node.fieldFamily === "NUMPAGES"
1763
- ? "Total pages"
1764
- : node.fieldFamily === "SECTIONPAGES"
1765
- ? "Section pages"
1766
- : `${node.fieldFamily ?? "Field"}: ${node.fieldTarget ?? node.instruction.trim()}`;
1761
+ : `${node.fieldFamily ?? "Field"}: ${node.fieldTarget ?? node.instruction.trim()}`;
1767
1762
  paragraph.segments.push({
1768
1763
  segmentId: `${paragraph.blockId}-segment-${paragraph.segments.length}`,
1769
1764
  kind: "field_ref",
@@ -1804,7 +1799,7 @@ function appendInlineSegments(
1804
1799
  }
1805
1800
 
1806
1801
  function registerParsedChartPreview(
1807
- node: ChartPreviewNode,
1802
+ node: Mutable<ChartPreviewNode>,
1808
1803
  document: CanonicalDocumentEnvelope,
1809
1804
  ): string | undefined {
1810
1805
  if (!node.parsedData) return undefined;
@@ -1946,7 +1941,7 @@ function surfaceAnchorFromGeometry(
1946
1941
  * fast-path image rendering.
1947
1942
  */
1948
1943
  function surfacePictureEffectsFromContent(
1949
- content: PictureContent,
1944
+ content: Mutable<PictureContent>,
1950
1945
  themeResolver?: ThemeColorResolver,
1951
1946
  ): SurfacePictureEffects | undefined {
1952
1947
  const outerShadow = resolveSurfacePictureShadow(content.outerShadow, themeResolver);
@@ -2159,7 +2154,7 @@ function appendTextBoxSegment(
2159
2154
  return { nextCursor: start + 1, lockedFragmentIds: [] };
2160
2155
  }
2161
2156
 
2162
- function shouldRenderSecondaryStoryVmlTextBox(node: VmlShapeNode): boolean {
2157
+ function shouldRenderSecondaryStoryVmlTextBox(node: Mutable<VmlShapeNode>): boolean {
2163
2158
  return Boolean(node.text) && (!node.shapeType || /_x0000_t202$/iu.test(node.shapeType));
2164
2159
  }
2165
2160
 
@@ -2174,7 +2169,7 @@ function isMicrosoftSensitivityLabelShape(
2174
2169
  /"Placement"\s*:\s*"Footer"/iu.test(node.rawXml);
2175
2170
  }
2176
2171
 
2177
- function createChartDetail(node: ChartPreviewNode): string {
2172
+ function createChartDetail(node: Mutable<ChartPreviewNode>): string {
2178
2173
  const parts = ["Embedded chart."];
2179
2174
  if (node.previewMediaId) {
2180
2175
  parts.push(`Preview available via fallback image (${node.previewMediaId}).`);
@@ -2185,7 +2180,7 @@ function createChartDetail(node: ChartPreviewNode): string {
2185
2180
  return parts.join(" ");
2186
2181
  }
2187
2182
 
2188
- function createSmartArtDetail(node: SmartArtPreviewNode): string {
2183
+ function createSmartArtDetail(node: Mutable<SmartArtPreviewNode>): string {
2189
2184
  const parts = ["SmartArt diagram."];
2190
2185
  if (node.previewMediaId) {
2191
2186
  parts.push(`Preview available via fallback image (${node.previewMediaId}).`);
@@ -2196,7 +2191,7 @@ function createSmartArtDetail(node: SmartArtPreviewNode): string {
2196
2191
  return parts.join(" ");
2197
2192
  }
2198
2193
 
2199
- function createShapeDetail(node: ShapeNode): string {
2194
+ function createShapeDetail(node: Mutable<ShapeNode>): string {
2200
2195
  if (node.isTextBox) {
2201
2196
  const parts = ["Text box."];
2202
2197
  if (node.text) parts.push(`Content: "${node.text}".`);
@@ -2210,7 +2205,7 @@ function createShapeDetail(node: ShapeNode): string {
2210
2205
  return parts.join(" ");
2211
2206
  }
2212
2207
 
2213
- function createWordArtDetail(node: WordArtNode): string {
2208
+ function createWordArtDetail(node: Mutable<WordArtNode>): string {
2214
2209
  const parts = ["WordArt decorative text."];
2215
2210
  if (node.text) parts.push(`Text: "${node.text}".`);
2216
2211
  if (node.geometry) parts.push(`Effect: ${node.geometry}.`);
@@ -2218,7 +2213,7 @@ function createWordArtDetail(node: WordArtNode): string {
2218
2213
  return parts.join(" ");
2219
2214
  }
2220
2215
 
2221
- function createVmlDetail(node: VmlShapeNode): string {
2216
+ function createVmlDetail(node: Mutable<VmlShapeNode>): string {
2222
2217
  const parts = ["Legacy VML drawing."];
2223
2218
  if (node.shapeType) parts.push(`Type: ${node.shapeType}.`);
2224
2219
  if (node.text) parts.push(`Text content: "${node.text}".`);
@@ -2587,22 +2582,22 @@ function toSurfaceTabStop(
2587
2582
  }
2588
2583
 
2589
2584
  function buildDirectParagraphFormattingFromNode(
2590
- paragraph: ParagraphNode,
2585
+ paragraph: Mutable<ParagraphNode>,
2591
2586
  ): CanonicalParagraphFormatting | undefined {
2592
- const direct: CanonicalParagraphFormatting = {};
2593
- if (paragraph.spacing) direct.spacing = paragraph.spacing;
2594
- if (paragraph.indentation) direct.indentation = paragraph.indentation;
2595
- if (paragraph.alignment) direct.alignment = paragraph.alignment;
2596
- if (paragraph.borders) direct.borders = paragraph.borders;
2597
- if (paragraph.shading) direct.shading = paragraph.shading;
2598
- if (paragraph.tabStops && paragraph.tabStops.length > 0) direct.tabStops = [...paragraph.tabStops];
2599
- if (paragraph.contextualSpacing !== undefined) direct.contextualSpacing = paragraph.contextualSpacing;
2600
- if (paragraph.keepNext !== undefined) direct.keepNext = paragraph.keepNext;
2601
- if (paragraph.keepLines !== undefined) direct.keepLines = paragraph.keepLines;
2602
- if (paragraph.widowControl !== undefined) direct.widowControl = paragraph.widowControl;
2603
- if (paragraph.pageBreakBefore !== undefined) direct.pageBreakBefore = paragraph.pageBreakBefore;
2604
- if (paragraph.outlineLevel !== undefined) direct.outlineLevel = paragraph.outlineLevel;
2605
- if (paragraph.bidi !== undefined) direct.bidi = paragraph.bidi;
2587
+ const direct: Mutable<CanonicalParagraphFormatting> = {};
2588
+ if (paragraph.spacing) (direct as Mutable<typeof direct>).spacing = paragraph.spacing;
2589
+ if (paragraph.indentation) (direct as Mutable<typeof direct>).indentation = paragraph.indentation;
2590
+ if (paragraph.alignment) (direct as Mutable<typeof direct>).alignment = paragraph.alignment;
2591
+ if (paragraph.borders) (direct as Mutable<typeof direct>).borders = paragraph.borders;
2592
+ if (paragraph.shading) (direct as Mutable<typeof direct>).shading = paragraph.shading;
2593
+ if (paragraph.tabStops && paragraph.tabStops.length > 0) (direct as Mutable<typeof direct>).tabStops = [...paragraph.tabStops];
2594
+ if (paragraph.contextualSpacing !== undefined) (direct as Mutable<typeof direct>).contextualSpacing = paragraph.contextualSpacing;
2595
+ if (paragraph.keepNext !== undefined) (direct as Mutable<typeof direct>).keepNext = paragraph.keepNext;
2596
+ if (paragraph.keepLines !== undefined) (direct as Mutable<typeof direct>).keepLines = paragraph.keepLines;
2597
+ if (paragraph.widowControl !== undefined) (direct as Mutable<typeof direct>).widowControl = paragraph.widowControl;
2598
+ if (paragraph.pageBreakBefore !== undefined) (direct as Mutable<typeof direct>).pageBreakBefore = paragraph.pageBreakBefore;
2599
+ if (paragraph.outlineLevel !== undefined) (direct as Mutable<typeof direct>).outlineLevel = paragraph.outlineLevel;
2600
+ if (paragraph.bidi !== undefined) (direct as Mutable<typeof direct>).bidi = paragraph.bidi;
2606
2601
  if (paragraph.suppressLineNumbers !== undefined) direct.suppressLineNumbers = paragraph.suppressLineNumbers;
2607
2602
  return Object.keys(direct).length > 0 ? direct : undefined;
2608
2603
  }
@@ -2947,7 +2942,7 @@ function createFloatingImageDetail(
2947
2942
  return parts.join(" ");
2948
2943
  }
2949
2944
 
2950
- function hasMediaItem(media: MediaCatalog, mediaId: string): boolean {
2945
+ function hasMediaItem(media: Mutable<MediaCatalog>, mediaId: string): boolean {
2951
2946
  return mediaId in media.items;
2952
2947
  }
2953
2948
 
@@ -22,6 +22,7 @@ import type {
22
22
  CanonicalDocument,
23
23
  FootnoteCollection,
24
24
  OpaqueFragmentRecord,
25
+ Mutable,
25
26
  } from "../../model/canonical-document.ts";
26
27
 
27
28
  /** Warning shape carried on `CanonicalDocument.diagnostics.warnings`. */
@@ -130,7 +131,7 @@ export function normalizeFootnoteCollectionOpaqueBlocks(
130
131
  if (!collection) return;
131
132
  const notes = kind === "footnote" ? collection.footnotes : collection.endnotes;
132
133
  for (const definition of Object.values(notes)) {
133
- definition.blocks = normalizeSubPartOpaqueBlocks(
134
+ (definition as Mutable<typeof definition>).blocks = normalizeSubPartOpaqueBlocks(
134
135
  definition.blocks,
135
136
  opaqueFragments,
136
137
  warnings,