Button.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import styled from 'styled-components';
  2. interface Props {
  3. buttonType: 'primary' | 'secondary';
  4. buttonSize: 'S' | 'M' | 'L';
  5. isInverted?: boolean;
  6. }
  7. const Button = styled('button')<Props>`
  8. display: flex;
  9. flex-direction: row;
  10. align-items: center;
  11. justify-content: center;
  12. padding: 0px 12px;
  13. border: none;
  14. border-radius: 4px;
  15. white-space: nowrap;
  16. margin-right: 0.5rem;
  17. margin-bottom: 0.5rem;
  18. background: ${(props) =>
  19. props.isInverted
  20. ? 'transparent'
  21. : props.theme.buttonStyles[props.buttonType].backgroundColor.normal};
  22. color: ${(props) =>
  23. props.isInverted
  24. ? props.theme.buttonStyles[props.buttonType].invertedColors.normal
  25. : props.theme.buttonStyles[props.buttonType].color};
  26. font-size: ${(props) => props.theme.buttonStyles.fontSize[props.buttonSize]};
  27. height: ${(props) => props.theme.buttonStyles.height[props.buttonSize]};
  28. &:hover:enabled {
  29. background: ${(props) =>
  30. props.isInverted
  31. ? 'transparent'
  32. : props.theme.buttonStyles[props.buttonType].backgroundColor.hover};
  33. color: ${(props) =>
  34. props.isInverted
  35. ? props.theme.buttonStyles[props.buttonType].invertedColors.hover
  36. : props.theme.buttonStyles[props.buttonType].color};
  37. cursor: pointer;
  38. }
  39. &:active:enabled {
  40. background: ${(props) =>
  41. props.isInverted
  42. ? 'transparent'
  43. : props.theme.buttonStyles[props.buttonType].backgroundColor.active};
  44. color: ${(props) =>
  45. props.isInverted
  46. ? props.theme.buttonStyles[props.buttonType].invertedColors.active
  47. : props.theme.buttonStyles[props.buttonType].color};
  48. }
  49. &:disabled {
  50. opacity: 0.5;
  51. cursor: not-allowed;
  52. }
  53. `;
  54. export default Button;