fbredius/storybook

View on GitHub
lib/components/src/typography/DocumentWrapper.tsx

Summary

Maintainability
D
1 day
Test Coverage
import { styled } from '@storybook/theming';

export const DocumentWrapper = styled.div<{}>(({ theme }) => ({
  fontSize: `${theme.typography.size.s2}px`,
  lineHeight: '1.6',

  h1: {
    fontSize: `${theme.typography.size.l1}px`,
    fontWeight: theme.typography.weight.black,
  },
  h2: {
    fontSize: `${theme.typography.size.m2}px`,
    borderBottom: `1px solid ${theme.appBorderColor}`,
  },
  h3: {
    fontSize: `${theme.typography.size.m1}px`,
  },
  h4: {
    fontSize: `${theme.typography.size.s3}px`,
  },
  h5: {
    fontSize: `${theme.typography.size.s2}px`,
  },
  h6: {
    fontSize: `${theme.typography.size.s2}px`,
    color: theme.color.dark,
  },
  'pre:not(.prismjs)': {
    background: 'transparent',
    border: 'none',
    borderRadius: 0,
    padding: 0,
    margin: 0,
  },
  'pre pre, pre.prismjs': {
    padding: 15,
    margin: 0,
    whiteSpace: 'pre-wrap',
    color: 'inherit',
    fontSize: '13px',
    lineHeight: '19px',
  },
  'pre pre code, pre.prismjs code': {
    color: 'inherit',
    fontSize: 'inherit',
  },
  'pre code': {
    margin: 0,
    padding: 0,
    whiteSpace: 'pre',
    border: 'none',
    background: 'transparent',
  },
  'pre code, pre tt': {
    backgroundColor: 'transparent',
    border: 'none',
  },
  /* GitHub inspired Markdown styles loosely from https://gist.github.com/tuzz/3331384 */
  'body > *:first-of-type': {
    marginTop: '0 !important',
  },
  'body > *:last-child': {
    marginBottom: '0 !important',
  },
  a: {
    color: theme.color.secondary,
    textDecoration: 'none',
  },
  'a.absent': {
    color: '#cc0000',
  },
  'a.anchor': {
    display: 'block',
    paddingLeft: 30,
    marginLeft: -30,
    cursor: 'pointer',
    position: 'absolute',
    top: 0,
    left: 0,
    bottom: 0,
  },
  'h1, h2, h3, h4, h5, h6': {
    margin: '20px 0 10px',
    padding: 0,
    cursor: 'text',
    position: 'relative',

    '&:first-of-type': {
      marginTop: 0,
      paddingTop: 0,
    },
    '&:hover a.anchor': {
      textDecoration: 'none',
    },
    '& tt, & code': {
      fontSize: 'inherit',
    },
  },
  'h1:first-of-type + h2': {
    marginTop: 0,
    paddingTop: 0,
  },
  'p, blockquote, ul, ol, dl, li, table, pre': {
    margin: '15px 0',
  },
  hr: {
    border: '0 none',
    borderTop: `1px solid ${theme.appBorderColor}`,
    height: 4,
    padding: 0,
  },
  'body > h1:first-of-type, body > h2:first-of-type, body > h3:first-of-type, body > h4:first-of-type, body > h5:first-of-type, body > h6:first-of-type':
    {
      marginTop: 0,
      paddingTop: 0,
    },
  'body > h1:first-of-type + h2': {
    marginTop: 0,
    paddingTop: 0,
  },
  'a:first-of-type h1, a:first-of-type h2, a:first-of-type h3, a:first-of-type h4, a:first-of-type h5, a:first-of-type h6':
    {
      marginTop: 0,
      paddingTop: 0,
    },
  'h1 p, h2 p, h3 p, h4 p, h5 p, h6 p': {
    marginTop: 0,
  },
  'li p.first': {
    display: 'inline-block',
  },
  'ul, ol': {
    paddingLeft: 30,

    '& :first-of-type': {
      marginTop: 0,
    },
    '& :last-child': {
      marginBottom: 0,
    },
  },
  dl: {
    padding: 0,
  },

  'dl dt': {
    fontSize: '14px',
    fontWeight: 'bold',
    fontStyle: 'italic',
    margin: '0 0 15px',
    padding: '0 15px',

    '&:first-of-type': {
      padding: 0,
    },
    '& > :first-of-type': {
      marginTop: 0,
    },
    '& > :last-child': {
      marginBottom: 0,
    },
  },

  blockquote: {
    borderLeft: `4px solid ${theme.color.medium}`,
    padding: '0 15px',
    color: theme.color.dark,

    '& > :first-of-type': {
      marginTop: 0,
    },

    '& > :last-child': {
      marginBottom: 0,
    },
  },

  table: {
    padding: 0,
    borderCollapse: 'collapse',

    '& tr': {
      borderTop: `1px solid ${theme.appBorderColor}`,
      backgroundColor: 'white',
      margin: 0,
      padding: 0,

      '& th': {
        fontWeight: 'bold',
        border: `1px solid ${theme.appBorderColor}`,
        textAlign: 'left',
        margin: 0,
        padding: '6px 13px',
      },

      '& td': {
        border: `1px solid ${theme.appBorderColor}`,
        textAlign: 'left',
        margin: 0,
        padding: '6px 13px',
      },
      '&:nth-of-type(2n)': {
        backgroundColor: theme.color.lighter,
      },

      '& th :first-of-type, & td :first-of-type': {
        marginTop: 0,
      },
      '& th :last-child, & td :last-child': {
        marginBottom: 0,
      },
    },
  },
  img: {
    maxWidth: '100%',
  },
  'span.frame': {
    display: 'block',
    overflow: 'hidden',

    '& > span': {
      border: `1px solid ${theme.color.medium}`,
      display: 'block',
      float: 'left',
      overflow: 'hidden',
      margin: '13px 0 0',
      padding: 7,
      width: 'auto',
    },

    '& span img': {
      display: 'block',
      float: 'left',
    },

    '& span span': {
      clear: 'both',
      color: theme.color.darkest,
      display: 'block',
      padding: '5px 0 0',
    },
  },
  'span.align-center': {
    display: 'block',
    overflow: 'hidden',
    clear: 'both',

    '& > span': {
      display: 'block',
      overflow: 'hidden',
      margin: '13px auto 0',
      textAlign: 'center',
    },
    '& span img': {
      margin: '0 auto',
      textAlign: 'center',
    },
  },
  'span.align-right': {
    display: 'block',
    overflow: 'hidden',
    clear: 'both',

    '& > span': {
      display: 'block',
      overflow: 'hidden',
      margin: '13px 0 0',
      textAlign: 'right',
    },

    '& span img': {
      margin: 0,
      textAlign: 'right',
    },
  },

  'span.float-left': {
    display: 'block',
    marginRight: 13,
    overflow: 'hidden',
    float: 'left',

    '& span': {
      margin: '13px 0 0',
    },
  },

  'span.float-right': {
    display: 'block',
    marginLeft: 13,
    overflow: 'hidden',
    float: 'right',

    '& > span': {
      display: 'block',
      overflow: 'hidden',
      margin: '13px auto 0',
      textAlign: 'right',
    },
  },
  'code, tt': {
    margin: '0 2px',
    padding: '0 5px',
    whiteSpace: 'nowrap',
    border: `1px solid ${theme.color.mediumlight}`,
    backgroundColor: theme.color.lighter,
    borderRadius: 3,
    color: theme.base === 'dark' && theme.color.darkest,
  },
}));