refactored to pull out basic input components in different component library