Reusable, declarative HTML5 widgets