Build a React component that's typed, accessible and handles loading, empty and error states, matched to your styling and existing components, with usage examples and tests.