badge.tsx 982 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import classnames from 'classnames'
  2. import { MergeAndOverride } from '../../../../types/utils'
  3. type BadgeProps = MergeAndOverride<
  4. React.ComponentProps<'span'>,
  5. {
  6. prepend?: React.ReactNode
  7. children: React.ReactNode
  8. className?: string
  9. showCloseButton?: boolean
  10. onClose?: (e: React.MouseEvent<HTMLButtonElement>) => void
  11. closeBtnProps?: React.ComponentProps<'button'>
  12. }
  13. >
  14. function Badge({
  15. prepend,
  16. children,
  17. className,
  18. showCloseButton = false,
  19. onClose,
  20. closeBtnProps,
  21. ...rest
  22. }: BadgeProps) {
  23. return (
  24. <span className={classnames('badge-new', className)} {...rest}>
  25. {prepend}
  26. <span className="badge-new-comment">{children}</span>
  27. {showCloseButton && (
  28. <button
  29. type="button"
  30. className="badge-new-close"
  31. onClick={onClose}
  32. {...closeBtnProps}
  33. >
  34. <span aria-hidden="true">&times;</span>
  35. </button>
  36. )}
  37. </span>
  38. )
  39. }
  40. export default Badge