Make chat timeline height estimates width-aware and test them

- extract `estimateTimelineMessageHeight` into `timelineHeight.ts`
- account for timeline width and explicit newlines when estimating wrapped lines
- re-measure virtualized rows on width changes to fix attachment/message height sizing
- add Vitest coverage for assistant/user wrapping and attachment row height rules
2ad2d3e6f5Julius Marminge committed on 3/5/2026, 6:20:34 PM· committed by Julius Marmingeparentb175d6b
3 files changedLine totals unavailable