diff --git a/package.json b/package.json index 635d473..72db44f 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dockview": "^1.7.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-markdown": "^8.0.7", "remirror": "^2.0.26", "sass": "^1.62.0", "uuid": "^9.0.0", diff --git a/src/modules/editor/components/ReactMarkdownEditor/index.tsx b/src/modules/editor/components/ReactMarkdownEditor/index.tsx new file mode 100644 index 0000000..390e429 --- /dev/null +++ b/src/modules/editor/components/ReactMarkdownEditor/index.tsx @@ -0,0 +1,41 @@ +import { ChangeEvent, FC, useCallback, useMemo } from "react"; +import styles from "./styles.module.scss"; +import { useTheme } from "~/modules/theme/context/ThemeContext"; + +interface ReactMarkdownEditorProps { + value: string; + onChange: (val: string) => void; +} + +const ReactMarkdownEditor: FC = ({ + value, + onChange, +}) => { + const changeHandler = useCallback( + (event: ChangeEvent) => { + onChange(event.target.value); + }, + [onChange] + ); + + const { paddingHorizontal, paddingVertical } = useTheme(); + + const style = useMemo( + () => ({ + padding: `${paddingVertical}px ${paddingHorizontal}px`, + }), + [paddingHorizontal, paddingVertical] + ); + + return ( + + ); +}; + +export { ReactMarkdownEditor }; diff --git a/src/modules/editor/components/ReactMarkdownEditor/styles.module.scss b/src/modules/editor/components/ReactMarkdownEditor/styles.module.scss new file mode 100644 index 0000000..5d4d62b --- /dev/null +++ b/src/modules/editor/components/ReactMarkdownEditor/styles.module.scss @@ -0,0 +1,9 @@ +.textarea { + width: 100%; + height: 100%; + padding: 0; + background: transparent; + color: inherit; + border: none; + box-sizing: border-box; +} diff --git a/src/modules/editor/components/ReactMarkdownViewer/index.tsx b/src/modules/editor/components/ReactMarkdownViewer/index.tsx new file mode 100644 index 0000000..8024e57 --- /dev/null +++ b/src/modules/editor/components/ReactMarkdownViewer/index.tsx @@ -0,0 +1,20 @@ +import { FC } from "react"; +import ReactMarkdown from "react-markdown"; +import { useContainerPaddings } from "~/modules/theme/hooks/useContainerPaddings"; +import styles from "./styles.module.scss"; + +interface ReactMarkdownViewerProps { + value: string; +} + +const ReactMarkdownViewer: FC = ({ value }) => { + const style = useContainerPaddings(); + + return ( +
+ {value} +
+ ); +}; + +export { ReactMarkdownViewer }; diff --git a/src/modules/editor/components/ReactMarkdownViewer/styles.module.scss b/src/modules/editor/components/ReactMarkdownViewer/styles.module.scss new file mode 100644 index 0000000..dcc55ae --- /dev/null +++ b/src/modules/editor/components/ReactMarkdownViewer/styles.module.scss @@ -0,0 +1,11 @@ +.editor { + & > :first-child { + margin-top: 0 !important; + margin-left: 0 !important; + } + + & > :last-child { + margin-bottom: 0 !important; + margin-right: 0 !important; + } +} diff --git a/src/modules/editor/components/RemirrorEditor/index.tsx b/src/modules/editor/components/RemirrorEditor/index.tsx index 441c0fd..de44956 100644 --- a/src/modules/editor/components/RemirrorEditor/index.tsx +++ b/src/modules/editor/components/RemirrorEditor/index.tsx @@ -31,6 +31,7 @@ import { GapCursorExtension, } from "remirror/extensions"; import styles from "./styles.module.scss"; +import { useContainerPaddings } from "~/modules/theme/hooks/useContainerPaddings"; interface RemirrorEditorProps { locked: boolean; @@ -63,23 +64,28 @@ const RemirrorEditor: FC = ({ [onChange, setState] ); + const style = useContainerPaddings(); + return ( - - - {!locked && ( - - - - - )} - +
+ + + {!locked && ( + + + + + )} + +
); }; diff --git a/src/modules/editor/components/RemirrorEditor/styles.module.scss b/src/modules/editor/components/RemirrorEditor/styles.module.scss index db21673..4987b33 100644 --- a/src/modules/editor/components/RemirrorEditor/styles.module.scss +++ b/src/modules/editor/components/RemirrorEditor/styles.module.scss @@ -1,6 +1,17 @@ +.wrapper { + height: 100%; + box-sizing: border-box; + + & > :global(.remirror-editor-wrapper) { + height: 100%; + box-sizing: border-box; + } +} + .editor { outline: none; height: 100%; + box-sizing: border-box; & > :first-child { margin-top: 0 !important; diff --git a/src/modules/editor/containers/MarkdownEditorContainer/index.tsx b/src/modules/editor/containers/MarkdownEditorContainer/index.tsx index 8cb50bb..e04ab6d 100644 --- a/src/modules/editor/containers/MarkdownEditorContainer/index.tsx +++ b/src/modules/editor/containers/MarkdownEditorContainer/index.tsx @@ -1,7 +1,8 @@ import { FC } from "react"; -import styles from "./styles.module.scss"; +import { ReactMarkdownEditor } from "../../components/ReactMarkdownEditor"; +import { ReactMarkdownViewer } from "../../components/ReactMarkdownViewer"; import { usePersistedValue } from "./hooks/usePersistedValue"; -import { RemirrorEditor } from "../../components/RemirrorEditor"; +import styles from "./styles.module.scss"; interface MarkdownEditorContainerProps { id: string; @@ -16,7 +17,19 @@ export const MarkdownEditorContainer: FC = ({ return (
- + {/* + locked ? ( + + ) : ( + + ) + */} + {locked ? ( + + ) : ( + + // + )}
); }; diff --git a/src/modules/editor/containers/MarkdownEditorContainer/styles.module.scss b/src/modules/editor/containers/MarkdownEditorContainer/styles.module.scss index 816774d..7514d11 100644 --- a/src/modules/editor/containers/MarkdownEditorContainer/styles.module.scss +++ b/src/modules/editor/containers/MarkdownEditorContainer/styles.module.scss @@ -1,6 +1,5 @@ .editor { height: 100%; - padding: 16px; overflow: scroll; box-sizing: border-box; } diff --git a/src/modules/layout/components/GridLayoutItemWrapper/index.tsx b/src/modules/layout/components/GridLayoutItemWrapper/index.tsx index 39557ac..1ed1564 100644 --- a/src/modules/layout/components/GridLayoutItemWrapper/index.tsx +++ b/src/modules/layout/components/GridLayoutItemWrapper/index.tsx @@ -26,27 +26,27 @@ const GridLayoutItemWrapper: FC = ({ }) => (
+ + + + + + + {!locked && ( - <> - - - - - - - - - - + + + )} + {locked ? : } diff --git a/src/modules/theme/context/ThemeContext/index.ts b/src/modules/theme/context/ThemeContext/index.ts index 66d9645..687d107 100644 --- a/src/modules/theme/context/ThemeContext/index.ts +++ b/src/modules/theme/context/ThemeContext/index.ts @@ -5,6 +5,8 @@ import { FontFamily } from "../../constants/fonts"; export const defaultTheme = { theme: Theme.Dark, font: FontFamily.Inter, + paddingHorizontal: 16, + paddingVertical: 16, }; export const ThemeContext = createContext(defaultTheme); diff --git a/src/modules/theme/hooks/useContainerPaddings.ts b/src/modules/theme/hooks/useContainerPaddings.ts new file mode 100644 index 0000000..ac55815 --- /dev/null +++ b/src/modules/theme/hooks/useContainerPaddings.ts @@ -0,0 +1,12 @@ +import { useMemo } from "react"; +import { useTheme } from "~/modules/theme/context/ThemeContext"; +export const useContainerPaddings = () => { + const { paddingHorizontal, paddingVertical } = useTheme(); + + return useMemo( + () => ({ + padding: `${paddingVertical}px ${paddingHorizontal}px`, + }), + [paddingHorizontal, paddingVertical] + ); +}; diff --git a/src/styles/_dark.scss b/src/styles/_dark.scss index f39c43b..6a300f4 100644 --- a/src/styles/_dark.scss +++ b/src/styles/_dark.scss @@ -3,4 +3,7 @@ --color-background: #111111; --color-text: #ffffff; --color-link: #25bfe6; + --color-code-text: #ff3344; + --color-code-background: #{transparentize(#ff3344, 0.9)}; + --color-pre-background: #{lighten(#111111, 2%)}; } diff --git a/src/styles/main.scss b/src/styles/main.scss index d313fba..aecd2f1 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -25,3 +25,25 @@ ul { margin: 0.5em 0; } } + +code { + background: var(--color-code-background); + color: var(--color-code-text); + border-radius: 4px; + padding: 0 5px; + font-family: inherit; + font-size: 0.9em; +} + +pre { + background: var(--color-pre-background); + padding: 10px; + border-radius: 4px; + font-size: inherit; + + code { + padding: 0; + background: transparent; + color: inherit; + } +} diff --git a/yarn.lock b/yarn.lock index 8ba8381..a881c30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2119,7 +2119,7 @@ resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.0.tgz#a1c3809b0ad61c62cac6d4e0c56d610c910b7654" integrity sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== -"@types/prop-types@*", "@types/prop-types@^15.7.5": +"@types/prop-types@*", "@types/prop-types@^15.0.0", "@types/prop-types@^15.7.5": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== @@ -2917,6 +2917,11 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" @@ -4209,6 +4214,11 @@ hast-util-parse-selector@^2.0.0: resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== +hast-util-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" + integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== + hastscript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" @@ -4344,6 +4354,11 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + inline-style-prefixer@^6.0.0: version "6.0.4" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz#4290ed453ab0e4441583284ad86e41ad88384f44" @@ -5033,6 +5048,20 @@ mdast-util-phrasing@^3.0.0: "@types/mdast" "^3.0.0" unist-util-is "^5.0.0" +mdast-util-to-hast@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-definitions "^5.0.0" + micromark-util-sanitize-uri "^1.1.0" + trim-lines "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + mdast-util-to-markdown@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" @@ -5221,7 +5250,7 @@ micromark-util-resolve-all@^1.0.0: dependencies: micromark-util-types "^1.0.0" -micromark-util-sanitize-uri@^1.0.0: +micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz#f12e07a85106b902645e0364feb07cf253a85aee" integrity sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg== @@ -5895,7 +5924,7 @@ promise-toolbox@0.21.0: dependencies: make-error "^1.3.2" -prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -5911,6 +5940,11 @@ property-information@^5.0.0: dependencies: xtend "^4.0.0" +property-information@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" + integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg== + prosemirror-changeset@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.0.tgz#22c05da271a118be40d3e339fa2cace789b1254b" @@ -6170,11 +6204,32 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^18.2.0: +react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-markdown@^8.0.7: + version "8.0.7" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" + integrity sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.4.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -6323,6 +6378,16 @@ remark-parse@^10.0.0, remark-parse@^10.0.1: mdast-util-from-markdown "^1.0.0" unified "^10.0.0" +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + remark-stringify@^10.0.0, remark-stringify@^10.0.2: version "10.0.2" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-10.0.2.tgz#50414a6983f5008eb9e72eed05f980582d1f69d7" @@ -6766,6 +6831,11 @@ space-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spawn-sync@1.0.15: version "1.0.15" resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" @@ -6966,6 +7036,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +style-to-object@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.1.tgz#53cf856f7cf7f172d72939d9679556469ba5de37" + integrity sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw== + dependencies: + inline-style-parser "0.1.1" + stylis@4.1.3, stylis@^4.0.6: version "4.1.3" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" @@ -7097,6 +7174,11 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + trough@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" @@ -7231,6 +7313,11 @@ unique-string@^3.0.0: dependencies: crypto-random-string "^4.0.0" +unist-util-generated@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== + unist-util-is@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" @@ -7238,6 +7325,13 @@ unist-util-is@^5.0.0: dependencies: "@types/unist" "^2.0.0" +unist-util-position@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d"