From aa5b0bd759acd0e7633d1e033ae7bb3bbf704879 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 5 Mar 2026 09:24:31 -0800 Subject: [PATCH 01/14] 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)) --- packages/superdoc/CHANGELOG.md | 39 ++++++++++++++++++++++++++++++++++ packages/superdoc/package.json | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/packages/superdoc/CHANGELOG.md b/packages/superdoc/CHANGELOG.md index 22f677a6da..7584729386 100644 --- a/packages/superdoc/CHANGELOG.md +++ b/packages/superdoc/CHANGELOG.md @@ -1,3 +1,42 @@ +# [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)) + # [1.17.0](https://github.com/superdoc-dev/superdoc/compare/v1.16.0...v1.17.0) (2026-03-03) diff --git a/packages/superdoc/package.json b/packages/superdoc/package.json index 1ace0cc5c3..2970535882 100644 --- a/packages/superdoc/package.json +++ b/packages/superdoc/package.json @@ -1,7 +1,7 @@ { "name": "superdoc", "type": "module", - "version": "1.17.0", + "version": "1.18.0", "license": "AGPL-3.0", "repository": { "type": "git", From 68a8650f777c95b3f9c0f23d294dc700738dabe0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 5 Mar 2026 13:43:15 -0800 Subject: [PATCH 02/14] 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)) --- packages/superdoc/CHANGELOG.md | 117 +++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/packages/superdoc/CHANGELOG.md b/packages/superdoc/CHANGELOG.md index 7584729386..2a8ce76fb9 100644 --- a/packages/superdoc/CHANGELOG.md +++ b/packages/superdoc/CHANGELOG.md @@ -21,6 +21,123 @@ * **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)) + +# [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)) + +# [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)) + +# [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)) From f6dbb404ad998e502a49df7e0ffded9f2a236321 Mon Sep 17 00:00:00 2001 From: Caio Pizzol <97641911+caio-pizzol@users.noreply.github.com> Date: Tue, 10 Mar 2026 08:20:08 -0300 Subject: [PATCH 03/14] fix(export): prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) (#2349) Cherry-pick from main (fed1d6b23) --- packages/super-editor/src/core/DocxZipper.js | 9 +- .../super-editor/src/core/DocxZipper.test.js | 87 ++++++++++++++++++- .../super-editor/src/core/encoding-helpers.js | 11 ++- .../src/core/encoding-helpers.test.js | 16 +++- 4 files changed, 114 insertions(+), 9 deletions(-) diff --git a/packages/super-editor/src/core/DocxZipper.js b/packages/super-editor/src/core/DocxZipper.js index 93d685ac5e..adb27f2ec2 100644 --- a/packages/super-editor/src/core/DocxZipper.js +++ b/packages/super-editor/src/core/DocxZipper.js @@ -247,7 +247,7 @@ class DocxZipper { const beginningString = ''; let updatedContentTypesXml = contentTypesXml.replace(beginningString, `${beginningString}${typesString}`); - // Remove Override elements for comment parts that no longer exist + // Remove Override elements for parts that no longer exist for (const partName of staleOverridePartNames) { const escapedPartName = partName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const overrideRegex = new RegExp(`\\s*]*PartName="${escapedPartName}"[^>]*/>`, 'g'); @@ -379,8 +379,11 @@ class DocxZipper { const unzippedOriginalDocx = await this.unzip(originalDocxFile); const filePromises = []; unzippedOriginalDocx.forEach((relativePath, zipEntry) => { - const promise = zipEntry.async('string').then((content) => { - unzippedOriginalDocx.file(zipEntry.name, content); + // Read as raw bytes to handle non-UTF-8 encodings (e.g. UTF-16 LE + // customXml parts). XML/rels files are decoded to valid UTF-8 strings; + // other entries are kept as raw bytes. + const promise = zipEntry.async('uint8array').then((u8) => { + unzippedOriginalDocx.file(zipEntry.name, isXmlLike(zipEntry.name) ? ensureXmlString(u8) : u8); }); filePromises.push(promise); }); diff --git a/packages/super-editor/src/core/DocxZipper.test.js b/packages/super-editor/src/core/DocxZipper.test.js index 9541f6ff52..178c1e88b0 100644 --- a/packages/super-editor/src/core/DocxZipper.test.js +++ b/packages/super-editor/src/core/DocxZipper.test.js @@ -105,7 +105,92 @@ describe('DocxZipper - UTF-16 XML handling', () => { expect(item2.content).toContain(' { + const zip = new JSZip(); + + const contentTypes = ` + + + + + `; + zip.file('[Content_Types].xml', contentTypes); + zip.file( + 'word/document.xml', + '', + ); + + const customXmlUtf16 = ` + + DOC!123.1 +`; + zip.file('customXml/item1.xml', utf16leWithBOM(customXmlUtf16)); + + const originalDocxFile = await zip.generateAsync({ type: 'nodebuffer' }); + + const result = await zipper.updateZip({ + docx: [], + updatedDocs: { + 'word/document.xml': '', + }, + originalDocxFile, + media: {}, + fonts: {}, + isHeadless: true, + }); + + const readBack = await new JSZip().loadAsync(result); + const customXml = await readBack.file('customXml/item1.xml').async('string'); + + expect(customXml).toContain(' { + const zip = new JSZip(); + + const contentTypes = ` + + + + + + `; + zip.file('[Content_Types].xml', contentTypes); + zip.file( + 'word/document.xml', + '', + ); + + // Arbitrary binary bytes (fake PNG header + random data) + const binaryData = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0xde, 0xad, 0xbe, 0xef]); + zip.file('word/media/image1.png', binaryData); + + const originalDocxFile = await zip.generateAsync({ type: 'nodebuffer' }); + + const result = await zipper.updateZip({ + docx: [], + updatedDocs: { + 'word/document.xml': '', + }, + originalDocxFile, + media: {}, + fonts: {}, + isHeadless: true, + }); + + const readBack = await new JSZip().loadAsync(result); + const imageBytes = await readBack.file('word/media/image1.png').async('uint8array'); + + expect(imageBytes).toEqual(binaryData); }); }); diff --git a/packages/super-editor/src/core/encoding-helpers.js b/packages/super-editor/src/core/encoding-helpers.js index f04eeecadc..aad7694f2d 100644 --- a/packages/super-editor/src/core/encoding-helpers.js +++ b/packages/super-editor/src/core/encoding-helpers.js @@ -76,5 +76,14 @@ export function ensureXmlString(content) { const enc = sniffEncoding(u8); let xml = new TextDecoder(enc).decode(u8); - return stripBOM(xml); + xml = stripBOM(xml); + + // After converting from non-UTF-8 to a JS string, the XML declaration's + // encoding attribute is stale (e.g. encoding="utf-16"). The output will + // be serialized as UTF-8, so update or remove the declaration to match. + if (enc !== 'utf-8') { + xml = xml.replace(/(<\?xml\b[^?]*?)\bencoding\s*=\s*["'][^"']*["']/i, '$1encoding="UTF-8"'); + } + + return xml; } diff --git a/packages/super-editor/src/core/encoding-helpers.test.js b/packages/super-editor/src/core/encoding-helpers.test.js index 7a0a154bf2..6f8d156418 100644 --- a/packages/super-editor/src/core/encoding-helpers.test.js +++ b/packages/super-editor/src/core/encoding-helpers.test.js @@ -92,22 +92,30 @@ describe('ensureXmlString', () => { expect(out).toContain('héllo'); }); - it('decodes UTF-16LE with BOM bytes', () => { + it('decodes UTF-16LE with BOM bytes and rewrites encoding to UTF-8', () => { const u8 = utf16leWithBOM('v'); const out = ensureXmlString(u8); - expect(out.toLowerCase()).toContain('encoding="utf-16"'); + expect(out).toContain('encoding="UTF-8"'); + expect(out).not.toContain('encoding="utf-16"'); expect(out).toContain(''); expect(out).not.toMatch(/\u0000/); }); - it('decodes UTF-16BE with BOM bytes', () => { + it('decodes UTF-16BE with BOM bytes and rewrites encoding to UTF-8', () => { const u8 = utf16beWithBOM('v'); const out = ensureXmlString(u8); - expect(out.toLowerCase()).toContain('encoding="utf-16"'); + expect(out).toContain('encoding="UTF-8"'); + expect(out).not.toContain('encoding="utf-16"'); expect(out).toContain(''); expect(out).not.toMatch(/\u0000/); }); + it('does not rewrite encoding for UTF-8 input', () => { + const u8 = new TextEncoder().encode(''); + const out = ensureXmlString(u8); + expect(out).toContain('encoding="UTF-8"'); + }); + it('decodes UTF-16 (no BOM) via heuristic', () => { const u8 = noBOMUtf16leBytes('NOBOM'); const out = ensureXmlString(u8); From 6c7d4f0cd4d757d1eb1b089ef2d13aee277380c6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 10 Mar 2026 11:24:15 +0000 Subject: [PATCH 04/14] 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)) --- packages/superdoc/CHANGELOG.md | 7 +++++++ packages/superdoc/package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/superdoc/CHANGELOG.md b/packages/superdoc/CHANGELOG.md index 2a8ce76fb9..05ec055741 100644 --- a/packages/superdoc/CHANGELOG.md +++ b/packages/superdoc/CHANGELOG.md @@ -1,3 +1,10 @@ +## [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)) + # [1.18.0](https://github.com/superdoc-dev/superdoc/compare/v1.17.0...v1.18.0) (2026-03-05) diff --git a/packages/superdoc/package.json b/packages/superdoc/package.json index 2970535882..a91dd447ab 100644 --- a/packages/superdoc/package.json +++ b/packages/superdoc/package.json @@ -1,7 +1,7 @@ { "name": "superdoc", "type": "module", - "version": "1.18.0", + "version": "1.18.1", "license": "AGPL-3.0", "repository": { "type": "git", From f6d956ec38f12ff0ee3440f153edf1fa69406f2d Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 15:44:40 -0300 Subject: [PATCH 05/14] 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 (``). This caused comments on highlighted text to be invisible. Removed the guard so comment highlights always take precedence, matching Word's behavior. --- .../painters/dom/src/index.test.ts | 30 +++++++++++++++++++ .../painters/dom/src/renderer.ts | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/layout-engine/painters/dom/src/index.test.ts b/packages/layout-engine/painters/dom/src/index.test.ts index 660f8e0d9c..7a7ddb76f9 100644 --- a/packages/layout-engine/painters/dom/src/index.test.ts +++ b/packages/layout-engine/painters/dom/src/index.test.ts @@ -2883,6 +2883,36 @@ describe('DomPainter', () => { expect(span.style.backgroundColor).not.toBe(''); }); + it('applies comment highlight even when text has Word highlight formatting (SD-2188)', () => { + const highlightedCommentBlock: FlowBlock = { + kind: 'paragraph', + id: 'highlight-comment-block', + runs: [ + { + text: 'Highlighted and commented', + fontFamily: 'Arial', + fontSize: 16, + highlight: '#ffff00', + comments: [{ commentId: 'comment-hl', internal: false, trackedChange: false }], + }, + ], + }; + + const { paragraphMeasure, paragraphLayout } = buildSingleParagraphData( + highlightedCommentBlock.id, + highlightedCommentBlock.runs[0].text.length, + ); + + const painter = createDomPainter({ blocks: [highlightedCommentBlock], measures: [paragraphMeasure] }); + painter.paint(paragraphLayout, mount); + + const span = mount.querySelector('.superdoc-comment-highlight') as HTMLElement; + expect(span).toBeTruthy(); + expect(span.dataset.commentIds).toBe('comment-hl'); + // Comment highlight should be applied even when Word highlight is present + expect(span.style.backgroundColor).not.toBe(''); + }); + it('applies comment highlight styles for non-tracked-change comments', () => { const commentBlock: FlowBlock = { kind: 'paragraph', diff --git a/packages/layout-engine/painters/dom/src/renderer.ts b/packages/layout-engine/painters/dom/src/renderer.ts index 287bb0f288..e8c1224d66 100644 --- a/packages/layout-engine/painters/dom/src/renderer.ts +++ b/packages/layout-engine/painters/dom/src/renderer.ts @@ -4475,7 +4475,7 @@ export class DomPainter { const hasAnyComment = !!commentAnnotations?.length; const commentHighlight = getCommentHighlight(textRun, this.activeCommentId); - if (commentHighlight.color && !textRun.highlight && hasAnyComment) { + if (commentHighlight.color && hasAnyComment) { (elem as HTMLElement).style.backgroundColor = commentHighlight.color; // Add thin visual indicator for nested comments when outer comment is selected // Use box-shadow instead of border to avoid affecting text layout From 54d83559647a3c20dcaec0ec4088c9ac2e762925 Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 17:45:58 -0300 Subject: [PATCH 06/14] 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). --- packages/layout-engine/painters/dom/src/index.test.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/layout-engine/painters/dom/src/index.test.ts b/packages/layout-engine/painters/dom/src/index.test.ts index 7a7ddb76f9..43975f7274 100644 --- a/packages/layout-engine/painters/dom/src/index.test.ts +++ b/packages/layout-engine/painters/dom/src/index.test.ts @@ -2909,8 +2909,12 @@ describe('DomPainter', () => { const span = mount.querySelector('.superdoc-comment-highlight') as HTMLElement; expect(span).toBeTruthy(); expect(span.dataset.commentIds).toBe('comment-hl'); - // Comment highlight should be applied even when Word highlight is present - expect(span.style.backgroundColor).not.toBe(''); + // Comment highlight should override Word highlight (#ffff00 → yellow) + const bg = span.style.backgroundColor; + expect(bg).not.toBe(''); + expect(bg).not.toBe('#ffff00'); + expect(bg).not.toBe('rgb(255, 255, 0)'); + expect(bg).not.toBe('yellow'); }); it('applies comment highlight styles for non-tracked-change comments', () => { From 081d5d4116ba950773e5d37c971735d75f012f4d Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 17:49:49 -0300 Subject: [PATCH 07/14] 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. --- .../painters/dom/src/index.test.ts | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/packages/layout-engine/painters/dom/src/index.test.ts b/packages/layout-engine/painters/dom/src/index.test.ts index 43975f7274..c78fba4203 100644 --- a/packages/layout-engine/painters/dom/src/index.test.ts +++ b/packages/layout-engine/painters/dom/src/index.test.ts @@ -2917,6 +2917,65 @@ describe('DomPainter', () => { expect(bg).not.toBe('yellow'); }); + it('applies active comment highlight over Word highlight when comment is selected (SD-2188)', () => { + const block: FlowBlock = { + kind: 'paragraph', + id: 'active-hl-block', + runs: [ + { + text: 'Active highlighted', + fontFamily: 'Arial', + fontSize: 16, + highlight: '#ffff00', + comments: [{ commentId: 'comment-active-hl', internal: false, trackedChange: false }], + }, + ], + }; + + const { paragraphMeasure, paragraphLayout } = buildSingleParagraphData(block.id, block.runs[0].text.length); + + const painter = createDomPainter({ blocks: [block], measures: [paragraphMeasure] }); + painter.setActiveComment('comment-active-hl'); + painter.paint(paragraphLayout, mount); + + const span = mount.querySelector('.superdoc-comment-highlight') as HTMLElement; + expect(span).toBeTruthy(); + const bg = span.style.backgroundColor; + expect(bg).not.toBe(''); + expect(bg).not.toBe('#ffff00'); + expect(bg).not.toBe('rgb(255, 255, 0)'); + }); + + it('applies faded comment highlight over Word highlight when another comment is active (SD-2188)', () => { + const block: FlowBlock = { + kind: 'paragraph', + id: 'faded-hl-block', + runs: [ + { + text: 'Faded highlighted', + fontFamily: 'Arial', + fontSize: 16, + highlight: '#ffff00', + comments: [{ commentId: 'comment-faded-hl', internal: false, trackedChange: false }], + }, + ], + }; + + const { paragraphMeasure, paragraphLayout } = buildSingleParagraphData(block.id, block.runs[0].text.length); + + const painter = createDomPainter({ blocks: [block], measures: [paragraphMeasure] }); + // Activate a different comment so this one gets faded + painter.setActiveComment('some-other-comment'); + painter.paint(paragraphLayout, mount); + + const span = mount.querySelector('.superdoc-comment-highlight') as HTMLElement; + expect(span).toBeTruthy(); + const bg = span.style.backgroundColor; + expect(bg).not.toBe(''); + expect(bg).not.toBe('#ffff00'); + expect(bg).not.toBe('rgb(255, 255, 0)'); + }); + it('applies comment highlight styles for non-tracked-change comments', () => { const commentBlock: FlowBlock = { kind: 'paragraph', From a300536111890565c6b53b0842551a5c2f4c191a Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 16:47:37 -0300 Subject: [PATCH 08/14] 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 --- .../presentation-editor/PresentationEditor.ts | 1 + .../utils/AnchorNavigation.ts | 35 +++++++++++++++---- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts b/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts index 0d920ec64a..f70c21434e 100644 --- a/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts +++ b/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts @@ -4976,6 +4976,7 @@ export class PresentationEditor extends EventEmitter { bookmarks: this.#layoutState.bookmarks, pageGeometryHelper: this.#pageGeometryHelper ?? undefined, painterHost: this.#painterHost, + scrollContainer: this.#scrollContainer ?? this.#visibleHost, scrollPageIntoView: (pageIndex) => this.#scrollPageIntoView(pageIndex), waitForPageMount: (pageIndex, timeoutMs) => this.#waitForPageMount(pageIndex, { timeout: timeoutMs }), getActiveEditor: () => this.getActiveEditor(), diff --git a/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts b/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts index 9901ff6fdc..8651eb21c5 100644 --- a/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts +++ b/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts @@ -85,6 +85,7 @@ export type GoToAnchorDeps = { bookmarks: Map; pageGeometryHelper?: PageGeometryHelper; painterHost: HTMLElement; + scrollContainer: Element | Window; scrollPageIntoView: (pageIndex: number) => void; waitForPageMount: (pageIndex: number, timeoutMs: number) => Promise; getActiveEditor: () => Editor; @@ -99,6 +100,7 @@ export async function goToAnchor({ bookmarks, pageGeometryHelper, painterHost, + scrollContainer, scrollPageIntoView, waitForPageMount, getActiveEditor, @@ -117,14 +119,16 @@ export async function goToAnchor({ const rects = selectionToRects(layout, blocks, measures, pmPos, pmPos + 1, pageGeometryHelper) ?? []; const rect = rects[0]; - // Find the page containing this position by scanning fragments - // Bookmarks often fall in gaps between fragments (e.g., at page/section breaks), - // so we also track the first fragment starting after the position as a fallback + // Find the page and fragment Y offset for the bookmark position. + // selectionToRects often returns empty for bookmarks (zero-width inline nodes), + // so we scan layout fragments to find the precise Y coordinate within the page. let pageIndex: number | null = rect?.pageIndex ?? null; + let fragmentY: number | null = rect?.top ?? null; if (pageIndex == null) { let nextFragmentPage: number | null = null; let nextFragmentStart: number | null = null; + let nextFragmentY: number | null = null; for (const page of layout.pages) { for (const fragment of page.fragments) { @@ -136,6 +140,7 @@ export async function goToAnchor({ // Exact match: position is within this fragment if (pmPos >= fragStart && pmPos < fragEnd) { pageIndex = page.number - 1; + fragmentY = fragment.y; break; } @@ -143,6 +148,7 @@ export async function goToAnchor({ if (fragStart > pmPos && (nextFragmentStart === null || fragStart < nextFragmentStart)) { nextFragmentPage = page.number - 1; nextFragmentStart = fragStart; + nextFragmentY = fragment.y; } } if (pageIndex != null) break; @@ -151,6 +157,7 @@ export async function goToAnchor({ // Use the page of the next fragment if bookmark is in a gap if (pageIndex == null && nextFragmentPage != null) { pageIndex = nextFragmentPage; + fragmentY = nextFragmentY; } } @@ -160,9 +167,25 @@ export async function goToAnchor({ scrollPageIntoView(pageIndex); await waitForPageMount(pageIndex, timeoutMs); - // Scroll the page element into view + // Scroll to the precise position within the page using the fragment Y offset. + // We use the passed-in scrollContainer rather than discovering it via DOM traversal, + // because intermediate elements (like painterHost) may have overflow CSS but are + // not the actual scroll viewport. const pageEl = getPageElementByIndex(painterHost, pageIndex); - if (pageEl) { + + if (pageEl && fragmentY != null) { + if (scrollContainer instanceof Element) { + const pageRect = pageEl.getBoundingClientRect(); + const containerRect = scrollContainer.getBoundingClientRect(); + const targetY = pageRect.top - containerRect.top + scrollContainer.scrollTop + fragmentY; + scrollContainer.scrollTo({ top: targetY, behavior: 'instant' }); + } else { + // Window scroll + const pageRect = pageEl.getBoundingClientRect(); + const targetY = pageRect.top + scrollContainer.scrollY + fragmentY; + scrollContainer.scrollTo({ top: targetY, behavior: 'instant' }); + } + } else if (pageEl) { pageEl.scrollIntoView({ behavior: 'instant', block: 'start' }); } @@ -171,8 +194,6 @@ export async function goToAnchor({ if (activeEditor?.commands?.setTextSelection) { activeEditor.commands.setTextSelection({ from: pmPos, to: pmPos }); } else { - // Navigation succeeded visually (page scrolled), but caret positioning is unavailable - // This is not an error - log a warning for debugging console.warn( '[PresentationEditor] goToAnchor: Navigation succeeded but could not move caret (editor commands unavailable)', ); From 6b584b6faa7d77c41b3b98eb4b9baf5e288e3e97 Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 16:52:04 -0300 Subject: [PATCH 09/14] docs: add PresentationEditor CLAUDE.md with DOM/scroll hierarchy --- .../src/core/presentation-editor/CLAUDE.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 packages/super-editor/src/core/presentation-editor/CLAUDE.md diff --git a/packages/super-editor/src/core/presentation-editor/CLAUDE.md b/packages/super-editor/src/core/presentation-editor/CLAUDE.md new file mode 100644 index 0000000000..b293952b37 --- /dev/null +++ b/packages/super-editor/src/core/presentation-editor/CLAUDE.md @@ -0,0 +1,28 @@ +# PresentationEditor + +Wraps a hidden ProseMirror `Editor` and renders via the layout-engine pipeline (`DomPainter`). + +## DOM Hierarchy + +``` +host app scroll container (e.g. .dev-app__main, overflow: auto) ← actual scroll viewport + └── #visibleHost (.presentation-editor, overflow: visible) ← options.element, NOT scrollable + └── #viewportHost + └── #painterHost (.presentation-editor__pages) ← has overflow CSS but NOT the scroller + └── page elements (data-page-index) +``` + +- `#visibleHost` is the element passed as `options.element` — it is **not** the scroll container. +- `#scrollContainer` is computed at setup via `#findScrollableAncestor(#visibleHost)` — it walks up the DOM to find the first ancestor with `overflow: auto/scroll`. This is the element that actually scrolls. +- When implementing scroll-related features, always use `#scrollContainer` (not `#visibleHost`) for scroll position reads/writes. +- `#scrollPageIntoView` sets `#visibleHost.scrollTop` which only works if `#visibleHost` happens to be scrollable — this is a known inconsistency; prefer using `#scrollContainer`. + +## Key Files + +| File | Purpose | +|------|---------| +| `PresentationEditor.ts` | Main class — lifecycle, layout orchestration, scroll, zoom | +| `pointer-events/EditorInputManager.ts` | Click/drag handling, link clicks, selection | +| `utils/AnchorNavigation.ts` | TOC / bookmark navigation logic | +| `dom/PageDom.ts` | DOM queries for page elements | +| `tests/` | Unit tests for PresentationEditor features | From 16c768f1b81672c5126833cc1ffbe948a2c11ebd Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 17:30:20 -0300 Subject: [PATCH 10/14] 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 --- .../presentation-editor/PresentationEditor.ts | 1 + .../utils/AnchorNavigation.test.ts | 203 ++++++++++++++++++ .../utils/AnchorNavigation.ts | 14 +- 3 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.test.ts diff --git a/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts b/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts index f70c21434e..188b030a59 100644 --- a/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts +++ b/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts @@ -4977,6 +4977,7 @@ export class PresentationEditor extends EventEmitter { pageGeometryHelper: this.#pageGeometryHelper ?? undefined, painterHost: this.#painterHost, scrollContainer: this.#scrollContainer ?? this.#visibleHost, + zoom: this.zoom, scrollPageIntoView: (pageIndex) => this.#scrollPageIntoView(pageIndex), waitForPageMount: (pageIndex, timeoutMs) => this.#waitForPageMount(pageIndex, { timeout: timeoutMs }), getActiveEditor: () => this.getActiveEditor(), diff --git a/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.test.ts b/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.test.ts new file mode 100644 index 0000000000..e617fafa40 --- /dev/null +++ b/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.test.ts @@ -0,0 +1,203 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { goToAnchor, type GoToAnchorDeps } from './AnchorNavigation.js'; + +const mockSelectionToRects = vi.fn(() => []); + +vi.mock('@superdoc/layout-bridge', () => ({ + selectionToRects: (...args: unknown[]) => mockSelectionToRects(...args), +})); + +vi.mock('../dom/PageDom.js', () => ({ + getPageElementByIndex: (_host: HTMLElement, pageIndex: number) => { + // Return a mock page element whose getBoundingClientRect is controlled per-test + const el = document.createElement('div'); + el.setAttribute('data-page-index', String(pageIndex)); + el.scrollIntoView = vi.fn(); + // Default rect — tests override via mockPageRect + el.getBoundingClientRect = () => currentPageRect; + return el; + }, +})); + +// Shared state that tests can set before calling goToAnchor +let currentPageRect: DOMRect; + +function makeLayout( + pages: Array<{ number: number; fragments: Array<{ kind: string; pmStart: number; pmEnd: number; y: number }> }>, +) { + return { + pageSize: { w: 612, h: 792 }, + pages: pages.map((p) => ({ + ...p, + numberText: String(p.number), + size: { w: 612, h: 792 }, + margins: { top: 72, bottom: 72, left: 72, right: 72, header: 36, footer: 36 }, + sectionRefs: { headerRefs: {}, footerRefs: {} }, + })), + }; +} + +function makeDeps(overrides: Partial = {}): GoToAnchorDeps { + return { + anchor: 'heading1', + layout: makeLayout([ + { + number: 1, + fragments: [{ kind: 'para', pmStart: 0, pmEnd: 100, y: 72 }], + }, + { + number: 2, + fragments: [{ kind: 'para', pmStart: 100, pmEnd: 200, y: 150 }], + }, + ]), + blocks: [], + measures: [], + bookmarks: new Map([['heading1', 50]]), + painterHost: document.createElement('div'), + scrollContainer: createMockScrollContainer(), + zoom: 1, + scrollPageIntoView: vi.fn(), + waitForPageMount: vi.fn(async () => true), + getActiveEditor: () => ({ commands: { setTextSelection: vi.fn() } }) as never, + timeoutMs: 5000, + ...overrides, + }; +} + +function createMockScrollContainer(overrides: { scrollTop?: number; rectTop?: number } = {}) { + const el = document.createElement('div'); + Object.defineProperty(el, 'scrollTop', { + value: overrides.scrollTop ?? 0, + writable: true, + }); + el.getBoundingClientRect = () => new DOMRect(0, overrides.rectTop ?? 0, 800, 600); + el.scrollTo = vi.fn(); + return el; +} + +describe('goToAnchor', () => { + beforeEach(() => { + vi.clearAllMocks(); + mockSelectionToRects.mockReturnValue([]); + // Default page rect: page top at y=100 in screen space + currentPageRect = new DOMRect(0, 100, 612, 792); + }); + + it('should use scrollContainer.scrollTo with fragment Y offset', async () => { + const scrollContainer = createMockScrollContainer({ scrollTop: 200, rectTop: 0 }); + const deps = makeDeps({ scrollContainer }); + + const result = await goToAnchor(deps); + + expect(result).toBe(true); + expect(scrollContainer.scrollTo).toHaveBeenCalledWith({ + top: expect.any(Number), + behavior: 'instant', + }); + + // pageRect.top(100) - containerRect.top(0) + scrollTop(200) + fragmentY(72) * zoom(1) = 372 + const call = (scrollContainer.scrollTo as ReturnType).mock.calls[0][0]; + expect(call.top).toBe(372); + }); + + it('should scale fragmentY by zoom factor', async () => { + const scrollContainer = createMockScrollContainer({ scrollTop: 0, rectTop: 0 }); + const deps = makeDeps({ scrollContainer, zoom: 1.5 }); + + await goToAnchor(deps); + + // pageRect.top(100) - containerRect.top(0) + scrollTop(0) + fragmentY(72) * zoom(1.5) = 208 + const call = (scrollContainer.scrollTo as ReturnType).mock.calls[0][0]; + expect(call.top).toBe(100 + 72 * 1.5); + }); + + it('should scale fragmentY at zoom < 1', async () => { + const scrollContainer = createMockScrollContainer({ scrollTop: 0, rectTop: 0 }); + const deps = makeDeps({ scrollContainer, zoom: 0.5 }); + + await goToAnchor(deps); + + const call = (scrollContainer.scrollTo as ReturnType).mock.calls[0][0]; + expect(call.top).toBe(100 + 72 * 0.5); + }); + + it('should fall back to scrollIntoView when fragmentY is null', async () => { + // Layout with no fragments matching the bookmark position + const layout = makeLayout([ + { + number: 1, + fragments: [{ kind: 'para', pmStart: 200, pmEnd: 300, y: 72 }], + }, + ]); + // Bookmark at position 50 — no fragment contains it, and nextFragment starts at 200 + const deps = makeDeps({ + layout, + bookmarks: new Map([['heading1', 50]]), + }); + + const result = await goToAnchor(deps); + + // Should still succeed — uses nextFragment fallback which sets fragmentY + expect(result).toBe(true); + }); + + it('should use nextFragmentY when bookmark is in a gap between fragments', async () => { + const scrollContainer = createMockScrollContainer({ scrollTop: 0, rectTop: 0 }); + const layout = makeLayout([ + { + number: 1, + fragments: [ + { kind: 'para', pmStart: 0, pmEnd: 40, y: 72 }, + { kind: 'para', pmStart: 60, pmEnd: 100, y: 200 }, + ], + }, + ]); + // Bookmark at position 50 — in the gap between fragments + const deps = makeDeps({ + layout, + scrollContainer, + bookmarks: new Map([['heading1', 50]]), + }); + + await goToAnchor(deps); + + // Should use nextFragmentY = 200 from the second fragment + const call = (scrollContainer.scrollTo as ReturnType).mock.calls[0][0]; + expect(call.top).toBe(100 + 200); // pageRect.top + nextFragmentY * zoom(1) + }); + + it('should handle Window as scrollContainer', async () => { + const mockWindow = { + scrollY: 500, + scrollTo: vi.fn(), + } as unknown as Window; + + const deps = makeDeps({ scrollContainer: mockWindow }); + + await goToAnchor(deps); + + // pageRect.top(100) + scrollY(500) + fragmentY(72) * zoom(1) = 672 + expect(mockWindow.scrollTo).toHaveBeenCalledWith({ + top: 672, + behavior: 'instant', + }); + }); + + it('should not use rect.y for fragmentY (coordinate space mismatch)', async () => { + // Even when selectionToRects returns a rect, we should NOT use rect.y + // because it's document-absolute, not page-relative like fragment.y + mockSelectionToRects.mockReturnValue([{ x: 72, y: 9999, width: 100, height: 20, pageIndex: 0 }]); + + const scrollContainer = createMockScrollContainer({ scrollTop: 0, rectTop: 0 }); + const deps = makeDeps({ scrollContainer }); + + await goToAnchor(deps); + + // fragmentY should be null (not 9999), so it falls into the fragment scan + // which finds fragment.y = 72 for page 0 + // BUT: since pageIndex was already set from rect, the fragment scan is skipped. + // fragmentY remains null, so it should fall back to scrollIntoView + // This is expected — when rect gives us a pageIndex but no valid fragmentY, + // we do the page-level scroll as a safe fallback. + }); +}); diff --git a/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts b/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts index 8651eb21c5..fd476a9948 100644 --- a/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts +++ b/packages/super-editor/src/core/presentation-editor/utils/AnchorNavigation.ts @@ -86,6 +86,7 @@ export type GoToAnchorDeps = { pageGeometryHelper?: PageGeometryHelper; painterHost: HTMLElement; scrollContainer: Element | Window; + zoom: number; scrollPageIntoView: (pageIndex: number) => void; waitForPageMount: (pageIndex: number, timeoutMs: number) => Promise; getActiveEditor: () => Editor; @@ -101,6 +102,7 @@ export async function goToAnchor({ pageGeometryHelper, painterHost, scrollContainer, + zoom, scrollPageIntoView, waitForPageMount, getActiveEditor, @@ -122,8 +124,10 @@ export async function goToAnchor({ // Find the page and fragment Y offset for the bookmark position. // selectionToRects often returns empty for bookmarks (zero-width inline nodes), // so we scan layout fragments to find the precise Y coordinate within the page. + // Note: rect?.y is document-absolute (not page-relative), so we only use pageIndex + // from the rect and always derive fragmentY from layout fragments. let pageIndex: number | null = rect?.pageIndex ?? null; - let fragmentY: number | null = rect?.top ?? null; + let fragmentY: number | null = null; if (pageIndex == null) { let nextFragmentPage: number | null = null; @@ -174,15 +178,19 @@ export async function goToAnchor({ const pageEl = getPageElementByIndex(painterHost, pageIndex); if (pageEl && fragmentY != null) { + // fragmentY is in layout-space (unscaled) pixels — scale to screen-space to match + // getBoundingClientRect() values which already account for CSS transform: scale(zoom). + const scaledY = fragmentY * zoom; + if (scrollContainer instanceof Element) { const pageRect = pageEl.getBoundingClientRect(); const containerRect = scrollContainer.getBoundingClientRect(); - const targetY = pageRect.top - containerRect.top + scrollContainer.scrollTop + fragmentY; + const targetY = pageRect.top - containerRect.top + scrollContainer.scrollTop + scaledY; scrollContainer.scrollTo({ top: targetY, behavior: 'instant' }); } else { // Window scroll const pageRect = pageEl.getBoundingClientRect(); - const targetY = pageRect.top + scrollContainer.scrollY + fragmentY; + const targetY = pageRect.top + scrollContainer.scrollY + scaledY; scrollContainer.scrollTo({ top: targetY, behavior: 'instant' }); } } else if (pageEl) { From 06f2d327e3bf54ec3717bd8f854b1dbeeac50377 Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 17:33:38 -0300 Subject: [PATCH 11/14] 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 --- .../navigation/toc-anchor-scroll.spec.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tests/behavior/tests/navigation/toc-anchor-scroll.spec.ts diff --git a/tests/behavior/tests/navigation/toc-anchor-scroll.spec.ts b/tests/behavior/tests/navigation/toc-anchor-scroll.spec.ts new file mode 100644 index 0000000000..3c665326da --- /dev/null +++ b/tests/behavior/tests/navigation/toc-anchor-scroll.spec.ts @@ -0,0 +1,53 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { test, expect } from '../../fixtures/superdoc.js'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const DOC_PATH = path.resolve(__dirname, '../../test-data/layout/toc-with-heading2.docx'); + +test.skip(!fs.existsSync(DOC_PATH), 'Test document not available — run pnpm corpus:pull'); + +test('@behavior SD-2186: clicking TOC link scrolls to heading position', async ({ superdoc }) => { + await superdoc.loadDocument(DOC_PATH); + await superdoc.waitForStable(2000); + + // Record selection before click + const selBefore = await superdoc.getSelection(); + + // Find and click the first TOC entry link + const tocLink = superdoc.page.locator('.superdoc-toc-entry a.superdoc-link').first(); + await expect(tocLink).toBeVisible({ timeout: 10_000 }); + await tocLink.click(); + await superdoc.waitForStable(2000); + + // Verify the caret moved — goToAnchor calls setTextSelection at the bookmark position + const selAfter = await superdoc.getSelection(); + expect(selAfter.from).not.toBe(selBefore.from); +}); + +test('@behavior SD-2186: clicking different TOC links moves caret to different positions', async ({ superdoc }) => { + await superdoc.loadDocument(DOC_PATH); + await superdoc.waitForStable(2000); + + // Need at least 2 TOC entries to verify they navigate to different positions + const tocLinks = superdoc.page.locator('.superdoc-toc-entry a.superdoc-link'); + const count = await tocLinks.count(); + test.skip(count < 2, 'Document has fewer than 2 TOC entries'); + + // Click first TOC link and record caret position + const firstLink = tocLinks.first(); + await expect(firstLink).toBeVisible({ timeout: 10_000 }); + await firstLink.click(); + await superdoc.waitForStable(2000); + const selFirst = await superdoc.getSelection(); + + // Click last TOC link and verify caret moved to a different position + const lastLink = tocLinks.nth(count - 1); + await expect(lastLink).toBeVisible({ timeout: 10_000 }); + await lastLink.click(); + await superdoc.waitForStable(2000); + const selLast = await superdoc.getSelection(); + + expect(selLast.from).not.toBe(selFirst.from); +}); From 29703664c87ab00557e380af0e2207946b3873a1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 11 Mar 2026 20:57:16 +0000 Subject: [PATCH 12/14] 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)) --- packages/superdoc/CHANGELOG.md | 9 +++++++++ packages/superdoc/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/superdoc/CHANGELOG.md b/packages/superdoc/CHANGELOG.md index 05ec055741..83d1526944 100644 --- a/packages/superdoc/CHANGELOG.md +++ b/packages/superdoc/CHANGELOG.md @@ -1,3 +1,12 @@ +## [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)) + ## [1.18.1](https://github.com/superdoc-dev/superdoc/compare/v1.18.0...v1.18.1) (2026-03-10) diff --git a/packages/superdoc/package.json b/packages/superdoc/package.json index a91dd447ab..818970443b 100644 --- a/packages/superdoc/package.json +++ b/packages/superdoc/package.json @@ -1,7 +1,7 @@ { "name": "superdoc", "type": "module", - "version": "1.18.1", + "version": "1.18.2", "license": "AGPL-3.0", "repository": { "type": "git", From cee3e9031875f95682cd37a71caf2042caa5df79 Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Wed, 11 Mar 2026 18:30:06 -0300 Subject: [PATCH 13/14] ci: remove changelog generation from stable releases --- packages/superdoc/.releaserc.cjs | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/packages/superdoc/.releaserc.cjs b/packages/superdoc/.releaserc.cjs index ea1af9dd4b..aad6c86090 100644 --- a/packages/superdoc/.releaserc.cjs +++ b/packages/superdoc/.releaserc.cjs @@ -76,22 +76,12 @@ const isPrerelease = config.branches.some( ) if (!isPrerelease) { - // Add changelog BEFORE git - config.plugins.push([ - '@semantic-release/changelog', - { - changelogFile: 'CHANGELOG.md' - } - ]) - - // Git plugin comes AFTER npm and changelog + // Git plugin commits the version bump back to the branch. + // No changelog — release notes live on the GitHub release only. config.plugins.push([ '@semantic-release/git', { - assets: [ - 'CHANGELOG.md', - 'package.json' - ], + assets: ['package.json'], message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}', }, From f5762b60368c41a68c885ed4950c9e30e9ec8e43 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 11 Mar 2026 21:34:18 +0000 Subject: [PATCH 14/14] chore(cli): 0.2.0 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # [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
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/superdoc/commit/3b4ff6bb43cc70549397ec8d4d9d69eb7a84b90c)) * **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)) * whiteboard ([#1954](https://github.com/superdoc-dev/superdoc/issues/1954)) ([c9d1484](https://github.com/superdoc-dev/superdoc/commit/c9d14847269d439f053ad35cdc9caacbf6a2a06f)) ### Performance Improvements * **build:** migrate to rolldown-vite for ~2x faster builds ([#2006](https://github.com/superdoc-dev/superdoc/issues/2006)) ([74004c3](https://github.com/superdoc-dev/superdoc/commit/74004c30fd988e53804ea931ca4bd1d90c88fd26)) * **build:** remove redundant steps and add fast dev build (SD-1886) ([#1999](https://github.com/superdoc-dev/superdoc/issues/1999)) ([db46bf8](https://github.com/superdoc-dev/superdoc/commit/db46bf81028361d8c56ff6787f40501d8f1c7a3b)) * **comments:** batch tracked change comment creation on load ([#2166](https://github.com/superdoc-dev/superdoc/issues/2166)) ([0c2eca5](https://github.com/superdoc-dev/superdoc/commit/0c2eca575ac2916d1acf2230b62f216fc1cf0166)) * **comments:** batch tracked change creation and virtualize floating bubbles (SD-1997) ([#2168](https://github.com/superdoc-dev/superdoc/issues/2168)) ([70fd7d9](https://github.com/superdoc-dev/superdoc/commit/70fd7d900925ef2ef20f48a9dde5cb508bf6cf83)) --- apps/cli/package.json | 2 +- apps/cli/platforms/cli-darwin-arm64/package.json | 2 +- apps/cli/platforms/cli-darwin-x64/package.json | 2 +- apps/cli/platforms/cli-linux-arm64/package.json | 2 +- apps/cli/platforms/cli-linux-x64/package.json | 2 +- apps/cli/platforms/cli-windows-x64/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index 8c720b5535..783f564f71 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "@superdoc-dev/cli", - "version": "1.0.2", + "version": "0.2.0", "type": "module", "bin": { "superdoc": "./dist/index.js" diff --git a/apps/cli/platforms/cli-darwin-arm64/package.json b/apps/cli/platforms/cli-darwin-arm64/package.json index 0b3bbe2def..f5580f695b 100644 --- a/apps/cli/platforms/cli-darwin-arm64/package.json +++ b/apps/cli/platforms/cli-darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@superdoc-dev/cli-darwin-arm64", - "version": "1.0.2", + "version": "0.2.0", "os": [ "darwin" ], diff --git a/apps/cli/platforms/cli-darwin-x64/package.json b/apps/cli/platforms/cli-darwin-x64/package.json index fb3d2fd328..1f30f4e348 100644 --- a/apps/cli/platforms/cli-darwin-x64/package.json +++ b/apps/cli/platforms/cli-darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@superdoc-dev/cli-darwin-x64", - "version": "1.0.2", + "version": "0.2.0", "os": [ "darwin" ], diff --git a/apps/cli/platforms/cli-linux-arm64/package.json b/apps/cli/platforms/cli-linux-arm64/package.json index 898cc3d3bf..26ed16e7cc 100644 --- a/apps/cli/platforms/cli-linux-arm64/package.json +++ b/apps/cli/platforms/cli-linux-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@superdoc-dev/cli-linux-arm64", - "version": "1.0.2", + "version": "0.2.0", "os": [ "linux" ], diff --git a/apps/cli/platforms/cli-linux-x64/package.json b/apps/cli/platforms/cli-linux-x64/package.json index 396b7ae86d..d81ebfd679 100644 --- a/apps/cli/platforms/cli-linux-x64/package.json +++ b/apps/cli/platforms/cli-linux-x64/package.json @@ -1,6 +1,6 @@ { "name": "@superdoc-dev/cli-linux-x64", - "version": "1.0.2", + "version": "0.2.0", "os": [ "linux" ], diff --git a/apps/cli/platforms/cli-windows-x64/package.json b/apps/cli/platforms/cli-windows-x64/package.json index 418c863a8a..cfcc6320eb 100644 --- a/apps/cli/platforms/cli-windows-x64/package.json +++ b/apps/cli/platforms/cli-windows-x64/package.json @@ -1,6 +1,6 @@ { "name": "@superdoc-dev/cli-windows-x64", - "version": "1.0.2", + "version": "0.2.0", "os": [ "win32" ],