UNPKG

1.34 kBJavaScriptView Raw
1import React, {PureComponent} from 'react';
2import PropTypes from 'prop-types';
3import ReactMarkdown from 'react-markdown';
4import classNames from 'classnames';
5import RemarkBreaks from 'remark-breaks';
6
7import normalizeIndent from '../global/normalize-indent';
8import trivialTemplateTag from '../global/trivial-template-tag';
9
10import Code from './code';
11import Link from './link';
12import Heading from './heading';
13import styles from './markdown.css';
14
15/**
16 * @name Markdown
17*/
18
19export default class Markdown extends PureComponent {
20 static propTypes = {
21 inline: PropTypes.bool,
22 source: PropTypes.string,
23 className: PropTypes.string,
24 renderers: PropTypes.object
25 };
26
27 render() {
28 const {className, renderers, inline, source, ...restProps} = this.props;
29
30 const classes = classNames(className, {
31 [styles.markdown]: !inline,
32 [styles.inline]: inline
33 });
34
35 return (
36 <ReactMarkdown
37 className={classes}
38 source={normalizeIndent(source)}
39 plugins={[RemarkBreaks]}
40 renderers={{
41 link: Link,
42 linkReference: Link,
43 code: Code,
44 inlineCode: Code,
45 heading: Heading,
46 ...renderers
47 }}
48 {...restProps}
49 />
50 );
51 }
52}
53
54const md = trivialTemplateTag(source => <Markdown {...{source}}/>);
55
56export {md};
57
\No newline at end of file