icon.js 890 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import PropTypes from 'prop-types'
  2. import classNames from 'classnames'
  3. function Icon({
  4. type,
  5. spin,
  6. modifier,
  7. classes = {},
  8. accessibilityLabel,
  9. children,
  10. }) {
  11. const iconClassName = classNames(
  12. 'fa',
  13. `fa-${type}`,
  14. {
  15. 'fa-spin': spin,
  16. [`fa-${modifier}`]: modifier,
  17. },
  18. classes.icon
  19. )
  20. return (
  21. <>
  22. <i className={iconClassName} aria-hidden="true">
  23. {children}
  24. </i>
  25. {accessibilityLabel ? (
  26. <span className="sr-only">{accessibilityLabel}</span>
  27. ) : null}
  28. </>
  29. )
  30. }
  31. Icon.propTypes = {
  32. type: PropTypes.string.isRequired,
  33. spin: PropTypes.bool,
  34. modifier: PropTypes.string,
  35. classes: PropTypes.exact({
  36. icon: PropTypes.string,
  37. }),
  38. accessibilityLabel: PropTypes.string,
  39. children: PropTypes.oneOfType([
  40. PropTypes.arrayOf(PropTypes.node),
  41. PropTypes.node,
  42. ]),
  43. }
  44. export default Icon