Files
flipper/src/ui/components/Markdown.tsx
John Knox 2f3b9e1be9 Increase line height of markdown text
Summary: Lines were a bit squashed together. Taken the value from workplace, as that's the style we've been copying so far.

Reviewed By: priteshrnandgaonkar

Differential Revision: D19430279

fbshipit-source-id: 52cc8167d6acaa6af42caaa67a693b5fda492701
2020-01-16 09:39:52 -08:00

100 lines
2.2 KiB
TypeScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import React, {PureComponent} from 'react';
import styled from '@emotion/styled';
import ReactMarkdown from 'react-markdown';
import {colors} from './colors';
import {shell} from 'electron';
const Container = styled.div({
padding: 10,
});
const Row = styled.div({
marginTop: 5,
marginBottom: 5,
lineHeight: 1.34,
});
const Heading = styled.div<{level: number}>(props => ({
fontSize: props.level === 1 ? 18 : 12,
textTransform: props.level > 1 ? 'uppercase' : undefined,
color: props.level > 1 ? '#90949c' : undefined,
marginTop: 10,
marginBottom: 10,
fontWeight: props.level > 1 ? 'bold' : 'normal',
}));
const ListItem = styled.li({
'list-style-type': 'circle',
'list-style-position': 'inside',
marginLeft: 10,
});
const Strong = styled.span({
fontWeight: 'bold',
color: '#1d2129',
});
const Emphasis = styled.span({
fontStyle: 'italic',
});
const Quote = styled(Row)({
padding: 10,
backgroundColor: '#f1f2f3',
fontSize: 13,
});
const Code = styled.span({
fontFamily: '"Courier New", Courier, monospace',
backgroundColor: '#f1f2f3',
});
const Pre = styled(Row)({
padding: 10,
backgroundColor: '#f1f2f3',
});
class CodeBlock extends PureComponent<{value: string; language: string}> {
render() {
return (
<Pre>
<Code>{this.props.value}</Code>
</Pre>
);
}
}
const Link = styled.span({
color: colors.blue,
});
class LinkReference extends PureComponent<{href: string}> {
render() {
return (
<Link onClick={() => shell.openExternal(this.props.href)}>
{this.props.children}
</Link>
);
}
}
export function Markdown(props: {source: string}) {
return (
<Container>
<ReactMarkdown
source={props.source}
renderers={{
heading: Heading,
listItem: ListItem,
paragraph: Row,
strong: Strong,
emphasis: Emphasis,
inlineCode: Code,
code: CodeBlock,
blockquote: Quote,
link: LinkReference,
linkReference: LinkReference,
}}
/>
</Container>
);
}