Oh no, I'm totally on board for this abstraction, and moving `RouteBinding` on top of it! Don't get me wrong, this is really close to mergable :)

My concern here is just that `doubleclick` (and only double click) should *not* use the abstraction, since it is specific to desktop and doesn't need/cannot be abstracted.