icon.js 969 B

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