Releases
Release history and changelog for @eigenpal/docx-editor-react
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
Minor Changes
- 9d7138e: Add a
fontsprop on<DocxEditor>for declarative custom-font registration — each entry injects an@font-facefrom the URL you provide, and entries sharing afamilyregister different weights. Also exposesloadFontFromUrl,loadFontDefinitions, and theFontDefinitiontype from@eigenpal/docx-editor-core/utils. Fixes #620. - 9d7138e: Font-load failures now route through the React
onErrorprop and the Vueerrorevent instead of the console, so you can forward them to your own error tracker; with no subscriber attached they fall back toconsole.warn. AddsonFontError(callback)to@eigenpal/docx-editor-core/utilsfor non-adapter hosts. - 42ea72d: Track structural edits as OOXML revisions in suggesting mode. Paragraph-break insert/delete, paragraph-property changes, and table row/cell insert/delete/merge are now recorded, round-tripped through DOCX, and shown in the tracked-changes sidebar (React and Vue, localized). Adds
acceptChangeById(id)/rejectChangeById(id), andacceptAllChanges/rejectAllChangesnow resolve every revision type rather than inline marks only. Fixes #614.
Patch Changes
- Updated dependencies [14fe4f2]
- Updated dependencies [9d7138e]
- Updated dependencies [7e77654]
- Updated dependencies [bf11ee8]
- Updated dependencies [30c1931]
- Updated dependencies [9d7138e]
- Updated dependencies [7a91813]
- Updated dependencies [a7f9ac5]
- Updated dependencies [42ea72d]
- Updated dependencies [ebb85a5]
- Updated dependencies [137d5de]
- Updated dependencies [e5e0997]
- @eigenpal/docx-editor-i18n@1.1.0
- @eigenpal/docx-editor-core@1.1.0
- @eigenpal/docx-editor-agents@1.1.0
Minor Changes
- 9d7138e: Add a
fontsprop on<DocxEditor>for declarative custom-font registration — each entry injects an@font-facefrom the URL you provide, and entries sharing afamilyregister different weights. Also exposesloadFontFromUrl,loadFontDefinitions, and theFontDefinitiontype from@eigenpal/docx-editor-core/utils. Fixes #620. - 9d7138e: Font-load failures now route through the React
onErrorprop and the Vueerrorevent instead of the console, so you can forward them to your own error tracker; with no subscriber attached they fall back toconsole.warn. AddsonFontError(callback)to@eigenpal/docx-editor-core/utilsfor non-adapter hosts. - 42ea72d: Track structural edits as OOXML revisions in suggesting mode. Paragraph-break insert/delete, paragraph-property changes, and table row/cell insert/delete/merge are now recorded, round-tripped through DOCX, and shown in the tracked-changes sidebar (React and Vue, localized). Adds
acceptChangeById(id)/rejectChangeById(id), andacceptAllChanges/rejectAllChangesnow resolve every revision type rather than inline marks only. Fixes #614.
Patch Changes
- 371dbaf: Fix Find navigation in the paged editor: matches now map to live document positions, the page scrolls to the active match, and Enter advances through results instead of snapping back to the first. Fixes #321.
- 79c68b0: Fix hyperlink popup text and URL inputs being uneditable. The editor container's focus and keydown handlers were redirecting focus to the document, so the popup inputs could never hold focus or accept typing.
- Updated dependencies [14fe4f2]
- Updated dependencies [9d7138e]
- Updated dependencies [7e77654]
- Updated dependencies [bf11ee8]
- Updated dependencies [30c1931]
- Updated dependencies [9d7138e]
- Updated dependencies [7a91813]
- Updated dependencies [a7f9ac5]
- Updated dependencies [42ea72d]
- Updated dependencies [ebb85a5]
- Updated dependencies [137d5de]
- Updated dependencies [e5e0997]
- @eigenpal/docx-editor-i18n@1.1.0
- @eigenpal/docx-editor-core@1.1.0
- @eigenpal/docx-editor-agents@1.1.0
Minor Changes
- a7f9ac5: Add French locale
- 42ea72d: Track structural edits as OOXML revisions in suggesting mode. Paragraph-break insert/delete, paragraph-property changes, and table row/cell insert/delete/merge are now recorded, round-tripped through DOCX, and shown in the tracked-changes sidebar (React and Vue, localized). Adds
acceptChangeById(id)/rejectChangeById(id), andacceptAllChanges/rejectAllChangesnow resolve every revision type rather than inline marks only. Fixes #614.
Patch Changes
- 14fe4f2: add Hindi (hi) community-maintained locale
Minor Changes
- 9d7138e: Add a
fontsprop on<DocxEditor>for declarative custom-font registration — each entry injects an@font-facefrom the URL you provide, and entries sharing afamilyregister different weights. Also exposesloadFontFromUrl,loadFontDefinitions, and theFontDefinitiontype from@eigenpal/docx-editor-core/utils. Fixes #620. - bf11ee8: Fix undo in suggesting mode marking an existing character as inserted. Undoing a tracked paragraph break (Enter) now only removes the break, without stamping a stray insertion on the boundary character. Raises the prosemirror-history peer dependency to >= 1.5.0. Fixes #633
- 9d7138e: Font-load failures now route through the React
onErrorprop and the Vueerrorevent instead of the console, so you can forward them to your own error tracker; with no subscriber attached they fall back toconsole.warn. AddsonFontError(callback)to@eigenpal/docx-editor-core/utilsfor non-adapter hosts. - 42ea72d: Track structural edits as OOXML revisions in suggesting mode. Paragraph-break insert/delete, paragraph-property changes, and table row/cell insert/delete/merge are now recorded, round-tripped through DOCX, and shown in the tracked-changes sidebar (React and Vue, localized). Adds
acceptChangeById(id)/rejectChangeById(id), andacceptAllChanges/rejectAllChangesnow resolve every revision type rather than inline marks only. Fixes #614. - 137d5de: Track inserted and deleted images as real tracked changes in suggesting mode. A picture added (or removed) while suggesting now carries the insertion/deletion mark, paints with a revision outline, shows a review card, and is accepted/rejected with the rest of the change — and round-trips to
<w:ins>/<w:del>like Word. The mechanism is generic to inline atom nodes, so other elements (shapes, …) plug in the same way.
Patch Changes
- 7e77654: Track list/numbering changes made in suggesting mode so rejecting them reverts cleanly. Applying a list to a paragraph now records a tracked paragraph-property change (
w:pPrChange, matching Word), and rejecting the suggestion removes both the typed items and the numbering instead of stranding an empty list item. Fixes #634 - 30c1931: Handle DOCX tables with fully covered vertical-merge rows without creating invalid empty table rows.
- ebb85a5: Tolerate a stray unescaped
&in DOCX XML parts (document, headers, footers, comments) instead of failing the whole parse with "Invalid character in entity name". Stray ampersands are escaped before parsing, and any remaining parse error now includes a snippet of the bytes around the offending column. - e5e0997: Header/footer editing now matches the body: click, drag, multi-click, selection, right-click, image select, hyperlinks, table row/column/edge resize, and PAGE/NUMPAGES field inserts all behave the same as in the document body. Fixes #468.
Minor Changes
- 7a91813: Add headless reviewer formatting and paragraph style edits
- 42ea72d: Track structural edits as OOXML revisions in suggesting mode. Paragraph-break insert/delete, paragraph-property changes, and table row/cell insert/delete/merge are now recorded, round-tripped through DOCX, and shown in the tracked-changes sidebar (React and Vue, localized). Adds
acceptChangeById(id)/rejectChangeById(id), andacceptAllChanges/rejectAllChangesnow resolve every revision type rather than inline marks only. Fixes #614.
Patch Changes
- 6d56181: Vue now renders documents with stacked floating objects identically to React. Previously, the Vue composable ran a simplified measurement pipeline without floating-zone awareness, so anchored images / floating textboxes / floating tables would not push body text below them in Vue. The float-extraction and per-block orchestration is now shared from
@eigenpal/docx-editor-core/layout-bridge(measureBlocksWithFloats); both adapters call it with their own per-block measure callback. - Updated dependencies [24b31a4]
- Updated dependencies [ec36a50]
- Updated dependencies [143c31e]
- Updated dependencies [d91357e]
- Updated dependencies [bdd7f50]
- Updated dependencies [6d56181]
- Updated dependencies [e80093d]
- @eigenpal/docx-editor-core@1.0.3
- @eigenpal/docx-editor-agents@1.0.3
- @eigenpal/docx-editor-i18n@1.0.3
Patch Changes
- 3e4b98e: Fix inline-image header lines to match Word. A line with a tall inline logo plus short text now baseline-aligns the label with the image bottom instead of centering it in an inflated line box, so it hugs the paragraph border. Inline images also honor their
wp:inlinedistT/distB wrap distances, which previously only the block-image path applied. - 0a93cc3: Internal: co-locate the Tailwind library config inside
packages/react/. No runtime change. - 6d56181: Vue now renders documents with stacked floating objects identically to React. Previously, the Vue composable ran a simplified measurement pipeline without floating-zone awareness, so anchored images / floating textboxes / floating tables would not push body text below them in Vue. The float-extraction and per-block orchestration is now shared from
@eigenpal/docx-editor-core/layout-bridge(measureBlocksWithFloats); both adapters call it with their own per-block measure callback. - e80093d: Body text now flows around stacked floating objects correctly. Documents with a side-anchored textbox plus an image floating to the right, or with a floating table whose width fills the page, used to render body paragraphs at full content width on top of the floats, push tables to the page top, or collapse the first paragraph to a single glyph per line. All three cases now match Word's layout.
- Updated dependencies [24b31a4]
- Updated dependencies [ec36a50]
- Updated dependencies [143c31e]
- Updated dependencies [d91357e]
- Updated dependencies [bdd7f50]
- Updated dependencies [6d56181]
- Updated dependencies [e80093d]
- @eigenpal/docx-editor-core@1.0.3
- @eigenpal/docx-editor-agents@1.0.3
- @eigenpal/docx-editor-i18n@1.0.3
Patch Changes
- 24b31a4: Numbered paragraphs whose direct
w:indhas a first-line indent but no hanging slot (e.g.<w:ind w:left="0" w:firstLine="720"/>) now render the marker inline with the first body line at the firstLine position, matching Word/LibreOffice. Previously the painter wrapped the marker into a separate row above the text and the layout engine didn't reserve space for that row — the last line of the first fragment spilled below its container and the continuation fragment rendered on top of it (fixes #483). - ec36a50: Footnote references authored inside table cells (and text boxes) are now collected by the page-reservation pass. Previously
collectFootnoteRefswalked only top-level blocks and skipped tables entirely, so nested refs never reachedmapFootnotesToPagesand the per-page footnote area silently dropped them while the body still rendered the in-line superscript marker. Fixes #584. - 143c31e: Numbered paragraphs that write a neutral
w:hanging="0"direct indent now keep the numbering level's hanging indent, mirroring the fix already in place forw:firstLine="0". Per ECMA-376 §17.3.1.12, both are no-op values and shouldn't suppress the level-defined indent. - d91357e: Render text boxes in headers and footers. Headers and footers now flow through the same block-content parser as the document body, so text boxes (and bullet-glyph conversion) are parsed everywhere a Word user can place them. The header/footer page painter also now draws
textBoxandimageblocks, which it previously measured but never painted — so a header/footer text box that only appeared in the inline editor now also shows in the page view. - bdd7f50: Preserve numbered paragraph hanging indents when DOCX paragraphs include a neutral first-line indent override.
- 6d56181: Vue now renders documents with stacked floating objects identically to React. Previously, the Vue composable ran a simplified measurement pipeline without floating-zone awareness, so anchored images / floating textboxes / floating tables would not push body text below them in Vue. The float-extraction and per-block orchestration is now shared from
@eigenpal/docx-editor-core/layout-bridge(measureBlocksWithFloats); both adapters call it with their own per-block measure callback. - e80093d: Body text now flows around stacked floating objects correctly. Documents with a side-anchored textbox plus an image floating to the right, or with a floating table whose width fills the page, used to render body paragraphs at full content width on top of the floats, push tables to the page top, or collapse the first paragraph to a single glyph per line. All three cases now match Word's layout.