v16.3.1-canary.4
- [Bench] Fixes for pure Fizz bench: #96771
- Derive foreground cache revalidation from the consumer: #96731
- [turbopack] Raise registration calls in hoisted modules to the top: #96697
- Fix race when navigating Back before hydration: #96252
- docs: present each Skill as steps in the AI agents guide: #96751
- Reuse completed cache entries for the rest of a request: #96727
- Discard only cache entries that predate a tag revalidation: #96726
- Upgrade React from
7dfc7ccd-20260803to11eddecd-20260805: #96735 - Remove WorkStore execution mode: #96674
- Remove cache revalidation execution mode reads: #96670
- Separate App Route render and prerender pipelines: #96662
- Remove App Page execution mode reads: #96660
- test: fix missing await in css-chunking test: #96725
- fix(next/image): preserve image response after optimization: #96681
- docs (Skills): stop assuming app/ at the root and port 3000: #96696
- Implement next/font BeforeResolvePlugins as ImportMappingReplacement: #95808
- Use Tailwind Turbopack loader in create-next-app: #96606
- docs: instant navigation quick start with an adoption prompt: #96663
- Separate App Page render and prerender pipelines: #96659
- Move App Router execution intent to entrypoints: #96640
- Pass explicit render capabilities through App Render: #96576
- Pass explicit prefetch hint policy through App Render: #96572
- Replace WorkStore isStaticGeneration with executionMode: #96570
- docs: document ! exclusion and src/ prefix for --debug-build-paths: #96703
- Change
loadManifestto return undefined withhandleMissing: #96530
Huge thanks to @gaearon, @ztanner, @sampoder, @aurorascharff, @unstubbable, @lubieowoce, @lukesandberg, @mischnic, @timneutkens, and @icyJoseph for helping!
@docx-editor.dev/react@2.0.0
-
26095c6: Initial release.
A WYSIWYG
.docxeditor that runs entirely in the browser: it opens a Word file, paints the real paginated layout, edits it in place, and writes a.docxback out.@docx-editor.dev/react— the React adapter.<DocxEditor document={bytes} />for the packaged editor, or composeDocxEditor.Root/.Viewport/.Contentwith the hooks (useEditorState,useEditorCommand,useDocxEditor) to build your own chrome.@docx-editor.dev/core— the framework-agnostic engine: OPC/XML reading, the canonical OOXML tree, layout, paint, and theEditorcontract the adapters render.@docx-editor.dev/i18n— the shared string catalogue, with nine locales.@docx-editor.dev/editor-api— a batching document object model for automating a document from a server or from an editor already open in a page.@docx-editor.dev/pro— tracked changes, comments, and custom nodes.
Word fidelity is structural: styles, theme colours, tables, headers and footers, section layout, numbering, and tab stops resolve through the same cascade Word uses, and content the editor does not model round-trips untouched.
-
26095c6: Remove
EditorHost,EditorConfigandcreateEditorfrom the public surface. They described a retired pipeline in which the adapter supplied DOM handles and a display sink; the editor has painted its own surface sincecreateDocxEditorreplaced it, and none of the three had a caller. UsecreateDocxEditorwithDocxEditorConfig.
-
26095c6: Five additions to the customization surface, each one a gap a host had to work around:
DocxEditor.Reviewtakes atlabel resolver, like every other compound, and acard={{ className }}for the card box itself.DocxEditor.Reviewaccepts a render prop as its children, replacing the packaged card while keeping the rail's anchoring, stacking and virtualization.- A custom node's review card honours the same part overrides as every other kind, and carries
data-node-nameso a theme can tell one definition's cards from another's. DocxEditor.Menu.GroupandDocxEditor.ContextMenu.Group— a named section of rows with a realrole="group"taking its heading as the accessible name.useEditorCaret()returns the caret as{ paragraphId, offset }— the shape the write APIs take as theirat, and reference-stable so it can be captured in a handler.
An avatar with no author renders nothing rather than a blank disc, and rail
furnitureunmounts when the pane is shut — a closed rail is a 32px marker strip, and content laid out for the open column has nowhere to go in it.
-
26095c6: Document the whole public API surface. Every exported symbol in the engine, the pro modules, the font packages and the automation object model now carries TSDoc, and the generated API reference covers
@docx-editor.dev/core,/proand/fontsalongside the adapters it already described. -
26095c6: Insert › Table now inserts a table. Pick a size from the 6×6 grid and an empty table with visible borders lands at the caret, columns evenly dividing the page's text width, caret in the first cell. The Insert menu no longer carries an Image row — picture insertion stays available through the image toolbar control and
DocxEditor.Menu.ImageInsert. -
26095c6: Resolve fonts on demand.
fontsnow also accepts a function, called once per load with the families the document actually declares, so only what a file needs is loaded.googleFonts()from@docx-editor.dev/fonts/googleserves those families from a pinned, hash-checked catalog of 105 Google-hosted families, anduseFontsgives React a stablefontsprop that never rebuilds the editor. App-supplied faces now also paint, through the same aliasing the engine already uses for embedded fonts. -
26095c6: Render pictures whose
pic:spProrpic:blipFillomit optional children.a:xfrm, the geometry group and the fill-mode group are all optional in ECMA-376, but each was being required, so a conforming picture was treated as unrecognised content and never drawn. Word writes all of them, which is why this only showed up on files from other producers.Size the caret on an empty spaced paragraph to the text rather than the line box. Auto and at-least line spacing add their extra depth below the glyphs, so on a double-spaced empty paragraph the caret was drawn at the full height of the spaced box — about twice the height of the text about to be typed. The same measurement also fixes the highlight band a content control draws on such a line.
-
26095c6: The review rail now measures its position from client rects, so a host that positions its own page wrapper no longer lands the cards on top of the document. Rail furniture no longer pushes every card down by its own height, a custom node's context-menu card wraps instead of stretching the whole menu, the editing-mode menu right-aligns to its pill so a toolbar-end control no longer opens off-screen, and submenu panels place themselves in client space rather than being clipped by the context menu's own scroller.
-
26095c6: Stop an empty paragraph that carries a section break from producing a blank page. The paragraph mark holding a
w:sectPris the section break itself, so when it paints nothing it now stays on the page its section ended on instead of opening a sheet the following next-page section then leaves empty. -
26095c6: Published packages now ship a
THIRD_PARTY_NOTICES.mdreproducing the license of every third-party package bundled into their release artifacts. -
26095c6: Match Word's vertical pagination by excluding a font's external
hhea.lineGapfrom shaped line boxes and allowing auto line-spacing depth below a final glyph band to cross the bottom text margin. -
Updated dependencies [26095c6]
-
Updated dependencies [26095c6]
-
Updated dependencies [26095c6]
-
Updated dependencies [26095c6]
-
Updated dependencies [26095c6]
-
Updated dependencies [26095c6]
- @docx-editor.dev/core@2.0.0
- @docx-editor.dev/i18n@2.0.0
@docx-editor.dev/pro@2.0.0
- 26095c6: Deleting text that carried comments or tracked changes now clears them from the review rail instead of leaving empty cards behind, matching Word: the comment record goes with the words it covered, and an untracked delete drops the
w:ins/w:delit emptied. A reply to a tracked change renders inside that change's card rather than as a separate card beside it, replies included. Every card carries a delete control on the open card — it removes a comment thread, a single reply, or discards a suggestion — through the newEditor.deleteReviewItem,DocxEditor.Review.DeleteanduseReview().remove. Also fixes a card dismissed from its reply box refusing to reopen.
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- Updated dependencies [26095c6]
- @docx-editor.dev/react@2.0.0
- @docx-editor.dev/core@2.0.0