feat: add a beui canvas and a pan and zoom editor with a sidebar

beui gains a Canvas component and CanvasItem children: an item carries a
rectangle in the editor's own world coordinates and the canvas maps each
one through the CanvasView it is given, clipping and culling to the
rectangle it was laid out at, and filling the space it was given at a
scale of one when it is told no view.

A beui editor is not called back for one chrome band at a time the way an
egui one is, so it is told instead whether the host is showing its chrome
this frame - host.chrome_shown() - and hides its own sidebar when that
answers false. Because the host cannot see where that sidebar went, the
editor reports where its content ended up with set_content, and that
rectangle is what the host pans, zooms and reads wheel gestures against.
host.beui_view() carries the view in beui's own coordinates and asks the
host to pan, zoom or fit it, so the host still owns it.

The pan and zoom editor shows all of it: a sidebar with zoom controls and
a card list that pans the host's view, over a canvas of cards laid out in
world coordinates whose text grows with the zoom. Its block stores
nothing and has no operations.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mmcm57ZJrgGBXJ88sZM14f
93c8d6eba8Claude committed on 9/14/2026, 1:08:03 PM· committed by BE3 Agentparent9f76863
32 files changedLine totals unavailable