styled.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import styled, { css } from 'styled-components';
  2. const MarkupStyle: Record<string, any> = {
  3. Highlight: css<{ isCovered: boolean; bdcolor: string }>`
  4. background-color: ${props => (props.isCovered ? '#297fb8' : props.bdcolor)};
  5. `,
  6. Underline: css<{ isCovered: boolean; bdcolor: string }>`
  7. border-bottom: 2px solid
  8. ${props => (props.isCovered ? '#297fb8' : props.bdcolor)};
  9. `,
  10. Squiggly: css<{ isCovered: boolean; bdcolor: string }>`
  11. overflow: hidden;
  12. &:before {
  13. content: '';
  14. position: absolute;
  15. background: radial-gradient(
  16. ellipse,
  17. transparent,
  18. transparent 8px,
  19. ${props => (props.isCovered ? '#297fb8' : props.bdcolor)} 9px,
  20. ${props => (props.isCovered ? '#297fb8' : props.bdcolor)} 10px,
  21. transparent 11px
  22. );
  23. background-size: 22px 26px;
  24. width: 100%;
  25. height: 5px;
  26. left: 0;
  27. bottom: 2px;
  28. }
  29. &:after {
  30. content: '';
  31. position: absolute;
  32. background: radial-gradient(
  33. ellipse,
  34. transparent,
  35. transparent 8px,
  36. ${props => (props.isCovered ? '#297fb8' : props.bdcolor)} 9px,
  37. ${props => (props.isCovered ? '#297fb8' : props.bdcolor)} 10px,
  38. transparent 11px
  39. );
  40. background-size: 22px 26px;
  41. width: 100%;
  42. height: 5px;
  43. bottom: -1px;
  44. left: 11px;
  45. background-position: 0px -22px;
  46. }
  47. `,
  48. StrikeOut: css<{ isCovered: boolean; bdcolor: string }>`
  49. &:after {
  50. content: '';
  51. position: absolute;
  52. height: 2px;
  53. width: 100%;
  54. left: 0;
  55. top: 40%;
  56. background-color: ${props =>
  57. props.isCovered ? '#297fb8' : props.bdcolor};
  58. }
  59. `,
  60. };
  61. const Markup = styled('div')<{
  62. position: Record<string, any>;
  63. bdcolor: string;
  64. markupType: string;
  65. opacity: number;
  66. isCovered?: boolean;
  67. }>`
  68. position: absolute;
  69. cursor: pointer;
  70. opacity: ${props => props.opacity};
  71. ${props => css`
  72. top: ${props.position.top};
  73. left: ${props.position.left};
  74. width: ${props.position.width};
  75. height: ${props.position.height};
  76. `}
  77. ${props => MarkupStyle[props.markupType]}
  78. `;
  79. export default Markup;