feat(lemon-ui): Add table support to LemonMarkdown (#37243)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Michael Matloka
2025-09-01 13:24:18 +02:00
committed by GitHub
parent 7ffb3fee08
commit c6aa849a3a
30 changed files with 355 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

After

Width:  |  Height:  |  Size: 249 KiB

View File

@@ -108,9 +108,9 @@
"@tailwindcss/cli": "4.0.11",
"@testing-library/dom": ">=7.21.4",
"@tiptap/core": "^3.0.7",
"@tiptap/extension-heading": "^3.0.7",
"@tiptap/extension-document": "^3.0.7",
"@tiptap/extension-floating-menu": "^3.0.7",
"@tiptap/extension-heading": "^3.0.7",
"@tiptap/extension-list": "^3.0.7",
"@tiptap/extension-table-of-contents": "^3.0.7",
"@tiptap/extensions": "^3.0.7",
@@ -212,6 +212,7 @@
"react-toastify": "^8.2.0",
"react-transition-group": "^4.4.5",
"react-virtualized": "^9.22.5",
"remark-gfm": "^1.0.0",
"resize-observer-polyfill": "^1.5.1",
"sass": "^1.26.2",
"simple-statistics": "^7.8.8",

View File

@@ -12,6 +12,7 @@
pre {
padding-top: 0.375rem;
padding-bottom: 0.375rem;
}
}

View File

@@ -74,4 +74,61 @@
img {
max-width: 100%;
}
// Table styling - minimal approach
table {
margin: 1em 0;
overflow: auto;
border-spacing: 0;
border-collapse: separate;
border: 1px solid var(--border);
border-radius: var(--radius);
}
th,
td {
padding: 0.375rem 0.75rem;
color: var(--default);
text-align: left;
vertical-align: top;
border-right: 1px solid var(--border);
border-bottom: 1px solid var(--border);
&:last-child {
border-right: none;
}
}
th {
font-weight: 600;
}
tbody tr:last-child td {
border-bottom: none;
}
.LemonMarkdown__task {
display: flex;
gap: 0.5rem;
align-items: center;
list-style: none;
.LemonCheckbox {
flex-shrink: 0;
margin-top: 0.125rem; // Slight adjustment to align with text
}
}
.LemonMarkdown__task-content {
flex: 1;
min-width: 0; // Allow text to wrap
// Remove edge paragraph margins in task items for better spacing
p:first-child {
margin-top: 0;
}
p:last-child {
margin-bottom: 0;
}
}
}

View File

@@ -45,3 +45,115 @@ LowKeyHeadings.args = {
**Strong** and *emphasized* text.`,
lowKeyHeadings: true,
}
export const WithTables: Story = Template.bind({})
WithTables.args = {
children: `# Analytics dashboard
Here's a breakdown of our top traffic sources:
| Source | Unique users | Percentage |
|--------|-------------|------------|
| Direct | 362,389 | 45.2% |
| Google | 122,910 | 15.3% |
| posthog.com | 23,067 | 2.9% |
| us.posthog.com | 21,593 | 2.7% |
| eu.posthog.com | 10,723 | 1.3% |
| LinkedIn | 5,255 | 0.7% |
| GitHub | 4,019 | 0.5% |
| Bing | 2,950 | 0.4% |
| DuckDuckGo | 2,933 | 0.4% |
## Browser breakdown
| Browser | Users | Market share |
|---------|-------|-------------|
| Chrome | 450,123 | 72.1% |
| Safari | 89,234 | 14.3% |
| Firefox | 45,678 | 7.3% |
| Edge | 25,432 | 4.1% |
| Other | 13,890 | 2.2% |
*Data from the last 30 days*`,
}
export const GitHubFlavoredMarkdown: Story = Template.bind({})
GitHubFlavoredMarkdown.args = {
children: `# GitHub-flavored Markdown features
## Strikethrough text
This text is ~~deleted~~ and this text is **bold**.
You can also combine ~~**bold and deleted**~~ text.
## Task lists
Here's our development progress:
- [x] Add remark-gfm plugin support
- [x] Implement table styling
- [x] Create Storybook stories
- [ ] Add comprehensive documentation
- [ ] Performance optimization
- [ ] Mobile responsiveness testing
## Autolink literals
Visit https://posthog.com for more information about our product.
You can also check out our GitHub repository at https://github.com/PostHog/posthog
Email us at hello@posthog.com for support.`,
}
export const Strikethrough: Story = Template.bind({})
Strikethrough.args = {
children: `# Text Formatting
This is ~~incorrect~~ **correct** information.
~~The old way~~ → The new way
You can combine ~~strikethrough~~ with *emphasis* and **bold** text.`,
}
export const TaskLists: Story = Template.bind({})
TaskLists.args = {
children: `# Project Todo List
## Sprint 1
- [x] Setup project repository
- [x] Configure CI/CD pipeline
- [x] Write initial documentation
- [ ] Implement core features
- [ ] Add comprehensive tests
## Sprint 2
- [ ] Performance optimization
- [ ] Security audit
- [ ] User acceptance testing
- [x] Code review process
## Notes
- Use [x] for completed tasks
- Use [ ] for pending tasks
- Tasks can be nested and combined with other markdown`,
}
export const AutolinkLiterals: Story = Template.bind({})
AutolinkLiterals.args = {
children: `# Automatic Links
## Websites
Visit https://posthog.com to learn more about our platform.
Check out our documentation at https://posthog.com/docs
## Email Addresses
Contact us at hello@posthog.com for general inquiries.
For technical support: support@posthog.com
## Mixed Content
Our GitHub repository (https://github.com/PostHog/posthog) contains the full source code.
For questions, email team@posthog.com or visit https://posthog.com/questions`,
}

View File

@@ -1,10 +1,13 @@
import './LemonMarkdown.scss'
import clsx from 'clsx'
import { props } from 'kea'
import React, { memo, useMemo } from 'react'
import ReactMarkdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
import { CodeSnippet, Language } from 'lib/components/CodeSnippet'
import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox'
import { Link } from '../Link'
@@ -45,6 +48,19 @@ const LemonMarkdownRenderer = memo(function LemonMarkdownRenderer({
{value}
</CodeSnippet>
),
listItem: ({ checked, children }: any): JSX.Element => {
// Handle task list items with LemonCheckbox
if (checked != null) {
return (
<li className="LemonMarkdown__task">
<LemonCheckbox checked={checked} disabledReason="Read-only for display" size="small" />
<span className="LemonMarkdown__task-content">{children}</span>
</li>
)
}
// Regular list item
return <li {...props}>{children}</li>
},
...(lowKeyHeadings
? {
heading: 'strong',
@@ -59,6 +75,7 @@ const LemonMarkdownRenderer = memo(function LemonMarkdownRenderer({
<ReactMarkdown
renderers={renderers}
disallowedTypes={['html']} // Don't want to deal with the security considerations of HTML
plugins={[remarkGfm]}
>
{children}
</ReactMarkdown>

View File

@@ -3,7 +3,7 @@ import './Link.scss'
import { router } from 'kea-router'
import React, { useContext } from 'react'
import { IconExternal, IconOpenSidebar } from '@posthog/icons'
import { IconExternal, IconOpenSidebar, IconSend } from '@posthog/icons'
import { ButtonPrimitiveProps, buttonPrimitiveVariants } from 'lib/ui/Button/ButtonPrimitives'
import { isExternalLink } from 'lib/utils'
@@ -218,6 +218,8 @@ export const Link: React.FC<LinkProps & React.RefAttributes<HTMLElement>> = Reac
{targetBlankIcon &&
(shouldOpenInDocsPanel && sidePanelStateLogic.isMounted() ? (
<IconOpenSidebar />
) : href?.startsWith('mailto:') ? (
<IconSend />
) : target === '_blank' ? (
<IconExternal className={buttonProps ? 'size-3' : ''} />
) : null)}

163
pnpm-lock.yaml generated
View File

@@ -976,6 +976,9 @@ importers:
react-virtualized:
specifier: ^9.22.5
version: 9.22.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
remark-gfm:
specifier: ^1.0.0
version: 1.0.0
resize-observer-polyfill:
specifier: ^1.5.1
version: 1.5.1
@@ -9813,6 +9816,9 @@ packages:
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
ccount@1.1.0:
resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==}
chalk-template@1.1.0:
resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==}
engines: {node: '>=14.16'}
@@ -13547,6 +13553,9 @@ packages:
long@5.2.4:
resolution: {integrity: sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==}
longest-streak@2.0.4:
resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -13638,6 +13647,9 @@ packages:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
markdown-table@2.0.0:
resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==}
markdown-to-jsx@7.3.2:
resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==}
engines: {node: '>= 10'}
@@ -13675,9 +13687,30 @@ packages:
mdast-util-definitions@4.0.0:
resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
mdast-util-find-and-replace@1.1.1:
resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==}
mdast-util-from-markdown@0.8.5:
resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==}
mdast-util-gfm-autolink-literal@0.1.3:
resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==}
mdast-util-gfm-strikethrough@0.2.3:
resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==}
mdast-util-gfm-table@0.1.6:
resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==}
mdast-util-gfm-task-list-item@0.1.6:
resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==}
mdast-util-gfm@0.1.2:
resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==}
mdast-util-to-markdown@0.6.5:
resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==}
mdast-util-to-string@1.1.0:
resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
@@ -13729,6 +13762,24 @@ packages:
mhchemparser@4.2.1:
resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==}
micromark-extension-gfm-autolink-literal@0.5.7:
resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==}
micromark-extension-gfm-strikethrough@0.6.5:
resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==}
micromark-extension-gfm-table@0.4.3:
resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==}
micromark-extension-gfm-tagfilter@0.3.0:
resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==}
micromark-extension-gfm-task-list-item@0.3.3:
resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==}
micromark-extension-gfm@0.3.3:
resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==}
micromark@2.11.4:
resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
@@ -15973,6 +16024,9 @@ packages:
remark-external-links@8.0.0:
resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==}
remark-gfm@1.0.0:
resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==}
remark-parse@9.0.0:
resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==}
@@ -15982,6 +16036,10 @@ packages:
renderkid@3.0.0:
resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
request-progress@3.0.0:
resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
@@ -18023,6 +18081,9 @@ packages:
react:
optional: true
zwitch@1.0.5:
resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
zxcvbn@4.4.2:
resolution: {integrity: sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ==}
@@ -28733,6 +28794,8 @@ snapshots:
caseless@0.12.0: {}
ccount@1.1.0: {}
chalk-template@1.1.0:
dependencies:
chalk: 5.4.1
@@ -33367,6 +33430,8 @@ snapshots:
long@5.2.4: {}
longest-streak@2.0.4: {}
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -33506,6 +33571,10 @@ snapshots:
punycode.js: 2.3.1
uc.micro: 2.1.0
markdown-table@2.0.0:
dependencies:
repeat-string: 1.6.1
markdown-to-jsx@7.3.2(react@18.2.0):
dependencies:
react: 18.2.0
@@ -33548,6 +33617,12 @@ snapshots:
dependencies:
unist-util-visit: 2.0.3
mdast-util-find-and-replace@1.1.1:
dependencies:
escape-string-regexp: 4.0.0
unist-util-is: 4.1.0
unist-util-visit-parents: 3.1.1
mdast-util-from-markdown@0.8.5:
dependencies:
'@types/mdast': 3.0.10
@@ -33558,6 +33633,46 @@ snapshots:
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@0.1.3:
dependencies:
ccount: 1.1.0
mdast-util-find-and-replace: 1.1.1
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@0.2.3:
dependencies:
mdast-util-to-markdown: 0.6.5
mdast-util-gfm-table@0.1.6:
dependencies:
markdown-table: 2.0.0
mdast-util-to-markdown: 0.6.5
mdast-util-gfm-task-list-item@0.1.6:
dependencies:
mdast-util-to-markdown: 0.6.5
mdast-util-gfm@0.1.2:
dependencies:
mdast-util-gfm-autolink-literal: 0.1.3
mdast-util-gfm-strikethrough: 0.2.3
mdast-util-gfm-table: 0.1.6
mdast-util-gfm-task-list-item: 0.1.6
mdast-util-to-markdown: 0.6.5
transitivePeerDependencies:
- supports-color
mdast-util-to-markdown@0.6.5:
dependencies:
'@types/unist': 2.0.6
longest-streak: 2.0.4
mdast-util-to-string: 2.0.0
parse-entities: 2.0.0
repeat-string: 1.6.1
zwitch: 1.0.5
mdast-util-to-string@1.1.0: {}
mdast-util-to-string@2.0.0: {}
@@ -33605,6 +33720,43 @@ snapshots:
mhchemparser@4.2.1: {}
micromark-extension-gfm-autolink-literal@0.5.7:
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
micromark-extension-gfm-strikethrough@0.6.5:
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
micromark-extension-gfm-table@0.4.3:
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
micromark-extension-gfm-tagfilter@0.3.0: {}
micromark-extension-gfm-task-list-item@0.3.3:
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
micromark-extension-gfm@0.3.3:
dependencies:
micromark: 2.11.4
micromark-extension-gfm-autolink-literal: 0.5.7
micromark-extension-gfm-strikethrough: 0.6.5
micromark-extension-gfm-table: 0.4.3
micromark-extension-gfm-tagfilter: 0.3.0
micromark-extension-gfm-task-list-item: 0.3.3
transitivePeerDependencies:
- supports-color
micromark@2.11.4:
dependencies:
debug: 4.4.0(supports-color@8.1.1)
@@ -36411,6 +36563,13 @@ snapshots:
space-separated-tokens: 1.1.5
unist-util-visit: 2.0.3
remark-gfm@1.0.0:
dependencies:
mdast-util-gfm: 0.1.2
micromark-extension-gfm: 0.3.3
transitivePeerDependencies:
- supports-color
remark-parse@9.0.0:
dependencies:
mdast-util-from-markdown: 0.8.5
@@ -36431,6 +36590,8 @@ snapshots:
lodash: 4.17.21
strip-ansi: 6.0.1
repeat-string@1.6.1: {}
request-progress@3.0.0:
dependencies:
throttleit: 1.0.0
@@ -38708,4 +38869,6 @@ snapshots:
'@types/react': 17.0.52
react: 18.2.0
zwitch@1.0.5: {}
zxcvbn@4.4.2: {}