refactor text box to its own component