badge.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import classnames from 'classnames'
  2. import { MergeAndOverride } from '../../../../types/utils'
  3. import BadgeWrapper from '@/features/ui/components/bootstrap-5/wrappers/badge-wrapper'
  4. type BadgeProps = MergeAndOverride<
  5. React.ComponentProps<'span'>,
  6. {
  7. prepend?: React.ReactNode
  8. children: React.ReactNode
  9. closeBtnProps?: React.ComponentProps<'button'>
  10. className?: string
  11. bsStyle?: NonNullable<
  12. React.ComponentProps<typeof BadgeWrapper>['bs3Props']
  13. >['bsStyle']
  14. }
  15. >
  16. function Badge({
  17. prepend,
  18. children,
  19. closeBtnProps,
  20. bsStyle,
  21. className,
  22. ...rest
  23. }: BadgeProps) {
  24. const classNames =
  25. bsStyle === null
  26. ? className
  27. : classnames('label', `label-${bsStyle}`, className)
  28. return (
  29. <span className={classNames} {...rest}>
  30. {prepend && <span className="badge-bs3-prepend">{prepend}</span>}
  31. {children}
  32. {closeBtnProps && (
  33. <button type="button" className="badge-bs3-close" {...closeBtnProps}>
  34. <span aria-hidden="true">&times;</span>
  35. </button>
  36. )}
  37. </span>
  38. )
  39. }
  40. export default Badge