Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. import React from "react";
  2. import PropTypes from "prop-types";
  3. import styled from "styled-components";
  4.  
  5. const Title = styled.h1`
  6. font-family: vars(--sans-serif);
  7. line-height: 1;
  8. margin: 0 0 2rem 0;
  9. font-size: ${props =>
  10. props.fontSize === "super"
  11. ? "var(--font-scale-3)"
  12. : props.fontSize === "huge"
  13. ? "var(--font-scale-4)"
  14. : props.fontSize === "large"
  15. ? "var(--font-scale-5)"
  16. : props.fontSize === "medium"
  17. ? "var(--font-scale-6)"
  18. : props.fontSize === "small"
  19. ? "var(--font-scale-7)"
  20. : props.fontSize === "tiny" ? "var(--font-scale-8)" : "1em"};
  21.  
  22. font-weight: ${props =>
  23. props.weight === "light"
  24. ? "var(--font-weight-light)"
  25. : props.weight === "bold"
  26. ? "var(--font-weight-bold)"
  27. : "var(--font-weight-normal)"};
  28.  
  29. letter-spacing: ${props =>
  30. props.letterSpacing === "tight"
  31. ? "-.1rem"
  32. : props.letterSpacing === "loose"
  33. ? ".1rem"
  34. : props.letterSpacing === "wide" ? ".3rem" : "0"};
  35.  
  36. text-transform: ${props => (props.isCaps ? "uppercase" : "none")};
  37. `;
  38.  
  39. Title.h1 = Title;
  40. Title.h2 = Title.withComponent("h2");
  41. Title.h3 = Title.withComponent("h3");
  42. Title.h4 = Title.withComponent("h4");
  43. Title.h5 = Title.withComponent("h5");
  44. Title.h6 = Title.withComponent("h6");
  45.  
  46. class Heading extends React.Component {
  47. render() {
  48. let TitleHeaderComponent;
  49.  
  50. switch (this.props.level) {
  51. case "1":
  52. TitleHeaderComponent = Title.h1;
  53. break;
  54. case "2":
  55. TitleHeaderComponent = Title.h2;
  56. break;
  57. case "3":
  58. TitleHeaderComponent = Title.h3;
  59. break;
  60. case "4":
  61. TitleHeaderComponent = Title.h4;
  62. break;
  63. case "5":
  64. TitleHeaderComponent = Title.h5;
  65. break;
  66. case "6":
  67. TitleHeaderComponent = Title.h6;
  68. break;
  69. default:
  70. TitleHeaderComponent = Title.h1;
  71. break;
  72. }
  73.  
  74. return (
  75. <TitleHeaderComponent
  76. fontSize={this.props.size}
  77. weight={this.props.weight}
  78. letterSpacing={this.props.letterSpacing}
  79. isCaps={this.props.isCaps}
  80. >
  81. {this.props.children}
  82. </TitleHeaderComponent>
  83. );
  84. }
  85. }
  86.  
  87. Heading.propTypes = {
  88. level: PropTypes.oneOf(["1", "2", "3", "4", "5", "6"]).isRequired,
  89. size: PropTypes.oneOf(["super", "huge", "large", "medium", "small", "tiny"])
  90. .isRequired,
  91. weight: PropTypes.oneOf(["light", "normal", "bold"]),
  92. letterSpacing: PropTypes.oneOf(["tight", "loose", "normal", "wide"]),
  93. isCaps: PropTypes.bool
  94. };
  95.  
  96. Heading.defaultProps = {
  97. level: "1",
  98. size: "large",
  99. weight: "light",
  100. letterSpacing: "loose",
  101. isCaps: false
  102. };
  103.  
  104. export default Heading;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement