Implement xterm-compatible mouse reporting so vim, htop, btm, tmux, etc.
can receive click / drag / wheel events.
Core:
- Expose `mouse_protocol_mode()` and `mouse_protocol_encoding()` on
`TerminalCore`, re-exporting the vt100 enums.
Component:
- Add `MouseAction`, `mouse_button_base`, `with_mouse_modifiers`,
`encode_mouse_report`, and `pixel_to_grid` pure helpers.
- Support SGR (1006), Default, and UTF-8 encodings. SGR is fully correct
and ASCII-only; Default/UTF-8 are correct for the common ≤94 col/row
range.
- Wire `on:mousedown` / `on:mouseup` / `on:mousemove` to report mouse
events when the app enabled mouse reporting; otherwise fall back to
local text selection.
- Shift+click bypasses mouse reporting and forces local selection (xterm
behaviour).
- Throttle motion reports to one per grid cell.
- Report vertical/horizontal wheel ticks as buttons 64/65/66/67 when
mouse reporting is active, otherwise keep the existing alt-screen
arrow-key paging.
Tests: 23/23 pass, clippy clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>