Design system.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

64 rader
1.4 KiB

  1. import * as React from 'react';
  2. import { tailwind } from '@tesseract-design/web-base';
  3. const { tw } = tailwind;
  4. const BadgeDerivedElementComponent = 'span' as const;
  5. /**
  6. * Derived HTML element of the {@link Badge} component.
  7. */
  8. export type BadgeDerivedElement = HTMLElementTagNameMap[
  9. typeof BadgeDerivedElementComponent
  10. ];
  11. /**
  12. * Props of the {@link Badge} component.
  13. */
  14. export interface BadgeProps extends React.HTMLProps<BadgeDerivedElement> {
  15. /**
  16. * Is the component rounded?
  17. */
  18. rounded?: boolean;
  19. }
  20. /**
  21. * Component for displaying textual information in a small container.
  22. */
  23. export const Badge = React.forwardRef<BadgeDerivedElement, BadgeProps>((
  24. {
  25. children,
  26. rounded = false,
  27. className,
  28. style,
  29. ...etcProps
  30. },
  31. forwardedRef,
  32. ) => (
  33. <BadgeDerivedElementComponent
  34. {...etcProps}
  35. ref={forwardedRef}
  36. className={tw(
  37. 'relative h-6 min-w-6 inline-flex align-middle items-center justify-center text-xs font-bold overflow-hidden font-semi-expanded',
  38. 'before:absolute before:top-0 before:left-0 before:w-full before:h-full before:bg-current before:opacity-25',
  39. {
  40. 'rounded-full px-2': rounded,
  41. 'rounded px-1': !rounded,
  42. },
  43. className,
  44. )}
  45. style={style}
  46. data-testid="badge"
  47. >
  48. <span className="relative w-full">
  49. {children}
  50. </span>
  51. </BadgeDerivedElementComponent>
  52. ));
  53. Badge.displayName = 'Badge';
  54. Badge.defaultProps = {
  55. rounded: false,
  56. };