fix(deps): update dependency react-markdown to v7
This MR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
react-markdown | 5.0.3 -> 7.0.0 |
Release Notes
remarkjs/react-markdown
v7.0.0
Welcome to version 7. This a major release and therefore contains breaking changes.
Breaking changes
-
01b11fe
c613efd
a1e1c3f
aeee9ac
Use ESM (please read this) -
3dffd6a
Update dependencies (upgrade all your plugins and this should go fine)
Internals
-
8b5481c
fb1b512
144af79
Replacejest
withuvu
-
8c572df
Replacerollup
withesbuild
-
8737eac
28d4c75
b2dd046
Refactor code-style
v6.0.3
-
13367ed
Fix types to include each element w/ its properties -
0a1931a
Fix to add min version ofproperty-information
v6.0.2
-
cefc02d
Add string type forclassName
s -
6355e45
Fix to passvfile
to plugins -
5cf6e1b
Fix to add warning when non-strings are given aschildren
v6.0.1
v6.0.0
Welcome to version 6. This a major release and therefore contains breaking changes.
renderers
to components
Change react-markdown
used to let you define components for markdown constructs
(link
, delete
, break
, etc).
This proved complex as users didn’t know about those names or markdown
peculiarities (such as that there are fully formed links and link references).
See GH-549 for more
on why this changed.
See Appendix B: Components in
readme.md
for more on components.
Show example of needed change
Before (broken):
<Markdown
renderers={{
// Use a fancy hr
thematicBreak: ({node, ...props}) => <MyFancyRule {...props} />
}}
>{`***`}</Markdown>
Now (fixed):
<Markdown
components={{
// Use a fancy hr
hr: ({node, ...props}) => <MyFancyRule {...props} />
}}
>{`***`}</Markdown>
Show conversion table
Type (renderers ) |
Tag names (components ) |
---|---|
blockquote |
blockquote |
break |
br |
code , inlineCode
|
code , pre *
|
definition |
† |
delete |
del **‡** |
emphasis |
em |
heading |
h1 , h2 , h3 , h4 , h5 , h6 **§** |
html , parsedHtml , virtualHtml
|
‖ |
image , imageReference
|
img **†** |
link , linkReference
|
a **†** |
list |
ol , ul **¶** |
listItem |
li |
paragraph |
p |
root |
** |
strong |
strong |
table |
table **‡** |
tableHead |
thead **‡** |
tableBody |
tbody **‡** |
tableRow |
tr **‡** |
tableCell |
td , th **‡** |
text |
|
thematicBreak |
hr |
-
* It’s possible to differentiate between code based on the
inline
prop. Block code is also wrapped in apre
-
† Resource (
[text](url)
) and reference ([text][id]
) style links and images (and their definitions) are now resolved and treated the same -
‡ Available when using
remark-gfm
-
§ It’s possible to differentiate between heading based on the
level
prop -
‖ When using
rehype-raw
(see below), components for those elements can also be used (for example,abbr
for<abbr title="HyperText Markup Language">HTML</abbr>
) -
¶ It’s possible to differentiate between lists based on the
ordered
prop -
** Wrap
ReactMarkdown
in a component instead
We’ve added another plugin system: rehype. It’s similar to remark (what we’re using for markdown) but for HTML.
There are many rehype plugins.
Some examples are
@mapbox/rehype-prism
(syntax highlighting with Prism),
rehype-katex
(rendering math with KaTeX), or
rehype-autolink-headings
(adding links to headings).
See List of plugins for more plugins.
Show example of feature
import rehypeHighlight from 'rehype-highlight'
<Markdown rehypePlugins={[rehypeHighlight]}>{`~~~js
console.log(1)
~~~`}</Markdown>
In a lot of cases, you should not use HTML in markdown: it’s most always unsafe.
And it defeats much of the purpose of this project (not relying on
dangerouslySetInnerHTML
).
react-markdown
used to have an opt-in HTML parser with a bunch of bugs.
As we now support rehype plugins, we can defer that work to a rehype plugin.
To support HTML in markdown with react-markdown
, use
rehype-raw
.
The astPlugins
and allowDangerousHtml
(previously called escapeHtml
) props
are no longer needed and were removed.
When using rehype-raw
, you should probably use
rehype-sanitize
too.
Show example of needed change
Before (broken):
import MarkdownWithHtml from 'react-markdown/with-html'
<MarkdownWithHtml>{`# Hello, <i>world</i>!`}</MarkdownWithHtml>
Now (fixed):
import Markdown from 'react-markdown'
import rehypeRaw from 'rehype-raw'
import rehypeSanitize from 'rehype-sanitize'
<Markdown rehypePlugins={[rehypeRaw, rehypeSanitize]}>{`# Hello, <i>world</i>!`}</Markdown>
Instead of passing a source
pass children
instead:
Show example of needed change
Before (broken):
<Markdown source="some\nmarkdown"></Markdown>
Now (fixed):
<Markdown>{`some
markdown`}</Markdown>
Or (also fixed):
<Markdown children={`some
markdown`} />
Similar to the renderers
to components
change, the filtering options
also changed from being based on markdown names towards being based on HTML
names: allowNode
to allowElement
, allowedTypes
to allowedElements
, and
disallowedTypes
to disallowedElements
.
Show example of needed change
Before (broken):
<Markdown
// Skip images
disallowedTypes={['image']}
>{`![alt text](./image.url)`}</Markdown>
Now (fixed):
<Markdown
// Skip images
disallowedElements={['img']}
>{`![alt text](./image.url)`}</Markdown>
Before (broken):
<Markdown
// Skip h1
allowNode={(node) => node.type !== 'heading' || node.depth !== 1}
>{`# main heading`}</Markdown>
Now (fixed):
<Markdown
// Skip h1
allowElement={(element) => element.tagName !== 'h1'}
>{`# main heading`}</Markdown>
Similar to the renderers
to components
change, this option to pass more info
to components also changed from being based on markdown to being based on HTML.
Show example of needed change
Before (broken):
<Markdown
includeNodeIndex={true}
renderers={{
paragraph({node, index, parentChildCount, ...props}) => <MyFancyParagraph {...props} />
}}
>{`Some text`}</Markdown>
Now (fixed):
<Markdown
includeElementIndex={true}
components={{
p({node, index, siblingsCount, ...props}) => <MyFancyParagraph {...props} />
}}
>{`Some text`}</Markdown>
The second parameter of these functions (to rewrite href
on a
or to define
target
on a
) are now hast (HTML AST)
instead of mdast (markdown AST).
transformImageUri
Change signature of The second parameter of this function was always undefined
and the fourth was
the alt
(string
) on the image.
The second parameter is now that alt
.
Remove support for React 15, IE11
We now use ES2015 (such as Object.assign
) and removed certain hacks to work
with React 15 and older.
Configuration
-
If you want to rebase/retry this MR, check this box.
This MR has been generated by Renovate Bot.