The canonical, framework-agnostic whiteboard controller — instance #5 of the
BIMETAL component family. Built on @bimetal/headless-core, so it shares the
identity-stable getSnapshot/subscribe contract and the errors-as-state
surface; the framework packages are pure bindings.
createWhiteboardController owns every free-canvas interaction in LOGICAL
board coordinates — shape drag and resize, marquee and multi-select, z-order,
grouping, connectors, comments, the edit dialog, keyboard nudge and undo.
Pixels never reach it: the binding converts, the controller decides.
The cut line is the family's: DOM measurement and listener registration belong
to the framework; every if belongs here.