First cut of composable widget framework