feat(document-api): more lists commands#2288
Conversation
There was a problem hiding this comment.
π‘ Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 455b3d9fac
βΉοΈ About Codex in GitHub
Your team has set up Codex to 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 π.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
8189090 to
7573aff
Compare
|
π This PR is included in superdoc v1.18.0-next.10 The release is available on GitHub release |
|
π This PR is included in superdoc-cli v0.2.0-next.82 The release is available on GitHub release |
# [1.18.0](v1.17.0...v1.18.0) (2026-03-05) ### Bug Fixes * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **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) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * **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)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * portrait orientation in document-api ([dafab76](dafab76)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) ### Features * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **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)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82))
# [1.18.0](v1.17.0...v1.18.0) (2026-03-05) ### Bug Fixes * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **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) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * **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)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * portrait orientation in document-api ([dafab76](dafab76)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) ### Features * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **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)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82))
|
π This PR is included in superdoc v1.18.0 The release is available on GitHub release |
# [1.18.0](v1.17.0...v1.18.0) (2026-03-05) ### Bug Fixes * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **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) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * **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)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * portrait orientation in document-api ([dafab76](dafab76)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) ### Features * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **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)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82))
# [1.18.0](v1.17.0...v1.18.0) (2026-03-05) ### Bug Fixes * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **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) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * **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)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * portrait orientation in document-api ([dafab76](dafab76)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) ### Features * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **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)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82))
# [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))
* chore(release): 1.18.0 [skip ci] # [1.18.0](v1.17.0...v1.18.0) (2026-03-05) ### Bug Fixes * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **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) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * **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)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * portrait orientation in document-api ([dafab76](dafab76)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) ### Features * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **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)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82)) * chore(release): 1.18.0 [skip ci] # [1.18.0](v1.17.0...v1.18.0) (2026-03-05) ### Bug Fixes * add type definitions for PresentationEditor ([#2271](#2271)) ([5402196](5402196)) * **document-api:** fix markdown to image ([bf0e664](bf0e664)) * **document-api:** make lists.setType preserve sequence continuity ([#2304](#2304)) ([da09826](da09826)) * **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) * **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](36058c3)) * **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)) * **link-popover:** mount external popovers outside overflow:hidden container (SD-2148) ([#2308](#2308)) ([ea4be68](ea4be68)) * make expected revision optional, update docs ([#2265](#2265)) ([250bb5b](250bb5b)) * **painter-dom:** prevent scroll acceleration feedback loop in virtualization ([#2291](#2291)) ([fb3d25e](fb3d25e)) * portrait orientation in document-api ([dafab76](dafab76)) * **sdk:** keep sdk sessions alive in non collab ([#2289](#2289)) ([c634ee8](c634ee8)) * **super-editor:** align image resize handles with actual image position ([#2293](#2293)) ([217bdce](217bdce)) * **test:** stabilize flaky cleanUpParagraphWithAnnotations tests ([#2262](#2262)) ([7bafb7f](7bafb7f)) * **virtualization:** compute scrollY relative to scroll container, not viewport ([#2263](#2263)) ([370ca5e](370ca5e)) ### Features * **document-api:** add getHtml operation, fix HTML insert and SDK tool selection ([#2264](#2264)) ([c554678](c554678)) * **document-api:** clear content command ([#2300](#2300)) ([46b5261](46b5261)) * **document-api:** hyperlinks commands ([#2294](#2294)) ([4d3bebd](4d3bebd)) * **document-api:** initial image commands ([#2290](#2290)) ([d624231](d624231)) * **document-api:** insert table adds extra separator to match ms word ([#2301](#2301)) ([5e49613](5e49613)) * **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)) * **links:** convert pasted hyperlinks into real docx links ([#2270](#2270)) ([7d75522](7d75522)) * **markdown:** import images from markdown ([#2303](#2303)) ([b2f6a1a](b2f6a1a)) * support TIFF images in DOCX rendering ([#2284](#2284)) ([6436d86](6436d86)), closes [#2064](#2064) * **tracked-changes:** allow partial tracked change resolution ([#2252](#2252)) ([988598d](988598d)) * **web-view:** new layout engine based web view ([#2100](#2100)) ([a353b82](a353b82)) * fix(export): prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) (#2349) Cherry-pick from main (fed1d6b) * chore(release): 1.18.1 [skip ci] ## [1.18.1](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](#2349)) ([f6dbb40](f6dbb40)) * 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](v1.18.1...v1.18.2) (2026-03-11) ### Bug Fixes * **anchor-nav:** use correct scroll container for sub-page bookmark navigation ([a300536](a300536)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer) * **rendering:** show comment highlight on text with Word highlight formatting ([f6d956e](f6d956e)) * **toc:** correct zoom scaling and rect.top bug in anchor scroll ([16c768f](16c768f)) * ci: remove changelog generation from stable releases --------- Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> Co-authored-by: Caio Pizzol <97641911+caio-pizzol@users.noreply.github.com> Co-authored-by: Caio Pizzol <caio@harbourshare.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
|
π 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β¦
### What's New **Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically. Set alt text, captions, z-order, anchor options, and wrapping behavior. (#2290, #2295) **Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks. Wrap text in links. Full control over DOCX link elements. (#2294) **Pasted hyperlinks** β Converting pasted text into real docx link elements instead of plain text. (#2270) **Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts, trailing characters). Improved sequence continuity when changing list types. (#2288, #2304) **Clear content command** β Remove document content programmatically. (#2300) **Table insertion** β Insert table with extra separator row to match MS Word behavior. (#2301) **HTML extraction** β New `getHtml` operation to read document content as HTML. (#2264) **TIFF image support** β Render TIFF images in DOCX documents alongside PNG, JPG, and GIF. (#2284) **Markdown image import** β Automatically import images when converting markdown to documents. (#2303) **Partial tracked change resolution** β Resolve individual tracked changes without resolving all. (#2252) **LLM tools** β Alpha release of llm tools integration. (#2292) **Web view layout engine** β New rendering engine for improved document layout and performance. (#2100) ### Improvements **Document API β Styles** β Registry-driven `styles.apply` with schema validation for type safety. (#2267) **SDK type definitions** β Added TypeScript types for `PresentationEditor`. (#2271) **HTML operations** β Fixed HTML insert and improved SDK tool selection. (#2264) **SDK API** β Made `expectedRevision` parameter optional. (#2265) **Python SDK documentation** β Operations now render as snake_case in generated docs. (#2266) ### Fixes **Header/footer editing** β Prevent focus loss when typing in header/footer editors. (#2238) **Image resize handles** β Align handles with actual image position. (#2293) **Virtualization scroll** β Compute scroll position relative to scroll container, not viewport. (#2263) **Format persistence** β Route `format.caps` through text transform so `w:caps` persists on export. (#2297) **List export** β Sync document XML before numbering pruning to preserve list definitions. (#36058c364) **Link popover rendering** β Mount external popovers outside overflow:hidden containers. (#2308) **Media handling** β Handle Uint8Array media values from persistence layers. (#2298) **Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM. (#2291) **Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint sessions even when not dirty. (#2289) **CLI collaboration** β Prevent collab reopen from overwriting existing document with blank data. (#2296) **Markdown conversion** β Harden markdown image conversion error handling. (#2303) **Portrait orientation** β Fix document API handling of portrait orientation. (#dafab76af) **Development experience** β Log warning when local dev server is unreachable. (#2309) **Test stability** β Stabilize flaky `cleanUpParagraphWithAnnotations` tests. (#2262)
* chore(cli): 0.17.0 [skip ci]
Based on the commit messages, here are the release notes:
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes with full interaction support; clicks map to content positions.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; pending-comments-update event carries `pendingSelection`.
- **Viewport scroll container** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with pageBreakBefore style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(sdk): 1.16.0 [skip ci]
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes; clicks map to content positions with full interaction support.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling.
- **Pending selection on comments event** β `pending-comments-update` event carries `pendingSelection` captured before the live selection clears.
- **Scroll container getter** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable mode transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections in the document.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement; no reflow.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with `pageBreakBefore` style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(mcp): 0.12.0 [skip ci]
### What's New
- **Textbox editing** β Click, type, and select text directly inside VML and DrawingML textboxes; full caret and selection support.
- **Font family combobox** β Browse and select fonts from the toolbar; font selection flows through custom UI.
- **Font size API** β `ui.viewport` exposes available font sizes for custom toolbars and programmatic queries.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling or moving selection.
- **Pending selection on comment events** β `pending-comments-update` event carries `pendingSelection` captured before the live DOM selection clears.
- **Scroll container access** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom modes with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding document sections.
### Improvements
- **Multi-column section balancing** β Continuous sections now balance correctly; explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space` values.
- **Font substitutes load before measurement** β Metric-compatible fallbacks for Calibri, Cambria, Arial, Times New Roman, and Courier New load upfront; no reflow.
- **Tracked table changes consolidation** β Inline cell edits fold into a single review item instead of separate entries; one decision applies to the whole table.
### Fixes
- Paragraphs styled with `pageBreakBefore` no longer insert blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word behavior when tables are nested inside textboxes.
- Table cell selection highlights render over empty space; multiline selections show full-width interior lines.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top (not bottom); soft-break continuation carets position at line start with alignment-aware offset.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection handles edge cases correctly.
- Viewport geometry invalidates on sidebar toggle without pixel-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves `bookmarkStart`/`bookmarkEnd` order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting is preserved when typing text over a toolbar font selection.
* chore(release): 1.40.0 [skip ci]
Now I have enough context. Let me write the release notes based on the actual changes:
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **TOC interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API (groupTrackedChanges), mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their PM start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
- **UV-deprecated legacy visual testing infrastructure** β Removed `/devtools/visual-testing`; layout validation now runs in the standard test suite.
* chore(react): 1.11.0 [skip ci]
### What's New
- **Textbox content editing** β Click to edit text inside textboxes in body, headers, footers, and table cells with full selection and caret support.
- **Zoom modes and fit-width** β Choose zoom mode (`manual` or `fit-width` for auto-fit) and read state, calculations, bounds, and viewport metrics from `ui.zoom`.
- **Viewport change events** β Listen for `viewport-change` when the container resizes to receive document width, available width, and calculated fit-zoom.
- **Font family combobox** β Search for fonts in the toolbar by name and see per-document options with substitution evidence.
- **Comments activation API** β Highlight comments without scrolling using `ui.comments.setActive()`, and access the captured selection from pending comment events.
- **Text range viewport rects** β Pass Document API text targets to `ui.viewport.getRect()` to get painted rects for overlay positioning.
- **Scroll container access** β Call `ui.viewport.getScrollContainer()` to find the element that actually scrolls, or null for window scroll.
- **Sidebar geometry updates** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **TOC interactions** β Hover highlights sections in the table of contents, and click navigates to them.
### Improvements
- **Column balancing** β Multi-column sections balance at continuous section breaks, matching Word's behavior.
- **Grouped tracked changes** β Inline cell changes inside a whole-table tracked change now group as one review item.
- **Line break serialization** β Newlines in text mutations serialize as `<w:br/>` and round-trip without loss.
- **Tab and soft-break carets** β Tab carets anchor to line top, and soft-break carets position at line start with alignment awareness.
- **Page break suppression** β Removed blank pages when `pageBreakBefore` appears directly after an explicit page break.
- **Textbox table rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Block identity repair** β Duplicate block identities fix automatically on compile.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions).
### Fixes
- **Empty table cell selection** β Dragging a selection into an empty cell no longer collapses.
- **Multiline selection rendering** β Interior lines of multi-line selections render full-width highlights.
- **Empty cell geometry** β Empty cell paragraphs resolve to a valid position for interaction.
- **Image alpha on export** β Images with transparency now preserve alpha on DOCX export.
- **Linebreak text selection** β Search spans and selections spanning text+linebreak+text now coalesce correctly.
- **Font toolbar updates** β Toolbar rebuilds when document fonts change or editor switches.
* chore(vscode): 2.12.0 [skip ci]
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **Table of contents interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API, mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their ProseMirror start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
* chore(esign): 2.7.2 [skip ci]
Based on my analysis of the commits and changes, here are the release notes:
### Fixes
- **Page breaks** β Removed redundant blank pages when a paragraph with pageBreakBefore style follows an explicit page break. Word's rule is structural, not geometric; we now match that behavior exactly.
- **Table cell selection** β Fixed selection highlight disappearing over empty space inside table cells. Also fixed multiline selection rendering and empty cell hit detection.
- **Textbox rendering** β Corrected rendering and text alignment for textboxes containing tables.
- **Image alpha transparency** β Process `alphaModFix` attributes correctly during import and export to preserve image transparency settings.
- **Block identity repair** β Runtime self-healing for duplicate block identities on compile, preventing stale references from breaking document operations.
### What's New
- **Textbox editing** β Phase 0 and 1 of textbox content editing. Render and edit VML and DrawingML textbox content. Full support for textboxes in headers, footers, and table cells with proper position preservation through import/export.
### Improvements
- **Font system** β Bundle docfonts 0.15 and 0.16 with expanded census rows and legal-cleared fallback fonts for better coverage.
- **Documentation** β Updated examples for custom UI APIs and clarified viewport geometry behavior.
* fix: roll back default toolbar fonts
* test: update font dropdown behavior expectations
* chore(cli): 0.17.1 [skip ci]
Based on my analysis of the commits, v0.17.1 contains a single fix: rolling back the default toolbar font options to a conservative baseline.
### Fixes
- **Toolbar fonts** β Reverted default font dropdown to the conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(sdk): 1.16.1 [skip ci]
### Fixes
- **Default toolbar fonts** β Rolled back font dropdown to a conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(mcp): 0.12.1 [skip ci]
Based on my analysis of the git diff, this patch release contains a single fix related to the toolbar font dropdown. Here are the release notes:
### Fixes
- **Toolbar fonts** β Rolled back font dropdown to conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(release): 1.40.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Full font resolution through documents remains unchanged.
* chore(react): 1.11.1 [skip ci]
### Fixes
- Toolbar font dropdown returns to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized β full font resolution within documents remains unchanged.
* chore(vscode): 2.12.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Document rendering of all fonts remains unchanged.
* fix: resolve stable merge conflicts
* fix: update font dropdown behavior expectations
* fix: align font option tests with rich pack
* fix: update ui font option expectations
* fix: avoid contract demo rebuild on dev
* fix: update react font hook expectations
* chore(cli): 0.18.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for bundled font substitutes. Without it, the toolbar shows a safe baseline (Arial, Times New Roman, Courier New) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a substitute `.woff2` file it cannot serve, so there are no spurious 404s or one-time warnings. Availability is a config decision, not a runtime probe.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to keep everything except a few. Names are validated at setup time β a typo fails fast instead of silently hiding fonts. Curation changes what the toolbar advertises and which families SuperDoc substitutes.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and documentation to use the new `@superdoc-dev/fonts` package and curation APIs.
- Toolbar font dropdown now correctly reflects availability based on pack configuration.
* chore(sdk): 1.17.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full 30-family set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(mcp): 0.13.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(fonts): 0.1.1 [skip ci]
Based on my analysis of the changes in this release, here are the release notes:
### What's New
- **@superdoc-dev/fonts is now the only bundled font source** β The fonts package is now the single recommended way to load metric-compatible fallbacks. The core `superdoc` package no longer ships or bundles fonts.
### Improvements
- **Simplified fonts API** β Pass `superdocFonts` directly to SuperDoc's config, or use `createSuperDocFonts({ include, exclude })` to curate which families you need.
- **CDN build is baseline-by-default** β The CDN/`<script>` build ships without fonts. Load the separate `@superdoc-dev/fonts` browser build to enable the reviewed fallback pack.
- **Fonts package now has semantic release** β `@superdoc-dev/fonts` publishes independently with automated version management. The package and core `superdoc` can now version separately while staying in sync.
- **New CDN resolver for fonts** β Added `cdn-entry.ts` to resolve bundled fonts relative to their own `<script>` tag, with no bundler configuration needed.
- **Curation is now decoupled** β Font include/exclude validation lives in `curation.ts` so both bundler and CDN builds honor the same rules.
### Fixes
- **Aligned font option tests** β Fixed test expectations to match the published fonts pack.
- **Rolled back default toolbar fonts** β Restored baseline font list for the CDN build; users opt into the full reviewed set by loading the fonts package.
* chore(release): 1.41.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional package containing 6 MB of `.woff2` font binaries for reviewed metric-compatible substitutes, published to npm under the org scope so the core stays small for apps that skip the pack.
**Config-gated bundled font availability** β Font availability is now explicit: without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New), and documents render their original font names with system fonts; configuring the pack lights up the full reviewed set, so toolbar and rendering show the curated families you enable.
**Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and a no-pack or curated document never reuses another document's full-pack measures.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere, and a one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API, so `<script>` tag pages load the reviewed pack from jsDelivr, unpkg, or self-hosted servers with no bundler and no path config.
**Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
* chore(react): 1.12.0 [skip ci]
### What's New
- **@superdoc-dev/fonts package** β Optional npm package with 6 MB of reviewed metric-compatible font binaries (Carlito, Liberation Serif, and others); bundler-resolvable assets, no copying files into `public/` or configuring paths.
- **Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and documents never reuse another document's measures.
- **CDN-ready fonts** β Browser build exports `SuperDocFonts` global for `<script>` tag pages; load from jsDelivr, unpkg, or self-hosted with no bundler and no path config.
### Improvements
- **Config-gated bundled font availability** β Without configuration, SuperDoc shows a safe baseline (Arial, Times New Roman, Courier New); configuring the pack lights up the full reviewed set, gated by config presence rather than runtime probes.
- **Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere; a one-time warning surfaces if the pack fails to load instead of silently degrading.
- **Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
- **Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
### Fixes
- Updated React font hook expectations to align with the new curation layer.
- Updated UI font option expectations to reflect the config-gated baseline.
- Aligned font option tests with the reviewed pack behavior.
* chore(vscode): 2.13.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional npm package containing 6 MB of `.woff2` font binaries. Imports metric-compatible substitutes for proprietary Word fonts (Carlito for Calibri, Liberation Serif for Times New Roman, and others). Lets you ship the reviewed font set without a copy step or `assetBaseUrl` β bundle detects and rewrites asset URLs automatically.
**Config-gated bundled font availability** β Font availability is now explicit. Without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New β one per CSS generic) and renders logical font names with system fonts. Configuring the pack via `superdocFonts`, `fonts.assetBaseUrl`/`fonts.resolveAssetUrl`, or the CDN browser build lights up the full reviewed set.
**Font curation API** β `createSuperDocFonts({ include / exclude })` narrows the pack to families you name by their Word logical names (e.g., `"Calibri"`). Validates family names at setup time, so typos fail fast. Include is an allow-list; exclude keeps everything but the named families. Does not affect custom fonts β those stay separate.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now advertises only the safe Word baseline instead of guessing substitutes. A one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Font availability and curation are now per-document, so each editor's toolbar and rendering is independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API. Load it via `<script>` tag from jsDelivr, unpkg, or self-hosted servers β no bundler, no path config.
**Updated docs and examples** β All getting-started guides (Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, Vue) now import and use `@superdoc-dev/fonts`.
* fix(cli): persist track-change scope across host calls
Both doc orchestrators used a fresh per-call invoke closure as the hook scope key, so resolved track-change ids never survived between operations in a host session; a repeat trackChanges.decide on an already-resolved id then fell through to the adapter and surfaced TARGET_NOT_FOUND instead of the intended NO_OP. Key the scope by the stable opened.doc handle the session pool reuses across calls, and add an orchestrator-level regression test driving distinct per-call closures over one shared doc (existing hook tests reused a single closure and could not catch this).
* chore(template-builder): 1.12.1 [skip ci]
### Bug Fixes
- linear sync
### Changes
- Merge branch 'orbit-canonical-publishing' (#3699)
* chore(cli): 0.19.0 [skip ci]
### What's New
**Textbox object interaction** β Select, resize, and move floating DrawingML textboxes with border-click selection, corner resize handles with live feedback, and drag-to-move with margin-offset preservation.
**Blocks API enhancements** β New `blocks.merge`, `blocks.split`, and `blocks.move` operations for programmatic paragraph manipulation (v2 sessions only).
**Paragraph numbering control** β Surface paragraph numbering on `blocks.list` and add `format.paragraph.setNumbering` to manage numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, and `lists.getState` operations for list manipulation.
**Mutation planning** β Add `mutations.planExecute` to plan and execute mutations in a single operation.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions; now keys scope by stable doc handle instead of per-call closure.
**Word field export** β Fixed passthrough importer attaching content to `passthroughInline` nodes, breaking MERGEFIELD and other unrecognized field export; instruction text now lives in `attrs.originalXml` only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page; terminal-page reserve bump now grows body on relayout when footnote demand exceeds placed reserve.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph note sessions by resolving geometry directly from painted pm ranges and falling back to offset bridge for unpainted positions.
**Note paragraph styles** β Fixed note paragraphs losing `FootnoteText` style on Enter or paste; appended transaction now re-stamps paragraphs without styleId using nearest styled sibling's properties.
**Cross-paragraph deletion in suggesting mode** β Fixed deletion spanning two paragraphs splitting instead of re-joining; `replaceStep.js` now compiles slices without inline content as plain tracked deletions and emits explicit caret hint.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition to prevent editing breaks.
**Tracked-change review navigation** β Fixed review navigation getting stuck and unable to return to previous position.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent by computing marker-suffix tab width from actual tab stops instead of stale textStartX targets.
**Orphan calls** β Removed orphan superdoc-dev environment calls.
### Improvements
**Footnote keystroke performance** β Warm-start reserve convergence from previous fixed point, reducing footnote pipeline cost from 75ms to 12ms per keystroke on 25-footnote document.
**Numbering recompute** β Skip numbering plugin's full-document diff on `BLOCK_NODE_METADATA_UPDATE_META` transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask when `transaction` and `selectionUpdate` fire synchronously; eliminates redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state; page-token relayout preserves seeded options.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy for shape/textbox support, and v1 compatibility wiring.
**Test coverage** β 70+ new comprehensive tests covering v2 wiring, custom UI parity, mutations, and block API operations.
* chore(sdk): 1.18.0 [skip ci]
### What's New
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically. Set alt text, captions, z-order, anchor options, and wrapping behavior. (#2290, #2295)
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks. Wrap text in links. Full control over DOCX link elements. (#2294)
**Pasted hyperlinks** β Converting pasted text into real docx link elements instead of plain text. (#2270)
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts, trailing characters). Improved sequence continuity when changing list types. (#2288, #2304)
**Clear content command** β Remove document content programmatically. (#2300)
**Table insertion** β Insert table with extra separator row to match MS Word behavior. (#2301)
**HTML extraction** β New `getHtml` operation to read document content as HTML. (#2264)
**TIFF image support** β Render TIFF images in DOCX documents alongside PNG, JPG, and GIF. (#2284)
**Markdown image import** β Automatically import images when converting markdown to documents. (#2303)
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all. (#2252)
**LLM tools** β Alpha release of llm tools integration. (#2292)
**Web view layout engine** β New rendering engine for improved document layout and performance. (#2100)
### Improvements
**Document API β Styles** β Registry-driven `styles.apply` with schema validation for type safety. (#2267)
**SDK type definitions** β Added TypeScript types for `PresentationEditor`. (#2271)
**HTML operations** β Fixed HTML insert and improved SDK tool selection. (#2264)
**SDK API** β Made `expectedRevision` parameter optional. (#2265)
**Python SDK documentation** β Operations now render as snake_case in generated docs. (#2266)
### Fixes
**Header/footer editing** β Prevent focus loss when typing in header/footer editors. (#2238)
**Image resize handles** β Align handles with actual image position. (#2293)
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport. (#2263)
**Format persistence** β Route `format.caps` through text transform so `w:caps` persists on export. (#2297)
**List export** β Sync document XML before numbering pruning to preserve list definitions. (#36058c364)
**Link popover rendering** β Mount external popovers outside overflow:hidden containers. (#2308)
**Media handling** β Handle Uint8Array media values from persistence layers. (#2298)
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM. (#2291)
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint sessions even when not dirty. (#2289)
**CLI collaboration** β Prevent collab reopen from overwriting existing document with blank data. (#2296)
**Markdown conversion** β Harden markdown image conversion error handling. (#2303)
**Portrait orientation** β Fix document API handling of portrait orientation. (#dafab76af)
**Development experience** β Log warning when local dev server is unreachable. (#2309)
**Test stability** β Stabilize flaky `cleanUpParagraphWithAnnotations` tests. (#2262)
* chore(mcp): 0.14.0 [skip ci]
### What's New
**Footnote and endnote editing** β Double-click body markers to open notes, two-press Backspace to delete, clearing note content removes the footnote on both sides.
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically; set alt text, captions, z-order, and wrapping.
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks; wrap text in links with full DOCX control.
**Pasted hyperlinks** β Automatically converts pasted URLs into real docx link elements instead of plain text.
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts).
**Document API β Table insertion** β Insert tables with extra separator row to match MS Word behavior.
**Textbox object interaction** β Select, resize, and move DrawingML textboxes with border-click selection, corner handles, and drag-to-move feedback.
**Blocks API enhancements** β New merge, split, and move operations for programmatic paragraph manipulation (v2 sessions).
**Paragraph numbering control** β Surface paragraph numbering on blocks.list; add format.paragraph.setNumbering for managing numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New lists.apply, lists.continue, lists.restart, lists.remove, and lists.getState operations.
**Mutation planning** β Plan and execute mutations in a single operation with mutations.planExecute.
**Clear content command** β Remove document content programmatically.
**HTML extraction** β New getHtml operation to read document content as HTML.
**TIFF image support** β Render TIFF images alongside PNG, JPG, and GIF.
**Markdown image import** β Automatically import images when converting markdown to documents.
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all.
**LLM tools** β Alpha release of LLM tools integration.
**Web view layout engine** β New rendering engine for improved layout and performance.
### Improvements
**Document API styles** β Registry-driven styles.apply with schema validation for type safety.
**PresentationEditor types** β Added TypeScript types for PresentationEditor.
**SDK API** β Made expectedRevision parameter optional.
**Footnote keystroke performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms.
**Numbering recompute** β Skip full-document diff on block-node metadata transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask to eliminate redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy, and v1 compatibility wiring.
**Test coverage** β 70+ new tests covering v2 wiring, custom UI parity, mutations, and block API operations.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions.
**Word field export** β Fixed passthrough importer breaking MERGEFIELD export; instruction text now lives in attrs.originalXml only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph notes.
**Note paragraph styles** β Fixed note paragraphs losing FootnoteText style on Enter or paste.
**Cross-paragraph deletion** β Fixed deletion spanning two paragraphs splitting instead of re-joining in suggesting mode.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition.
**Tracked-change review navigation** β Fixed review navigation getting stuck.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent.
**Header/footer editing** β Prevent focus loss when typing in header/footer editors.
**Image resize handles** β Align handles with actual image position.
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport.
**Format persistence** β Route format.caps through text transform so w:caps persists on export.
**List export** β Sync document XML before numbering pruning to preserve list definitions.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers.
**Media handling** β Handle Uint8Array media values from persistence layers.
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM.
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint when not dirty.
**CLI collaboration** β Prevent collab reopen from overwriting documents with blank data.
**Markdown conversion** β Harden markdown image conversion error handling.
**Portrait orientation** β Fix document API handling of portrait orientation.
**Development experience** β Log warning when local dev server is unreachable.
* chore(fonts): 0.1.2 [skip ci]
### Fixes
- **First-line list indentation** β Fixed incorrect text start position for numbered lists with first-line indents. The layout engine now computes marker widths from actual rendered tab stops instead of stale measurements, ensuring correct justified text width calculations.
- **Fonts configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes the editor. Hand-written config with invalid shapes (e.g., bare strings instead of arrays) now defaults to the full bundled pack and logs a single warning instead of throwing.
* chore(release): 1.42.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation now track correctly in multi-paragraph notes; Font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source`; full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState`; level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote/endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; ONE pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in attrs.originalXml to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump now ensures footnotes render when body fills last page (was silently dropping 0 of 6).
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses; resolves against stale painted ranges via block identity.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path; appendTransaction guard stamps missing styles after async mutations.
**Header/footer activation** β Double-click resolves note references only in body fragments; header/footer with behindDoc textboxes no longer break.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment with actual image position corrected.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security findings** β Remediated critical and high penetration test findings.
* chore(react): 1.13.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation track correctly in multi-paragraph notes; font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source` for full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState` with level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote or endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; one pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in `attrs.originalXml` to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump ensures footnotes render when body fills last page.
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path.
**Header/footer activation** β Double-click resolves note references only in body fragments; behindDoc textboxes no longer break activation.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment corrected to match actual image position.
**Link popover rendering** β Mount external popovers outside `overflow:hidden` containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security** β Remediated critical and high penetration test findings.
* chore(vscode): 2.14.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note. Staged Backspace selects the marker, second press removes it (and the note). Delete from the note area removes both marker and note. Caret and arrow navigation now track correctly in multi-paragraph notes. Insert notes via `editor.commands.insertFootnote()`. Font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it as a ProseMirror NodeSelection instead of placing a caret. Drag corner handles to resize with live feedback. Drag the textbox to move; margins update to keep the opposite corner fixed. Works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source`. Full control over alt text, captions, z-order, wrapping, and anchor. TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`. Pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState`. Level-specific formatting. Control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`, `blocks.move`. Returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs. `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote or endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance and v1 compatibility wiring for backward compatibility.
### Improvements
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms. One pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents. Toolbar snapshots now coalesce per microtask, eliminating redundant rebuilds.
**List rendering** β First-line indent lists now compute marker suffix tab width from rendered tab stops instead of stale targets. Justified text width is now correct.
**IME composition** β Layout rerender and track-changes rewriting now defer during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode. Position mapping no longer crashes. Accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in attrs.originalXml to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump now ensures footnotes render when body fills last page.
**Note caret and selection** β Multi-paragraph notes now track cβ¦
* feat(oss-sync): direct-merge community PR lane with Orbit backflow (#367)
* feat(oss-sync): direct-merge community PR lane with Orbit backflow
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* feat(oss-sync): direct-merge community PR lane with Orbit backflow
* fix: address PR review comments on #367
* fix(oss-sync): reject multi-parent commits in community provenance
merge_commit_sha is set for merge-commit and rebase landings too, so it
cannot prove a squash. A multi-parent commit now fails the community
provenance check before any API lookup, closing the case where a PR whose
branch commits carry allowlisted bot emails would ingest wholesale through
the email check.
* fix(oss-sync): fail closed when community commit parent shape is unknown
classifyOssCommits is exported; a caller that omits parents must not skip
the squash-shape guard and fall through to PR verification.
Note: this ports only the public subtree changes from a mixed source commit (1 public path, 6 non-public paths ignored).
Ported-From-Source-Repo: superdoc/orbit
Ported-From-Source-Commit: cf57303e95dfe17a533ee35586036e29de6e5ba2
Ported-Public-Prefix: superdoc/public
* fix(super-editor): declare full namespace set on freshly-created numbering.xml (#3792)
* fix(super-editor): declare full namespace set on freshly-created numbering.xml (GH #3773)
Importing a docx with no word/numbering.xml and then adding the first
numbered list produced a numbering part missing xmlns:w16cid (and other
w16* namespaces), so Word refused to open/repair the exported file.
numbering-part-descriptor.ts's ensurePart() hand-maintained a 3-key
namespace map (xmlns:w/w15/mc) instead of reusing DEFAULT_DOCX_DEFS, the
full namespace + mc:Ignorable map that document.xml, comments.xml,
footnotes.xml, and people.xml already apply unconditionally. Since every
numbering-part creation goes through this ensurePart() (mutateNumbering ->
mutatePart -> executeMutate), the legacy SuperConverter#exportNumberingFile
baseNumbering fallback never runs for this path - the part descriptor's own
map has to be complete on its own.
Reuses DEFAULT_DOCX_DEFS instead of hand-picking namespaces one bug report
at a time. Adds a unit test on ensurePart() and an end-to-end regression
test (import numbering-less blank-doc.docx -> toggleOrderedList -> export
-> assert namespace-complete <w:numbering> root). Relaxes one
templates-adapter.integration.test.ts assertion that hardcoded the old
narrow mc:Ignorable merge result to match the sibling styles.xml test's
existing flexible pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* docs(super-editor): correct w16cid provenance in numbering root attrs comment
---------
Co-authored-by: d.bilukcha <d.bilukha@foodtech.team>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Caio Pizzol <97641911+caio-pizzol@users.noreply.github.com>
* docs: add MIt9 to community contributors (#3810)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(oss-ci): install bun in React workflow
Install Bun in the public React CI workflow so SDK contract generation can run during type checks.
Note: this ports only the public subtree changes from a mixed source commit (1 public path, 1 non-public path ignored).
Ported-From-Source-Repo: superdoc/orbit
Ported-From-Source-Commit: ac0394983c4c153163d3ca1baa54e056aa59da2b
Ported-Public-Prefix: superdoc/public
* π Sync stable β main (#3809)
* chore(cli): 0.17.0 [skip ci]
Based on the commit messages, here are the release notes:
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes with full interaction support; clicks map to content positions.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; pending-comments-update event carries `pendingSelection`.
- **Viewport scroll container** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with pageBreakBefore style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(sdk): 1.16.0 [skip ci]
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes; clicks map to content positions with full interaction support.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling.
- **Pending selection on comments event** β `pending-comments-update` event carries `pendingSelection` captured before the live selection clears.
- **Scroll container getter** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable mode transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections in the document.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement; no reflow.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with `pageBreakBefore` style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(mcp): 0.12.0 [skip ci]
### What's New
- **Textbox editing** β Click, type, and select text directly inside VML and DrawingML textboxes; full caret and selection support.
- **Font family combobox** β Browse and select fonts from the toolbar; font selection flows through custom UI.
- **Font size API** β `ui.viewport` exposes available font sizes for custom toolbars and programmatic queries.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling or moving selection.
- **Pending selection on comment events** β `pending-comments-update` event carries `pendingSelection` captured before the live DOM selection clears.
- **Scroll container access** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom modes with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding document sections.
### Improvements
- **Multi-column section balancing** β Continuous sections now balance correctly; explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space` values.
- **Font substitutes load before measurement** β Metric-compatible fallbacks for Calibri, Cambria, Arial, Times New Roman, and Courier New load upfront; no reflow.
- **Tracked table changes consolidation** β Inline cell edits fold into a single review item instead of separate entries; one decision applies to the whole table.
### Fixes
- Paragraphs styled with `pageBreakBefore` no longer insert blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word behavior when tables are nested inside textboxes.
- Table cell selection highlights render over empty space; multiline selections show full-width interior lines.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top (not bottom); soft-break continuation carets position at line start with alignment-aware offset.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection handles edge cases correctly.
- Viewport geometry invalidates on sidebar toggle without pixel-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves `bookmarkStart`/`bookmarkEnd` order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting is preserved when typing text over a toolbar font selection.
* chore(release): 1.40.0 [skip ci]
Now I have enough context. Let me write the release notes based on the actual changes:
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **TOC interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API (groupTrackedChanges), mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their PM start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
- **UV-deprecated legacy visual testing infrastructure** β Removed `/devtools/visual-testing`; layout validation now runs in the standard test suite.
* chore(react): 1.11.0 [skip ci]
### What's New
- **Textbox content editing** β Click to edit text inside textboxes in body, headers, footers, and table cells with full selection and caret support.
- **Zoom modes and fit-width** β Choose zoom mode (`manual` or `fit-width` for auto-fit) and read state, calculations, bounds, and viewport metrics from `ui.zoom`.
- **Viewport change events** β Listen for `viewport-change` when the container resizes to receive document width, available width, and calculated fit-zoom.
- **Font family combobox** β Search for fonts in the toolbar by name and see per-document options with substitution evidence.
- **Comments activation API** β Highlight comments without scrolling using `ui.comments.setActive()`, and access the captured selection from pending comment events.
- **Text range viewport rects** β Pass Document API text targets to `ui.viewport.getRect()` to get painted rects for overlay positioning.
- **Scroll container access** β Call `ui.viewport.getScrollContainer()` to find the element that actually scrolls, or null for window scroll.
- **Sidebar geometry updates** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **TOC interactions** β Hover highlights sections in the table of contents, and click navigates to them.
### Improvements
- **Column balancing** β Multi-column sections balance at continuous section breaks, matching Word's behavior.
- **Grouped tracked changes** β Inline cell changes inside a whole-table tracked change now group as one review item.
- **Line break serialization** β Newlines in text mutations serialize as `<w:br/>` and round-trip without loss.
- **Tab and soft-break carets** β Tab carets anchor to line top, and soft-break carets position at line start with alignment awareness.
- **Page break suppression** β Removed blank pages when `pageBreakBefore` appears directly after an explicit page break.
- **Textbox table rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Block identity repair** β Duplicate block identities fix automatically on compile.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions).
### Fixes
- **Empty table cell selection** β Dragging a selection into an empty cell no longer collapses.
- **Multiline selection rendering** β Interior lines of multi-line selections render full-width highlights.
- **Empty cell geometry** β Empty cell paragraphs resolve to a valid position for interaction.
- **Image alpha on export** β Images with transparency now preserve alpha on DOCX export.
- **Linebreak text selection** β Search spans and selections spanning text+linebreak+text now coalesce correctly.
- **Font toolbar updates** β Toolbar rebuilds when document fonts change or editor switches.
* chore(vscode): 2.12.0 [skip ci]
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **Table of contents interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API, mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their ProseMirror start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
* chore(esign): 2.7.2 [skip ci]
Based on my analysis of the commits and changes, here are the release notes:
### Fixes
- **Page breaks** β Removed redundant blank pages when a paragraph with pageBreakBefore style follows an explicit page break. Word's rule is structural, not geometric; we now match that behavior exactly.
- **Table cell selection** β Fixed selection highlight disappearing over empty space inside table cells. Also fixed multiline selection rendering and empty cell hit detection.
- **Textbox rendering** β Corrected rendering and text alignment for textboxes containing tables.
- **Image alpha transparency** β Process `alphaModFix` attributes correctly during import and export to preserve image transparency settings.
- **Block identity repair** β Runtime self-healing for duplicate block identities on compile, preventing stale references from breaking document operations.
### What's New
- **Textbox editing** β Phase 0 and 1 of textbox content editing. Render and edit VML and DrawingML textbox content. Full support for textboxes in headers, footers, and table cells with proper position preservation through import/export.
### Improvements
- **Font system** β Bundle docfonts 0.15 and 0.16 with expanded census rows and legal-cleared fallback fonts for better coverage.
- **Documentation** β Updated examples for custom UI APIs and clarified viewport geometry behavior.
* fix: roll back default toolbar fonts
* test: update font dropdown behavior expectations
* chore(cli): 0.17.1 [skip ci]
Based on my analysis of the commits, v0.17.1 contains a single fix: rolling back the default toolbar font options to a conservative baseline.
### Fixes
- **Toolbar fonts** β Reverted default font dropdown to the conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(sdk): 1.16.1 [skip ci]
### Fixes
- **Default toolbar fonts** β Rolled back font dropdown to a conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(mcp): 0.12.1 [skip ci]
Based on my analysis of the git diff, this patch release contains a single fix related to the toolbar font dropdown. Here are the release notes:
### Fixes
- **Toolbar fonts** β Rolled back font dropdown to conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(release): 1.40.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Full font resolution through documents remains unchanged.
* chore(react): 1.11.1 [skip ci]
### Fixes
- Toolbar font dropdown returns to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized β full font resolution within documents remains unchanged.
* chore(vscode): 2.12.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Document rendering of all fonts remains unchanged.
* fix: resolve stable merge conflicts
* fix: update font dropdown behavior expectations
* fix: align font option tests with rich pack
* fix: update ui font option expectations
* fix: avoid contract demo rebuild on dev
* fix: update react font hook expectations
* chore(cli): 0.18.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for bundled font substitutes. Without it, the toolbar shows a safe baseline (Arial, Times New Roman, Courier New) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a substitute `.woff2` file it cannot serve, so there are no spurious 404s or one-time warnings. Availability is a config decision, not a runtime probe.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to keep everything except a few. Names are validated at setup time β a typo fails fast instead of silently hiding fonts. Curation changes what the toolbar advertises and which families SuperDoc substitutes.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and documentation to use the new `@superdoc-dev/fonts` package and curation APIs.
- Toolbar font dropdown now correctly reflects availability based on pack configuration.
* chore(sdk): 1.17.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full 30-family set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(mcp): 0.13.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(fonts): 0.1.1 [skip ci]
Based on my analysis of the changes in this release, here are the release notes:
### What's New
- **@superdoc-dev/fonts is now the only bundled font source** β The fonts package is now the single recommended way to load metric-compatible fallbacks. The core `superdoc` package no longer ships or bundles fonts.
### Improvements
- **Simplified fonts API** β Pass `superdocFonts` directly to SuperDoc's config, or use `createSuperDocFonts({ include, exclude })` to curate which families you need.
- **CDN build is baseline-by-default** β The CDN/`<script>` build ships without fonts. Load the separate `@superdoc-dev/fonts` browser build to enable the reviewed fallback pack.
- **Fonts package now has semantic release** β `@superdoc-dev/fonts` publishes independently with automated version management. The package and core `superdoc` can now version separately while staying in sync.
- **New CDN resolver for fonts** β Added `cdn-entry.ts` to resolve bundled fonts relative to their own `<script>` tag, with no bundler configuration needed.
- **Curation is now decoupled** β Font include/exclude validation lives in `curation.ts` so both bundler and CDN builds honor the same rules.
### Fixes
- **Aligned font option tests** β Fixed test expectations to match the published fonts pack.
- **Rolled back default toolbar fonts** β Restored baseline font list for the CDN build; users opt into the full reviewed set by loading the fonts package.
* chore(release): 1.41.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional package containing 6 MB of `.woff2` font binaries for reviewed metric-compatible substitutes, published to npm under the org scope so the core stays small for apps that skip the pack.
**Config-gated bundled font availability** β Font availability is now explicit: without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New), and documents render their original font names with system fonts; configuring the pack lights up the full reviewed set, so toolbar and rendering show the curated families you enable.
**Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and a no-pack or curated document never reuses another document's full-pack measures.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere, and a one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API, so `<script>` tag pages load the reviewed pack from jsDelivr, unpkg, or self-hosted servers with no bundler and no path config.
**Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
* chore(react): 1.12.0 [skip ci]
### What's New
- **@superdoc-dev/fonts package** β Optional npm package with 6 MB of reviewed metric-compatible font binaries (Carlito, Liberation Serif, and others); bundler-resolvable assets, no copying files into `public/` or configuring paths.
- **Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and documents never reuse another document's measures.
- **CDN-ready fonts** β Browser build exports `SuperDocFonts` global for `<script>` tag pages; load from jsDelivr, unpkg, or self-hosted with no bundler and no path config.
### Improvements
- **Config-gated bundled font availability** β Without configuration, SuperDoc shows a safe baseline (Arial, Times New Roman, Courier New); configuring the pack lights up the full reviewed set, gated by config presence rather than runtime probes.
- **Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere; a one-time warning surfaces if the pack fails to load instead of silently degrading.
- **Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
- **Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
### Fixes
- Updated React font hook expectations to align with the new curation layer.
- Updated UI font option expectations to reflect the config-gated baseline.
- Aligned font option tests with the reviewed pack behavior.
* chore(vscode): 2.13.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional npm package containing 6 MB of `.woff2` font binaries. Imports metric-compatible substitutes for proprietary Word fonts (Carlito for Calibri, Liberation Serif for Times New Roman, and others). Lets you ship the reviewed font set without a copy step or `assetBaseUrl` β bundle detects and rewrites asset URLs automatically.
**Config-gated bundled font availability** β Font availability is now explicit. Without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New β one per CSS generic) and renders logical font names with system fonts. Configuring the pack via `superdocFonts`, `fonts.assetBaseUrl`/`fonts.resolveAssetUrl`, or the CDN browser build lights up the full reviewed set.
**Font curation API** β `createSuperDocFonts({ include / exclude })` narrows the pack to families you name by their Word logical names (e.g., `"Calibri"`). Validates family names at setup time, so typos fail fast. Include is an allow-list; exclude keeps everything but the named families. Does not affect custom fonts β those stay separate.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now advertises only the safe Word baseline instead of guessing substitutes. A one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Font availability and curation are now per-document, so each editor's toolbar and rendering is independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API. Load it via `<script>` tag from jsDelivr, unpkg, or self-hosted servers β no bundler, no path config.
**Updated docs and examples** β All getting-started guides (Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, Vue) now import and use `@superdoc-dev/fonts`.
* fix(cli): persist track-change scope across host calls
Both doc orchestrators used a fresh per-call invoke closure as the hook scope key, so resolved track-change ids never survived between operations in a host session; a repeat trackChanges.decide on an already-resolved id then fell through to the adapter and surfaced TARGET_NOT_FOUND instead of the intended NO_OP. Key the scope by the stable opened.doc handle the session pool reuses across calls, and add an orchestrator-level regression test driving distinct per-call closures over one shared doc (existing hook tests reused a single closure and could not catch this).
* chore(template-builder): 1.12.1 [skip ci]
### Bug Fixes
- linear sync
### Changes
- Merge branch 'orbit-canonical-publishing' (#3699)
* chore(cli): 0.19.0 [skip ci]
### What's New
**Textbox object interaction** β Select, resize, and move floating DrawingML textboxes with border-click selection, corner resize handles with live feedback, and drag-to-move with margin-offset preservation.
**Blocks API enhancements** β New `blocks.merge`, `blocks.split`, and `blocks.move` operations for programmatic paragraph manipulation (v2 sessions only).
**Paragraph numbering control** β Surface paragraph numbering on `blocks.list` and add `format.paragraph.setNumbering` to manage numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, and `lists.getState` operations for list manipulation.
**Mutation planning** β Add `mutations.planExecute` to plan and execute mutations in a single operation.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions; now keys scope by stable doc handle instead of per-call closure.
**Word field export** β Fixed passthrough importer attaching content to `passthroughInline` nodes, breaking MERGEFIELD and other unrecognized field export; instruction text now lives in `attrs.originalXml` only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page; terminal-page reserve bump now grows body on relayout when footnote demand exceeds placed reserve.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph note sessions by resolving geometry directly from painted pm ranges and falling back to offset bridge for unpainted positions.
**Note paragraph styles** β Fixed note paragraphs losing `FootnoteText` style on Enter or paste; appended transaction now re-stamps paragraphs without styleId using nearest styled sibling's properties.
**Cross-paragraph deletion in suggesting mode** β Fixed deletion spanning two paragraphs splitting instead of re-joining; `replaceStep.js` now compiles slices without inline content as plain tracked deletions and emits explicit caret hint.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition to prevent editing breaks.
**Tracked-change review navigation** β Fixed review navigation getting stuck and unable to return to previous position.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent by computing marker-suffix tab width from actual tab stops instead of stale textStartX targets.
**Orphan calls** β Removed orphan superdoc-dev environment calls.
### Improvements
**Footnote keystroke performance** β Warm-start reserve convergence from previous fixed point, reducing footnote pipeline cost from 75ms to 12ms per keystroke on 25-footnote document.
**Numbering recompute** β Skip numbering plugin's full-document diff on `BLOCK_NODE_METADATA_UPDATE_META` transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask when `transaction` and `selectionUpdate` fire synchronously; eliminates redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state; page-token relayout preserves seeded options.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy for shape/textbox support, and v1 compatibility wiring.
**Test coverage** β 70+ new comprehensive tests covering v2 wiring, custom UI parity, mutations, and block API operations.
* chore(sdk): 1.18.0 [skip ci]
### What's New
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically. Set alt text, captions, z-order, anchor options, and wrapping behavior. (#2290, #2295)
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks. Wrap text in links. Full control over DOCX link elements. (#2294)
**Pasted hyperlinks** β Converting pasted text into real docx link elements instead of plain text. (#2270)
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts, trailing characters). Improved sequence continuity when changing list types. (#2288, #2304)
**Clear content command** β Remove document content programmatically. (#2300)
**Table insertion** β Insert table with extra separator row to match MS Word behavior. (#2301)
**HTML extraction** β New `getHtml` operation to read document content as HTML. (#2264)
**TIFF image support** β Render TIFF images in DOCX documents alongside PNG, JPG, and GIF. (#2284)
**Markdown image import** β Automatically import images when converting markdown to documents. (#2303)
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all. (#2252)
**LLM tools** β Alpha release of llm tools integration. (#2292)
**Web view layout engine** β New rendering engine for improved document layout and performance. (#2100)
### Improvements
**Document API β Styles** β Registry-driven `styles.apply` with schema validation for type safety. (#2267)
**SDK type definitions** β Added TypeScript types for `PresentationEditor`. (#2271)
**HTML operations** β Fixed HTML insert and improved SDK tool selection. (#2264)
**SDK API** β Made `expectedRevision` parameter optional. (#2265)
**Python SDK documentation** β Operations now render as snake_case in generated docs. (#2266)
### Fixes
**Header/footer editing** β Prevent focus loss when typing in header/footer editors. (#2238)
**Image resize handles** β Align handles with actual image position. (#2293)
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport. (#2263)
**Format persistence** β Route `format.caps` through text transform so `w:caps` persists on export. (#2297)
**List export** β Sync document XML before numbering pruning to preserve list definitions. (#36058c364)
**Link popover rendering** β Mount external popovers outside overflow:hidden containers. (#2308)
**Media handling** β Handle Uint8Array media values from persistence layers. (#2298)
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM. (#2291)
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint sessions even when not dirty. (#2289)
**CLI collaboration** β Prevent collab reopen from overwriting existing document with blank data. (#2296)
**Markdown conversion** β Harden markdown image conversion error handling. (#2303)
**Portrait orientation** β Fix document API handling of portrait orientation. (#dafab76af)
**Development experience** β Log warning when local dev server is unreachable. (#2309)
**Test stability** β Stabilize flaky `cleanUpParagraphWithAnnotations` tests. (#2262)
* chore(mcp): 0.14.0 [skip ci]
### What's New
**Footnote and endnote editing** β Double-click body markers to open notes, two-press Backspace to delete, clearing note content removes the footnote on both sides.
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically; set alt text, captions, z-order, and wrapping.
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks; wrap text in links with full DOCX control.
**Pasted hyperlinks** β Automatically converts pasted URLs into real docx link elements instead of plain text.
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts).
**Document API β Table insertion** β Insert tables with extra separator row to match MS Word behavior.
**Textbox object interaction** β Select, resize, and move DrawingML textboxes with border-click selection, corner handles, and drag-to-move feedback.
**Blocks API enhancements** β New merge, split, and move operations for programmatic paragraph manipulation (v2 sessions).
**Paragraph numbering control** β Surface paragraph numbering on blocks.list; add format.paragraph.setNumbering for managing numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New lists.apply, lists.continue, lists.restart, lists.remove, and lists.getState operations.
**Mutation planning** β Plan and execute mutations in a single operation with mutations.planExecute.
**Clear content command** β Remove document content programmatically.
**HTML extraction** β New getHtml operation to read document content as HTML.
**TIFF image support** β Render TIFF images alongside PNG, JPG, and GIF.
**Markdown image import** β Automatically import images when converting markdown to documents.
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all.
**LLM tools** β Alpha release of LLM tools integration.
**Web view layout engine** β New rendering engine for improved layout and performance.
### Improvements
**Document API styles** β Registry-driven styles.apply with schema validation for type safety.
**PresentationEditor types** β Added TypeScript types for PresentationEditor.
**SDK API** β Made expectedRevision parameter optional.
**Footnote keystroke performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms.
**Numbering recompute** β Skip full-document diff on block-node metadata transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask to eliminate redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy, and v1 compatibility wiring.
**Test coverage** β 70+ new tests covering v2 wiring, custom UI parity, mutations, and block API operations.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions.
**Word field export** β Fixed passthrough importer breaking MERGEFIELD export; instruction text now lives in attrs.originalXml only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph notes.
**Note paragraph styles** β Fixed note paragraphs losing FootnoteText style on Enter or paste.
**Cross-paragraph deletion** β Fixed deletion spanning two paragraphs splitting instead of re-joining in suggesting mode.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition.
**Tracked-change review navigation** β Fixed review navigation getting stuck.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent.
**Header/footer editing** β Prevent focus loss when typing in header/footer editors.
**Image resize handles** β Align handles with actual image position.
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport.
**Format persistence** β Route format.caps through text transform so w:caps persists on export.
**List export** β Sync document XML before numbering pruning to preserve list definitions.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers.
**Media handling** β Handle Uint8Array media values from persistence layers.
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM.
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint when not dirty.
**CLI collaboration** β Prevent collab reopen from overwriting documents with blank data.
**Markdown conversion** β Harden markdown image conversion error handling.
**Portrait orientation** β Fix document API handling of portrait orientation.
**Development experience** β Log warning when local dev server is unreachable.
* chore(fonts): 0.1.2 [skip ci]
### Fixes
- **First-line list indentation** β Fixed incorrect text start position for numbered lists with first-line indents. The layout engine now computes marker widths from actual rendered tab stops instead of stale measurements, ensuring correct justified text width calculations.
- **Fonts configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes the editor. Hand-written config with invalid shapes (e.g., bare strings instead of arrays) now defaults to the full bundled pack and logs a single warning instead of throwing.
* chore(release): 1.42.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation now track correctly in multi-paragraph notes; Font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source`; full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState`; level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote/endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; ONE pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in attrs.originalXml to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump now ensures footnotes render when body fills last page (was silently dropping 0 of 6).
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses; resolves against stale painted ranges via block identity.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path; appendTransaction guard stamps missing styles after async mutations.
**Header/footer activation** β Double-click resolves note references only in body fragments; header/footer with behindDoc textboxes no longer break.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment with actual image position corrected.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security findings** β Remediated critical and high penetration test findings.
* chore(react): 1.13.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation track correctly in multi-paragraph notes; font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source` for full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState` with level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote or endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; one pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in `attrs.originalXml` to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump ensures footnotes render when body fills last page.
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path.
**Header/footer activation** β Double-click resolves note references only in body fragments; behindDoc textboxes no longer break activation.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment corrected to match actual image position.
**Link popover rendering** β Mount external popovers outside `overflow:hidden` containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security** β Remediated critical and high penetration test findings.
* chore(vscode): 2.14.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note. Staged Backspace selects the marker, second press removes it (and the note). Delete from the note area removes both marker and note. Caret and arrow navigation now track correctly in multi-paragraph notes. Insert notes via `editβ¦
* feat(oss-sync): direct-merge community PR lane with Orbit backflow (#367)
* feat(oss-sync): direct-merge community PR lane with Orbit backflow
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* feat(oss-sync): direct-merge community PR lane with Orbit backflow
* fix: address PR review comments on #367
* fix(oss-sync): reject multi-parent commits in community provenance
merge_commit_sha is set for merge-commit and rebase landings too, so it
cannot prove a squash. A multi-parent commit now fails the community
provenance check before any API lookup, closing the case where a PR whose
branch commits carry allowlisted bot emails would ingest wholesale through
the email check.
* fix(oss-sync): fail closed when community commit parent shape is unknown
classifyOssCommits is exported; a caller that omits parents must not skip
the squash-shape guard and fall through to PR verification.
Note: this ports only the public subtree changes from a mixed source commit (1 public path, 6 non-public paths ignored).
Ported-From-Source-Repo: superdoc/orbit
Ported-From-Source-Commit: cf57303e95dfe17a533ee35586036e29de6e5ba2
Ported-Public-Prefix: superdoc/public
* fix(super-editor): declare full namespace set on freshly-created numbering.xml (#3792)
* fix(super-editor): declare full namespace set on freshly-created numbering.xml (GH #3773)
Importing a docx with no word/numbering.xml and then adding the first
numbered list produced a numbering part missing xmlns:w16cid (and other
w16* namespaces), so Word refused to open/repair the exported file.
numbering-part-descriptor.ts's ensurePart() hand-maintained a 3-key
namespace map (xmlns:w/w15/mc) instead of reusing DEFAULT_DOCX_DEFS, the
full namespace + mc:Ignorable map that document.xml, comments.xml,
footnotes.xml, and people.xml already apply unconditionally. Since every
numbering-part creation goes through this ensurePart() (mutateNumbering ->
mutatePart -> executeMutate), the legacy SuperConverter#exportNumberingFile
baseNumbering fallback never runs for this path - the part descriptor's own
map has to be complete on its own.
Reuses DEFAULT_DOCX_DEFS instead of hand-picking namespaces one bug report
at a time. Adds a unit test on ensurePart() and an end-to-end regression
test (import numbering-less blank-doc.docx -> toggleOrderedList -> export
-> assert namespace-complete <w:numbering> root). Relaxes one
templates-adapter.integration.test.ts assertion that hardcoded the old
narrow mc:Ignorable merge result to match the sibling styles.xml test's
existing flexible pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* docs(super-editor): correct w16cid provenance in numbering root attrs comment
---------
Co-authored-by: d.bilukcha <d.bilukha@foodtech.team>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Caio Pizzol <97641911+caio-pizzol@users.noreply.github.com>
* docs: add MIt9 to community contributors (#3810)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(oss-ci): install bun in React workflow
Install Bun in the public React CI workflow so SDK contract generation can run during type checks.
Note: this ports only the public subtree changes from a mixed source commit (1 public path, 1 non-public path ignored).
Ported-From-Source-Repo: superdoc/orbit
Ported-From-Source-Commit: ac0394983c4c153163d3ca1baa54e056aa59da2b
Ported-Public-Prefix: superdoc/public
* π Sync stable β main (#3809)
* chore(cli): 0.17.0 [skip ci]
Based on the commit messages, here are the release notes:
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes with full interaction support; clicks map to content positions.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; pending-comments-update event carries `pendingSelection`.
- **Viewport scroll container** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with pageBreakBefore style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(sdk): 1.16.0 [skip ci]
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes; clicks map to content positions with full interaction support.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling.
- **Pending selection on comments event** β `pending-comments-update` event carries `pendingSelection` captured before the live selection clears.
- **Scroll container getter** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable mode transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections in the document.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement; no reflow.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with `pageBreakBefore` style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(mcp): 0.12.0 [skip ci]
### What's New
- **Textbox editing** β Click, type, and select text directly inside VML and DrawingML textboxes; full caret and selection support.
- **Font family combobox** β Browse and select fonts from the toolbar; font selection flows through custom UI.
- **Font size API** β `ui.viewport` exposes available font sizes for custom toolbars and programmatic queries.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling or moving selection.
- **Pending selection on comment events** β `pending-comments-update` event carries `pendingSelection` captured before the live DOM selection clears.
- **Scroll container access** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom modes with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding document sections.
### Improvements
- **Multi-column section balancing** β Continuous sections now balance correctly; explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space` values.
- **Font substitutes load before measurement** β Metric-compatible fallbacks for Calibri, Cambria, Arial, Times New Roman, and Courier New load upfront; no reflow.
- **Tracked table changes consolidation** β Inline cell edits fold into a single review item instead of separate entries; one decision applies to the whole table.
### Fixes
- Paragraphs styled with `pageBreakBefore` no longer insert blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word behavior when tables are nested inside textboxes.
- Table cell selection highlights render over empty space; multiline selections show full-width interior lines.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top (not bottom); soft-break continuation carets position at line start with alignment-aware offset.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection handles edge cases correctly.
- Viewport geometry invalidates on sidebar toggle without pixel-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves `bookmarkStart`/`bookmarkEnd` order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting is preserved when typing text over a toolbar font selection.
* chore(release): 1.40.0 [skip ci]
Now I have enough context. Let me write the release notes based on the actual changes:
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **TOC interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API (groupTrackedChanges), mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their PM start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
- **UV-deprecated legacy visual testing infrastructure** β Removed `/devtools/visual-testing`; layout validation now runs in the standard test suite.
* chore(react): 1.11.0 [skip ci]
### What's New
- **Textbox content editing** β Click to edit text inside textboxes in body, headers, footers, and table cells with full selection and caret support.
- **Zoom modes and fit-width** β Choose zoom mode (`manual` or `fit-width` for auto-fit) and read state, calculations, bounds, and viewport metrics from `ui.zoom`.
- **Viewport change events** β Listen for `viewport-change` when the container resizes to receive document width, available width, and calculated fit-zoom.
- **Font family combobox** β Search for fonts in the toolbar by name and see per-document options with substitution evidence.
- **Comments activation API** β Highlight comments without scrolling using `ui.comments.setActive()`, and access the captured selection from pending comment events.
- **Text range viewport rects** β Pass Document API text targets to `ui.viewport.getRect()` to get painted rects for overlay positioning.
- **Scroll container access** β Call `ui.viewport.getScrollContainer()` to find the element that actually scrolls, or null for window scroll.
- **Sidebar geometry updates** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **TOC interactions** β Hover highlights sections in the table of contents, and click navigates to them.
### Improvements
- **Column balancing** β Multi-column sections balance at continuous section breaks, matching Word's behavior.
- **Grouped tracked changes** β Inline cell changes inside a whole-table tracked change now group as one review item.
- **Line break serialization** β Newlines in text mutations serialize as `<w:br/>` and round-trip without loss.
- **Tab and soft-break carets** β Tab carets anchor to line top, and soft-break carets position at line start with alignment awareness.
- **Page break suppression** β Removed blank pages when `pageBreakBefore` appears directly after an explicit page break.
- **Textbox table rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Block identity repair** β Duplicate block identities fix automatically on compile.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions).
### Fixes
- **Empty table cell selection** β Dragging a selection into an empty cell no longer collapses.
- **Multiline selection rendering** β Interior lines of multi-line selections render full-width highlights.
- **Empty cell geometry** β Empty cell paragraphs resolve to a valid position for interaction.
- **Image alpha on export** β Images with transparency now preserve alpha on DOCX export.
- **Linebreak text selection** β Search spans and selections spanning text+linebreak+text now coalesce correctly.
- **Font toolbar updates** β Toolbar rebuilds when document fonts change or editor switches.
* chore(vscode): 2.12.0 [skip ci]
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **Table of contents interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API, mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their ProseMirror start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
* chore(esign): 2.7.2 [skip ci]
Based on my analysis of the commits and changes, here are the release notes:
### Fixes
- **Page breaks** β Removed redundant blank pages when a paragraph with pageBreakBefore style follows an explicit page break. Word's rule is structural, not geometric; we now match that behavior exactly.
- **Table cell selection** β Fixed selection highlight disappearing over empty space inside table cells. Also fixed multiline selection rendering and empty cell hit detection.
- **Textbox rendering** β Corrected rendering and text alignment for textboxes containing tables.
- **Image alpha transparency** β Process `alphaModFix` attributes correctly during import and export to preserve image transparency settings.
- **Block identity repair** β Runtime self-healing for duplicate block identities on compile, preventing stale references from breaking document operations.
### What's New
- **Textbox editing** β Phase 0 and 1 of textbox content editing. Render and edit VML and DrawingML textbox content. Full support for textboxes in headers, footers, and table cells with proper position preservation through import/export.
### Improvements
- **Font system** β Bundle docfonts 0.15 and 0.16 with expanded census rows and legal-cleared fallback fonts for better coverage.
- **Documentation** β Updated examples for custom UI APIs and clarified viewport geometry behavior.
* fix: roll back default toolbar fonts
* test: update font dropdown behavior expectations
* chore(cli): 0.17.1 [skip ci]
Based on my analysis of the commits, v0.17.1 contains a single fix: rolling back the default toolbar font options to a conservative baseline.
### Fixes
- **Toolbar fonts** β Reverted default font dropdown to the conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(sdk): 1.16.1 [skip ci]
### Fixes
- **Default toolbar fonts** β Rolled back font dropdown to a conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(mcp): 0.12.1 [skip ci]
Based on my analysis of the git diff, this patch release contains a single fix related to the toolbar font dropdown. Here are the release notes:
### Fixes
- **Toolbar fonts** β Rolled back font dropdown to conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(release): 1.40.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Full font resolution through documents remains unchanged.
* chore(react): 1.11.1 [skip ci]
### Fixes
- Toolbar font dropdown returns to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized β full font resolution within documents remains unchanged.
* chore(vscode): 2.12.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Document rendering of all fonts remains unchanged.
* fix: resolve stable merge conflicts
* fix: update font dropdown behavior expectations
* fix: align font option tests with rich pack
* fix: update ui font option expectations
* fix: avoid contract demo rebuild on dev
* fix: update react font hook expectations
* chore(cli): 0.18.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for bundled font substitutes. Without it, the toolbar shows a safe baseline (Arial, Times New Roman, Courier New) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a substitute `.woff2` file it cannot serve, so there are no spurious 404s or one-time warnings. Availability is a config decision, not a runtime probe.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to keep everything except a few. Names are validated at setup time β a typo fails fast instead of silently hiding fonts. Curation changes what the toolbar advertises and which families SuperDoc substitutes.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and documentation to use the new `@superdoc-dev/fonts` package and curation APIs.
- Toolbar font dropdown now correctly reflects availability based on pack configuration.
* chore(sdk): 1.17.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full 30-family set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(mcp): 0.13.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(fonts): 0.1.1 [skip ci]
Based on my analysis of the changes in this release, here are the release notes:
### What's New
- **@superdoc-dev/fonts is now the only bundled font source** β The fonts package is now the single recommended way to load metric-compatible fallbacks. The core `superdoc` package no longer ships or bundles fonts.
### Improvements
- **Simplified fonts API** β Pass `superdocFonts` directly to SuperDoc's config, or use `createSuperDocFonts({ include, exclude })` to curate which families you need.
- **CDN build is baseline-by-default** β The CDN/`<script>` build ships without fonts. Load the separate `@superdoc-dev/fonts` browser build to enable the reviewed fallback pack.
- **Fonts package now has semantic release** β `@superdoc-dev/fonts` publishes independently with automated version management. The package and core `superdoc` can now version separately while staying in sync.
- **New CDN resolver for fonts** β Added `cdn-entry.ts` to resolve bundled fonts relative to their own `<script>` tag, with no bundler configuration needed.
- **Curation is now decoupled** β Font include/exclude validation lives in `curation.ts` so both bundler and CDN builds honor the same rules.
### Fixes
- **Aligned font option tests** β Fixed test expectations to match the published fonts pack.
- **Rolled back default toolbar fonts** β Restored baseline font list for the CDN build; users opt into the full reviewed set by loading the fonts package.
* chore(release): 1.41.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional package containing 6 MB of `.woff2` font binaries for reviewed metric-compatible substitutes, published to npm under the org scope so the core stays small for apps that skip the pack.
**Config-gated bundled font availability** β Font availability is now explicit: without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New), and documents render their original font names with system fonts; configuring the pack lights up the full reviewed set, so toolbar and rendering show the curated families you enable.
**Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and a no-pack or curated document never reuses another document's full-pack measures.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere, and a one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API, so `<script>` tag pages load the reviewed pack from jsDelivr, unpkg, or self-hosted servers with no bundler and no path config.
**Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
* chore(react): 1.12.0 [skip ci]
### What's New
- **@superdoc-dev/fonts package** β Optional npm package with 6 MB of reviewed metric-compatible font binaries (Carlito, Liberation Serif, and others); bundler-resolvable assets, no copying files into `public/` or configuring paths.
- **Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and documents never reuse another document's measures.
- **CDN-ready fonts** β Browser build exports `SuperDocFonts` global for `<script>` tag pages; load from jsDelivr, unpkg, or self-hosted with no bundler and no path config.
### Improvements
- **Config-gated bundled font availability** β Without configuration, SuperDoc shows a safe baseline (Arial, Times New Roman, Courier New); configuring the pack lights up the full reviewed set, gated by config presence rather than runtime probes.
- **Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere; a one-time warning surfaces if the pack fails to load instead of silently degrading.
- **Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
- **Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
### Fixes
- Updated React font hook expectations to align with the new curation layer.
- Updated UI font option expectations to reflect the config-gated baseline.
- Aligned font option tests with the reviewed pack behavior.
* chore(vscode): 2.13.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional npm package containing 6 MB of `.woff2` font binaries. Imports metric-compatible substitutes for proprietary Word fonts (Carlito for Calibri, Liberation Serif for Times New Roman, and others). Lets you ship the reviewed font set without a copy step or `assetBaseUrl` β bundle detects and rewrites asset URLs automatically.
**Config-gated bundled font availability** β Font availability is now explicit. Without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New β one per CSS generic) and renders logical font names with system fonts. Configuring the pack via `superdocFonts`, `fonts.assetBaseUrl`/`fonts.resolveAssetUrl`, or the CDN browser build lights up the full reviewed set.
**Font curation API** β `createSuperDocFonts({ include / exclude })` narrows the pack to families you name by their Word logical names (e.g., `"Calibri"`). Validates family names at setup time, so typos fail fast. Include is an allow-list; exclude keeps everything but the named families. Does not affect custom fonts β those stay separate.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now advertises only the safe Word baseline instead of guessing substitutes. A one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Font availability and curation are now per-document, so each editor's toolbar and rendering is independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API. Load it via `<script>` tag from jsDelivr, unpkg, or self-hosted servers β no bundler, no path config.
**Updated docs and examples** β All getting-started guides (Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, Vue) now import and use `@superdoc-dev/fonts`.
* fix(cli): persist track-change scope across host calls
Both doc orchestrators used a fresh per-call invoke closure as the hook scope key, so resolved track-change ids never survived between operations in a host session; a repeat trackChanges.decide on an already-resolved id then fell through to the adapter and surfaced TARGET_NOT_FOUND instead of the intended NO_OP. Key the scope by the stable opened.doc handle the session pool reuses across calls, and add an orchestrator-level regression test driving distinct per-call closures over one shared doc (existing hook tests reused a single closure and could not catch this).
* chore(template-builder): 1.12.1 [skip ci]
### Bug Fixes
- linear sync
### Changes
- Merge branch 'orbit-canonical-publishing' (#3699)
* chore(cli): 0.19.0 [skip ci]
### What's New
**Textbox object interaction** β Select, resize, and move floating DrawingML textboxes with border-click selection, corner resize handles with live feedback, and drag-to-move with margin-offset preservation.
**Blocks API enhancements** β New `blocks.merge`, `blocks.split`, and `blocks.move` operations for programmatic paragraph manipulation (v2 sessions only).
**Paragraph numbering control** β Surface paragraph numbering on `blocks.list` and add `format.paragraph.setNumbering` to manage numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, and `lists.getState` operations for list manipulation.
**Mutation planning** β Add `mutations.planExecute` to plan and execute mutations in a single operation.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions; now keys scope by stable doc handle instead of per-call closure.
**Word field export** β Fixed passthrough importer attaching content to `passthroughInline` nodes, breaking MERGEFIELD and other unrecognized field export; instruction text now lives in `attrs.originalXml` only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page; terminal-page reserve bump now grows body on relayout when footnote demand exceeds placed reserve.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph note sessions by resolving geometry directly from painted pm ranges and falling back to offset bridge for unpainted positions.
**Note paragraph styles** β Fixed note paragraphs losing `FootnoteText` style on Enter or paste; appended transaction now re-stamps paragraphs without styleId using nearest styled sibling's properties.
**Cross-paragraph deletion in suggesting mode** β Fixed deletion spanning two paragraphs splitting instead of re-joining; `replaceStep.js` now compiles slices without inline content as plain tracked deletions and emits explicit caret hint.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition to prevent editing breaks.
**Tracked-change review navigation** β Fixed review navigation getting stuck and unable to return to previous position.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent by computing marker-suffix tab width from actual tab stops instead of stale textStartX targets.
**Orphan calls** β Removed orphan superdoc-dev environment calls.
### Improvements
**Footnote keystroke performance** β Warm-start reserve convergence from previous fixed point, reducing footnote pipeline cost from 75ms to 12ms per keystroke on 25-footnote document.
**Numbering recompute** β Skip numbering plugin's full-document diff on `BLOCK_NODE_METADATA_UPDATE_META` transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask when `transaction` and `selectionUpdate` fire synchronously; eliminates redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state; page-token relayout preserves seeded options.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy for shape/textbox support, and v1 compatibility wiring.
**Test coverage** β 70+ new comprehensive tests covering v2 wiring, custom UI parity, mutations, and block API operations.
* chore(sdk): 1.18.0 [skip ci]
### What's New
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically. Set alt text, captions, z-order, anchor options, and wrapping behavior. (#2290, #2295)
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks. Wrap text in links. Full control over DOCX link elements. (#2294)
**Pasted hyperlinks** β Converting pasted text into real docx link elements instead of plain text. (#2270)
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts, trailing characters). Improved sequence continuity when changing list types. (#2288, #2304)
**Clear content command** β Remove document content programmatically. (#2300)
**Table insertion** β Insert table with extra separator row to match MS Word behavior. (#2301)
**HTML extraction** β New `getHtml` operation to read document content as HTML. (#2264)
**TIFF image support** β Render TIFF images in DOCX documents alongside PNG, JPG, and GIF. (#2284)
**Markdown image import** β Automatically import images when converting markdown to documents. (#2303)
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all. (#2252)
**LLM tools** β Alpha release of llm tools integration. (#2292)
**Web view layout engine** β New rendering engine for improved document layout and performance. (#2100)
### Improvements
**Document API β Styles** β Registry-driven `styles.apply` with schema validation for type safety. (#2267)
**SDK type definitions** β Added TypeScript types for `PresentationEditor`. (#2271)
**HTML operations** β Fixed HTML insert and improved SDK tool selection. (#2264)
**SDK API** β Made `expectedRevision` parameter optional. (#2265)
**Python SDK documentation** β Operations now render as snake_case in generated docs. (#2266)
### Fixes
**Header/footer editing** β Prevent focus loss when typing in header/footer editors. (#2238)
**Image resize handles** β Align handles with actual image position. (#2293)
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport. (#2263)
**Format persistence** β Route `format.caps` through text transform so `w:caps` persists on export. (#2297)
**List export** β Sync document XML before numbering pruning to preserve list definitions. (#36058c364)
**Link popover rendering** β Mount external popovers outside overflow:hidden containers. (#2308)
**Media handling** β Handle Uint8Array media values from persistence layers. (#2298)
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM. (#2291)
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint sessions even when not dirty. (#2289)
**CLI collaboration** β Prevent collab reopen from overwriting existing document with blank data. (#2296)
**Markdown conversion** β Harden markdown image conversion error handling. (#2303)
**Portrait orientation** β Fix document API handling of portrait orientation. (#dafab76af)
**Development experience** β Log warning when local dev server is unreachable. (#2309)
**Test stability** β Stabilize flaky `cleanUpParagraphWithAnnotations` tests. (#2262)
* chore(mcp): 0.14.0 [skip ci]
### What's New
**Footnote and endnote editing** β Double-click body markers to open notes, two-press Backspace to delete, clearing note content removes the footnote on both sides.
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically; set alt text, captions, z-order, and wrapping.
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks; wrap text in links with full DOCX control.
**Pasted hyperlinks** β Automatically converts pasted URLs into real docx link elements instead of plain text.
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts).
**Document API β Table insertion** β Insert tables with extra separator row to match MS Word behavior.
**Textbox object interaction** β Select, resize, and move DrawingML textboxes with border-click selection, corner handles, and drag-to-move feedback.
**Blocks API enhancements** β New merge, split, and move operations for programmatic paragraph manipulation (v2 sessions).
**Paragraph numbering control** β Surface paragraph numbering on blocks.list; add format.paragraph.setNumbering for managing numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New lists.apply, lists.continue, lists.restart, lists.remove, and lists.getState operations.
**Mutation planning** β Plan and execute mutations in a single operation with mutations.planExecute.
**Clear content command** β Remove document content programmatically.
**HTML extraction** β New getHtml operation to read document content as HTML.
**TIFF image support** β Render TIFF images alongside PNG, JPG, and GIF.
**Markdown image import** β Automatically import images when converting markdown to documents.
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all.
**LLM tools** β Alpha release of LLM tools integration.
**Web view layout engine** β New rendering engine for improved layout and performance.
### Improvements
**Document API styles** β Registry-driven styles.apply with schema validation for type safety.
**PresentationEditor types** β Added TypeScript types for PresentationEditor.
**SDK API** β Made expectedRevision parameter optional.
**Footnote keystroke performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms.
**Numbering recompute** β Skip full-document diff on block-node metadata transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask to eliminate redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy, and v1 compatibility wiring.
**Test coverage** β 70+ new tests covering v2 wiring, custom UI parity, mutations, and block API operations.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions.
**Word field export** β Fixed passthrough importer breaking MERGEFIELD export; instruction text now lives in attrs.originalXml only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph notes.
**Note paragraph styles** β Fixed note paragraphs losing FootnoteText style on Enter or paste.
**Cross-paragraph deletion** β Fixed deletion spanning two paragraphs splitting instead of re-joining in suggesting mode.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition.
**Tracked-change review navigation** β Fixed review navigation getting stuck.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent.
**Header/footer editing** β Prevent focus loss when typing in header/footer editors.
**Image resize handles** β Align handles with actual image position.
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport.
**Format persistence** β Route format.caps through text transform so w:caps persists on export.
**List export** β Sync document XML before numbering pruning to preserve list definitions.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers.
**Media handling** β Handle Uint8Array media values from persistence layers.
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM.
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint when not dirty.
**CLI collaboration** β Prevent collab reopen from overwriting documents with blank data.
**Markdown conversion** β Harden markdown image conversion error handling.
**Portrait orientation** β Fix document API handling of portrait orientation.
**Development experience** β Log warning when local dev server is unreachable.
* chore(fonts): 0.1.2 [skip ci]
### Fixes
- **First-line list indentation** β Fixed incorrect text start position for numbered lists with first-line indents. The layout engine now computes marker widths from actual rendered tab stops instead of stale measurements, ensuring correct justified text width calculations.
- **Fonts configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes the editor. Hand-written config with invalid shapes (e.g., bare strings instead of arrays) now defaults to the full bundled pack and logs a single warning instead of throwing.
* chore(release): 1.42.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation now track correctly in multi-paragraph notes; Font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source`; full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState`; level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote/endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; ONE pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in attrs.originalXml to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump now ensures footnotes render when body fills last page (was silently dropping 0 of 6).
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses; resolves against stale painted ranges via block identity.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path; appendTransaction guard stamps missing styles after async mutations.
**Header/footer activation** β Double-click resolves note references only in body fragments; header/footer with behindDoc textboxes no longer break.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment with actual image position corrected.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security findings** β Remediated critical and high penetration test findings.
* chore(react): 1.13.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation track correctly in multi-paragraph notes; font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source` for full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState` with level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote or endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; one pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in `attrs.originalXml` to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump ensures footnotes render when body fills last page.
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path.
**Header/footer activation** β Double-click resolves note references only in body fragments; behindDoc textboxes no longer break activation.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment corrected to match actual image position.
**Link popover rendering** β Mount external popovers outside `overflow:hidden` containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security** β Remediated critical and high penetration test findings.
* chore(vscode): 2.14.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note. Staged Backspace selects the marker, second press removes it (and the note). Delete from the note area removes both marker and note. Caret and arrow navigation now track correctly in multi-paragraph notes. Insert notes via `editβ¦
* feat(oss-sync): direct-merge community PR lane with Orbit backflow (#367)
* feat(oss-sync): direct-merge community PR lane with Orbit backflow
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* fix: address PR review comments on #367
* feat(oss-sync): direct-merge community PR lane with Orbit backflow
* fix: address PR review comments on #367
* fix(oss-sync): reject multi-parent commits in community provenance
merge_commit_sha is set for merge-commit and rebase landings too, so it
cannot prove a squash. A multi-parent commit now fails the community
provenance check before any API lookup, closing the case where a PR whose
branch commits carry allowlisted bot emails would ingest wholesale through
the email check.
* fix(oss-sync): fail closed when community commit parent shape is unknown
classifyOssCommits is exported; a caller that omits parents must not skip
the squash-shape guard and fall through to PR verification.
Note: this ports only the public subtree changes from a mixed source commit (1 public path, 6 non-public paths ignored).
Ported-From-Source-Repo: superdoc/orbit
Ported-From-Source-Commit: cf57303e95dfe17a533ee35586036e29de6e5ba2
Ported-Public-Prefix: superdoc/public
* fix(super-editor): declare full namespace set on freshly-created numbering.xml (#3792)
* fix(super-editor): declare full namespace set on freshly-created numbering.xml (GH #3773)
Importing a docx with no word/numbering.xml and then adding the first
numbered list produced a numbering part missing xmlns:w16cid (and other
w16* namespaces), so Word refused to open/repair the exported file.
numbering-part-descriptor.ts's ensurePart() hand-maintained a 3-key
namespace map (xmlns:w/w15/mc) instead of reusing DEFAULT_DOCX_DEFS, the
full namespace + mc:Ignorable map that document.xml, comments.xml,
footnotes.xml, and people.xml already apply unconditionally. Since every
numbering-part creation goes through this ensurePart() (mutateNumbering ->
mutatePart -> executeMutate), the legacy SuperConverter#exportNumberingFile
baseNumbering fallback never runs for this path - the part descriptor's own
map has to be complete on its own.
Reuses DEFAULT_DOCX_DEFS instead of hand-picking namespaces one bug report
at a time. Adds a unit test on ensurePart() and an end-to-end regression
test (import numbering-less blank-doc.docx -> toggleOrderedList -> export
-> assert namespace-complete <w:numbering> root). Relaxes one
templates-adapter.integration.test.ts assertion that hardcoded the old
narrow mc:Ignorable merge result to match the sibling styles.xml test's
existing flexible pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* docs(super-editor): correct w16cid provenance in numbering root attrs comment
---------
Co-authored-by: d.bilukcha <d.bilukha@foodtech.team>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Caio Pizzol <97641911+caio-pizzol@users.noreply.github.com>
* docs: add MIt9 to community contributors (#3810)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(oss-ci): install bun in React workflow
Install Bun in the public React CI workflow so SDK contract generation can run during type checks.
Note: this ports only the public subtree changes from a mixed source commit (1 public path, 1 non-public path ignored).
Ported-From-Source-Repo: superdoc/orbit
Ported-From-Source-Commit: ac0394983c4c153163d3ca1baa54e056aa59da2b
Ported-Public-Prefix: superdoc/public
* π Sync stable β main (#3809)
* chore(cli): 0.17.0 [skip ci]
Based on the commit messages, here are the release notes:
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes with full interaction support; clicks map to content positions.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; pending-comments-update event carries `pendingSelection`.
- **Viewport scroll container** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with pageBreakBefore style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(sdk): 1.16.0 [skip ci]
### What's New
- **Textbox editing** β Edit text content inside VML and DrawingML textboxes; clicks map to content positions with full interaction support.
- **Font family combobox** β Browse and select fonts directly from the toolbar.
- **Font size options** β UI API exposes font size choices for custom toolbars.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling.
- **Pending selection on comments event** β `pending-comments-update` event carries `pendingSelection` captured before the live selection clears.
- **Scroll container getter** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom with observable mode transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding sections in the document.
### Improvements
- **Multi-column section balancing** β Continuous sections balance correctly with explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space`.
- **Font substitutes** β Metric-compatible fallbacks load for Calibri, Cambria, Arial, Times New Roman, and Courier New before measurement; no reflow.
- **Tracked table changes** β Inline cell edits consolidate into single review items instead of separate entries.
### Fixes
- Paragraphs with `pageBreakBefore` style no longer add blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word when tables are inside textboxes.
- Table cell selection highlights appear over empty space; multiline selection interior lines render at full width.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top instead of bottom; soft-break continuation carets position alignment-aware at line start.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection flow handles edge cases.
- Viewport geometry invalidates on sidebar toggle without px-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves bookmark start/end order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting preserved when typing text over toolbar font selections.
* chore(mcp): 0.12.0 [skip ci]
### What's New
- **Textbox editing** β Click, type, and select text directly inside VML and DrawingML textboxes; full caret and selection support.
- **Font family combobox** β Browse and select fonts from the toolbar; font selection flows through custom UI.
- **Font size API** β `ui.viewport` exposes available font sizes for custom toolbars and programmatic queries.
- **Comments API: activate-only highlight** β `ui.comments.setActive()` marks a comment active without scrolling or moving selection.
- **Pending selection on comment events** β `pending-comments-update` event carries `pendingSelection` captured before the live DOM selection clears.
- **Scroll container access** β `ui.viewport.getScrollContainer()` returns the editor's resolved scroll element for overlay consumers.
- **Text range viewport geometry** β `ui.viewport.getRect()` now accepts Document API text addresses and targets, not just entities.
- **Sidebar viewport observation** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **Zoom modes** β Manual and fit-width zoom modes with observable transitions, viewport metrics, `useSuperDocZoom` React hook, and toolbar command.
- **Table of contents hover** β Hovering TOC entries highlights corresponding document sections.
### Improvements
- **Multi-column section balancing** β Continuous sections now balance correctly; explicit per-column widths preserved throughout layout.
- **Column spacing precision** β Per-column gaps drive separator positions per ECMA-376; unequal-width columns honor per-column `w:space` values.
- **Font substitutes load before measurement** β Metric-compatible fallbacks for Calibri, Cambria, Arial, Times New Roman, and Courier New load upfront; no reflow.
- **Tracked table changes consolidation** β Inline cell edits fold into a single review item instead of separate entries; one decision applies to the whole table.
### Fixes
- Paragraphs styled with `pageBreakBefore` no longer insert blank pages when directly following explicit page breaks.
- Textbox text alignment now matches Word behavior when tables are nested inside textboxes.
- Table cell selection highlights render over empty space; multiline selections show full-width interior lines.
- Plan engine recovers from stale block identities on recompile without crashes.
- Tab carets anchor to line top (not bottom); soft-break continuation carets position at line start with alignment-aware offset.
- DOCX export preserves generated line breaks as `<w:br/>` elements instead of raw newlines.
- Font toolbar no longer races on editor handoff; combobox selection handles edge cases correctly.
- Viewport geometry invalidates on sidebar toggle without pixel-level jitter.
- Zoom state β PDF documents contribute to viewport metrics; mode-only transitions emit correctly.
- TOC anchor navigation preserves `bookmarkStart`/`bookmarkEnd` order.
- Image alpha modifiers process correctly on import and export.
- Font picker keyboard behavior consistent across selection modes.
- Formatting is preserved when typing text over a toolbar font selection.
* chore(release): 1.40.0 [skip ci]
Now I have enough context. Let me write the release notes based on the actual changes:
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **TOC interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API (groupTrackedChanges), mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their PM start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
- **UV-deprecated legacy visual testing infrastructure** β Removed `/devtools/visual-testing`; layout validation now runs in the standard test suite.
* chore(react): 1.11.0 [skip ci]
### What's New
- **Textbox content editing** β Click to edit text inside textboxes in body, headers, footers, and table cells with full selection and caret support.
- **Zoom modes and fit-width** β Choose zoom mode (`manual` or `fit-width` for auto-fit) and read state, calculations, bounds, and viewport metrics from `ui.zoom`.
- **Viewport change events** β Listen for `viewport-change` when the container resizes to receive document width, available width, and calculated fit-zoom.
- **Font family combobox** β Search for fonts in the toolbar by name and see per-document options with substitution evidence.
- **Comments activation API** β Highlight comments without scrolling using `ui.comments.setActive()`, and access the captured selection from pending comment events.
- **Text range viewport rects** β Pass Document API text targets to `ui.viewport.getRect()` to get painted rects for overlay positioning.
- **Scroll container access** β Call `ui.viewport.getScrollContainer()` to find the element that actually scrolls, or null for window scroll.
- **Sidebar geometry updates** β `ui.viewport.observe` fires when the comments rail opens or closes.
- **TOC interactions** β Hover highlights sections in the table of contents, and click navigates to them.
### Improvements
- **Column balancing** β Multi-column sections balance at continuous section breaks, matching Word's behavior.
- **Grouped tracked changes** β Inline cell changes inside a whole-table tracked change now group as one review item.
- **Line break serialization** β Newlines in text mutations serialize as `<w:br/>` and round-trip without loss.
- **Tab and soft-break carets** β Tab carets anchor to line top, and soft-break carets position at line start with alignment awareness.
- **Page break suppression** β Removed blank pages when `pageBreakBefore` appears directly after an explicit page break.
- **Textbox table rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Block identity repair** β Duplicate block identities fix automatically on compile.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions).
### Fixes
- **Empty table cell selection** β Dragging a selection into an empty cell no longer collapses.
- **Multiline selection rendering** β Interior lines of multi-line selections render full-width highlights.
- **Empty cell geometry** β Empty cell paragraphs resolve to a valid position for interaction.
- **Image alpha on export** β Images with transparency now preserve alpha on DOCX export.
- **Linebreak text selection** β Search spans and selections spanning text+linebreak+text now coalesce correctly.
- **Font toolbar updates** β Toolbar rebuilds when document fonts change or editor switches.
* chore(vscode): 2.12.0 [skip ci]
### What's New
- **Textbox content editing** β Click, type, and edit text inside VML and DrawingML textboxes. Selection, caret rendering, and text updates work across body, header/footer, and table cell contexts.
- **Zoom modes and fit-width** β Set zoom as `manual` or `fit-width` (auto-fit to container). `ui.zoom` exposes mode, value, calculated fit-zoom, bounds, and viewport metrics; PDF documents measure at their rendered scale.
- **Viewport metrics and responsive layout events** β `viewport-change` event fires on container resize with measurements (document width, available width, fit-zoom). Consume viewport metrics from `getViewportMetrics()` to implement responsive zoom without polling.
- **Font family combobox** β Typeahead-enabled font picker in toolbar with per-document font options and substitution evidence (metric-safe vs. visual-only); dropdown stays in viewport.
- **Comments API expansion** β `ui.comments.setActive()` highlights a comment without scrolling; `pendingSelection` on pending comment events gives consumers the captured selection to pass to comment creation APIs.
- **Text range viewport targets** β `ui.viewport.getRect()` now accepts Document API text targets (addresses and segments), resolving to painted DOM rects for custom overlay and floating-UI anchoring.
- **Scroll container exposure** β `ui.viewport.getScrollContainer()` returns the actual scrollable ancestor (or null for document/window scroll), letting overlay consumers attach scroll listeners to the right element.
- **Sidebar geometry signals** β `ui.viewport.observe` fires when the comments rail opens/closes, invalidating cached viewport geometry.
- **Table of contents interactions** β Hover highlighting and section-link navigation for table of contents.
### Improvements
- **Column balancing at continuous breaks** β Multi-column sections now balance correctly at continuous section breaks, matching Word's layout. Explicit column widths (equal or unequal) and per-column spacing extract accurately.
- **Tracked change granularity** β Inline cell changes within a whole-table tracked change consolidate into one logical change in the review API, mirroring the comments containment rule.
- **Line break handling in mutations** β Generated newlines in text-mode mutations serialize as Word-native `<w:br/>` elements; read model treats lineBreak nodes as `\n` so search/query/rewrite stay consistent.
- **Caret geometry for tabs and soft breaks** β Tab carets anchor to line top; soft-break continuation carets position at line start with alignment-aware offset instead of the page right edge.
- **Page break suppression** β Style-driven pageBreakBefore directly after an explicit page break no longer renders a redundant blank page, matching Word's structural rule.
- **Textbox table content rendering** β Tables inside textboxes render with correct alignment and text flow.
- **Plan-engine block identity repair** β Runtime self-healing of duplicate block identities on compile, preventing stale cross-document references.
- **Font substitution evidence** β Font reports carry per-face evidence (metric-safe, visual-only, glyph exceptions) from the docfonts registry, giving consumers the fidelity detail behind each substitution.
### Fixes
- **Table cell selection collapse** β Dragging a body selection into an empty table cell no longer collapses the selection; prosemirror-tables normalization guard keeps the extended range.
- **Multiline selection rendering** β Interior lines of multi-line selections now render the full width highlight instead of slivers; per-line rect computation handles absolutely-positioned `.superdoc-line` elements across browsers.
- **Empty cell geometry** β Empty table cell paragraphs (no runs) resolve to their ProseMirror start instead of null, preventing frozen selections during active drags.
- **Image alpha export** β Process alphaModFix for images on export, preserving transparency properties.
- **Text selection in generated lineBreak contexts** β Search and offset resolution now treat lineBreak nodes as `\n`, so a match spanning text+lineBreak+text coalesces to one contiguous range.
- **Font toolbar updates** β Document font toolbar rebuilds and layout re-renders on fonts-changed events; dropdown state persists through editor handoff.
* chore(esign): 2.7.2 [skip ci]
Based on my analysis of the commits and changes, here are the release notes:
### Fixes
- **Page breaks** β Removed redundant blank pages when a paragraph with pageBreakBefore style follows an explicit page break. Word's rule is structural, not geometric; we now match that behavior exactly.
- **Table cell selection** β Fixed selection highlight disappearing over empty space inside table cells. Also fixed multiline selection rendering and empty cell hit detection.
- **Textbox rendering** β Corrected rendering and text alignment for textboxes containing tables.
- **Image alpha transparency** β Process `alphaModFix` attributes correctly during import and export to preserve image transparency settings.
- **Block identity repair** β Runtime self-healing for duplicate block identities on compile, preventing stale references from breaking document operations.
### What's New
- **Textbox editing** β Phase 0 and 1 of textbox content editing. Render and edit VML and DrawingML textbox content. Full support for textboxes in headers, footers, and table cells with proper position preservation through import/export.
### Improvements
- **Font system** β Bundle docfonts 0.15 and 0.16 with expanded census rows and legal-cleared fallback fonts for better coverage.
- **Documentation** β Updated examples for custom UI APIs and clarified viewport geometry behavior.
* fix: roll back default toolbar fonts
* test: update font dropdown behavior expectations
* chore(cli): 0.17.1 [skip ci]
Based on my analysis of the commits, v0.17.1 contains a single fix: rolling back the default toolbar font options to a conservative baseline.
### Fixes
- **Toolbar fonts** β Reverted default font dropdown to the conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(sdk): 1.16.1 [skip ci]
### Fixes
- **Default toolbar fonts** β Rolled back font dropdown to a conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(mcp): 0.12.1 [skip ci]
Based on my analysis of the git diff, this patch release contains a single fix related to the toolbar font dropdown. Here are the release notes:
### Fixes
- **Toolbar fonts** β Rolled back font dropdown to conservative baseline (Arial, Courier New, Georgia, Times New Roman). Per-document font options remain available through the font selector.
* chore(release): 1.40.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Full font resolution through documents remains unchanged.
* chore(react): 1.11.1 [skip ci]
### Fixes
- Toolbar font dropdown returns to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized β full font resolution within documents remains unchanged.
* chore(vscode): 2.12.1 [skip ci]
### Fixes
- Toolbar font dropdown reverted to a conservative baseline (Arial, Courier New, Georgia, Times New Roman) while the optional font-pack selection UI is finalized. Document rendering of all fonts remains unchanged.
* fix: resolve stable merge conflicts
* fix: update font dropdown behavior expectations
* fix: align font option tests with rich pack
* fix: update ui font option expectations
* fix: avoid contract demo rebuild on dev
* fix: update react font hook expectations
* chore(cli): 0.18.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for bundled font substitutes. Without it, the toolbar shows a safe baseline (Arial, Times New Roman, Courier New) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a substitute `.woff2` file it cannot serve, so there are no spurious 404s or one-time warnings. Availability is a config decision, not a runtime probe.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to keep everything except a few. Names are validated at setup time β a typo fails fast instead of silently hiding fonts. Curation changes what the toolbar advertises and which families SuperDoc substitutes.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and documentation to use the new `@superdoc-dev/fonts` package and curation APIs.
- Toolbar font dropdown now correctly reflects availability based on pack configuration.
* chore(sdk): 1.17.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full 30-family set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(mcp): 0.13.0 [skip ci]
### What's New
- **Bundled fonts are now explicit and predictable.** The optional `@superdoc-dev/fonts` package (renamed from `@superdoc/fonts`) is now the only source for metric-compatible font substitutes. Without it, the toolbar shows a safe baseline (Arial, Courier New, Times New Roman) and documents render with system fonts. With it configured, the full reviewed set becomes available.
- **Config-gated font availability prevents stray requests.** An unconfigured app never tries to fetch a `.woff2` file it cannot serve β no spurious 404s, no one-time warnings. Availability is explicit, determined by your config, not discovered at runtime.
- **Curate bundled fonts by name with `createSuperDocFonts()`.** Use `include` to allow only specific Word families, or `exclude` to block a few. Names are validated at setup time β a typo fails fast with suggestions instead of silently hiding fonts. Curation changes what the toolbar advertises and which families get substituted.
```js
import { createSuperDocFonts } from '@superdoc-dev/fonts';
new SuperDoc({
selector: '#editor',
document: 'contract.docx',
fonts: createSuperDocFonts({ exclude: ['Cooper Black', 'Brush Script MT'] }),
});
```
- **Document-scoped activation and curation.** Each document independently decides which bundled fonts it uses. A curated document never reuses a full-pack document's cached font measures, so resolution stays accurate regardless of what curation layers are in use.
### Improvements
- Updated all getting-started examples and framework guides to use the new `@superdoc-dev/fonts` package.
- Toolbar font dropdown now correctly reflects availability based on your pack configuration.
- Font availability and curation signature are now document-scoped, eliminating cache collisions across different configurations.
* chore(fonts): 0.1.1 [skip ci]
Based on my analysis of the changes in this release, here are the release notes:
### What's New
- **@superdoc-dev/fonts is now the only bundled font source** β The fonts package is now the single recommended way to load metric-compatible fallbacks. The core `superdoc` package no longer ships or bundles fonts.
### Improvements
- **Simplified fonts API** β Pass `superdocFonts` directly to SuperDoc's config, or use `createSuperDocFonts({ include, exclude })` to curate which families you need.
- **CDN build is baseline-by-default** β The CDN/`<script>` build ships without fonts. Load the separate `@superdoc-dev/fonts` browser build to enable the reviewed fallback pack.
- **Fonts package now has semantic release** β `@superdoc-dev/fonts` publishes independently with automated version management. The package and core `superdoc` can now version separately while staying in sync.
- **New CDN resolver for fonts** β Added `cdn-entry.ts` to resolve bundled fonts relative to their own `<script>` tag, with no bundler configuration needed.
- **Curation is now decoupled** β Font include/exclude validation lives in `curation.ts` so both bundler and CDN builds honor the same rules.
### Fixes
- **Aligned font option tests** β Fixed test expectations to match the published fonts pack.
- **Rolled back default toolbar fonts** β Restored baseline font list for the CDN build; users opt into the full reviewed set by loading the fonts package.
* chore(release): 1.41.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional package containing 6 MB of `.woff2` font binaries for reviewed metric-compatible substitutes, published to npm under the org scope so the core stays small for apps that skip the pack.
**Config-gated bundled font availability** β Font availability is now explicit: without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New), and documents render their original font names with system fonts; configuring the pack lights up the full reviewed set, so toolbar and rendering show the curated families you enable.
**Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and a no-pack or curated document never reuses another document's full-pack measures.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere, and a one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API, so `<script>` tag pages load the reviewed pack from jsDelivr, unpkg, or self-hosted servers with no bundler and no path config.
**Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
* chore(react): 1.12.0 [skip ci]
### What's New
- **@superdoc-dev/fonts package** β Optional npm package with 6 MB of reviewed metric-compatible font binaries (Carlito, Liberation Serif, and others); bundler-resolvable assets, no copying files into `public/` or configuring paths.
- **Font curation API** β `createSuperDocFonts({ include / exclude })` validates family names against the pack and curates availability at setup time, so typos fail fast and documents never reuse another document's measures.
- **CDN-ready fonts** β Browser build exports `SuperDocFonts` global for `<script>` tag pages; load from jsDelivr, unpkg, or self-hosted with no bundler and no path config.
### Improvements
- **Config-gated bundled font availability** β Without configuration, SuperDoc shows a safe baseline (Arial, Times New Roman, Courier New); configuring the pack lights up the full reviewed set, gated by config presence rather than runtime probes.
- **Better baseline behavior** β Unconfigured SuperDoc now shows one safe Word font per CSS generic instead of fetching missing substitutes from nowhere; a one-time warning surfaces if the pack fails to load instead of silently degrading.
- **Document-scoped font resolution** β Availability and curation are per-document in the resolver and offerings, keeping each editor's toolbar and rendering independent when multiple documents share a page.
- **Updated examples and docs** β Getting-started guides for Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, and Vue now import and use `@superdoc-dev/fonts`.
### Fixes
- Updated React font hook expectations to align with the new curation layer.
- Updated UI font option expectations to reflect the config-gated baseline.
- Aligned font option tests with the reviewed pack behavior.
* chore(vscode): 2.13.0 [skip ci]
### What's New
**@superdoc-dev/fonts package** β Optional npm package containing 6 MB of `.woff2` font binaries. Imports metric-compatible substitutes for proprietary Word fonts (Carlito for Calibri, Liberation Serif for Times New Roman, and others). Lets you ship the reviewed font set without a copy step or `assetBaseUrl` β bundle detects and rewrites asset URLs automatically.
**Config-gated bundled font availability** β Font availability is now explicit. Without a configured pack, SuperDoc shows a conservative baseline (Arial, Times New Roman, Courier New β one per CSS generic) and renders logical font names with system fonts. Configuring the pack via `superdocFonts`, `fonts.assetBaseUrl`/`fonts.resolveAssetUrl`, or the CDN browser build lights up the full reviewed set.
**Font curation API** β `createSuperDocFonts({ include / exclude })` narrows the pack to families you name by their Word logical names (e.g., `"Calibri"`). Validates family names at setup time, so typos fail fast. Include is an allow-list; exclude keeps everything but the named families. Does not affect custom fonts β those stay separate.
### Improvements
**Better baseline behavior** β Unconfigured SuperDoc now advertises only the safe Word baseline instead of guessing substitutes. A one-time warning surfaces if the pack fails to load instead of silently degrading.
**Document-scoped font resolution** β Font availability and curation are now per-document, so each editor's toolbar and rendering is independent when multiple documents share a page.
**CDN-ready fonts** β The `@superdoc-dev/fonts` browser build exports a global `SuperDocFonts` with the same API. Load it via `<script>` tag from jsDelivr, unpkg, or self-hosted servers β no bundler, no path config.
**Updated docs and examples** β All getting-started guides (Angular, Laravel, Next.js, Nuxt, React, Solid, Vanilla, Vue) now import and use `@superdoc-dev/fonts`.
* fix(cli): persist track-change scope across host calls
Both doc orchestrators used a fresh per-call invoke closure as the hook scope key, so resolved track-change ids never survived between operations in a host session; a repeat trackChanges.decide on an already-resolved id then fell through to the adapter and surfaced TARGET_NOT_FOUND instead of the intended NO_OP. Key the scope by the stable opened.doc handle the session pool reuses across calls, and add an orchestrator-level regression test driving distinct per-call closures over one shared doc (existing hook tests reused a single closure and could not catch this).
* chore(template-builder): 1.12.1 [skip ci]
### Bug Fixes
- linear sync
### Changes
- Merge branch 'orbit-canonical-publishing' (#3699)
* chore(cli): 0.19.0 [skip ci]
### What's New
**Textbox object interaction** β Select, resize, and move floating DrawingML textboxes with border-click selection, corner resize handles with live feedback, and drag-to-move with margin-offset preservation.
**Blocks API enhancements** β New `blocks.merge`, `blocks.split`, and `blocks.move` operations for programmatic paragraph manipulation (v2 sessions only).
**Paragraph numbering control** β Surface paragraph numbering on `blocks.list` and add `format.paragraph.setNumbering` to manage numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, and `lists.getState` operations for list manipulation.
**Mutation planning** β Add `mutations.planExecute` to plan and execute mutations in a single operation.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions; now keys scope by stable doc handle instead of per-call closure.
**Word field export** β Fixed passthrough importer attaching content to `passthroughInline` nodes, breaking MERGEFIELD and other unrecognized field export; instruction text now lives in `attrs.originalXml` only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page; terminal-page reserve bump now grows body on relayout when footnote demand exceeds placed reserve.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph note sessions by resolving geometry directly from painted pm ranges and falling back to offset bridge for unpainted positions.
**Note paragraph styles** β Fixed note paragraphs losing `FootnoteText` style on Enter or paste; appended transaction now re-stamps paragraphs without styleId using nearest styled sibling's properties.
**Cross-paragraph deletion in suggesting mode** β Fixed deletion spanning two paragraphs splitting instead of re-joining; `replaceStep.js` now compiles slices without inline content as plain tracked deletions and emits explicit caret hint.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition to prevent editing breaks.
**Tracked-change review navigation** β Fixed review navigation getting stuck and unable to return to previous position.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent by computing marker-suffix tab width from actual tab stops instead of stale textStartX targets.
**Orphan calls** β Removed orphan superdoc-dev environment calls.
### Improvements
**Footnote keystroke performance** β Warm-start reserve convergence from previous fixed point, reducing footnote pipeline cost from 75ms to 12ms per keystroke on 25-footnote document.
**Numbering recompute** β Skip numbering plugin's full-document diff on `BLOCK_NODE_METADATA_UPDATE_META` transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask when `transaction` and `selectionUpdate` fire synchronously; eliminates redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state; page-token relayout preserves seeded options.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy for shape/textbox support, and v1 compatibility wiring.
**Test coverage** β 70+ new comprehensive tests covering v2 wiring, custom UI parity, mutations, and block API operations.
* chore(sdk): 1.18.0 [skip ci]
### What's New
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically. Set alt text, captions, z-order, anchor options, and wrapping behavior. (#2290, #2295)
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks. Wrap text in links. Full control over DOCX link elements. (#2294)
**Pasted hyperlinks** β Converting pasted text into real docx link elements instead of plain text. (#2270)
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts, trailing characters). Improved sequence continuity when changing list types. (#2288, #2304)
**Clear content command** β Remove document content programmatically. (#2300)
**Table insertion** β Insert table with extra separator row to match MS Word behavior. (#2301)
**HTML extraction** β New `getHtml` operation to read document content as HTML. (#2264)
**TIFF image support** β Render TIFF images in DOCX documents alongside PNG, JPG, and GIF. (#2284)
**Markdown image import** β Automatically import images when converting markdown to documents. (#2303)
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all. (#2252)
**LLM tools** β Alpha release of llm tools integration. (#2292)
**Web view layout engine** β New rendering engine for improved document layout and performance. (#2100)
### Improvements
**Document API β Styles** β Registry-driven `styles.apply` with schema validation for type safety. (#2267)
**SDK type definitions** β Added TypeScript types for `PresentationEditor`. (#2271)
**HTML operations** β Fixed HTML insert and improved SDK tool selection. (#2264)
**SDK API** β Made `expectedRevision` parameter optional. (#2265)
**Python SDK documentation** β Operations now render as snake_case in generated docs. (#2266)
### Fixes
**Header/footer editing** β Prevent focus loss when typing in header/footer editors. (#2238)
**Image resize handles** β Align handles with actual image position. (#2293)
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport. (#2263)
**Format persistence** β Route `format.caps` through text transform so `w:caps` persists on export. (#2297)
**List export** β Sync document XML before numbering pruning to preserve list definitions. (#36058c364)
**Link popover rendering** β Mount external popovers outside overflow:hidden containers. (#2308)
**Media handling** β Handle Uint8Array media values from persistence layers. (#2298)
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM. (#2291)
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint sessions even when not dirty. (#2289)
**CLI collaboration** β Prevent collab reopen from overwriting existing document with blank data. (#2296)
**Markdown conversion** β Harden markdown image conversion error handling. (#2303)
**Portrait orientation** β Fix document API handling of portrait orientation. (#dafab76af)
**Development experience** β Log warning when local dev server is unreachable. (#2309)
**Test stability** β Stabilize flaky `cleanUpParagraphWithAnnotations` tests. (#2262)
* chore(mcp): 0.14.0 [skip ci]
### What's New
**Footnote and endnote editing** β Double-click body markers to open notes, two-press Backspace to delete, clearing note content removes the footnote on both sides.
**Document API β Image commands** β Crop, rotate, scale, flip, and replace images programmatically; set alt text, captions, z-order, and wrapping.
**Document API β Hyperlink commands** β Insert, get, list, patch, and remove hyperlinks; wrap text in links with full DOCX control.
**Pasted hyperlinks** β Automatically converts pasted URLs into real docx link elements instead of plain text.
**Document API β Lists commands** β Apply list templates, set level-specific formatting (alignment, bullets, numbering, indentation, marker fonts).
**Document API β Table insertion** β Insert tables with extra separator row to match MS Word behavior.
**Textbox object interaction** β Select, resize, and move DrawingML textboxes with border-click selection, corner handles, and drag-to-move feedback.
**Blocks API enhancements** β New merge, split, and move operations for programmatic paragraph manipulation (v2 sessions).
**Paragraph numbering control** β Surface paragraph numbering on blocks.list; add format.paragraph.setNumbering for managing numbered sequences.
**Search deleted tracked changes** β Find and replace now searches within deleted tracked-change text, not just insertions.
**Lists API** β New lists.apply, lists.continue, lists.restart, lists.remove, and lists.getState operations.
**Mutation planning** β Plan and execute mutations in a single operation with mutations.planExecute.
**Clear content command** β Remove document content programmatically.
**HTML extraction** β New getHtml operation to read document content as HTML.
**TIFF image support** β Render TIFF images alongside PNG, JPG, and GIF.
**Markdown image import** β Automatically import images when converting markdown to documents.
**Partial tracked change resolution** β Resolve individual tracked changes without resolving all.
**LLM tools** β Alpha release of LLM tools integration.
**Web view layout engine** β New rendering engine for improved layout and performance.
### Improvements
**Document API styles** β Registry-driven styles.apply with schema validation for type safety.
**PresentationEditor types** β Added TypeScript types for PresentationEditor.
**SDK API** β Made expectedRevision parameter optional.
**Footnote keystroke performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms.
**Numbering recompute** β Skip full-document diff on block-node metadata transactions; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh coalescing** β Coalesce headless toolbar refresh per microtask to eliminate redundant snapshot rebuilds.
**Layout engine** β Fold footnote warm-start seed into initial pagination for single-pagination steady state.
**V2 architecture** β New v2 package with unified editor runtime, review state management, drawing taxonomy, and v1 compatibility wiring.
**Test coverage** β 70+ new tests covering v2 wiring, custom UI parity, mutations, and block API operations.
### Fixes
**Track-change scope persistence** β Fixed resolved track-change IDs not surviving between operations in host sessions.
**Word field export** β Fixed passthrough importer breaking MERGEFIELD export; instruction text now lives in attrs.originalXml only.
**Footnote rendering** β Fixed footnotes silently dropped when body fills terminal page.
**Note caret and selection** β Fixed drifting caret, selection rects, and arrow navigation in multi-paragraph notes.
**Note paragraph styles** β Fixed note paragraphs losing FootnoteText style on Enter or paste.
**Cross-paragraph deletion** β Fixed deletion spanning two paragraphs splitting instead of re-joining in suggesting mode.
**IME composition** β Deferred layout rerender and track-changes rewriting during IME composition.
**Tracked-change review navigation** β Fixed review navigation getting stuck.
**First-line list indentation** β Fixed justified-text width for numbered lists with first-line indent.
**Header/footer editing** β Prevent focus loss when typing in header/footer editors.
**Image resize handles** β Align handles with actual image position.
**Virtualization scroll** β Compute scroll position relative to scroll container, not viewport.
**Format persistence** β Route format.caps through text transform so w:caps persists on export.
**List export** β Sync document XML before numbering pruning to preserve list definitions.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers.
**Media handling** β Handle Uint8Array media values from persistence layers.
**Scroll feedback loop** β Prevent scroll acceleration feedback loop in painter DOM.
**Collaboration sessions** β Keep sessions alive in non-collaborative mode; checkpoint when not dirty.
**CLI collaboration** β Prevent collab reopen from overwriting documents with blank data.
**Markdown conversion** β Harden markdown image conversion error handling.
**Portrait orientation** β Fix document API handling of portrait orientation.
**Development experience** β Log warning when local dev server is unreachable.
* chore(fonts): 0.1.2 [skip ci]
### Fixes
- **First-line list indentation** β Fixed incorrect text start position for numbered lists with first-line indents. The layout engine now computes marker widths from actual rendered tab stops instead of stale measurements, ensuring correct justified text width calculations.
- **Fonts configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes the editor. Hand-written config with invalid shapes (e.g., bare strings instead of arrays) now defaults to the full bundled pack and logs a single warning instead of throwing.
* chore(release): 1.42.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation now track correctly in multi-paragraph notes; Font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source`; full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState`; level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote/endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; ONE pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in attrs.originalXml to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump now ensures footnotes render when body fills last page (was silently dropping 0 of 6).
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses; resolves against stale painted ranges via block identity.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path; appendTransaction guard stamps missing styles after async mutations.
**Header/footer activation** β Double-click resolves note references only in body fragments; header/footer with behindDoc textboxes no longer break.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment with actual image position corrected.
**Link popover rendering** β Mount external popovers outside overflow:hidden containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security findings** β Remediated critical and high penetration test findings.
* chore(react): 1.13.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note; delete from either side removes both marker and note; staged Backspace selects then removes; insert via `editor.commands.insertFootnote()`; caret and arrow navigation track correctly in multi-paragraph notes; font sizing respects document defaults.
**Textbox selection, resize, and move** β Click within 6px of a textbox border to select it (ProseMirror NodeSelection); resize via corner handles with live feedback; drag to move with margin-offset preservation; works in body, headers, and footers.
**Document API β image manipulation** β `images.crop`, `images.rotate`, `images.scale`, `images.flip`, `images.replace-source` for full control over alt text, captions, z-order, wrapping, and anchor; TIFF support added.
**Document API β hyperlinks** β `hyperlinks.insert`, `hyperlinks.wrap`, `hyperlinks.list`, `hyperlinks.patch`, `hyperlinks.remove`; pasted URLs automatically convert to real DOCX link elements.
**Document API β list operations** β `lists.apply`, `lists.continue`, `lists.restart`, `lists.remove`, `lists.getState` with level-specific formatting; control bullets, numbering, alignment, marker fonts, and indentation.
**Document API β block operations (v2 sessions)** β `blocks.merge` preserves first paragraph properties; `blocks.split`; `blocks.move`; returns affected ranges and transaction IDs.
**Document API β paragraph numbering** β `format.paragraph.setNumbering` attaches numbering to paragraphs; `blocks.list` surfaces list state; `format.paragraph.setMarkRunProps` controls marker appearance.
**Search in tracked deletions** β Find & Replace now searches text within deleted tracked changes, not just insertions.
**Cross-reference navigation** β Double-click a REF or NOTEREF field pointing at a footnote or endnote to navigate to that note.
**Mutations planning** β `mutations.planExecute` plans and executes mutations in a single operation with per-entry transactions and failure semantics.
**HTML extraction** β New `getHtml` operation to read document content as HTML.
**V2 package and runtime** β Unified v2 editor runtime with improved performance; v1 compatibility wiring for backward compatibility.
### Improvements
**List rendering fidelity** β First-line indent lists now compute marker suffix tab width from actual rendered tab stops instead of stale targets; justified text width is now correct.
**Footnote performance** β Warm-start reserve convergence reduces keystroke cost on 25-footnote documents from 75ms to 12ms; one pagination per keystroke instead of nine.
**Editor performance** β Block-node metadata transactions no longer trigger full-document numbering diffs; saves ~16ms per keystroke on 776-paragraph documents.
**Toolbar refresh** β Coalesce headless toolbar snapshots per microtask; eliminates redundant rebuilds on transaction + selectionUpdate bursts.
**IME composition** β Defer layout rerender and track-changes rewriting during input method editing to prevent conflicts.
**Font configuration robustness** β Malformed `fonts.bundled` configuration no longer crashes; defaults to full bundled pack with warning.
**Track changes β deletion handling** β Cross-paragraph deletes no longer split paragraphs in suggesting mode; position mapping no longer crashes; accept/reject now reports which decision was taken.
**URL paste intent detection** β Auto-linking now requires explicit URL intent (`www.`, `http(s)://`, `mailto:`, `tel:`, `sms:`) to prevent plain text or relative paths from being mistakenly linked.
**Passthrough nodes** β Inline passthrough nodes no longer attach content; instruction text lives in `attrs.originalXml` to fix MERGEFIELD export.
### Fixes
**Footnotes rendering** β Terminal-page reserve bump ensures footnotes render when body fills last page.
**Note caret and selection** β Multi-paragraph notes now track caret and selection correctly; arrow navigation no longer skips lines; goal-column preserved across presses.
**Note paragraph styles** β FootnoteText style now preserved on Enter, paste, and every paragraph-creation path.
**Header/footer activation** β Double-click resolves note references only in body fragments; behindDoc textboxes no longer break activation.
**Tracked-change review navigation** β Navigation no longer jumps and leaves the UI in inconsistent states.
**Comment behavior regressions** β Repaired regression in comment behavior after recent refactors.
**Format persistence** β `w:caps` now persists on export via text transform.
**List export** β Sync document XML before numbering pruning to preserve list definitions on export.
**Image resize handles** β Alignment corrected to match actual image position.
**Link popover rendering** β Mount external popovers outside `overflow:hidden` containers to prevent clipping.
**Orphan references** β Removed orphan function calls that left the codebase in an inconsistent state.
**Security** β Remediated critical and high penetration test findings.
* chore(vscode): 2.14.0 [skip ci]
### What's New
**Footnotes and endnotes β full editor integration** β Double-click a reference marker to navigate to the note. Staged Backspace selects the marker, second press removes it (and the note). Delete from the note area removes both marker and note. Caret and arrow navigation now track correctly in multi-paragraph notes. Insert notes via `editβ¦
No description provided.