refactor widgets into separate file structure