untested first cut of widgets; with attrs and widget_map