Proper API

**Do not merge.**

This is an umbrella branch for the widget API revamp.