split widgets into separate files

built on top of