fix(collaboration): memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924)#2030
Conversation
cce2b91 to
cf29539
Compare
There was a problem hiding this comment.
Pull request overview
This PR addresses multiple collaboration-related stability and performance issues in SuperDoc/Super Editor (Y.js observer leaks, Vue reactivity stack overflow, cursor awareness overhead, and Liveblocks reconnect behavior), plus a few example-app fixes.
Changes:
- Add cleanup paths for Y.js observers/listeners and avoid plugin-init observer leaks during export.
- Reduce UI/perf regressions by marking Y.js objects as non-reactive, deferring selection updates to
requestAnimationFrame, and debouncing local awareness cursor updates. - Fix repeated initialization/traversal behaviors and improve the Liveblocks example app reliability/config.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| packages/superdoc/src/core/SuperDoc.js | Uses markRaw() for Y.js objects; assigns stable local user color for awareness. |
| packages/superdoc/src/SuperDoc.vue | Defers selection reactive updates via RAF; cancels RAF on unmount. |
| packages/superdoc/src/SuperDoc.test.js | Makes RAF synchronous in tests and restores mocks after each test. |
| packages/super-editor/src/extensions/collaboration/collaboration.js | Tracks Y.js observers/handlers and adds onDestroy() cleanup; debounce supports .cancel(). |
| packages/super-editor/src/extensions/block-node/block-node.js | Ensures initialization traversal only happens once regardless of detected changes. |
| packages/super-editor/src/core/presentation-editor/PresentationEditor.ts | Debounces local awareness cursor updates; updates remote cursor refresh strategy after layout. |
| packages/super-editor/src/core/Editor.ts | Uses Transform directly for export prep to avoid plugin init/leaks. |
| examples/collaboration/liveblocks/vite.config.js | Adds local alias + fs allow-list for resolving built superdoc assets. |
| examples/collaboration/liveblocks/src/App.tsx | Prevents duplicate SuperDoc creation on reconnect; fixes awareness state rendering and adds “Connecting…” UI. |
Comments suppressed due to low confidence (1)
packages/superdoc/src/SuperDoc.vue:287
- When returning early (e.g.,
skipSelectionUpdateor viewing mode), any previously scheduledrequestAnimationFramecallback is left pending and can still callprocessSelectionChange, re-applying selection state after it was intentionally skipped/reset. CancelselectionUpdateRafIdat the start of this handler (before the early-return branches) so stale selection updates can’t run.
const onEditorSelectionChange = ({ editor, transaction }) => {
if (skipSelectionUpdate.value) {
// When comment is added selection will be equal to comment text
// Should skip calculations to keep text selection for comments correct
skipSelectionUpdate.value = false;
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cce2b919a8
ℹ️ 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".
…stability - Fix Y.js observer leaks in collaboration extension by adding onDestroy lifecycle hook with proper cleanup for media map, header/footer map, and afterTransaction listeners via module-level WeakMap - Fix yUndoPlugin observer leak in #prepareDocumentForExport by using Transform directly instead of creating a throwaway EditorState - Fix Vue traverse stack overflow by wrapping Y.js objects (ydoc, provider) with markRaw() before storing on the SuperDoc instance - Fix user color blinking by assigning a stable color on the external provider path before awareness broadcast - Fix Liveblocks room corruption by guarding against duplicate SuperDoc creation on provider reconnect (sync event fires on every reconnect) - Debounce local cursor awareness updates (100ms) to avoid ~190ms Liveblocks overhead per keystroke - Defer Vue selection state updates to RAF to prevent ~300ms flushJobs blocking per keystroke - Fix block-node hasInitialized flag to prevent repeated full-document traversals on every transaction - Fix debounce utility: use fn(...args) instead of fn.apply(this, args) and add .cancel() support for proper cleanup - Refactor Liveblocks example: extract useSuperdocCollaboration hook, hoist static styles, fix Strict Mode cleanup, correct awareness state property access
2d8a9d9 to
0c45bcb
Compare
The Liveblocks example aliases superdoc to the local dist build. Since y-prosemirror is bundled into superdoc's ES chunks (not externalized), its `import "yjs"` resolves from packages/superdoc/node_modules — a different physical copy than the example's own node_modules/yjs. Two copies of yjs breaks Y.js constructor instanceof checks, producing invalid CRDT operations that Liveblocks rejects with WebSocket code 1011. Adding resolve.dedupe forces Vite to resolve all yjs imports from a single location regardless of the importer's filesystem position.
…rder Three fixes for Liveblocks 1011 connection errors: 1. Fix destroy order: unmount app (editors) BEFORE destroying ydoc/provider. Previously, #cleanupCollaboration() destroyed the ydoc while editors were still alive — pending debounced writes could fire against a destroyed ydoc, corrupting the room state. Now editors are destroyed first, triggering each extension's onDestroy() which cancels timers and unobserves Y.js maps. 2. Reduce DOCX sync debounce from 1s to 30s. The actual document content syncs in real-time via y-prosemirror's XmlFragment. The DOCX blob in the Y.Map is only supplementary data for new joiners' converter setup. Writing it every 1s generates large Y.js updates (full DOCX XML serialization) that accumulate as Y.Map tombstones, gradually growing the room's stored data until Liveblocks rejects connections. 3. Add ydoc.isDestroyed guards in updateYdocDocxData and pushHeaderFooterToYjs to prevent writes to a destroyed ydoc. Also re-check after the async exportDocx call since the ydoc may have been destroyed mid-export. 4. Force single yjs copy via Vite alias instead of resolve.dedupe (which doesn't work for files outside the project root).
- Fix stale transaction in RAF: capture only editor, not transaction, in the selection change RAF callback since ProseMirror may process more keystrokes before RAF fires - Cancel pending RAF before early returns to prevent stale callbacks from repopulating selection state after mode switches - Use hash-based color assignment so different users get different cursor colors from the palette instead of all getting colors[0] - Change perfLog from console.warn to console.log since these are debug metrics, not warnings - Remove dead scheduleReRender/setReRenderCallback code from RemoteCursorManager (never invoked) - Gate window.editor assignment behind import.meta.env.DEV
y-prosemirror's cursor plugin only supports hex color format. The previous approach using HSL caused "unsupported color format" warnings and broken cursor rendering. Replace with a 24-color hex palette (down from HSL's 360 hues but still reduces collision probability to ~4% vs 12.5% with 8 colors). Also fix awarenessStatesToArray to prefer the user's pre-assigned color from awareness state instead of overriding with the palette color (which was undefined when config.colors was empty).
Changed the default ROOM_ID from 'superdoc-collab-v8' to 'superdoc-room' to align with updated naming conventions in the Liveblocks collaboration example.
The Liveblocks awareness object exposes clientID on awareness.doc.clientID instead of awareness.clientID (standard Yjs). This caused the local client filter in normalizeAwarenessStates to fail (clientID was undefined), so the user saw their own remote cursor label — which updated with 100ms debounce lag, creating a stale/mispositioned cursor overlay. Fix: Fall back to awareness.doc?.clientID when awareness.clientID is undefined. Also use immediate rendering for selection updates to reduce the race window where remote edits can cancel pending selection renders.
…mple - Reintroduced the import of defineConfig in vite.config.js for proper configuration. - Removed outdated aliases for superdoc/style.css and superdoc in Vite config. - Updated default ROOM_ID from 'superdoc-collab-v8' to 'superdoc-room' to align with naming conventions.
Via L3 deep analysis · critical risk |
blockNodePlugin's appendTransaction was incrementing sdBlockRev on every doc change, including Y.js-origin transactions from remote collaborators. This created an infinite feedback loop in collaboration: Tab A increments rev → syncs to Y.js → Tab B receives, increments rev → syncs back → Tab A increments again → forever. The fix checks ySyncPluginKey meta for isChangeOrigin and skips the sdBlockRev increment for Y.js-origin transactions. sdBlockId dedup still runs for all transactions to prevent split-related duplicates. Also restores superdoc dist aliases in the Liveblocks example Vite config, which are needed for the example to resolve the built package.
Visual diffs detectedPixel differences were found in visual tests. This is not blocking — reproduce locally with |
…d RAF selection in viewing mode
|
🎉 This PR is included in superdoc v1.15.0-next.4 The release is available on GitHub release |
# [1.15.0](v1.14.0...v1.15.0) (2026-02-20) ### Bug Fixes * **ai-actions:** preserve html/markdown insertion and prevent repeated formatted replacement ([#2117](#2117)) ([9f685e9](9f685e9)) * **ai:** support headless mode in EditorAdapter.applyPatch ([#1859](#1859)) ([cf9275d](cf9275d)) * **collaboration:** memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924) ([#2030](#2030)) ([a6827fd](a6827fd)), closes [#prepareDocumentForExport](https://github.com/superdoc-dev/superdoc/issues/prepareDocumentForExport) * **collab:** prevent stale view when remote Y.js changes bypass sdBlockRev increment ([#2099](#2099)) ([0895a93](0895a93)) * **converter:** handle null list lvlText and always clear numbering cache ([#2113](#2113)) ([336958c](336958c)) * **document-api:** remove search match cap and validate moveComment bounds ([6d3de67](6d3de67)) * export docx blobs with docx mime type ([#1849](#1849)) ([1bc466d](1bc466d)) * **export:** prevent DOCX corruption from entity encoding and orphaned delInstrText (SD-1943) ([#2102](#2102)) ([56e917f](56e917f)), closes [#replaceSpecialCharacters](https://github.com/superdoc-dev/superdoc/issues/replaceSpecialCharacters) [#1988](#1988) * **layout-bridge:** correct cell selection for tables with rowspan ([#1839](#1839)) ([0b782be](0b782be)) * **layout,converter:** text box rendering and page-relative anchor positioning (SD-1331, SD-1838) ([#2034](#2034)) ([3947f39](3947f39)) * **layout:** route list text-start calculations through resolveListTextStartPx ([02b14b8](02b14b8)) * **painter-dom:** use absolute page Y for page-relative anchors in header/footer decorations ([0b9bc72](0b9bc72)) * preserve selection highlight when opening toolbar dropdowns ([#2097](#2097)) ([a33568e](a33568e)) * structured content renders correct on hover and select ([#1843](#1843)) ([dab3f04](dab3f04)) * **super-editor:** add unsupported-content reporting across HTML/Markdown import paths ([#2115](#2115)) ([84880b7](84880b7)) * **super-editor:** handle partial comment file-sets and clean up stale parts on export ([#2123](#2123)) ([f63ae0a](f63ae0a)) * **super-editor:** restore <hr> contentBlock parsing and harden VML HR export fallback ([#2118](#2118)) ([da51b1f](da51b1f)) * table headers are incorrectly imported from html ([#2112](#2112)) ([e8d1480](e8d1480)) * table resizing regression ([#2091](#2091)) ([20ed24e](20ed24e)) * table resizing regression ([#2091](#2091)) ([9a07f1c](9a07f1c)) * **tables:** align tableHeader attrs with tableCell to fix oversized DOCX export widths ([#2114](#2114)) ([38f0430](38f0430)) * **tables:** fix autofit column scaling, cell width overflow, and page break splitting ([#1987](#1987)) ([61a3f6f](61a3f6f)) * **tables:** prevent tblInd double-shrink when using tblGrid widths (SD-1494) ([8750ece](8750ece)) * track changes comment text for formatting changes ([#2013](#2013)) ([b2a43ff](b2a43ff)) * wire DocumentApi to Editor.doc with lifecycle-safe caching ([57326ea](57326ea)) ### Features * cropped images ([#1940](#1940)) ([3767a49](3767a49)) * extend document-api with format, examples, create.heading ([#2092](#2092)) ([fdf8c7c](fdf8c7c)) * **lists:** support hidden list indicators via w:vanish ([#2069](#2069)) ([#2080](#2080)) ([0bed0fd](0bed0fd)) * the document API limited alpha ([#2087](#2087)) ([091c24c](091c24c))
|
🎉 This PR is included in superdoc v1.15.0 The release is available on GitHub release |
# [0.2.0](cli-v0.1.0...cli-v0.2.0) (2026-03-11) ### Bug Fixes * active track change ([#2163](#2163)) ([108c14d](108c14d)) * add currentTotalPages getter and pagination-update event ([#2202](#2202)) ([95b4579](95b4579)), closes [#958](#958) * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **ai-actions:** preserve html/markdown insertion and prevent repeated formatted replacement ([#2117](#2117)) ([9f685e9](9f685e9)) * **ai:** support headless mode in EditorAdapter.applyPatch ([#1859](#1859)) ([cf9275d](cf9275d)) * allow paste from context menu ([#1910](#1910)) ([b6666bf](b6666bf)) * always call resolveComment after custom TC bubble handlers (SD-2049) ([#2204](#2204)) ([34fb4e0](34fb4e0)) * anchor table overlaps text ([#1995](#1995)) ([fc05e29](fc05e29)) * **anchor-nav:** use correct scroll container for sub-page bookmark navigation ([a300536](a300536)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer) * backward replace insert text ([#2172](#2172)) ([66f0849](66f0849)) * before paragraph spacing inside table cells ([#1842](#1842)) ([c7efa85](c7efa85)) * **build:** add node polyfills to UMD bundle and angular to CI matrix ([13fa579](13fa579)) * **build:** remove dead vite-plugin-node-polyfills from UMD externals ([91de1fc](91de1fc)) * **ci:** include sub-package commits in superdoc release filter ([a2c237b](a2c237b)) * **ci:** move superdoc releaserc to package dir for proper commit filtering ([688f8e0](688f8e0)) * **cli:** add jsdoc params to formatReplaceResult ([#1923](#1923)) ([e52ddf9](e52ddf9)) * **cli:** add param jsdoc to expandGlobs ([df8c3c6](df8c3c6)) * **cli:** add returns jsdoc to formatSearchResult ([d0a0438](d0a0438)) * **cli:** lowercase docx in help text ([#1928](#1928)) ([13f9db6](13f9db6)) * **cli:** normalize dash in help text ([b2e7d36](b2e7d36)) * **cli:** prevent collab reopen from overwriting existing ydoc with blank document (SD-2138) ([#2296](#2296)) ([41b0345](41b0345)) * collaboration cursor styles fix ([fd6db10](fd6db10)) * **collaboration:** deduplicate updateYdocDocxData during replaceFile (SD-1920) ([#2162](#2162)) ([52962fc](52962fc)) * **collaboration:** memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924) ([#2030](#2030)) ([a6827fd](a6827fd)), closes [#prepareDocumentForExport](https://github.com/superdoc-dev/superdoc/issues/prepareDocumentForExport) * **collab:** prevent stale view when remote Y.js changes bypass sdBlockRev increment ([#2099](#2099)) ([0895a93](0895a93)) * **comments:** cross-page collision avoidance for floating comment bubbles (SD-1998) ([#2180](#2180)) ([6cfbeca](6cfbeca)) * **comments:** emit empty comment positions so undo clears orphan bubbles ([#2235](#2235)) ([12ba727](12ba727)) * **comments:** improve multiline comment input styling ([#2242](#2242)) ([e6a0dab](e6a0dab)) * **comments:** prevent comment mark from extending to adjacent typed text ([#2241](#2241)) ([07fecd8](07fecd8)) * **comments:** reduce sidebar jitter when clicking comments (SD-2034) ([#2250](#2250)) ([c3568d2](c3568d2)) * **comments:** remove synchronous dispatch from plugin apply() (SD-1940) ([#2157](#2157)) ([887175b](887175b)) * consolidate deletions under new replacement ([#2094](#2094)) ([0a84b86](0a84b86)) * context menu clicks would change selection position ([#1889](#1889)) ([ace0daf](ace0daf)) * **context-menu:** paste via context menu inserts at wrong position (SD-1302) ([#2110](#2110)) ([30f03f9](30f03f9)) * **converter:** handle absolute paths in header/footer relationship targets ([#1945](#1945)) ([9d82632](9d82632)) * **converter:** handle empty rPrChange run properties without dropping tracked-style runs ([c25d24d](c25d24d)) * **converter:** handle null list lvlText and always clear numbering cache ([#2113](#2113)) ([336958c](336958c)) * correctly pass table info when deriving inline run properties (SD-1865) ([#2007](#2007)) ([d752aff](d752aff)) * correctly set color and highlight of pasted text ([#2033](#2033)) ([41058b5](41058b5)) * **css:** scope ProseMirror CSS to prevent bleeding into host apps (SD-1850) ([#2134](#2134)) ([b9d98fa](b9d98fa)) * cursor drift during vertical arrow navigation (SD-1689) ([#1918](#1918)) ([982118d](982118d)) * disable footnotes typing ([#1974](#1974)) ([92b4d62](92b4d62)) * **doc-api:** stabilize create composability and expand SDK surface ([fc17167](fc17167)) * document-api improvements, plan mode, query.match, mutations ([6221580](6221580)) * **document-api:** add friendlier insert at node id with offset, or pos ([#2128](#2128)) ([c1d3682](c1d3682)) * **document-api:** add nodeId shorthand resolution across all operations ([#2131](#2131)) ([8abdaad](8abdaad)) * **document-api:** delete table cell fix ([#2209](#2209)) ([5e5c43f](5e5c43f)) * **document-api:** distribute columns command fixes ([#2207](#2207)) ([8f4eaf7](8f4eaf7)) * **document-api:** fix cell shading in document api ([#2215](#2215)) ([456f60e](456f60e)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** insert table cell ([#2210](#2210)) ([357ee90](357ee90)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **document-api:** plan-engine reliability fixes and error diagnostics ([#2185](#2185)) ([abfd81b](abfd81b)) * **document-api:** remove search match cap and validate moveComment bounds ([6d3de67](6d3de67)) * **document-api:** split table cell command ([#2217](#2217)) ([0b3e2b4](0b3e2b4)) * **document-api:** split table command ([#2214](#2214)) ([ec31699](ec31699)) * editor bundling in python CLI regression ([db0d130](db0d130)) * **editor:** prevent focus loss when typing in header/footer editors (SD-1993) ([#2238](#2238)) ([e1b8007](e1b8007)), closes [PresentationEditor.#flushRerenderQueue](https://github.com/PresentationEditor./issues/flushRerenderQueue) * **editor:** render styles applied inside SDT fields (SD-2011) ([#2188](#2188)) ([9c34be3](9c34be3)) * **editor:** selection highlight flickers when dragging across mark boundaries (SD-2024) ([#2205](#2205)) ([ba03e76](ba03e76)) * ensure we do not duplicate bubble text ([#1934](#1934)) ([c41cf9e](c41cf9e)) * export docx blobs with docx mime type ([#1849](#1849)) ([1bc466d](1bc466d)) * **export:** prevent DOCX corruption from entity encoding and orphaned delInstrText (SD-1943) ([#2102](#2102)) ([56e917f](56e917f)), closes [#replaceSpecialCharacters](https://github.com/superdoc-dev/superdoc/issues/replaceSpecialCharacters) [#1988](#1988) * **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](#2349)) ([f6dbb40](f6dbb40)) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * extract duplicate block identity normalization from docxImporter ([7f7ff93](7f7ff93)) * find tracked change for firefox ([#1899](#1899)) ([a39cb68](a39cb68)) * **format:** route format.caps through textTransform so w:caps persists on export ([#2297](#2297)) ([8e771e2](8e771e2)) * handle Uint8Array media values from persistence layers ([#2298](#2298)) ([0d4505c](0d4505c)) * harden markdown image conversion ([4ba1c25](4ba1c25)) * headless yjs ([#1913](#1913)) ([4cdecf7](4cdecf7)) * ignore sdBlockId when pasting content ([#2010](#2010)) ([1b08572](1b08572)) * image z-index and overlaps ([#1950](#1950)) ([39875ac](39875ac)) * improve backspace behavior near run boundaries for tracked changes ([#2175](#2175)) ([6c9c7a3](6c9c7a3)) * issue updating paragraph properties (SD-1778) ([#1944](#1944)) ([a9076ed](a9076ed)) * **layout-bridge:** correct cell selection for tables with rowspan ([#1839](#1839)) ([0b782be](0b782be)) * **layout-bridge:** defer table fragment click mapping to geometry fallback ([#1968](#1968)) ([0eac43c](0eac43c)) * **layout-engine:** text clipping inside table in document with multi-orientation, recursive pagination for deeply nested tables (SD-1962) ([#2140](#2140)) ([072c009](072c009)) * **layout,converter:** text box rendering and page-relative anchor positioning (SD-1331, SD-1838) ([#2034](#2034)) ([3947f39](3947f39)) * **layout:** per-section footer constraints for multi-section docs (SD-1837) ([#2022](#2022)) ([e11acc5](e11acc5)) * **layout:** route list text-start calculations through resolveListTextStartPx ([02b14b8](02b14b8)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * load alternative style definitions when main one is missing ([#1922](#1922)) ([bb4083f](bb4083f)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * markdown block-separator blank lines and heading split style-mark normalization ([e988adc](e988adc)) * mount Vue on wrapper element to prevent host framework conflicts (SD-1832) ([#1971](#1971)) ([0c4bdda](0c4bdda)) * normalize bookmarks in tables ([#1892](#1892)) ([369b7e1](369b7e1)) * normalize review namespace into trackChanges, harden input validation ([33e907b](33e907b)) * outside click for toolbar dropdown ([#2174](#2174)) ([5f859c7](5f859c7)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * **painter-dom:** use absolute page Y for page-relative anchors in header/footer decorations ([0b9bc72](0b9bc72)) * performance ([#1914](#1914)) ([0747b03](0747b03)) * persist comments on reload in collab mode ([#1949](#1949)) ([2b2e56e](2b2e56e)) * pict import/export ([#2135](#2135)) ([7e97b7b](7e97b7b)) * **placeholder:** guard against depth-0 selection in placeholder decoration ([#2025](#2025)) ([e5ee7cf](e5ee7cf)) * portrait orientation in document-api ([dafab76](dafab76)) * prefer full decoration range ([#2239](#2239)) ([ac15e31](ac15e31)), closes [#collectDesiredState](https://github.com/superdoc-dev/superdoc/issues/collectDesiredState) [#resolveEffectiveRanges](https://github.com/superdoc-dev/superdoc/issues/resolveEffectiveRanges) [#setPreviousRanges](https://github.com/superdoc-dev/superdoc/issues/setPreviousRanges) * preserve line spacing and indentation on Google Docs paste ([#2183](#2183)) ([b9a7357](b9a7357)), closes [#2151](#2151) * preserve selection highlight when opening toolbar dropdowns ([#2097](#2097)) ([a33568e](a33568e)) * preserve text selection highlight on right-click ([#1994](#1994)) ([db5466a](db5466a)) * preserve text-align on paste from Google Docs ([#2208](#2208)) ([762231b](762231b)) * **rendering:** show comment highlight on text with Word highlight formatting ([f6d956e](f6d956e)) * replace Node.js Buffer APIs with browser-native alternatives ([#2028](#2028)) ([b17774a](b17774a)), closes [#exportProcessMediaFiles](https://github.com/superdoc-dev/superdoc/issues/exportProcessMediaFiles) * replace Node.js Buffer APIs with browser-native alternatives ([#2028](#2028)) ([d6141ec](d6141ec)), closes [#exportProcessMediaFiles](https://github.com/superdoc-dev/superdoc/issues/exportProcessMediaFiles) * resolve published type declarations for Angular/TS consumers and update example ([#2026](#2026)) ([35344bd](35344bd)) * resolve sdk/adapter composability issues ([b60b17e](b60b17e)) * return null instead of blank num definition when not found ([#1990](#1990)) ([3acac3b](3acac3b)) * rollback comments colors / ui ([#2216](#2216)) ([a99b5ab](a99b5ab)) * **scroll:** wait for virtualized page mount and center text element ([#2221](#2221)) ([95f634e](95f634e)) * **sdk:** checkpoint collab sessions even when not dirty ([689f6b5](689f6b5)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **shapes:** render grouped DrawingML shapes with custom geometry (SD-1877) ❇️ ([#2105](#2105)) ([14985a5](14985a5)) * slash menu invisible in presentation mode ([#2018](#2018)) ([513bc33](513bc33)), closes [#computeCaretLayoutRect](https://github.com/superdoc-dev/superdoc/issues/computeCaretLayoutRect) * splitting run with header adds empty row ([#2229](#2229)) ([e1965fc](e1965fc)) * structured content renders correct on hover and select ([#1843](#1843)) ([dab3f04](dab3f04)) * **super-converter:** add tableHeader export handler to fix corrupted docx ([#1900](#1900)) ([010799b](010799b)) * **super-converter:** handle empty pic:spPr in image import ([#2254](#2254)) ([2b8dbce](2b8dbce)) * **super-converter:** resolve table style conditional shading on cell import (SD-1833) ([#1985](#1985)) ([5e206f4](5e206f4)) * **super-editor:** add unsupported-content reporting across HTML/Markdown import paths ([#2115](#2115)) ([84880b7](84880b7)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **super-editor:** allow Backspace to delete empty paragraphs in suggesting mode ([#1966](#1966)) ([820c73c](820c73c)) * **super-editor:** backspace across run boundaries without splitting list items ([#2258](#2258)) ([27ccb64](27ccb64)) * **super-editor:** handle partial comment file-sets and clean up stale parts on export ([#2123](#2123)) ([f63ae0a](f63ae0a)) * **super-editor:** prevent invalid paragraph updates for nested runs in headless import ([8c11718](8c11718)) * **super-editor:** prevent invalid paragraph updates for nested runs in headless import ([c5ee6e3](c5ee6e3)) * **super-editor:** restore <hr> contentBlock parsing and harden VML HR export fallback ([#2118](#2118)) ([da51b1f](da51b1f)) * **super-editor:** restore marks correctly after clear format + undo (SD-1771) ([#1967](#1967)) ([bc9dc76](bc9dc76)) * **superdoc:** enhance comment input focus handling and edit init ([#1935](#1935)) ([0e9112c](0e9112c)) * **superdoc:** update comment text ([b5ff644](b5ff644)) * **superdoc:** update entry point comment ([#1926](#1926)) ([0dde298](0dde298)) * support cell spacing ([#1879](#1879)) ([1639967](1639967)) * table headers are incorrectly imported from html ([#2112](#2112)) ([e8d1480](e8d1480)) * table resizing regression ([#2091](#2091)) ([20ed24e](20ed24e)) * table resizing regression ([#2091](#2091)) ([9a07f1c](9a07f1c)) * **table:** resolve column resize only working on first page (SD-1772) ([#1959](#1959)) ([df43867](df43867)) * **tables:** align tableHeader attrs with tableCell to fix oversized DOCX export widths ([#2114](#2114)) ([38f0430](38f0430)) * **tables:** defaultTableStyle support, cell fixes ([#2246](#2246)) ([74fca9c](74fca9c)) * **tables:** expand auto-width tables to fill available page width ([#2109](#2109)) ([15f36bc](15f36bc)) * **tables:** fix autofit column scaling, cell width overflow, and page break splitting ([#1987](#1987)) ([61a3f6f](61a3f6f)) * **tables:** preserve TableGrid defaults and style-driven spacing/bor… ([#2230](#2230)) ([b0a482f](b0a482f)) * **tables:** prevent tblInd double-shrink when using tblGrid widths (SD-1494) ([8750ece](8750ece)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * text highlight on export ([#2189](#2189)) ([9cbd022](9cbd022)) * **toc:** correct zoom scaling and rect.top bug in anchor scroll ([16c768f](16c768f)) * track changes comment text for formatting changes ([#2013](#2013)) ([b2a43ff](b2a43ff)) * track changes in cli ([3742f68](3742f68)) * track highlight changes ([#2192](#2192)) ([e164625](e164625)) * **track-changes:** correct format change description for already-formatted text (SD-2077) ([#2253](#2253)) ([b2ffc0d](b2ffc0d)) * **track-changes:** handle ReplaceAroundStep in tracked changes mode (SD-2061) ([#2225](#2225)) ([8f3cbe4](8f3cbe4)) * **track-changes:** remove ghost TrackFormat on multi-node format cancel ([#2233](#2233)) ([e925ef9](e925ef9)) * **tracked-changes:** colors should be restored when format rejected ([#1970](#1970)) ([01ea504](01ea504)) * **tracked-changes:** fix suggested insertions from paste failures ([#1969](#1969)) ([e74c14a](e74c14a)) * trigger patch release ([7bc1b74](7bc1b74)) * trigger patch release ([32ced9c](32ced9c)) * trigger patch release ([da7f484](da7f484)) * trigger release ([8367dd6](8367dd6)) * undo/redo actions ([#2161](#2161)) ([495e92f](495e92f)) * use correct template syntax for GitHub release URL in PR comments ([9d1bca2](9d1bca2)) * use DEFLATE compression for docx export instead of STORE ([#1933](#1933)) ([ebcd986](ebcd986)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) * **virtualization:** correct scroll mapping and viewport sizing at non-100% zoom ([#2171](#2171)) ([84af4c0](84af4c0)), closes [#registryKey](https://github.com/superdoc-dev/superdoc/issues/registryKey) * wire DocumentApi to Editor.doc with lifecycle-safe caching ([57326ea](57326ea)) * zIndex updates ([#1973](#1973)) ([3ca7aa3](3ca7aa3)) ### Features * adaptive insert table column width ([#1533](#1533)) ([d4cae2d](d4cae2d)) * add pdf infra, migrate layers ([#2078](#2078)) ([7d416e9](7d416e9)) * add public scroll to page method ([#1791](#1791)) ([1b7687b](1b7687b)) * allow custom accept/reject handlers for TC bubbles ([#1921](#1921)) ([e30abf6](e30abf6)) * **comments:** improve floating comments ui ([#2195](#2195)) ([e870cfb](e870cfb)) * cropped images ([#1940](#1940)) ([3767a49](3767a49)) * **document-api:** add format operations font size alignment color font family ([#2179](#2179)) ([f19c688](f19c688)) * **document-api:** add get markdown to sdks ([e42b56d](e42b56d)) * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** add plan-based mutation engine with query.match and style capture ([#2160](#2160)) ([365293a](365293a)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** default table style setting ([#2248](#2248)) ([3ad4e9f](3ad4e9f)) * **document-api:** default target-less insert to document end ([#2244](#2244)) ([c717e2b](c717e2b)) * **document-api:** doc default initial styles ([#2184](#2184)) ([f25e41f](f25e41f)) * **document-api:** format.paragraph for w:pPr formatting ([#2218](#2218)) ([32c9991](32c9991)) * **document-api:** history name space ([#2219](#2219)) ([41dea37](41dea37)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** include anchored text in comments list response ([#2177](#2177)) ([b3a2912](b3a2912)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** inline formatting parity core end-to-end ([#2197](#2197)) ([b405b03](b405b03)) * **document-api:** inline formatting rpr parity ([#2198](#2198)) ([41ab771](41ab771)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **document-api:** lists namespace ([#2223](#2223)) ([09ebfcb](09ebfcb)) * **document-api:** make styles.apply registry-driven with schema/validation ([#2267](#2267)) ([cab54ba](cab54ba)) * **document-api:** more image commands ([#2295](#2295)) ([4fbbbc9](4fbbbc9)) * **document-api:** more lists commands ([#2288](#2288)) ([eb48bf1](eb48bf1)) * **document-api:** section commands ([#2199](#2199)) ([ec4abe3](ec4abe3)) * **document-api:** support deleting entire block nodes not only text ([#2181](#2181)) ([2897246](2897246)) * **document-api:** table of contents commands ([#2200](#2200)) ([baa72c4](baa72c4)) * **document-api:** tables namespace and commands ([#2182](#2182)) ([b80ee31](b80ee31)) * **document-api:** toc commands ([#2220](#2220)) ([767e010](767e010)) * enabled telemetry by default and added documentation ([#2001](#2001)) ([8598ef7](8598ef7)) * enhance telemetry handling for sub-editors ([#2017](#2017)) ([37bc030](37bc030)) * expose setZoom and getZoom API on SuperDoc ([#2137](#2137)) ([ab09dd5](ab09dd5)), closes [#928](#928) * extend document-api with format, examples, create.heading ([#2092](#2092)) ([fdf8c7c](fdf8c7c)) * **images:** allow drag-and-drop for images in editor ([#2227](#2227)) ([4b36780](4b36780)) * layout snapshot testing ([#2035](#2035)) ([b070cd7](b070cd7)) * **layout-engine:** render table headers, tblLook support ([#2256](#2256)) ([db6a2ff](db6a2ff)) * **link-popover:** custom link popovers ([#2222](#2222)) ([070190f](070190f)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **lists:** support hidden list indicators via w:vanish ([#2069](#2069)) ([#2080](#2080)) ([0bed0fd](0bed0fd)) * llm tools (alpha version) ([#2292](#2292)) ([f954e3d](f954e3d)) * **markdown:** add markdown override to sdk, improve conversion ([#2196](#2196)) ([04a1c71](04a1c71)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * preserve w:view setting through DOCX round-trip ([#2190](#2190)) ([48b4210](48b4210)), closes [#2070](#2070) * real time collab in python sdk ([#2243](#2243)) ([dc3b4fd](dc3b4fd)) * **super-editor:** add w:lock support for StructuredContent nodes (SD-1616) ([#1939](#1939)) ([2c16f1c](2c16f1c)) * superdoc cli ([d808464](d808464)) * superdoc sdk ([#2129](#2129)) ([3f55d23](3f55d23)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tables:** allow resizing table rows ([#2226](#2226)) ([2c6da10](2c6da10)) * **tables:** improve cell color application (context), column dragging, table pasting ([#2228](#2228)) ([066b9eb](066b9eb)) * **table:** toggle header row sets both cell types and repeatHeader atomically ([#2245](#2245)) ([2f5899d](2f5899d)) * telemetry ([#1932](#1932)) ([fab3ce9](fab3ce9)) * **template-builder:** add cspNonce support ([#1911](#1911)) ([5b7b34e](5b7b34e)) * **template-builder:** add cspNonce support ([#1911](#1911)) ([bcb9d28](bcb9d28)) * the document API limited alpha ([#2087](#2087)) ([091c24c](091c24c)) * **track-changes:** clear comment bubbles when bulk accept or reject TCs ([#2159](#2159)) ([27fbe8e](27fbe8e)) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * update telemetry configuration to prioritize root licenseKey ([#2016](#2016)) ([3b4ff6b](3b4ff6b)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82)) * whiteboard ([#1954](#1954)) ([c9d1484](c9d1484)) ### Performance Improvements * **build:** migrate to rolldown-vite for ~2x faster builds ([#2006](#2006)) ([74004c3](74004c3)) * **build:** remove redundant steps and add fast dev build (SD-1886) ([#1999](#1999)) ([db46bf8](db46bf8)) * **comments:** batch tracked change comment creation on load ([#2166](#2166)) ([0c2eca5](0c2eca5)) * **comments:** batch tracked change creation and virtualize floating bubbles (SD-1997) ([#2168](#2168)) ([70fd7d9](70fd7d9))
|
🎉 This PR is included in superdoc-cli v0.2.0 The release is available on GitHub release |
* chore(release): 1.18.0 [skip ci]
# [1.18.0](https://github.com/superdoc-dev/superdoc/compare/v1.17.0...v1.18.0) (2026-03-05)
### Bug Fixes
* add type definitions for PresentationEditor ([#2271](https://github.com/superdoc-dev/superdoc/issues/2271)) ([5402196](https://github.com/superdoc-dev/superdoc/commit/5402196e73997b83ddd1d4f270c82e3a85c3365f))
* **document-api:** fix markdown to image ([bf0e664](https://github.com/superdoc-dev/superdoc/commit/bf0e6647820c3987b4100f8f9804e413cfb33511))
* **document-api:** make lists.setType preserve sequence continuity ([#2304](https://github.com/superdoc-dev/superdoc/issues/2304)) ([da09826](https://github.com/superdoc-dev/superdoc/commit/da0982647cd57b4e775794af52e1a23b3d6f2afe))
* **editor:** prevent focus loss when typing in header/footer editors (SD-1993) ([#2238](https://github.com/superdoc-dev/superdoc/issues/2238)) ([e1b8007](https://github.com/superdoc-dev/superdoc/commit/e1b80074377b221873158ce5befc8fa2a908d1a8)), closes [PresentationEditor.#flushRerenderQueue](https://github.com/PresentationEditor./issues/flushRerenderQueue)
* **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](https://github.com/superdoc-dev/superdoc/commit/36058c3640d12eeba8a3cf671d4cb2b46786d1d1))
* **format:** route format.caps through textTransform so w:caps persists on export ([#2297](https://github.com/superdoc-dev/superdoc/issues/2297)) ([8e771e2](https://github.com/superdoc-dev/superdoc/commit/8e771e2d2ea75d4bc72bc7f589fd9279f8027478))
* handle Uint8Array media values from persistence layers ([#2298](https://github.com/superdoc-dev/superdoc/issues/2298)) ([0d4505c](https://github.com/superdoc-dev/superdoc/commit/0d4505c77ac1c44939e8f7874a08f827a7a8e08c))
* harden markdown image conversion ([4ba1c25](https://github.com/superdoc-dev/superdoc/commit/4ba1c254c77aaa37f552f2ad9fd06ec55e802b23))
* **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](https://github.com/superdoc-dev/superdoc/issues/2308)) ([ea4be68](https://github.com/superdoc-dev/superdoc/commit/ea4be68fb6deea669140d4af5934ba17a6a6571b))
* make expected revision optional, update docs ([#2265](https://github.com/superdoc-dev/superdoc/issues/2265)) ([250bb5b](https://github.com/superdoc-dev/superdoc/commit/250bb5b6131fd68a83a3d0959dc0a5808fb5f152))
* **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](https://github.com/superdoc-dev/superdoc/issues/2291)) ([fb3d25e](https://github.com/superdoc-dev/superdoc/commit/fb3d25e809019407b1298c28f8c10ac184e1dc73))
* portrait orientation in document-api ([dafab76](https://github.com/superdoc-dev/superdoc/commit/dafab76af5f249c49936a0250e4e54ae4719b305))
* **sdk:** keep sdk sessions alive in non collab ([#2289](https://github.com/superdoc-dev/superdoc/issues/2289)) ([c634ee8](https://github.com/superdoc-dev/superdoc/commit/c634ee87bb6ac29b14b0f02d6080b2420cfe3dc6))
* **super-editor:** align image resize handles with actual image position ([#2293](https://github.com/superdoc-dev/superdoc/issues/2293)) ([217bdce](https://github.com/superdoc-dev/superdoc/commit/217bdcef86d736825b0bfe55880ac57620d1b4d3))
* **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](https://github.com/superdoc-dev/superdoc/issues/2262)) ([7bafb7f](https://github.com/superdoc-dev/superdoc/commit/7bafb7f9e0fcc0109a0a976d1a01e9ee408f7291))
* **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](https://github.com/superdoc-dev/superdoc/issues/2263)) ([370ca5e](https://github.com/superdoc-dev/superdoc/commit/370ca5ea025bd5fb57f1dfe9b79871afbcdfd9b5))
### Features
* **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](https://github.com/superdoc-dev/superdoc/issues/2264)) ([c554678](https://github.com/superdoc-dev/superdoc/commit/c554678b425c7b97670aff5d7389bbbdfe8a5c04))
* **document-api:** clear content command ([#2300](https://github.com/superdoc-dev/superdoc/issues/2300)) ([46b5261](https://github.com/superdoc-dev/superdoc/commit/46b5261f34b6793d41ab6452fb117e0f81b7437a))
* **document-api:** hyperlinks commands ([#2294](https://github.com/superdoc-dev/superdoc/issues/2294)) ([4d3bebd](https://github.com/superdoc-dev/superdoc/commit/4d3bebd6c89dd1cbd5c143e61c71beca45daba1b))
* **document-api:** initial image commands ([#2290](https://github.com/superdoc-dev/superdoc/issues/2290)) ([d624231](https://github.com/superdoc-dev/superdoc/commit/d624231a97872af746d93de70129ac734cd363b8))
* **document-api:** insert table adds extra separator to match ms word ([#2301](https://github.com/superdoc-dev/superdoc/issues/2301)) ([5e49613](https://github.com/superdoc-dev/superdoc/commit/5e496130249a8fc5403f201c667106c5da4961fb))
* **document-api:** make styles.apply registry-driven with schema/validation ([#2267](https://github.com/superdoc-dev/superdoc/issues/2267)) ([cab54ba](https://github.com/superdoc-dev/superdoc/commit/cab54badc20e7002ce82be6f4e02f84e71802717))
* **document-api:** more image commands ([#2295](https://github.com/superdoc-dev/superdoc/issues/2295)) ([4fbbbc9](https://github.com/superdoc-dev/superdoc/commit/4fbbbc987e2469b8fd70c1a07a79dacc801f6733))
* **document-api:** more lists commands ([#2288](https://github.com/superdoc-dev/superdoc/issues/2288)) ([eb48bf1](https://github.com/superdoc-dev/superdoc/commit/eb48bf1cf72da0c780998cf033e851aadc144206))
* **links:** convert pasted hyperlinks into real docx links ([#2270](https://github.com/superdoc-dev/superdoc/issues/2270)) ([7d75522](https://github.com/superdoc-dev/superdoc/commit/7d7552203f0bbc6779149656e447432d50eb2697))
* **markdown:** import images from markdown ([#2303](https://github.com/superdoc-dev/superdoc/issues/2303)) ([b2f6a1a](https://github.com/superdoc-dev/superdoc/commit/b2f6a1ad5692153b60edb5b88347b5c8e37191f7))
* support TIFF images in DOCX rendering ([#2284](https://github.com/superdoc-dev/superdoc/issues/2284)) ([6436d86](https://github.com/superdoc-dev/superdoc/commit/6436d861efbdb52d592a0069fc84a1f5d830f358)), closes [#2064](https://github.com/superdoc-dev/superdoc/issues/2064)
* **tracked-changes:** allow partial tracked change resolution ([#2252](https://github.com/superdoc-dev/superdoc/issues/2252)) ([988598d](https://github.com/superdoc-dev/superdoc/commit/988598d7f20e263e81715a2f0195abc2ecffe75b))
* **web-view:** new layout engine based web view ([#2100](https://github.com/superdoc-dev/superdoc/issues/2100)) ([a353b82](https://github.com/superdoc-dev/superdoc/commit/a353b82a3c0404db13cda8ab72f7500b2aae8e09))
* chore(release): 1.18.0 [skip ci]
# [1.18.0](https://github.com/superdoc-dev/superdoc/compare/v1.17.0...v1.18.0) (2026-03-05)
### Bug Fixes
* add type definitions for PresentationEditor ([#2271](https://github.com/superdoc-dev/superdoc/issues/2271)) ([5402196](https://github.com/superdoc-dev/superdoc/commit/5402196e73997b83ddd1d4f270c82e3a85c3365f))
* **document-api:** fix markdown to image ([bf0e664](https://github.com/superdoc-dev/superdoc/commit/bf0e6647820c3987b4100f8f9804e413cfb33511))
* **document-api:** make lists.setType preserve sequence continuity ([#2304](https://github.com/superdoc-dev/superdoc/issues/2304)) ([da09826](https://github.com/superdoc-dev/superdoc/commit/da0982647cd57b4e775794af52e1a23b3d6f2afe))
* **editor:** prevent focus loss when typing in header/footer editors (SD-1993) ([#2238](https://github.com/superdoc-dev/superdoc/issues/2238)) ([e1b8007](https://github.com/superdoc-dev/superdoc/commit/e1b80074377b221873158ce5befc8fa2a908d1a8)), closes [PresentationEditor.#flushRerenderQueue](https://github.com/PresentationEditor./issues/flushRerenderQueue)
* **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](https://github.com/superdoc-dev/superdoc/commit/36058c3640d12eeba8a3cf671d4cb2b46786d1d1))
* **format:** route format.caps through textTransform so w:caps persists on export ([#2297](https://github.com/superdoc-dev/superdoc/issues/2297)) ([8e771e2](https://github.com/superdoc-dev/superdoc/commit/8e771e2d2ea75d4bc72bc7f589fd9279f8027478))
* handle Uint8Array media values from persistence layers ([#2298](https://github.com/superdoc-dev/superdoc/issues/2298)) ([0d4505c](https://github.com/superdoc-dev/superdoc/commit/0d4505c77ac1c44939e8f7874a08f827a7a8e08c))
* harden markdown image conversion ([4ba1c25](https://github.com/superdoc-dev/superdoc/commit/4ba1c254c77aaa37f552f2ad9fd06ec55e802b23))
* **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](https://github.com/superdoc-dev/superdoc/issues/2308)) ([ea4be68](https://github.com/superdoc-dev/superdoc/commit/ea4be68fb6deea669140d4af5934ba17a6a6571b))
* make expected revision optional, update docs ([#2265](https://github.com/superdoc-dev/superdoc/issues/2265)) ([250bb5b](https://github.com/superdoc-dev/superdoc/commit/250bb5b6131fd68a83a3d0959dc0a5808fb5f152))
* **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](https://github.com/superdoc-dev/superdoc/issues/2291)) ([fb3d25e](https://github.com/superdoc-dev/superdoc/commit/fb3d25e809019407b1298c28f8c10ac184e1dc73))
* portrait orientation in document-api ([dafab76](https://github.com/superdoc-dev/superdoc/commit/dafab76af5f249c49936a0250e4e54ae4719b305))
* **sdk:** keep sdk sessions alive in non collab ([#2289](https://github.com/superdoc-dev/superdoc/issues/2289)) ([c634ee8](https://github.com/superdoc-dev/superdoc/commit/c634ee87bb6ac29b14b0f02d6080b2420cfe3dc6))
* **super-editor:** align image resize handles with actual image position ([#2293](https://github.com/superdoc-dev/superdoc/issues/2293)) ([217bdce](https://github.com/superdoc-dev/superdoc/commit/217bdcef86d736825b0bfe55880ac57620d1b4d3))
* **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](https://github.com/superdoc-dev/superdoc/issues/2262)) ([7bafb7f](https://github.com/superdoc-dev/superdoc/commit/7bafb7f9e0fcc0109a0a976d1a01e9ee408f7291))
* **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](https://github.com/superdoc-dev/superdoc/issues/2263)) ([370ca5e](https://github.com/superdoc-dev/superdoc/commit/370ca5ea025bd5fb57f1dfe9b79871afbcdfd9b5))
### Features
* **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](https://github.com/superdoc-dev/superdoc/issues/2264)) ([c554678](https://github.com/superdoc-dev/superdoc/commit/c554678b425c7b97670aff5d7389bbbdfe8a5c04))
* **document-api:** clear content command ([#2300](https://github.com/superdoc-dev/superdoc/issues/2300)) ([46b5261](https://github.com/superdoc-dev/superdoc/commit/46b5261f34b6793d41ab6452fb117e0f81b7437a))
* **document-api:** hyperlinks commands ([#2294](https://github.com/superdoc-dev/superdoc/issues/2294)) ([4d3bebd](https://github.com/superdoc-dev/superdoc/commit/4d3bebd6c89dd1cbd5c143e61c71beca45daba1b))
* **document-api:** initial image commands ([#2290](https://github.com/superdoc-dev/superdoc/issues/2290)) ([d624231](https://github.com/superdoc-dev/superdoc/commit/d624231a97872af746d93de70129ac734cd363b8))
* **document-api:** insert table adds extra separator to match ms word ([#2301](https://github.com/superdoc-dev/superdoc/issues/2301)) ([5e49613](https://github.com/superdoc-dev/superdoc/commit/5e496130249a8fc5403f201c667106c5da4961fb))
* **document-api:** make styles.apply registry-driven with schema/validation ([#2267](https://github.com/superdoc-dev/superdoc/issues/2267)) ([cab54ba](https://github.com/superdoc-dev/superdoc/commit/cab54badc20e7002ce82be6f4e02f84e71802717))
* **document-api:** more image commands ([#2295](https://github.com/superdoc-dev/superdoc/issues/2295)) ([4fbbbc9](https://github.com/superdoc-dev/superdoc/commit/4fbbbc987e2469b8fd70c1a07a79dacc801f6733))
* **document-api:** more lists commands ([#2288](https://github.com/superdoc-dev/superdoc/issues/2288)) ([eb48bf1](https://github.com/superdoc-dev/superdoc/commit/eb48bf1cf72da0c780998cf033e851aadc144206))
* **links:** convert pasted hyperlinks into real docx links ([#2270](https://github.com/superdoc-dev/superdoc/issues/2270)) ([7d75522](https://github.com/superdoc-dev/superdoc/commit/7d7552203f0bbc6779149656e447432d50eb2697))
* **markdown:** import images from markdown ([#2303](https://github.com/superdoc-dev/superdoc/issues/2303)) ([b2f6a1a](https://github.com/superdoc-dev/superdoc/commit/b2f6a1ad5692153b60edb5b88347b5c8e37191f7))
* support TIFF images in DOCX rendering ([#2284](https://github.com/superdoc-dev/superdoc/issues/2284)) ([6436d86](https://github.com/superdoc-dev/superdoc/commit/6436d861efbdb52d592a0069fc84a1f5d830f358)), closes [#2064](https://github.com/superdoc-dev/superdoc/issues/2064)
* **tracked-changes:** allow partial tracked change resolution ([#2252](https://github.com/superdoc-dev/superdoc/issues/2252)) ([988598d](https://github.com/superdoc-dev/superdoc/commit/988598d7f20e263e81715a2f0195abc2ecffe75b))
* **web-view:** new layout engine based web view ([#2100](https://github.com/superdoc-dev/superdoc/issues/2100)) ([a353b82](https://github.com/superdoc-dev/superdoc/commit/a353b82a3c0404db13cda8ab72f7500b2aae8e09))
* fix(export): prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) (#2349)
Cherry-pick from main (fed1d6b23)
* chore(release): 1.18.1 [skip ci]
## [1.18.1](https://github.com/superdoc-dev/superdoc/compare/v1.18.0...v1.18.1) (2026-03-10)
### Bug Fixes
* **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](https://github.com/superdoc-dev/superdoc/issues/2349)) ([f6dbb40](https://github.com/superdoc-dev/superdoc/commit/f6dbb404ad998e502a49df7e0ffded9f2a236321))
* fix(rendering): show comment highlight on text with Word highlight formatting
SD-2188: The `!textRun.highlight` guard in the renderer prevented comment
highlights from being applied when text also had Word highlight formatting
(`<w:highlight>`). This caused comments on highlighted text to be invisible.
Removed the guard so comment highlights always take precedence, matching
Word's behavior.
* test(rendering): strengthen SD-2188 assertion to verify comment color overrides Word highlight
The previous assertion (not.toBe('')) passed on both old and new code
since applyRunStyles already sets backgroundColor from the Word highlight.
Now asserts the color is NOT the Word yellow (#ffff00).
* test(rendering): add active and faded comment highlight tests with Word highlight (SD-2188)
Cover the full matrix: comment highlight overrides Word highlight
in idle, active, and faded states.
* fix(anchor-nav): use correct scroll container for sub-page bookmark navigation
goToAnchor was scrolling the visibleHost element which has overflow:visible
and cannot scroll. Now uses #scrollContainer (the first scrollable ancestor)
and computes precise Y offsets from layout fragment positions for sub-page
scroll precision.
SD-2186
* docs: add PresentationEditor CLAUDE.md with DOM/scroll hierarchy
* fix(toc): correct zoom scaling and rect.top bug in anchor scroll
- Remove rect?.top (Rect type has no top property, was always undefined)
- Scale fragmentY by zoom factor before mixing with screen-space coords
- Thread zoom from PresentationEditor into goToAnchor deps
- Add unit tests for precision scroll, zoom scaling, and gap fallback
* test(toc): add behavior tests for TOC anchor click navigation
Tests clicking TOC entry links and verifying:
- Caret moves to the bookmark position (SD-2186)
- Scroll position changes for cross-page navigation
* chore(release): 1.18.2 [skip ci]
## [1.18.2](https://github.com/superdoc-dev/superdoc/compare/v1.18.1...v1.18.2) (2026-03-11)
### Bug Fixes
* **anchor-nav:** use correct scroll container for sub-page bookmark navigation ([a300536](https://github.com/superdoc-dev/superdoc/commit/a300536111890565c6b53b0842551a5c2f4c191a)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer)
* **rendering:** show comment highlight on text with Word highlight formatting ([f6d956e](https://github.com/superdoc-dev/superdoc/commit/f6d956ec38f12ff0ee3440f153edf1fa69406f2d))
* **toc:** correct zoom scaling and rect.top bug in anchor scroll ([16c768f](https://github.com/superdoc-dev/superdoc/commit/16c768f1b81672c5126833cc1ffbe948a2c11ebd))
* ci: remove changelog generation from stable releases
* chore(cli): 0.2.0 [skip ci]
# [0.2.0](https://github.com/superdoc-dev/superdoc/compare/cli-v0.1.0...cli-v0.2.0) (2026-03-11)
### Bug Fixes
* active track change ([#2163](https://github.com/superdoc-dev/superdoc/issues/2163)) ([108c14d](https://github.com/superdoc-dev/superdoc/commit/108c14d30fad847e3604d285806823ff9485c2f6))
* add currentTotalPages getter and pagination-update event ([#2202](https://github.com/superdoc-dev/superdoc/issues/2202)) ([95b4579](https://github.com/superdoc-dev/superdoc/commit/95b45793cc7ad4acf714eac2f6f9ac010a62e8ea)), closes [#958](https://github.com/superdoc-dev/superdoc/issues/958)
* add type definitions for PresentationEditor ([#2271](https://github.com/superdoc-dev/superdoc/issues/2271)) ([5402196](https://github.com/superdoc-dev/superdoc/commit/5402196e73997b83ddd1d4f270c82e3a85c3365f))
* **ai-actions:** preserve html/markdown insertion and prevent repeated formatted replacement ([#2117](https://github.com/superdoc-dev/superdoc/issues/2117)) ([9f685e9](https://github.com/superdoc-dev/superdoc/commit/9f685e964b5156d0d177e2fa0a72a4129d2a0443))
* **ai:** support headless mode in EditorAdapter.applyPatch ([#1859](https://github.com/superdoc-dev/superdoc/issues/1859)) ([cf9275d](https://github.com/superdoc-dev/superdoc/commit/cf9275d3bffd144491701508103af4c7b8f1708e))
* allow paste from context menu ([#1910](https://github.com/superdoc-dev/superdoc/issues/1910)) ([b6666bf](https://github.com/superdoc-dev/superdoc/commit/b6666bf94a3bc6a4f8a71a49e95136e2e5e9e2ae))
* always call resolveComment after custom TC bubble handlers (SD-2049) ([#2204](https://github.com/superdoc-dev/superdoc/issues/2204)) ([34fb4e0](https://github.com/superdoc-dev/superdoc/commit/34fb4e07e32c76d6c53580c9046db19e5024bb08))
* anchor table overlaps text ([#1995](https://github.com/superdoc-dev/superdoc/issues/1995)) ([fc05e29](https://github.com/superdoc-dev/superdoc/commit/fc05e295efef9e02db9d7cccafc771d3d00da3e6))
* **anchor-nav:** use correct scroll container for sub-page bookmark navigation ([a300536](https://github.com/superdoc-dev/superdoc/commit/a300536111890565c6b53b0842551a5c2f4c191a)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer)
* backward replace insert text ([#2172](https://github.com/superdoc-dev/superdoc/issues/2172)) ([66f0849](https://github.com/superdoc-dev/superdoc/commit/66f08497dd5642db2be6b8729c9bbc84a862ae20))
* before paragraph spacing inside table cells ([#1842](https://github.com/superdoc-dev/superdoc/issues/1842)) ([c7efa85](https://github.com/superdoc-dev/superdoc/commit/c7efa857abdfa6a0f129f73e3c5654b573c1028c))
* **build:** add node polyfills to UMD bundle and angular to CI matrix ([13fa579](https://github.com/superdoc-dev/superdoc/commit/13fa579c5e10a5da26c7308887e82123d914659c))
* **build:** remove dead vite-plugin-node-polyfills from UMD externals ([91de1fc](https://github.com/superdoc-dev/superdoc/commit/91de1fc2e47b0061d088db5d46b0da4cc07dc837))
* **ci:** include sub-package commits in superdoc release filter ([a2c237b](https://github.com/superdoc-dev/superdoc/commit/a2c237bb631130de5ae345209ca109f1ff645519))
* **ci:** move superdoc releaserc to package dir for proper commit filtering ([688f8e0](https://github.com/superdoc-dev/superdoc/commit/688f8e09df258d7279e7364c03d08e217c742c3d))
* **cli:** add jsdoc params to formatReplaceResult ([#1923](https://github.com/superdoc-dev/superdoc/issues/1923)) ([e52ddf9](https://github.com/superdoc-dev/superdoc/commit/e52ddf9bf010947d9435b788ab7753d136a801f1))
* **cli:** add param jsdoc to expandGlobs ([df8c3c6](https://github.com/superdoc-dev/superdoc/commit/df8c3c625be5901f4551d99318a43f47e3dfb7fb))
* **cli:** add returns jsdoc to formatSearchResult ([d0a0438](https://github.com/superdoc-dev/superdoc/commit/d0a04389b05d1f79d1c5111ed82e4feaf5b1af20))
* **cli:** lowercase docx in help text ([#1928](https://github.com/superdoc-dev/superdoc/issues/1928)) ([13f9db6](https://github.com/superdoc-dev/superdoc/commit/13f9db6897a070525fe2ea4ccaf98c3be245faeb))
* **cli:** normalize dash in help text ([b2e7d36](https://github.com/superdoc-dev/superdoc/commit/b2e7d36631db90863ce6ba263daff55d32220b99))
* **cli:** prevent collab reopen from overwriting existing ydoc with blank document (SD-2138) ([#2296](https://github.com/superdoc-dev/superdoc/issues/2296)) ([41b0345](https://github.com/superdoc-dev/superdoc/commit/41b0345367e32d0f053825c9f8733f1351f52760))
* collaboration cursor styles fix ([fd6db10](https://github.com/superdoc-dev/superdoc/commit/fd6db10558caa4136da262ad10b751dbb4bdac2c))
* **collaboration:** deduplicate updateYdocDocxData during replaceFile (SD-1920) ([#2162](https://github.com/superdoc-dev/superdoc/issues/2162)) ([52962fc](https://github.com/superdoc-dev/superdoc/commit/52962fc139734130a6882c9fcbd1856ff72d1c3d))
* **collaboration:** memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924) ([#2030](https://github.com/superdoc-dev/superdoc/issues/2030)) ([a6827fd](https://github.com/superdoc-dev/superdoc/commit/a6827fdda860171124aae4838d354dd68d52d017)), closes [#prepareDocumentForExport](https://github.com/superdoc-dev/superdoc/issues/prepareDocumentForExport)
* **collab:** prevent stale view when remote Y.js changes bypass sdBlockRev increment ([#2099](https://github.com/superdoc-dev/superdoc/issues/2099)) ([0895a93](https://github.com/superdoc-dev/superdoc/commit/0895a93bb9e718f4f533a55e8f4022ed0ebc97bc))
* **comments:** cross-page collision avoidance for floating comment bubbles (SD-1998) ([#2180](https://github.com/superdoc-dev/superdoc/issues/2180)) ([6cfbeca](https://github.com/superdoc-dev/superdoc/commit/6cfbecae5e8579556a377b7a35168cbb7cfce31f))
* **comments:** emit empty comment positions so undo clears orphan bubbles ([#2235](https://github.com/superdoc-dev/superdoc/issues/2235)) ([12ba727](https://github.com/superdoc-dev/superdoc/commit/12ba72709fc37f207c97305852f40ef4e393893b))
* **comments:** improve multiline comment input styling ([#2242](https://github.com/superdoc-dev/superdoc/issues/2242)) ([e6a0dab](https://github.com/superdoc-dev/superdoc/commit/e6a0dab8abca8a24c5e0c8a9096c357df28eaf8a))
* **comments:** prevent comment mark from extending to adjacent typed text ([#2241](https://github.com/superdoc-dev/superdoc/issues/2241)) ([07fecd8](https://github.com/superdoc-dev/superdoc/commit/07fecd8f0f6c88f338b59fca6105467cf66cc7ab))
* **comments:** reduce sidebar jitter when clicking comments (SD-2034) ([#2250](https://github.com/superdoc-dev/superdoc/issues/2250)) ([c3568d2](https://github.com/superdoc-dev/superdoc/commit/c3568d2d6fc4d91125cede042084ed124a9b2072))
* **comments:** remove synchronous dispatch from plugin apply() (SD-1940) ([#2157](https://github.com/superdoc-dev/superdoc/issues/2157)) ([887175b](https://github.com/superdoc-dev/superdoc/commit/887175bf29b3dc86cf56865311d488b377b36aaf))
* consolidate deletions under new replacement ([#2094](https://github.com/superdoc-dev/superdoc/issues/2094)) ([0a84b86](https://github.com/superdoc-dev/superdoc/commit/0a84b8604c9a30ed2755cfd0ecc7694e1999c6eb))
* context menu clicks would change selection position ([#1889](https://github.com/superdoc-dev/superdoc/issues/1889)) ([ace0daf](https://github.com/superdoc-dev/superdoc/commit/ace0dafcf58535ec0ba6ff48efcd7ee113b021ce))
* **context-menu:** paste via context menu inserts at wrong position (SD-1302) ([#2110](https://github.com/superdoc-dev/superdoc/issues/2110)) ([30f03f9](https://github.com/superdoc-dev/superdoc/commit/30f03f93b59261a7fce55e7d62cc83897b457afd))
* **converter:** handle absolute paths in header/footer relationship targets ([#1945](https://github.com/superdoc-dev/superdoc/issues/1945)) ([9d82632](https://github.com/superdoc-dev/superdoc/commit/9d82632c62a70cc6cb19015f9fca89b3f28a4323))
* **converter:** handle empty rPrChange run properties without dropping tracked-style runs ([c25d24d](https://github.com/superdoc-dev/superdoc/commit/c25d24d35534c39836c3251ee9baf1b908a6c78c))
* **converter:** handle null list lvlText and always clear numbering cache ([#2113](https://github.com/superdoc-dev/superdoc/issues/2113)) ([336958c](https://github.com/superdoc-dev/superdoc/commit/336958ca9b39ebcc436fc77fb1daae82ddbd8b0c))
* correctly pass table info when deriving inline run properties (SD-1865) ([#2007](https://github.com/superdoc-dev/superdoc/issues/2007)) ([d752aff](https://github.com/superdoc-dev/superdoc/commit/d752afff9dc11041798ea2a28d487cc190e13383))
* correctly set color and highlight of pasted text ([#2033](https://github.com/superdoc-dev/superdoc/issues/2033)) ([41058b5](https://github.com/superdoc-dev/superdoc/commit/41058b5bfadbc34d83891afe88c6b8c24505f83c))
* **css:** scope ProseMirror CSS to prevent bleeding into host apps (SD-1850) ([#2134](https://github.com/superdoc-dev/superdoc/issues/2134)) ([b9d98fa](https://github.com/superdoc-dev/superdoc/commit/b9d98fa926532f63c71c55ed8bb5b89019ee4246))
* cursor drift during vertical arrow navigation (SD-1689) ([#1918](https://github.com/superdoc-dev/superdoc/issues/1918)) ([982118d](https://github.com/superdoc-dev/superdoc/commit/982118df475b3178351713f0c00f6fe447853c61))
* disable footnotes typing ([#1974](https://github.com/superdoc-dev/superdoc/issues/1974)) ([92b4d62](https://github.com/superdoc-dev/superdoc/commit/92b4d6288a48275435660ae2a848b064506390f6))
* **doc-api:** stabilize create composability and expand SDK surface ([fc17167](https://github.com/superdoc-dev/superdoc/commit/fc1716721b7c15b3fd1ac5724e48cc709a9fd986))
* document-api improvements, plan mode, query.match, mutations ([6221580](https://github.com/superdoc-dev/superdoc/commit/62215805c969a80445f9e410fd5fb2478b8c38a5))
* **document-api:** add friendlier insert at node id with offset, or pos ([#2128](https://github.com/superdoc-dev/superdoc/issues/2128)) ([c1d3682](https://github.com/superdoc-dev/superdoc/commit/c1d3682e15dc7c99b1450c2f008f6f937729fc39))
* **document-api:** add nodeId shorthand resolution across all operations ([#2131](https://github.com/superdoc-dev/superdoc/issues/2131)) ([8abdaad](https://github.com/superdoc-dev/superdoc/commit/8abdaadd7dda2ef4751d040527adab61c06f3c48))
* **document-api:** delete table cell fix ([#2209](https://github.com/superdoc-dev/superdoc/issues/2209)) ([5e5c43f](https://github.com/superdoc-dev/superdoc/commit/5e5c43fe1b63703308cdbd3a1dd01d121ea5465c))
* **document-api:** distribute columns command fixes ([#2207](https://github.com/superdoc-dev/superdoc/issues/2207)) ([8f4eaf7](https://github.com/superdoc-dev/superdoc/commit/8f4eaf7efde73e26c919f77a71d180c763d636ce))
* **document-api:** fix cell shading in document api ([#2215](https://github.com/superdoc-dev/superdoc/issues/2215)) ([456f60e](https://github.com/superdoc-dev/superdoc/commit/456f60e41605a2d94c5194052cf1982bed02d1c3))
* **document-api:** fix markdown to image ([bf0e664](https://github.com/superdoc-dev/superdoc/commit/bf0e6647820c3987b4100f8f9804e413cfb33511))
* **document-api:** insert table cell ([#2210](https://github.com/superdoc-dev/superdoc/issues/2210)) ([357ee90](https://github.com/superdoc-dev/superdoc/commit/357ee9018451f7a22bc1383aed7af6149da1d8e8))
* **document-api:** make lists.setType preserve sequence continuity ([#2304](https://github.com/superdoc-dev/superdoc/issues/2304)) ([da09826](https://github.com/superdoc-dev/superdoc/commit/da0982647cd57b4e775794af52e1a23b3d6f2afe))
* **document-api:** plan-engine reliability fixes and error diagnostics ([#2185](https://github.com/superdoc-dev/superdoc/issues/2185)) ([abfd81b](https://github.com/superdoc-dev/superdoc/commit/abfd81b753035bfaa4429748318af1eb51ac14e3))
* **document-api:** remove search match cap and validate moveComment bounds ([6d3de67](https://github.com/superdoc-dev/superdoc/commit/6d3de67ee398f5bbdd55a589e86a5c2bf321268a))
* **document-api:** split table cell command ([#2217](https://github.com/superdoc-dev/superdoc/issues/2217)) ([0b3e2b4](https://github.com/superdoc-dev/superdoc/commit/0b3e2b4fcc50c1a30dec593c0aa41e69c9b809ff))
* **document-api:** split table command ([#2214](https://github.com/superdoc-dev/superdoc/issues/2214)) ([ec31699](https://github.com/superdoc-dev/superdoc/commit/ec31699d665cd4b4f4da7e2646d77ec828604568))
* editor bundling in python CLI regression ([db0d130](https://github.com/superdoc-dev/superdoc/commit/db0d130d0296bb40deed19a8d70a5ab0fbafadbb))
* **editor:** prevent focus loss when typing in header/footer editors (SD-1993) ([#2238](https://github.com/superdoc-dev/superdoc/issues/2238)) ([e1b8007](https://github.com/superdoc-dev/superdoc/commit/e1b80074377b221873158ce5befc8fa2a908d1a8)), closes [PresentationEditor.#flushRerenderQueue](https://github.com/PresentationEditor./issues/flushRerenderQueue)
* **editor:** render styles applied inside SDT fields (SD-2011) ([#2188](https://github.com/superdoc-dev/superdoc/issues/2188)) ([9c34be3](https://github.com/superdoc-dev/superdoc/commit/9c34be39cfeb1ab77ebcd91343aaf9681a3f9b9a))
* **editor:** selection highlight flickers when dragging across mark boundaries (SD-2024) ([#2205](https://github.com/superdoc-dev/superdoc/issues/2205)) ([ba03e76](https://github.com/superdoc-dev/superdoc/commit/ba03e768fae837e4f5b8dd856ca765f76957e83c))
* ensure we do not duplicate bubble text ([#1934](https://github.com/superdoc-dev/superdoc/issues/1934)) ([c41cf9e](https://github.com/superdoc-dev/superdoc/commit/c41cf9e21d763aa08546eb3445c54a078bf66d33))
* export docx blobs with docx mime type ([#1849](https://github.com/superdoc-dev/superdoc/issues/1849)) ([1bc466d](https://github.com/superdoc-dev/superdoc/commit/1bc466d25fc01618fa4a54f6e3c4120e43a7e89e))
* **export:** prevent DOCX corruption from entity encoding and orphaned delInstrText (SD-1943) ([#2102](https://github.com/superdoc-dev/superdoc/issues/2102)) ([56e917f](https://github.com/superdoc-dev/superdoc/commit/56e917fff93175b27529afc2c8e744b21ea3bc29)), closes [#replaceSpecialCharacters](https://github.com/superdoc-dev/superdoc/issues/replaceSpecialCharacters) [#1988](https://github.com/superdoc-dev/superdoc/issues/1988)
* **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](https://github.com/superdoc-dev/superdoc/issues/2349)) ([f6dbb40](https://github.com/superdoc-dev/superdoc/commit/f6dbb404ad998e502a49df7e0ffded9f2a236321))
* **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](https://github.com/superdoc-dev/superdoc/commit/36058c3640d12eeba8a3cf671d4cb2b46786d1d1))
* extract duplicate block identity normalization from docxImporter ([7f7ff93](https://github.com/superdoc-dev/superdoc/commit/7f7ff9338786ed251323fc7986e6e30cf699b3b6))
* find tracked change for firefox ([#1899](https://github.com/superdoc-dev/superdoc/issues/1899)) ([a39cb68](https://github.com/superdoc-dev/superdoc/commit/a39cb683df898ca9a41b4c7f54d3d2f8e48ea8f1))
* **format:** route format.caps through textTransform so w:caps persists on export ([#2297](https://github.com/superdoc-dev/superdoc/issues/2297)) ([8e771e2](https://github.com/superdoc-dev/superdoc/commit/8e771e2d2ea75d4bc72bc7f589fd9279f8027478))
* handle Uint8Array media values from persistence layers ([#2298](https://github.com/superdoc-dev/superdoc/issues/2298)) ([0d4505c](https://github.com/superdoc-dev/superdoc/commit/0d4505c77ac1c44939e8f7874a08f827a7a8e08c))
* harden markdown image conversion ([4ba1c25](https://github.com/superdoc-dev/superdoc/commit/4ba1c254c77aaa37f552f2ad9fd06ec55e802b23))
* headless yjs ([#1913](https://github.com/superdoc-dev/superdoc/issues/1913)) ([4cdecf7](https://github.com/superdoc-dev/superdoc/commit/4cdecf7c592f8fbf23655b05200c36b9edfb6d7e))
* ignore sdBlockId when pasting content ([#2010](https://github.com/superdoc-dev/superdoc/issues/2010)) ([1b08572](https://github.com/superdoc-dev/superdoc/commit/1b08572ef696dfe9fb45cd079c4381bd86c3b2d3))
* image z-index and overlaps ([#1950](https://github.com/superdoc-dev/superdoc/issues/1950)) ([39875ac](https://github.com/superdoc-dev/superdoc/commit/39875acda1a1799f52d433d463739926e73eea61))
* improve backspace behavior near run boundaries for tracked changes ([#2175](https://github.com/superdoc-dev/superdoc/issues/2175)) ([6c9c7a3](https://github.com/superdoc-dev/superdoc/commit/6c9c7a3d72ed78717297cd48530f4629c9c680c4))
* issue updating paragraph properties (SD-1778) ([#1944](https://github.com/superdoc-dev/superdoc/issues/1944)) ([a9076ed](https://github.com/superdoc-dev/superdoc/commit/a9076eda595e0e64b57add6d3809fed587e62f7d))
* **layout-bridge:** correct cell selection for tables with rowspan ([#1839](https://github.com/superdoc-dev/superdoc/issues/1839)) ([0b782be](https://github.com/superdoc-dev/superdoc/commit/0b782be3d17df0f72f4c0ce8f7e44e663422e841))
* **layout-bridge:** defer table fragment click mapping to geometry fallback ([#1968](https://github.com/superdoc-dev/superdoc/issues/1968)) ([0eac43c](https://github.com/superdoc-dev/superdoc/commit/0eac43c2880c39767407279db585bd2568a758d9))
* **layout-engine:** text clipping inside table in document with multi-orientation, recursive pagination for deeply nested tables (SD-1962) ([#2140](https://github.com/superdoc-dev/superdoc/issues/2140)) ([072c009](https://github.com/superdoc-dev/superdoc/commit/072c0093f6fa8977e44801f6aa03ff5cb0b6ac5f))
* **layout,converter:** text box rendering and page-relative anchor positioning (SD-1331, SD-1838) ([#2034](https://github.com/superdoc-dev/superdoc/issues/2034)) ([3947f39](https://github.com/superdoc-dev/superdoc/commit/3947f39718d0f03a62e0fc900ec0f25676df84ac))
* **layout:** per-section footer constraints for multi-section docs (SD-1837) ([#2022](https://github.com/superdoc-dev/superdoc/issues/2022)) ([e11acc5](https://github.com/superdoc-dev/superdoc/commit/e11acc5c423c4bbf6f2a608527802ddf23519528))
* **layout:** route list text-start calculations through resolveListTextStartPx ([02b14b8](https://github.com/superdoc-dev/superdoc/commit/02b14b856c3e58aa6b0c9ad7b46943b748a3d2b5))
* **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](https://github.com/superdoc-dev/superdoc/issues/2308)) ([ea4be68](https://github.com/superdoc-dev/superdoc/commit/ea4be68fb6deea669140d4af5934ba17a6a6571b))
* load alternative style definitions when main one is missing ([#1922](https://github.com/superdoc-dev/superdoc/issues/1922)) ([bb4083f](https://github.com/superdoc-dev/superdoc/commit/bb4083fbbabe61078e71af5c06a251a4e60670fd))
* make expected revision optional, update docs ([#2265](https://github.com/superdoc-dev/superdoc/issues/2265)) ([250bb5b](https://github.com/superdoc-dev/superdoc/commit/250bb5b6131fd68a83a3d0959dc0a5808fb5f152))
* markdown block-separator blank lines and heading split style-mark normalization ([e988adc](https://github.com/superdoc-dev/superdoc/commit/e988adc3b437b9ec3333afb521f76c3810e35040))
* mount Vue on wrapper element to prevent host framework conflicts (SD-1832) ([#1971](https://github.com/superdoc-dev/superdoc/issues/1971)) ([0c4bdda](https://github.com/superdoc-dev/superdoc/commit/0c4bddab0fd1c47e9530860492480748497ad51d))
* normalize bookmarks in tables ([#1892](https://github.com/superdoc-dev/superdoc/issues/1892)) ([369b7e1](https://github.com/superdoc-dev/superdoc/commit/369b7e1bfc1e2777916aba77f076de718735a612))
* normalize review namespace into trackChanges, harden input validation ([33e907b](https://github.com/superdoc-dev/superdoc/commit/33e907bb186c87cd9a015af8d7322be63793e234))
* outside click for toolbar dropdown ([#2174](https://github.com/superdoc-dev/superdoc/issues/2174)) ([5f859c7](https://github.com/superdoc-dev/superdoc/commit/5f859c75b7f5263251a900153a19a0f587a0a71e))
* **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](https://github.com/superdoc-dev/superdoc/issues/2291)) ([fb3d25e](https://github.com/superdoc-dev/superdoc/commit/fb3d25e809019407b1298c28f8c10ac184e1dc73))
* **painter-dom:** use absolute page Y for page-relative anchors in header/footer decorations ([0b9bc72](https://github.com/superdoc-dev/superdoc/commit/0b9bc72899d30e5464c1e68a6c0a9a3d3071ae7c))
* performance ([#1914](https://github.com/superdoc-dev/superdoc/issues/1914)) ([0747b03](https://github.com/superdoc-dev/superdoc/commit/0747b03e81231917c7c2cb5d69f90dbaf0646932))
* persist comments on reload in collab mode ([#1949](https://github.com/superdoc-dev/superdoc/issues/1949)) ([2b2e56e](https://github.com/superdoc-dev/superdoc/commit/2b2e56ea85acd8f70e300ad89e0a536a4f974bf7))
* pict import/export ([#2135](https://github.com/superdoc-dev/superdoc/issues/2135)) ([7e97b7b](https://github.com/superdoc-dev/superdoc/commit/7e97b7b986d73a78bc4e646db6854188ee114cac))
* **placeholder:** guard against depth-0 selection in placeholder decoration ([#2025](https://github.com/superdoc-dev/superdoc/issues/2025)) ([e5ee7cf](https://github.com/superdoc-dev/superdoc/commit/e5ee7cfaff2670d1088e0392ebd95078acdd63d0))
* portrait orientation in document-api ([dafab76](https://github.com/superdoc-dev/superdoc/commit/dafab76af5f249c49936a0250e4e54ae4719b305))
* prefer full decoration range ([#2239](https://github.com/superdoc-dev/superdoc/issues/2239)) ([ac15e31](https://github.com/superdoc-dev/superdoc/commit/ac15e31a26e04511b6d62b7f5736437ed7e2da5d)), closes [#collectDesiredState](https://github.com/superdoc-dev/superdoc/issues/collectDesiredState) [#resolveEffectiveRanges](https://github.com/superdoc-dev/superdoc/issues/resolveEffectiveRanges) [#setPreviousRanges](https://github.com/superdoc-dev/superdoc/issues/setPreviousRanges)
* preserve line spacing and indentation on Google Docs paste ([#2183](https://github.com/superdoc-dev/superdoc/issues/2183)) ([b9a7357](https://github.com/superdoc-dev/superdoc/commit/b9a7357afa561a68132a6b446d10d331025e6124)), closes [#2151](https://github.com/superdoc-dev/superdoc/issues/2151)
* preserve selection highlight when opening toolbar dropdowns ([#2097](https://github.com/superdoc-dev/superdoc/issues/2097)) ([a33568e](https://github.com/superdoc-dev/superdoc/commit/a33568ec43739178ddda4239aeae34d117fe5cca))
* preserve text selection highlight on right-click ([#1994](https://github.com/superdoc-dev/superdoc/issues/1994)) ([db5466a](https://github.com/superdoc-dev/superdoc/commit/db5466a6bf4efce8f1057552182702dd6a4a57d1))
* preserve text-align on paste from Google Docs ([#2208](https://github.com/superdoc-dev/superdoc/issues/2208)) ([762231b](https://github.com/superdoc-dev/superdoc/commit/762231b75ad1537f7b10137597cbe3f6ad1aa381))
* **rendering:** show comment highlight on text with Word highlight formatting ([f6d956e](https://github.com/superdoc-dev/superdoc/commit/f6d956ec38f12ff0ee3440f153edf1fa69406f2d))
* replace Node.js Buffer APIs with browser-native alternatives ([#2028](https://github.com/superdoc-dev/superdoc/issues/2028)) ([b17774a](https://github.com/superdoc-dev/superdoc/commit/b17774a566750c4cca084415f9b2c2b4c4386668)), closes [#exportProcessMediaFiles](https://github.com/superdoc-dev/superdoc/issues/exportProcessMediaFiles)
* replace Node.js Buffer APIs with browser-native alternatives ([#2028](https://github.com/superdoc-dev/superdoc/issues/2028)) ([d6141ec](https://github.com/superdoc-dev/superdoc/commit/d6141ec2a20192aa6294a8174e740f226d8f0269)), closes [#exportProcessMediaFiles](https://github.com/superdoc-dev/superdoc/issues/exportProcessMediaFiles)
* resolve published type declarations for Angular/TS consumers and update example ([#2026](https://github.com/superdoc-dev/superdoc/issues/2026)) ([35344bd](https://github.com/superdoc-dev/superdoc/commit/35344bdb0b0017676843e7ce1b269563728ab555))
* resolve sdk/adapter composability issues ([b60b17e](https://github.com/superdoc-dev/superdoc/commit/b60b17e50b0ea46474a92afd06438222a3537d42))
* return null instead of blank num definition when not found ([#1990](https://github.com/superdoc-dev/superdoc/issues/1990)) ([3acac3b](https://github.com/superdoc-dev/superdoc/commit/3acac3b0e071ca940b27434c1e54c9d89d35d028))
* rollback comments colors / ui ([#2216](https://github.com/superdoc-dev/superdoc/issues/2216)) ([a99b5ab](https://github.com/superdoc-dev/superdoc/commit/a99b5ab89dc083a53ca2f223ec0fc280d749ada2))
* **scroll:** wait for virtualized page mount and center text element ([#2221](https://github.com/superdoc-dev/superdoc/issues/2221)) ([95f634e](https://github.com/superdoc-dev/superdoc/commit/95f634e6185806fc8da29a40945576b3de89a23b))
* **sdk:** checkpoint collab sessions even when not dirty ([689f6b5](https://github.com/superdoc-dev/superdoc/commit/689f6b5449e6be87984584f63411de3c6743578b))
* **sdk:** keep sdk sessions alive in non collab ([#2289](https://github.com/superdoc-dev/superdoc/issues/2289)) ([c634ee8](https://github.com/superdoc-dev/superdoc/commit/c634ee87bb6ac29b14b0f02d6080b2420cfe3dc6))
* **shapes:** render grouped DrawingML shapes with custom geometry (SD-1877) ❇️ ([#2105](https://github.com/superdoc-dev/superdoc/issues/2105)) ([14985a5](https://github.com/superdoc-dev/superdoc/commit/14985a5b17ab13a04760362346caa5d41f54202d))
* slash menu invisible in presentation mode ([#2018](https://github.com/superdoc-dev/superdoc/issues/2018)) ([513bc33](https://github.com/superdoc-dev/superdoc/commit/513bc33f56368effc09e9d314ec49e187858015d)), closes [#computeCaretLayoutRect](https://github.com/superdoc-dev/superdoc/issues/computeCaretLayoutRect)
* splitting run with header adds empty row ([#2229](https://github.com/superdoc-dev/superdoc/issues/2229)) ([e1965fc](https://github.com/superdoc-dev/superdoc/commit/e1965fc0ccddd1b3f1886fd1911bd8665de5c8c5))
* structured content renders correct on hover and select ([#1843](https://github.com/superdoc-dev/superdoc/issues/1843)) ([dab3f04](https://github.com/superdoc-dev/superdoc/commit/dab3f048a83934eef993e1cc868cc81bb4b625ea))
* **super-converter:** add tableHeader export handler to fix corrupted docx ([#1900](https://github.com/superdoc-dev/superdoc/issues/1900)) ([010799b](https://github.com/superdoc-dev/superdoc/commit/010799b87ee133134a61272e47cc1d77fe08d937))
* **super-converter:** handle empty pic:spPr in image import ([#2254](https://github.com/superdoc-dev/superdoc/issues/2254)) ([2b8dbce](https://github.com/superdoc-dev/superdoc/commit/2b8dbcec56d40e7ffeb97572afe5ca888cb1da2e))
* **super-converter:** resolve table style conditional shading on cell import (SD-1833) ([#1985](https://github.com/superdoc-dev/superdoc/issues/1985)) ([5e206f4](https://github.com/superdoc-dev/superdoc/commit/5e206f45ea7139bf9193912726b21af03d70c86e))
* **super-editor:** add unsupported-content reporting across HTML/Markdown import paths ([#2115](https://github.com/superdoc-dev/superdoc/issues/2115)) ([84880b7](https://github.com/superdoc-dev/superdoc/commit/84880b781cb389c6cef27f4299645f6e6c07958a))
* **super-editor:** align image resize handles with actual image position ([#2293](https://github.com/superdoc-dev/superdoc/issues/2293)) ([217bdce](https://github.com/superdoc-dev/superdoc/commit/217bdcef86d736825b0bfe55880ac57620d1b4d3))
* **super-editor:** allow Backspace to delete empty paragraphs in suggesting mode ([#1966](https://github.com/superdoc-dev/superdoc/issues/1966)) ([820c73c](https://github.com/superdoc-dev/superdoc/commit/820c73c297ff97156316470cc53a4e28f5daaf3c))
* **super-editor:** backspace across run boundaries without splitting list items ([#2258](https://github.com/superdoc-dev/superdoc/issues/2258)) ([27ccb64](https://github.com/superdoc-dev/superdoc/commit/27ccb64d06b70e98070462bdd51072dfd7aeae3f))
* **super-editor:** handle partial comment file-sets and clean up stale parts on export ([#2123](https://github.com/superdoc-dev/superdoc/issues/2123)) ([f63ae0a](https://github.com/superdoc-dev/superdoc/commit/f63ae0aae0daaedfd3faba77e43023c4f7245e7f))
* **super-editor:** prevent invalid paragraph updates for nested runs in headless import ([8c11718](https://github.com/superdoc-dev/superdoc/commit/8c117188219b554fe5c55fd376172804b623015e))
* **super-editor:** prevent invalid paragraph updates for nested runs in headless import ([c5ee6e3](https://github.com/superdoc-dev/superdoc/commit/c5ee6e3a606e8f8e8284ffc5c38833af9ecaf29d))
* **super-editor:** restore <hr> contentBlock parsing and harden VML HR export fallback ([#2118](https://github.com/superdoc-dev/superdoc/issues/2118)) ([da51b1f](https://github.com/superdoc-dev/superdoc/commit/da51b1f6bd0aa6dca44f6431e16f03b1e8d7cc54))
* **super-editor:** restore marks correctly after clear format + undo (SD-1771) ([#1967](https://github.com/superdoc-dev/superdoc/issues/1967)) ([bc9dc76](https://github.com/superdoc-dev/superdoc/commit/bc9dc76c5cf93143ed26353ffc2b84a018f71a2e))
* **superdoc:** enhance comment input focus handling and edit init ([#1935](https://github.com/superdoc-dev/superdoc/issues/1935)) ([0e9112c](https://github.com/superdoc-dev/superdoc/commit/0e9112c44ce6a89672c2a52d09fbd96d4a1f6bd2))
* **superdoc:** update comment text ([b5ff644](https://github.com/superdoc-dev/superdoc/commit/b5ff64496cb962ffde32c15a3d249a6540a804d0))
* **superdoc:** update entry point comment ([#1926](https://github.com/superdoc-dev/superdoc/issues/1926)) ([0dde298](https://github.com/superdoc-dev/superdoc/commit/0dde29868dde357bebf0c7c0363355ea855fa39a))
* support cell spacing ([#1879](https://github.com/superdoc-dev/superdoc/issues/1879)) ([1639967](https://github.com/superdoc-dev/superdoc/commit/16399678e9e09dee4293976a86e39664d9ef79d9))
* table headers are incorrectly imported from html ([#2112](https://github.com/superdoc-dev/superdoc/issues/2112)) ([e8d1480](https://github.com/superdoc-dev/superdoc/commit/e8d1480bac4ba9dd0908ef7298b8ac15d584d2d1))
* table resizing regression ([#2091](https://github.com/superdoc-dev/superdoc/issues/2091)) ([20ed24e](https://github.com/superdoc-dev/superdoc/commit/20ed24ed2a6d080b5c90511f63f6fde66b358e83))
* table resizing regression ([#2091](https://github.com/superdoc-dev/superdoc/issues/2091)) ([9a07f1c](https://github.com/superdoc-dev/superdoc/commit/9a07f1ceadec4d7669a8b43c5bafd010edc2ec17))
* **table:** resolve column resize only working on first page (SD-1772) ([#1959](https://github.com/superdoc-dev/superdoc/issues/1959)) ([df43867](https://github.com/superdoc-dev/superdoc/commit/df43867b3119ee605225794becf66dc2bd327342))
* **tables:** align tableHeader attrs with tableCell to fix oversized DOCX export widths ([#2114](https://github.com/superdoc-dev/superdoc/issues/2114)) ([38f0430](https://github.com/superdoc-dev/superdoc/commit/38f04306591e86dad09fb4cdb979f38e7fec4eda))
* **tables:** defaultTableStyle support, cell fixes ([#2246](https://github.com/superdoc-dev/superdoc/issues/2246)) ([74fca9c](https://github.com/superdoc-dev/superdoc/commit/74fca9cd6e6e81c3a270b8f95e8bb66fed88c904))
* **tables:** expand auto-width tables to fill available page width ([#2109](https://github.com/superdoc-dev/superdoc/issues/2109)) ([15f36bc](https://github.com/superdoc-dev/superdoc/commit/15f36bc9256db1e5a4ac41bd70a2699a751de4de))
* **tables:** fix autofit column scaling, cell width overflow, and page break splitting ([#1987](https://github.com/superdoc-dev/superdoc/issues/1987)) ([61a3f6f](https://github.com/superdoc-dev/superdoc/commit/61a3f6f13ee71d6d10c0fe74fb62a044cbe98c97))
* **tables:** preserve TableGrid defaults and style-driven spacing/bor… ([#2230](https://github.com/superdoc-dev/superdoc/issues/2230)) ([b0a482f](https://github.com/superdoc-dev/superdoc/commit/b0a482fec95135ff46ea7cd40a2bf1e767a4f231))
* **tables:** prevent tblInd double-shrink when using tblGrid widths (SD-1494) ([8750ece](https://github.com/superdoc-dev/superdoc/commit/8750ece019a439a350e93f6595d5833735c1ca35))
* **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](https://github.com/superdoc-dev/superdoc/issues/2262)) ([7bafb7f](https://github.com/superdoc-dev/superdoc/commit/7bafb7f9e0fcc0109a0a976d1a01e9ee408f7291))
* text highlight on export ([#2189](https://github.com/superdoc-dev/superdoc/issues/2189)) ([9cbd022](https://github.com/superdoc-dev/superdoc/commit/9cbd022de69ec30dc72895e4da6fcd064d09fb69))
* **toc:** correct zoom scaling and rect.top bug in anchor scroll ([16c768f](https://github.com/superdoc-dev/superdoc/commit/16c768f1b81672c5126833cc1ffbe948a2c11ebd))
* track changes comment text for formatting changes ([#2013](https://github.com/superdoc-dev/superdoc/issues/2013)) ([b2a43ff](https://github.com/superdoc-dev/superdoc/commit/b2a43ffad086df316a4a6b4d5695fd00507f9f78))
* track changes in cli ([3742f68](https://github.com/superdoc-dev/superdoc/commit/3742f6874ebf93d7ef9971232b203b19bed07344))
* track highlight changes ([#2192](https://github.com/superdoc-dev/superdoc/issues/2192)) ([e164625](https://github.com/superdoc-dev/superdoc/commit/e164625489d925a595d48fcb45dd0e04f004fcf6))
* **track-changes:** correct format change description for already-formatted text (SD-2077) ([#2253](https://github.com/superdoc-dev/superdoc/issues/2253)) ([b2ffc0d](https://github.com/superdoc-dev/superdoc/commit/b2ffc0dffefaacdf339c13d9da7aa6b646ceb80b))
* **track-changes:** handle ReplaceAroundStep in tracked changes mode (SD-2061) ([#2225](https://github.com/superdoc-dev/superdoc/issues/2225)) ([8f3cbe4](https://github.com/superdoc-dev/superdoc/commit/8f3cbe46f49cf0e46720e74273aef0de23cb69e3))
* **track-changes:** remove ghost TrackFormat on multi-node format cancel ([#2233](https://github.com/superdoc-dev/superdoc/issues/2233)) ([e925ef9](https://github.com/superdoc-dev/superdoc/commit/e925ef948a81d87090e1f38f0077d354995de02c))
* **tracked-changes:** colors should be restored when format rejected ([#1970](https://github.com/superdoc-dev/superdoc/issues/1970)) ([01ea504](https://github.com/superdoc-dev/superdoc/commit/01ea504737e38815c8ed7e5e585308ca5600e169))
* **tracked-changes:** fix suggested insertions from paste failures ([#1969](https://github.com/superdoc-dev/superdoc/issues/1969)) ([e74c14a](https://github.com/superdoc-dev/superdoc/commit/e74c14a76c9bbad994d9bde3699e0d8c911c061a))
* trigger patch release ([7bc1b74](https://github.com/superdoc-dev/superdoc/commit/7bc1b747b8f265e2b7d70118e425d442736a0f92))
* trigger patch release ([32ced9c](https://github.com/superdoc-dev/superdoc/commit/32ced9c4822cdaf51fafa4b7c54993ea8ea89f9d))
* trigger patch release ([da7f484](https://github.com/superdoc-dev/superdoc/commit/da7f484027c90cad9d3c5fd1c3ef61d0e39c3996))
* trigger release ([8367dd6](https://github.com/superdoc-dev/superdoc/commit/8367dd6760dc2d0bf61c1b445c3daceb0b522c63))
* undo/redo actions ([#2161](https://github.com/superdoc-dev/superdoc/issues/2161)) ([495e92f](https://github.com/superdoc-dev/superdoc/commit/495e92f3599ed01f77538c1155eb4890638ac85f))
* use correct template syntax for GitHub release URL in PR comments ([9d1bca2](https://github.com/superdoc-dev/superdoc/commit/9d1bca2cd9aa0d99e42b836ad093b07c6b5a513f))
* use DEFLATE compression for docx export instead of STORE ([#1933](https://github.com/superdoc-dev/superdoc/issues/1933)) ([ebcd986](https://github.com/superdoc-dev/superdoc/commit/ebcd98644ff7859cf297da79c549257e6c241523))
* **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](https://github.com/superdoc-dev/superdoc/issues/2263)) ([370ca5e](https://github.com/superdoc-dev/superdoc/commit/370ca5ea025bd5fb57f1dfe9b79871afbcdfd9b5))
* **virtualization:** correct scroll mapping and viewport sizing at non-100% zoom ([#2171](https://github.com/superdoc-dev/superdoc/issues/2171)) ([84af4c0](https://github.com/superdoc-dev/superdoc/commit/84af4c0814b6bdd89248a2d68154f2efc90ad80c)), closes [#registryKey](https://github.com/superdoc-dev/superdoc/issues/registryKey)
* wire DocumentApi to Editor.doc with lifecycle-safe caching ([57326ea](https://github.com/superdoc-dev/superdoc/commit/57326eaf417309051132c6f39c6b819c23193af5))
* zIndex updates ([#1973](https://github.com/superdoc-dev/superdoc/issues/1973)) ([3ca7aa3](https://github.com/superdoc-dev/superdoc/commit/3ca7aa390abf12838a88ca36d96bd5667ed83225))
### Features
* adaptive insert table column width ([#1533](https://github.com/superdoc-dev/superdoc/issues/1533)) ([d4cae2d](https://github.com/superdoc-dev/superdoc/commit/d4cae2dd0f954be52f754df6203ac72c6452e1e3))
* add pdf infra, migrate layers ([#2078](https://github.com/superdoc-dev/superdoc/issues/2078)) ([7d416e9](https://github.com/superdoc-dev/superdoc/commit/7d416e9b8d8bce2fbd914684a4d3e0f10ab5eff1))
* add public scroll to page method ([#1791](https://github.com/superdoc-dev/superdoc/issues/1791)) ([1b7687b](https://github.com/superdoc-dev/superdoc/commit/1b7687be295a6d658cf49b17cb1900dae6c2b914))
* allow custom accept/reject handlers for TC bubbles ([#1921](https://github.com/superdoc-dev/superdoc/issues/1921)) ([e30abf6](https://github.com/superdoc-dev/superdoc/commit/e30abf68b7d270b4051200b949756ecbf2771e9d))
* **comments:** improve floating comments ui ([#2195](https://github.com/superdoc-dev/superdoc/issues/2195)) ([e870cfb](https://github.com/superdoc-dev/superdoc/commit/e870cfb26e83b514cc344489a17b3ab32f6e6688))
* cropped images ([#1940](https://github.com/superdoc-dev/superdoc/issues/1940)) ([3767a49](https://github.com/superdoc-dev/superdoc/commit/3767a49f950425e20f756fcd82052d8f4855f660))
* **document-api:** add format operations font size alignment color font family ([#2179](https://github.com/superdoc-dev/superdoc/issues/2179)) ([f19c688](https://github.com/superdoc-dev/superdoc/commit/f19c688604fc2bc89daff3541c973f939dba32ee))
* **document-api:** add get markdown to sdks ([e42b56d](https://github.com/superdoc-dev/superdoc/commit/e42b56d96a08113b8576dd805e78288935d1703d))
* **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](https://github.com/superdoc-dev/superdoc/issues/2264)) ([c554678](https://github.com/superdoc-dev/superdoc/commit/c554678b425c7b97670aff5d7389bbbdfe8a5c04))
* **document-api:** add plan-based mutation engine with query.match and style capture ([#2160](https://github.com/superdoc-dev/superdoc/issues/2160)) ([365293a](https://github.com/superdoc-dev/superdoc/commit/365293a9d961bf05f550d37eb25085a03e71755c))
* **document-api:** clear content command ([#2300](https://github.com/superdoc-dev/superdoc/issues/2300)) ([46b5261](https://github.com/superdoc-dev/superdoc/commit/46b5261f34b6793d41ab6452fb117e0f81b7437a))
* **document-api:** default table style setting ([#2248](https://github.com/superdoc-dev/superdoc/issues/2248)) ([3ad4e9f](https://github.com/superdoc-dev/superdoc/commit/3ad4e9f5c8c90b188a4eac6805285b015e673278))
* **document-api:** default target-less insert to document end ([#2244](https://github.com/superdoc-dev/superdoc/issues/2244)) ([c717e2b](https://github.com/superdoc-dev/superdoc/commit/c717e2bfa7af567ce3a79aa72f358f4e61b530ba))
* **document-api:** doc default initial styles ([#2184](https://github.com/superdoc-dev/superdoc/issues/2184)) ([f25e41f](https://github.com/superdoc-dev/superdoc/commit/f25e41f45ab75da41ab6bee74328c66632371e4a))
* **document-api:** format.paragraph for w:pPr formatting ([#2218](https://github.com/superdoc-dev/superdoc/issues/2218)) ([32c9991](https://github.com/superdoc-dev/superdoc/commit/32c999116ecbd081c65637507618062f3dfb1a07))
* **document-api:** history name space ([#2219](https://github.com/superdoc-dev/superdoc/issues/2219)) ([41dea37](https://github.com/superdoc-dev/superdoc/commit/41dea37a7dc85a14341cdd58513c9b1729f62882))
* **document-api:** hyperlinks commands ([#2294](https://github.com/superdoc-dev/superdoc/issues/2294)) ([4d3bebd](https://github.com/superdoc-dev/superdoc/commit/4d3bebd6c89dd1cbd5c143e61c71beca45daba1b))
* **document-api:** include anchored text in comments list response ([#2177](https://github.com/superdoc-dev/superdoc/issues/2177)) ([b3a2912](https://github.com/superdoc-dev/superdoc/commit/b3a29125bc0dd7ebd4b9724ecf9117601b22c5c1))
* **document-api:** initial image commands ([#2290](https://github.com/superdoc-dev/superdoc/issues/2290)) ([d624231](https://github.com/superdoc-dev/superdoc/commit/d624231a97872af746d93de70129ac734cd363b8))
* **document-api:** inline formatting parity core end-to-end ([#2197](https://github.com/superdoc-dev/superdoc/issues/2197)) ([b405b03](https://github.com/superdoc-dev/superdoc/commit/b405b03c79cafe184bd5db10c9a66a04f118576b))
* **document-api:** inline formatting rpr parity ([#2198](https://github.com/superdoc-dev/superdoc/issues/2198)) ([41ab771](https://github.com/superdoc-dev/superdoc/commit/41ab77144f257cef33e97924dfeda000ae843a71))
* **document-api:** insert table adds extra separator to match ms word ([#2301](https://github.com/superdoc-dev/superdoc/issues/2301)) ([5e49613](https://github.com/superdoc-dev/superdoc/commit/5e496130249a8fc5403f201c667106c5da4961fb))
* **document-api:** lists namespace ([#2223](https://github.com/superdoc-dev/superdoc/issues/2223)) ([09ebfcb](https://github.com/superdoc-dev/superdoc/commit/09ebfcb65dda25fd46ad58320d9d6fb04b2e6f8b))
* **document-api:** make styles.apply registry-driven with schema/validation ([#2267](https://github.com/superdoc-dev/superdoc/issues/2267)) ([cab54ba](https://github.com/superdoc-dev/superdoc/commit/cab54badc20e7002ce82be6f4e02f84e71802717))
* **document-api:** more image commands ([#2295](https://github.com/superdoc-dev/superdoc/issues/2295)) ([4fbbbc9](https://github.com/superdoc-dev/superdoc/commit/4fbbbc987e2469b8fd70c1a07a79dacc801f6733))
* **document-api:** more lists commands ([#2288](https://github.com/superdoc-dev/superdoc/issues/2288)) ([eb48bf1](https://github.com/superdoc-dev/superdoc/commit/eb48bf1cf72da0c780998cf033e851aadc144206))
* **document-api:** section commands ([#2199](https://github.com/superdoc-dev/superdoc/issues/2199)) ([ec4abe3](https://github.com/superdoc-dev/superdoc/commit/ec4abe3993dfb30f4c850dc76cfd55b4237cca77))
* **document-api:** support deleting entire block nodes not only text ([#2181](https://github.com/superdoc-dev/superdoc/issues/2181)) ([2897246](https://github.com/superdoc-dev/superdoc/commit/28972465167ad67824758abb163b5bffef2b7c1c))
* **document-api:** table of contents commands ([#2200](https://github.com/superdoc-dev/superdoc/issues/2200)) ([baa72c4](https://github.com/superdoc-dev/superdoc/commit/baa72c47f89a280df9e400d6af2c63998345c79d))
* **document-api:** tables namespace and commands ([#2182](https://github.com/superdoc-dev/superdoc/issues/2182)) ([b80ee31](https://github.com/superdoc-dev/superdoc/commit/b80ee31230134419a6a0eabadedffe6c4a21e6bd))
* **document-api:** toc commands ([#2220](https://github.com/superdoc-dev/superdoc/issues/2220)) ([767e010](https://github.com/superdoc-dev/superdoc/commit/767e010c8344255e457866f7212e95457f36ad1d))
* enabled telemetry by default and added documentation ([#2001](https://github.com/superdoc-dev/superdoc/issues/2001)) ([8598ef7](https://github.com/superdoc-dev/superdoc/commit/8598ef7d200e666911c68c6c116996ef47fa9261))
* enhance telemetry handling for sub-editors ([#2017](https://github.com/superdoc-dev/superdoc/issues/2017)) ([37bc030](https://github.com/superdoc-dev/superdoc/commit/37bc030bb30a999cb73de0b1a8cd96cc588780dd))
* expose setZoom and getZoom API on SuperDoc ([#2137](https://github.com/superdoc-dev/superdoc/issues/2137)) ([ab09dd5](https://github.com/superdoc-dev/superdoc/commit/ab09dd5dee38081054a3215650d5fc8e6994f128)), closes [#928](https://github.com/superdoc-dev/superdoc/issues/928)
* extend document-api with format, examples, create.heading ([#2092](https://github.com/superdoc-dev/superdoc/issues/2092)) ([fdf8c7c](https://github.com/superdoc-dev/superdoc/commit/fdf8c7cab059dde93ef60c801be8b15a0121b30c))
* **images:** allow drag-and-drop for images in editor ([#2227](https://github.com/superdoc-dev/superdoc/issues/2227)) ([4b36780](https://github.com/superdoc-dev/superdoc/commit/4b367804c35e843f9bf28cce24c4f0b47dfa9e9c))
* layout snapshot testing ([#2035](https://github.com/superdoc-dev/superdoc/issues/2035)) ([b070cd7](https://github.com/superdoc-dev/superdoc/commit/b070cd79d376c528fdc4efdb3371c55a1a3cf908))
* **layout-engine:** render table headers, tblLook support ([#2256](https://github.com/superdoc-dev/superdoc/issues/2256)) ([db6a2ff](https://github.com/superdoc-dev/superdoc/commit/db6a2ffbcb445b2d64e72c2210584e1ac2506bd5))
* **link-popover:** custom link popovers ([#2222](https://github.com/superdoc-dev/superdoc/issues/2222)) ([070190f](https://github.com/superdoc-dev/superdoc/commit/070190fd786d3237a18e057058bf40743645c616))
* **links:** convert pasted hyperlinks into real docx links ([#2270](https://github.com/superdoc-dev/superdoc/issues/2270)) ([7d75522](https://github.com/superdoc-dev/superdoc/commit/7d7552203f0bbc6779149656e447432d50eb2697))
* **lists:** support hidden list indicators via w:vanish ([#2069](https://github.com/superdoc-dev/superdoc/issues/2069)) ([#2080](https://github.com/superdoc-dev/superdoc/issues/2080)) ([0bed0fd](https://github.com/superdoc-dev/superdoc/commit/0bed0fd6e9c40d9b8fbba7ef22d02258d2d363c0))
* llm tools (alpha version) ([#2292](https://github.com/superdoc-dev/superdoc/issues/2292)) ([f954e3d](https://github.com/superdoc-dev/superdoc/commit/f954e3dabead19d3c24a5d5a11a257a0ebce9c2c))
* **markdown:** add markdown override to sdk, improve conversion ([#2196](https://github.com/superdoc-dev/superdoc/issues/2196)) ([04a1c71](https://github.com/superdoc-dev/superdoc/commit/04a1c7179a30fb725bf1e5f5e818f0825b709dc3))
* **markdown:** import images from markdown ([#2303](https://github.com/superdoc-dev/superdoc/issues/2303)) ([b2f6a1a](https://github.com/superdoc-dev/superdoc/commit/b2f6a1ad5692153b60edb5b88347b5c8e37191f7))
* preserve w:view setting through DOCX round-trip ([#2190](https://github.com/superdoc-dev/superdoc/issues/2190)) ([48b4210](https://github.com/superdoc-dev/superdoc/commit/48b421071372793808c3a28578f58ac39490f59d)), closes [#2070](https://github.com/superdoc-dev/superdoc/issues/2070)
* real time collab in python sdk ([#2243](https://github.com/superdoc-dev/superdoc/issues/2243)) ([dc3b4fd](https://github.com/superdoc-dev/superdoc/commit/dc3b4fd742f5d32fa0b553f69102098455df1ec9))
* **super-editor:** add w:lock support for StructuredContent nodes (SD-1616) ([#1939](https://github.com/superdoc-dev/superdoc/issues/1939)) ([2c16f1c](https://github.com/superdoc-dev/superdoc/commit/2c16f1c906ae522e1dd9fb1604d9d7b19d941eef))
* superdoc cli ([d808464](https://github.com/superdoc-dev/superdoc/commit/d808464b7de14ab93e28af594e0ee2ea66e7c153))
* superdoc sdk ([#2129](https://github.com/superdoc-dev/superdoc/issues/2129)) ([3f55d23](https://github.com/superdoc-dev/superdoc/commit/3f55d2366b025d9468ae26f9848582446b280569))
* support TIFF images in DOCX rendering ([#2284](https://github.com/superdoc-dev/superdoc/issues/2284)) ([6436d86](https://github.com/superdoc-dev/superdoc/commit/6436d861efbdb52d592a0069fc84a1f5d830f358)), closes [#2064](https://github.com/superdoc-dev/superdoc/issues/2064)
* **tables:** allow resizing table rows ([#2226](https://github.com/superdoc-dev/superdoc/issues/2226)) ([2c6da10](https://github.com/superdoc-dev/superdoc/commit/2c6da10e4dd217a53f70d7cce741c83943ea5339))
* **tables:** improve cell color application (context), column dragging, table pasting ([#2228](https://github.com/superdoc-dev/superdoc/issues/2228)) ([066b9eb](https://github.com/superdoc-dev/superdoc/commit/066b9eb6336839038a6a425399b6f18c19a3085e))
* **table:** toggle header row sets both cell types and repeatHeader atomically ([#2245](https://github.com/superdoc-dev/superdoc/issues/2245)) ([2f5899d](https://github.com/superdoc-dev/superdoc/commit/2f5899dc16e37dfbbe6eff97015b441f515490a4))
* telemetry ([#1932](https://github.com/superdoc-dev/superdoc/issues/1932)) ([fab3ce9](https://github.com/superdoc-dev/superdoc/commit/fab3ce959dc5d3a21bfeffa5283c01f491d2b4c4))
* **template-builder:** add cspNonce support ([#1911](https://github.com/superdoc-dev/superdoc/issues/1911)) ([5b7b34e](https://github.com/superdoc-dev/superdoc/commit/5b7b34ea3971f98078e5314fc5dd1ef23550afd6))
* **template-builder:** add cspNonce support ([#1911](https://github.com/superdoc-dev/superdoc/issues/1911)) ([bcb9d28](https://github.com/superdoc-dev/superdoc/commit/bcb9d285a196c998cf45c760ba7bfa3b94c95d25))
* the document API limited alpha ([#2087](https://github.com/superdoc-dev/superdoc/issues/2087)) ([091c24c](https://github.com/superdoc-dev/superdoc/commit/091c24cc907731f26f765d03289b458136519b0c))
* **track-changes:** clear comment bubbles when bulk accept or reject TCs ([#2159](https://github.com/superdoc-dev/superdoc/issues/2159)) ([27fbe8e](https://github.com/superdoc-dev/superdoc/commit/27fbe8e754883b07bb8c37579cda13d71686890e))
* **tracked-changes:** allow partial tracked change resolution ([#2252](https://github.com/superdoc-dev/superdoc/issues/2252)) ([988598d](https://github.com/superdoc-dev/superdoc/commit/988598d7f20e263e81715a2f0195abc2ecffe75b))
* update telemetry configuration to prioritize root licenseKey ([#2016](https://github.com/superdoc-dev/superdoc/issues/2016)) ([3b4ff6b](https://github.com/superdoc-dev…
# 1.0.0 (2026-03-20) ### Bug Fixes * account for indentation when drawing paragraph borders ([#1655](https://github.com/superdoc-dev/superdoc/issues/1655)) ([01a8d39](https://github.com/superdoc-dev/superdoc/commit/01a8d394784d714c539963430abc712dc360a0cd)) * active track change ([#2163](https://github.com/superdoc-dev/superdoc/issues/2163)) ([108c14d](https://github.com/superdoc-dev/superdoc/commit/108c14d30fad847e3604d285806823ff9485c2f6)) * add addToHistory to new insertTrackedChange command ([#1767](https://github.com/superdoc-dev/superdoc/issues/1767)) ([e5081be](https://github.com/superdoc-dev/superdoc/commit/e5081be4abdc108f348ea91b95092ae643567c91)) * add ai icons to commons ([9ab0fa4](https://github.com/superdoc-dev/superdoc/commit/9ab0fa42b3f5c1f7f5b2c66cab0c96f240ec786c)) * add another ai selection helper ([d180f4d](https://github.com/superdoc-dev/superdoc/commit/d180f4d97f4b450a55f4feeb5f5fbdee0b24de3b)) * add check for missing var ([539b49b](https://github.com/superdoc-dev/superdoc/commit/539b49b59bbd61fa3d366e5dda4b631ea9a10028)) * add checking for block content or inline when pasting ([4491969](https://github.com/superdoc-dev/superdoc/commit/4491969f38efbddb62cbd4c80654727e8953b694)) * add column balancing and INDEX field support ([#1753](https://github.com/superdoc-dev/superdoc/issues/1753)) ([b2a6f6b](https://github.com/superdoc-dev/superdoc/commit/b2a6f6b931c505751f54ff0fe6cc1b8f7071fbbf)) * add currentTotalPages getter and pagination-update event ([#2202](https://github.com/superdoc-dev/superdoc/issues/2202)) ([95b4579](https://github.com/superdoc-dev/superdoc/commit/95b45793cc7ad4acf714eac2f6f9ac010a62e8ea)), closes [#958](https://github.com/superdoc-dev/superdoc/issues/958) * add destroyed to flag to abort init ([#1616](https://github.com/superdoc-dev/superdoc/issues/1616)) ([4b5fa87](https://github.com/superdoc-dev/superdoc/commit/4b5fa871549a0a1ae721df82f430a1434fd6140f)) * add destroyed to flag to abort init [stable] ([#1617](https://github.com/superdoc-dev/superdoc/issues/1617)) ([337b452](https://github.com/superdoc-dev/superdoc/commit/337b4520d0e6e68da50855e6e5dd6f476df2ebd0)) * add dispatch method type and mark view as optional for headless mode ([#1728](https://github.com/superdoc-dev/superdoc/issues/1728)) ([45195d7](https://github.com/superdoc-dev/superdoc/commit/45195d78b4eb5b7b879ce4837393ce83f03ba595)) * add double click event for annotation ([#1803](https://github.com/superdoc-dev/superdoc/issues/1803)) ([509c882](https://github.com/superdoc-dev/superdoc/commit/509c8821d4222130c68d99ef65f22aaf4796159b)) * add error notice if invalid docx is opened, fallback to blank ([0af7a7d](https://github.com/superdoc-dev/superdoc/commit/0af7a7df20a0163798b9f5489781375aa63192c5)) * add in safety check for dispatch ([3550f80](https://github.com/superdoc-dev/superdoc/commit/3550f8033776bab508d6c83d81d8c28d85c128ac)) * add missing DrawingML namespaces ([#1719](https://github.com/superdoc-dev/superdoc/issues/1719)) ([9bfd977](https://github.com/superdoc-dev/superdoc/commit/9bfd977837fa2c6137eed3149794292580ddb2ac)) * add missing id generation call to image validator, fix tests for image validator ([c337647](https://github.com/superdoc-dev/superdoc/commit/c337647525cf3b98e7e313e42cdbc59d84b40da8)) * add pm exports ([#1146](https://github.com/superdoc-dev/superdoc/issues/1146)) ([0bf371a](https://github.com/superdoc-dev/superdoc/commit/0bf371a0936c416cfed9309a61ec77f841afd207)) * add processing for line-height defined in px ([#880](https://github.com/superdoc-dev/superdoc/issues/880)) ([3b61275](https://github.com/superdoc-dev/superdoc/commit/3b61275eccce054cf88fdb9251780018d9e09575)) * add relationship and rId ([#776](https://github.com/superdoc-dev/superdoc/issues/776)) ([46beadb](https://github.com/superdoc-dev/superdoc/commit/46beadb7a2a89f07ad71709340a2f017ba2e104f)) * add safety check for clipboard usage ([#859](https://github.com/superdoc-dev/superdoc/issues/859)) ([bfca96e](https://github.com/superdoc-dev/superdoc/commit/bfca96ea30f60d68229a6648152fb1d49c8de277)) * add support for vrect nodes ([#758](https://github.com/superdoc-dev/superdoc/issues/758)) ([acabf81](https://github.com/superdoc-dev/superdoc/commit/acabf81489d42dc48ec5a32051a65ac04e7075bc)) * add tooltip to table actions ([#1093](https://github.com/superdoc-dev/superdoc/issues/1093)) ([983f0de](https://github.com/superdoc-dev/superdoc/commit/983f0de9fa7e1bf7e885eb30b26f74fc4d63e546)) * add type declaration for Editor.loadXmlData and Editor.open ([#1727](https://github.com/superdoc-dev/superdoc/issues/1727)) ([ae452a9](https://github.com/superdoc-dev/superdoc/commit/ae452a98409e6c34c9d08b1ba12e2c21e0f9f0ab)) * add type definitions for PresentationEditor ([#2271](https://github.com/superdoc-dev/superdoc/issues/2271)) ([5402196](https://github.com/superdoc-dev/superdoc/commit/5402196e73997b83ddd1d4f270c82e3a85c3365f)) * add typesVersions for TypeScript subpath exports ([#1851](https://github.com/superdoc-dev/superdoc/issues/1851)) ([923ab29](https://github.com/superdoc-dev/superdoc/commit/923ab293329f94a04df43cc337bab4e29149e518)) * adding table to sdt ([#1709](https://github.com/superdoc-dev/superdoc/issues/1709)) ([260b987](https://github.com/superdoc-dev/superdoc/commit/260b987e1a20ff3405f41b16d02ef936db023578)) * additional comments fixes ([#1248](https://github.com/superdoc-dev/superdoc/issues/1248)) ([d8d6e52](https://github.com/superdoc-dev/superdoc/commit/d8d6e526faa0bd7cd1b7970d3fac5fc8d25f74af)) * additional comments fixes ([#1248](https://github.com/superdoc-dev/superdoc/issues/1248)) ([#1249](https://github.com/superdoc-dev/superdoc/issues/1249)) ([911f17c](https://github.com/superdoc-dev/superdoc/commit/911f17cdf1df8496b3b93c52398f453aa873e260)) * additional fixes for view mode ([#1676](https://github.com/superdoc-dev/superdoc/issues/1676)) ([fc2b7d6](https://github.com/superdoc-dev/superdoc/commit/fc2b7d6436229b88453ddf7589fdfca333957c74)) * additional fixes to list indent/outdent, split list, toggle list, types and more tests ([02e6cd9](https://github.com/superdoc-dev/superdoc/commit/02e6cd971b672adc7a27ee6f4c3e491ea6582927)) * adjust pagination spacer height range in tests ([029c838](https://github.com/superdoc-dev/superdoc/commit/029c838c3bc8ff40d94d02ec5652fa46acc31c4b)) * adjusted row height not preserved when table doesn't fit current page ([#1642](https://github.com/superdoc-dev/superdoc/issues/1642)) ([edcab55](https://github.com/superdoc-dev/superdoc/commit/edcab5507ee92d56ab25079b7345928c8dd7839a)) * **ai-actions:** preserve html/markdown insertion and prevent repeated formatted replacement ([#2117](https://github.com/superdoc-dev/superdoc/issues/2117)) ([9f685e9](https://github.com/superdoc-dev/superdoc/commit/9f685e964b5156d0d177e2fa0a72a4129d2a0443)) * **ai:** support headless mode in EditorAdapter.applyPatch ([#1859](https://github.com/superdoc-dev/superdoc/issues/1859)) ([cf9275d](https://github.com/superdoc-dev/superdoc/commit/cf9275d3bffd144491701508103af4c7b8f1708e)) * **ai:** use semver range for superdoc peer dependency ([#1684](https://github.com/superdoc-dev/superdoc/issues/1684)) ([f9f9e20](https://github.com/superdoc-dev/superdoc/commit/f9f9e20ed0c340b3bf009aa3598f98640a4971eb)) * allow .5 font sizes ([#1060](https://github.com/superdoc-dev/superdoc/issues/1060)) ([4747145](https://github.com/superdoc-dev/superdoc/commit/47471457a54193f6eea02e5bce20ebd03e5108b0)) * allow both leading and trailing spaces ([#1100](https://github.com/superdoc-dev/superdoc/issues/1100)) ([b74bbd5](https://github.com/superdoc-dev/superdoc/commit/b74bbd517024388ed0779f023f7a296cc2774551)) * allow both leading and trailing spaces ([#1100](https://github.com/superdoc-dev/superdoc/issues/1100)) ([#1103](https://github.com/superdoc-dev/superdoc/issues/1103)) ([315d3e2](https://github.com/superdoc-dev/superdoc/commit/315d3e2b177619af25d7b68619fdd8908a9e8afc)) * allow override row borders ([#1672](https://github.com/superdoc-dev/superdoc/issues/1672)) ([a4bb109](https://github.com/superdoc-dev/superdoc/commit/a4bb109fde65f02442c4ee5e1930fe90877bc107)) * allow paste from context menu ([#1910](https://github.com/superdoc-dev/superdoc/issues/1910)) ([b6666bf](https://github.com/superdoc-dev/superdoc/commit/b6666bf94a3bc6a4f8a71a49e95136e2e5e9e2ae)) * allow programmatic tracked change skipping undo history ([#1202](https://github.com/superdoc-dev/superdoc/issues/1202)) ([826b620](https://github.com/superdoc-dev/superdoc/commit/826b6202ee242e004f9302f58ff6f5c06cfe7cd6)) * allow regex search across docx run wrappers ([#1021](https://github.com/superdoc-dev/superdoc/issues/1021)) ([053fedc](https://github.com/superdoc-dev/superdoc/commit/053fedcf2f6b611ea5b4bb431fcb306c299d73a0)) * allow toolbar when typing font size ([0cac27c](https://github.com/superdoc-dev/superdoc/commit/0cac27cc5b30d6e05a862dd4f35fed6fb2a9e15b)) * allow top/bottom images to float right and left ([#1203](https://github.com/superdoc-dev/superdoc/issues/1203)) ([d3f1e47](https://github.com/superdoc-dev/superdoc/commit/d3f1e4742af0982d616382b155056119029a84c3)) * always call resolveComment after custom TC bubble handlers (SD-2049) ([#2204](https://github.com/superdoc-dev/superdoc/issues/2204)) ([34fb4e0](https://github.com/superdoc-dev/superdoc/commit/34fb4e07e32c76d6c53580c9046db19e5024bb08)) * anchor images in table cells ([#1742](https://github.com/superdoc-dev/superdoc/issues/1742)) ([f77e7bd](https://github.com/superdoc-dev/superdoc/commit/f77e7bd538fc013d7de0bfc66c1c4880761c61b7)) * anchor table overlaps text ([#1995](https://github.com/superdoc-dev/superdoc/issues/1995)) ([fc05e29](https://github.com/superdoc-dev/superdoc/commit/fc05e295efef9e02db9d7cccafc771d3d00da3e6)) * **anchor-nav:** use correct scroll container for sub-page bookmark navigation ([a300536](https://github.com/superdoc-dev/superdoc/commit/a300536111890565c6b53b0842551a5c2f4c191a)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer) * annotation and interaction issues ([#1847](https://github.com/superdoc-dev/superdoc/issues/1847)) ([ffb1055](https://github.com/superdoc-dev/superdoc/commit/ffb1055dcf21916a23b221655a9eff8828d49fa0)) * annotation drop ([#1789](https://github.com/superdoc-dev/superdoc/issues/1789)) ([f384213](https://github.com/superdoc-dev/superdoc/commit/f3842134ab2648fc46752688350dbebb88f58f5a)) * annotation events in layout engine ([#1685](https://github.com/superdoc-dev/superdoc/issues/1685)) ([db24ff8](https://github.com/superdoc-dev/superdoc/commit/db24ff80afb9c048899060e3121e6b4d3e2edfac)) * annotation formatting ([0ac67b2](https://github.com/superdoc-dev/superdoc/commit/0ac67b20e6dca1aebe077eaf5e7e116ad61b2135)) * annotation issues ([#1752](https://github.com/superdoc-dev/superdoc/issues/1752)) ([9b13ce0](https://github.com/superdoc-dev/superdoc/commit/9b13ce0141f9f526bdaa6cfc5ea18616290b0688)) * annotation selection ([#1762](https://github.com/superdoc-dev/superdoc/issues/1762)) ([1c831cc](https://github.com/superdoc-dev/superdoc/commit/1c831cca106584d094f9d07c00f22fd51374ef1e)) * annotation selection, applying formatting ([#1784](https://github.com/superdoc-dev/superdoc/issues/1784)) ([924af4b](https://github.com/superdoc-dev/superdoc/commit/924af4be941717c202821ba10d9372dbe78a1954)) * annotations import ([#755](https://github.com/superdoc-dev/superdoc/issues/755)) ([b6135ac](https://github.com/superdoc-dev/superdoc/commit/b6135ac08fbbcc29d5e3f33519620ac7789450cf)) * apply correct style to inserted links ([#1871](https://github.com/superdoc-dev/superdoc/issues/1871)) ([36e3c4b](https://github.com/superdoc-dev/superdoc/commit/36e3c4b066a02fbcac4e53cc3df2c3cefaf207fb)) * arrow key navigation through and out of tables (SD-2236) ([#2476](https://github.com/superdoc-dev/superdoc/issues/2476)) ([d5317ef](https://github.com/superdoc-dev/superdoc/commit/d5317efaf3e75cb5af60078fbdb154564f45457e)) * auto color in tables with dark cells ([#1644](https://github.com/superdoc-dev/superdoc/issues/1644)) ([f498a03](https://github.com/superdoc-dev/superdoc/commit/f498a03dff563e7e24aaed78cbbb3b93bedf23a8)) * backspaceNextToList, toggleList and tests ([8b33258](https://github.com/superdoc-dev/superdoc/commit/8b33258aa9a09cd566191083de2095377f532de5)) * backward replace insert text ([#2172](https://github.com/superdoc-dev/superdoc/issues/2172)) ([66f0849](https://github.com/superdoc-dev/superdoc/commit/66f08497dd5642db2be6b8729c9bbc84a862ae20)) * before paragraph spacing inside table cells ([#1842](https://github.com/superdoc-dev/superdoc/issues/1842)) ([c7efa85](https://github.com/superdoc-dev/superdoc/commit/c7efa857abdfa6a0f129f73e3c5654b573c1028c)) * behavior tests ([#2436](https://github.com/superdoc-dev/superdoc/issues/2436)) ([2d087f2](https://github.com/superdoc-dev/superdoc/commit/2d087f2e0df6bac519f5868b0f45d8a84911ee1b)) * block ID collisions and missing positions in paragraph converter ([3e75a98](https://github.com/superdoc-dev/superdoc/commit/3e75a9827fdb8b1847632e6a5b7f8f5dcabcabd1)) * block keyboard, paste, and drop events in view mode during collab ([#1471](https://github.com/superdoc-dev/superdoc/issues/1471)) ([48b2555](https://github.com/superdoc-dev/superdoc/commit/48b2555552ca124d23444d1569b47c43746050da)) * bookmarks inside table cells break import ([#1133](https://github.com/superdoc-dev/superdoc/issues/1133)) ([a090084](https://github.com/superdoc-dev/superdoc/commit/a090084d4eac56f49c82684bca64fcf10fb2ee8d)) * bookmarkStart custom round trip, tests, add example doc with round trip tests ([#1014](https://github.com/superdoc-dev/superdoc/issues/1014)) ([0849157](https://github.com/superdoc-dev/superdoc/commit/0849157933eda9bf4c0917620e28cac8a9f34cab)) * breaking structured document node import ([a470070](https://github.com/superdoc-dev/superdoc/commit/a47007029ce0ff44008b67f1bcac6d489273793a)) * bug - page number format from first section overrides number ([#1654](https://github.com/superdoc-dev/superdoc/issues/1654)) ([c45ecfa](https://github.com/superdoc-dev/superdoc/commit/c45ecfae71be17953e88662e8e646dab173b4c61)) * bug text edit commands fail on targets returned by find ([#2488](https://github.com/superdoc-dev/superdoc/issues/2488)) ([7a9a448](https://github.com/superdoc-dev/superdoc/commit/7a9a448954e8cf36a4773e834df57a8bf02289fa)) * bug watermarks render darker than they should [SD-1469] ([#1737](https://github.com/superdoc-dev/superdoc/issues/1737)) ([7ce423d](https://github.com/superdoc-dev/superdoc/commit/7ce423d445366c0e400b4143bec3cdd9d8b28e88)) * **build:** add node polyfills to UMD bundle and angular to CI matrix ([13fa579](https://github.com/superdoc-dev/superdoc/commit/13fa579c5e10a5da26c7308887e82123d914659c)) * **build:** remove dead vite-plugin-node-polyfills from UMD externals ([91de1fc](https://github.com/superdoc-dev/superdoc/commit/91de1fc2e47b0061d088db5d46b0da4cc07dc837)) * can't add deletion track change when selected content has link/another track change ([#1591](https://github.com/superdoc-dev/superdoc/issues/1591)) ([63121e8](https://github.com/superdoc-dev/superdoc/commit/63121e8dd810b8a05f3e6b8688ef5a1769849225)) * capitalize InputRule in broken import ([73e16cb](https://github.com/superdoc-dev/superdoc/commit/73e16cb209006dddd0e7bd4546529f55bd3b908a)) * caret in lists ([#1683](https://github.com/superdoc-dev/superdoc/issues/1683)) ([c7b9847](https://github.com/superdoc-dev/superdoc/commit/c7b984783eee79698d74617e26c5f6eeb76d4a6d)) * change default link protocol ([#2319](https://github.com/superdoc-dev/superdoc/issues/2319)) ([1deda06](https://github.com/superdoc-dev/superdoc/commit/1deda06897787ae7f14641a5580fa5e1c5881217)) * changed hard break file ([ebc27da](https://github.com/superdoc-dev/superdoc/commit/ebc27da52a749ac065bf1a085899c5ab12a360b7)) * **ci:** include sub-package commits in superdoc release filter ([a2c237b](https://github.com/superdoc-dev/superdoc/commit/a2c237bb631130de5ae345209ca109f1ff645519)) * **ci:** move superdoc releaserc to package dir for proper commit filtering ([688f8e0](https://github.com/superdoc-dev/superdoc/commit/688f8e09df258d7279e7364c03d08e217c742c3d)) * clean up lint warnings and remove unused code ([#754](https://github.com/superdoc-dev/superdoc/issues/754)) ([df73156](https://github.com/superdoc-dev/superdoc/commit/df7315657dc56b6dfc59d18029c010b39d4deb30)) * clear linked style for the next paragraph ([#2344](https://github.com/superdoc-dev/superdoc/issues/2344)) ([9714ffb](https://github.com/superdoc-dev/superdoc/commit/9714ffbaa6a8a589fc257756cb7fd2eb2de81515)) * clear selection on undo/redo ([#2385](https://github.com/superdoc-dev/superdoc/issues/2385)) ([6473acf](https://github.com/superdoc-dev/superdoc/commit/6473acf4e846c481975554024d514a5b9480e97f)) * cli package public ([7dad84d](https://github.com/superdoc-dev/superdoc/commit/7dad84da35c78f45072907dfde94ec782b362a8f)) * cli skills install ([ed7436a](https://github.com/superdoc-dev/superdoc/commit/ed7436ab550b11d9eb1b205bce31dfa358243d29)) * **cli:** add jsdoc params to formatReplaceResult ([#1923](https://github.com/superdoc-dev/superdoc/issues/1923)) ([e52ddf9](https://github.com/superdoc-dev/superdoc/commit/e52ddf9bf010947d9435b788ab7753d136a801f1)) * **cli:** add param jsdoc to expandGlobs ([df8c3c6](https://github.com/superdoc-dev/superdoc/commit/df8c3c625be5901f4551d99318a43f47e3dfb7fb)) * **cli:** add returns jsdoc to formatSearchResult ([d0a0438](https://github.com/superdoc-dev/superdoc/commit/d0a04389b05d1f79d1c5111ed82e4feaf5b1af20)) * **cli:** document -h flag in help text ([020c4a0](https://github.com/superdoc-dev/superdoc/commit/020c4a0d58e079e1912c0773c095806bbc51eafa)) * **cli:** document -h flag in help text ([68fa42f](https://github.com/superdoc-dev/superdoc/commit/68fa42fabbbc44b41d644b9010a12fa2573e7e8c)) * **cli:** include allowed values in oneOf const validation errors ([#2455](https://github.com/superdoc-dev/superdoc/issues/2455)) ([8802f90](https://github.com/superdoc-dev/superdoc/commit/8802f90798c5c2c632b6eb6b418fc46b63e52093)) * **cli:** lowercase docx in help text ([#1928](https://github.com/superdoc-dev/superdoc/issues/1928)) ([13f9db6](https://github.com/superdoc-dev/superdoc/commit/13f9db6897a070525fe2ea4ccaf98c3be245faeb)) * **cli:** move bundled deps to devDependencies ([6a362ed](https://github.com/superdoc-dev/superdoc/commit/6a362ed87baad3d08cec2298980290ea2183c1ac)) * **cli:** normalize dash in help text ([b2e7d36](https://github.com/superdoc-dev/superdoc/commit/b2e7d36631db90863ce6ba263daff55d32220b99)) * **cli:** prevent collab reopen from overwriting existing ydoc with blank document (SD-2138) ([#2296](https://github.com/superdoc-dev/superdoc/issues/2296)) ([41b0345](https://github.com/superdoc-dev/superdoc/commit/41b0345367e32d0f053825c9f8733f1351f52760)) * **cli:** remove bundled deps from package.json ([f90d4af](https://github.com/superdoc-dev/superdoc/commit/f90d4af095a8e4cf5fca34774855a28559dec5de)) * **cli:** restore tracked diff redline roundtrip ([#2438](https://github.com/superdoc-dev/superdoc/issues/2438)) ([f609371](https://github.com/superdoc-dev/superdoc/commit/f60937167d02270646ea73f2a8474cb21e514094)) * close toolbar overflow menu on click outside ([#2377](https://github.com/superdoc-dev/superdoc/issues/2377)) ([ba74245](https://github.com/superdoc-dev/superdoc/commit/ba7424521cd003e1a6001902fc524d34e3005b3f)) * closing dropdown after clicking again ([#835](https://github.com/superdoc-dev/superdoc/issues/835)) ([88ff88d](https://github.com/superdoc-dev/superdoc/commit/88ff88d06568716d78be4fcdc311cbba0e6ba3fd)) * collaboratio tests and more scenarios ([4153017](https://github.com/superdoc-dev/superdoc/commit/4153017da205a32c853da3cbafad57fda881cc94)) * collaboration cursor styles fix ([fd6db10](https://github.com/superdoc-dev/superdoc/commit/fd6db10558caa4136da262ad10b751dbb4bdac2c)) * **collaboration:** add debouncing to header/footer Y.Doc updates ([#1861](https://github.com/superdoc-dev/superdoc/issues/1861)) ([90d0f65](https://github.com/superdoc-dev/superdoc/commit/90d0f6549e9c207e127da72466a41c63035c7c85)) * **collaboration:** deduplicate updateYdocDocxData during replaceFile (SD-1920) ([#2162](https://github.com/superdoc-dev/superdoc/issues/2162)) ([52962fc](https://github.com/superdoc-dev/superdoc/commit/52962fc139734130a6882c9fcbd1856ff72d1c3d)) * **collaboration:** memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924) ([#2030](https://github.com/superdoc-dev/superdoc/issues/2030)) ([a6827fd](https://github.com/superdoc-dev/superdoc/commit/a6827fdda860171124aae4838d354dd68d52d017)), closes [#prepareDocumentForExport](https://github.com/superdoc-dev/superdoc/issues/prepareDocumentForExport) * **collaboration:** preserve body section properties across Yjs sync ([#2356](https://github.com/superdoc-dev/superdoc/issues/2356)) ([ea702d6](https://github.com/superdoc-dev/superdoc/commit/ea702d6dd7d8c96f6d0dac83e34f24924d1f9fa7)) * **collab:** prevent stale view when remote Y.js changes bypass sdBlockRev increment ([#2099](https://github.com/superdoc-dev/superdoc/issues/2099)) ([0895a93](https://github.com/superdoc-dev/superdoc/commit/0895a93bb9e718f4f533a55e8f4022ed0ebc97bc)) * comment text after enter break is dropped on render and export ([#1853](https://github.com/superdoc-dev/superdoc/issues/1853)) ([ce7f553](https://github.com/superdoc-dev/superdoc/commit/ce7f5534afaa8e46cb4d4e41fb6478575dea26e3)) * comments focus ([cbd3d3e](https://github.com/superdoc-dev/superdoc/commit/cbd3d3ee35a4b6758702b3893e95c5a77dd404ca)) * comments module typedef for disable [stable] ([#1494](https://github.com/superdoc-dev/superdoc/issues/1494)) ([bdac63c](https://github.com/superdoc-dev/superdoc/commit/bdac63c05f8f8ae122023d4eee70450ac12695a5)) * comments not exporting ([e3647a7](https://github.com/superdoc-dev/superdoc/commit/e3647a7e3d6a8db7e00f10616b01304e9ca77a39)) * comments not exporting ([#1246](https://github.com/superdoc-dev/superdoc/issues/1246)) ([d967d5e](https://github.com/superdoc-dev/superdoc/commit/d967d5eb88833f1c77f3be667cf831ce0191b067)) * comments not repositioning after you add comment to existing dialog ([ffa51ae](https://github.com/superdoc-dev/superdoc/commit/ffa51ae37913c6674431b94f56081b9d7adb36f2)) * **comments:** create dynamic comment export system based on document origin type ([#1733](https://github.com/superdoc-dev/superdoc/issues/1733)) ([b55fddf](https://github.com/superdoc-dev/superdoc/commit/b55fddf429549f462e1b61747c89e2ab85ad4d45)), closes [#1618](https://github.com/superdoc-dev/superdoc/issues/1618) * **comments:** cross-page collision avoidance for floating comment bubbles (SD-1998) ([#2180](https://github.com/superdoc-dev/superdoc/issues/2180)) ([6cfbeca](https://github.com/superdoc-dev/superdoc/commit/6cfbecae5e8579556a377b7a35168cbb7cfce31f)) * **comments:** emit empty comment positions so undo clears orphan bubbles ([#2235](https://github.com/superdoc-dev/superdoc/issues/2235)) ([12ba727](https://github.com/superdoc-dev/superdoc/commit/12ba72709fc37f207c97305852f40ef4e393893b)) * **comments:** improve comments on tracked changes imported from google docs and word [SD-1033] ([#1631](https://github.com/superdoc-dev/superdoc/issues/1631)) ([1d8873a](https://github.com/superdoc-dev/superdoc/commit/1d8873ae372a65d16c5f46c4dee9980e8159c6e2)) * **comments:** improve multiline comment input styling ([#2242](https://github.com/superdoc-dev/superdoc/issues/2242)) ([e6a0dab](https://github.com/superdoc-dev/superdoc/commit/e6a0dab8abca8a24c5e0c8a9096c357df28eaf8a)) * **comments:** keep floating comment bubbles aligned with the selected thread (SD-2210 and SD-2223) ([#2390](https://github.com/superdoc-dev/superdoc/issues/2390)) ([b014618](https://github.com/superdoc-dev/superdoc/commit/b014618d70ffd92d587033212cd965fe49dfe730)) * **comments:** pass superdoc instance when canceling pending comment ([#1862](https://github.com/superdoc-dev/superdoc/issues/1862)) ([4982bac](https://github.com/superdoc-dev/superdoc/commit/4982bac97c5f7e141d7029b9ba7b832ee509e165)) * **comments:** preserve resolved comment status and range on export ([#1674](https://github.com/superdoc-dev/superdoc/issues/1674)) ([390e40a](https://github.com/superdoc-dev/superdoc/commit/390e40afc2358e7ad4f1f90e9c6ea3044f94ec73)) * **comments:** prevent comment mark from extending to adjacent typed text ([#2241](https://github.com/superdoc-dev/superdoc/issues/2241)) ([07fecd8](https://github.com/superdoc-dev/superdoc/commit/07fecd8f0f6c88f338b59fca6105467cf66cc7ab)) * **comments:** reduce sidebar jitter when clicking comments (SD-2034) ([#2250](https://github.com/superdoc-dev/superdoc/issues/2250)) ([c3568d2](https://github.com/superdoc-dev/superdoc/commit/c3568d2d6fc4d91125cede042084ed124a9b2072)) * **comments:** remove synchronous dispatch from plugin apply() (SD-1940) ([#2157](https://github.com/superdoc-dev/superdoc/issues/2157)) ([887175b](https://github.com/superdoc-dev/superdoc/commit/887175bf29b3dc86cf56865311d488b377b36aaf)) * **comments:** resolve double-click activation and edit mode issues (SD-2035) ([#2259](https://github.com/superdoc-dev/superdoc/issues/2259)) ([d9465aa](https://github.com/superdoc-dev/superdoc/commit/d9465aad87bc3fcd2c263faf06e6ecc94cd68ea0)) * **comments:** use last paragraph paraId for threading ([#1671](https://github.com/superdoc-dev/superdoc/issues/1671)) ([50ffea6](https://github.com/superdoc-dev/superdoc/commit/50ffea69cfe167f895b65d0b36f0d9d41e15e6f7)) * consider code feedback ([a5c1147](https://github.com/superdoc-dev/superdoc/commit/a5c11472681c46ebe9726773acb8d4d90c5a9b6b)) * consider code review comments ([4360b4d](https://github.com/superdoc-dev/superdoc/commit/4360b4da2e340ea0088afc208de85d493bf4a0fd)) * console log ([4b64109](https://github.com/superdoc-dev/superdoc/commit/4b64109b92623cfb7582774c45f96cac47a8280f)) * consolidate deletions under new replacement ([#2094](https://github.com/superdoc-dev/superdoc/issues/2094)) ([0a84b86](https://github.com/superdoc-dev/superdoc/commit/0a84b8604c9a30ed2755cfd0ecc7694e1999c6eb)) * content not editable on safari ([#1304](https://github.com/superdoc-dev/superdoc/issues/1304)) ([9972b1f](https://github.com/superdoc-dev/superdoc/commit/9972b1f9da7a4a7d090488aab159a85fb1c81a96)) * content-block node ext wrong schema and rendering rules ([#965](https://github.com/superdoc-dev/superdoc/issues/965)) ([64fa2fc](https://github.com/superdoc-dev/superdoc/commit/64fa2fc2a1a52d2700c0e820b6384b87e8d3bf35)) * content-block node ext wrong schema and rendering rules ([#965](https://github.com/superdoc-dev/superdoc/issues/965)) ([#966](https://github.com/superdoc-dev/superdoc/issues/966)) ([f037f44](https://github.com/superdoc-dev/superdoc/commit/f037f44eddfa3fd31cd36f4f8b4dbfb6300437ee)) * context menu bypass standards ([#1029](https://github.com/superdoc-dev/superdoc/issues/1029)) ([99e6bf7](https://github.com/superdoc-dev/superdoc/commit/99e6bf70244116f5be464737dc03d7e1b2dc4f83)) * context menu bypass standards ([#1032](https://github.com/superdoc-dev/superdoc/issues/1032)) ([8c80c2c](https://github.com/superdoc-dev/superdoc/commit/8c80c2cc92a531e2296de9d7d03c8a85ea415da6)) * context menu clicks would change selection position ([#1889](https://github.com/superdoc-dev/superdoc/issues/1889)) ([ace0daf](https://github.com/superdoc-dev/superdoc/commit/ace0dafcf58535ec0ba6ff48efcd7ee113b021ce)) * **context-menu:** paste via context menu inserts at wrong position (SD-1302) ([#2110](https://github.com/superdoc-dev/superdoc/issues/2110)) ([30f03f9](https://github.com/superdoc-dev/superdoc/commit/30f03f93b59261a7fce55e7d62cc83897b457afd)) * contextual spacing in layout engine ([#1587](https://github.com/superdoc-dev/superdoc/issues/1587)) ([52188ca](https://github.com/superdoc-dev/superdoc/commit/52188ca89d879f7081ff8c6bb8e8d1cb8ea28ef8)) * convert var to zero when undefined ([ccf3478](https://github.com/superdoc-dev/superdoc/commit/ccf34784007e7faea0c2e64d25a466d4648637e3)) * **converter:** handle absolute paths in header/footer relationship targets ([#1945](https://github.com/superdoc-dev/superdoc/issues/1945)) ([9d82632](https://github.com/superdoc-dev/superdoc/commit/9d82632c62a70cc6cb19015f9fca89b3f28a4323)) * **converter:** handle empty rPrChange run properties without dropping tracked-style runs ([c25d24d](https://github.com/superdoc-dev/superdoc/commit/c25d24d35534c39836c3251ee9baf1b908a6c78c)) * **converter:** handle null list lvlText and always clear numbering cache ([#2113](https://github.com/superdoc-dev/superdoc/issues/2113)) ([336958c](https://github.com/superdoc-dev/superdoc/commit/336958ca9b39ebcc436fc77fb1daae82ddbd8b0c)) * correct cursor position when typing after fully track-deleted content ([#1828](https://github.com/superdoc-dev/superdoc/issues/1828)) ([8de1c5f](https://github.com/superdoc-dev/superdoc/commit/8de1c5f142fae6b2362d3640b698fe6277ab45d7)) * correct indentation for table cells with explicit tab positioning ([#1743](https://github.com/superdoc-dev/superdoc/issues/1743)) ([1fd6b74](https://github.com/superdoc-dev/superdoc/commit/1fd6b74a95c0eae8b1b23c27e7046ae529c95fc3)) * correct typeof comparison in list migration ([6a75ef7](https://github.com/superdoc-dev/superdoc/commit/6a75ef79dc4aaced07fcdd0537b53fed99cb35e7)) * correct typo in exporter debug parameter ([eb7c45d](https://github.com/superdoc-dev/superdoc/commit/eb7c45d5ac9b3d666c130598848398949c225c34)), closes [#generate_xml_as_list](https://github.com/superdoc-dev/superdoc/issues/generate_xml_as_list) * correctly pass table info when deriving inline run properties (SD-1865) ([#2007](https://github.com/superdoc-dev/superdoc/issues/2007)) ([d752aff](https://github.com/superdoc-dev/superdoc/commit/d752afff9dc11041798ea2a28d487cc190e13383)) * correctly position vector shape relative to paragraph ([#1687](https://github.com/superdoc-dev/superdoc/issues/1687)) ([4c38cb9](https://github.com/superdoc-dev/superdoc/commit/4c38cb9145c2256f2ff289338fb5cf58ecf3a4c7)) * correctly set color and highlight of pasted text ([#2033](https://github.com/superdoc-dev/superdoc/issues/2033)) ([41058b5](https://github.com/superdoc-dev/superdoc/commit/41058b5bfadbc34d83891afe88c6b8c24505f83c)) * create document section node selection ([dfd2e81](https://github.com/superdoc-dev/superdoc/commit/dfd2e81beaacd676099e43a5a65d42d55a89b462)) * create document section node selection ([60b7b26](https://github.com/superdoc-dev/superdoc/commit/60b7b26dd7c1f31b4824ddd4339c6d54db32484c)) * createNewList in input rule to fix new list in tables, lint ([aa79655](https://github.com/superdoc-dev/superdoc/commit/aa796558d84a9dda9177181d547281e668500b6e)) * creating list definitions with null ids ([#804](https://github.com/superdoc-dev/superdoc/issues/804)) ([e6511b9](https://github.com/superdoc-dev/superdoc/commit/e6511b973026f28a26ff1d25a71df2df69d99488)) * css style isolation after shape groups ([c428122](https://github.com/superdoc-dev/superdoc/commit/c428122218187c70ad54e9e8a870898993b40354)) * **css:** scope ProseMirror CSS to prevent bleeding into host apps (SD-1850) ([#2134](https://github.com/superdoc-dev/superdoc/issues/2134)) ([b9d98fa](https://github.com/superdoc-dev/superdoc/commit/b9d98fa926532f63c71c55ed8bb5b89019ee4246)) * cursor delay when dragging over a document ([#1802](https://github.com/superdoc-dev/superdoc/issues/1802)) ([58691f1](https://github.com/superdoc-dev/superdoc/commit/58691f1f1573fb18ad724a78db454d33d3c3e99f)) * cursor drift during vertical arrow navigation (SD-1689) ([#1918](https://github.com/superdoc-dev/superdoc/issues/1918)) ([982118d](https://github.com/superdoc-dev/superdoc/commit/982118df475b3178351713f0c00f6fe447853c61)) * declare w15 namespace when bootstrapping numbering.xml ([#2470](https://github.com/superdoc-dev/superdoc/issues/2470)) ([a14004d](https://github.com/superdoc-dev/superdoc/commit/a14004def510008cd70994ce6e82916986a673f7)) * default field export background transparent, allow config on export ([#770](https://github.com/superdoc-dev/superdoc/issues/770)) ([1ab87d1](https://github.com/superdoc-dev/superdoc/commit/1ab87d1daa3c878dd1ca4461a003e826d5760b6b)) * definition possibly missing name key, add jsdoc ([bb714f1](https://github.com/superdoc-dev/superdoc/commit/bb714f14635239301ed6931bb06259b299b11fa8)) * delete decoration widget blocks parent list item ([#1200](https://github.com/superdoc-dev/superdoc/issues/1200)) ([4b58fd6](https://github.com/superdoc-dev/superdoc/commit/4b58fd62471dbef99a36972963fb3403b621b118)) * deleting tracked change in suggestion to match word ([#1710](https://github.com/superdoc-dev/superdoc/issues/1710)) ([d6e780f](https://github.com/superdoc-dev/superdoc/commit/d6e780f8fc753cb6cd94d4317f482c997b9bc9a5)) * **diffing:** ignore volatile OOXML attrs in image and paragraph diff comparison ([#2421](https://github.com/superdoc-dev/superdoc/issues/2421)) ([ca91225](https://github.com/superdoc-dev/superdoc/commit/ca912256f5f66a2504372b8ebced154f8bbcb695)) * disable footnotes typing ([#1974](https://github.com/superdoc-dev/superdoc/issues/1974)) ([92b4d62](https://github.com/superdoc-dev/superdoc/commit/92b4d6288a48275435660ae2a848b064506390f6)) * disable setDocumentMode for header/footer editors ([#1149](https://github.com/superdoc-dev/superdoc/issues/1149)) ([ab75952](https://github.com/superdoc-dev/superdoc/commit/ab75952e9a90b3c28484054517fb91f0935b2b56)) * disable table resizing UI in viewing mode ([#2403](https://github.com/superdoc-dev/superdoc/issues/2403)) ([697e799](https://github.com/superdoc-dev/superdoc/commit/697e799a472527c84414327189025f65d9f3d30b)) * dispatch tracked changes transaction only once at import ([31ecec7](https://github.com/superdoc-dev/superdoc/commit/31ecec70ba08d9668f45e9a33b724d7e60cc4b66)) * do not open context menu in view only mode ([3a0ae6a](https://github.com/superdoc-dev/superdoc/commit/3a0ae6a51a95489de816fe1e3b59b5893272ece7)) * do not reposition floating comments when selected ([5edfff8](https://github.com/superdoc-dev/superdoc/commit/5edfff8a1b02f499a9f9219e1e1d1bd7b1c49b75)) * do not track the annotation deletion on table generation ([#1036](https://github.com/superdoc-dev/superdoc/issues/1036)) ([5e77dd4](https://github.com/superdoc-dev/superdoc/commit/5e77dd419ae71514b1c68f96ef4907f250c199b1)) * doc-api story regressions and export app.xml stats ([#2478](https://github.com/superdoc-dev/superdoc/issues/2478)) ([d06ff4e](https://github.com/superdoc-dev/superdoc/commit/d06ff4e953538be2e54f9a8d54bacac0a0233cea)) * **doc-api:** gate textStyle attrs and sync reference coverage ([#2430](https://github.com/superdoc-dev/superdoc/issues/2430)) ([e2d6ca6](https://github.com/superdoc-dev/superdoc/commit/e2d6ca60a6c268e83dc74d84d9211cb7c5891574)) * **doc-api:** stabilize create composability and expand SDK surface ([fc17167](https://github.com/superdoc-dev/superdoc/commit/fc1716721b7c15b3fd1ac5724e48cc709a9fd986)) * **docs:** coherence pass on doc api, clean up dead code, update CLI SKILL.md ([#2424](https://github.com/superdoc-dev/superdoc/issues/2424)) ([bf0d4b8](https://github.com/superdoc-dev/superdoc/commit/bf0d4b8ff127d27e2604720f215f39ec9c2a23ce)) * document dropdown resets ([#1883](https://github.com/superdoc-dev/superdoc/issues/1883)) ([b552d2e](https://github.com/superdoc-dev/superdoc/commit/b552d2e272d7f8b19e1bf2400c58fec9fed30f16)) * document margins corner cases ([#1589](https://github.com/superdoc-dev/superdoc/issues/1589)) ([3dcc97c](https://github.com/superdoc-dev/superdoc/commit/3dcc97c3ced541fe647aa3926cad65e7508dd6f6)) * document-api improvements, plan mode, query.match, mutations ([6221580](https://github.com/superdoc-dev/superdoc/commit/62215805c969a80445f9e410fd5fb2478b8c38a5)) * **document-api:** add document diff API and fix tracked diff replay in CLI host session ([#2418](https://github.com/superdoc-dev/superdoc/issues/2418)) ([2a804f7](https://github.com/superdoc-dev/superdoc/commit/2a804f790fbc131578df7256eac137f3d1f320c3)) * **document-api:** add friendlier insert at node id with offset, or pos ([#2128](https://github.com/superdoc-dev/superdoc/issues/2128)) ([c1d3682](https://github.com/superdoc-dev/superdoc/commit/c1d3682e15dc7c99b1450c2f008f6f937729fc39)) * **document-api:** add mutation-ready cell addresses to tables.getCells ([#2461](https://github.com/superdoc-dev/superdoc/issues/2461)) ([99bd4e5](https://github.com/superdoc-dev/superdoc/commit/99bd4e56f5e344437688d53ac4ed010cafed0e8d)) * **document-api:** add nodeId shorthand resolution across all operations ([#2131](https://github.com/superdoc-dev/superdoc/issues/2131)) ([8abdaad](https://github.com/superdoc-dev/superdoc/commit/8abdaadd7dda2ef4751d040527adab61c06f3c48)) * **document-api:** clear styles before paragraph.setStyle ([#2449](https://github.com/superdoc-dev/superdoc/issues/2449)) ([bce4bb8](https://github.com/superdoc-dev/superdoc/commit/bce4bb85bf8be54d6c6312ea184d7ea6bfd26e4e)) * **document-api:** delete table cell fix ([#2209](https://github.com/superdoc-dev/superdoc/issues/2209)) ([5e5c43f](https://github.com/superdoc-dev/superdoc/commit/5e5c43fe1b63703308cdbd3a1dd01d121ea5465c)) * **document-api:** distribute columns command fixes ([#2207](https://github.com/superdoc-dev/superdoc/issues/2207)) ([8f4eaf7](https://github.com/superdoc-dev/superdoc/commit/8f4eaf7efde73e26c919f77a71d180c763d636ce)) * **document-api:** fix cell shading in document api ([#2215](https://github.com/superdoc-dev/superdoc/issues/2215)) ([456f60e](https://github.com/superdoc-dev/superdoc/commit/456f60e41605a2d94c5194052cf1982bed02d1c3)) * **document-api:** fix markdown to image ([bf0e664](https://github.com/superdoc-dev/superdoc/commit/bf0e6647820c3987b4100f8f9804e413cfb33511)) * **document-api:** insert table cell ([#2210](https://github.com/superdoc-dev/superdoc/issues/2210)) ([357ee90](https://github.com/superdoc-dev/superdoc/commit/357ee9018451f7a22bc1383aed7af6149da1d8e8)) * **document-api:** make find/get treat content controls as sdt ([6688b8c](https://github.com/superdoc-dev/superdoc/commit/6688b8ccfaa3bdda53ba1a96a08a7df63ab14aef)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](https://github.com/superdoc-dev/superdoc/issues/2304)) ([da09826](https://github.com/superdoc-dev/superdoc/commit/da0982647cd57b4e775794af52e1a23b3d6f2afe)) * **document-api:** plan-engine reliability fixes and error diagnostics ([#2185](https://github.com/superdoc-dev/superdoc/issues/2185)) ([abfd81b](https://github.com/superdoc-dev/superdoc/commit/abfd81b753035bfaa4429748318af1eb51ac14e3)) * **document-api:** remove search match cap and validate moveComment bounds ([6d3de67](https://github.com/superdoc-dev/superdoc/commit/6d3de67ee398f5bbdd55a589e86a5c2bf321268a)) * **document-api:** rename atRowIndex to rowIndex in tables.split ([#2473](https://github.com/superdoc-dev/superdoc/issues/2473)) ([7de2864](https://github.com/superdoc-dev/superdoc/commit/7de2864466fd582d0e6b0ffcf739c2c2dba5fa76)) * **document-api:** return fresh table ref in mutation responses ([#2453](https://github.com/superdoc-dev/superdoc/issues/2453)) ([af6de73](https://github.com/superdoc-dev/superdoc/commit/af6de73f480c061d632277e34f0c9bd8681e0a5a)) * **document-api:** return NodeAddress from find and getNode instead of SDAddress (SD-2168) ([#2342](https://github.com/superdoc-dev/superdoc/issues/2342)) ([edcb3c6](https://github.com/superdoc-dev/superdoc/commit/edcb3c6a9d85666d20b30608cf8ac6793fc2830a)) * **document-api:** split table cell command ([#2217](https://github.com/superdoc-dev/superdoc/issues/2217)) ([0b3e2b4](https://github.com/superdoc-dev/superdoc/commit/0b3e2b4fcc50c1a30dec593c0aa41e69c9b809ff)) * **document-api:** split table command ([#2214](https://github.com/superdoc-dev/superdoc/issues/2214)) ([ec31699](https://github.com/superdoc-dev/superdoc/commit/ec31699d665cd4b4f4da7e2646d77ec828604568)) * don't prevent default from CMD+F when no search icon in toolbar ([ce5dc2b](https://github.com/superdoc-dev/superdoc/commit/ce5dc2b5bb4b575197becd368f3408766039c545)) * e2e tests to run headless no CI/CD ([f1479f7](https://github.com/superdoc-dev/superdoc/commit/f1479f7521b864f35e0b7d8b017b1a91bd12703e)) * editor bundling in python CLI regression ([db0d130](https://github.com/superdoc-dev/superdoc/commit/db0d130d0296bb40deed19a8d70a5ab0fbafadbb)) * editor type ([#1702](https://github.com/superdoc-dev/superdoc/issues/1702)) ([902e745](https://github.com/superdoc-dev/superdoc/commit/902e7456c3b8ac957d19c0b7d65fd3451ce48bd6)) * **editor:** arrow key navigation across page boundaries and auto-scroll (SD-1950) ([#2191](https://github.com/superdoc-dev/superdoc/issues/2191)) ([f7961d7](https://github.com/superdoc-dev/superdoc/commit/f7961d7c2d891e4a0e9c032274abcedbf3330643)), closes [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [this.#painterHost](https://github.com/this./issues/painterHost) [#scrollScreenRectIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollScreenRectIntoView) [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [#scrollActiveEndIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollActiveEndIntoView) * **editor:** prevent focus loss when typing in header/footer editors (SD-1993) ([#2238](https://github.com/superdoc-dev/superdoc/issues/2238)) ([e1b8007](https://github.com/superdoc-dev/superdoc/commit/e1b80074377b221873158ce5befc8fa2a908d1a8)), closes [PresentationEditor.#flushRerenderQueue](https://github.com/PresentationEditor./issues/flushRerenderQueue) * **editor:** prevent scroll-to-top when clicking toolbar buttons ([#2236](https://github.com/superdoc-dev/superdoc/issues/2236)) ([ab30a36](https://github.com/superdoc-dev/superdoc/commit/ab30a362e5aad17db9daa5208cbef71b5bb6dd72)) * **editor:** render styles applied inside SDT fields (SD-2011) ([#2188](https://github.com/superdoc-dev/superdoc/issues/2188)) ([9c34be3](https://github.com/superdoc-dev/superdoc/commit/9c34be39cfeb1ab77ebcd91343aaf9681a3f9b9a)) * **editor:** selection highlight flickers when dragging across mark boundaries (SD-2024) ([#2205](https://github.com/superdoc-dev/superdoc/issues/2205)) ([ba03e76](https://github.com/superdoc-dev/superdoc/commit/ba03e768fae837e4f5b8dd856ca765f76957e83c)) * effective gap ([580b52b](https://github.com/superdoc-dev/superdoc/commit/580b52b1996088cdf0bc8005ec079f909a55b840)) * emit editor exception on import/export errors ([#963](https://github.com/superdoc-dev/superdoc/issues/963)) ([700dec6](https://github.com/superdoc-dev/superdoc/commit/700dec60a36937dc7f9975c5d4bf5e3a0540133e)) * empty display label and default label ([#1621](https://github.com/superdoc-dev/superdoc/issues/1621)) ([e29e14f](https://github.com/superdoc-dev/superdoc/commit/e29e14f37c27fbad19c87c3571fa26f901d8ced4)) * empty line heights ([#1748](https://github.com/superdoc-dev/superdoc/issues/1748)) ([31ce45c](https://github.com/superdoc-dev/superdoc/commit/31ce45c9fbcc7c7e630f48a877791ea94a63c960)) * enhance AI text animation and processing ([91e2c73](https://github.com/superdoc-dev/superdoc/commit/91e2c735f1de748af974fda6ab570ba684f66311)) * ensure ruler 0 is visible ([#2487](https://github.com/superdoc-dev/superdoc/issues/2487)) ([096d9f0](https://github.com/superdoc-dev/superdoc/commit/096d9f033ccadf598a47126bc19b28a9d7990a4d)) * ensure updateListSync meta is added to run list sync plugin after list clean up ([8485e9a](https://github.com/superdoc-dev/superdoc/commit/8485e9afb134754a2c73afbfebba2db8971d0cc2)) * ensure we do not duplicate bubble text ([#1934](https://github.com/superdoc-dev/superdoc/issues/1934)) ([c41cf9e](https://github.com/superdoc-dev/superdoc/commit/c41cf9e21d763aa08546eb3445c54a078bf66d33)) * error when importing wp:anchor drawing that is an unsupported shape drawing ([dfd17ab](https://github.com/superdoc-dev/superdoc/commit/dfd17ab1673905a9c8e1812c04807ed6a8286296)) * **evals:** update evals to use updated intent based llm tools ([#2409](https://github.com/superdoc-dev/superdoc/issues/2409)) ([2d38d43](https://github.com/superdoc-dev/superdoc/commit/2d38d43f4e7ee941777a754d1a18160f97da7221)) * export docx blobs with docx mime type ([#1849](https://github.com/superdoc-dev/superdoc/issues/1849)) ([1bc466d](https://github.com/superdoc-dev/superdoc/commit/1bc466d25fc01618fa4a54f6e3c4120e43a7e89e)) * export table annotation images with sanitized media paths, add tests ([a270b2a](https://github.com/superdoc-dev/superdoc/commit/a270b2a3639adc17922ead9791088622bce3232f)) * export types ([5fc3526](https://github.com/superdoc-dev/superdoc/commit/5fc3526f1510b330d48d0c55b0b1192db17f36f1)) * exported annotations are suppressed in Google Docs ([#1061](https://github.com/superdoc-dev/superdoc/issues/1061)) ([3f8dea6](https://github.com/superdoc-dev/superdoc/commit/3f8dea65598b5e98655ad9dea79f59596c7f1c1c)) * **export:** prefix Relationship IDs with rId for valid xsd:ID ([#1855](https://github.com/superdoc-dev/superdoc/issues/1855)) ([11e67e1](https://github.com/superdoc-dev/superdoc/commit/11e67e1e4332976df279edf62f1aa33177004f9e)) * **export:** prevent DOCX corruption from entity encoding and orphaned delInstrText (SD-1943) ([#2102](https://github.com/superdoc-dev/superdoc/issues/2102)) ([56e917f](https://github.com/superdoc-dev/superdoc/commit/56e917fff93175b27529afc2c8e744b21ea3bc29)), closes [#replaceSpecialCharacters](https://github.com/superdoc-dev/superdoc/issues/replaceSpecialCharacters) [#1988](https://github.com/superdoc-dev/superdoc/issues/1988) * **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](https://github.com/superdoc-dev/superdoc/issues/2349)) ([f6dbb40](https://github.com/superdoc-dev/superdoc/commit/f6dbb404ad998e502a49df7e0ffded9f2a236321)) * **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](https://github.com/superdoc-dev/superdoc/issues/2349)) ([fed1d6b](https://github.com/superdoc-dev/superdoc/commit/fed1d6b233fd56c699038d50788c5c1c32f6d092)) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](https://github.com/superdoc-dev/superdoc/commit/36058c3640d12eeba8a3cf671d4cb2b46786d1d1)) * extend custom selection plugin again to fix font size, context menu and linked styles cases ([f906f23](https://github.com/superdoc-dev/superdoc/commit/f906f233609e01555ed671b95e47f0ea074078f7)) * extract duplicate block identity normalization from docxImporter ([7f7ff93](https://github.com/superdoc-dev/superdoc/commit/7f7ff9338786ed251323fc7986e6e30cf699b3b6)) * fallback to converter titlePg if no metadata ([#1612](https://github.com/superdoc-dev/superdoc/issues/1612)) ([d5d16e9](https://github.com/superdoc-dev/superdoc/commit/d5d16e96fab02a43a9828f7332bcdbf38c1cedbe)), closes [#1639](https://github.com/superdoc-dev/superdoc/issues/1639) * fallback to text for floating objects and show placeholder for emf image ([#916](https://github.com/superdoc-dev/superdoc/issues/916)) ([d121cd9](https://github.com/superdoc-dev/superdoc/commit/d121cd92608bb41e84d09997792e5512a9ca6faa)) * faulty TOC import/export (SD-2183) ([#2371](https://github.com/superdoc-dev/superdoc/issues/2371)) ([45b4452](https://github.com/superdoc-dev/superdoc/commit/45b4452e926cf193c662b304e24384164cbced56)) * field annotation drag and drop ([#1668](https://github.com/superdoc-dev/superdoc/issues/1668)) ([659d152](https://github.com/superdoc-dev/superdoc/commit/659d152fa5349cde16800016680d3bef92ae548e)) * field annotation export test ([f0a68f4](https://github.com/superdoc-dev/superdoc/commit/f0a68f4fa7e5563ead5479d1658daffc7417d849)) * field vs sdt import issue is fixed with new tests, fix issue in test module with comments ([825e647](https://github.com/superdoc-dev/superdoc/commit/825e64725d55d84781f1fcf74543817dea225ecb)) * filter out .rels files from header/footer processing ([b16f183](https://github.com/superdoc-dev/superdoc/commit/b16f18366a4178f9d885c50f9d0e13016a5e0df1)) * filter out invalid inline nodes in root level ([#938](https://github.com/superdoc-dev/superdoc/issues/938)) ([4d77b35](https://github.com/superdoc-dev/superdoc/commit/4d77b3512542e4548156fcee1d2cd7334e9f1a0f)) * filter out invalid inline nodes in root level ([#938](https://github.com/superdoc-dev/superdoc/issues/938)) ([#939](https://github.com/superdoc-dev/superdoc/issues/939)) ([9e1b911](https://github.com/superdoc-dev/superdoc/commit/9e1b911809cd2e713b9ba8a38b88c9558f552ee0)) * find tracked change for firefox ([#1899](https://github.com/superdoc-dev/superdoc/issues/1899)) ([a39cb68](https://github.com/superdoc-dev/superdoc/commit/a39cb683df898ca9a41b4c7f54d3d2f8e48ea8f1)) * first page multi section logic, other numbering ([#1641](https://github.com/superdoc-dev/superdoc/issues/1641)) ([48856ea](https://github.com/superdoc-dev/superdoc/commit/48856ea536d5f73e25b8f20a7c4476e388d2156d)) * fix issue with moved cleanUpListsWithAnnotations, move both clean up functions ([72689cd](https://github.com/superdoc-dev/superdoc/commit/72689cd4d17faf3303e458692eff14cab8a0fae7)) * flatten find result ([#2299](https://github.com/superdoc-dev/superdoc/issues/2299)) ([bf4f3cd](https://github.com/superdoc-dev/superdoc/commit/bf4f3cdef1fce558bf0f3444eab5e839e1bf9d09)) * floating comments not appearing on first load ([#1221](https://github.com/superdoc-dev/superdoc/issues/1221)) ([b3e72d0](https://github.com/superdoc-dev/superdoc/commit/b3e72d0dbeefaa88a8614d889665668c95269d98)) * floating comments not appearing on first load ([#1221](https://github.com/superdoc-dev/superdoc/issues/1221)) ([c8656ca](https://github.com/superdoc-dev/superdoc/commit/c8656ca4cdeca1bc484fdaaf9c7ea584915a6c24)) * footer formatting issues(HAR-10117) ([5018e9a](https://github.com/superdoc-dev/superdoc/commit/5018e9aa6249bb2242b5d3ee94001bf1627dedfc)) * force track changes if input type is programmatic ([#1199](https://github.com/superdoc-dev/superdoc/issues/1199)) ([c6e2a17](https://github.com/superdoc-dev/superdoc/commit/c6e2a173a40624a1d8c6d87cb9cb2007588eacf1)) * format conditional ([28d5ade](https://github.com/superdoc-dev/superdoc/commit/28d5adebfcd787710c23f2cc059d5d221cc35097)) * **format:** route format.caps through textTransform so w:caps persists on export ([#2297](https://github.com/superdoc-dev/superdoc/issues/2297)) ([8e771e2](https://github.com/superdoc-dev/superdoc/commit/8e771e2d2ea75d4bc72bc7f589fd9279f8027478)) * formatting issues ([#773](https://github.com/superdoc-dev/superdoc/issues/773)) ([a992f68](https://github.com/superdoc-dev/superdoc/commit/a992f68cd323d02e6cf60f0609d039996c40a462)) * grab tracked change from inline node for contextMenu ([#1113](https://github.com/superdoc-dev/superdoc/issues/1113)) ([ff20085](https://github.com/superdoc-dev/superdoc/commit/ff200851eab4fb2a961b8749c010a40f1d20953a)) * guard against null editor ref in telemetry handler ([#1763](https://github.com/superdoc-dev/superdoc/issues/1763)) ([16b3a9a](https://github.com/superdoc-dev/superdoc/commit/16b3a9a2d4f5155ea967b4bbe6c2aadb996daef0)) * guard drawing export against invalid structures and zero IDs (SD-824) ([#2363](https://github.com/superdoc-dev/superdoc/issues/2363)) ([9c7fc2e](https://github.com/superdoc-dev/superdoc/commit/9c7fc2e61144365fc33f64fefd324ec894429a51)) * guarding against component init when ref is null ([#1746](https://github.com/superdoc-dev/superdoc/issues/1746)) ([253eeea](https://github.com/superdoc-dev/superdoc/commit/253eeeab9a28d5c2b771385d0d812e501f20ac55)) * guarding replaceSpecialCharacters against non-strings ([#794](https://github.com/superdoc-dev/superdoc/issues/794)) ([7f18834](https://github.com/superdoc-dev/superdoc/commit/7f188349896273093b9237e9bf58b7a18ddfe046)) * handle fldSimple syntax for page number fields ([#1755](https://github.com/superdoc-dev/superdoc/issues/1755)) ([8325783](https://github.com/superdoc-dev/superdoc/commit/83257837cc3123e6696a8fd231e96a4b31411c1b)) * handle table cell borders from styles ([#1722](https://github.com/superdoc-dev/superdoc/issues/1722)) ([6ef1a11](https://github.com/superdoc-dev/superdoc/commit/6ef1a1138adf23e9873a642aa63327f20724396b)) * handle Uint8Array media values from persistence layers ([#2298](https://github.com/superdoc-dev/superdoc/issues/2298)) ([0d4505c](https://github.com/superdoc-dev/superdoc/commit/0d4505c77ac1c44939e8f7874a08f827a7a8e08c)) * handling absolute paths for relationships ([#1811](https://github.com/superdoc-dev/superdoc/issues/1811)) ([8647358](https://github.com/superdoc-dev/superdoc/commit/864735874e93a8570e83372213f6d7ae96557a32)) * hanging indent in tables ([#1647](https://github.com/superdoc-dev/superdoc/issues/1647)) ([ee8a206](https://github.com/superdoc-dev/superdoc/commit/ee8a206378f0941fb2fa4ea02842fd3629f43350)) * **har-10122:** toolbar styles are missing ([08365df](https://github.com/superdoc-dev/superdoc/commit/08365df5c9f73d7f215d9f18a4fcccd32f06cc3f)) * **har-10122:** toolbar styles are missing ([eb7a599](https://github.com/superdoc-dev/superdoc/commit/eb7a5997b570814d50255794ce27ad834f6c4ff9)) * **har-10122:** update compiler options ([2e108f0](https://github.com/superdoc-dev/superdoc/commit/2e108f04414a787d8a2f76f2ac421fd822afe147)) * **har-10122:** update compiler options ([a434993](https://github.com/superdoc-dev/superdoc/commit/a434993f4927a747c4e66a25c035d86ec5ef5876)) * har-10158 - fix comments highlighting and identify ([3dfae1c](https://github.com/superdoc-dev/superdoc/commit/3dfae1cd16a9099ec768c58c836fd3e630f551dd)) * har-10195 highlight tracked changes comment ([1c7be69](https://github.com/superdoc-dev/superdoc/commit/1c7be6904f809477874092f5e1a1aa59afc07b93)) * harden markdown image conversion ([4ba1c25](https://github.com/superdoc-dev/superdoc/commit/4ba1c254c77aaa37f552f2ad9fd06ec55e802b23)) * header images that extend past area should be behind content ([#1669](https://github.com/superdoc-dev/superdoc/issues/1669)) ([bf7d679](https://github.com/superdoc-dev/superdoc/commit/bf7d6798c7698b884734b32b70993acb0bfa0cd0)) * **header-footer:** normalize page-relative anchor layout ([#2484](https://github.com/superdoc-dev/superdoc/issues/2484)) ([6e62198](https://github.com/superdoc-dev/superdoc/commit/6e6219876f54625f17ef7db87cbfa71547472970)) * header/footer collapsing from image placement ([#1575](https://github.com/superdoc-dev/superdoc/issues/1575)) ([1ca9165](https://github.com/superdoc-dev/superdoc/commit/1ca91659205b3cfd200f8b11c8a4ade143a452d7)) * header/footer collapsing from image placement ([#1575](https://github.com/superdoc-dev/superdoc/issues/1575)) ([2a443d8](https://github.com/superdoc-dev/superdoc/commit/2a443d86b0b3e25256d5389e41a0f2833f6f9f91)) * header/footer double click to edit ([#1814](https://github.com/superdoc-dev/superdoc/issues/1814)) ([b4041d5](https://github.com/superdoc-dev/superdoc/commit/b4041d55773d39feba3f3bb606f3723e63495a60)) * header/footer sizes ([#1666](https://github.com/superdoc-dev/superdoc/issues/1666)) ([9cd0cce](https://github.com/superdoc-dev/superdoc/commit/9cd0ccebe0b07dbdace54a8a2c7fb06fdd225b01)) * headers/footers that extend past their size are clipped ([#1630](https://github.com/superdoc-dev/superdoc/issues/1630)) ([3e689fb](https://github.com/superdoc-dev/superdoc/commit/3e689fbbeaf156cdba6ff3a0c8dd6d2391b7d23a)) * headless mode crash ([#1002](https://github.com/superdoc-dev/superdoc/issues/1002)) ([08a72cb](https://github.com/superdoc-dev/superdoc/commit/08a72cbf0005804e746eea98caf19b658a597a6d)) * headless yjs ([#1913](https://github.com/superdoc-dev/superdoc/issues/1913)) ([4cdecf7](https://github.com/superdoc-dev/superdoc/commit/4cdecf7c592f8fbf23655b05200c36b9edfb6d7e)) * hide tools bubble on cursor change ([#1678](https://github.com/superdoc-dev/superdoc/issues/1678)) ([1fb865d](https://github.com/superdoc-dev/superdoc/commit/1fb865d48d40045ed5be2dcd0692334a8aa5bdc7)) * highlight selected value in font dropdowns ([#869](https://github.com/superdoc-dev/superdoc/issues/869)) ([4a30f59](https://github.com/superdoc-dev/superdoc/commit/4a30f59b3efbdbf3abbeca0e12af38fe980ed03b)) * horizontal rule ([#1875](https://github.com/superdoc-dev/superdoc/issues/1875)) ([4b3b92e](https://github.com/superdoc-dev/superdoc/commit/4b3b92ee168adcc06c7c4c927716ebcfec94311e)) * html import parse styleId attr for round-trip fidelity ([#974](https://github.com/superdoc-dev/superdoc/issues/974)) ([929fffa](https://github.com/superdoc-dev/superdoc/commit/929fffa511faeff18ddedb63eb039971c430949c)) * html paste processing ([1777394](https://github.com/superdoc-dev/superdoc/commit/177739490dff0ce4a9980effc834ef9fd2c71ac1)) * hyperlink export causes issues in Word ([#1121](https://github.com/superdoc-dev/superdoc/issues/1121)) ([8c61646](https://github.com/superdoc-dev/superdoc/commit/8c6164625dba72b0bc8d53dfdd254c18de3f9a50)) * ignore sdBlockId when pasting content ([#2010](https://github.com/superdoc-dev/superdoc/issues/2010)) ([1b08572](https://github.com/superdoc-dev/superdoc/commit/1b08572ef696dfe9fb45cd079c4381bd86c3b2d3)) * image annotation export in tables ([#1004](https://github.com/superdoc-dev/superdoc/issues/1004)) ([1e36934](https://github.com/superdoc-dev/superdoc/commit/1e3693438031b7d315d4b94e246a355d3c378a65)) * **image annotations:** missed image on export ([077cea6](https://github.com/superdoc-dev/superdoc/commit/077cea62d618a95d844255876350eac542b70157)) * image node resizer ([#1603](https://github.com/superdoc-dev/superdoc/issues/1603)) ([1946578](https://github.com/superdoc-dev/superdoc/commit/1946578ff5821733ce344a502fa647c28f5d8521)) * image z-index and overlaps ([#1950](https://github.com/superdoc-dev/superdoc/issues/1950)) ([39875ac](https://github.com/superdoc-dev/superdoc/commit/39875acda1a1799f52d433d463739926e73eea61)) * **image:** preserve anchored rotation margins and add coverage ([#1013](https://github.com/superdoc-dev/superdoc/issues/1013)) ([15aaba7](https://github.com/superdoc-dev/superdoc/commit/15aaba7725b233b27c22d0ceb70113cd0aada779)) * images are missing for the document in edit mode ([#831](https://github.com/superdoc-dev/superdoc/issues/831)) ([a9af47e](https://github.com/superdoc-dev/superdoc/commit/a9af47ed4def516900b14460218e476374c69a80)) * images breaking on export ([#1182](https://github.com/superdoc-dev/superdoc/issues/1182)) ([82af973](https://github.com/superdoc-dev/superdoc/commit/82af973a0388091ad5fbb90cbefc6c9699faadd5)) * images uploaded are dropped on export ([#1186](https://github.com/superdoc-dev/superdoc/issues/1186)) ([77922c6](https://github.com/superdoc-dev/superdoc/commit/77922c66f2261b8ff9856dd265fe8124fa6717c9)) * **images:** restore image TopAndBottom centering and column-left float ([94e02bd](https://github.com/superdoc-dev/superdoc/commit/94e02bd54968bc8340c384165a9b63e0249012b4)) * **image:** sync headless image media to Y.Doc for collab persistence ([#2313](https://github.com/superdoc-dev/superdoc/issues/2313)) ([72c64ed](https://github.com/superdoc-dev/superdoc/commit/72c64ed11e031cee4f15413eee403d93b08c1ec7)) * import alignment from injected html ([#1068](https://github.com/superdoc-dev/superdoc/issues/1068)) ([0cdb9ea](https://github.com/superdoc-dev/superdoc/commit/0cdb9eab72bc68ba64996348bb701bacf4fbfbf4)) * import alignment from injected html ([#1068](https://github.com/superdoc-dev/superdoc/issues/1068)) ([#1069](https://github.com/superdoc-dev/superdoc/issues/1069)) ([38f44a9](https://github.com/superdoc-dev/superdoc/commit/38f44a954d8044754d4d5d978d3f7ce58c4e122f)) * import issue falling back to wrong abstratId ([#930](https://github.com/superdoc-dev/superdoc/issues/930)) ([94b0679](https://github.com/superdoc-dev/superdoc/commit/94b067924d0311b8433e24e2c98cdd9da61d39ae)) * import issue falling back to wrong abstratId ([#930](https://github.com/superdoc-dev/superdoc/issues/930)) ([a5b43d0](https://github.com/superdoc-dev/superdoc/commit/a5b43d036133217d6f15661f3b1666d621fee049)) * import regression ([#2452](https://github.com/superdoc-dev/superdoc/issues/2452)) ([cac5e24](https://github.com/superdoc-dev/superdoc/commit/cac5e2426edf5b747ed9dd6231e5d080ef1923c3)) * import/export of missing pict separators ([#1048](https://github.com/superdoc-dev/superdoc/issues/1048)) ([8320a2c](https://github.com/superdoc-dev/superdoc/commit/8320a2c92f81cde20db871828f9daf14a9b3e40e)) * **importer:** retain gdocs comments without extended metadata ([#1017](https://github.com/superdoc-dev/superdoc/issues/1017)) ([c232308](https://github.com/superdoc-dev/superdoc/commit/c232308289473b41f071326cf8edd1d658e7310e)) * **importer:** wrap root-level inline nodes in paragraphs and disallow marks on passthroughInline ([#1804](https://github.com/superdoc-dev/superdoc/issues/1804)) ([7d0a752](https://github.com/superdoc-dev/superdoc/commit/7d0a7528493c2c7cea96ac72632db1f14f1f7fbc)) * imports encoded in utf-16 break DocxZipper ([#860](https://github.com/superdoc-dev/superdoc/issues/860)) ([3a1be24](https://github.com/superdoc-dev/superdoc/commit/3a1be24798490147dad3d39fc66e1bcac86d7875)) * improve backspace behavior near run boundaries for tracked changes ([#2175](https://github.com/superdoc-dev/superdoc/issues/2175)) ([6c9c7a3](https://github.com/superdoc-dev/superdoc/commit/6c9c7a3d72ed78717297cd48530f4629c9c680c4)) * improve document API dry runs, query matching, and reference block mutations ([#2498](https://github.com/superdoc-dev/superdoc/issues/2498)) ([5959c5f](https://github.com/superdoc-dev/superdoc/commit/5959c5f9fa7696ce34025c175a05ee610f7e12f4)) * improve floating comments offset calculation and scrolling behavior ([2ae0b62](https://github.com/superdoc-dev/superdoc/commit/2ae0b62def80c0acf52ad84389914a6324250bb9)) * improve index mapping for text nodes and handle transparent inline nodes ([#1216](https://github.com/superdoc-dev/superdoc/issues/1216)) ([2ed5d3a](https://github.com/superdoc-dev/superdoc/commit/2ed5d3a7401c90e0a4fd02294c66b34bc7da9af2)) * improve marker width calculation for server-side rendering ([#801](https://github.com/superdoc-dev/superdoc/issues/801)) ([85205c1](https://github.com/superdoc-dev/superdoc/commit/85205c1aa014fc0dfae37e2f3d4624b1a2abe743)), closes [#log](https://github.com/superdoc-dev/superdoc/issues/log) * improve multi-column rendering ([#2369](https://github.com/superdoc-dev/superdoc/issues/2369)) ([d231640](https://github.com/superdoc-dev/superdoc/commit/d2316402dcbdf66d9a3c879ad3af80b3fa6f6a62)) * improve null handling and clean up code in translateList and related functions ([09c88e4](https://github.com/superdoc-dev/superdoc/commit/09c88e447d6d4956616e0fe6af0d5ae1c609437c)) * improve performance ([#1169](https://github.com/superdoc-dev/superdoc/issues/1169)) ([e626e28](https://github.com/superdoc-dev/superdoc/commit/e626e283f160b55e2ccacda1273d3d347bbef99b)) * improve selection bounds calculation for floating comments ([7d9306d](https://github.com/superdoc-dev/superdoc/commit/7d9306d8b6c1505ffaf906db6298e07810ff01c1)) * include doc default fonts and stabilize linked-style run properties ([b2d9fc9](https://github.com/superdoc-dev/superdoc/commit/b2d9fc977198ee3c131659ec312e0fdb4309af2e)) * include tracked change date fix ([#1384](https://github.com/superdoc-dev/superdoc/issues/1384)) ([10dbd16](https://github.com/superdoc-dev/superdoc/commit/10dbd16e071522ed3f5a6c8be7f2d36d605e9bba)) * incorrect list counter calculation (SD-1658) ([#1867](https://github.com/superdoc-dev/superdoc/issues/1867)) ([a960a65](https://github.com/superdoc-dev/superdoc/commit/a960a656235d2c4daa7b5f169e79bfba5f057ff6)) * increase/decrease indent for all selected list items ([#1192](https://github.com/superdoc-dev/superdoc/issues/1192)) ([0bcee03](https://github.com/superdoc-dev/superdoc/commit/0bcee0315113e9804d7c80d3e50281307143c70e)) * indents from linked styles ([#1679](https://github.com/superdoc-dev/superdoc/issues/1679)) ([70bc68c](https://github.com/superdoc-dev/superdoc/commit/70bc68c07f7603f6f4845febe562f5fd6b72b5a1)) * infinite loop when paginating if top margin = header margin, zero margins ([84f7623](https://github.com/superdoc-dev/superdoc/commit/84f7623c57234385f2c7d47bc3ee96ee93c1e9a5)) * infinite loop when paginating if top margin = header margin, zero margins ([#1610](https://github.com/superdoc-dev/superdoc/issues/1610)) ([f6448e4](https://github.com/superdoc-dev/superdoc/commit/f6448e45feae535dd1e982c1d5fd87f26f578416)) * initial line drift fix ([#1590](https://github.com/superdoc-dev/superdoc/issues/1590)) ([f6af6e6](https://github.com/superdoc-dev/superdoc/commit/f6af6e6603e9dc76a5be909274ac37ebc7c04143)) * insertComment does not emit to SuperDoc ([#1065](https://github.com/superdoc-dev/superdoc/issues/1065)) ([b95cd42](https://github.com/superdoc-dev/superdoc/commit/b95cd42ff5be9c2314e60a7c4a38ea8c1470ecb9)) * insertContentAt fails if new line characters (\n) inserted ([dd60d91](https://github.com/superdoc-dev/superdoc/commit/dd60d91711e63741e2d6ca2ced02251f2a4e0465)) * insertContentAt for html ([f6c53d3](https://github.com/superdoc-dev/superdoc/commit/f6c53d396bbc9745aa8e6c86c950bd68bb24216a)) * inserting html with heading tags does not render as expected (HAR-10430) ([#874](https://github.com/superdoc-dev/superdoc/issues/874)) ([bba5074](https://github.com/superdoc-dev/superdoc/commit/bba5074692c8fcdba7d6f6c0ef2960ce7c2d7b6a)) * instrtext bug with unhandled angled brackets ([#1051](https://github.com/superdoc-dev/superdoc/issues/1051)) ([71cf182](https://github.com/superdoc-dev/superdoc/commit/71cf1825b46832da1039269a1c727d3a7c74ffaf)) * instrtext bug with unhandled an…
Closes IT-474
CleanShot.2026-02-15.at.19.56.51.mp4
Summary
Fixes multiple collaboration bugs causing typing lag, room corruption, Vue stack overflow crashes, and user color flickering when using external providers (Liveblocks).
How SuperDoc Collaboration Works
SuperDoc collaboration uses Y.js (a CRDT library) to synchronize document state between multiple users. Here's the step-by-step flow:
1. Initialization
When a user opens a collaborative document, SuperDoc receives a Y.js
Docand a provider (e.g. Liveblocks, Hocuspocus) through themodules.collaborationconfig option:2. Real-time Editing Sync
When a user types, changes flow through two parallel sync paths:
3. Cursor Awareness
Each user's cursor position is shared via the Y.js awareness protocol:
4. Vue Rendering Bridge
SuperDoc uses dual rendering (hidden ProseMirror + visible DomPainter). Vue manages the toolbar and UI state:
What Was Broken and How Each Fix Addresses It
Fix 1: Y.js Observer Memory Leaks (
collaboration.js)Problem: The collaboration extension registered 4 observers/listeners without cleanup:
metaMap.observe()— media file syncheaderFooterMap.observe()— header/footer syncydoc.on('afterTransaction')— DOCX XML syncWhen editors were destroyed and recreated (HMR, route changes, document switches), these accumulated. Each leaked
afterTransactionhandler ran a full DOCX export on every Y.js transaction.Fix: Added
onDestroy()lifecycle hook. Observer references are stored in a module-levelWeakMap<Editor, CleanupData>(not in reactivethis.options) and properly cleaned up on editor destruction. The debounce utility now supports.cancel().Fix 2: yUndoPlugin Observer Leak (
Editor.ts)Problem:
#prepareDocumentForExportcreated a throwawayEditorStateto transform the document for DOCX export.EditorState.create()callsPlugin.init()for every plugin, andyUndoPlugin.init()registers a persistentY.UndoManagerobserver on the shared ydoc. These observers were never cleaned up because the throwaway state was immediately discarded.Fix: Use
new Transform(doc)directly instead ofEditorState.create(). All methods used byprepareCommentsForExport(removeMark,insert,addMark,setNodeMarkup,delete,mapping.map) areTransformmethods — noTransaction-specific APIs are needed.Fix 3: Vue
traverseStack Overflow (SuperDoc.js)Problem:
SuperDoc.jsstoresthis.ydocandthis.provideron the instance. The instance is exposed to Vue as a global property ($superdoc). Vue's reactivity system deep-traverses all properties to make them reactive. Y.js objects have deep circular internal references (_item→parent→doc→_store→ items → ...) that cause infinite recursion →RangeError: Maximum call stack size exceeded.Fix: Wrap all Y.js object assignments with
markRaw()from Vue. This adds a__v_skipflag that tells Vue to never traverse the object. Applied to all 4 assignment paths (external provider, internal single-doc, internal multi-doc, internal superdoc sync).Fix 4: User Color Flickering (
SuperDoc.js)Problem: Three competing color systems with no coordination:
yCursorPluginmutatesuser.color = '#ffa500'(orange) when no color is set in awareness stateRemoteCursorAwarenessusesgetFallbackCursorColor(clientId)which assigns from a paletteawarenessStatesToArrayassigns from a shuffled palette viauserColorMapThe external provider path in
SuperDoc.jsnever setuser.colorbefore broadcasting awareness, so each system kept overwriting with different colors every render cycle.Fix: Set
this.config.user.color = this.colors[0] || '#4ECDC4'before callingsetupAwarenessHandler, ensuring awareness state always has a stable color.Fix 5: Liveblocks Room Corruption (
App.tsx)Problem:
provider.on('sync')fires not only on initial connection but also on every reconnect. The original example code created a newSuperDocinstance on every sync event, resulting in duplicate editors writing to the same Y.js document — causing conflicting CRDT operations that permanently corrupted the Liveblocks room state (WebSocket code 1011).Fix: Guard with
if (superdocRef.current) returnto ensure SuperDoc is only created once per component lifecycle.Fix 6: Typing Lag — Cursor Awareness Overhead (
PresentationEditor.ts)Problem: Every keystroke triggered
#updateLocalAwarenessCursor()synchronously, which callsawareness.setLocalStateField(). With Liveblocks, each call takes ~190ms to encode and sync awareness state over WebSocket.Fix: Debounce cursor awareness updates to 100ms. Rapid keystrokes batch into a single update, keeping typing responsive while maintaining real-time cursor sharing.
Fix 7: Typing Lag — Vue flushJobs Blocking (
SuperDoc.vue)Problem: Each ProseMirror transaction synchronously updated Vue reactive refs (
selectionPosition,activeSelection,toolsMenuPosition). Each mutation triggered Vue'sflushJobsmicrotask, which re-evaluated hundreds of components — blocking the main thread for ~300ms per keystroke.Fix: Defer selection state updates to
requestAnimationFrame. RAF fires before the next paint, so the toolbar still reflects correct state by the time the user sees the rendered frame. Pending RAFs are cancelled on new transactions and on component unmount.Fix 8: Repeated Full-Document Traversals (
block-node.js)Problem: The
hasInitializedflag was only set totruewhen changes were detected. If the initial document had all validsdBlockIdvalues, the initialization traversal ran on every single transaction — potentially thousands of wasteful full-document walks.Fix: Set
hasInitialized = trueunconditionally after the firstappendTransactioncall. TheblockNodeInitialUpdatemeta is only set when actual changes were made.Fix 9: Liveblocks Example App (
App.tsx,vite.config.js)Problem: Multiple issues in the example app:
states.filter((s) => s.user)filtered ALL users becauseawarenessStatesToArrayreturns flat objects (no nested.user)u.user?.colorinstead ofu.colorFix: Extracted
useSuperdocCollaborationcustom hook, corrected property access to flat objects, stableclientIdkeys, proper cleanup for Strict Mode, hoisted static styles, added Vite alias config.Test plan
pnpm test— 810+ tests across packages)