refactor web components