Refactor text component builders, add TextAreaComponentBuilder