From 2c316040896034044bf6f1f5075d7eac640d67dd Mon Sep 17 00:00:00 2001 From: Daniele Guido Date: Tue, 12 Mar 2024 09:29:13 +0100 Subject: [PATCH] update layout --- gatsby-browser.js | 15 ++- gatsby-node.js | 10 +- package.json | 3 + src/components/Background.js | 4 +- src/components/CollectionCard.js | 3 +- src/components/Footer.js | 4 +- src/components/ModalTutorial.js | 1 + src/components/NotebookCard.css | 2 +- src/components/NotebookCard.js | 10 +- src/components/PageLayout.js | 47 ++++++++ src/components/PrefetchData.js | 7 +- src/components/Wall.css | 0 src/components/Wall.js | 50 ++++++--- src/styles/style.css | 16 ++- src/templates/Notebook.js | 24 ++++- yarn.lock | 179 ++++++++++++++++++++++++++++++- 16 files changed, 336 insertions(+), 39 deletions(-) create mode 100644 src/components/PageLayout.js create mode 100644 src/components/Wall.css diff --git a/gatsby-browser.js b/gatsby-browser.js index a18ea63..358d750 100644 --- a/gatsby-browser.js +++ b/gatsby-browser.js @@ -7,6 +7,7 @@ import Modals from "./src/components/Modals" import { AvailableModalsViews, useBrowserStore } from "./src/store" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import PrefetchData from "./src/components/PrefetchData" +import PageLayout from "./src/components/PageLayout" // Logs when the client route changes export function onRouteUpdate({ location, prevLocation }) { @@ -43,10 +44,10 @@ export function onRouteUpdate({ location, prevLocation }) { } // always update store with view and viewId - useBrowserStore.setState({ - view, - viewId, - }) + // useBrowserStore.setState({ + // view, + // viewId, + // }) } // Create a client @@ -70,3 +71,9 @@ export function wrapRootElement({ element, props }) { ) } + +// wraps every page in a component +export function wrapPageElement({ element, props }) { + console.log("[gatsby-browser]@wrapPageElement", props) + return {element} +} diff --git a/gatsby-node.js b/gatsby-node.js index f5f1828..c888201 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -121,7 +121,14 @@ exports.createPages = async function ({ actions, graphql }) { actions.createPage({ path: `/notebook/${node.name}`, component: require.resolve(`./src/templates/Notebook.js`), - context: { node }, + context: { + type: "notebook", + data: { + ...notebooksMap[node.name], + body: node.childMdx.body, + tableOfContents: node.childMdx.tableOfContents, + }, + }, }) }) const { data: collections } = await graphql(` @@ -134,6 +141,7 @@ exports.createPages = async function ({ actions, graphql }) { name childMdx { excerpt + tableOfContents frontmatter { title notebooks diff --git a/package.json b/package.json index 4c0a2a2..3bb236a 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,12 @@ "clean": "gatsby clean" }, "dependencies": { + "@codemirror/lang-python": "^6.1.4", "@mdx-js/react": "^3.0.0", "@react-spring/web": "^9.7.3", "@tanstack/react-query": "^5.25.0", + "@uiw/codemirror-theme-nord": "^4.21.24", + "@uiw/react-codemirror": "^4.21.24", "axios": "^1.6.7", "bootstrap": "^5.3.2", "boring-avatars": "^1.10.1", diff --git a/src/components/Background.js b/src/components/Background.js index 03eb2f2..92b36c8 100644 --- a/src/components/Background.js +++ b/src/components/Background.js @@ -53,8 +53,8 @@ const Background = () => {
- {/*
-
*/} +
+
diff --git a/src/components/CollectionCard.js b/src/components/CollectionCard.js index 527b1d0..c30cdee 100644 --- a/src/components/CollectionCard.js +++ b/src/components/CollectionCard.js @@ -3,7 +3,7 @@ import "./CollectionCard.css" import { useDataStore } from "../store" import NotebookCard from "./NotebookCard" -const CollectionCard = ({ name }) => { +const CollectionCard = ({ name, children }) => { const [, getCollectionByName] = useDataStore((state) => [ state.isReady, state.getCollectionByName, @@ -14,6 +14,7 @@ const CollectionCard = ({ name }) => {

{collection?.title}

{collection?.excerpt}

+ {children}
    {collection?.notebooks.map((name, i) => ( diff --git a/src/components/Footer.js b/src/components/Footer.js index dead3cf..8a87172 100644 --- a/src/components/Footer.js +++ b/src/components/Footer.js @@ -71,5 +71,5 @@ const Footer = () => { ) } - -export default Footer +// render only once. +export default React.memo(Footer, true) diff --git a/src/components/ModalTutorial.js b/src/components/ModalTutorial.js index 4b1f91d..7a7c17d 100644 --- a/src/components/ModalTutorial.js +++ b/src/components/ModalTutorial.js @@ -23,6 +23,7 @@ const ModalTutorial = ({ onClose, ...props }) => { axios.get(url).then((res) => { return res.data }), + enabled: !!name, }) console.info(`[ModalTutorial] ${name} ${url} ${status}`) diff --git a/src/components/NotebookCard.css b/src/components/NotebookCard.css index d8f6fbc..a84d61f 100644 --- a/src/components/NotebookCard.css +++ b/src/components/NotebookCard.css @@ -1,5 +1,5 @@ .NotebookCard { - border-radius: var(--impresso-border-rqdius-sm); + border-radius: var(--impresso-border-radius-sm); background: white; } diff --git a/src/components/NotebookCard.js b/src/components/NotebookCard.js index a2217ff..27b5756 100644 --- a/src/components/NotebookCard.js +++ b/src/components/NotebookCard.js @@ -3,7 +3,7 @@ import { ModalNotebookPreviewView, useDataStore } from "../store" import AuthorCard from "./AuthorCard" import { Button } from "react-bootstrap" import "./NotebookCard.css" -import { navigate } from "gatsby" +import { Link, navigate } from "gatsby" import Avatar from "boring-avatars" import { ArrowRight } from "iconoir-react" import { DateTime } from "luxon" @@ -45,14 +45,12 @@ const NotebookCard = ({ name }) => {
- +
diff --git a/src/components/PageLayout.js b/src/components/PageLayout.js new file mode 100644 index 0000000..d508548 --- /dev/null +++ b/src/components/PageLayout.js @@ -0,0 +1,47 @@ +import { useSpring } from "@react-spring/web" +import { Link } from "gatsby" +import React, { useEffect, useRef, useState } from "react" +import { Button, Modal } from "react-bootstrap" +import ModalNotebookPreview from "./ModalNotebookPreview" + +const PageLayout = ({ children, path, pageContext }) => { + console.log("[PageLayout] render props") + const [show, setShow] = useState(true) + const timerRef = useRef() + + const handleClose = () => { + setShow(false) + clearTimeout(timerRef.current) + timerRef.current = setTimeout(() => { + window.history.back() + }, 800) + } + useEffect(() => { + return () => { + clearTimeout(timerRef.current) + } + }, []) + useEffect(() => { + // scroll to 0 0 + window.scrollTo(0, 0) + if (path === "/") { + setShow(false) + } else { + setShow(true) + } + }, [path]) + + return ( + + + impresso-datalab + + + {children} + + ) +} + +export default PageLayout diff --git a/src/components/PrefetchData.js b/src/components/PrefetchData.js index f51825c..988448c 100644 --- a/src/components/PrefetchData.js +++ b/src/components/PrefetchData.js @@ -7,7 +7,7 @@ const PrefetchData = () => { state.setData, state.isReady, ]) - console.info("[PrefetchData] load data", !isReady) + console.info("[PrefetchData] load data:", isReady ? "ready" : "not ready") // this schema updates the store so that e always have the full list of authors and books useQuery({ queryKey: ["todoss"], @@ -22,13 +22,12 @@ const PrefetchData = () => { axios .get((process.env.GATSBY_PATH_PREFIX || "") + url) .then((res) => { - console.info(`[PrefetchData] ${url}`, res.data) + console.debug(`[PrefetchData] ${url}`, res.data) return res.data }) ) ).then((res) => { - console.info("[PrefetchData] done", res) - + console.info("[PrefetchData] completed.") setData({ authorsMap: res[0], notebooksMap: res[1], diff --git a/src/components/Wall.css b/src/components/Wall.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Wall.js b/src/components/Wall.js index 3af85db..e06fbf6 100644 --- a/src/components/Wall.js +++ b/src/components/Wall.js @@ -1,8 +1,19 @@ import React from "react" -import { graphql, useStaticQuery } from "gatsby" +import { Link, graphql, useStaticQuery } from "gatsby" import { Col, Container, Row } from "react-bootstrap" import TutorialCard from "./TutorialCard" import CollectionCard from "./CollectionCard" +import ReactCodeMirror from "@uiw/react-codemirror" +import { nord } from "@uiw/codemirror-theme-nord" +import { python } from "@codemirror/lang-python" + +const CodeSample = ` +from impresso-py import impresso + +print(impresso.version()) + +results = impresso.search("moon landing") +` const Wall = () => { const { highlighted, collections, notebooks, authors, tutorials } = @@ -62,30 +73,45 @@ const Wall = () => { `) return ( - +

Highlights

{highlighted.nodes.length ? ( - highlighted.nodes.map((node) => ( - - )) + + + ) : (

No highlighted collections found.

)}

Give your media monitoring a boost.

+ +

+ We collected {notebooks.totalCount}{" "} + Jupyter notebooks so far; developed{" "} + {tutorials.totalCount} tutorials; orchestrated{" "} + {collections.totalCount} collections of notebooks, developed + by {authors.totalCount} authors. +

-

- We collected {notebooks.totalCount} Jupyter notebooks so - far; developed {tutorials.totalCount} tutorials; - orchestrated {collections.totalCount} collections of - notebooks, developed by {authors.totalCount} authors. -

- +
+ +

Quick links

+

+ The `impresso-py` python package documentation is on{" "} + readthedocs. All the notebooks have each an + independent environment you can spin with docker, preview on + mybinder, google colab... +

+
diff --git a/src/styles/style.css b/src/styles/style.css index 9c95bc9..c5329b4 100644 --- a/src/styles/style.css +++ b/src/styles/style.css @@ -5,7 +5,8 @@ --impresso-color-yellow: rgb(--impresso-color-yellow-code); --impresso-color-black: #343a40; --impresso-color-black-rgb: 52, 58, 64; - --impresso-border-rqdius-sm: 20px; + --impresso-border-radius-xs: 5px; + --impresso-border-radius-sm: 20px; --impresso-border-radius-lg: 30px; --impresso-border-radius-xl: 40px; --bs-font-sans-serif: "Satoshi-Variable", -apple-system, BlinkMacSystemFont, @@ -129,7 +130,7 @@ b { } .container-fluid { - max-width: 1414px; + max-width: 1600px; } .modal-backdrop { @@ -147,3 +148,14 @@ hr { color: var(--impresso-color-black); opacity: 1; } + +/* codemirror theme refinement */ +.cm-editor { + box-shadow: var(--shadow-lg); + border-radius: var(--impresso-border-radius-xs); +} + +.cm-gutters { + border-start-start-radius: var(--impresso-border-radius-xs); + border-end-start-radius: var(--impresso-border-radius-xs); +} diff --git a/src/templates/Notebook.js b/src/templates/Notebook.js index aae2113..7ed8cb8 100644 --- a/src/templates/Notebook.js +++ b/src/templates/Notebook.js @@ -1,8 +1,26 @@ -import React from 'react' +import React from "react" +import { Col, Container, Row } from "react-bootstrap" +import Markdown from "../components/Markdown" -const Notebook = ({ path, ...props }) => { +const Notebook = ({ path, pageContext, ...props }) => { return ( -
+
+ +

{pageContext.data.title}

+ + + {pageContext.data.body} + + + {pageContext.data.excerpt} +
    + {pageContext.data.tableOfContents.items?.map((d, i) => ( +
  • {d.title}
  • + ))} +
+ +
+
{JSON.stringify(path)}
{JSON.stringify(props, null, 2)}
diff --git a/yarn.lock b/yarn.lock index eb5d6eb..371db22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1103,6 +1103,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.18.6": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.20.7", "@babel/template@^7.22.15", "@babel/template@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" @@ -1142,6 +1149,91 @@ resolved "https://registry.yarnpkg.com/@builder.io/partytown/-/partytown-0.7.6.tgz#697acea6b552167a4dd43ddd4827018aa42e0364" integrity sha512-snXIGNiZpqjno3XYQN2lbBB+05hsQR/LSttbtIW1c0gmZ7Kh/DIo0YrxlDxCDulAMFPFM8J+4voLwvYepSj3sw== +"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.3.2": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.14.0.tgz#297071b51c8849ff35bbdd8c323964e113c10d84" + integrity sha512-Kx9BCSOLKmqNXEvmViuzsBQJ2VEa/wWwOATNpixOa+suttTV3rDnAUtAIt5ObAUFjXvZakWfFfF/EbxELnGLzQ== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.17.0" + "@lezer/common" "^1.0.0" + +"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0": + version "6.3.3" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.3.3.tgz#03face5bf5f3de0fc4e09b177b3c91eda2ceb7e9" + integrity sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.4.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.1.0" + +"@codemirror/lang-python@^6.1.4": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@codemirror/lang-python/-/lang-python-6.1.4.tgz#12151d9dfe70dec6600a4628d7f0a9e302e4360f" + integrity sha512-b6d1TDqrkCjFNvMO01SWldFiDoZ39yl3tDMC1Y5f8glA2eZpynPxJhwYVTlGFr0stizcJgrp6ojLEGH2myoZAw== + dependencies: + "@codemirror/autocomplete" "^6.3.2" + "@codemirror/language" "^6.8.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.2.1" + "@lezer/python" "^1.1.4" + +"@codemirror/language@^6.0.0", "@codemirror/language@^6.8.0": + version "6.10.1" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.1.tgz#428c932a158cb75942387acfe513c1ece1090b05" + integrity sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.23.0" + "@lezer/common" "^1.1.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + style-mod "^4.0.0" + +"@codemirror/lint@^6.0.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.5.0.tgz#ea43b6e653dcc5bcd93456b55e9fe62e63f326d9" + integrity sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + crelt "^1.0.5" + +"@codemirror/search@^6.0.0": + version "6.5.6" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.6.tgz#8f858b9e678d675869112e475f082d1e8488db93" + integrity sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + crelt "^1.0.5" + +"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.4.0": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.4.1.tgz#da57143695c056d9a3c38705ed34136e2b68171b" + integrity sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A== + +"@codemirror/theme-one-dark@^6.0.0": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz#fcef9f9cfc17a07836cb7da17c9f6d7231064df8" + integrity sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/highlight" "^1.0.0" + +"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0": + version "6.25.1" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.25.1.tgz#826ea345fd757dbeeab6a6165c1823e851c67d16" + integrity sha512-2LXLxsQnHDdfGzDvjzAwZh2ZviNJm7im6tGpa0IONIDnFd8RZ80D2SNi8PDi6YjKcMoMRK20v6OmKIdsrwsyoQ== + dependencies: + "@codemirror/state" "^6.4.0" + style-mod "^4.1.0" + w3c-keyname "^2.2.4" + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1438,11 +1530,18 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lezer/common@^1.0.0": +"@lezer/common@^1.0.0", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== +"@lezer/highlight@^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.0.tgz#e5898c3644208b4b589084089dceeea2966f7780" + integrity sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA== + dependencies: + "@lezer/common" "^1.0.0" + "@lezer/lr@^1.0.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.0.tgz#ed52a75dbbfbb0d1eb63710ea84c35ee647cb67e" @@ -1450,6 +1549,15 @@ dependencies: "@lezer/common" "^1.0.0" +"@lezer/python@^1.1.4": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@lezer/python/-/python-1.1.11.tgz#ee520f69b30d94e189a6b8b10f6cc3698a2978fa" + integrity sha512-C3QeLCcdAKJDUOsYjfFP6a1wdn8jhUNX200bgFm8TpKH1eM2PlgYQS5ugw6E38qGeEx7CP21I1Q52SoybXt0OQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + "@lmdb/lmdb-darwin-arm64@2.5.2": version "2.5.2" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz#bc66fa43286b5c082e8fee0eacc17995806b6fbe" @@ -2591,6 +2699,47 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@uiw/codemirror-extensions-basic-setup@4.21.24": + version "4.21.24" + resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.21.24.tgz#b936c3daff0100e1a3d5b0500478747cfc80f7db" + integrity sha512-TJYKlPxNAVJNclW1EGumhC7I02jpdMgBon4jZvb5Aju9+tUzS44IwORxUx8BD8ZtH2UHmYS+04rE3kLk/BtnCQ== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/commands" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/lint" "^6.0.0" + "@codemirror/search" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + +"@uiw/codemirror-theme-nord@^4.21.24": + version "4.21.24" + resolved "https://registry.yarnpkg.com/@uiw/codemirror-theme-nord/-/codemirror-theme-nord-4.21.24.tgz#c9a1ef09a34c4b5d4970ec4ada465f925d7bbc44" + integrity sha512-dG4aKIi2k9a4oeXf4yWY6MKkgU+Q1ZiR4pkcclVsYjLGdEjHB5HavMTtUJ+iX5jxdaeC+KewKVYh8DkLTloNog== + dependencies: + "@uiw/codemirror-themes" "4.21.24" + +"@uiw/codemirror-themes@4.21.24": + version "4.21.24" + resolved "https://registry.yarnpkg.com/@uiw/codemirror-themes/-/codemirror-themes-4.21.24.tgz#69b83d1d77f8ad40a2a8689e8bf54e4b445b88f3" + integrity sha512-InY24KWP8YArDBACWHKFZ6ZU+WCvRHf3ZB2cCVxMVN35P1ANUmRzpAP2ernZQ5OIriL1/A/kXgD0Zg3Y65PNgg== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + +"@uiw/react-codemirror@^4.21.24": + version "4.21.24" + resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.21.24.tgz#38b05e0a24d2307313b2e73390b20d0251837170" + integrity sha512-8zs5OuxbhikHocHBsVBMuW1vqlv4ccZAkt4rFwr7ebLP2Q6RwHsjpsR9GeGyAigAqonKRoeHugqF78UMrkaTgg== + dependencies: + "@babel/runtime" "^7.18.6" + "@codemirror/commands" "^6.1.0" + "@codemirror/state" "^6.1.1" + "@codemirror/theme-one-dark" "^6.0.0" + "@uiw/codemirror-extensions-basic-setup" "4.21.24" + codemirror "^6.0.0" + "@vercel/webpack-asset-relocator-loader@^1.7.3": version "1.7.3" resolved "https://registry.yarnpkg.com/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.3.tgz#e65ca1fd9feb045039788f9b4710e5acc84b01b0" @@ -3727,6 +3876,19 @@ clone@^2.1.1: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== +codemirror@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" + integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/commands" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/lint" "^6.0.0" + "@codemirror/search" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -3991,6 +4153,11 @@ create-gatsby@^3.13.1: dependencies: "@babel/runtime" "^7.20.13" +crelt@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" + integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== + cross-fetch@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -10188,6 +10355,11 @@ style-loader@^2.0.0: loader-utils "^2.0.0" schema-utils "^3.0.0" +style-mod@^4.0.0, style-mod@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" + integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== + style-to-object@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" @@ -10885,6 +11057,11 @@ vfile@^5.0.0, vfile@^5.3.7: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" +w3c-keyname@^2.2.4: + version "2.2.8" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" + integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== + warning@^4.0.0, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"