select.pick classifies the press (pointerDown) — it runs the tool's own
pickBest/pickEvery so click semantics (selection replace, extend,
deferred collapse) live in one place.
drag is owned exclusively by the dispatcher via Tool.bindings
(selected-body → moveAction, rotate-handle → rotateAction, handle:* →
resizeAction, empty → areaSelectAction, click on empty → clearSelection).
Move ghosts render via the preview-ghost layer (driven by moveAction's
previewIds/previewPose); the marquee renders via the dispatcher
overlay layer (driven by areaSelectAction's overlay()).
Active-slot Tool:
select.pickclassifies the press (pointerDown) — it runs the tool's own pickBest/pickEvery so click semantics (selection replace, extend, deferred collapse) live in one place.Tool.bindings(selected-body → moveAction, rotate-handle → rotateAction, handle:* → resizeAction, empty → areaSelectAction, click on empty → clearSelection).previewIds/previewPose); the marquee renders via the dispatcher overlay layer (driven by areaSelectAction'soverlay()).