refactoring: break components into separate files