vix-editor 1.2.0

Editor host: the `CodeEditor` widget wrapper and the pane tree.
Documentation
# Scrollbars

Vix draws one consistent scrollbar everywhere a view can scroll: the editor, the
file explorer, the bottom dock, and the scrollable overlay panels (the welcome
screen and the character/color pickers). Views that can overflow **horizontally**
— the editor (when soft wrap is off), the file explorer, the message drawer, and
the bottom dock — also get a matching horizontal scrollbar.

## Appearance

- A vertical, one-column scrollbar in a gutter on the right edge of the view, and
  — when content overflows sideways — a horizontal, one-row scrollbar along the
  bottom edge of the view.
- **The thumb is always exactly one character** — a `●` — never sized
  proportionally to the content length.
- The thumb's **position** along the track is proportional: it sits at the
  start cell at the start and the end cell at the end, interpolating in between.
  For cursor/selection views the vertical thumb tracks the cursor/selected item;
  for scroll-only views it tracks the scroll offset. The horizontal thumb tracks
  the horizontal scroll offset within `content_width − viewport_width`.
- The vertical track is a dim `│` spanning the gutter; the horizontal track is a
  dim `─` spanning the bottom row — neither has end-cap arrows.
- A scrollbar appears only when the content overflows that axis, and honors the
  **Show/Hide Scroll Bar** toggle (`show_scrollbar`).

## Interaction

- **Mouse wheel** and the keyboard scroll the view vertically as usual.
- **Click** a point on a track to jump there.
- **Press and drag** a scrollbar to scroll continuously (vertical or horizontal).

## As implemented in Vix

`src/ui.rs` owns the shared renderers — `draw_scrollbar` (vertical) and
`draw_hscrollbar` (horizontal) — and the click/drag position mapping
(`scrollbar_pos_from_row` / `scrollbar_pos_from_col`). Each scrollable view
records its scrollbar rectangle(s) for hit-testing. Horizontal rendering slices
rows to the visible window (`hslice` for plain lines, `hslice_spans` for styled
list rows); the editor uses its own `offset_x`, while the docks track an
`*_hscroll` offset in `App` and `*_hmax` for drag.