π Sync stable β main#3727
Conversation
β¦6-06-12 Merge main into stable
Based on the commit messages, here are the release notes: ### What's New - **Textbox editing** β Edit text content inside VML and DrawingML textboxes with full interaction support; clicks map to content positions. - **Font family combobox** β Browse and select fonts directly from the toolbar. - **Font size options** β UI API exposes font size choices for custom toolbars. - **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; pending-comments-update event carries `pendingSelection`. - **Viewport scroll container** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element. - **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets. - **Sidebar viewport observation** β `ui.viewport.observe` fires when comments rail opens or closes. - **Zoom modes** β Manual and fit-width zoom with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command. - **Table of contents hover** β Hovering TOC entries highlights corresponding sections. ### Improvements - **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout. - **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`. - **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement. - **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries. ### Fixes - Paragraphs with pageBreakBefore style no longer add blank pages when directly following explicit page breaks. - Textbox text alignment matches Word when tables are inside textboxes. - Table cell selection highlights appear over empty space; multiline selection interior lines render at full width. - Plan engine recovers from stale block identities on recompile without crashes. - Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start. - DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines. - Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases. - Viewport geometry invalidates on sidebar toggle without px-level jitter. - Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly. - TOC anchor navigation preserves bookmark start/end order. - Image alpha modifiers process correctly on import and export. - Font picker keyboard behavior consistent across selection modes. - Formatting preserved when typing text over toolbar font selections.
### What's New - **Textbox editing** β Edit text content inside VML and DrawingML textboxes; clicks map to content positions with full interaction support. - **Font family combobox** β Browse and select fonts directly from the toolbar. - **Font size options** β UI API exposes font size choices for custom toolbars. - **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling. - **Pending selection on comments event** β `pending-comments-update` event carries `pendingSelection` captured before the live selection clears. - **Scroll container getter** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers. - **Text range viewport geometry** β `ui.viewport.getRect()` accepts Document API text addresses and targets, not just entities. - **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes. - **Zoom modes** β Manual and fit-width zoom with observable mode transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command. - **Table of contents hover** β Hovering TOC entries highlights corresponding sections in the document. ### Improvements - **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout. - **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`. - **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement; no reflow. - **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries. ### Fixes - Paragraphs with `pageBreakBefore` style no longer add blank pages when directly following explicit page breaks. - Textbox text alignment now matches Word when tables are inside textboxes. - Table cell selection highlights appear over empty space; multiline selection interior lines render at full width. - Plan engine recovers from stale block identities on recompile without crashes. - Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start. - DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines. - Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases. - Viewport geometry invalidates on sidebar toggle without px-level jitter. - Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly. - TOC anchor navigation preserves bookmark start/end order. - Image alpha modifiers process correctly on import and export. - Font picker keyboard behavior consistent across selection modes. - Formatting preserved when typing text over toolbar font selections.
### What's New - **Textbox editing** β Click, type, and select text directly inside VML and DrawingML textboxes; full caret and selection support. - **Font family combobox** β Browse and select fonts from the toolbar; font selection flows through custom UI. - **Font size API** β `ui.viewport` exposes available font sizes for custom toolbars and programmatic queries. - **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling or moving selection. - **Pending selection on comment events** β `pending-comments-update` event carries `pendingSelection` captured before the live DOM selection clears. - **Scroll container access** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers. - **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets, not just entities. - **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes. - **Zoom modes** β Manual and fit-width zoom modes with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command. - **Table of contents hover** β Hovering TOC entries highlights corresponding document sections. ### Improvements - **Multi-column section balancing** β Continuous sections now balance correctly; explicit per-column widths preserved throughout layout. - **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space` values. - **Font substitutes load before measurement** β Metric-compatible fallbacks for Calibri, Cambria, Arial, Times New Roman, and Courier New load upfront; no reflow. - **Tracked table changes consolidation** β Inline cell edits fold into a single review item instead of separate entries; one decision applies to the whole table. ### Fixes - Paragraphs styled with `pageBreakBefore` no longer insert blank pages when directly following explicit page breaks. - Textbox text alignment now matches Word behavior when tables are nested inside textboxes. - Table cell selection highlights render over empty space; multiline selections show full-width interior lines. - Plan engine recovers from stale block identities on recompile without crashes. - Tab carets anchor to line top (not bottom); soft-break continuation carets position at line start with alignment-aware offset. - DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines. - Font toolbar no longer races on editor handoff; combobox selection handles edge cases correctly. - Viewport geometry invalidates on sidebar toggle without pixel-level jitter. - Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly. - TOC anchor navigation preserves `bookmarkStart`/`bookmarkEnd` order. - Image alpha modifiers process correctly on import and export. - Font picker keyboard behavior consistent across selection modes. - Formatting is preserved when typing text over a toolbar font selection.
Now I have enough context. Let me write the release notes based on the actual changes: ### What's New - **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts. - **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale. - **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling. - **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport. - **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs. - **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring. - **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element. - **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry. - **TOC interactions** β Hover highlighting and section-link navigation for table of contents. ### Improvements - **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately. - **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API (groupTrackedChanges), mirroring the comments containment rule. - **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent. - **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge. - **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule. - **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow. - **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references. - **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution. ### Fixes - **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range. - **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers. - **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their PM start instead of null, preventing frozen selections during active drags. - **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties. - **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range. - **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff. - **UV-deprecated legacy visual testing infrastructure** β Removed `/devtools/visual-testing`; layout validation now runs in the standard test suite.
### What's New - **Textbox content editing** β Click to edit text inside textboxes in body, headers, footers, and table cells with full selection and caret support. - **Zoom modes and fit-width** β Choose zoom mode (`manual` or `fit-width` for auto-fit) and read state, calculations, bounds, and viewport metrics from `ui.zoom`. - **Viewport change events** β Listen for `viewport-change` when the container resizes to receive document width, available width, and calculated fit-zoom. - **Font family combobox** β Search for fonts in the toolbar by name and see per-document options with substitution evidence. - **Comments activation API** β Highlight comments without scrolling using `ui.comments.setActive()`, and access the captured selection from pending comment events. - **Text range viewport rects** β Pass Document API text targets to `ui.viewport.getRect()` to get painted rects for overlay positioning. - **Scroll container access** β Call `ui.viewport.getScrollContainer()` to find the element that actually scrolls, or null for window scroll. - **Sidebar geometry updates** β `ui.viewport.observe` fires when the comments rail opens or closes. - **TOC interactions** β Hover highlights sections in the table of contents, and click navigates to them. ### Improvements - **Column balancing** β Multi-column sections balance at continuous section breaks, matching Word's behavior. - **Grouped tracked changes** β Inline cell changes inside a whole-table tracked change now group as one review item. - **Line break serialization** β Newlines in text mutations serialize as `<w:br/>` and round-trip without loss. - **Tab and soft-break carets** β Tab carets anchor to line top, and soft-break carets position at line start with alignment awareness. - **Page break suppression** β Removed blank pages when `pageBreakBefore` appears directly after an explicit page break. - **Textbox table rendering** β Tables inside textboxes render with correct alignment and text flow. - **Block identity repair** β Duplicate block identities fix automatically on compile. - **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions). ### Fixes - **Empty table cell selection** β Dragging a selection into an empty cell no longer collapses. - **Multiline selection rendering** β Interior lines of multi-line selections render full-width highlights. - **Empty cell geometry** β Empty cell paragraphs resolve to a valid position for interaction. - **Image alpha on export** β Images with transparency now preserve alpha on DOCX export. - **Linebreak text selection** β Search spans and selections spanning text+linebreak+text now coalesce correctly. - **Font toolbar updates** β Toolbar rebuilds when document fonts change or editor switches.
### What's New - **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts. - **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale. - **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling. - **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport. - **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs. - **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring. - **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element. - **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry. - **Table of contents interactions** β Hover highlighting and section-link navigation for table of contents. ### Improvements - **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately. - **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API, mirroring the comments containment rule. - **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent. - **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge. - **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule. - **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow. - **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references. - **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution. ### Fixes - **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range. - **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers. - **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their ProseMirror start instead of null, preventing frozen selections during active drags. - **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties. - **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range. - **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
Based on my analysis of the commits and changes, here are the release notes: ### Fixes - **Page breaks** β Removed redundant blank pages when a paragraph with pageBreakBefore style follows an explicit page break. Word's rule is structural, not geometric; we now match that behavior exactly. - **Table cell selection** β Fixed selection highlight disappearing over empty space inside table cells. Also fixed multiline selection rendering and empty cell hit detection. - **Textbox rendering** β Corrected rendering and text alignment for textboxes containing tables. - **Image alpha transparency** β Process `alphaModFix` attributes correctly during import and export to preserve image transparency settings. - **Block identity repair** β Runtime self-healing for duplicate block identities on compile, preventing stale references from breaking document operations. ### What's New - **Textbox editing** β Phase 0 and 1 of textbox content editing. Render and edit VML and DrawingML textbox content. Full support for textboxes in headers, footers, and table cells with proper position preservation through import/export. ### Improvements - **Font system** β Bundle docfonts 0.15 and 0.16 with expanded census rows and legal-cleared fallback fonts for better coverage. - **Documentation** β Updated examples for custom UI APIs and clarified viewport geometry behavior.
β¦6-06-12 Merge main into stable
β¦-20260612-190107
There was a problem hiding this comment.
π‘ Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3177183fd5
βΉοΈ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with π.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| "name": "superdoc", | ||
| "type": "module", | ||
| "version": "1.39.0", | ||
| "version": "1.40.0", |
There was a problem hiding this comment.
Recreate this as an actual stable merge
When this change is used to sync stable back to main, copying the published stable version into the manifest does not satisfy the stated release requirement because the reviewed commit is not a merge commit: git rev-list --parents -n 1 7a3e1aa19bebbfbff8ed3b48237df6e43eaa2067 shows only parent 8dce8ae8. That leaves the stable release commits/tags unreachable from main, so the @next prerelease calculation that depends on ancestry can remain behind the latest stable release; this needs to be recreated as a real merge commit from stable rather than just applying the version artifacts.
Useful? React with πΒ / π.
Codecov Reportβ All modified and coverable lines are covered by tests. π’ Thoughts on this report? Let us know! |
|
This pull request landed on |
Summary
Merges latest stable patches into main with a real merge commit so stable release tags remain reachable from main.
This keeps
@nextprerelease version calculation ahead of the latest published stable release.Merge requirement
This PR must be merged with GitHub's merge-commit option. Squash or rebase merging will discard stable ancestry and break
@nextversion calculation again.Conflict handling
Merge status:
clean.Version-only release artifact conflicts are auto-resolved to keep stable's already-published versions. Non-version conflicts fail this workflow instead of committing conflict markers.
Auto-created by sync-patches workflow.