Skip to content

fix(editor): arrow key navigation across page boundaries and auto-scroll (SD-1950)#2191

Merged
harbournick merged 14 commits intomainfrom
tadeu/sd-1950-arrow-key-navigation-scroll
Mar 16, 2026
Merged

fix(editor): arrow key navigation across page boundaries and auto-scroll (SD-1950)#2191
harbournick merged 14 commits intomainfrom
tadeu/sd-1950-arrow-key-navigation-scroll

Conversation

@tupizz
Copy link
Copy Markdown
Contributor

@tupizz tupizz commented Feb 26, 2026

Demo

CleanShot.2026-03-05.at.11.28.07.mp4

Summary

Fixes arrow key (↑/↓) AND SHIFT + (↑/↓) navigation in presentation mode that would jump entire sections when moving down across page boundaries, and get stuck in a loop when moving back up. Also adds auto-scroll to keep the caret visible during keyboard navigation.

The Problem

Two distinct bugs in the vertical-navigation extension caused broken cursor movement in multi-page documents:

Bug 1: ArrowDown jumps sections instead of line-by-line

When pressing ArrowDown near a page boundary, the cursor would suddenly jump thousands of characters forward — skipping entire pages. For example, in a 7-page Lorem Ipsum document, pressing ArrowDown at position 3126 would jump to position 6178 (a +3052 character jump), then 9350, then 12378 — each ArrowDown skipping thousands of characters.

Bug 2: ArrowUp gets stuck / loops on the same page

When navigating back up (ArrowUp), the cursor would get stuck at certain positions and refuse to move further. Pressing ArrowUp repeatedly at these positions had zero effect.

Root Cause Analysis

Both bugs originate in the same code path: the vertical-navigation extension's handleKeyDowngetAdjacentLineClientTargetgetHitFromLayoutCoords pipeline.

The extension correctly finds the adjacent line DOM element using findAdjacentLineElement() (which traverses fragments and pages). However, it then uses getBoundingClientRect() on that element to get client-space coordinates, and passes those to hitTest() to map to a ProseMirror position.

Bug 1 root cause: When the adjacent line is on the next page below the viewport (user hasn't scrolled there yet), getBoundingClientRect() returns off-screen coordinates (e.g., clientY=1137 when the viewport bottom is at 882). hitTest() with these off-screen coordinates produces wildly incorrect PM positions, causing the cursor to jump thousands of characters.

Bug 2 root cause: Even when the adjacent line is on-screen (same page, different fragment), the center of its DOM bounding rect can fall in a zone where hitTest() maps to the wrong fragment. This was traced by testing hitTest() at every Y pixel across the adjacent line:

y=215-229: hitTest returns pos 15428 (WRONG — current line's fragment)
y=231-239: hitTest returns pos 15363 (CORRECT — adjacent line)
y=241+:    hitTest returns pos 15428 (WRONG — current line's fragment)

The adjacent line's DOM center is at y ≈ 229.5, which falls right at the boundary where hitTest() returns the wrong fragment. So the "new" position equals the current one, and the cursor doesn't move.

The Fix

Approach: Validate hit test results against the adjacent line's known PM range

Instead of blindly trusting hitTest() results (which are unreliable when coordinates are off-screen or at fragment boundaries), we now:

  1. Read data-pm-start/data-pm-end from the adjacent line's DOM element — these attributes contain the exact PM position range for that line.

  2. Validate the hit test result against this range with a tight tolerance of 5 positions. If the hit falls outside [pmStart - 5, pmEnd + 5], it's considered unreliable.

  3. Fall back to resolvePositionAtGoalX() — a binary search using computeCaretLayoutRect to find the position within the line's PM range whose layout X is closest to the goal X coordinate. This uses the layout engine's position-to-coordinate mapping (which is always accurate regardless of scroll position), requiring only ~7 computeCaretLayoutRect calls for a typical 80-character line (O(log N)).

Why this approach

We considered several alternatives:

  • Scrolling the adjacent line into view first: Would cause visual jank (scroll → measure → set selection → scroll back) and add latency to every arrow key press.
  • Using only the layout engine (no hit test): Would require reimplementing goal-X tracking and character-level position resolution from scratch — the current hitTest() works correctly 95%+ of the time.
  • Increasing the hit test tolerance: Too loose a tolerance (e.g., lineRange) fails to catch the "stuck cursor" case where the hit lands just a few positions past the adjacent line's end.

The chosen approach is minimally invasive: the existing hit test pipeline handles the common case correctly; the validation + fallback only activates when the hit test produces an implausible result. The binary search fallback is efficient and uses the same computeCaretLayoutRect API that the rest of the caret positioning system relies on.

Auto-scroll

Added #scrollCaretIntoViewIfNeeded() to PresentationEditor.ts, called after the caret overlay is rendered. It checks if the caret is outside the scroll container bounds and scrolls minimally (with 20px margin) to keep it visible. Falls back to #scrollPageIntoView() for virtualized pages.

Files Changed

File Change
vertical-navigation.js Added PM range validation, resolvePositionAtGoalX() binary search fallback, pmStart/pmEnd extraction from adjacent line
PresentationEditor.ts Added #scrollCaretIntoViewIfNeeded() for auto-scroll on selection change
scrollCaretIntoView.test.ts 9 unit tests for the scroll-into-view logic

Test plan

  • All 688 test files pass (6646 tests)
  • ArrowDown navigates smoothly through all 7 pages of a long Lorem Ipsum document (pos 2 → 42980)
  • ArrowUp navigates smoothly back through all pages (pos 42980 → 2) with no looping
  • Previously stuck position (15428) now correctly moves past on ArrowUp
  • Round-trip test: 100 ArrowDown + 105 ArrowUp returns to position 2
  • Manual testing with various document lengths and structures
  • Verify no regressions in table cell navigation

…oll (SD-1950)

Fix vertical arrow key navigation that would jump sections or get stuck
at page boundaries, and add auto-scroll to keep the caret visible during
keyboard navigation.

Two bugs in the vertical-navigation extension:

1. ArrowDown would jump thousands of characters when crossing page
   boundaries because the adjacent line's getBoundingClientRect() returns
   off-screen coordinates, causing hitTest() to map to the wrong position.

2. ArrowUp would get stuck at certain positions because the adjacent
   line's DOM center Y falls in a zone where hitTest() maps to the
   current fragment instead of the adjacent one (fragment boundary
   misalignment), so the cursor stays at the same position.

The fix reads data-pm-start/data-pm-end from the adjacent line element
and validates the hit test result against this range. When the hit
falls outside the line's PM range (with a tight tolerance of 5), a
binary search using computeCaretLayoutRect resolves the correct position
at the goal X coordinate within the line. This avoids relying on
screen-space hit testing when it produces unreliable results.

Additionally adds scrollCaretIntoViewIfNeeded() to PresentationEditor
to auto-scroll the viewport after selection changes during keyboard
navigation.
@linear
Copy link
Copy Markdown

linear Bot commented Feb 26, 2026

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 70917fba64

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread packages/super-editor/src/core/presentation-editor/PresentationEditor.ts Outdated
Copy link
Copy Markdown
Contributor

@caio-pizzol caio-pizzol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tupizz the approach looks solid — validating hit results against known PM ranges and falling back to layout-based resolution addresses the actual failure mechanism, and the auto-scroll covers the second half of the requirement. left a few inline comments, all non-blocking.

Comment thread packages/super-editor/src/extensions/vertical-navigation/vertical-navigation.js Outdated
Skip unmeasurable positions in resolvePositionAtGoalX instead of
breaking the entire search. Positions at inline node boundaries may
return null from computeCaretLayoutRect, and breaking falls back to
pmStart causing the caret to jump to line start.

Also document the LTR assumption in the binary search.
@tupizz
Copy link
Copy Markdown
Contributor Author

tupizz commented Mar 3, 2026

Addressed Caio's feedback in e88919c:

1. Binary search null handling (applied): Changed break to lo = mid + 1; continue so the search skips unmeasurable positions (e.g. inline node boundaries) instead of bailing to pmStart. This prevents the caret from jumping to line start when computeCaretLayoutRect returns null mid-search.

2. LTR assumption comment (applied): Added a // NOTE: assumes LTR comment documenting the known limitation.

3. Tests for resolvePositionAtGoalX: Skipped for now — the function is exercised through the integration path (round-trip ArrowDown/ArrowUp tests), and adding dedicated unit tests can be a follow-up.

4. Test copies production logic: Skipped — extracting scrollCaretIntoViewIfNeeded into a shared module adds architectural overhead for a simple 35-line method. The current pattern (testing a mirror of the logic) is acceptable for now.

Copy link
Copy Markdown
Contributor

@caio-pizzol caio-pizzol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tupizz null-handling and RTL comment from last round are fixed, nice. no blocking correctness issues.

a few things still open — left inline comments: the fallback path + resolvePositionAtGoalX have zero test coverage (the null-skip fix lives there, so it really should have cases), and the test duplication concern from round 1 is still worth considering. also flagged two questions about #scrollCaretIntoViewIfNeeded scope.

Comment thread packages/super-editor/src/core/presentation-editor/PresentationEditor.ts Outdated
Comment thread packages/super-editor/src/core/presentation-editor/PresentationEditor.ts Outdated
tupizz added 6 commits March 5, 2026 10:28
Address review feedback for SD-1950:

- Scope auto-scroll to arrow-key navigation only. Add
  requestScrollCaretIntoView() public method that the vertical-nav
  extension calls before dispatch. #scrollCaretIntoViewIfNeeded only
  runs when this flag is set, preventing unexpected scroll jumps from
  collab edits, undo, find-and-replace, or other programmatic changes.

- Add page-mount guard in #scrollCaretIntoViewIfNeeded. The caret
  element may exist with estimated coordinates even when the page isn't
  visible (virtualized). Check for the page element in the DOM before
  using the caret rect, falling back to scrollPageIntoView otherwise.

- Add 7 unit tests for resolvePositionAtGoalX covering: closest match,
  exact match, goalX before/after all positions, null midpoints (inline
  node boundaries), all-null positions, and single-position ranges.

- Export resolvePositionAtGoalX for direct testing.
…ey-navigation-scroll

# Conflicts:
#	packages/super-editor/src/core/presentation-editor/PresentationEditor.ts
The flag-based scroll gating (requestScrollCaretIntoView) was
over-engineered. The 20px margin check in scrollCaretIntoViewIfNeeded
already prevents scrolling when the caret is visible. Scrolling when
the caret is off-screen is correct for all selection change sources
(arrow keys, undo, collab, find-and-replace).

Revert to unconditional scroll after caret rendering. Keep the
page-mount guard and resolvePositionAtGoalX tests from the previous
commit.
The DOM query for page mount status was failing (wrong selector after
main merge), causing scrollPageIntoView to fire on every selection
update instead of precise scroll. Restore the original guard that
only checks caret element existence.
Check if the caret's target page is mounted before using the caret
element's rect for scroll calculations. The caret overlay can exist
with estimated coordinates even when the page is virtualized. Query
this.#painterHost (stable class field) for the page element instead
of the previous fragile querySelector('.superdoc-container') approach.
Add two tests exercising the data-pm-start/data-pm-end validation
block in handleKeyDown:

- Hit lands within PM range: uses hit test result directly, no fallback
- Hit lands outside PM range: triggers resolvePositionAtGoalX fallback,
  binary search resolves position within the line's range
@tupizz tupizz requested a review from caio-pizzol March 5, 2026 14:18
tupizz and others added 2 commits March 5, 2026 11:27
Refactor scroll logic to handle both collapsed and range selections:

- Extract #scrollScreenRectIntoView for reusable scroll-bounds check
- Replace #scrollCaretIntoViewIfNeeded with #scrollActiveEndIntoView
  that works for both carets and range selections
- For range selections, pick the rendered rect nearest the selection
  head: first child for backward (Shift+ArrowUp), last child for
  forward (Shift+ArrowDown)
- Call scroll after range selection rendering so Shift+Arrow across
  page boundaries follows the active end
Copy link
Copy Markdown
Collaborator

@harbournick harbournick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@harbournick harbournick merged commit f7961d7 into main Mar 16, 2026
9 checks passed
@harbournick harbournick deleted the tadeu/sd-1950-arrow-key-navigation-scroll branch March 16, 2026 17:20
@superdoc-bot
Copy link
Copy Markdown
Contributor

superdoc-bot Bot commented Mar 16, 2026

🎉 This PR is included in superdoc v1.18.0-next.64

The release is available on GitHub release

@superdoc-bot
Copy link
Copy Markdown
Contributor

superdoc-bot Bot commented Mar 16, 2026

🎉 This PR is included in superdoc-cli v0.2.0-next.139

The release is available on GitHub release

harbournick pushed a commit that referenced this pull request Mar 17, 2026
# [1.19.0](v1.18.2...v1.19.0) (2026-03-17)

### Bug Fixes

* clear linked style for the next paragraph ([#2344](#2344)) ([9714ffb](9714ffb))
* clear selection on undo/redo ([#2385](#2385)) ([6473acf](6473acf))
* close toolbar overflow menu on click outside ([#2377](#2377)) ([ba74245](ba74245))
* **collaboration:** preserve body section properties across Yjs sync ([#2356](#2356)) ([ea702d6](ea702d6))
* **comments:** keep floating comment bubbles aligned with the selected thread (SD-2210 and SD-2223) ([#2390](#2390)) ([b014618](b014618))
* disable table resizing UI in viewing mode ([#2403](#2403)) ([697e799](697e799))
* **document-api:** make find/get treat content controls as sdt ([6688b8c](6688b8c))
* **document-api:** return NodeAddress from find and getNode instead of SDAddress (SD-2168) ([#2342](#2342)) ([edcb3c6](edcb3c6))
* **editor:** arrow key navigation across page boundaries and auto-scroll (SD-1950) ([#2191](#2191)) ([f7961d7](f7961d7)), closes [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [this.#painterHost](https://github.com/this./issues/painterHost) [#scrollScreenRectIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollScreenRectIntoView) [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [#scrollActiveEndIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollActiveEndIntoView)
* **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](#2349)) ([fed1d6b](fed1d6b))
* faulty TOC import/export (SD-2183) ([#2371](#2371)) ([45b4452](45b4452))
* **image:** sync headless image media to Y.Doc for collab persistence ([#2313](#2313)) ([72c64ed](72c64ed))
* **layout-engine:** skip redundant pageBreakBefore after page-forcing section breaks ([a950ed2](a950ed2))
* match Word list marker geometry and section-carrier pagination ([#2358](#2358)) ([36d562f](36d562f))
* merged table cells owning outer borders in DOM painter ([c55f65a](c55f65a))
* **painter-dom:** skip non-scrollable scroll container in virtualization (SD-2199) ([#2383](#2383)) ([1e075f6](1e075f6))
* preserve imported letter spacing through editor and layout ([ca9cf6a](ca9cf6a))
* preserve tracked format changes through DOCX export roundtrip ([#2395](#2395)) ([0ee9fa0](0ee9fa0))
* remove syncing of runProperties with paragraph (SD-2143) ([#2343](#2343)) ([3e74426](3e74426))
* **rendering:** apply superscript/subscript font-size scaling during layout ([#2340](#2340)) ([7e9c24f](7e9c24f))
* **rendering:** show comment highlight on text with Word highlight formatting (SD-2188) ([#2370](#2370)) ([8fe0afd](8fe0afd)), closes [#ffff00](https://github.com/superdoc-dev/superdoc/issues/ffff00)
* replace file running twice ([#2396](#2396)) ([a79fcaa](a79fcaa))
* **super-editor:** make notes-part mutations canonical for footnotes ([#2361](#2361)) ([e232129](e232129))
* **super-editor:** preserve root doc attrs during collaboration seeding ([#2359](#2359)) ([018469a](018469a))
* **super-editor:** reconcile OPC package metadata during DOCX export ([#2357](#2357)) ([863254a](863254a))
* **superdoc:** expose header/footer edits in update callbacks ([#2368](#2368)) ([78d0056](78d0056))
* **superdoc:** prevent duplicate prosemirror-view bundles in dist ([32c1045](32c1045))
* **toc:** anchor scroll precision within pages navigation (SD-2186) ([#2372](#2372)) ([cfb9a72](cfb9a72)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer)
* **track-changes:** cancel tracked format changes when reverted to original (SD-2181) ([#2365](#2365)) ([72077b2](72077b2))
* **track-changes:** remove logic that combines adjacent TCs with different IDs ([#2326](#2326)) ([b2f088b](b2f088b))
* **tracked-changes:** do not render empty space in TC within lists ([#2316](#2316)) ([00672dc](00672dc))
* **tracked-changes:** sync tracked changes store on undo and redo ([#2164](#2164)) ([94f0056](94f0056))
* **types:** fix broken .d.ts imports in published superdoc package (SD-2227) ([#2392](#2392)) ([77807e5](77807e5))
* watermark shading mismatch (SD-2147) ([#2353](#2353)) ([c94320c](c94320c))

### Features

* charts ([#2322](#2322)) ([dff2edc](dff2edc))
* cli improvements, block deletion ([#2360](#2360)) ([26972ff](26972ff))
* **collab:** wait for Y fragment settling before initializing editor ([b75ee17](b75ee17))
* diffing extension for comparing documents (SD-1324 and SD-89) ([#2306](#2306)) ([33e2ce6](33e2ce6))
* **document-api:** content controls ([#2320](#2320)) ([2747e81](2747e81))
* **document-api:** headers & footers ([#2323](#2323)) ([b6511ca](b6511ca))
* **document-api:** improve cross block selection and deleting ([#2391](#2391)) ([cb8fedd](cb8fedd))
* **document-api:** insert/replace structural content ([#2305](#2305)) ([ce0c719](ce0c719))
* **document-api:** references ([#2321](#2321)) ([6da4d9c](6da4d9c))
* **headless:** collaborative comment and tracked-change parity ([#2315](#2315)) ([4dc1be1](4dc1be1))
* **layout:** implement AutoFit table layout algorithm (SD-2174) ([#2355](#2355)) ([5c05535](5c05535))
* parts sync system including yjs ([#2325](#2325)) ([84d8945](84d8945))
* **presentation-editor:** enhance zoom functionality in web layout ([#2408](#2408)) ([d44de69](d44de69)), closes [#applyZoom](https://github.com/superdoc-dev/superdoc/issues/applyZoom)
* remove naive ui ([#2240](#2240)) ([fd5444f](fd5444f))
* seed blank docx parts when loading JSON into editor ([#2401](#2401)) ([89c982f](89c982f))
* support paragraph between borders (w:pBdr/w:between) ([#2324](#2324)) ([03f8207](03f8207)), closes [#2074](#2074)
@harbournick
Copy link
Copy Markdown
Collaborator

🎉 This PR is included in superdoc v1.19.0

The release is available on GitHub release

@superdoc-bot
Copy link
Copy Markdown
Contributor

superdoc-bot Bot commented Mar 17, 2026

🎉 This PR is included in superdoc-cli v0.3.0-next.1

The release is available on GitHub release

superdoc-bot Bot pushed a commit that referenced this pull request Mar 20, 2026
# [0.3.0](cli-v0.2.0...cli-v0.3.0) (2026-03-20)

### Bug Fixes

* arrow key navigation through and out of tables (SD-2236) ([#2476](#2476)) ([d5317ef](d5317ef))
* behavior tests ([#2436](#2436)) ([2d087f2](2d087f2))
* bug text edit commands fail on targets returned by find ([#2488](#2488)) ([7a9a448](7a9a448))
* change default link protocol ([#2319](#2319)) ([1deda06](1deda06))
* clear linked style for the next paragraph ([#2344](#2344)) ([9714ffb](9714ffb))
* clear selection on undo/redo ([#2385](#2385)) ([6473acf](6473acf))
* cli skills install ([ed7436a](ed7436a))
* **cli:** include allowed values in oneOf const validation errors ([#2455](#2455)) ([8802f90](8802f90))
* **cli:** restore tracked diff redline roundtrip ([#2438](#2438)) ([f609371](f609371))
* close toolbar overflow menu on click outside ([#2377](#2377)) ([ba74245](ba74245))
* **collaboration:** preserve body section properties across Yjs sync ([#2356](#2356)) ([ea702d6](ea702d6))
* **comments:** keep floating comment bubbles aligned with the selected thread (SD-2210 and SD-2223) ([#2390](#2390)) ([b014618](b014618))
* **comments:** resolve double-click activation and edit mode issues (SD-2035) ([#2259](#2259)) ([d9465aa](d9465aa))
* declare w15 namespace when bootstrapping numbering.xml ([#2470](#2470)) ([a14004d](a14004d))
* **diffing:** ignore volatile OOXML attrs in image and paragraph diff comparison ([#2421](#2421)) ([ca91225](ca91225))
* disable table resizing UI in viewing mode ([#2403](#2403)) ([697e799](697e799))
* doc-api story regressions and export app.xml stats ([#2478](#2478)) ([d06ff4e](d06ff4e))
* **doc-api:** gate textStyle attrs and sync reference coverage ([#2430](#2430)) ([e2d6ca6](e2d6ca6))
* **docs:** coherence pass on doc api, clean up dead code, update CLI SKILL.md ([#2424](#2424)) ([bf0d4b8](bf0d4b8))
* **document-api:** add document diff API and fix tracked diff replay in CLI host session ([#2418](#2418)) ([2a804f7](2a804f7))
* **document-api:** add mutation-ready cell addresses to tables.getCells ([#2461](#2461)) ([99bd4e5](99bd4e5))
* **document-api:** clear styles before paragraph.setStyle ([#2449](#2449)) ([bce4bb8](bce4bb8))
* **document-api:** make find/get treat content controls as sdt ([6688b8c](6688b8c))
* **document-api:** rename atRowIndex to rowIndex in tables.split ([#2473](#2473)) ([7de2864](7de2864))
* **document-api:** return fresh table ref in mutation responses ([#2453](#2453)) ([af6de73](af6de73))
* **document-api:** return NodeAddress from find and getNode instead of SDAddress (SD-2168) ([#2342](#2342)) ([edcb3c6](edcb3c6))
* **editor:** arrow key navigation across page boundaries and auto-scroll (SD-1950) ([#2191](#2191)) ([f7961d7](f7961d7)), closes [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [this.#painterHost](https://github.com/this./issues/painterHost) [#scrollScreenRectIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollScreenRectIntoView) [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [#scrollActiveEndIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollActiveEndIntoView)
* **editor:** prevent scroll-to-top when clicking toolbar buttons ([#2236](#2236)) ([ab30a36](ab30a36))
* ensure ruler 0 is visible ([#2487](#2487)) ([096d9f0](096d9f0))
* **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](#2349)) ([fed1d6b](fed1d6b))
* faulty TOC import/export (SD-2183) ([#2371](#2371)) ([45b4452](45b4452))
* guard drawing export against invalid structures and zero IDs (SD-824) ([#2363](#2363)) ([9c7fc2e](9c7fc2e))
* **header-footer:** normalize page-relative anchor layout ([#2484](#2484)) ([6e62198](6e62198))
* **image:** sync headless image media to Y.Doc for collab persistence ([#2313](#2313)) ([72c64ed](72c64ed))
* import regression ([#2452](#2452)) ([cac5e24](cac5e24))
* improve document API dry runs, query matching, and reference block mutations ([#2498](#2498)) ([5959c5f](5959c5f))
* improve multi-column rendering ([#2369](#2369)) ([d231640](d231640))
* isolate document surface and toolbar/ruler stacking contexts ([#2491](#2491)) ([976ce14](976ce14))
* issue with vertical cells merging ([#2387](#2387)) ([e8f1c10](e8f1c10))
* **layout-engine:** match partial-row split height to renderer semantics ([#2486](#2486)) ([e0982da](e0982da))
* **layout-engine:** require bilateral opt-in for contextual spacing ([#2475](#2475)) ([40e04c2](40e04c2))
* **layout-engine:** skip redundant pageBreakBefore after page-forcing section breaks ([a950ed2](a950ed2))
* **lists:** stabilize list item addresses for docs without paraIds ([#2429](#2429)) ([0070de6](0070de6))
* match Word list marker geometry and section-carrier pagination ([#2358](#2358)) ([36d562f](36d562f))
* merged table cells owning outer borders in DOM painter ([c55f65a](c55f65a))
* newline formatting inheritance without serializing style-derived formatting (SD-2228) ([#2417](#2417)) ([5a3318f](5a3318f))
* open links in view mode ([#2350](#2350)) ([25f0aad](25f0aad))
* **painter-dom:** skip non-scrollable scroll container in virtualization (SD-2199) ([#2383](#2383)) ([1e075f6](1e075f6))
* **presentation-editor:** arrow key scroll-into-view with unconstrained containers (SD-1950) ([#2411](#2411)) ([fa8afc8](fa8afc8)), closes [#findScrollableAncestor](https://github.com/superdoc-dev/superdoc/issues/findScrollableAncestor)
* preserve imported letter spacing through editor and layout ([ca9cf6a](ca9cf6a))
* preserve tracked format changes through DOCX export roundtrip ([#2395](#2395)) ([0ee9fa0](0ee9fa0))
* register DOCX numbering metadata for lists.create ([#2432](#2432)) ([129772f](129772f))
* remove syncing of runProperties with paragraph (SD-2143) ([#2343](#2343)) ([3e74426](3e74426))
* **rendering:** apply superscript/subscript font-size scaling during layout ([#2340](#2340)) ([7e9c24f](7e9c24f))
* **rendering:** show comment highlight on text with Word highlight formatting (SD-2188) ([#2370](#2370)) ([8fe0afd](8fe0afd)), closes [#ffff00](https://github.com/superdoc-dev/superdoc/issues/ffff00)
* replace file running twice ([#2396](#2396)) ([a79fcaa](a79fcaa))
* **sdk:** improve agent tool definitions for better LLM accuracy ([#2494](#2494)) ([e914af7](e914af7)), closes [#8](#8) [#9](#9) [#10](#10)
* seed base docx package for collaboration exports ([#2416](#2416)) ([df36853](df36853))
* show correct paragraph font in toolbar when selection is empty (SD-2145) ([#2402](#2402)) ([39e1477](39e1477))
* **super-editor:** guard against style definition nodes without elements ([#2379](#2379)) ([7dd57f8](7dd57f8))
* **super-editor:** make notes-part mutations canonical for footnotes ([#2361](#2361)) ([e232129](e232129))
* **super-editor:** preserve fontFamily in runProperties when set via document API (SD-2249) ([#2433](#2433)) ([491c3fe](491c3fe))
* **super-editor:** preserve root doc attrs during collaboration seeding ([#2359](#2359)) ([018469a](018469a))
* **super-editor:** prevent cursor jump when changing font from toolbar ([#2468](#2468)) ([c315599](c315599))
* **super-editor:** reconcile OPC package metadata during DOCX export ([#2357](#2357)) ([863254a](863254a))
* **superdoc:** expose header/footer edits in update callbacks ([#2368](#2368)) ([78d0056](78d0056))
* **superdoc:** prevent duplicate prosemirror-view bundles in dist ([32c1045](32c1045))
* surface hyperlink tracked changes in comments ([#2485](#2485)) ([ae55118](ae55118))
* **tables:** handle insertColumn right of last column ([#2451](#2451)) ([74c37ff](74c37ff))
* **tables:** prevent resize overlay artifacts during drag ([#2479](#2479)) ([1b1e712](1b1e712))
* text selection inside headers/footers ([#2404](#2404)) ([09677dc](09677dc))
* **toc:** anchor scroll precision within pages navigation (SD-2186) ([#2372](#2372)) ([cfb9a72](cfb9a72)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer)
* **toc:** inject _Toc bookmarks so exported DOCX TOC links work without manual Update Table ([#2431](#2431)) ([54c5aa7](54c5aa7))
* toolbar state after document load (SD-2145) ([#2448](#2448)) ([6347ffe](6347ffe))
* **track-changes:** allow linked style changes in suggesting mode (SD-2182) ([#2373](#2373)) ([6400a1f](6400a1f))
* **track-changes:** cancel tracked format changes when reverted to original (SD-2181) ([#2365](#2365)) ([72077b2](72077b2))
* **track-changes:** remove logic that combines adjacent TCs with different IDs ([#2326](#2326)) ([b2f088b](b2f088b))
* **tracked-changes:** do not render empty space in TC within lists ([#2316](#2316)) ([00672dc](00672dc))
* **tracked-changes:** sync tracked changes store on undo and redo ([#2164](#2164)) ([94f0056](94f0056))
* **tracked-changes:** undo/redo applies to both document and comment bubbles ([#2437](#2437)) ([bc7cba3](bc7cba3))
* **types:** fix broken .d.ts imports in published superdoc package (SD-2227) ([#2392](#2392)) ([77807e5](77807e5))
* update list marker font before adding list item ([#2312](#2312)) ([8721614](8721614))
* update skill file ([240fb66](240fb66))
* watermark shading mismatch (SD-2147) ([#2353](#2353)) ([c94320c](c94320c))

### Features

* charts ([#2322](#2322)) ([dff2edc](dff2edc))
* cli improvements, block deletion ([#2360](#2360)) ([26972ff](26972ff))
* **cli:** add --version flag ([6199a9c](6199a9c))
* **collab:** wait for Y fragment settling before initializing editor ([b75ee17](b75ee17))
* **comments:** add scrollToComment API ([#2440](#2440)) ([0132d0e](0132d0e))
* diffing extension for comparing documents (SD-1324 and SD-89) ([#2306](#2306)) ([33e2ce6](33e2ce6))
* **doc-info:** add live page counts to doc.info ([#2435](#2435)) ([e631f4b](e631f4b))
* **doc-info:** live doc.info counts for characters, tracked changes, SDT fields, and lists ([#2428](#2428)) ([2978507](2978507))
* **document-api:** accept table coordinates in unmergeCells ([#2462](#2462)) ([5eca65b](5eca65b))
* **document-api:** add 'story' targeting for parts targeting with main api functions ([#2477](#2477)) ([49dc4ef](49dc4ef))
* **document-api:** add paragraph direction ops and clarify format.rtl ([#2474](#2474)) ([86600ac](86600ac))
* **document-api:** add table convenience ops and sync reference doc ([#2471](#2471)) ([137b1d9](137b1d9))
* **document-api:** content controls ([#2320](#2320)) ([2747e81](2747e81))
* **document-api:** headers & footers ([#2323](#2323)) ([b6511ca](b6511ca))
* **document-api:** improve cross block selection and deleting ([#2391](#2391)) ([cb8fedd](cb8fedd))
* **document-api:** insert/replace structural content ([#2305](#2305)) ([ce0c719](ce0c719))
* **document-api:** list creation and style edit commands ([#2457](#2457)) ([1d6d4bb](1d6d4bb))
* **document-api:** references ([#2321](#2321)) ([6da4d9c](6da4d9c))
* **docx:** support Word document statistic fields and F9 field updates ([#2460](#2460)) ([57b3ecc](57b3ecc))
* **headless:** collaborative comment and tracked-change parity ([#2315](#2315)) ([4dc1be1](4dc1be1))
* **layout:** implement AutoFit table layout algorithm (SD-2174) ([#2355](#2355)) ([5c05535](5c05535))
* llm tools beta ([#2393](#2393)) ([f725f36](f725f36))
* make images uploaded into table cell adjust to width of cell ([#2317](#2317)) ([c79b1d1](c79b1d1))
* parts sync system including yjs ([#2325](#2325)) ([84d8945](84d8945))
* **presentation-editor:** enhance zoom functionality in web layout ([#2408](#2408)) ([d44de69](d44de69)), closes [#applyZoom](https://github.com/superdoc-dev/superdoc/issues/applyZoom)
* remove naive ui ([#2240](#2240)) ([fd5444f](fd5444f))
* **sdk:** ensure sdk clients are not global, change open() to return document handle ([#2497](#2497)) ([3b6eede](3b6eede))
* **sdk:** improve AI tool definitions for LLM accuracy (25% → 95% pass rate) ([#2446](#2446)) ([2e10e26](2e10e26))
* seed blank docx parts when loading JSON into editor ([#2401](#2401)) ([89c982f](89c982f))
* **super-editor:** bridge editor selection into Document API commands ([#2458](#2458)) ([26cef26](26cef26))
* support paragraph between borders (w:pBdr/w:between) ([#2324](#2324)) ([03f8207](03f8207)), closes [#2074](#2074)
* **tables:** support lastRow style options with OOXML roundtrip parity ([#2467](#2467)) ([e84f695](e84f695))
* theming with css variables ([#2386](#2386)) ([529c500](529c500)), closes [#2441](#2441) [#ffffff](https://github.com/superdoc-dev/superdoc/issues/ffffff) [#dbdbdb](https://github.com/superdoc-dev/superdoc/issues/dbdbdb) [hi#level](https://github.com/hi/issues/level) [hi#contrast](https://github.com/hi/issues/contrast) [#f3f6fd](https://github.com/superdoc-dev/superdoc/issues/f3f6fd) [hi#level](https://github.com/hi/issues/level) [#2445](#2445) [#2469](#2469) [#ffffff](https://github.com/superdoc-dev/superdoc/issues/ffffff)

### Performance Improvements

* **test:** move one-time setup to beforeAll in contract-conformance ([#2483](#2483)) ([ed4839b](ed4839b))
* **test:** speed up unit tests and migrate to bun ([#2492](#2492)) ([af44051](af44051))

### Reverts

* Revert "fix(types): fix broken .d.ts imports in published superdoc package (S…" ([#2443](#2443)) ([33215ee](33215ee))
* Revert "fix(types): fix broken .d.ts imports in published superdoc package (S…" ([#2443](#2443)) ([#2444](#2444)) ([2bde895](2bde895))
@superdoc-bot
Copy link
Copy Markdown
Contributor

superdoc-bot Bot commented Mar 20, 2026

🎉 This PR is included in superdoc-cli v0.3.0

The release is available on GitHub release

harbournick pushed a commit that referenced this pull request Mar 20, 2026
# 1.0.0 (2026-03-20)

### Bug Fixes

* account for indentation when drawing paragraph borders ([#1655](https://github.com/superdoc-dev/superdoc/issues/1655)) ([01a8d39](https://github.com/superdoc-dev/superdoc/commit/01a8d394784d714c539963430abc712dc360a0cd))
* active track change ([#2163](https://github.com/superdoc-dev/superdoc/issues/2163)) ([108c14d](https://github.com/superdoc-dev/superdoc/commit/108c14d30fad847e3604d285806823ff9485c2f6))
* add addToHistory to new insertTrackedChange command ([#1767](https://github.com/superdoc-dev/superdoc/issues/1767)) ([e5081be](https://github.com/superdoc-dev/superdoc/commit/e5081be4abdc108f348ea91b95092ae643567c91))
* add ai icons to commons ([9ab0fa4](https://github.com/superdoc-dev/superdoc/commit/9ab0fa42b3f5c1f7f5b2c66cab0c96f240ec786c))
* add another ai selection helper ([d180f4d](https://github.com/superdoc-dev/superdoc/commit/d180f4d97f4b450a55f4feeb5f5fbdee0b24de3b))
* add check for missing var ([539b49b](https://github.com/superdoc-dev/superdoc/commit/539b49b59bbd61fa3d366e5dda4b631ea9a10028))
* add checking for block content or inline when pasting ([4491969](https://github.com/superdoc-dev/superdoc/commit/4491969f38efbddb62cbd4c80654727e8953b694))
* add column balancing and INDEX field support ([#1753](https://github.com/superdoc-dev/superdoc/issues/1753)) ([b2a6f6b](https://github.com/superdoc-dev/superdoc/commit/b2a6f6b931c505751f54ff0fe6cc1b8f7071fbbf))
* add currentTotalPages getter and pagination-update event ([#2202](https://github.com/superdoc-dev/superdoc/issues/2202)) ([95b4579](https://github.com/superdoc-dev/superdoc/commit/95b45793cc7ad4acf714eac2f6f9ac010a62e8ea)), closes [#958](https://github.com/superdoc-dev/superdoc/issues/958)
* add destroyed to flag to abort init ([#1616](https://github.com/superdoc-dev/superdoc/issues/1616)) ([4b5fa87](https://github.com/superdoc-dev/superdoc/commit/4b5fa871549a0a1ae721df82f430a1434fd6140f))
* add destroyed to flag to abort init [stable] ([#1617](https://github.com/superdoc-dev/superdoc/issues/1617)) ([337b452](https://github.com/superdoc-dev/superdoc/commit/337b4520d0e6e68da50855e6e5dd6f476df2ebd0))
* add dispatch method type and mark view as optional for headless mode ([#1728](https://github.com/superdoc-dev/superdoc/issues/1728)) ([45195d7](https://github.com/superdoc-dev/superdoc/commit/45195d78b4eb5b7b879ce4837393ce83f03ba595))
* add double click event for annotation ([#1803](https://github.com/superdoc-dev/superdoc/issues/1803)) ([509c882](https://github.com/superdoc-dev/superdoc/commit/509c8821d4222130c68d99ef65f22aaf4796159b))
* add error notice if invalid docx is opened, fallback to blank ([0af7a7d](https://github.com/superdoc-dev/superdoc/commit/0af7a7df20a0163798b9f5489781375aa63192c5))
* add in safety check for dispatch ([3550f80](https://github.com/superdoc-dev/superdoc/commit/3550f8033776bab508d6c83d81d8c28d85c128ac))
* add missing DrawingML namespaces ([#1719](https://github.com/superdoc-dev/superdoc/issues/1719)) ([9bfd977](https://github.com/superdoc-dev/superdoc/commit/9bfd977837fa2c6137eed3149794292580ddb2ac))
* add missing id generation call to image validator, fix tests for image validator ([c337647](https://github.com/superdoc-dev/superdoc/commit/c337647525cf3b98e7e313e42cdbc59d84b40da8))
* add pm exports ([#1146](https://github.com/superdoc-dev/superdoc/issues/1146)) ([0bf371a](https://github.com/superdoc-dev/superdoc/commit/0bf371a0936c416cfed9309a61ec77f841afd207))
* add processing for line-height defined in px ([#880](https://github.com/superdoc-dev/superdoc/issues/880)) ([3b61275](https://github.com/superdoc-dev/superdoc/commit/3b61275eccce054cf88fdb9251780018d9e09575))
* add relationship and rId ([#776](https://github.com/superdoc-dev/superdoc/issues/776)) ([46beadb](https://github.com/superdoc-dev/superdoc/commit/46beadb7a2a89f07ad71709340a2f017ba2e104f))
* add safety check for clipboard usage ([#859](https://github.com/superdoc-dev/superdoc/issues/859)) ([bfca96e](https://github.com/superdoc-dev/superdoc/commit/bfca96ea30f60d68229a6648152fb1d49c8de277))
* add support for vrect nodes ([#758](https://github.com/superdoc-dev/superdoc/issues/758)) ([acabf81](https://github.com/superdoc-dev/superdoc/commit/acabf81489d42dc48ec5a32051a65ac04e7075bc))
* add tooltip to table actions ([#1093](https://github.com/superdoc-dev/superdoc/issues/1093)) ([983f0de](https://github.com/superdoc-dev/superdoc/commit/983f0de9fa7e1bf7e885eb30b26f74fc4d63e546))
* add type declaration for Editor.loadXmlData and Editor.open ([#1727](https://github.com/superdoc-dev/superdoc/issues/1727)) ([ae452a9](https://github.com/superdoc-dev/superdoc/commit/ae452a98409e6c34c9d08b1ba12e2c21e0f9f0ab))
* add type definitions for PresentationEditor ([#2271](https://github.com/superdoc-dev/superdoc/issues/2271)) ([5402196](https://github.com/superdoc-dev/superdoc/commit/5402196e73997b83ddd1d4f270c82e3a85c3365f))
* add typesVersions for TypeScript subpath exports ([#1851](https://github.com/superdoc-dev/superdoc/issues/1851)) ([923ab29](https://github.com/superdoc-dev/superdoc/commit/923ab293329f94a04df43cc337bab4e29149e518))
* adding table to sdt ([#1709](https://github.com/superdoc-dev/superdoc/issues/1709)) ([260b987](https://github.com/superdoc-dev/superdoc/commit/260b987e1a20ff3405f41b16d02ef936db023578))
* additional comments fixes ([#1248](https://github.com/superdoc-dev/superdoc/issues/1248)) ([d8d6e52](https://github.com/superdoc-dev/superdoc/commit/d8d6e526faa0bd7cd1b7970d3fac5fc8d25f74af))
* additional comments fixes ([#1248](https://github.com/superdoc-dev/superdoc/issues/1248)) ([#1249](https://github.com/superdoc-dev/superdoc/issues/1249)) ([911f17c](https://github.com/superdoc-dev/superdoc/commit/911f17cdf1df8496b3b93c52398f453aa873e260))
* additional fixes for view mode ([#1676](https://github.com/superdoc-dev/superdoc/issues/1676)) ([fc2b7d6](https://github.com/superdoc-dev/superdoc/commit/fc2b7d6436229b88453ddf7589fdfca333957c74))
* additional fixes to list indent/outdent, split list, toggle list, types and more tests ([02e6cd9](https://github.com/superdoc-dev/superdoc/commit/02e6cd971b672adc7a27ee6f4c3e491ea6582927))
* adjust pagination spacer height range in tests ([029c838](https://github.com/superdoc-dev/superdoc/commit/029c838c3bc8ff40d94d02ec5652fa46acc31c4b))
* adjusted row height not preserved when table doesn't fit current page ([#1642](https://github.com/superdoc-dev/superdoc/issues/1642)) ([edcab55](https://github.com/superdoc-dev/superdoc/commit/edcab5507ee92d56ab25079b7345928c8dd7839a))
* **ai-actions:** preserve html/markdown insertion and prevent repeated formatted replacement ([#2117](https://github.com/superdoc-dev/superdoc/issues/2117)) ([9f685e9](https://github.com/superdoc-dev/superdoc/commit/9f685e964b5156d0d177e2fa0a72a4129d2a0443))
* **ai:** support headless mode in EditorAdapter.applyPatch ([#1859](https://github.com/superdoc-dev/superdoc/issues/1859)) ([cf9275d](https://github.com/superdoc-dev/superdoc/commit/cf9275d3bffd144491701508103af4c7b8f1708e))
* **ai:** use semver range for superdoc peer dependency ([#1684](https://github.com/superdoc-dev/superdoc/issues/1684)) ([f9f9e20](https://github.com/superdoc-dev/superdoc/commit/f9f9e20ed0c340b3bf009aa3598f98640a4971eb))
* allow .5 font sizes ([#1060](https://github.com/superdoc-dev/superdoc/issues/1060)) ([4747145](https://github.com/superdoc-dev/superdoc/commit/47471457a54193f6eea02e5bce20ebd03e5108b0))
* allow both leading and trailing spaces ([#1100](https://github.com/superdoc-dev/superdoc/issues/1100)) ([b74bbd5](https://github.com/superdoc-dev/superdoc/commit/b74bbd517024388ed0779f023f7a296cc2774551))
* allow both leading and trailing spaces ([#1100](https://github.com/superdoc-dev/superdoc/issues/1100)) ([#1103](https://github.com/superdoc-dev/superdoc/issues/1103)) ([315d3e2](https://github.com/superdoc-dev/superdoc/commit/315d3e2b177619af25d7b68619fdd8908a9e8afc))
* allow override row borders ([#1672](https://github.com/superdoc-dev/superdoc/issues/1672)) ([a4bb109](https://github.com/superdoc-dev/superdoc/commit/a4bb109fde65f02442c4ee5e1930fe90877bc107))
* allow paste from context menu ([#1910](https://github.com/superdoc-dev/superdoc/issues/1910)) ([b6666bf](https://github.com/superdoc-dev/superdoc/commit/b6666bf94a3bc6a4f8a71a49e95136e2e5e9e2ae))
* allow programmatic tracked change skipping undo history ([#1202](https://github.com/superdoc-dev/superdoc/issues/1202)) ([826b620](https://github.com/superdoc-dev/superdoc/commit/826b6202ee242e004f9302f58ff6f5c06cfe7cd6))
* allow regex search across docx run wrappers ([#1021](https://github.com/superdoc-dev/superdoc/issues/1021)) ([053fedc](https://github.com/superdoc-dev/superdoc/commit/053fedcf2f6b611ea5b4bb431fcb306c299d73a0))
* allow toolbar when typing font size ([0cac27c](https://github.com/superdoc-dev/superdoc/commit/0cac27cc5b30d6e05a862dd4f35fed6fb2a9e15b))
* allow top/bottom images to float right and left ([#1203](https://github.com/superdoc-dev/superdoc/issues/1203)) ([d3f1e47](https://github.com/superdoc-dev/superdoc/commit/d3f1e4742af0982d616382b155056119029a84c3))
* always call resolveComment after custom TC bubble handlers (SD-2049) ([#2204](https://github.com/superdoc-dev/superdoc/issues/2204)) ([34fb4e0](https://github.com/superdoc-dev/superdoc/commit/34fb4e07e32c76d6c53580c9046db19e5024bb08))
* anchor images in table cells ([#1742](https://github.com/superdoc-dev/superdoc/issues/1742)) ([f77e7bd](https://github.com/superdoc-dev/superdoc/commit/f77e7bd538fc013d7de0bfc66c1c4880761c61b7))
* anchor table overlaps text ([#1995](https://github.com/superdoc-dev/superdoc/issues/1995)) ([fc05e29](https://github.com/superdoc-dev/superdoc/commit/fc05e295efef9e02db9d7cccafc771d3d00da3e6))
* **anchor-nav:** use correct scroll container for sub-page bookmark navigation ([a300536](https://github.com/superdoc-dev/superdoc/commit/a300536111890565c6b53b0842551a5c2f4c191a)), closes [#scrollContainer](https://github.com/superdoc-dev/superdoc/issues/scrollContainer)
* annotation and interaction issues ([#1847](https://github.com/superdoc-dev/superdoc/issues/1847)) ([ffb1055](https://github.com/superdoc-dev/superdoc/commit/ffb1055dcf21916a23b221655a9eff8828d49fa0))
* annotation drop ([#1789](https://github.com/superdoc-dev/superdoc/issues/1789)) ([f384213](https://github.com/superdoc-dev/superdoc/commit/f3842134ab2648fc46752688350dbebb88f58f5a))
* annotation events in layout engine ([#1685](https://github.com/superdoc-dev/superdoc/issues/1685)) ([db24ff8](https://github.com/superdoc-dev/superdoc/commit/db24ff80afb9c048899060e3121e6b4d3e2edfac))
* annotation formatting ([0ac67b2](https://github.com/superdoc-dev/superdoc/commit/0ac67b20e6dca1aebe077eaf5e7e116ad61b2135))
* annotation issues ([#1752](https://github.com/superdoc-dev/superdoc/issues/1752)) ([9b13ce0](https://github.com/superdoc-dev/superdoc/commit/9b13ce0141f9f526bdaa6cfc5ea18616290b0688))
* annotation selection ([#1762](https://github.com/superdoc-dev/superdoc/issues/1762)) ([1c831cc](https://github.com/superdoc-dev/superdoc/commit/1c831cca106584d094f9d07c00f22fd51374ef1e))
* annotation selection, applying formatting ([#1784](https://github.com/superdoc-dev/superdoc/issues/1784)) ([924af4b](https://github.com/superdoc-dev/superdoc/commit/924af4be941717c202821ba10d9372dbe78a1954))
* annotations import ([#755](https://github.com/superdoc-dev/superdoc/issues/755)) ([b6135ac](https://github.com/superdoc-dev/superdoc/commit/b6135ac08fbbcc29d5e3f33519620ac7789450cf))
* apply correct style to inserted links ([#1871](https://github.com/superdoc-dev/superdoc/issues/1871)) ([36e3c4b](https://github.com/superdoc-dev/superdoc/commit/36e3c4b066a02fbcac4e53cc3df2c3cefaf207fb))
* arrow key navigation through and out of tables (SD-2236) ([#2476](https://github.com/superdoc-dev/superdoc/issues/2476)) ([d5317ef](https://github.com/superdoc-dev/superdoc/commit/d5317efaf3e75cb5af60078fbdb154564f45457e))
* auto color in tables with dark cells ([#1644](https://github.com/superdoc-dev/superdoc/issues/1644)) ([f498a03](https://github.com/superdoc-dev/superdoc/commit/f498a03dff563e7e24aaed78cbbb3b93bedf23a8))
* backspaceNextToList, toggleList and tests ([8b33258](https://github.com/superdoc-dev/superdoc/commit/8b33258aa9a09cd566191083de2095377f532de5))
* backward replace insert text ([#2172](https://github.com/superdoc-dev/superdoc/issues/2172)) ([66f0849](https://github.com/superdoc-dev/superdoc/commit/66f08497dd5642db2be6b8729c9bbc84a862ae20))
* before paragraph spacing inside table cells ([#1842](https://github.com/superdoc-dev/superdoc/issues/1842)) ([c7efa85](https://github.com/superdoc-dev/superdoc/commit/c7efa857abdfa6a0f129f73e3c5654b573c1028c))
* behavior tests ([#2436](https://github.com/superdoc-dev/superdoc/issues/2436)) ([2d087f2](https://github.com/superdoc-dev/superdoc/commit/2d087f2e0df6bac519f5868b0f45d8a84911ee1b))
* block ID collisions and missing positions in paragraph converter ([3e75a98](https://github.com/superdoc-dev/superdoc/commit/3e75a9827fdb8b1847632e6a5b7f8f5dcabcabd1))
* block keyboard, paste, and drop events in view mode during collab ([#1471](https://github.com/superdoc-dev/superdoc/issues/1471)) ([48b2555](https://github.com/superdoc-dev/superdoc/commit/48b2555552ca124d23444d1569b47c43746050da))
* bookmarks inside table cells break import ([#1133](https://github.com/superdoc-dev/superdoc/issues/1133)) ([a090084](https://github.com/superdoc-dev/superdoc/commit/a090084d4eac56f49c82684bca64fcf10fb2ee8d))
* bookmarkStart custom round trip, tests, add example doc with round trip tests ([#1014](https://github.com/superdoc-dev/superdoc/issues/1014)) ([0849157](https://github.com/superdoc-dev/superdoc/commit/0849157933eda9bf4c0917620e28cac8a9f34cab))
* breaking structured document node import ([a470070](https://github.com/superdoc-dev/superdoc/commit/a47007029ce0ff44008b67f1bcac6d489273793a))
* bug - page number format from first section overrides number ([#1654](https://github.com/superdoc-dev/superdoc/issues/1654)) ([c45ecfa](https://github.com/superdoc-dev/superdoc/commit/c45ecfae71be17953e88662e8e646dab173b4c61))
* bug text edit commands fail on targets returned by find ([#2488](https://github.com/superdoc-dev/superdoc/issues/2488)) ([7a9a448](https://github.com/superdoc-dev/superdoc/commit/7a9a448954e8cf36a4773e834df57a8bf02289fa))
* bug watermarks render darker than they should [SD-1469] ([#1737](https://github.com/superdoc-dev/superdoc/issues/1737)) ([7ce423d](https://github.com/superdoc-dev/superdoc/commit/7ce423d445366c0e400b4143bec3cdd9d8b28e88))
* **build:** add node polyfills to UMD bundle and angular to CI matrix ([13fa579](https://github.com/superdoc-dev/superdoc/commit/13fa579c5e10a5da26c7308887e82123d914659c))
* **build:** remove dead vite-plugin-node-polyfills from UMD externals ([91de1fc](https://github.com/superdoc-dev/superdoc/commit/91de1fc2e47b0061d088db5d46b0da4cc07dc837))
* can't add deletion track change when selected content has link/another track change ([#1591](https://github.com/superdoc-dev/superdoc/issues/1591)) ([63121e8](https://github.com/superdoc-dev/superdoc/commit/63121e8dd810b8a05f3e6b8688ef5a1769849225))
* capitalize InputRule in broken import ([73e16cb](https://github.com/superdoc-dev/superdoc/commit/73e16cb209006dddd0e7bd4546529f55bd3b908a))
* caret in lists ([#1683](https://github.com/superdoc-dev/superdoc/issues/1683)) ([c7b9847](https://github.com/superdoc-dev/superdoc/commit/c7b984783eee79698d74617e26c5f6eeb76d4a6d))
* change default link protocol ([#2319](https://github.com/superdoc-dev/superdoc/issues/2319)) ([1deda06](https://github.com/superdoc-dev/superdoc/commit/1deda06897787ae7f14641a5580fa5e1c5881217))
* changed hard break file ([ebc27da](https://github.com/superdoc-dev/superdoc/commit/ebc27da52a749ac065bf1a085899c5ab12a360b7))
* **ci:** include sub-package commits in superdoc release filter ([a2c237b](https://github.com/superdoc-dev/superdoc/commit/a2c237bb631130de5ae345209ca109f1ff645519))
* **ci:** move superdoc releaserc to package dir for proper commit filtering ([688f8e0](https://github.com/superdoc-dev/superdoc/commit/688f8e09df258d7279e7364c03d08e217c742c3d))
* clean up lint warnings and remove unused code ([#754](https://github.com/superdoc-dev/superdoc/issues/754)) ([df73156](https://github.com/superdoc-dev/superdoc/commit/df7315657dc56b6dfc59d18029c010b39d4deb30))
* clear linked style for the next paragraph ([#2344](https://github.com/superdoc-dev/superdoc/issues/2344)) ([9714ffb](https://github.com/superdoc-dev/superdoc/commit/9714ffbaa6a8a589fc257756cb7fd2eb2de81515))
* clear selection on undo/redo ([#2385](https://github.com/superdoc-dev/superdoc/issues/2385)) ([6473acf](https://github.com/superdoc-dev/superdoc/commit/6473acf4e846c481975554024d514a5b9480e97f))
* cli package public ([7dad84d](https://github.com/superdoc-dev/superdoc/commit/7dad84da35c78f45072907dfde94ec782b362a8f))
* cli skills install ([ed7436a](https://github.com/superdoc-dev/superdoc/commit/ed7436ab550b11d9eb1b205bce31dfa358243d29))
* **cli:** add jsdoc params to formatReplaceResult ([#1923](https://github.com/superdoc-dev/superdoc/issues/1923)) ([e52ddf9](https://github.com/superdoc-dev/superdoc/commit/e52ddf9bf010947d9435b788ab7753d136a801f1))
* **cli:** add param jsdoc to expandGlobs ([df8c3c6](https://github.com/superdoc-dev/superdoc/commit/df8c3c625be5901f4551d99318a43f47e3dfb7fb))
* **cli:** add returns jsdoc to formatSearchResult ([d0a0438](https://github.com/superdoc-dev/superdoc/commit/d0a04389b05d1f79d1c5111ed82e4feaf5b1af20))
* **cli:** document -h flag in help text ([020c4a0](https://github.com/superdoc-dev/superdoc/commit/020c4a0d58e079e1912c0773c095806bbc51eafa))
* **cli:** document -h flag in help text ([68fa42f](https://github.com/superdoc-dev/superdoc/commit/68fa42fabbbc44b41d644b9010a12fa2573e7e8c))
* **cli:** include allowed values in oneOf const validation errors ([#2455](https://github.com/superdoc-dev/superdoc/issues/2455)) ([8802f90](https://github.com/superdoc-dev/superdoc/commit/8802f90798c5c2c632b6eb6b418fc46b63e52093))
* **cli:** lowercase docx in help text ([#1928](https://github.com/superdoc-dev/superdoc/issues/1928)) ([13f9db6](https://github.com/superdoc-dev/superdoc/commit/13f9db6897a070525fe2ea4ccaf98c3be245faeb))
* **cli:** move bundled deps to devDependencies ([6a362ed](https://github.com/superdoc-dev/superdoc/commit/6a362ed87baad3d08cec2298980290ea2183c1ac))
* **cli:** normalize dash in help text ([b2e7d36](https://github.com/superdoc-dev/superdoc/commit/b2e7d36631db90863ce6ba263daff55d32220b99))
* **cli:** prevent collab reopen from overwriting existing ydoc with blank document (SD-2138) ([#2296](https://github.com/superdoc-dev/superdoc/issues/2296)) ([41b0345](https://github.com/superdoc-dev/superdoc/commit/41b0345367e32d0f053825c9f8733f1351f52760))
* **cli:** remove bundled deps from package.json ([f90d4af](https://github.com/superdoc-dev/superdoc/commit/f90d4af095a8e4cf5fca34774855a28559dec5de))
* **cli:** restore tracked diff redline roundtrip ([#2438](https://github.com/superdoc-dev/superdoc/issues/2438)) ([f609371](https://github.com/superdoc-dev/superdoc/commit/f60937167d02270646ea73f2a8474cb21e514094))
* close toolbar overflow menu on click outside ([#2377](https://github.com/superdoc-dev/superdoc/issues/2377)) ([ba74245](https://github.com/superdoc-dev/superdoc/commit/ba7424521cd003e1a6001902fc524d34e3005b3f))
* closing dropdown after clicking again ([#835](https://github.com/superdoc-dev/superdoc/issues/835)) ([88ff88d](https://github.com/superdoc-dev/superdoc/commit/88ff88d06568716d78be4fcdc311cbba0e6ba3fd))
* collaboratio tests and more scenarios ([4153017](https://github.com/superdoc-dev/superdoc/commit/4153017da205a32c853da3cbafad57fda881cc94))
* collaboration cursor styles fix ([fd6db10](https://github.com/superdoc-dev/superdoc/commit/fd6db10558caa4136da262ad10b751dbb4bdac2c))
* **collaboration:** add debouncing to header/footer Y.Doc updates ([#1861](https://github.com/superdoc-dev/superdoc/issues/1861)) ([90d0f65](https://github.com/superdoc-dev/superdoc/commit/90d0f6549e9c207e127da72466a41c63035c7c85))
* **collaboration:** deduplicate updateYdocDocxData during replaceFile (SD-1920) ([#2162](https://github.com/superdoc-dev/superdoc/issues/2162)) ([52962fc](https://github.com/superdoc-dev/superdoc/commit/52962fc139734130a6882c9fcbd1856ff72d1c3d))
* **collaboration:** memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924) ([#2030](https://github.com/superdoc-dev/superdoc/issues/2030)) ([a6827fd](https://github.com/superdoc-dev/superdoc/commit/a6827fdda860171124aae4838d354dd68d52d017)), closes [#prepareDocumentForExport](https://github.com/superdoc-dev/superdoc/issues/prepareDocumentForExport)
* **collaboration:** preserve body section properties across Yjs sync ([#2356](https://github.com/superdoc-dev/superdoc/issues/2356)) ([ea702d6](https://github.com/superdoc-dev/superdoc/commit/ea702d6dd7d8c96f6d0dac83e34f24924d1f9fa7))
* **collab:** prevent stale view when remote Y.js changes bypass sdBlockRev increment ([#2099](https://github.com/superdoc-dev/superdoc/issues/2099)) ([0895a93](https://github.com/superdoc-dev/superdoc/commit/0895a93bb9e718f4f533a55e8f4022ed0ebc97bc))
* comment text after enter break is dropped on render and export ([#1853](https://github.com/superdoc-dev/superdoc/issues/1853)) ([ce7f553](https://github.com/superdoc-dev/superdoc/commit/ce7f5534afaa8e46cb4d4e41fb6478575dea26e3))
* comments focus ([cbd3d3e](https://github.com/superdoc-dev/superdoc/commit/cbd3d3ee35a4b6758702b3893e95c5a77dd404ca))
* comments module typedef for disable [stable] ([#1494](https://github.com/superdoc-dev/superdoc/issues/1494)) ([bdac63c](https://github.com/superdoc-dev/superdoc/commit/bdac63c05f8f8ae122023d4eee70450ac12695a5))
* comments not exporting ([e3647a7](https://github.com/superdoc-dev/superdoc/commit/e3647a7e3d6a8db7e00f10616b01304e9ca77a39))
* comments not exporting ([#1246](https://github.com/superdoc-dev/superdoc/issues/1246)) ([d967d5e](https://github.com/superdoc-dev/superdoc/commit/d967d5eb88833f1c77f3be667cf831ce0191b067))
* comments not repositioning after you add comment to existing dialog ([ffa51ae](https://github.com/superdoc-dev/superdoc/commit/ffa51ae37913c6674431b94f56081b9d7adb36f2))
* **comments:** create dynamic comment export system based on document origin type ([#1733](https://github.com/superdoc-dev/superdoc/issues/1733)) ([b55fddf](https://github.com/superdoc-dev/superdoc/commit/b55fddf429549f462e1b61747c89e2ab85ad4d45)), closes [#1618](https://github.com/superdoc-dev/superdoc/issues/1618)
* **comments:** cross-page collision avoidance for floating comment bubbles (SD-1998) ([#2180](https://github.com/superdoc-dev/superdoc/issues/2180)) ([6cfbeca](https://github.com/superdoc-dev/superdoc/commit/6cfbecae5e8579556a377b7a35168cbb7cfce31f))
* **comments:** emit empty comment positions so undo clears orphan bubbles ([#2235](https://github.com/superdoc-dev/superdoc/issues/2235)) ([12ba727](https://github.com/superdoc-dev/superdoc/commit/12ba72709fc37f207c97305852f40ef4e393893b))
* **comments:** improve comments on tracked changes imported from google docs and word [SD-1033] ([#1631](https://github.com/superdoc-dev/superdoc/issues/1631)) ([1d8873a](https://github.com/superdoc-dev/superdoc/commit/1d8873ae372a65d16c5f46c4dee9980e8159c6e2))
* **comments:** improve multiline comment input styling ([#2242](https://github.com/superdoc-dev/superdoc/issues/2242)) ([e6a0dab](https://github.com/superdoc-dev/superdoc/commit/e6a0dab8abca8a24c5e0c8a9096c357df28eaf8a))
* **comments:** keep floating comment bubbles aligned with the selected thread (SD-2210 and SD-2223) ([#2390](https://github.com/superdoc-dev/superdoc/issues/2390)) ([b014618](https://github.com/superdoc-dev/superdoc/commit/b014618d70ffd92d587033212cd965fe49dfe730))
* **comments:** pass superdoc instance when canceling pending comment ([#1862](https://github.com/superdoc-dev/superdoc/issues/1862)) ([4982bac](https://github.com/superdoc-dev/superdoc/commit/4982bac97c5f7e141d7029b9ba7b832ee509e165))
* **comments:** preserve resolved comment status and range on export ([#1674](https://github.com/superdoc-dev/superdoc/issues/1674)) ([390e40a](https://github.com/superdoc-dev/superdoc/commit/390e40afc2358e7ad4f1f90e9c6ea3044f94ec73))
* **comments:** prevent comment mark from extending to adjacent typed text ([#2241](https://github.com/superdoc-dev/superdoc/issues/2241)) ([07fecd8](https://github.com/superdoc-dev/superdoc/commit/07fecd8f0f6c88f338b59fca6105467cf66cc7ab))
* **comments:** reduce sidebar jitter when clicking comments (SD-2034) ([#2250](https://github.com/superdoc-dev/superdoc/issues/2250)) ([c3568d2](https://github.com/superdoc-dev/superdoc/commit/c3568d2d6fc4d91125cede042084ed124a9b2072))
* **comments:** remove synchronous dispatch from plugin apply() (SD-1940) ([#2157](https://github.com/superdoc-dev/superdoc/issues/2157)) ([887175b](https://github.com/superdoc-dev/superdoc/commit/887175bf29b3dc86cf56865311d488b377b36aaf))
* **comments:** resolve double-click activation and edit mode issues (SD-2035) ([#2259](https://github.com/superdoc-dev/superdoc/issues/2259)) ([d9465aa](https://github.com/superdoc-dev/superdoc/commit/d9465aad87bc3fcd2c263faf06e6ecc94cd68ea0))
* **comments:** use last paragraph paraId for threading ([#1671](https://github.com/superdoc-dev/superdoc/issues/1671)) ([50ffea6](https://github.com/superdoc-dev/superdoc/commit/50ffea69cfe167f895b65d0b36f0d9d41e15e6f7))
* consider code feedback ([a5c1147](https://github.com/superdoc-dev/superdoc/commit/a5c11472681c46ebe9726773acb8d4d90c5a9b6b))
* consider code review comments ([4360b4d](https://github.com/superdoc-dev/superdoc/commit/4360b4da2e340ea0088afc208de85d493bf4a0fd))
* console log ([4b64109](https://github.com/superdoc-dev/superdoc/commit/4b64109b92623cfb7582774c45f96cac47a8280f))
* consolidate deletions under new replacement ([#2094](https://github.com/superdoc-dev/superdoc/issues/2094)) ([0a84b86](https://github.com/superdoc-dev/superdoc/commit/0a84b8604c9a30ed2755cfd0ecc7694e1999c6eb))
* content not editable on safari ([#1304](https://github.com/superdoc-dev/superdoc/issues/1304)) ([9972b1f](https://github.com/superdoc-dev/superdoc/commit/9972b1f9da7a4a7d090488aab159a85fb1c81a96))
* content-block node ext wrong schema and rendering rules ([#965](https://github.com/superdoc-dev/superdoc/issues/965)) ([64fa2fc](https://github.com/superdoc-dev/superdoc/commit/64fa2fc2a1a52d2700c0e820b6384b87e8d3bf35))
* content-block node ext wrong schema and rendering rules ([#965](https://github.com/superdoc-dev/superdoc/issues/965)) ([#966](https://github.com/superdoc-dev/superdoc/issues/966)) ([f037f44](https://github.com/superdoc-dev/superdoc/commit/f037f44eddfa3fd31cd36f4f8b4dbfb6300437ee))
* context menu bypass standards ([#1029](https://github.com/superdoc-dev/superdoc/issues/1029)) ([99e6bf7](https://github.com/superdoc-dev/superdoc/commit/99e6bf70244116f5be464737dc03d7e1b2dc4f83))
* context menu bypass standards ([#1032](https://github.com/superdoc-dev/superdoc/issues/1032)) ([8c80c2c](https://github.com/superdoc-dev/superdoc/commit/8c80c2cc92a531e2296de9d7d03c8a85ea415da6))
* context menu clicks would change selection position ([#1889](https://github.com/superdoc-dev/superdoc/issues/1889)) ([ace0daf](https://github.com/superdoc-dev/superdoc/commit/ace0dafcf58535ec0ba6ff48efcd7ee113b021ce))
* **context-menu:** paste via context menu inserts at wrong position (SD-1302) ([#2110](https://github.com/superdoc-dev/superdoc/issues/2110)) ([30f03f9](https://github.com/superdoc-dev/superdoc/commit/30f03f93b59261a7fce55e7d62cc83897b457afd))
* contextual spacing in layout engine ([#1587](https://github.com/superdoc-dev/superdoc/issues/1587)) ([52188ca](https://github.com/superdoc-dev/superdoc/commit/52188ca89d879f7081ff8c6bb8e8d1cb8ea28ef8))
* convert var to zero when undefined ([ccf3478](https://github.com/superdoc-dev/superdoc/commit/ccf34784007e7faea0c2e64d25a466d4648637e3))
* **converter:** handle absolute paths in header/footer relationship targets ([#1945](https://github.com/superdoc-dev/superdoc/issues/1945)) ([9d82632](https://github.com/superdoc-dev/superdoc/commit/9d82632c62a70cc6cb19015f9fca89b3f28a4323))
* **converter:** handle empty rPrChange run properties without dropping tracked-style runs ([c25d24d](https://github.com/superdoc-dev/superdoc/commit/c25d24d35534c39836c3251ee9baf1b908a6c78c))
* **converter:** handle null list lvlText and always clear numbering cache ([#2113](https://github.com/superdoc-dev/superdoc/issues/2113)) ([336958c](https://github.com/superdoc-dev/superdoc/commit/336958ca9b39ebcc436fc77fb1daae82ddbd8b0c))
* correct cursor position when typing after fully track-deleted content ([#1828](https://github.com/superdoc-dev/superdoc/issues/1828)) ([8de1c5f](https://github.com/superdoc-dev/superdoc/commit/8de1c5f142fae6b2362d3640b698fe6277ab45d7))
* correct indentation for table cells with explicit tab positioning ([#1743](https://github.com/superdoc-dev/superdoc/issues/1743)) ([1fd6b74](https://github.com/superdoc-dev/superdoc/commit/1fd6b74a95c0eae8b1b23c27e7046ae529c95fc3))
* correct typeof comparison in list migration ([6a75ef7](https://github.com/superdoc-dev/superdoc/commit/6a75ef79dc4aaced07fcdd0537b53fed99cb35e7))
* correct typo in exporter debug parameter ([eb7c45d](https://github.com/superdoc-dev/superdoc/commit/eb7c45d5ac9b3d666c130598848398949c225c34)), closes [#generate_xml_as_list](https://github.com/superdoc-dev/superdoc/issues/generate_xml_as_list)
* correctly pass table info when deriving inline run properties (SD-1865) ([#2007](https://github.com/superdoc-dev/superdoc/issues/2007)) ([d752aff](https://github.com/superdoc-dev/superdoc/commit/d752afff9dc11041798ea2a28d487cc190e13383))
* correctly position vector shape relative to paragraph ([#1687](https://github.com/superdoc-dev/superdoc/issues/1687)) ([4c38cb9](https://github.com/superdoc-dev/superdoc/commit/4c38cb9145c2256f2ff289338fb5cf58ecf3a4c7))
* correctly set color and highlight of pasted text ([#2033](https://github.com/superdoc-dev/superdoc/issues/2033)) ([41058b5](https://github.com/superdoc-dev/superdoc/commit/41058b5bfadbc34d83891afe88c6b8c24505f83c))
* create document section node selection ([dfd2e81](https://github.com/superdoc-dev/superdoc/commit/dfd2e81beaacd676099e43a5a65d42d55a89b462))
* create document section node selection ([60b7b26](https://github.com/superdoc-dev/superdoc/commit/60b7b26dd7c1f31b4824ddd4339c6d54db32484c))
* createNewList in input rule to fix new list in tables, lint ([aa79655](https://github.com/superdoc-dev/superdoc/commit/aa796558d84a9dda9177181d547281e668500b6e))
* creating list definitions with null ids ([#804](https://github.com/superdoc-dev/superdoc/issues/804)) ([e6511b9](https://github.com/superdoc-dev/superdoc/commit/e6511b973026f28a26ff1d25a71df2df69d99488))
* css style isolation after shape groups ([c428122](https://github.com/superdoc-dev/superdoc/commit/c428122218187c70ad54e9e8a870898993b40354))
* **css:** scope ProseMirror CSS to prevent bleeding into host apps (SD-1850) ([#2134](https://github.com/superdoc-dev/superdoc/issues/2134)) ([b9d98fa](https://github.com/superdoc-dev/superdoc/commit/b9d98fa926532f63c71c55ed8bb5b89019ee4246))
* cursor delay when dragging over a document ([#1802](https://github.com/superdoc-dev/superdoc/issues/1802)) ([58691f1](https://github.com/superdoc-dev/superdoc/commit/58691f1f1573fb18ad724a78db454d33d3c3e99f))
* cursor drift during vertical arrow navigation (SD-1689) ([#1918](https://github.com/superdoc-dev/superdoc/issues/1918)) ([982118d](https://github.com/superdoc-dev/superdoc/commit/982118df475b3178351713f0c00f6fe447853c61))
* declare w15 namespace when bootstrapping numbering.xml ([#2470](https://github.com/superdoc-dev/superdoc/issues/2470)) ([a14004d](https://github.com/superdoc-dev/superdoc/commit/a14004def510008cd70994ce6e82916986a673f7))
* default field export background transparent, allow config on export ([#770](https://github.com/superdoc-dev/superdoc/issues/770)) ([1ab87d1](https://github.com/superdoc-dev/superdoc/commit/1ab87d1daa3c878dd1ca4461a003e826d5760b6b))
* definition possibly missing name key, add jsdoc ([bb714f1](https://github.com/superdoc-dev/superdoc/commit/bb714f14635239301ed6931bb06259b299b11fa8))
* delete decoration widget blocks parent list item ([#1200](https://github.com/superdoc-dev/superdoc/issues/1200)) ([4b58fd6](https://github.com/superdoc-dev/superdoc/commit/4b58fd62471dbef99a36972963fb3403b621b118))
* deleting tracked change in suggestion to match word ([#1710](https://github.com/superdoc-dev/superdoc/issues/1710)) ([d6e780f](https://github.com/superdoc-dev/superdoc/commit/d6e780f8fc753cb6cd94d4317f482c997b9bc9a5))
* **diffing:** ignore volatile OOXML attrs in image and paragraph diff comparison ([#2421](https://github.com/superdoc-dev/superdoc/issues/2421)) ([ca91225](https://github.com/superdoc-dev/superdoc/commit/ca912256f5f66a2504372b8ebced154f8bbcb695))
* disable footnotes typing ([#1974](https://github.com/superdoc-dev/superdoc/issues/1974)) ([92b4d62](https://github.com/superdoc-dev/superdoc/commit/92b4d6288a48275435660ae2a848b064506390f6))
* disable setDocumentMode for header/footer editors ([#1149](https://github.com/superdoc-dev/superdoc/issues/1149)) ([ab75952](https://github.com/superdoc-dev/superdoc/commit/ab75952e9a90b3c28484054517fb91f0935b2b56))
* disable table resizing UI in viewing mode ([#2403](https://github.com/superdoc-dev/superdoc/issues/2403)) ([697e799](https://github.com/superdoc-dev/superdoc/commit/697e799a472527c84414327189025f65d9f3d30b))
* dispatch tracked changes transaction only once at import ([31ecec7](https://github.com/superdoc-dev/superdoc/commit/31ecec70ba08d9668f45e9a33b724d7e60cc4b66))
* do not open context menu in view only mode ([3a0ae6a](https://github.com/superdoc-dev/superdoc/commit/3a0ae6a51a95489de816fe1e3b59b5893272ece7))
* do not reposition floating comments when selected ([5edfff8](https://github.com/superdoc-dev/superdoc/commit/5edfff8a1b02f499a9f9219e1e1d1bd7b1c49b75))
* do not track the annotation deletion on table generation ([#1036](https://github.com/superdoc-dev/superdoc/issues/1036)) ([5e77dd4](https://github.com/superdoc-dev/superdoc/commit/5e77dd419ae71514b1c68f96ef4907f250c199b1))
* doc-api story regressions and export app.xml stats ([#2478](https://github.com/superdoc-dev/superdoc/issues/2478)) ([d06ff4e](https://github.com/superdoc-dev/superdoc/commit/d06ff4e953538be2e54f9a8d54bacac0a0233cea))
* **doc-api:** gate textStyle attrs and sync reference coverage ([#2430](https://github.com/superdoc-dev/superdoc/issues/2430)) ([e2d6ca6](https://github.com/superdoc-dev/superdoc/commit/e2d6ca60a6c268e83dc74d84d9211cb7c5891574))
* **doc-api:** stabilize create composability and expand SDK surface ([fc17167](https://github.com/superdoc-dev/superdoc/commit/fc1716721b7c15b3fd1ac5724e48cc709a9fd986))
* **docs:** coherence pass on doc api, clean up dead code, update CLI SKILL.md ([#2424](https://github.com/superdoc-dev/superdoc/issues/2424)) ([bf0d4b8](https://github.com/superdoc-dev/superdoc/commit/bf0d4b8ff127d27e2604720f215f39ec9c2a23ce))
* document dropdown resets ([#1883](https://github.com/superdoc-dev/superdoc/issues/1883)) ([b552d2e](https://github.com/superdoc-dev/superdoc/commit/b552d2e272d7f8b19e1bf2400c58fec9fed30f16))
* document margins corner cases ([#1589](https://github.com/superdoc-dev/superdoc/issues/1589)) ([3dcc97c](https://github.com/superdoc-dev/superdoc/commit/3dcc97c3ced541fe647aa3926cad65e7508dd6f6))
* document-api improvements, plan mode, query.match, mutations ([6221580](https://github.com/superdoc-dev/superdoc/commit/62215805c969a80445f9e410fd5fb2478b8c38a5))
* **document-api:** add document diff API and fix tracked diff replay in CLI host session ([#2418](https://github.com/superdoc-dev/superdoc/issues/2418)) ([2a804f7](https://github.com/superdoc-dev/superdoc/commit/2a804f790fbc131578df7256eac137f3d1f320c3))
* **document-api:** add friendlier insert at node id with offset, or pos ([#2128](https://github.com/superdoc-dev/superdoc/issues/2128)) ([c1d3682](https://github.com/superdoc-dev/superdoc/commit/c1d3682e15dc7c99b1450c2f008f6f937729fc39))
* **document-api:** add mutation-ready cell addresses to tables.getCells ([#2461](https://github.com/superdoc-dev/superdoc/issues/2461)) ([99bd4e5](https://github.com/superdoc-dev/superdoc/commit/99bd4e56f5e344437688d53ac4ed010cafed0e8d))
* **document-api:** add nodeId shorthand resolution across all operations ([#2131](https://github.com/superdoc-dev/superdoc/issues/2131)) ([8abdaad](https://github.com/superdoc-dev/superdoc/commit/8abdaadd7dda2ef4751d040527adab61c06f3c48))
* **document-api:** clear styles before paragraph.setStyle ([#2449](https://github.com/superdoc-dev/superdoc/issues/2449)) ([bce4bb8](https://github.com/superdoc-dev/superdoc/commit/bce4bb85bf8be54d6c6312ea184d7ea6bfd26e4e))
* **document-api:** delete table cell fix ([#2209](https://github.com/superdoc-dev/superdoc/issues/2209)) ([5e5c43f](https://github.com/superdoc-dev/superdoc/commit/5e5c43fe1b63703308cdbd3a1dd01d121ea5465c))
* **document-api:** distribute columns command fixes ([#2207](https://github.com/superdoc-dev/superdoc/issues/2207)) ([8f4eaf7](https://github.com/superdoc-dev/superdoc/commit/8f4eaf7efde73e26c919f77a71d180c763d636ce))
* **document-api:** fix cell shading in document api ([#2215](https://github.com/superdoc-dev/superdoc/issues/2215)) ([456f60e](https://github.com/superdoc-dev/superdoc/commit/456f60e41605a2d94c5194052cf1982bed02d1c3))
* **document-api:** fix markdown to image ([bf0e664](https://github.com/superdoc-dev/superdoc/commit/bf0e6647820c3987b4100f8f9804e413cfb33511))
* **document-api:** insert table cell ([#2210](https://github.com/superdoc-dev/superdoc/issues/2210)) ([357ee90](https://github.com/superdoc-dev/superdoc/commit/357ee9018451f7a22bc1383aed7af6149da1d8e8))
* **document-api:** make find/get treat content controls as sdt ([6688b8c](https://github.com/superdoc-dev/superdoc/commit/6688b8ccfaa3bdda53ba1a96a08a7df63ab14aef))
* **document-api:** make lists.setType preserve sequence continuity ([#2304](https://github.com/superdoc-dev/superdoc/issues/2304)) ([da09826](https://github.com/superdoc-dev/superdoc/commit/da0982647cd57b4e775794af52e1a23b3d6f2afe))
* **document-api:** plan-engine reliability fixes and error diagnostics ([#2185](https://github.com/superdoc-dev/superdoc/issues/2185)) ([abfd81b](https://github.com/superdoc-dev/superdoc/commit/abfd81b753035bfaa4429748318af1eb51ac14e3))
* **document-api:** remove search match cap and validate moveComment bounds ([6d3de67](https://github.com/superdoc-dev/superdoc/commit/6d3de67ee398f5bbdd55a589e86a5c2bf321268a))
* **document-api:** rename atRowIndex to rowIndex in tables.split ([#2473](https://github.com/superdoc-dev/superdoc/issues/2473)) ([7de2864](https://github.com/superdoc-dev/superdoc/commit/7de2864466fd582d0e6b0ffcf739c2c2dba5fa76))
* **document-api:** return fresh table ref in mutation responses ([#2453](https://github.com/superdoc-dev/superdoc/issues/2453)) ([af6de73](https://github.com/superdoc-dev/superdoc/commit/af6de73f480c061d632277e34f0c9bd8681e0a5a))
* **document-api:** return NodeAddress from find and getNode instead of SDAddress (SD-2168) ([#2342](https://github.com/superdoc-dev/superdoc/issues/2342)) ([edcb3c6](https://github.com/superdoc-dev/superdoc/commit/edcb3c6a9d85666d20b30608cf8ac6793fc2830a))
* **document-api:** split table cell command ([#2217](https://github.com/superdoc-dev/superdoc/issues/2217)) ([0b3e2b4](https://github.com/superdoc-dev/superdoc/commit/0b3e2b4fcc50c1a30dec593c0aa41e69c9b809ff))
* **document-api:** split table command ([#2214](https://github.com/superdoc-dev/superdoc/issues/2214)) ([ec31699](https://github.com/superdoc-dev/superdoc/commit/ec31699d665cd4b4f4da7e2646d77ec828604568))
* don't prevent default from CMD+F when no search icon in toolbar ([ce5dc2b](https://github.com/superdoc-dev/superdoc/commit/ce5dc2b5bb4b575197becd368f3408766039c545))
* e2e tests to run headless no CI/CD ([f1479f7](https://github.com/superdoc-dev/superdoc/commit/f1479f7521b864f35e0b7d8b017b1a91bd12703e))
* editor bundling in python CLI regression ([db0d130](https://github.com/superdoc-dev/superdoc/commit/db0d130d0296bb40deed19a8d70a5ab0fbafadbb))
* editor type ([#1702](https://github.com/superdoc-dev/superdoc/issues/1702)) ([902e745](https://github.com/superdoc-dev/superdoc/commit/902e7456c3b8ac957d19c0b7d65fd3451ce48bd6))
* **editor:** arrow key navigation across page boundaries and auto-scroll (SD-1950) ([#2191](https://github.com/superdoc-dev/superdoc/issues/2191)) ([f7961d7](https://github.com/superdoc-dev/superdoc/commit/f7961d7c2d891e4a0e9c032274abcedbf3330643)), closes [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [this.#painterHost](https://github.com/this./issues/painterHost) [#scrollScreenRectIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollScreenRectIntoView) [#scrollCaretIntoViewIfNeeded](https://github.com/superdoc-dev/superdoc/issues/scrollCaretIntoViewIfNeeded) [#scrollActiveEndIntoView](https://github.com/superdoc-dev/superdoc/issues/scrollActiveEndIntoView)
* **editor:** prevent focus loss when typing in header/footer editors (SD-1993) ([#2238](https://github.com/superdoc-dev/superdoc/issues/2238)) ([e1b8007](https://github.com/superdoc-dev/superdoc/commit/e1b80074377b221873158ce5befc8fa2a908d1a8)), closes [PresentationEditor.#flushRerenderQueue](https://github.com/PresentationEditor./issues/flushRerenderQueue)
* **editor:** prevent scroll-to-top when clicking toolbar buttons ([#2236](https://github.com/superdoc-dev/superdoc/issues/2236)) ([ab30a36](https://github.com/superdoc-dev/superdoc/commit/ab30a362e5aad17db9daa5208cbef71b5bb6dd72))
* **editor:** render styles applied inside SDT fields (SD-2011) ([#2188](https://github.com/superdoc-dev/superdoc/issues/2188)) ([9c34be3](https://github.com/superdoc-dev/superdoc/commit/9c34be39cfeb1ab77ebcd91343aaf9681a3f9b9a))
* **editor:** selection highlight flickers when dragging across mark boundaries (SD-2024) ([#2205](https://github.com/superdoc-dev/superdoc/issues/2205)) ([ba03e76](https://github.com/superdoc-dev/superdoc/commit/ba03e768fae837e4f5b8dd856ca765f76957e83c))
* effective gap ([580b52b](https://github.com/superdoc-dev/superdoc/commit/580b52b1996088cdf0bc8005ec079f909a55b840))
* emit editor exception on import/export errors ([#963](https://github.com/superdoc-dev/superdoc/issues/963)) ([700dec6](https://github.com/superdoc-dev/superdoc/commit/700dec60a36937dc7f9975c5d4bf5e3a0540133e))
* empty display label and default label ([#1621](https://github.com/superdoc-dev/superdoc/issues/1621)) ([e29e14f](https://github.com/superdoc-dev/superdoc/commit/e29e14f37c27fbad19c87c3571fa26f901d8ced4))
* empty line heights ([#1748](https://github.com/superdoc-dev/superdoc/issues/1748)) ([31ce45c](https://github.com/superdoc-dev/superdoc/commit/31ce45c9fbcc7c7e630f48a877791ea94a63c960))
* enhance AI text animation and processing ([91e2c73](https://github.com/superdoc-dev/superdoc/commit/91e2c735f1de748af974fda6ab570ba684f66311))
* ensure ruler 0 is visible ([#2487](https://github.com/superdoc-dev/superdoc/issues/2487)) ([096d9f0](https://github.com/superdoc-dev/superdoc/commit/096d9f033ccadf598a47126bc19b28a9d7990a4d))
* ensure updateListSync meta is added to run list sync plugin after list clean up ([8485e9a](https://github.com/superdoc-dev/superdoc/commit/8485e9afb134754a2c73afbfebba2db8971d0cc2))
* ensure we do not duplicate bubble text ([#1934](https://github.com/superdoc-dev/superdoc/issues/1934)) ([c41cf9e](https://github.com/superdoc-dev/superdoc/commit/c41cf9e21d763aa08546eb3445c54a078bf66d33))
* error when importing wp:anchor drawing that is an unsupported shape drawing ([dfd17ab](https://github.com/superdoc-dev/superdoc/commit/dfd17ab1673905a9c8e1812c04807ed6a8286296))
* **evals:** update evals to use updated intent based llm tools ([#2409](https://github.com/superdoc-dev/superdoc/issues/2409)) ([2d38d43](https://github.com/superdoc-dev/superdoc/commit/2d38d43f4e7ee941777a754d1a18160f97da7221))
* export docx blobs with docx mime type ([#1849](https://github.com/superdoc-dev/superdoc/issues/1849)) ([1bc466d](https://github.com/superdoc-dev/superdoc/commit/1bc466d25fc01618fa4a54f6e3c4120e43a7e89e))
* export table annotation images with sanitized media paths, add tests ([a270b2a](https://github.com/superdoc-dev/superdoc/commit/a270b2a3639adc17922ead9791088622bce3232f))
* export types ([5fc3526](https://github.com/superdoc-dev/superdoc/commit/5fc3526f1510b330d48d0c55b0b1192db17f36f1))
* exported annotations are suppressed in Google Docs ([#1061](https://github.com/superdoc-dev/superdoc/issues/1061)) ([3f8dea6](https://github.com/superdoc-dev/superdoc/commit/3f8dea65598b5e98655ad9dea79f59596c7f1c1c))
* **export:** prefix Relationship IDs with rId for valid xsd:ID ([#1855](https://github.com/superdoc-dev/superdoc/issues/1855)) ([11e67e1](https://github.com/superdoc-dev/superdoc/commit/11e67e1e4332976df279edf62f1aa33177004f9e))
* **export:** prevent DOCX corruption from entity encoding and orphaned delInstrText (SD-1943) ([#2102](https://github.com/superdoc-dev/superdoc/issues/2102)) ([56e917f](https://github.com/superdoc-dev/superdoc/commit/56e917fff93175b27529afc2c8e744b21ea3bc29)), closes [#replaceSpecialCharacters](https://github.com/superdoc-dev/superdoc/issues/replaceSpecialCharacters) [#1988](https://github.com/superdoc-dev/superdoc/issues/1988)
* **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](https://github.com/superdoc-dev/superdoc/issues/2349)) ([f6dbb40](https://github.com/superdoc-dev/superdoc/commit/f6dbb404ad998e502a49df7e0ffded9f2a236321))
* **export:** prevent DOCX corruption from UTF-16 XML parts and schema violations (SD-2170) ([#2349](https://github.com/superdoc-dev/superdoc/issues/2349)) ([fed1d6b](https://github.com/superdoc-dev/superdoc/commit/fed1d6b233fd56c699038d50788c5c1c32f6d092))
* **export:** sync document XML before numbering pruning to preserve list definitions ([36058c3](https://github.com/superdoc-dev/superdoc/commit/36058c3640d12eeba8a3cf671d4cb2b46786d1d1))
* extend custom selection plugin again to fix font size, context menu and linked styles cases ([f906f23](https://github.com/superdoc-dev/superdoc/commit/f906f233609e01555ed671b95e47f0ea074078f7))
* extract duplicate block identity normalization from docxImporter ([7f7ff93](https://github.com/superdoc-dev/superdoc/commit/7f7ff9338786ed251323fc7986e6e30cf699b3b6))
* fallback to converter titlePg if no metadata ([#1612](https://github.com/superdoc-dev/superdoc/issues/1612)) ([d5d16e9](https://github.com/superdoc-dev/superdoc/commit/d5d16e96fab02a43a9828f7332bcdbf38c1cedbe)), closes [#1639](https://github.com/superdoc-dev/superdoc/issues/1639)
* fallback to text for floating objects and show placeholder for emf image ([#916](https://github.com/superdoc-dev/superdoc/issues/916)) ([d121cd9](https://github.com/superdoc-dev/superdoc/commit/d121cd92608bb41e84d09997792e5512a9ca6faa))
* faulty TOC import/export (SD-2183) ([#2371](https://github.com/superdoc-dev/superdoc/issues/2371)) ([45b4452](https://github.com/superdoc-dev/superdoc/commit/45b4452e926cf193c662b304e24384164cbced56))
* field annotation drag and drop ([#1668](https://github.com/superdoc-dev/superdoc/issues/1668)) ([659d152](https://github.com/superdoc-dev/superdoc/commit/659d152fa5349cde16800016680d3bef92ae548e))
* field annotation export test ([f0a68f4](https://github.com/superdoc-dev/superdoc/commit/f0a68f4fa7e5563ead5479d1658daffc7417d849))
* field vs sdt import issue is fixed with new tests, fix issue in test module with comments ([825e647](https://github.com/superdoc-dev/superdoc/commit/825e64725d55d84781f1fcf74543817dea225ecb))
* filter out .rels files from header/footer processing ([b16f183](https://github.com/superdoc-dev/superdoc/commit/b16f18366a4178f9d885c50f9d0e13016a5e0df1))
* filter out invalid inline nodes in root level ([#938](https://github.com/superdoc-dev/superdoc/issues/938)) ([4d77b35](https://github.com/superdoc-dev/superdoc/commit/4d77b3512542e4548156fcee1d2cd7334e9f1a0f))
* filter out invalid inline nodes in root level ([#938](https://github.com/superdoc-dev/superdoc/issues/938)) ([#939](https://github.com/superdoc-dev/superdoc/issues/939)) ([9e1b911](https://github.com/superdoc-dev/superdoc/commit/9e1b911809cd2e713b9ba8a38b88c9558f552ee0))
* find tracked change for firefox ([#1899](https://github.com/superdoc-dev/superdoc/issues/1899)) ([a39cb68](https://github.com/superdoc-dev/superdoc/commit/a39cb683df898ca9a41b4c7f54d3d2f8e48ea8f1))
* first page multi section logic, other numbering ([#1641](https://github.com/superdoc-dev/superdoc/issues/1641)) ([48856ea](https://github.com/superdoc-dev/superdoc/commit/48856ea536d5f73e25b8f20a7c4476e388d2156d))
* fix issue with moved cleanUpListsWithAnnotations, move both clean up functions ([72689cd](https://github.com/superdoc-dev/superdoc/commit/72689cd4d17faf3303e458692eff14cab8a0fae7))
* flatten find result ([#2299](https://github.com/superdoc-dev/superdoc/issues/2299)) ([bf4f3cd](https://github.com/superdoc-dev/superdoc/commit/bf4f3cdef1fce558bf0f3444eab5e839e1bf9d09))
* floating comments not appearing on first load ([#1221](https://github.com/superdoc-dev/superdoc/issues/1221)) ([b3e72d0](https://github.com/superdoc-dev/superdoc/commit/b3e72d0dbeefaa88a8614d889665668c95269d98))
* floating comments not appearing on first load ([#1221](https://github.com/superdoc-dev/superdoc/issues/1221)) ([c8656ca](https://github.com/superdoc-dev/superdoc/commit/c8656ca4cdeca1bc484fdaaf9c7ea584915a6c24))
* footer formatting issues(HAR-10117) ([5018e9a](https://github.com/superdoc-dev/superdoc/commit/5018e9aa6249bb2242b5d3ee94001bf1627dedfc))
* force track changes if input type is programmatic ([#1199](https://github.com/superdoc-dev/superdoc/issues/1199)) ([c6e2a17](https://github.com/superdoc-dev/superdoc/commit/c6e2a173a40624a1d8c6d87cb9cb2007588eacf1))
* format conditional ([28d5ade](https://github.com/superdoc-dev/superdoc/commit/28d5adebfcd787710c23f2cc059d5d221cc35097))
* **format:** route format.caps through textTransform so w:caps persists on export ([#2297](https://github.com/superdoc-dev/superdoc/issues/2297)) ([8e771e2](https://github.com/superdoc-dev/superdoc/commit/8e771e2d2ea75d4bc72bc7f589fd9279f8027478))
* formatting issues ([#773](https://github.com/superdoc-dev/superdoc/issues/773)) ([a992f68](https://github.com/superdoc-dev/superdoc/commit/a992f68cd323d02e6cf60f0609d039996c40a462))
* grab tracked change from inline node for contextMenu ([#1113](https://github.com/superdoc-dev/superdoc/issues/1113)) ([ff20085](https://github.com/superdoc-dev/superdoc/commit/ff200851eab4fb2a961b8749c010a40f1d20953a))
* guard against null editor ref in telemetry handler ([#1763](https://github.com/superdoc-dev/superdoc/issues/1763)) ([16b3a9a](https://github.com/superdoc-dev/superdoc/commit/16b3a9a2d4f5155ea967b4bbe6c2aadb996daef0))
* guard drawing export against invalid structures and zero IDs (SD-824) ([#2363](https://github.com/superdoc-dev/superdoc/issues/2363)) ([9c7fc2e](https://github.com/superdoc-dev/superdoc/commit/9c7fc2e61144365fc33f64fefd324ec894429a51))
* guarding against component init when ref is null ([#1746](https://github.com/superdoc-dev/superdoc/issues/1746)) ([253eeea](https://github.com/superdoc-dev/superdoc/commit/253eeeab9a28d5c2b771385d0d812e501f20ac55))
* guarding replaceSpecialCharacters against non-strings ([#794](https://github.com/superdoc-dev/superdoc/issues/794)) ([7f18834](https://github.com/superdoc-dev/superdoc/commit/7f188349896273093b9237e9bf58b7a18ddfe046))
* handle fldSimple syntax for page number fields ([#1755](https://github.com/superdoc-dev/superdoc/issues/1755)) ([8325783](https://github.com/superdoc-dev/superdoc/commit/83257837cc3123e6696a8fd231e96a4b31411c1b))
* handle table cell borders from styles ([#1722](https://github.com/superdoc-dev/superdoc/issues/1722)) ([6ef1a11](https://github.com/superdoc-dev/superdoc/commit/6ef1a1138adf23e9873a642aa63327f20724396b))
* handle Uint8Array media values from persistence layers ([#2298](https://github.com/superdoc-dev/superdoc/issues/2298)) ([0d4505c](https://github.com/superdoc-dev/superdoc/commit/0d4505c77ac1c44939e8f7874a08f827a7a8e08c))
* handling absolute paths for relationships ([#1811](https://github.com/superdoc-dev/superdoc/issues/1811)) ([8647358](https://github.com/superdoc-dev/superdoc/commit/864735874e93a8570e83372213f6d7ae96557a32))
* hanging indent in tables ([#1647](https://github.com/superdoc-dev/superdoc/issues/1647)) ([ee8a206](https://github.com/superdoc-dev/superdoc/commit/ee8a206378f0941fb2fa4ea02842fd3629f43350))
* **har-10122:** toolbar styles are missing ([08365df](https://github.com/superdoc-dev/superdoc/commit/08365df5c9f73d7f215d9f18a4fcccd32f06cc3f))
* **har-10122:** toolbar styles are missing ([eb7a599](https://github.com/superdoc-dev/superdoc/commit/eb7a5997b570814d50255794ce27ad834f6c4ff9))
* **har-10122:** update compiler options ([2e108f0](https://github.com/superdoc-dev/superdoc/commit/2e108f04414a787d8a2f76f2ac421fd822afe147))
* **har-10122:** update compiler options ([a434993](https://github.com/superdoc-dev/superdoc/commit/a434993f4927a747c4e66a25c035d86ec5ef5876))
* har-10158 - fix comments highlighting and identify ([3dfae1c](https://github.com/superdoc-dev/superdoc/commit/3dfae1cd16a9099ec768c58c836fd3e630f551dd))
* har-10195 highlight tracked changes comment ([1c7be69](https://github.com/superdoc-dev/superdoc/commit/1c7be6904f809477874092f5e1a1aa59afc07b93))
* harden markdown image conversion ([4ba1c25](https://github.com/superdoc-dev/superdoc/commit/4ba1c254c77aaa37f552f2ad9fd06ec55e802b23))
* header images that extend past area should be behind content ([#1669](https://github.com/superdoc-dev/superdoc/issues/1669)) ([bf7d679](https://github.com/superdoc-dev/superdoc/commit/bf7d6798c7698b884734b32b70993acb0bfa0cd0))
* **header-footer:** normalize page-relative anchor layout ([#2484](https://github.com/superdoc-dev/superdoc/issues/2484)) ([6e62198](https://github.com/superdoc-dev/superdoc/commit/6e6219876f54625f17ef7db87cbfa71547472970))
* header/footer collapsing from image placement ([#1575](https://github.com/superdoc-dev/superdoc/issues/1575)) ([1ca9165](https://github.com/superdoc-dev/superdoc/commit/1ca91659205b3cfd200f8b11c8a4ade143a452d7))
* header/footer collapsing from image placement ([#1575](https://github.com/superdoc-dev/superdoc/issues/1575)) ([2a443d8](https://github.com/superdoc-dev/superdoc/commit/2a443d86b0b3e25256d5389e41a0f2833f6f9f91))
* header/footer double click to edit ([#1814](https://github.com/superdoc-dev/superdoc/issues/1814)) ([b4041d5](https://github.com/superdoc-dev/superdoc/commit/b4041d55773d39feba3f3bb606f3723e63495a60))
* header/footer sizes ([#1666](https://github.com/superdoc-dev/superdoc/issues/1666)) ([9cd0cce](https://github.com/superdoc-dev/superdoc/commit/9cd0ccebe0b07dbdace54a8a2c7fb06fdd225b01))
* headers/footers that extend past their size are clipped ([#1630](https://github.com/superdoc-dev/superdoc/issues/1630)) ([3e689fb](https://github.com/superdoc-dev/superdoc/commit/3e689fbbeaf156cdba6ff3a0c8dd6d2391b7d23a))
* headless mode crash ([#1002](https://github.com/superdoc-dev/superdoc/issues/1002)) ([08a72cb](https://github.com/superdoc-dev/superdoc/commit/08a72cbf0005804e746eea98caf19b658a597a6d))
* headless yjs ([#1913](https://github.com/superdoc-dev/superdoc/issues/1913)) ([4cdecf7](https://github.com/superdoc-dev/superdoc/commit/4cdecf7c592f8fbf23655b05200c36b9edfb6d7e))
* hide tools bubble on cursor change ([#1678](https://github.com/superdoc-dev/superdoc/issues/1678)) ([1fb865d](https://github.com/superdoc-dev/superdoc/commit/1fb865d48d40045ed5be2dcd0692334a8aa5bdc7))
* highlight selected value in font dropdowns ([#869](https://github.com/superdoc-dev/superdoc/issues/869)) ([4a30f59](https://github.com/superdoc-dev/superdoc/commit/4a30f59b3efbdbf3abbeca0e12af38fe980ed03b))
* horizontal rule ([#1875](https://github.com/superdoc-dev/superdoc/issues/1875)) ([4b3b92e](https://github.com/superdoc-dev/superdoc/commit/4b3b92ee168adcc06c7c4c927716ebcfec94311e))
* html import parse styleId attr for round-trip fidelity ([#974](https://github.com/superdoc-dev/superdoc/issues/974)) ([929fffa](https://github.com/superdoc-dev/superdoc/commit/929fffa511faeff18ddedb63eb039971c430949c))
* html paste processing ([1777394](https://github.com/superdoc-dev/superdoc/commit/177739490dff0ce4a9980effc834ef9fd2c71ac1))
* hyperlink export causes issues in Word ([#1121](https://github.com/superdoc-dev/superdoc/issues/1121)) ([8c61646](https://github.com/superdoc-dev/superdoc/commit/8c6164625dba72b0bc8d53dfdd254c18de3f9a50))
* ignore sdBlockId when pasting content ([#2010](https://github.com/superdoc-dev/superdoc/issues/2010)) ([1b08572](https://github.com/superdoc-dev/superdoc/commit/1b08572ef696dfe9fb45cd079c4381bd86c3b2d3))
* image annotation export in tables ([#1004](https://github.com/superdoc-dev/superdoc/issues/1004)) ([1e36934](https://github.com/superdoc-dev/superdoc/commit/1e3693438031b7d315d4b94e246a355d3c378a65))
* **image annotations:** missed image on export ([077cea6](https://github.com/superdoc-dev/superdoc/commit/077cea62d618a95d844255876350eac542b70157))
* image node resizer ([#1603](https://github.com/superdoc-dev/superdoc/issues/1603)) ([1946578](https://github.com/superdoc-dev/superdoc/commit/1946578ff5821733ce344a502fa647c28f5d8521))
* image z-index and overlaps ([#1950](https://github.com/superdoc-dev/superdoc/issues/1950)) ([39875ac](https://github.com/superdoc-dev/superdoc/commit/39875acda1a1799f52d433d463739926e73eea61))
* **image:** preserve anchored rotation margins and add coverage ([#1013](https://github.com/superdoc-dev/superdoc/issues/1013)) ([15aaba7](https://github.com/superdoc-dev/superdoc/commit/15aaba7725b233b27c22d0ceb70113cd0aada779))
* images are missing for the document in edit mode ([#831](https://github.com/superdoc-dev/superdoc/issues/831)) ([a9af47e](https://github.com/superdoc-dev/superdoc/commit/a9af47ed4def516900b14460218e476374c69a80))
* images breaking on export ([#1182](https://github.com/superdoc-dev/superdoc/issues/1182)) ([82af973](https://github.com/superdoc-dev/superdoc/commit/82af973a0388091ad5fbb90cbefc6c9699faadd5))
* images uploaded are dropped on export ([#1186](https://github.com/superdoc-dev/superdoc/issues/1186)) ([77922c6](https://github.com/superdoc-dev/superdoc/commit/77922c66f2261b8ff9856dd265fe8124fa6717c9))
* **images:** restore image TopAndBottom centering and column-left float ([94e02bd](https://github.com/superdoc-dev/superdoc/commit/94e02bd54968bc8340c384165a9b63e0249012b4))
* **image:** sync headless image media to Y.Doc for collab persistence ([#2313](https://github.com/superdoc-dev/superdoc/issues/2313)) ([72c64ed](https://github.com/superdoc-dev/superdoc/commit/72c64ed11e031cee4f15413eee403d93b08c1ec7))
* import alignment from injected html ([#1068](https://github.com/superdoc-dev/superdoc/issues/1068)) ([0cdb9ea](https://github.com/superdoc-dev/superdoc/commit/0cdb9eab72bc68ba64996348bb701bacf4fbfbf4))
* import alignment from injected html ([#1068](https://github.com/superdoc-dev/superdoc/issues/1068)) ([#1069](https://github.com/superdoc-dev/superdoc/issues/1069)) ([38f44a9](https://github.com/superdoc-dev/superdoc/commit/38f44a954d8044754d4d5d978d3f7ce58c4e122f))
* import issue falling back to wrong abstratId ([#930](https://github.com/superdoc-dev/superdoc/issues/930)) ([94b0679](https://github.com/superdoc-dev/superdoc/commit/94b067924d0311b8433e24e2c98cdd9da61d39ae))
* import issue falling back to wrong abstratId ([#930](https://github.com/superdoc-dev/superdoc/issues/930)) ([a5b43d0](https://github.com/superdoc-dev/superdoc/commit/a5b43d036133217d6f15661f3b1666d621fee049))
* import regression ([#2452](https://github.com/superdoc-dev/superdoc/issues/2452)) ([cac5e24](https://github.com/superdoc-dev/superdoc/commit/cac5e2426edf5b747ed9dd6231e5d080ef1923c3))
* import/export of missing pict separators ([#1048](https://github.com/superdoc-dev/superdoc/issues/1048)) ([8320a2c](https://github.com/superdoc-dev/superdoc/commit/8320a2c92f81cde20db871828f9daf14a9b3e40e))
* **importer:** retain gdocs comments without extended metadata ([#1017](https://github.com/superdoc-dev/superdoc/issues/1017)) ([c232308](https://github.com/superdoc-dev/superdoc/commit/c232308289473b41f071326cf8edd1d658e7310e))
* **importer:** wrap root-level inline nodes in paragraphs and disallow marks on passthroughInline ([#1804](https://github.com/superdoc-dev/superdoc/issues/1804)) ([7d0a752](https://github.com/superdoc-dev/superdoc/commit/7d0a7528493c2c7cea96ac72632db1f14f1f7fbc))
* imports encoded in utf-16 break DocxZipper ([#860](https://github.com/superdoc-dev/superdoc/issues/860)) ([3a1be24](https://github.com/superdoc-dev/superdoc/commit/3a1be24798490147dad3d39fc66e1bcac86d7875))
* improve backspace behavior near run boundaries for tracked changes ([#2175](https://github.com/superdoc-dev/superdoc/issues/2175)) ([6c9c7a3](https://github.com/superdoc-dev/superdoc/commit/6c9c7a3d72ed78717297cd48530f4629c9c680c4))
* improve document API dry runs, query matching, and reference block mutations ([#2498](https://github.com/superdoc-dev/superdoc/issues/2498)) ([5959c5f](https://github.com/superdoc-dev/superdoc/commit/5959c5f9fa7696ce34025c175a05ee610f7e12f4))
* improve floating comments offset calculation and scrolling behavior ([2ae0b62](https://github.com/superdoc-dev/superdoc/commit/2ae0b62def80c0acf52ad84389914a6324250bb9))
* improve index mapping for text nodes and handle transparent inline nodes ([#1216](https://github.com/superdoc-dev/superdoc/issues/1216)) ([2ed5d3a](https://github.com/superdoc-dev/superdoc/commit/2ed5d3a7401c90e0a4fd02294c66b34bc7da9af2))
* improve marker width calculation for server-side rendering ([#801](https://github.com/superdoc-dev/superdoc/issues/801)) ([85205c1](https://github.com/superdoc-dev/superdoc/commit/85205c1aa014fc0dfae37e2f3d4624b1a2abe743)), closes [#log](https://github.com/superdoc-dev/superdoc/issues/log)
* improve multi-column rendering ([#2369](https://github.com/superdoc-dev/superdoc/issues/2369)) ([d231640](https://github.com/superdoc-dev/superdoc/commit/d2316402dcbdf66d9a3c879ad3af80b3fa6f6a62))
* improve null handling and clean up code in translateList and related functions ([09c88e4](https://github.com/superdoc-dev/superdoc/commit/09c88e447d6d4956616e0fe6af0d5ae1c609437c))
* improve performance ([#1169](https://github.com/superdoc-dev/superdoc/issues/1169)) ([e626e28](https://github.com/superdoc-dev/superdoc/commit/e626e283f160b55e2ccacda1273d3d347bbef99b))
* improve selection bounds calculation for floating comments ([7d9306d](https://github.com/superdoc-dev/superdoc/commit/7d9306d8b6c1505ffaf906db6298e07810ff01c1))
* include doc default fonts and stabilize linked-style run properties ([b2d9fc9](https://github.com/superdoc-dev/superdoc/commit/b2d9fc977198ee3c131659ec312e0fdb4309af2e))
* include tracked change date fix ([#1384](https://github.com/superdoc-dev/superdoc/issues/1384)) ([10dbd16](https://github.com/superdoc-dev/superdoc/commit/10dbd16e071522ed3f5a6c8be7f2d36d605e9bba))
* incorrect list counter calculation (SD-1658) ([#1867](https://github.com/superdoc-dev/superdoc/issues/1867)) ([a960a65](https://github.com/superdoc-dev/superdoc/commit/a960a656235d2c4daa7b5f169e79bfba5f057ff6))
* increase/decrease indent for all selected list items ([#1192](https://github.com/superdoc-dev/superdoc/issues/1192)) ([0bcee03](https://github.com/superdoc-dev/superdoc/commit/0bcee0315113e9804d7c80d3e50281307143c70e))
* indents from linked styles ([#1679](https://github.com/superdoc-dev/superdoc/issues/1679)) ([70bc68c](https://github.com/superdoc-dev/superdoc/commit/70bc68c07f7603f6f4845febe562f5fd6b72b5a1))
* infinite loop when paginating if top margin = header margin, zero margins ([84f7623](https://github.com/superdoc-dev/superdoc/commit/84f7623c57234385f2c7d47bc3ee96ee93c1e9a5))
* infinite loop when paginating if top margin = header margin, zero margins ([#1610](https://github.com/superdoc-dev/superdoc/issues/1610)) ([f6448e4](https://github.com/superdoc-dev/superdoc/commit/f6448e45feae535dd1e982c1d5fd87f26f578416))
* initial line drift fix ([#1590](https://github.com/superdoc-dev/superdoc/issues/1590)) ([f6af6e6](https://github.com/superdoc-dev/superdoc/commit/f6af6e6603e9dc76a5be909274ac37ebc7c04143))
* insertComment does not emit to SuperDoc ([#1065](https://github.com/superdoc-dev/superdoc/issues/1065)) ([b95cd42](https://github.com/superdoc-dev/superdoc/commit/b95cd42ff5be9c2314e60a7c4a38ea8c1470ecb9))
* insertContentAt fails if new line characters (\n) inserted ([dd60d91](https://github.com/superdoc-dev/superdoc/commit/dd60d91711e63741e2d6ca2ced02251f2a4e0465))
* insertContentAt for html ([f6c53d3](https://github.com/superdoc-dev/superdoc/commit/f6c53d396bbc9745aa8e6c86c950bd68bb24216a))
* inserting html with heading tags does not render as expected (HAR-10430) ([#874](https://github.com/superdoc-dev/superdoc/issues/874)) ([bba5074](https://github.com/superdoc-dev/superdoc/commit/bba5074692c8fcdba7d6f6c0ef2960ce7c2d7b6a))
* instrtext bug with unhandled angled brackets ([#1051](https://github.com/superdoc-dev/superdoc/issues/1051)) ([71cf182](https://github.com/superdoc-dev/superdoc/commit/71cf1825b46832da1039269a1c727d3a7c74ffaf))
* instrtext bug with unhandled an…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants