Releases: superdoc-dev/superdoc
v1.40.0-next.3
1.40.0-next.3 (2026-06-06)
Bug Fixes
v1.40.0-next.2
1.40.0-next.2 (2026-06-06)
Features
- font-system: attach docfonts verdict evidence to font reports (e101be3)
v1.40.0-next.1
1.40.0-next.1 (2026-06-06)
Bug Fixes
- align layout column expectation (6530315)
- super-editor: keep caret after replacing break-only list content (SD-3278) (480ea20)
- super-editor: preserve generated line breaks in DOCX export (SD-3278) (a58352c)
- super-editor: require PM-contiguity when coalescing search ranges (SD-3278) (f9a7b8e)
- superdoc: blocker round for zoom modes from review (SD-3294) (d643fb9)
- superdoc: key viewport-change dedup on fit, not raw available width (SD-3294) (96ab4f8)
- superdoc: land the always-latest metrics store the prior message described (SD-3294) (f260c69)
- superdoc: wait for layout ready before capturing base document width (f168de5)
- ui: zoom hygiene for mode-only emissions (SD-3294) (34077b0)
Features
- superdoc: add layout-change event for responsive fit-to-container zoom (7bad8f0)
- superdoc: observable zoom-mode transitions and format-aware viewport metrics (SD-3294) (6472895)
- superdoc: zoom modes with viewport metrics and fit-width (SD-3294) (f174110)
- ui: zoom domain, useSuperDocZoom, and zoom-fit-width command (SD-3294) (74d41d5)
vscode-v2.11.0
What's New
Fonts API for custom registration and per-document mapping
superdoc.fonts.add({ family, weight, style }, url)registers custom fonts and awaits them before layoutsuperdoc.fonts.map({ 'Calibri': 'Carlito', ... })maps logical families per editor — custom substitutes override bundled defaultssuperdoc.fonts.preload(['Georgia', ...])loads families before measurementsuperdoc.fonts.getReport(),getMissingFonts(),getDocumentFonts()surface font diagnostics- Font changes emit
fonts-changedevents with load status and resolution reasons
Bundled font substitutes for common Word families
- Calibri, Cambria, Arial, Times New Roman, Courier New load metric-compatible open substitutes (Carlito, Liberation Sans, Liberation Serif, Liberation Mono) — no configuration required
- Helvetica aliases to bundled Liberation Sans
- All substitutes load before measurement — rendering is deterministic, no late-load reflow
Structural tracked changes for tables
- Import whole-table insert/delete as single tracked-change item (not per-row)
- Render visually — inserted tables green, deleted tables struck-through with red rows
- Cell text inside tracked table subsumed into structural change — one review bubble, one decision
- Accept cascades: accepting inserted table accepts contained cell text; rejecting removes whole table
- Right-rail bubble labels "Added table" / "Deleted table"
PAGEREF field resolution to live target page numbers
- Resolve PAGEREF instructions to display number, format (numeric picture, general format), and relative position (
\p→ "on page N", "above", "below") - Preserve instruction tokens and CHARFORMAT properties for export round-trip
- Render in document body with live re-resolution on pagination change
SEQ sequence field support
- Import and export SEQ field instructions with numbering, restart, and hidden-field state
- Resolve in layout using shared evaluator: counter tracking, heading-level serials, explicit restart precedence
- Field discovery reads resolvedNumber; export emits current evaluated results
- Preserve raw instructions for lossless round-trip
NUMPAGES field formatting with numeric pictures and ordinal
- Parse
\# "0"(numeric picture) and\* Ordinalformat switches on insert and import - Format total page count as "1", "I", "1st" per field switch
- Applied to both inserted and refreshed fields
- Preserve instructions on import for export parity
PAGE field formatting with numeric pictures
- Parse
\# "0"(numeric pictures) and\*general-format switches (Arabic, Roman, Alphabetic, ArabicDash) - Format page numbers per field — "1", "i", "A", "1-" — independent of section numbering format
- Preserve instructions on import; export round-trips back to same field code
SECTIONPAGES field support
- Resolve SECTIONPAGES field to section-aware page count with section-level numbering awareness
Document background
- Import and render document-level background image positioned behind all body content
Nested content controls
- Import nested block SDTs (SDT inside paragraph) and nested inline SDTs (SDT inside run)
- Preserve structure through export
Templates can be applied to documents
doc.template.apply(templateDoc)applies formatting, styles, and structure from template to active document
Author colors for tracked changes
- Per-author tracked change highlights in track-changes UI
Improvements
Multi-column sections now render with explicit per-column widths and gaps
- Authored column widths preserved — no scaling to fit content area
- Per-column gaps (w:col/@w:space) drive separator positions, not uniform section gap
- Footnote assignment and positioning use per-column geometry
- Column hit-testing honors per-column boundaries, not uniform stride
- Separators position at resolved geometry
Footnote pagination matches Word's behavior
- Ordered-cluster rule — first N-1 anchors on a page render fully, only Nth may split across pages
- Body paginator reserves minStart (first-line height) for each new anchor, allowing tight packing
- Continuation pages reserve only remaining space after cluster obligation
- One-line widows absorbed by bumping reserve when eliminates a split
- Footnote numbering honors per-section w:footnotePr/@numFmt, @numStart, and eachSect restart
- Custom-mark footnotes (customMarkFollows) no longer consume an ordinal
- Marker is plain superscript with space gap before body text
Tracked change rendering
- Inserted table rows paint green, deleted rows paint struck-through red
- Right-rail bubble for structural table changes
- Inline changes inside tracked table suppressed (structural bubble only)
Table border and shading fidelity
- Collapsed shared edges resolve per ECMA-376 §17.4.66 — greater weight wins, style precedence breaks ties
- Explicit nil borders suppress dividers (both adjacent cells nil = no line)
- Cell shading — pct/auto patterns resolve to Word-matching blend colors
- Row-level tblPrEx borders merged and rendered once per edge
- Rowspan continuation rows no longer double interior lines
- Keep-next paragraphs before tables reserve only first row height (table splits normally)
Header/footer refs inherit across multiple sections
- Walk back to nearest prior section defining first/even/default variant (not just immediately prior)
- first and even no longer fall back to default per OOXML §17.10.1
- Preserve section fallback refs in section resolver
Field-annotation pills resolve fonts per document
- Pills measure and paint through document's font resolver
- Custom substitutes and bundled clones apply to field content
- Underline rendering matches adjacent text
Anchored tables reposition with per-wrap padding
- Apply correct offset based on wrap value (square, tight, through)
Underlined tabs render flush with text underline
- Tab underline anchor aligns to line-box top and ends at baseline offset
- Measured ascent/descent from tab font drives line height
- One merged overlay for text and tab underlines, consistent weight throughout
Fixes
- Image resize in suggesting mode no longer duplicates (uses AttrStep, preserves track-changes state)
- Tracked deletion coalescing in suggesting mode — adjacent Backspace batches into single change
- Multi-column sections with explicit equal widths now balance correctly (only skip genuinely-unequal widths)
- Per-column w:space honored for unequal columns per ECMA-376 §17.6.4
- Hit-testing resolves mid-page column region — column boundaries correct when section breaks change columns mid-page
- Explicit column layout idempotence — per-column gaps preserved through resolveColumnLayout
- Table hit-testing uses region column count, not page-start count
- Cell border conflict resolution respects explicit nil borders on both sides of shared edges
- Rowspan continuation rows include spanning cells in measure, preventing doubled interior lines
- Nested tracked-change decisions resolve structural changes on shared revision ids
- Nested content controls import and export without data loss
- Empty text runs skip flow accounting, preventing phantom spaces and height inflation
- Field keyword dispatch case-insensitive (lowercase PAGE/NUMPAGES now work in headers/footers)
- SEQ field result caching preserves lowercase seq fields and cached numbers nested inside runs
- Continuation separators and dividers correctly sized per ECMA-376 (standard ≈ 0.5× width, continuation ≈ full width)
- Font embedding policy gated on embedding check; malformed embeds skip instead of aborting
- Provider precedence: registered real face > bundled substitute > as-requested
- Quoted primary family normalized through resolution, collapsing distinct signatures
- Header/footer display numbers for odd/even parity respect per-section numbering restarts and offsets
- Section inheritance walks back across all prior sections, not just immediately preceding
- Legacy header/footer refs preserved through adapter, not exposed through resolution
- Page field format switches case-insensitive and preserve internal whitespace in quoted numeric pictures
- TOC updates followed by F9 preserve SEQ position shifts
- Comment resolution on whole-thread level with batch processing (dangling comments after resolve fixed)
- Nested replacement tracked-change decisions handle replacement boundaries correctly
vscode-v2.12.0-next.3
2.12.0-next.3 (2026-06-06)
Bug Fixes
vscode-v2.12.0-next.2
2.12.0-next.2 (2026-06-06)
Features
- font-system: attach docfonts verdict evidence to font reports (e101be3)
vscode-v2.12.0-next.1
2.12.0-next.1 (2026-06-06)
Bug Fixes
- align layout column expectation (6530315)
- super-editor: keep caret after replacing break-only list content (SD-3278) (480ea20)
- super-editor: preserve generated line breaks in DOCX export (SD-3278) (a58352c)
- super-editor: require PM-contiguity when coalescing search ranges (SD-3278) (f9a7b8e)
- superdoc: blocker round for zoom modes from review (SD-3294) (d643fb9)
- superdoc: key viewport-change dedup on fit, not raw available width (SD-3294) (96ab4f8)
- superdoc: land the always-latest metrics store the prior message described (SD-3294) (f260c69)
- superdoc: wait for layout ready before capturing base document width (f168de5)
- ui: zoom hygiene for mode-only emissions (SD-3294) (34077b0)
Features
- superdoc: add layout-change event for responsive fit-to-container zoom (7bad8f0)
- superdoc: observable zoom-mode transitions and format-aware viewport metrics (SD-3294) (6472895)
- superdoc: zoom modes with viewport metrics and fit-width (SD-3294) (f174110)
- ui: zoom domain, useSuperDocZoom, and zoom-fit-width command (SD-3294) (74d41d5)
sdk-v1.16.0-next.3
1.16.0-next.3 (2026-06-06)
Bug Fixes
sdk-v1.16.0-next.2
1.16.0-next.2 (2026-06-06)
Features
- font-system: attach docfonts verdict evidence to font reports (e101be3)
sdk-v1.16.0-next.1
1.16.0-next.1 (2026-06-06)
Bug Fixes
- align layout column expectation (6530315)
- super-editor: keep caret after replacing break-only list content (SD-3278) (480ea20)
- super-editor: preserve generated line breaks in DOCX export (SD-3278) (a58352c)
- super-editor: require PM-contiguity when coalescing search ranges (SD-3278) (f9a7b8e)
- superdoc: blocker round for zoom modes from review (SD-3294) (d643fb9)
- superdoc: key viewport-change dedup on fit, not raw available width (SD-3294) (96ab4f8)
- superdoc: land the always-latest metrics store the prior message described (SD-3294) (f260c69)
- superdoc: wait for layout ready before capturing base document width (f168de5)
- ui: zoom hygiene for mode-only emissions (SD-3294) (34077b0)
Features
- superdoc: add layout-change event for responsive fit-to-container zoom (7bad8f0)
- superdoc: observable zoom-mode transitions and format-aware viewport metrics (SD-3294) (6472895)
- superdoc: zoom modes with viewport metrics and fit-width (SD-3294) (f174110)
- ui: zoom domain, useSuperDocZoom, and zoom-fit-width command (SD-3294) (74d41d5)