All files / Rindu/components/Heading Heading.tsx

100% Statements 7/7
100% Branches 1/1
100% Functions 1/1
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80              19x         19x   19x                                     15x                                                                                       19x 19x  
import {
  createElement,
  DetailedHTMLProps,
  forwardRef,
  HtmlHTMLAttributes,
  PropsWithChildren,
  ReactElement,
} from "react";
 
import css from "styled-jsx/css";
 
import type { HeadingProps } from "types/heading";
import { getHeadingStyles } from "utils";
 
const Heading = forwardRef(
  (
    {
      number,
      as: element = `h${number}`,
      color,
      fontSize,
      margin,
      textAlign,
      multiline,
      children,
      ...props
    }: PropsWithChildren<HeadingProps> &
      DetailedHTMLProps<
        HtmlHTMLAttributes<HTMLHeadingElement>,
        HTMLHeadingElement
      >,
    ref
  ): ReactElement => {
    const { className, styles } = getHeadingStyles(number, element, {
      color,
      fontSize,
      margin,
      textAlign,
      multiline,
    });
 
    const defaultStyles = css.resolve`
      ${element} {
        display: -webkit-box;
        font-family: Lato, sans-serif;
        letter-spacing: -0.04em;
        line-break: anywhere;
        max-width: 100%;
        overflow: hidden;
        position: relative;
        text-overflow: ellipsis;
        text-transform: none;
        white-space: unset;
        z-index: 999999;
        -webkit-box-orient: vertical;
        width: 100%;
      }
    `;
 
    return (
      <>
        {createElement(
          element,
          {
            className: `${className} ${defaultStyles.className}`,
            ref,
            ...props,
          },
          children
        )}
        {defaultStyles.styles}
        {styles}
      </>
    );
  }
);
 
export default Heading;
Heading.displayName = "Heading";