docx-editor 1.x has shipped. Vue support, i18n, agents.

Migration guide →

Releases

docx-editor-vuev1.5.0LatestJune 13, 2026

Minor Changes

  • 19a25eb: Add scrollToCommentId, scrollToChangeId, and highlightRange methods to DocxEditorRef on both the React and Vue adapters, for revealing a location in the editor. Each scrolls the comment, tracked change, or position range into view and selects it so the selection overlay highlights the spot. scrollToCommentId and scrollToChangeId return false when the id no longer resolves, so callers can surface a "location no longer exists" affordance instead of silently doing nothing.

Patch Changes

  • ab38192: Support clickable inline Word checkbox content controls

  • 37f79ad: Fix the Vue image selection frame being shifted right (misaligned) on platforms with classic scrollbars. The overlay now accounts for the inline-start scrollbar gutter reserved by scrollbar-gutter: stable both-edges.

  • 5cdfa5c: Vue: fix the image selection frame appearing shifted off the image. Selecting an image right after a document loads measured the frame one frame before the page finished re-centering, stranding it to the side; the overlay now re-anchors across the layout settle (and across zoom transitions) so the frame keeps wrapping the image tightly. It also re-anchors when the comments sidebar slides the page sideways while an image stays selected, which previously left the frame stranded to the side until the next scroll.

    Fixes #764

  • 5cdfa5c: Vue: insert images directly from Insert > Image like React — the OS file picker opens and the image is placed inline, fitted to the page width, with no intermediate dialog. This also fixes a tall empty gap that appeared below an inserted image wider than the page column. The read-file-fit-and-insert flow now lives in core (insertImageFromFile), so React and Vue share one code path and behave identically.

  • d090d08: Fix Vue: replying to a tracked change now threads the reply under that suggestion instead of creating a top-level comment, and the sidebar re-stacks cards when one expands so an expanded card no longer overlaps the next. Fixes #773.

  • Updated dependencies [7d02ec1]

  • Updated dependencies [04130ef]

  • Updated dependencies [ab38192]

  • Updated dependencies [5cdfa5c]

  • Updated dependencies [335ad6c]

  • Updated dependencies [c5a4b1e]

  • Updated dependencies [c4fd221]

  • Updated dependencies [ca005c5]

  • Updated dependencies [7d6daeb]

  • Updated dependencies [5cdfa5c]

  • Updated dependencies [44161e5]

docx-editor-reactv1.5.0June 13, 2026

Minor Changes

  • 19a25eb: Add scrollToCommentId, scrollToChangeId, and highlightRange methods to DocxEditorRef on both the React and Vue adapters, for revealing a location in the editor. Each scrolls the comment, tracked change, or position range into view and selects it so the selection overlay highlights the spot. scrollToCommentId and scrollToChangeId return false when the id no longer resolves, so callers can surface a "location no longer exists" affordance instead of silently doing nothing.

Patch Changes

  • ab38192: Support clickable inline Word checkbox content controls
  • ca275f9: Fix the document outline toggle rendering above the title bar File menu. The outline button now uses the shared Z_INDEX.outline layer (40) instead of 50, and the toolbar shell is raised to Z_INDEX.toolbar (100) so title-bar dropdowns stay on top. Vue parity: outline toggle at 40, toolbar shell at 100.
  • Updated dependencies [7d02ec1]
  • Updated dependencies [04130ef]
  • Updated dependencies [ab38192]
  • Updated dependencies [5cdfa5c]
  • Updated dependencies [335ad6c]
  • Updated dependencies [c5a4b1e]
  • Updated dependencies [c4fd221]
  • Updated dependencies [ca005c5]
  • Updated dependencies [7d6daeb]
  • Updated dependencies [5cdfa5c]
  • Updated dependencies [44161e5]
docx-editor-i18nv1.5.0June 13, 2026
docx-editor-corev1.5.0June 13, 2026

Minor Changes

  • 44161e5: Vue: enable drag-to-select table cells, matching React. Dragging across cell boundaries now produces a cell selection, so multi-cell operations (delete row/column across a range, fill, merge) are reachable by dragging. The cell-drag logic is shared between React and Vue in core.

Patch Changes

  • 7d02ec1: Fix the text cursor landing on the wrong page when a table cell's content spans a page break. The caret now follows the cell content onto the continuation page instead of staying on the previous page.
  • 04130ef: Fix "Delete row" so it removes every row a multi-cell selection spans, not just the anchor row. Selecting all rows now deletes the whole table, matching Word.
  • ab38192: Support clickable inline Word checkbox content controls
  • 5cdfa5c: Fix a tall empty gap appearing below an inline image that is wider than the page column. The painter fits such an image to the column width (scaling its height down), but the line height still reserved the image's unscaled height. The measurement now reserves the rendered (scaled) height, so the image and the following text sit flush. Most visible when inserting a large image in the Vue editor.
  • 335ad6c: Add setGoogleFontsEnabled(false) (from @eigenpal/docx-editor-core or its /utils entry) so strict-CSP / offline embedders can disable the automatic Google Fonts fetching entirely, and skip that fetch automatically when a font already renders locally. Embedded and consumer-hosted (fonts prop) faces keep their metric-compatible Google fallback for glyph coverage.
  • c5a4b1e: Fix inline images overlapping following text when they wrap to their own line, and custom-style list fidelity: zero-padded custom numbering renders as in Word ([0001]), picking a numbered style from the toolbar now attaches its numbering and indents, style-attached numbering keeps the style's indents over the level's, and removing a style's numbering no longer hangs the first line back to the margin. Fixes #765, fixes #766.
  • ca005c5: Fix suggesting mode so pasting over a selection marks the replaced text as a tracked deletion and the pasted text as a tracked insertion, matching the behavior of typing over a selection.
  • 7d6daeb: Fix table column widths not being respected when opening exported documents in Word. Tables with explicit column widths (created in the editor or resized by dragging a column boundary) now export with fixed layout so Word honors the widths instead of autofitting. Also corrects w:tblPr child ordering to match the OOXML schema.
  • 5cdfa5c: Vue: insert images directly from Insert > Image like React — the OS file picker opens and the image is placed inline, fitted to the page width, with no intermediate dialog. This also fixes a tall empty gap that appeared below an inserted image wider than the page column. The read-file-fit-and-insert flow now lives in core (insertImageFromFile), so React and Vue share one code path and behave identically.
docx-editor-agentsv1.5.0June 13, 2026

Minor Changes

  • c4fd221: DocxReviewer can now accept/reject tracked changes inside footnote and endnote bodies. Pass a ReviewChange from getChanges (it carries noteId/noteType) to acceptChange/rejectChange to resolve a change wherever it lives, or use acceptAll/rejectAll with { includeFootnotes, includeEndnotes } to resolve note changes in bulk. The result persists through toBuffer(). Previously these methods operated on the document body only; the numeric acceptChange(id) form is unchanged.
docx-editor-vuev1.4.0June 11, 2026

Minor Changes

  • 1ab8b30: Image resize: drag a corner handle to scale (keeping aspect ratio) or an edge handle to stretch one side (width or height) and deliberately change the aspect ratio. Selection handles are now Word-style white dots. Inserted images keep their aspect ratio — a wide image dropped into a table cell or a narrow column now scales down to fit while staying in proportion, instead of squashing or overflowing the page. Fixes #266.

Patch Changes

  • 3d36236: Fix Vue getDocument() returning paragraphs without their paraIds until the first edit. The host Document cache is now synced with the ids assigned at load (#738), so getDocument() exposes them immediately. Fixes #746.
  • 92690d6: Fix the Vue formatting toolbar not applying to a header or footer while editing it. Bold, italic, font, size, color, paragraph style, and clear-formatting now target the header/footer being edited instead of the document body. Fixes #749.
  • Updated dependencies [28a521a]
  • Updated dependencies [1ab8b30]
docx-editor-reactv1.4.0June 11, 2026

Minor Changes

  • 1ab8b30: Image resize: drag a corner handle to scale (keeping aspect ratio) or an edge handle to stretch one side (width or height) and deliberately change the aspect ratio. Selection handles are now Word-style white dots. Inserted images keep their aspect ratio — a wide image dropped into a table cell or a narrow column now scales down to fit while staying in proportion, instead of squashing or overflowing the page. Fixes #266.

Patch Changes

docx-editor-i18nv1.4.0June 11, 2026
docx-editor-corev1.4.0June 11, 2026

Minor Changes

  • 1ab8b30: Image resize: drag a corner handle to scale (keeping aspect ratio) or an edge handle to stretch one side (width or height) and deliberately change the aspect ratio. Selection handles are now Word-style white dots. Inserted images keep their aspect ratio — a wide image dropped into a table cell or a narrow column now scales down to fit while staying in proportion, instead of squashing or overflowing the page. Fixes #266.

Patch Changes

  • 28a521a: Fix the text caret being as tall as the largest font on a line. The caret now matches the font size at the insertion point (like Word) instead of the whole line box, so clicking into small text on a line that also has large text shows a correctly-sized caret. Affects React and Vue. Fixes #748.
docx-editor-agentsv1.4.0June 11, 2026
docx-editor-vuev1.3.3June 9, 2026

Patch Changes

  • bd704e2: Assign every paragraph a stable id when a document is opened, so block ids and getSelectionInfo().paraId work before the first edit. Previously a document without w14:paraId had null ids until you typed or added a comment. Fixes #738.
  • bf42c14: Fix the Vue editor's text caret disappearing or jumping to the wrong place while typing. The caret/selection overlay now repaints through the layout gate (after the page repaints) instead of synchronously against stale DOM, so the caret stays visible and follows the insertion point. Fixes #736.
  • Updated dependencies [bf748c0]
  • Updated dependencies [15d4f39]
  • Updated dependencies [06fa96b]
  • Updated dependencies [bd704e2]
  • Updated dependencies [30df527]
docx-editor-reactv1.3.3June 9, 2026

Patch Changes

  • bd704e2: Assign every paragraph a stable id when a document is opened, so block ids and getSelectionInfo().paraId work before the first edit. Previously a document without w14:paraId had null ids until you typed or added a comment. Fixes #738.
  • Updated dependencies [bf748c0]
  • Updated dependencies [15d4f39]
  • Updated dependencies [06fa96b]
  • Updated dependencies [bd704e2]
  • Updated dependencies [30df527]
docx-editor-i18nv1.3.3June 9, 2026
docx-editor-corev1.3.3June 9, 2026

Patch Changes

  • bf748c0: Honor an explicit w:header="0" / w:footer="0" (header/footer pinned to the page edge) instead of replacing the 0 distance with the 0.5in default. The wrong default over-reserved the header band and could push content onto an extra page versus Word. Fixes #740.
  • 15d4f39: Fix header content overlapping the body when a header contains a floating text box (e.g. a centered banner). The floating box is now positioned without pushing the in-flow header paragraphs below it — so a centered banner sits beside the surrounding header text and the body no longer overlaps the header on multi-page documents. Inline and top-and-bottom boxes still reserve vertical space.
  • 06fa96b: Fix list-marker alignment when a list paragraph's direct indent has a hanging value larger than its left indent. The marker now hangs into the left margin to align with the surrounding text (matching Word) instead of being clamped to the content edge and shifted right. Fixes #729.
  • bd704e2: Assign every paragraph a stable id when a document is opened, so block ids and getSelectionInfo().paraId work before the first edit. Previously a document without w14:paraId had null ids until you typed or added a comment. Fixes #738.
  • 30df527: Honor an explicit 0 for layout offsets that were previously treated as "unset". A full-bleed page margin (w:pgMar w:top/left="0") no longer snaps to the 1-inch default, and a text-wrapping image pinned flush to the text (w:distL/distR="0") no longer opens a phantom 12px gap. Generalizes the #740 header/footer fix behind a shared nullish helper and a documented size-vs-offset rule, so the falsy-zero trap can't recur.
docx-editor-agentsv1.3.3June 9, 2026
docx-editor-vuev1.3.2June 8, 2026

Patch Changes

  • b05e9cf: Add the author prop to the Vue editor, matching React. Comments and tracked changes created through the UI now use the supplied author name instead of always being attributed to "User". Fixes #720.
  • 1c254e8: Add React-parity callback props to the Vue editor: onChange, onError, onSelectionChange, onEditorViewReady, and the comment lifecycle callbacks onCommentAdd, onCommentResolve, onCommentDelete, onCommentReply, and onCommentsChange. Hosts can now observe document, selection, and comment changes via props alongside the existing Vue events. Part of #720.
  • 6228132: Vue toolbar tooltips and the right-click text context menu now follow the active i18n locale instead of always rendering English. Shortcut-bearing buttons (bold, italic, underline, insert link, super/subscript, image properties) and every context-menu item (cut, copy, paste, delete, select all, table and image actions) route through t().
  • Updated dependencies [3bd7bf7]
  • Updated dependencies [0ded2a1]
  • Updated dependencies [58e3a7e]
docx-editor-reactv1.3.2June 8, 2026

Patch Changes

docx-editor-i18nv1.3.2June 8, 2026
docx-editor-corev1.3.2June 8, 2026

Patch Changes

  • 3bd7bf7: Plain paragraphs that reference a numbering level with numFmt="none" are no longer rendered with a fabricated "1." marker. Word shows these as plain text, so the editor now omits the marker while keeping genuine numbered and bulleted lists intact. Fixes #718.
  • 0ded2a1: Right-to-left paragraphs now render in the correct reading order. A paragraph whose runs are marked right-to-left (w:rtl) but that carries no explicit bidi flag is laid out right-to-left based on its first strong character, so Hebrew and Arabic text no longer reads left-to-right. Alignment and indentation mirror to match. Fixes #719.
  • 58e3a7e: Text highlight colors are restored when a document is reloaded. Custom highlight colors outside Word's named palette are saved as character shading (w:shd); the importer now reads that shading back into the highlight, so the background no longer disappears on reload even though it was always present in the exported file. Fixes #712.
docx-editor-agentsv1.3.2June 8, 2026
docx-editor-vuev1.3.1June 5, 2026

Patch Changes

  • 3fe9c57: Share the layout pipeline across the React and Vue adapters. The Vue editor now renders multi-column section layouts with correct per-section column widths, coalesces a burst of keystrokes into one layout pass per frame, and no longer scrolls the page when you edit. React behavior is unchanged.
  • d100115: Fix blank render on documents whose header contains a page-anchored letterhead. The body now clears the header/footer based on in-flow content only, so anchored shapes and text boxes (which Word positions on the page) no longer push the body off the page. Fixes #705.
  • 66cf3a8: Share the React/Vue editor orchestration through core so both adapters stay in lockstep. Vue gains three behaviors it was missing: multi-cell selection highlighting, drag-to-edge auto-scroll while selecting, and correct comment/tracked-change ID allocation (IDs are no longer reused after a delete and no longer collide across the comment/revision space). Vue selection rectangles now also cover tab stops and hyperlink text. No public API changes.
  • Updated dependencies [3fe9c57]
  • Updated dependencies [d100115]
  • Updated dependencies [db75f4f]
  • Updated dependencies [66cf3a8]
docx-editor-reactv1.3.1June 5, 2026

Patch Changes

  • 3fe9c57: Share the layout pipeline across the React and Vue adapters. The Vue editor now renders multi-column section layouts with correct per-section column widths, coalesces a burst of keystrokes into one layout pass per frame, and no longer scrolls the page when you edit. React behavior is unchanged.
  • d100115: Fix blank render on documents whose header contains a page-anchored letterhead. The body now clears the header/footer based on in-flow content only, so anchored shapes and text boxes (which Word positions on the page) no longer push the body off the page. Fixes #705.
  • 66cf3a8: Share the React/Vue editor orchestration through core so both adapters stay in lockstep. Vue gains three behaviors it was missing: multi-cell selection highlighting, drag-to-edge auto-scroll while selecting, and correct comment/tracked-change ID allocation (IDs are no longer reused after a delete and no longer collide across the comment/revision space). Vue selection rectangles now also cover tab stops and hyperlink text. No public API changes.
  • Updated dependencies [3fe9c57]
  • Updated dependencies [d100115]
  • Updated dependencies [db75f4f]
  • Updated dependencies [66cf3a8]
docx-editor-i18nv1.3.1June 5, 2026
docx-editor-corev1.3.1June 5, 2026

Patch Changes

  • 3fe9c57: Share the layout pipeline across the React and Vue adapters. The Vue editor now renders multi-column section layouts with correct per-section column widths, coalesces a burst of keystrokes into one layout pass per frame, and no longer scrolls the page when you edit. React behavior is unchanged.
  • d100115: Fix blank render on documents whose header contains a page-anchored letterhead. The body now clears the header/footer based on in-flow content only, so anchored shapes and text boxes (which Word positions on the page) no longer push the body off the page. Fixes #705.
  • db75f4f: Fix dense footnote layout so split-paragraph references reserve space on the correct page.
  • 66cf3a8: Share the React/Vue editor orchestration through core so both adapters stay in lockstep. Vue gains three behaviors it was missing: multi-cell selection highlighting, drag-to-edge auto-scroll while selecting, and correct comment/tracked-change ID allocation (IDs are no longer reused after a delete and no longer collide across the comment/revision space). Vue selection rectangles now also cover tab stops and hyperlink text. No public API changes.
docx-editor-agentsv1.3.1June 5, 2026
docx-editor-vuev1.3.0June 4, 2026

Minor Changes

  • 0f3eb97: Add the Insert → Watermark dialog to the Vue editor. The Vue adapter could already render and round-trip watermarks from opened documents; now you can also add, edit, or remove text and picture watermarks from the UI, with the change participating in undo/redo.

Patch Changes

  • 928593b: Vue: show the hyperlink popup when clicking a link in a header or footer. The click handler now resolves against the active header/footer editor (matching the body and React behavior) instead of the body, and no longer ignores links whose URL is empty.

    Fixes #692

  • 6dc5b50: Vue: fix the image selection frame being offset from the image at zoom levels other than 100%. The overlay lives in the unscaled scroll viewport, so it now positions at post-scale pixels and scales its border/handles with the zoom factor, wrapping the image tightly. It also re-anchors when the zoom transition settles.

    Fixes #695

  • 98ae3e5: Vue: fix the text selection highlight and caret drifting away from the text at zoom levels other than 100%. The overlay rects are painted into the scaled pages container, so they are now divided by the zoom factor to land on the selected text.

    Fixes #693

  • 9c8068f: Fix the Vue "Add comment" card overlapping existing comment and tracked-change cards in the sidebar. The add-comment input now flows through the same collision-avoidance pass as every other card, so it claims its slot and neighbouring cards stack below it. Fixes #669

  • cab7424: Fix the Vue header/footer "Remove" button doing nothing. Removing a header or footer now drops the part from the package and strips its section references, so it stops rendering on the page (matching React). Fixes #686

  • f3d6861: Fix text selection not showing in Vue headers and footers. Selecting text while editing a header or footer now paints the highlight (the body overlay was suppressed in HF mode but the HF rects were never drawn), and double/triple-click word and paragraph selection resolves against the header/footer text instead of a body run at the same position. On multi-page documents, the caret and selection now render on the header/footer instance being edited rather than always on page one's copy. Fixes #691

  • 06aea12: Vue: keep the image selection frame on the image when it moves to another page or is resized, instead of stranding it at the old position.

  • 127985a: Fix the Vue horizontal ruler indent handles not tracking the active paragraph. The ruler now reads the selection's left/right/first-line/hanging indents and tab stops (like React) and moves the handles to match. Also stop showing an extra first-line-indent marker at the left margin. Fixes #685

  • Updated dependencies [15966fc]

  • Updated dependencies [2003cec]

  • Updated dependencies [5e51a9b]

  • Updated dependencies [cb5f622]

  • Updated dependencies [1be9cf5]

  • Updated dependencies [5fcca3b]

  • Updated dependencies [f73706e]

  • Updated dependencies [0d5beed]

  • Updated dependencies [5b38696]

  • Updated dependencies [15966fc]

  • Updated dependencies [f3d6861]

  • Updated dependencies [0f3eb97]

  • Updated dependencies [eaa6f7f]

docx-editor-reactv1.3.0June 4, 2026

Patch Changes

  • 0d5beed: Fix long content in a table row getting cut off / hidden instead of flowing across pages. A table cell now measures its stacked paragraphs the way it paints them — collapsing adjacent paragraph before/after spacing (like Word) instead of adding it — so the row's height matches what's rendered and page breaks land on whole lines instead of slicing a line in two. Selecting text across a table that spans a page break no longer scatters selection highlights into the gap between pages, and contextual spacing is now suppressed inside table cells. Fixes #570.
  • Updated dependencies [15966fc]
  • Updated dependencies [2003cec]
  • Updated dependencies [5e51a9b]
  • Updated dependencies [cb5f622]
  • Updated dependencies [1be9cf5]
  • Updated dependencies [5fcca3b]
  • Updated dependencies [f73706e]
  • Updated dependencies [0d5beed]
  • Updated dependencies [5b38696]
  • Updated dependencies [15966fc]
  • Updated dependencies [f3d6861]
  • Updated dependencies [0f3eb97]
  • Updated dependencies [eaa6f7f]
docx-editor-i18nv1.3.0June 4, 2026
docx-editor-corev1.3.0June 4, 2026

Minor Changes

  • 5e51a9b: Fix the caret, drag-selection highlight, and table cell-selection highlight appearing in the header while editing the footer. The active header/footer is now resolved per section, so they render in the region being edited. The header/footer caret also stays glued to the text while scrolling instead of drifting away. The hovered region shows a text cursor in edit mode, and the inactive region shows a normal arrow. Fixes #671

    The @public computeHfCaretRectFromView and computeHfSelectionRectsFromView (exported from @eigenpal/docx-editor-core/layout-bridge) now take a required section: 'header' | 'footer' argument.

  • 1be9cf5: Edit and track-change footnote and endnote bodies.

    Note bodies are now serialized on save, so edits and tracked changes (w:ins / w:del) inside footnotes and endnotes persist instead of being dropped — the run model preserves the separator markers and the in-body auto-number marks, and repackDocx writes word/footnotes.xml / word/endnotes.xml from the model. DocxReviewer.getChanges() gains includeFootnotes / includeEndnotes options; when set, tracked changes inside note bodies are reported with noteId / noteType.

  • 0f3eb97: Fix watermark fidelity when saving to OOXML. Picture watermarks applied across a document's headers now bind each header to its own image relationship (previously the same relationship id was reused across header parts, which could break the image on title or even pages). Watermarks now also appear on title pages and even pages by creating the first/even header parts a section displays but lacks, without disturbing existing header inheritance. Picture watermarks keep the image's aspect ratio instead of being forced into a square.

  • eaa6f7f: Add MS Word–style watermarks. Watermarks in opened documents now render behind the body content on every page, and a new Insert → Watermark dialog lets you add, edit, or remove text watermarks (preset or custom, with font, color, diagonal/horizontal layout, and semitransparent options) and picture watermarks (with scale and washout). Watermarks round-trip back to valid OOXML so Word shows the same result.

Patch Changes

  • 15966fc: Stop squashing anchored images that sit near the right edge of the page. A floating image positioned so its width reaches into the page margin (e.g. a logo flush to the top-right) was being capped to the remaining content width by the global img { max-width: 100% } reset and then stretched against its fixed height. Painted floating images now keep their exact OOXML size.
  • 2003cec: Honor an anchored text box's horizontal position in headers and footers. A text box anchored centered relative to the page (e.g. a "For Internal Use" classification banner) now renders centered instead of pinned to the left.
  • cb5f622: Preserve mid-body section breaks (w:pPr/w:sectPr) on headless roundtrip. A parseDocx → repackDocx roundtrip no longer collapses a multi-section document down to its final section. Fixes #680.
  • 5fcca3b: Content controls (w:sdt) inside footnote and endnote bodies now round-trip through the editable model instead of freezing the whole note to a verbatim copy. Notes whose only block-level construct is a content control stay fully editable; the verbatim fallback now applies only to notes carrying block-level bookmarks or w:customXml.
  • f73706e: Stop dropping several properties on headless roundtrip. Table row-level conditional formatting (w:trPr/w:cnfStyle, e.g. header-row/banding context) is now serialized, matching the cell path. Explicit "off" formatting overrides also survive: a run or paragraph that cancels a style value (<w:strike w:val="0"/>, <w:keepNext w:val="0"/>, and similar for doubleStrike, smallCaps, allCaps, outline, shadow, emboss, imprint, vanish, rtl, cs, keepLines, contextualSpacing, pageBreakBefore, suppressLineNumbers, suppressAutoHyphens, bidi) previously serialized to nothing and silently re-inherited the style value.
  • 0d5beed: Fix long content in a table row getting cut off / hidden instead of flowing across pages. A table cell now measures its stacked paragraphs the way it paints them — collapsing adjacent paragraph before/after spacing (like Word) instead of adding it — so the row's height matches what's rendered and page breaks land on whole lines instead of slicing a line in two. Selecting text across a table that spans a page break no longer scatters selection highlights into the gap between pages, and contextual spacing is now suppressed inside table cells. Fixes #570.
  • 5b38696: Render vertically-merged table cells like Word when a table crosses a page. Merged cells now keep their column and borders on the continuation page (instead of disappearing and shifting the other cells), and a tall merged cell flows its content across the page break (the row breaks mid-content like Word, honoring w:cantSplit). Each fragment closes with a border on the cut edge at the page break — including the merged column when it spans the boundary — and horizontal cell borders no longer render unevenly thick due to sub-pixel positioning. Fixes #666.
  • 15966fc: Render anchored text boxes with topAndBottom wrapping at their OOXML position instead of in the body flow. A title banner pinned to the top of the page (a shape with wp:wrapTopAndBottom and a page-relative vertical anchor) now sits flush at the page top with the body text flowing below it, matching Word, instead of being dropped into the text where its anchor paragraph happens to fall.
  • f3d6861: Fix text selection not showing in Vue headers and footers. Selecting text while editing a header or footer now paints the highlight (the body overlay was suppressed in HF mode but the HF rects were never drawn), and double/triple-click word and paragraph selection resolves against the header/footer text instead of a body run at the same position. On multi-page documents, the caret and selection now render on the header/footer instance being edited rather than always on page one's copy. Fixes #691
docx-editor-agentsv1.3.0June 4, 2026

Minor Changes

  • 1be9cf5: Edit and track-change footnote and endnote bodies.

    Note bodies are now serialized on save, so edits and tracked changes (w:ins / w:del) inside footnotes and endnotes persist instead of being dropped — the run model preserves the separator markers and the in-body auto-number marks, and repackDocx writes word/footnotes.xml / word/endnotes.xml from the model. DocxReviewer.getChanges() gains includeFootnotes / includeEndnotes options; when set, tracked changes inside note bodies are reported with noteId / noteType.

docx-editor-vuev1.2.1June 2, 2026

Patch Changes

docx-editor-reactv1.2.1June 2, 2026

Patch Changes

docx-editor-i18nv1.2.1June 2, 2026
docx-editor-corev1.2.1June 2, 2026

Patch Changes

  • 1c2b098: Fix printing blank pages past the first few in large documents. Virtualized off-screen pages were cloned as empty shells; print now forces every page to render first. Fixes #579
docx-editor-agentsv1.2.1June 2, 2026

Patch Changes

  • a0adf60: Headless agent bridge: paragraphs with no w14:paraId are now addressable. read_document already labels such paragraphs by their ordinal index, but the bridge only registered paragraphs that carried a paraId — so every paraId-anchored op (comments, tracked changes, and formatting/style) rejected the id the agent was given, and find_text skipped those paragraphs entirely. Documents without paraIds (common in Word output) were effectively read-only through the bridge. The bridge now keys those paragraphs by the same ordinal index it reports, and find_text surfaces them with that ordinal id — so a phrase it returns is anchorable by the mutate tools.
docx-editor-vuev1.2.0June 1, 2026

Minor Changes

  • 362a65f: Make block-level content controls (w:sdt) editable. Block structured document tags wrapping paragraphs or tables now convert to a dedicated ProseMirror node, so their content stays editable and the control survives the full edit cycle (previously it round-tripped on save but was flattened in the editor). The control boundary is drawn around its content in the paged view, and the region remains addressable by its tag/alias.
  • d791e05: Add content-control (SDT) methods to the editor ref. getContentControls lists block controls in the live document (filtered by tag/alias/id/type) with their text and position; scrollToContentControl brings one into view; setContentControlContent fills a control by tag (as a normal undoable edit); removeContentControl deletes or unwraps one. Locked controls are refused unless forced. Paired across the React and Vue adapters.
  • a60ed77: Add typed value setters for content controls. setContentControlValue (headless) and the setContentControlValue editor-ref method (React + Vue) set a dropdown selection, toggle a checkbox, or set a date by tag, updating both the visible content and the structured w:sdtPr state (dropdown w:lastValue, w14:checked, w:date's w:fullDate). Validates the value against the control type and list items.
  • a60ed77: Support repeating sections (w15:repeatingSection) with add/remove, matching Word. addRepeatingSectionItem/removeRepeatingSectionItem (headless) clone an item with fresh unique ids or drop one (keeping at least one); the editor renders +/✕ affordances on each repeating item in React and Vue. Items round-trip losslessly.

Patch Changes

docx-editor-reactv1.2.0June 1, 2026

Minor Changes

  • 362a65f: Make block-level content controls (w:sdt) editable. Block structured document tags wrapping paragraphs or tables now convert to a dedicated ProseMirror node, so their content stays editable and the control survives the full edit cycle (previously it round-tripped on save but was flattened in the editor). The control boundary is drawn around its content in the paged view, and the region remains addressable by its tag/alias.
  • d791e05: Add content-control (SDT) methods to the editor ref. getContentControls lists block controls in the live document (filtered by tag/alias/id/type) with their text and position; scrollToContentControl brings one into view; setContentControlContent fills a control by tag (as a normal undoable edit); removeContentControl deletes or unwraps one. Locked controls are refused unless forced. Paired across the React and Vue adapters.
  • a60ed77: Add typed value setters for content controls. setContentControlValue (headless) and the setContentControlValue editor-ref method (React + Vue) set a dropdown selection, toggle a checkbox, or set a date by tag, updating both the visible content and the structured w:sdtPr state (dropdown w:lastValue, w14:checked, w:date's w:fullDate). Validates the value against the control type and list items.
  • a60ed77: Support repeating sections (w15:repeatingSection) with add/remove, matching Word. addRepeatingSectionItem/removeRepeatingSectionItem (headless) clone an item with fresh unique ids or drop one (keeping at least one); the editor renders +/✕ affordances on each repeating item in React and Vue. Items round-trip losslessly.

Patch Changes

docx-editor-i18nv1.2.0June 1, 2026
docx-editor-corev1.2.0June 1, 2026

Minor Changes

  • 362a65f: Make block-level content controls (w:sdt) editable. Block structured document tags wrapping paragraphs or tables now convert to a dedicated ProseMirror node, so their content stays editable and the control survives the full edit cycle (previously it round-tripped on save but was flattened in the editor). The control boundary is drawn around its content in the paged view, and the region remains addressable by its tag/alias.
  • d791e05: Add a content-control (SDT) addressing API to the headless surface. findContentControls/findContentControl discover block-level content controls by tag, alias, id, or type and read their text plus modeled state (showingPlaceholder, checked, dateFormat, listItems, dataBinding); setContentControlContent fills a control by tag (string or block content) and removeContentControl deletes or unwraps one. Edits preserve the control's identity and raw properties so the document still round-trips, clear the w:showingPlcHdr placeholder flag when writing real content, and refuse locked controls, typed controls (dropdown/date/…), and repeating-section unwraps unless forced. Makes content controls usable as stable anchors for templates and document automation.
  • d791e05: Add content-control (SDT) methods to the editor ref. getContentControls lists block controls in the live document (filtered by tag/alias/id/type) with their text and position; scrollToContentControl brings one into view; setContentControlContent fills a control by tag (as a normal undoable edit); removeContentControl deletes or unwraps one. Locked controls are refused unless forced. Paired across the React and Vue adapters.
  • a60ed77: Add typed value setters for content controls. setContentControlValue (headless) and the setContentControlValue editor-ref method (React + Vue) set a dropdown selection, toggle a checkbox, or set a date by tag, updating both the visible content and the structured w:sdtPr state (dropdown w:lastValue, w14:checked, w:date's w:fullDate). Validates the value against the control type and list items.
  • a60ed77: Support repeating sections (w15:repeatingSection) with add/remove, matching Word. addRepeatingSectionItem/removeRepeatingSectionItem (headless) clone an item with fresh unique ids or drop one (keeping at least one); the editor renders +/✕ affordances on each repeating item in React and Vue. Items round-trip losslessly.

Patch Changes

  • e30c763: Preserve block-level content controls (w:sdt) on save. Block-level structured document tags wrapping paragraphs or tables were silently dropped when a document was loaded and re-saved; they now round-trip losslessly, including their tag, alias, lock, and other properties. Fixes #622
  • bc67374: Fix paragraph styles on empty paragraphs and the style that follows a heading on Enter. Applying a heading style to an empty paragraph and then typing now produces styled text instead of plain body text, and the style picker shows the right state. Pressing Enter at the end of a heading now starts the next paragraph in the style's follow-on style (body text) instead of another heading.
docx-editor-agentsv1.2.0June 1, 2026
docx-js-editorv0.5.3May 31, 2026

Patch Changes