Releases
Minor Changes
- 19a25eb: Add
scrollToCommentId,scrollToChangeId, andhighlightRangemethods toDocxEditorRefon 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.scrollToCommentIdandscrollToChangeIdreturnfalsewhen 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]
- @eigenpal/docx-editor-core@1.5.0
- @eigenpal/docx-editor-agents@1.5.0
- @eigenpal/docx-editor-i18n@1.5.0
Minor Changes
- 19a25eb: Add
scrollToCommentId,scrollToChangeId, andhighlightRangemethods toDocxEditorRefon 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.scrollToCommentIdandscrollToChangeIdreturnfalsewhen 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.outlinelayer (40) instead of 50, and the toolbar shell is raised toZ_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]
- @eigenpal/docx-editor-core@1.5.0
- @eigenpal/docx-editor-agents@1.5.0
- @eigenpal/docx-editor-i18n@1.5.0
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-coreor its/utilsentry) 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 (fontsprop) 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:tblPrchild 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.
Minor Changes
- c4fd221:
DocxReviewercan now accept/reject tracked changes inside footnote and endnote bodies. Pass aReviewChangefromgetChanges(it carriesnoteId/noteType) toacceptChange/rejectChangeto resolve a change wherever it lives, or useacceptAll/rejectAllwith{ includeFootnotes, includeEndnotes }to resolve note changes in bulk. The result persists throughtoBuffer(). Previously these methods operated on the document body only; the numericacceptChange(id)form is unchanged.
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 theirparaIds until the first edit. The host Document cache is now synced with the ids assigned at load (#738), sogetDocument()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]
- @eigenpal/docx-editor-core@1.4.0
- @eigenpal/docx-editor-agents@1.4.0
- @eigenpal/docx-editor-i18n@1.4.0
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
- Updated dependencies [28a521a]
- Updated dependencies [1ab8b30]
- @eigenpal/docx-editor-core@1.4.0
- @eigenpal/docx-editor-agents@1.4.0
- @eigenpal/docx-editor-i18n@1.4.0
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.
Patch Changes
- bd704e2: Assign every paragraph a stable id when a document is opened, so block ids and
getSelectionInfo().paraIdwork before the first edit. Previously a document withoutw14:paraIdhad 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]
- @eigenpal/docx-editor-core@1.3.3
- @eigenpal/docx-editor-agents@1.3.3
- @eigenpal/docx-editor-i18n@1.3.3
Patch Changes
- bd704e2: Assign every paragraph a stable id when a document is opened, so block ids and
getSelectionInfo().paraIdwork before the first edit. Previously a document withoutw14:paraIdhad 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]
- @eigenpal/docx-editor-core@1.3.3
- @eigenpal/docx-editor-agents@1.3.3
- @eigenpal/docx-editor-i18n@1.3.3
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
hangingvalue larger than itsleftindent. 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().paraIdwork before the first edit. Previously a document withoutw14:paraIdhad null ids until you typed or added a comment. Fixes #738. - 30df527: Honor an explicit
0for 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.
Patch Changes
- b05e9cf: Add the
authorprop 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 callbacksonCommentAdd,onCommentResolve,onCommentDelete,onCommentReply, andonCommentsChange. 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]
- @eigenpal/docx-editor-core@1.3.2
- @eigenpal/docx-editor-agents@1.3.2
- @eigenpal/docx-editor-i18n@1.3.2
Patch Changes
- Updated dependencies [3bd7bf7]
- Updated dependencies [0ded2a1]
- Updated dependencies [58e3a7e]
- @eigenpal/docx-editor-core@1.3.2
- @eigenpal/docx-editor-agents@1.3.2
- @eigenpal/docx-editor-i18n@1.3.2
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.
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]
- @eigenpal/docx-editor-core@1.3.1
- @eigenpal/docx-editor-agents@1.3.1
- @eigenpal/docx-editor-i18n@1.3.1
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]
- @eigenpal/docx-editor-core@1.3.1
- @eigenpal/docx-editor-agents@1.3.1
- @eigenpal/docx-editor-i18n@1.3.1
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.
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]
- @eigenpal/docx-editor-core@1.3.0
- @eigenpal/docx-editor-agents@1.3.0
- @eigenpal/docx-editor-i18n@1.3.0
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]
- @eigenpal/docx-editor-core@1.3.0
- @eigenpal/docx-editor-agents@1.3.0
- @eigenpal/docx-editor-i18n@1.3.0
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
@publiccomputeHfCaretRectFromViewandcomputeHfSelectionRectsFromView(exported from@eigenpal/docx-editor-core/layout-bridge) now take a requiredsection: '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, andrepackDocxwritesword/footnotes.xml/word/endnotes.xmlfrom the model.DocxReviewer.getChanges()gainsincludeFootnotes/includeEndnotesoptions; when set, tracked changes inside note bodies are reported withnoteId/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 orw: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
topAndBottomwrapping at their OOXML position instead of in the body flow. A title banner pinned to the top of the page (a shape withwp:wrapTopAndBottomand 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
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, andrepackDocxwritesword/footnotes.xml/word/endnotes.xmlfrom the model.DocxReviewer.getChanges()gainsincludeFootnotes/includeEndnotesoptions; when set, tracked changes inside note bodies are reported withnoteId/noteType.
Patch Changes
- Updated dependencies [a0adf60]
- Updated dependencies [1c2b098]
- @eigenpal/docx-editor-agents@1.2.1
- @eigenpal/docx-editor-core@1.2.1
- @eigenpal/docx-editor-i18n@1.2.1
Patch Changes
- Updated dependencies [a0adf60]
- Updated dependencies [1c2b098]
- @eigenpal/docx-editor-agents@1.2.1
- @eigenpal/docx-editor-core@1.2.1
- @eigenpal/docx-editor-i18n@1.2.1
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
Patch Changes
- a0adf60: Headless agent bridge: paragraphs with no
w14:paraIdare now addressable.read_documentalready 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, andfind_textskipped 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, andfind_textsurfaces them with that ordinal id — so a phrase it returns is anchorable by the mutate tools.
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.
getContentControlslists block controls in the live document (filtered by tag/alias/id/type) with their text and position;scrollToContentControlbrings one into view;setContentControlContentfills a control by tag (as a normal undoable edit);removeContentControldeletes 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 thesetContentControlValueeditor-ref method (React + Vue) set a dropdown selection, toggle a checkbox, or set a date by tag, updating both the visible content and the structuredw:sdtPrstate (dropdownw:lastValue,w14:checked,w:date'sw: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
- Updated dependencies [362a65f]
- Updated dependencies [e30c763]
- Updated dependencies [d791e05]
- Updated dependencies [d791e05]
- Updated dependencies [a60ed77]
- Updated dependencies [bc67374]
- Updated dependencies [a60ed77]
- @eigenpal/docx-editor-core@1.2.0
- @eigenpal/docx-editor-agents@1.2.0
- @eigenpal/docx-editor-i18n@1.2.0
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.
getContentControlslists block controls in the live document (filtered by tag/alias/id/type) with their text and position;scrollToContentControlbrings one into view;setContentControlContentfills a control by tag (as a normal undoable edit);removeContentControldeletes 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 thesetContentControlValueeditor-ref method (React + Vue) set a dropdown selection, toggle a checkbox, or set a date by tag, updating both the visible content and the structuredw:sdtPrstate (dropdownw:lastValue,w14:checked,w:date'sw: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
- Updated dependencies [362a65f]
- Updated dependencies [e30c763]
- Updated dependencies [d791e05]
- Updated dependencies [d791e05]
- Updated dependencies [a60ed77]
- Updated dependencies [bc67374]
- Updated dependencies [a60ed77]
- @eigenpal/docx-editor-core@1.2.0
- @eigenpal/docx-editor-agents@1.2.0
- @eigenpal/docx-editor-i18n@1.2.0
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/findContentControldiscover block-level content controls by tag, alias, id, or type and read their text plus modeled state (showingPlaceholder,checked,dateFormat,listItems,dataBinding);setContentControlContentfills a control by tag (string or block content) andremoveContentControldeletes or unwraps one. Edits preserve the control's identity and raw properties so the document still round-trips, clear thew:showingPlcHdrplaceholder 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.
getContentControlslists block controls in the live document (filtered by tag/alias/id/type) with their text and position;scrollToContentControlbrings one into view;setContentControlContentfills a control by tag (as a normal undoable edit);removeContentControldeletes 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 thesetContentControlValueeditor-ref method (React + Vue) set a dropdown selection, toggle a checkbox, or set a date by tag, updating both the visible content and the structuredw:sdtPrstate (dropdownw:lastValue,w14:checked,w:date'sw: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.
Patch Changes
- d9c84f3: Deprecate
@eigenpal/docx-js-editor. The package has been renamed to@eigenpal/docx-editor-react; this0.xline now receives critical fixes only. See the migration guide: https://www.docx-editor.dev/docs/latest/migration