* Text: adjust hyperlink and placeholder source ranges on story edits (#1219)
Text-anchored hyperlinks and data-merge placeholders store byte ranges
(`start..end`) pointing into story text. When text earlier in the story is
inserted or deleted, these offsets remained unchanged, causing hyperlink
targets and data-merge placeholders to drift across unrelated text or
point to invalid UTF-8 boundaries.
This change:
- Implements `Document::adjust_text_ranges` in `designcraft-doc` to shift
or resize text hyperlinks and placeholders when story text is edited.
Pure insertions at or before the link shift it forward; insertions
inside expand the link's span; deletions before shift it back; deletions
consuming or overlapping the link clamp to surviving text or prune it if
entirely consumed.
- Cleans up obsolete hyperlinks and placeholders in `set_story_text`.
- Wires range adjustment into engine text commands: typing, deleting,
selection replacement, autocorrect, `story.replaceRange`, find/change,
and spelling change.
- Adds comprehensive unit tests in `designcraft-doc` and 7 integration
regression tests in `crates/engine/tests/hyperlink_offsets.rs`.
* fix(engine): adjust hyperlink and placeholder ranges for physically removed text under track changes
* fix(engine): adjust text ranges for formatted paste, case change, and drag move
* fix(engine): record change case adjustments per character to preserve enclosed hyperlinks
* fix(engine): adjust text ranges for track changes, inline markers, and preserve zero-length ranges
- Route Track Changes accept/reject deletions through adjust_text_ranges, and transfer replaced text hyperlinks to inserted text so links survive accept.
- Hook inline marker operations to adjust_text_ranges (notes, endnotes, xref, anchored objects, index markers, tables, editorial notes, unvar, and place text).
- Replace datamerge::shift_after with adjust_text_ranges.
- Only prune ranges that the edit emptied (s < e && s_new >= e_new), preserving zero-length ranges.
- Drop inverted ranges first and use saturating arithmetic in remap_range.
- Preserve doc.hyperlinks and placeholders ordering in move_text_ranges by mutating in place.
- Remove dead wrapper mark_deleted and call mark_deleted_reporting.
- Fix changes.track invocation parameter to 'on'.
- Add comprehensive regression tests in doc and engine covering all review items.
* fix(text): guard cell find/change, pre-record tracked replaces, shift para xref anchors
* fix(text): record stable IDs for tracked replacement redirects
* fix(text): reconcile range adjustments for review feedback
* fix(text): adjust ranges on delete surrounding and clean up dead auto edit
* Prune text ranges on TOC index and live caption regeneration
* test(engine): format regenerating_index_prunes_story_hyperlinks line wrap