diff --git a/.eslintrc.js b/.eslintrc.js index 87a720c..77ee691 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -88,7 +88,7 @@ module.exports = { }, overrides: [ { - files: [`packages/site/src/pages/*.tsx`], + files: [`packages/site/src/**/*.tsx`], rules: { '@typescript-eslint/naming-convention': 0, }, diff --git a/package.json b/package.json index 7713687..cfe3efb 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "serve:site": "yarn workspace site serve", "lint": "eslint . --ext .ts,.tsx,.js", "lint:fix": "yarn lint --fix", - "clean:plugin": "yarn workspace plugin clean", + "clean:plugin": "yarn workspace gatsby-source-hubspot-node clean", "clean:site": "yarn workspace site clean", "clean": "npm-run-all -p 'clean:*'", "husky": "husky", diff --git a/packages/plugin/__test__/utils.test.ts b/packages/plugin/__test__/utils.test.ts index 27330b7..54b8b3f 100644 --- a/packages/plugin/__test__/utils.test.ts +++ b/packages/plugin/__test__/utils.test.ts @@ -74,7 +74,6 @@ describe(`utils`, () => { }, "mimeType": "image/jpg", "parent": null, - "placeholderUrl": "undefined&w=%width%&h=%height%", "url": undefined, "width": undefined, } @@ -100,7 +99,6 @@ describe(`utils`, () => { }, "mimeType": "image/jpg", "parent": null, - "placeholderUrl": "https://images.unsplash.com/photo-1615751072497-5f5169febe17?fm=jpg&w=%width%&h=%height%", "url": "https://images.unsplash.com/photo-1615751072497-5f5169febe17?fm=jpg", "width": 3024, } @@ -150,20 +148,6 @@ describe(`utils`, () => { expect(response.data).toBe('successful'); }); }); - - // it('should format URL correctly when endpoint already contains query parameters', async () => { - // const pluginOptions = { - // endpoint: 'https://example.com/api?key1=value1', - // requestOptions: {}, - // searchParams: { - // param2: 'value2', - // }, - // }; - - // await fetchRequest(pluginOptions); - - // expect.deepEqual(fetch.mock.calls[0], ['https://example.com/api?key1=value1¶m2=value2', expect.any(Object)]); - // }); }); // it('should use default method and headers if not provided in requestOptions', async () => { diff --git a/packages/plugin/src/on-plugin-init.ts b/packages/plugin/src/on-plugin-init.ts index 3286b27..caa67dc 100644 --- a/packages/plugin/src/on-plugin-init.ts +++ b/packages/plugin/src/on-plugin-init.ts @@ -1,5 +1,6 @@ import type { GatsbyNode } from 'gatsby'; import { ERROR_CODES } from './constants'; +import { wrapWithAsterisks } from './utils'; /** * Use the onPluginInit API to set up things that should be run before the plugin is initialized. @@ -10,7 +11,10 @@ import { ERROR_CODES } from './constants'; * @see https://www.gatsbyjs.com/docs/reference/config-files/node-api-helpers/#reporter */ export const onPluginInit: GatsbyNode['onPluginInit'] = ({ reporter }) => { - reporter.info('Ye! Hubspot Blog Plugin Initialized. Check ReadMe.MD file for documentations'); + const info = `Hey, thanks for considering installing "gatsby-source-hubspot-node", + for documentation see https://github.com/samcyn/gatsby-source-hubspot-node`; + + reporter.info(wrapWithAsterisks(info)); reporter.setErrorMap({ [ERROR_CODES.HubspotSourcing]: { text: (context) => `${context.sourceMessage}: ${context.errorCode}`, diff --git a/packages/plugin/src/utils.ts b/packages/plugin/src/utils.ts index 43591d4..b5cee8c 100644 --- a/packages/plugin/src/utils.ts +++ b/packages/plugin/src/utils.ts @@ -31,14 +31,14 @@ export async function fetchRequest( url += hasQueryParams ? `&${params.toString()}` : `?${params.toString()}`; } - const { headers, method, ...rest } = requestOptions; + const { headers = {}, method = 'GET', ...rest } = requestOptions || {}; + + // Merge headers with defaultHeaders + const mergedHeaders = { ...defaultHeaders, ...headers }; const response = await fetch(url, { - method: method || 'GET', - headers: { - ...defaultHeaders, - ...headers, - }, + method, + headers: mergedHeaders, ...rest, }); @@ -120,7 +120,7 @@ export function createAssetNode(gatsbyApi: SourceNodesArgs, data: IPostImageInpu filename: data.url, width: data.width, height: data.height, - placeholderUrl: `${data.url}&w=%width%&h=%height%`, + // placeholderUrl: `${data.url}&w=%width%&h=%height%`, alt: data.alt, parent: null, children: [], @@ -137,3 +137,13 @@ export function createAssetNode(gatsbyApi: SourceNodesArgs, data: IPostImageInpu */ return id; } + +export function wrapWithAsterisks(message: string) { + function createAsteriskLine(length: number) { + return '*'.repeat(length); + } + + const asteriskLine = createAsteriskLine(message.length / 2); + + return `${asteriskLine}*\n\n* ${message} *\n\n${asteriskLine}******`; +} diff --git a/packages/site/gatsby-browser.js b/packages/site/gatsby-browser.js deleted file mode 100644 index 1cd9590..0000000 --- a/packages/site/gatsby-browser.js +++ /dev/null @@ -1 +0,0 @@ -import './src/styles/global.css'; diff --git a/packages/site/gatsby-browser.tsx b/packages/site/gatsby-browser.tsx new file mode 100644 index 0000000..6ac1a27 --- /dev/null +++ b/packages/site/gatsby-browser.tsx @@ -0,0 +1 @@ +export { default as wrapPageElement } from './src/components/AppLayout'; diff --git a/packages/site/gatsby-config.ts b/packages/site/gatsby-config.ts index af6a010..4da5fb3 100644 --- a/packages/site/gatsby-config.ts +++ b/packages/site/gatsby-config.ts @@ -11,9 +11,6 @@ const config: GatsbyConfig = { title: `site`, siteUrl: `https://www.samsoniyanda.com`, }, - // More easily incorporate content into your pages through automatic TypeScript type generation and better GraphQL IntelliSense. - // If you use VSCode you can also use the GraphQL plugin - // Learn more at: https://gatsby.dev/graphql-typegen graphqlTypegen: true, plugins: [ 'gatsby-plugin-postcss', @@ -25,9 +22,11 @@ const config: GatsbyConfig = { icon: 'src/images/icon.png', }, }, - 'gatsby-plugin-mdx', 'gatsby-plugin-sharp', 'gatsby-transformer-sharp', + { + resolve: 'gatsby-plugin-mdx', + }, { resolve: 'gatsby-source-filesystem', options: { @@ -44,6 +43,14 @@ const config: GatsbyConfig = { }, __key: 'pages', }, + { + resolve: 'gatsby-source-filesystem', + options: { + name: 'mdx', + path: './src/docs/', + }, + __key: 'mdx', + }, { // using hubspot version 2. this is the default resolve: 'gatsby-source-hubspot-node', @@ -57,7 +64,7 @@ const config: GatsbyConfig = { searchParams: { state: 'PUBLISHED', }, - } satisfies IPluginOptions, + }, }, { // using hubspot version 3. @@ -131,6 +138,63 @@ const config: GatsbyConfig = { }, } satisfies IPluginOptions, }, + { + resolve: 'gatsby-source-hubspot-node', + options: { + endpoint: 'https://api.github.com/repos/samcyn/gatsby-source-hubspot-node', + requestOptions: { + // todo take off not need in next version + headers: {}, + }, + nodeTypeOptions: { + nodeType: 'repository', + schemaCustomizationString: ` + type Repository implements Node { + id: ID! + name: String + description: String + } + `, + apiResponseFormatter: (response) => [response], + nodeBuilderFormatter({ gatsbyApi, input, pluginOptions }) { + const id = gatsbyApi.createNodeId(`${pluginOptions.nodeType}-${input.data.id}`); + const node = { + ...input.data, + id, + parent: null, + children: [], + internal: { + type: input.type, + contentDigest: gatsbyApi.createContentDigest(input.data), + }, + } as NodeInput; + gatsbyApi.actions.createNode(node); + }, + }, + } satisfies IPluginOptions, + }, + { + resolve: `gatsby-transformer-remark`, + options: { + footnotes: true, + gfm: true, + jsFrontmatterEngine: false, + plugins: [ + { + resolve: `gatsby-remark-images`, + options: { + maxWidth: 740, + }, + }, + { + resolve: `gatsby-remark-responsive-iframe`, + options: { + wrapperStyle: `margin-bottom: 1.0725rem`, + }, + }, + ], + }, + }, ], }; diff --git a/packages/site/gatsby-node.ts b/packages/site/gatsby-node.ts new file mode 100644 index 0000000..3c01c68 --- /dev/null +++ b/packages/site/gatsby-node.ts @@ -0,0 +1,56 @@ +import type { CreateWebpackConfigArgs, CreatePagesArgs } from 'gatsby'; +import path from 'path'; + +exports.onCreateWebpackConfig = ({ actions }: CreateWebpackConfigArgs) => { + actions.setWebpackConfig({ + resolve: { + alias: { + '@components': path.resolve(__dirname, 'src/components/'), + '@hooks': path.resolve(__dirname, 'src/hooks/'), + '@constants': path.resolve(__dirname, 'src/constants/'), + '@utils': path.resolve(__dirname, 'src/utils/'), + }, + }, + }); +}; + +exports.createPages = async ({ graphql, actions, reporter }: CreatePagesArgs) => { + const { createPage } = actions; + const docPageTemplate = path.resolve(`src/templates/docs.tsx`); + + const result = await graphql(` + query GetAllDocuments { + allMdx(filter: { frontmatter: { isPublished: { eq: true } } }) { + nodes { + id + frontmatter { + slug + title + tail + summary + date(formatString: "MMMM D, YYYY") + } + tableOfContents + internal { + contentFilePath + } + } + } + } + `); + + if (result.errors) { + reporter.panicOnBuild('Error loading MDX result', result.errors); + } + + result.data.allMdx.nodes.forEach((record) => { + createPage({ + // Path for this page — required + path: `/docs/${record.frontmatter.slug}/`, + component: `${docPageTemplate}?__contentFilePath=${record.internal.contentFilePath}`, + context: { + ...record, + }, + }); + }); +}; diff --git a/packages/site/gatsby-ssr.tsx b/packages/site/gatsby-ssr.tsx new file mode 100644 index 0000000..6ac1a27 --- /dev/null +++ b/packages/site/gatsby-ssr.tsx @@ -0,0 +1 @@ +export { default as wrapPageElement } from './src/components/AppLayout'; diff --git a/packages/site/package.json b/packages/site/package.json index 89df4e7..bbdb728 100644 --- a/packages/site/package.json +++ b/packages/site/package.json @@ -25,7 +25,11 @@ "gatsby-plugin-postcss": "^6.13.1", "gatsby-plugin-sharp": "^5.13.1", "gatsby-plugin-sitemap": "^6.13.1", + "gatsby-remark-images": "^7.13.1", + "gatsby-remark-responsive-iframe": "^6.13.1", "gatsby-source-filesystem": "^5.13.1", + "gatsby-source-hubspot-node": "1.0.1", + "gatsby-transformer-remark": "^6.13.1", "gatsby-transformer-sharp": "^5.13.1", "postcss": "^8.4.38", "react": "^18.2.0", diff --git a/packages/site/src/components/AppAside/index.tsx b/packages/site/src/components/AppAside/index.tsx new file mode 100644 index 0000000..02e5465 --- /dev/null +++ b/packages/site/src/components/AppAside/index.tsx @@ -0,0 +1,125 @@ +import * as React from 'react'; +import { Link, useStaticQuery, graphql } from 'gatsby'; + +import AppInput from '@components/AppInput'; +import AppIcon, { Props as AppIconProps } from '@components/AppIcon'; + +type MenuItemProps = { + to: string; + title: string; +}; + +type ListItemProps = { + title: string; + nodes: ReadonlyArray<{ + readonly frontmatter: { + readonly slug: string; + readonly title: string; + }; + }>; + icon: AppIconProps['icon']; + root?: boolean; +}; + +const ListItem = ({ title, nodes, icon, root }: ListItemProps) => { + if (nodes.length === 0) { + return null; + } + return ( +
  • + + + + {title} +
      + {nodes.map((menu) => ( + + ))} +
    +
  • + ); +}; + +const MenuItem = ({ to, title }: MenuItemProps) => { + return ( +
  • + + {title} + +
  • + ); +}; + +const AppAside = () => { + const data = useStaticQuery(graphql` + query AllDocuments { + allMdx(filter: { frontmatter: { isPublished: { eq: true } } }) { + nodes { + frontmatter { + slug + title + } + } + } + } + `); + return ( + + ); +}; + +export default AppAside; diff --git a/packages/site/src/components/AppCard/AppCardWithContact.tsx b/packages/site/src/components/AppCard/AppCardWithContact.tsx new file mode 100644 index 0000000..4e16f87 --- /dev/null +++ b/packages/site/src/components/AppCard/AppCardWithContact.tsx @@ -0,0 +1,155 @@ +import React from 'react'; +import { Link } from 'gatsby'; + +import AppCard from '.'; + +type Props = { + readonly id?: string; + readonly properties: { + readonly firstname: string; + readonly email: string; + readonly lastname: string; + readonly hs_object_id: string; + }; +}; +const AppCardWithContact = ({ properties: { firstname, lastname, email, hs_object_id } }: Props) => { + return ( + + +
    +
    + #{hs_object_id} +

    Hubspot CMS Contact

    +

    + {firstname || 'John'} {lastname || 'Doe'} +

    +

    {email}

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + ); +}; + +export default AppCardWithContact; diff --git a/packages/site/src/components/AppCard/AppCardWithPhoto.tsx b/packages/site/src/components/AppCard/AppCardWithPhoto.tsx new file mode 100644 index 0000000..1b08c37 --- /dev/null +++ b/packages/site/src/components/AppCard/AppCardWithPhoto.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import { IGatsbyImageData } from 'gatsby-plugin-image'; +import { Link } from 'gatsby'; + +import AppCard from '@components/AppCard'; +import AppImage from '@components/AppImage'; + +type Props = { + readonly author_name: string; + readonly id: string; + readonly title: string; + readonly slug: string; + readonly post_summary: string; + readonly featured_image: { + readonly gatsbyImage: IGatsbyImageData; + }; + readonly blog_author: { + readonly avatar: string; + }; +}; + +const AppCardWithPhoto = ({ author_name, title, featured_image, blog_author }: Props) => ( + + +
    + +
    +
    +
    +

    + {title} +

    + 5 min +
    +
    +
    + {`${author_name} +
    +
    +

    {author_name}

    + 2h ago +
    +
    +
    + +
    +); + +export default AppCardWithPhoto; diff --git a/packages/site/src/components/AppCard/index.tsx b/packages/site/src/components/AppCard/index.tsx new file mode 100644 index 0000000..059d3b2 --- /dev/null +++ b/packages/site/src/components/AppCard/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const AppCard = ({ className, children }: { className?: string; children: React.ReactNode }) => { + return
    {children}
    ; +}; + +export default AppCard; diff --git a/packages/site/src/components/AppFooter/index.tsx b/packages/site/src/components/AppFooter/index.tsx new file mode 100644 index 0000000..b4b2c7b --- /dev/null +++ b/packages/site/src/components/AppFooter/index.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import AppIcon from '@components/AppIcon'; + +const AppFooter = () => { + return ( +
    + Made with love by Samson Iyanda + +
    + ); +}; + +export default AppFooter; diff --git a/packages/site/src/components/AppHeader/index.tsx b/packages/site/src/components/AppHeader/index.tsx new file mode 100644 index 0000000..62936b7 --- /dev/null +++ b/packages/site/src/components/AppHeader/index.tsx @@ -0,0 +1,43 @@ +import * as React from 'react'; + +import AppThemeSwitcher from '@components/AppThemeSwitcher'; +import AppIcon from '@components/AppIcon'; + +const AppHeader = ({ onOpen }: { onOpen: () => void }) => { + return ( +
    + +
    + ); +}; + +export default AppHeader; diff --git a/packages/site/src/components/AppIcon/index.tsx b/packages/site/src/components/AppIcon/index.tsx new file mode 100644 index 0000000..38a9549 --- /dev/null +++ b/packages/site/src/components/AppIcon/index.tsx @@ -0,0 +1,101 @@ +import React from 'react'; + +// https://flowbite.com/icons/; +const Icons_library = { + grid: ( + + ), + 'back-arrow': ( + + ), + github: ( + + ), + sun: ( + + ), + moon: ( + + ), + hamburger: , + linkedin: ( + <> + + + + ), + twitter: ( + + ), + link: ( + + ), + layers: ( + + ), +}; + +export type Props = { + icon: keyof typeof Icons_library; + width?: string; + height?: string; + fill?: string; + viewBox?: string; +}; + +const AppIcon = ({ icon, width = '24', height = '24', fill = 'currentColor', viewBox = '0 0 24 24' }: Props) => { + return ( + + ); +}; + +export default AppIcon; diff --git a/packages/site/src/components/AppImage/index.tsx b/packages/site/src/components/AppImage/index.tsx new file mode 100644 index 0000000..6beb4a6 --- /dev/null +++ b/packages/site/src/components/AppImage/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { GatsbyImage, ImageDataLike, getImage } from 'gatsby-plugin-image'; + +type Props = { alt: string; className?: string; image?: ImageDataLike | null }; + +const AppImage = ({ alt, image, className }: Props) => { + return ; +}; + +export default AppImage; diff --git a/packages/site/src/components/AppInput/index.tsx b/packages/site/src/components/AppInput/index.tsx new file mode 100644 index 0000000..d72109d --- /dev/null +++ b/packages/site/src/components/AppInput/index.tsx @@ -0,0 +1,52 @@ +import * as React from 'react'; + +type Props = React.DetailedHTMLProps, HTMLInputElement>; + +const AppInput = ({ className, ...rest }: Props) => { + return ( +
    +
    + + Stockholm-icons / General / Search + Created with Sketch. + + + + + + + +
    + +
    + ); +}; + +export default AppInput; diff --git a/packages/site/src/components/AppLayout/index.tsx b/packages/site/src/components/AppLayout/index.tsx new file mode 100644 index 0000000..65dec1c --- /dev/null +++ b/packages/site/src/components/AppLayout/index.tsx @@ -0,0 +1,45 @@ +import React, { ReactElement } from 'react'; +import { MDXProvider } from '@mdx-js/react'; + +import AppAside from '@components/AppAside'; +import AppHeader from '@components/AppHeader'; +import ThemeProvider from '../../providers/theme'; +import AppFooter from '@components/AppFooter'; +import { shortcodes } from '@components/AppShortCodes'; + +// tailwind css +import '../../styles/global.css'; + +const AppLayout = ({ element }: { element: ReactElement }) => { + const [open, setOpen] = React.useState(false); + + const onOpen = () => { + setOpen((p) => !p); + }; + return ( + +
    + +
    + {/* overlay */} + {open && ( +
    + )} +
    + + {element} + +
    +
    +
    +
    + ); +}; + +export default AppLayout; diff --git a/packages/site/src/components/AppShortCodes/index.tsx b/packages/site/src/components/AppShortCodes/index.tsx new file mode 100644 index 0000000..b86bc3b --- /dev/null +++ b/packages/site/src/components/AppShortCodes/index.tsx @@ -0,0 +1,209 @@ +import React, { ReactElement } from 'react'; +import { Link } from 'gatsby'; + +function splitLanguageAndTitle(children: React.ReactNode) { + const computedClassName = (children as ReactElement).props.className as string; + + const parts = computedClassName.split(':'); + const language = parts[0]; + const title = parts.length > 1 ? parts[1].split('=')[1] : undefined; + + return { language, title }; +} + +function breakStringIntoId(children: React.ReactNode): string { + const str = children as string; + const sanitizedInput = str + .trim() + .toLowerCase() + .replace(/\s+/g, '-') + .replace(/[^a-z0-9-]+/g, ''); + + return `${sanitizedInput}`; +} + +const HeadingComponent = ({ + Component = 'h1', + className, + children, + ...rest +}: { + Component: string; +} & React.DetailedHTMLProps, HTMLHeadingElement>) => { + const id = breakStringIntoId(children); + const ComponentType = Component as unknown as React.JSXElementConstructor< + React.DetailedHTMLProps, HTMLHeadingElement> + >; + const MetaHeading = () => ( + + + + + {children} + + ); + return MetaHeading; +}; + +const MyH1 = (props: React.DetailedHTMLProps, HTMLHeadingElement>) => { + const H1 = HeadingComponent({ + ...props, + className: 'relative text-dark dark:text-white font-bold text-xs md:text-sm lg:text-3xl mt-6 lg:mt-12 mb-6', + Component: 'h1', + }); + return

    ; +}; + +const MyH2 = (props: React.DetailedHTMLProps, HTMLHeadingElement>) => { + const H2 = HeadingComponent({ + ...props, + className: 'relative text-dark dark:text-white font-bold text-xs md:text-sm lg:text-2xl mt-6 lg:mt-12 mb-6', + Component: 'h2', + }); + return

    ; +}; + +const MyH3 = (props: React.DetailedHTMLProps, HTMLHeadingElement>) => { + const H3 = HeadingComponent({ + ...props, + className: 'relative text-dark dark:text-white font-bold text-xs md:text-sm lg:text-xl mt-6 lg:mt-12 mb-6', + Component: 'h3', + }); + return

    ; +}; + +const MyH4 = (props: React.DetailedHTMLProps, HTMLHeadingElement>) => { + const H4 = HeadingComponent({ + ...props, + className: 'relative text-dark dark:text-white font-bold text-xs md:text-sm lg:text-lg mt-6 lg:mt-12 mb-6', + Component: 'h4', + }); + return

    ; +}; + +const MyH5 = (props: React.DetailedHTMLProps, HTMLHeadingElement>) => { + const H5 = HeadingComponent({ + ...props, + className: 'relative text-dark dark:text-white font-bold text-xs md:text-sm lg:text-sm mt-6 lg:mt-12 mb-6', + Component: 'h5', + }); + return
    ; +}; + +const MyH6 = (props: React.DetailedHTMLProps, HTMLHeadingElement>) => { + const H6 = HeadingComponent({ + ...props, + className: 'relative text-dark dark:text-white font-bold text-xs md:text-sm lg:text-xs mt-6 lg:mt-12 mb-6', + Component: 'h6', + }); + return
    ; +}; + +const MyUL = (props: React.DetailedHTMLProps, HTMLUListElement>) => ( +
    } +> + +To install Gatsby and Node.js on a Mac, it is recommended to use [Homebrew](https://brew.sh/). A little set-up in the beginning can save you from some headaches later on! + +##### How to install or verify Homebrew on your computer: + +1. Open the Terminal app. +2. See if Homebrew is installed by typing the command below. You should see "Homebrew" and a version number. + +```shell +brew -v +``` + +3. If not, [download and install Homebrew](https://docs.brew.sh/Installation). +4. Once you've installed Homebrew, repeat step 2 to verify that you get the expected version message. + +##### Install Xcode Command Line Tools: + +1. Open your Terminal. +2. Install Xcode Command line tools by running: + +```shell +xcode-select --install +``` + + + +If that fails, download it [directly from Apple's site](https://developer.apple.com/download/more/), after signing-in with an Apple developer account. + + + +3. After being prompted to start the installation, you'll be prompted again to accept a software license for the tools to download. + +##### Install Node + +1. Open your Terminal +2. Install Node with Homebrew: + +```shell +brew install node +``` + + + +If you don't want to install it through Homebrew, download the latest Node.js version from [the official Node.js website](https://nodejs.org/en/), double click on the downloaded file and go through the installation process. + + + + */} + +{/* Windows instructions
    } +> + +Download and install the latest Node.js version from [the official Node.js website](https://nodejs.org/en/) + + */} + +{/* Linux instructions

    } +> + +Install nvm (Node Version Manager) and needed dependencies. nvm is used to manage Node.js and all its associated versions. + + + +When installing a package, if it asks for confirmation, type `y` and press enter. + + + +Select your distro: + +- [Ubuntu, Debian, and other apt based distros](#ubuntu-debian-and-other-apt-based-distros) +- [Arch, Manjaro and other pacman based distros](#arch-manjaro-and-other-pacman-based-distros) +- [Fedora, RedHat, and other dnf based distros](#fedora-redhat-and-other-dnf-based-distros) + + + +If the Linux distribution you are using is not listed here, please find instructions on the web. + + + +##### Ubuntu, Debian, and other `apt` based distros: + +1. Make sure your Linux distribution is ready to go run an update and an upgrade: + +```shell +sudo apt update +sudo apt -y upgrade +``` + +2. Install curl which allows you to transfer data and download additional dependencies: + +```shell +sudo apt-get install curl +``` + +3. After it finishes installing, download the latest nvm version: + +```shell +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash +``` + +4. Confirm this has worked. The output should be a version number. (Note that you may have to reload your bash configuration. Close and restart the terminal or run `source ~/.bashrc`.) + +```shell +nvm --version +``` + +5. Continue with the section: [Set default Node.js version](#set-default-nodejs-version) + +##### Arch, Manjaro and other `pacman` based distros: + +1. Make sure your distribution is ready to go: + +```shell +sudo pacman -Syu +``` + +2. These distros come installed with curl, so you can use that to download nvm: + +```shell +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash +``` + +3. Before using nvm, you need to install additional dependencies by running: + +```shell +sudo pacman -S grep awk tar +``` + +4. Confirm this has worked. The output should be a version number. + +```shell +nvm --version +``` + +5. Continue with the section: [Set default Node.js version](#set-default-nodejs-version) + +##### Fedora, RedHat, and other `dnf` based distros: + +1. These distros come installed with curl, so you can use that to download nvm: + +```shell +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash +``` + +2. Confirm this has worked. The output should be a version number. + +```shell +nvm --version +``` + +3. Continue with the section: [Set default Node.js version](#set-default-nodejs-version) + +##### Set default Node.js version + +When nvm is installed, it does not default to a particular node version. You’ll need to install the version you want and give nvm instructions to use it. This example uses the version 16 release, but more recent version numbers can be used instead. + +```shell +nvm install 18 +nvm use 18 +``` + +Confirm that this worked. The output should be a version number. + +```shell +node --version +npm --version +``` + +Once you have followed the installation steps and you have checked everything is installed properly, you can continue to the next step. + + */} + +### Git + +Git is a free and open source distributed version control system. It's a tool that helps you save different versions of your code. It also helps teammates work together on the same codebase at the same time. + +When you create a new Gatsby site, Gatsby uses Git behind the scenes to download and install the required files for your new site. You will also use Git to push your code to the cloud, so that you can deploy your site on the internet for others to see. + +The steps to download and install Git depend on your operating system. Follow the guide for your system: + +- [Install Git on macOS](https://www.atlassian.com/git/tutorials/install-git#mac-os-x) +- [Install Git on Windows](https://www.atlassian.com/git/tutorials/install-git#windows) +- [Install Git on Linux](https://www.atlassian.com/git/tutorials/install-git#linux) + +### Gatsby CLI + +The Gatsby command line interface (CLI) is a tool that lets you quickly create new Gatsby-powered sites and run commands for developing Gatsby sites. + +The CLI is a published npm package, which means you can install it using npm. + +Install the Gatsby CLI globally by running the command below. (Have an older version of the Gatsby CLI installed? This command will also update you to the latest version.) + +```shell +npm install -g gatsby-cli +``` + + + +**Note:** When you install Gatsby and run it for the first time, you'll see a short message notifying you about anonymous usage data that is being collected for Gatsby commands. You can read more about how that data is pulled out and used in the [telemetry doc](/docs/telemetry). + + + +Check that you have the correct version installed by running the command below. You should be on v3 or newer. + +```shell +gatsby --version +``` + +See the available commands: + +```shell +gatsby --help +``` + +![Check Gatsby commands in terminal](../images/docs/config.png) + + + +#### Troubleshooting + +If you are unable to successfully run the Gatsby CLI due to a permissions issue, you may want to check out the [npm docs on fixing permissions](https://docs.npmjs.com/getting-started/fixing-npm-permissions), or [this guide](https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md). + + + +### Visual Studio Code + +Visual Studio Code (also called VS Code, for short) is a popular code editor that you can use to write code for your project. If you don't have a preferred code editor yet, visit the [VS Code site](https://code.visualstudio.com/#alt-downloads) and download the version appropriate for your platform. + +It doesn't matter what code editor you choose to use. Your site will end up looking the same, no matter what tool you use to write it. But the Gatsby documentation sometimes includes screenshots that were taken in VS Code, so using VS Code will make sure that your screen looks like the screenshots in the tutorial and docs. + +## Account Creation + +The final step in this part of the Tutorial is to create accounts for the online platforms you will need to deploy your site online for others to see. + +In this Tutorial, you will deploy your site using Netlify. To use Netlify, you will need to set up a GitHub account and a Netlify account. (Both accounts are free!) + +- [Create a GitHub account.](https://github.com/join) GitHub is a website for storing your Git codebases (also called Git repositories). +- [Create a Netlify account.](https://app.netlify.com/signup) Netlify is a platform designed to be the best way to build and deploy your Gatsby sites. + +## Summary + +Now that you have all the knowledge and tools you'll need, you're ready for the Tutorial! +{/* + + +**Share Your Feedback!** + +Our goal is for this Tutorial to be helpful and easy to follow. We'd love to hear your feedback about what you liked or didn't like about this part of the Tutorial. + +Use the "Was this doc helpful to you?" form at the bottom of this page to let us know what worked well and what we can improve. + + */} + +### What's coming next? + +In Part 1 of the Tutorial, you'll create your first Gatsby site and deploy it online for everyone to see. + +{/* } + variant="SECONDARY" +> + Continue to Part 1 + */} \ No newline at end of file diff --git a/packages/site/src/docs/index.mdx b/packages/site/src/docs/index.mdx new file mode 100644 index 0000000..b4c4009 --- /dev/null +++ b/packages/site/src/docs/index.mdx @@ -0,0 +1,222 @@ +--- +title: Gatsby Source +tail: Hubspot Node Plugin v1.0.1 +slug: hello-world +date: 2019-01-29 +tableOfContentsDepth: 2 +summary: Providing the data you need when and where you need it most +--- + +# Introduction +This plugin supports sourcing various HubSpot resources, such as blog posts, contacts, and forms, into Gatsby's GraphQL data layer, allowing you to query your HubSpot data right alongside your other data sources. Whether you're building a blog, a landing page, or a full-fledged website, gatsby-source-hubspot-node makes it straightforward to incorporate your HubSpot data. + + + +## Prerequisites + +Before you begin, make sure you have the following: + +- Gatsby CLI installed +- Node.js installed +- An active HubSpot account + + + +## Installation + +```shell +npm install gatsby-source-hubspot-node +``` + +or + +```shell +yarn add gatsby-source-hubspot-node +``` + + +## How to use + +You can have multiple instances of this plugin in your `gatsby-config` to read data from different Hubspot CMS. Be sure to give each instance a unique `nodeType` in the nodeTypeOptions. + +```js:title=gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-source-hubspot-node`, + options: { + // hubspot end point for blogs + endpoint: `process.env.HUBSPOT_API_ENDPOINT_FOR_BLOGS`, + }, + }, + { + resolve: `gatsby-source-hubspot-node`, + options: { + // hubspot end point for contact + endpoint: `process.env.HUBSPOT_API_ENDPOINT_FOR_CONTACTS`, + nodeTypeOptions: { + // The unique nodeType for each instance + nodeType: 'Contact', + schemaCustomizationString: ` + type Contact implements Node { + id: ID! + state: String + slug: String + } + `, + apiResponseFormatter: (response) => response.results, + nodeBuilderFormatter({ gatsbyApi, input, pluginOptions }) { + const id = gatsbyApi.createNodeId(`${pluginOptions.nodeType}-${input.data.id}`); + const node = { + ...input.data, + id, + parent: null, + children: [], + internal: { + type: input.type, + contentDigest: gatsbyApi.createContentDigest(input.data), + }, + } as NodeInput; + gatsbyApi.actions.createNode(node); + }, + }, + }, + }, + ], +} + +``` +In the above example, `Post` and `Contact` nodes will be created inside GraphQL. + + +## Options + +1. **endpoint** (**Required**) + Remote url to hubspot resource. Check [Hubspot API Overview](https://legacydocs.hubspot.com/docs/overview) for more details + +2. **requestOptions** (**Optional**) + This is adapted from `node-fetch` library, [Node Fetch](https://github.com/node-fetch/node-fetch). Use this property to set headers, and methods. For details check the docs above. + +3. **searchParams** (**Optional**) + This is use to set search params along with the endpoint supplied to `gatsby-source-hubspot-node` plugin + +4. **nodeTypeOptions** (**Optional**) + This is an advanced option and should only be use if you understand node customization from Gatsby point of view. For deeper information and understanding check the docs here [Customizing the GraphQL Schema](https://www.gatsbyjs.com/docs/reference/graphql-data-layer/schema-customization/). + + This option has four required field `nodeType`, `schemaCustomizationString`, `apiResponseFormatter` and `nodeBuilderFormatter` + + a). **nodeType** (**Optional**) + - A unique nodeType for the `gatsby-source-hubspot-node` instance. It's default value is `Post`. It's advisable to make sure this value is unique if you have multiple instances of `gatsby-source-hubspot-node` plugin. + + b). **schemaCustomizationString** (**Optional**) + + - This is use to explicitly define the data shape, or add custom functionality to the query layer - this is what Gatsby’s Schema Customization API provides. Check docs for more info [Customizing the GraphQL Schema](https://www.gatsbyjs.com/docs/reference/graphql-data-layer/schema-customization/): + + ```js:title=gatsby-config.js + module.exports = { + plugins: [ + { + resolve: `gatsby-source-hubspot-node`, + options: { + // The unique nodeType for each instance + nodeType: `Post`, + // hubspot end point for blogs + endpoint: `process.env.HUBSPOT_API_ENDPOINT_FOR_BLOGS`, + // this is just an example you can check the default value use under packages/plugin/src/config/schema-customization-options.ts + schemaCustomizationString: ` + type Post implements Node { + id: ID! + absolute_url: String + author: String + author_name: String + } + ` + }, + } + ], + } + ``` + + c). **apiResponseFormatter** (**Optional**) + + - This is use to format response api depending on hubspot response api. Take note this formatter has to return an array of Items that match `schemaCustomizationString` option above; + + d). **nodeBuilderFormatter** (**Optional**) + + - This is a function use to build node as per [Gatsby sourceNode API](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-node/#sourceNodes). Note that once you have provided `schemaCustomizationString` in plugin options, you must provide `apiResponseFormatter`, `nodeBuilderFormatter`. Here's an advanced configuration example, demonstrating how to use all available options: + + ```js:title=gatsby-config.ts + import type { NodeInput, SourceNodesArgs } from 'gatsby'; + // gatsby-config.js + module.exports = { + plugins: [ + { + resolve: `gatsby-source-hubspot-node`, + options: { + nodeType: `Post`, + endpoint: `process.env.HUBSPOT_BLOGS_ENDPOINT`, + schemaCustomizationString: ` + type Post implements Node { + id: ID! + title: String + author: String + publishDate: Date @dateformat + } + `, + requestOptions: { + headers: { + Authorization: `Bearer ${process.env.HUBSPOT_API_KEY}`, + }, + }, + searchParams: { + state: 'published', + }, + apiResponseFormatter: (response) => { + // Example formatter, for some api, it's response.results or simple response. + return response.data; + }, + nodeBuilderFormatter: ({ gatsbyApi, input }: { + gatsbyApi: SourceNodesArgs + // type is the nodeType supplied + input: { type: string; data: T | Record }; + }) => { + // Example node builder + const { actions, createNodeId, createContentDigest } = gatsbyApi; + const { createNode } = actions; + + const nodeContent = JSON.stringify(input.data); + + const nodeMeta = { + id: createNodeId(`${input.type}-${input.data.id}`), + parent: null, + children: [], + internal: { + type: `YourNodeType`, + mediaType: `text/html`, + content: nodeContent, + contentDigest: createContentDigest(input.data), + }, + } satisfies NodeInput; + + const node = Object.assign({}, input.data, nodeMeta); + createNode(node); + }, + }, + }, + ], + }; + ``` + +## Troubleshooting + +- API Rate Limits: HubSpot API has rate limits. If you encounter errors related to exceeding these limits, try to reduce the number of requests or implement caching. +- Data Structure Mismatches: Make sure the structure defined in schemaCustomizationString matches the actual data structure returned by the HubSpot API. + +## Contributing +Contributions are welcome! For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate. + +## License +This project is licensed under the MIT License - see the [LICENSE.md](https://github.com/samcyn/gatsby-source-hubspot-node/blob/main/LICENSE.md) file for details. + +## Support +For support and questions, please open an issue on the GitHub repository or contact the plugin maintainers `samsoniyanda@outlook.com`. \ No newline at end of file diff --git a/packages/site/src/docs/project.mdx b/packages/site/src/docs/project.mdx new file mode 100644 index 0000000..487535a --- /dev/null +++ b/packages/site/src/docs/project.mdx @@ -0,0 +1,60 @@ +--- +title: Gatsby Project +tail: Structure +slug: "project-structure" +tableOfContentsDepth: 2 +isPublished: false +summary: Gatsby project structure +--- + +Inside a Gatsby project, you may see some or all of the following folders and files: + +```text +/ +|-- /.cache +|-- /plugins +|-- /public +|-- /src + |-- /api + |-- /pages + |-- /templates + |-- html.js +|-- /static +|-- gatsby-config.js +|-- gatsby-node.js +|-- gatsby-ssr.js +|-- gatsby-browser.js +``` + +## Folders + +- **`/.cache`** _Automatically generated._ This folder is an internal cache created automatically by Gatsby. The files inside this folder are not meant for modification. Should be added to the `.gitignore` file if not added already. + +- **`/plugins`** This folder hosts any project-specific ("local") plugins that aren't published as an `npm` package. Check out the [plugin docs](/docs/plugins/) for more detail. + +- **`/public`** _Automatically generated._ The output of the build process will be exposed inside this folder. Should be added to the `.gitignore` file if not added already. + +- **`/src`** This directory will contain all of the code related to what you will see on the frontend of your site (what you see in the browser), like your site header, or a page template. “src” is a convention for “source code”. + + - **`/api`** JavaScript and TypeScript files under `src/api` become functions automatically with paths based on their file name. Check out the [functions guide](/docs/reference/functions/) for more detail. + - **`/pages`** Components under `src/pages` become pages automatically with paths based on their file name. + - **`/templates`** Contains templates for programmatically creating pages. Check out the [templates docs](/docs/conceptual/building-with-components/#page-template-components) for more detail. + - **`html.js`** For custom configuration of default `.cache/default_html.js`. Check out the [custom HTML docs](/docs/custom-html/) for more detail. + +- **`/static`** If you put a file into the static folder, it will not be processed by webpack. Instead it will be copied into the public folder untouched. Check out the [assets docs](/docs/how-to/images-and-media/static-folder/#adding-assets-outside-of-the-module-system) for more detail. + +## Files + +You can also author all these files in TypeScript, see [TypeScript and Gatsby](/docs/how-to/custom-configuration/typescript/) for more details. + +- **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](/docs/reference/config-files/gatsby-browser/) (if any). These allow customization/extension of default Gatsby settings affecting the browser. + +- **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. Check out the [config docs](/docs/reference/config-files/gatsby-config/) for more detail. + +- **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby node APIs](/docs/reference/config-files/gatsby-node/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process. + +- **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](/docs/reference/config-files/gatsby-ssr/) (if any). These allow customization of default Gatsby settings affecting server-side rendering. + +## Miscellaneous + +The file/folder structure described above reflects Gatsby-specific files and folders. Since Gatsby sites are also React apps, it's common to use standard React code organization patterns such as folders like `/components` and `/utils` inside `/src`. The [React docs](https://reactjs.org/docs/faq-structure.html) have more information on a typical React app folder structure. \ No newline at end of file diff --git a/packages/site/src/images/docs/config.png b/packages/site/src/images/docs/config.png new file mode 100644 index 0000000..29ffd19 Binary files /dev/null and b/packages/site/src/images/docs/config.png differ diff --git a/packages/site/src/pages/404.tsx b/packages/site/src/pages/404.tsx index 134c287..0a980bf 100644 --- a/packages/site/src/pages/404.tsx +++ b/packages/site/src/pages/404.tsx @@ -1,47 +1,8 @@ import * as React from 'react'; -import { Link, HeadFC, PageProps } from 'gatsby'; - -const pageStyles = { - color: '#232129', - padding: '96px', - fontFamily: '-apple-system, Roboto, sans-serif, serif', -}; -const headingStyles = { - marginTop: 0, - marginBottom: 64, - maxWidth: 320, -}; - -const paragraphStyles = { - marginBottom: 48, -}; -const codeStyles = { - color: '#8A6534', - padding: 4, - backgroundColor: '#FFF4DB', - fontSize: '1.25rem', - borderRadius: 4, -}; +import { HeadFC, PageProps } from 'gatsby'; const NotFoundPage: React.FC = () => { - return ( -
    -

    Page not found

    -

    - Sorry 😔, we couldn’t find what you were looking for. -
    - {process.env.NODE_ENV === 'development' ? ( - <> -
    - Try creating a page in src/pages/. -
    - - ) : null} -
    - Go home. -

    -
    - ); + return
    Not found
    ; }; export default NotFoundPage; diff --git a/packages/site/src/pages/demo.tsx b/packages/site/src/pages/demo.tsx new file mode 100644 index 0000000..6dfc01a --- /dev/null +++ b/packages/site/src/pages/demo.tsx @@ -0,0 +1,89 @@ +import * as React from 'react'; +import { graphql } from 'gatsby'; +import type { HeadFC, PageProps } from 'gatsby'; + +import PageContent from '../docs/demo.mdx'; +import ContentMarkUp from '../components/ContentMarkUp'; +import { Props as TableContentProps } from '@components/AppTableOfContents'; + +const DashboardPage: React.FC> = ({ + data: { + allPost: { nodes: posts }, + allContact: { nodes: contacts }, + repository: repo, + mdx: { frontmatter, tableOfContents }, + }, +}) => { + const contents = (tableOfContents.items as TableContentProps['contents']) || []; + return ( + + + + ); +}; + +export default DashboardPage; + +export const Head: HeadFC = () => ( + <> + + Dashboard Page + + + + +); + +export const query = graphql` + query DashboardPage { + repository(name: { eq: "gatsby-source-hubspot-node" }) { + description + forks_count + license { + name + } + name + open_issues + stargazers_count + html_url + id + } + allContact(limit: 5) { + nodes { + id + properties { + firstname + email + lastname + hs_object_id + } + } + } + allPost(limit: 5) { + nodes { + id + name + slug + title + author_name + blog_author { + avatar + } + post_summary + featured_image { + gatsbyImage(width: 400) + } + } + } + mdx(frontmatter: { slug: { eq: "demo" } }) { + frontmatter { + title + tail + slug + date(fromNow: false) + tableOfContentsDepth + } + tableOfContents + } + } +`; diff --git a/packages/site/src/pages/index.tsx b/packages/site/src/pages/index.tsx index b435bea..d8dc122 100644 --- a/packages/site/src/pages/index.tsx +++ b/packages/site/src/pages/index.tsx @@ -1,192 +1,42 @@ -import * as React from 'react'; +import React from 'react'; +import { graphql } from 'gatsby'; import type { HeadFC, PageProps } from 'gatsby'; -const pageStyles = { - color: '#232129', - padding: 96, - fontFamily: '-apple-system, Roboto, sans-serif, serif', -}; -const headingStyles = { - marginTop: 0, - marginBottom: 64, - maxWidth: 320, -}; -const headingAccentStyles = { - color: '#663399', -}; -const paragraphStyles = { - marginBottom: 48, -}; -const codeStyles = { - color: '#8A6534', - padding: 4, - backgroundColor: '#FFF4DB', - fontSize: '1.25rem', - borderRadius: 4, -}; -const listStyles = { - marginBottom: 96, - paddingLeft: 0, -}; -const doclistStyles = { - paddingLeft: 0, -}; -const listItemStyles = { - fontWeight: 300, - fontSize: 24, - maxWidth: 560, - marginBottom: 30, -}; +import PageContent from '../docs/index.mdx'; +import ContentMarkUp from '@components/ContentMarkUp'; +import { Props as TableContentProps } from '@components/AppTableOfContents'; -const linkStyle = { - color: '#8954A8', - fontWeight: 'bold', - fontSize: 16, - verticalAlign: '5%', -}; +const IndexPage: React.FC> = ({ data }) => { + const { frontmatter, tableOfContents } = data.mdx; -const docLinkStyle = { - ...linkStyle, - listStyleType: 'none', - display: `inline-block`, - marginBottom: 24, - marginRight: 12, -}; - -const descriptionStyle = { - color: '#232129', - fontSize: 14, - marginTop: 10, - marginBottom: 0, - lineHeight: 1.25, -}; - -const docLinks = [ - { - text: 'TypeScript Documentation', - url: 'https://www.gatsbyjs.com/docs/how-to/custom-configuration/typescript/', - color: '#8954A8', - }, - { - text: 'GraphQL Typegen Documentation', - url: 'https://www.gatsbyjs.com/docs/how-to/local-development/graphql-typegen/', - color: '#8954A8', - }, -]; - -const badgeStyle = { - color: '#fff', - backgroundColor: '#088413', - border: '1px solid #088413', - fontSize: 11, - fontWeight: 'bold', - letterSpacing: 1, - borderRadius: 4, - padding: '4px 6px', - display: 'inline-block', - position: 'relative' as const, - top: -2, - marginLeft: 10, - lineHeight: 1, -}; - -const links = [ - { - text: 'Tutorial', - url: 'https://www.gatsbyjs.com/docs/tutorial/getting-started/', - description: - "A great place to get started if you're new to web development. Designed to guide you through setting up your first Gatsby site.", - color: '#E95800', - }, - { - text: 'How to Guides', - url: 'https://www.gatsbyjs.com/docs/how-to/', - description: - "Practical step-by-step guides to help you achieve a specific goal. Most useful when you're trying to get something done.", - color: '#1099A8', - }, - { - text: 'Reference Guides', - url: 'https://www.gatsbyjs.com/docs/reference/', - description: - "Nitty-gritty technical descriptions of how Gatsby works. Most useful when you need detailed information about Gatsby's APIs.", - color: '#BC027F', - }, - { - text: 'Conceptual Guides', - url: 'https://www.gatsbyjs.com/docs/conceptual/', - description: - 'Big-picture explanations of higher-level Gatsby concepts. Most useful for building understanding of a particular topic.', - color: '#0D96F2', - }, - { - text: 'Plugin Library', - url: 'https://www.gatsbyjs.com/plugins', - description: - 'Add functionality and customize your Gatsby site or app with thousands of plugins built by our amazing developer community.', - color: '#8EB814', - }, - { - text: 'Build and Host', - url: 'https://www.gatsbyjs.com/cloud', - badge: true, - description: - 'Now you’re ready to show the world! Give your Gatsby site superpowers: Build and host on Gatsby Cloud. Get started for free!', - color: '#663399', - }, -]; - -const IndexPage: React.FC = () => { + const contents = tableOfContents.items as TableContentProps['contents']; return ( -
    -

    - Congratulations -
    - — you just made a Gatsby site! 🎉🎉🎉 -

    -

    - Edit src/pages/index.tsx to see this page update in real-time. 😎 -

    - -
      - {links.map((link) => ( -
    • - - - {link.text} - - {link.badge && ( - - NEW! - - )} -

      {link.description}

      -
      -
    • - ))} -
    - Gatsby G Logo -
    + + + ); }; -export default IndexPage; +export const query = graphql` + query IndexPage { + mdx(frontmatter: { slug: { eq: "hello-world" } }) { + frontmatter { + title + tail + slug + summary + date(fromNow: false) + tableOfContentsDepth + } + tableOfContents + } + } +`; + +export const Head: HeadFC = ({ data }) => ( + <> + {data.mdx.frontmatter.title} + +); -export const Head: HeadFC = () => Home Page; +export default IndexPage; diff --git a/packages/site/src/providers/theme.tsx b/packages/site/src/providers/theme.tsx new file mode 100644 index 0000000..dc35403 --- /dev/null +++ b/packages/site/src/providers/theme.tsx @@ -0,0 +1,59 @@ +import React, { ReactNode, createContext, useEffect, useState } from 'react'; + +type ContextType = { + mode: 'light' | 'dark'; + onChangeMode: () => void; +}; + +export const Theme_Context = createContext(null); + +const ThemeProvider = ({ children }: { children: ReactNode }) => { + const [mode, setMode] = useState<'light' | 'dark'>('light'); + + const saveThemeToLocalStorage = (value: ContextType['mode']) => { + if (window) { + window.localStorage.setItem('theme', value); + } + }; + + const changeHTMLTagClassName = (value: ContextType['mode']) => { + if (window) { + const htmlElement = window.document.documentElement; + htmlElement.classList.remove(mode); + htmlElement.classList.add(value); + } + }; + + const onChangeMode = () => { + if (mode === 'light') { + setMode('dark'); + saveThemeToLocalStorage('dark'); + changeHTMLTagClassName('dark'); + } else { + setMode('light'); + saveThemeToLocalStorage('light'); + changeHTMLTagClassName('light'); + } + }; + + useEffect(() => { + const handleStorage = () => { + if (window) { + const htmlElement = window.document.documentElement; + const theme = window.localStorage.getItem('theme') || window.matchMedia('(prefers-color-scheme: dark)').matches; + if (theme === 'dark') { + setMode('dark'); + htmlElement.classList.add('dark'); + } else { + setMode('light'); + htmlElement.classList.add('light'); + } + } + }; + handleStorage(); + }, [setMode]); + + return {children}; +}; + +export default ThemeProvider; diff --git a/packages/site/src/styles/global.css b/packages/site/src/styles/global.css index b5c61c9..6e94701 100644 --- a/packages/site/src/styles/global.css +++ b/packages/site/src/styles/global.css @@ -1,3 +1,91 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@layer utilities { + body { + @apply text-gray-80 bg-white dark:bg-dark transition-colors; + } + + .animate__animated { + animation-duration: 0.33s; + animation-fill-mode: both; + } + + @keyframes slideInLeft { + from { + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } + } + + .animate__slideInLeft { + animation-name: slideInLeft; + } + + @keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } + } + + .animate__slideInRight { + animation-name: slideInRight; + } + + .content-auto { + content-visibility: auto; + } + + .gatsby-highlight pre[class*="language-shell"]::before { + content: "shell"; + background: #fbf2e9; + } + + .gatsby-highlight pre[class*="language-js"]::before { + content: "js"; + background: rgb(247, 223, 30); + } + + .gatsby-highlight pre[class*="language-"]::before { + border-radius: 0px 0px 4px 4px; + color: rgba(35, 33, 41, 0.7); + font-size: 0.75rem; + font-weight: 400; + letter-spacing: 0.075em; + line-height: 1; + padding: 0.25rem 0.5rem; + position: absolute; + left: 1.5rem; + text-align: right; + text-transform: uppercase; + top: 0px; + } + + .gatsby-highlight pre code { + @apply block px-6 text-[13px] leading-5 min-w-full float-left; + } + + .announcement h1, + .announcement h2, + .announcement h3, + .announcement h4, + .announcement h5, + .announcement h6 { + margin-top: 0; + margin-bottom: 8px; + } + + .announcement p { + @apply last-of-type:mb-0; + } +} \ No newline at end of file diff --git a/packages/site/src/templates/docs.tsx b/packages/site/src/templates/docs.tsx new file mode 100644 index 0000000..86ec6c2 --- /dev/null +++ b/packages/site/src/templates/docs.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import type { PageProps } from 'gatsby'; + +import { Props as TableContentProps } from '@components/AppTableOfContents'; +import ContentMarkUp from '@components/ContentMarkUp'; + +const DocMarkUp: React.FC> = ({ + pageContext, + children, +}) => { + const { frontmatter, tableOfContents } = pageContext; + const { title, tail, summary } = frontmatter; + + const contents = tableOfContents.items as TableContentProps['contents']; + return ( + + {children} + + ); +}; + +export default DocMarkUp; diff --git a/packages/site/tailwind.config.js b/packages/site/tailwind.config.js index 9dad893..2de0a8b 100644 --- a/packages/site/tailwind.config.js +++ b/packages/site/tailwind.config.js @@ -1,8 +1,36 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: [`./src/pages/**/*.{js,jsx,ts,tsx}`, `./src/components/**/*.{js,jsx,ts,tsx}`], + darkMode: 'selector', + content: [`./src/pages/**/*.{js,jsx,ts,tsx}`, `./src/components/**/*.{js,jsx,ts,tsx}`, `./src/docs/*.mdx`], theme: { - extend: {}, + extend: { + spacing: { + 13: '56px', + 19: '76px', + 25: '100px', + 30: '120px', + 50: '200px', + 100: '400px', + }, + colors: { + primary: '#8a4baf', + secondary: '#ececec', + complimentary: '#eef0f8', + dark: '#232129', + 'brand-gray': '#F3F6F9', + 'brand-dgray': '#ebedf3', + 'gray-60': '#635e69', + 'gray-80': '#36313d', + 'gray-5': '#fbfbfb', + 'gray-30': '#d9d7e0', + 'gray-1': '#f0f0f2', + 'orange-50': '#fdfaf6', + 'orange-30': '#faede5', + 'orange-40': '#866c5b', + 'purple-20': '#d9bae8', + 'black-code': '#0e0b0b', + }, + }, }, plugins: [], }; diff --git a/packages/site/tsconfig.json b/packages/site/tsconfig.json index a40099e..91d6021 100644 --- a/packages/site/tsconfig.json +++ b/packages/site/tsconfig.json @@ -9,8 +9,15 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, - "skipLibCheck": true + "skipLibCheck": true, + "baseUrl": "src", + "paths": { + "@components/*": ["components/*"], + "@hooks/*": ["hooks/*"], + "@constants/*": ["constants/*"], + "@utils/*": ["utils/*"], + } }, - "include": ["./src/**/*", "./gatsby-node.ts", "./gatsby-config.ts", "./plugins/**/*"], + "include": ["./src/**/*", "./gatsby-node.ts", "gatsby-config.ts", "./plugins/**/*"], "exclude": ["public", ".cache"] } diff --git a/yarn.lock b/yarn.lock index 62c5c42..21ebaf1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4265,7 +4265,7 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^3.0.0": +"@types/mdast@npm:^3.0.0, @types/mdast@npm:^3.0.3": version: 3.0.15 resolution: "@types/mdast@npm:3.0.15" dependencies: @@ -4358,6 +4358,13 @@ __metadata: languageName: node linkType: hard +"@types/parse5@npm:^5.0.0": + version: 5.0.3 + resolution: "@types/parse5@npm:5.0.3" + checksum: d6b7495cb1850f9f2e9c5e103ede9f2d30a5320669707b105c403868adc9e4bf8d3a7ff314cc23f67826bbbbbc0e6147346ce9062ab429f099dba7a01f463919 + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.12 resolution: "@types/prop-types@npm:15.7.12" @@ -4435,7 +4442,7 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:^2, @types/unist@npm:^2.0.0": +"@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": version: 2.0.10 resolution: "@types/unist@npm:2.0.10" checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa @@ -5365,6 +5372,13 @@ __metadata: languageName: node linkType: hard +"array-iterate@npm:^1.0.0": + version: 1.1.4 + resolution: "array-iterate@npm:1.1.4" + checksum: 8adc65525dfa871577b7ab91b41efd61d29c4067a08ec927340d6975e45797b9f04254dda115e366fbef11fb49277ac1c166405389886c7a251e1eddca89bd08 + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -5786,6 +5800,13 @@ __metadata: languageName: node linkType: hard +"bail@npm:^1.0.0": + version: 1.0.5 + resolution: "bail@npm:1.0.5" + checksum: 6c334940d7eaa4e656a12fb12407b6555649b6deb6df04270fa806e0da82684ebe4a4e47815b271c794b40f8d6fa286e0c248b14ddbabb324a917fab09b7301a + languageName: node + linkType: hard + "bail@npm:^2.0.0": version: 2.0.2 resolution: "bail@npm:2.0.2" @@ -6270,6 +6291,13 @@ __metadata: languageName: node linkType: hard +"ccount@npm:^1.0.0": + version: 1.1.0 + resolution: "ccount@npm:1.1.0" + checksum: b335a79d0aa4308919cf7507babcfa04ac63d389ebed49dbf26990d4607c8a4713cde93cc83e707d84571ddfe1e7615dad248be9bc422ae4c188210f71b08b78 + languageName: node + linkType: hard + "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -6383,6 +6411,13 @@ __metadata: languageName: node linkType: hard +"character-entities-html4@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-html4@npm:1.1.4" + checksum: 22536aba07a378a2326420423ceadd65c0121032c527f80e84dfc648381992ed5aa666d7c2b267cd269864b3682d5b0315fc2f03a9e7c017d1a96d24ec292d5f + languageName: node + linkType: hard + "character-entities-html4@npm:^2.0.0": version: 2.1.0 resolution: "character-entities-html4@npm:2.1.0" @@ -6390,6 +6425,13 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 + languageName: node + linkType: hard + "character-entities-legacy@npm:^3.0.0": version: 3.0.0 resolution: "character-entities-legacy@npm:3.0.0" @@ -6397,6 +6439,13 @@ __metadata: languageName: node linkType: hard +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d + languageName: node + linkType: hard + "character-entities@npm:^2.0.0": version: 2.0.2 resolution: "character-entities@npm:2.0.2" @@ -6404,6 +6453,13 @@ __metadata: languageName: node linkType: hard +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b + languageName: node + linkType: hard + "character-reference-invalid@npm:^2.0.0": version: 2.0.1 resolution: "character-reference-invalid@npm:2.0.1" @@ -6427,6 +6483,35 @@ __metadata: languageName: node linkType: hard +"cheerio-select@npm:^2.1.0": + version: 2.1.0 + resolution: "cheerio-select@npm:2.1.0" + dependencies: + boolbase: ^1.0.0 + css-select: ^5.1.0 + css-what: ^6.1.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + checksum: 843d6d479922f28a6c5342c935aff1347491156814de63c585a6eb73baf7bb4185c1b4383a1195dca0f12e3946d737c7763bcef0b9544c515d905c5c44c5308b + languageName: node + linkType: hard + +"cheerio@npm:^1.0.0-rc.10": + version: 1.0.0-rc.12 + resolution: "cheerio@npm:1.0.0-rc.12" + dependencies: + cheerio-select: ^2.1.0 + dom-serializer: ^2.0.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + htmlparser2: ^8.0.1 + parse5: ^7.0.0 + parse5-htmlparser2-tree-adapter: ^7.0.0 + checksum: 5d4c1b7a53cf22d3a2eddc0aff70cf23cbb30d01a4c79013e703a012475c02461aa1fcd99127e8d83a02216386ed6942b2c8103845fd0812300dd199e6e7e054 + languageName: node + linkType: hard + "chokidar@npm:^3.4.2, chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -6770,6 +6855,13 @@ __metadata: languageName: node linkType: hard +"comma-separated-tokens@npm:^1.0.0": + version: 1.0.8 + resolution: "comma-separated-tokens@npm:1.0.8" + checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d + languageName: node + linkType: hard + "comma-separated-tokens@npm:^2.0.0": version: 2.0.3 resolution: "comma-separated-tokens@npm:2.0.3" @@ -7294,6 +7386,19 @@ __metadata: languageName: node linkType: hard +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + "css-selector-parser@npm:^1.0.0": version: 1.4.1 resolution: "css-selector-parser@npm:1.4.1" @@ -7311,7 +7416,7 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^6.0.1": +"css-what@npm:^6.0.1, css-what@npm:^6.1.0": version: 6.1.0 resolution: "css-what@npm:6.1.0" checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe @@ -7852,7 +7957,18 @@ __metadata: languageName: node linkType: hard -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 @@ -7868,6 +7984,15 @@ __metadata: languageName: node linkType: hard +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + "domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -7879,6 +8004,17 @@ __metadata: languageName: node linkType: hard +"domutils@npm:^3.0.1": + version: 3.1.0 + resolution: "domutils@npm:3.1.0" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 + languageName: node + linkType: hard + "dot-case@npm:^3.0.4": version: 3.0.4 resolution: "dot-case@npm:3.0.4" @@ -8074,6 +8210,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + "env-ci@npm:^11.0.0": version: 11.0.0 resolution: "env-ci@npm:11.0.0" @@ -9079,7 +9222,7 @@ __metadata: languageName: node linkType: hard -"extend@npm:^3.0.0": +"extend@npm:^3.0.0, extend@npm:^3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 @@ -9991,6 +10134,42 @@ __metadata: languageName: node linkType: hard +"gatsby-remark-images@npm:^7.13.1": + version: 7.13.1 + resolution: "gatsby-remark-images@npm:7.13.1" + dependencies: + "@babel/runtime": ^7.20.13 + chalk: ^4.1.2 + cheerio: ^1.0.0-rc.10 + gatsby-core-utils: ^4.13.1 + is-relative-url: ^3.0.0 + lodash: ^4.17.21 + mdast-util-definitions: ^4.0.0 + query-string: ^6.14.1 + unist-util-select: ^3.0.4 + unist-util-visit-parents: ^3.1.1 + peerDependencies: + gatsby: ^5.0.0-next + gatsby-plugin-sharp: ^5.0.0-next + checksum: d6f6f86ea3071c98f299344e47d437e0f38bdc18e4698ff928fdbd94d864d8d3def78b6a730561a82d454801e90c6be4715bf5433eca9a0650d00997435a552c + languageName: node + linkType: hard + +"gatsby-remark-responsive-iframe@npm:^6.13.1": + version: 6.13.1 + resolution: "gatsby-remark-responsive-iframe@npm:6.13.1" + dependencies: + "@babel/runtime": ^7.20.13 + cheerio: ^1.0.0-rc.10 + common-tags: ^1.8.2 + lodash: ^4.17.21 + unist-util-visit: ^2.0.3 + peerDependencies: + gatsby: ^5.0.0-next + checksum: b0a3c8aa0a2cc3d21b52fa8b309d6afc800121059400f98a3436c822b62246308a4c3b7c2709c4f49d28f7309bd64f7ef0ce51be56c3599809ab83e9ab42ae86 + languageName: node + linkType: hard + "gatsby-script@npm:^2.13.0": version: 2.13.0 resolution: "gatsby-script@npm:2.13.0" @@ -10030,6 +10209,17 @@ __metadata: languageName: node linkType: hard +"gatsby-source-hubspot-node@npm:1.0.1": + version: 1.0.1 + resolution: "gatsby-source-hubspot-node@npm:1.0.1" + dependencies: + node-fetch: ^2.6.8 + peerDependencies: + gatsby: ^5.13.3 + checksum: b941c27753186d2cc5584fe2821c6a9c6c930a3ebb6021e1629391ccfdf45058c6e9f26e18a04a7e7d93b9646d146d711f5c78b084830a422641188f0fcdfb23 + languageName: node + linkType: hard + "gatsby-source-hubspot-node@workspace:packages/plugin": version: 0.0.0-use.local resolution: "gatsby-source-hubspot-node@workspace:packages/plugin" @@ -10085,6 +10275,38 @@ __metadata: languageName: node linkType: hard +"gatsby-transformer-remark@npm:^6.13.1": + version: 6.13.1 + resolution: "gatsby-transformer-remark@npm:6.13.1" + dependencies: + "@babel/runtime": ^7.20.13 + gatsby-core-utils: ^4.13.1 + gray-matter: ^4.0.3 + hast-util-raw: ^6.1.0 + hast-util-to-html: ^7.1.3 + lodash: ^4.17.21 + mdast-util-to-hast: ^10.2.0 + mdast-util-to-string: ^2.0.0 + mdast-util-toc: ^5.1.0 + remark: ^13.0.0 + remark-footnotes: ^3.0.0 + remark-gfm: ^1.0.0 + remark-parse: ^9.0.0 + remark-retext: ^4.0.0 + remark-stringify: ^9.0.1 + retext-english: ^3.0.4 + sanitize-html: ^2.11.0 + underscore.string: ^3.3.6 + unified: ^9.2.2 + unist-util-remove-position: ^3.0.0 + unist-util-select: ^3.0.4 + unist-util-visit: ^2.0.3 + peerDependencies: + gatsby: ^5.0.0-next + checksum: da405279f41fe1abc56492b9e5830fe4f9511b7cb3519072c35faf117f99f78f53d23c2d01aaf418394754ab5d6170e1ad08200e9eb061a57db7c0cad899a61a + languageName: node + linkType: hard + "gatsby-transformer-sharp@npm:^5.13.1": version: 5.13.1 resolution: "gatsby-transformer-sharp@npm:5.13.1" @@ -10442,6 +10664,13 @@ __metadata: languageName: node linkType: hard +"github-slugger@npm:^1.2.1": + version: 1.5.0 + resolution: "github-slugger@npm:1.5.0" + checksum: c70988224578b3bdaa25df65973ffc8c24594a77a28550c3636e495e49d17aef5cdb04c04fa3f1744babef98c61eecc6a43299a13ea7f3cc33d680bf9053ffbe + languageName: node + linkType: hard + "github-slugger@npm:^2.0.0": version: 2.0.0 resolution: "github-slugger@npm:2.0.0" @@ -10843,6 +11072,21 @@ __metadata: languageName: node linkType: hard +"hast-to-hyperscript@npm:^9.0.0": + version: 9.0.1 + resolution: "hast-to-hyperscript@npm:9.0.1" + dependencies: + "@types/unist": ^2.0.3 + comma-separated-tokens: ^1.0.0 + property-information: ^5.3.0 + space-separated-tokens: ^1.0.0 + style-to-object: ^0.3.0 + unist-util-is: ^4.0.0 + web-namespaces: ^1.0.0 + checksum: de570d789853018fff2fd38fc096549b9814e366b298f60c90c159a57018230eefc44d46a246027b0e2426ed9e99f2e270050bc183d5bdfe4c9487c320b392cd + languageName: node + linkType: hard + "hast-util-excerpt@npm:^1.0.0": version: 1.0.2 resolution: "hast-util-excerpt@npm:1.0.2" @@ -10853,6 +11097,20 @@ __metadata: languageName: node linkType: hard +"hast-util-from-parse5@npm:^6.0.0": + version: 6.0.1 + resolution: "hast-util-from-parse5@npm:6.0.1" + dependencies: + "@types/parse5": ^5.0.0 + hastscript: ^6.0.0 + property-information: ^5.0.0 + vfile: ^4.0.0 + vfile-location: ^3.2.0 + web-namespaces: ^1.0.0 + checksum: 4daa78201468af7779161e7caa2513c329830778e0528481ab16b3e1bcef4b831f6285b526aacdddbee802f3bd9d64df55f80f010591ea1916da535e3a923b83 + languageName: node + linkType: hard + "hast-util-has-property@npm:^2.0.0": version: 2.0.1 resolution: "hast-util-has-property@npm:2.0.1" @@ -10860,6 +11118,13 @@ __metadata: languageName: node linkType: hard +"hast-util-is-element@npm:^1.0.0": + version: 1.1.0 + resolution: "hast-util-is-element@npm:1.1.0" + checksum: 30fad3f65e7ab2f0efd5db9e7344d0820b70971988dfe79f62d8447598b2a1ce8a59cd4bfc05ae0d9a1c451b9b53cbe1023743d7eac764d64720b6b73475f62f + languageName: node + linkType: hard + "hast-util-is-element@npm:^2.0.0": version: 2.1.3 resolution: "hast-util-is-element@npm:2.1.3" @@ -10870,6 +11135,32 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^2.0.0": + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 + languageName: node + linkType: hard + +"hast-util-raw@npm:^6.1.0": + version: 6.1.0 + resolution: "hast-util-raw@npm:6.1.0" + dependencies: + "@types/hast": ^2.0.0 + hast-util-from-parse5: ^6.0.0 + hast-util-to-parse5: ^6.0.0 + html-void-elements: ^1.0.0 + parse5: ^6.0.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^2.0.0 + vfile: ^4.0.0 + web-namespaces: ^1.0.0 + xtend: ^4.0.0 + zwitch: ^1.0.0 + checksum: dfa4da83ce718bae8a91a88ee4c5ef43e0091dcd32775de633669b412f2ada35a71bb79c4e4b2851175a5a50861d7abe2049d45b97176b892b861d71591a18e6 + languageName: node + linkType: hard + "hast-util-select@npm:^5.0.0": version: 5.0.5 resolution: "hast-util-select@npm:5.0.5" @@ -10916,6 +11207,37 @@ __metadata: languageName: node linkType: hard +"hast-util-to-html@npm:^7.1.3": + version: 7.1.3 + resolution: "hast-util-to-html@npm:7.1.3" + dependencies: + ccount: ^1.0.0 + comma-separated-tokens: ^1.0.0 + hast-util-is-element: ^1.0.0 + hast-util-whitespace: ^1.0.0 + html-void-elements: ^1.0.0 + property-information: ^5.0.0 + space-separated-tokens: ^1.0.0 + stringify-entities: ^3.0.1 + unist-util-is: ^4.0.0 + xtend: ^4.0.0 + checksum: 5fb8d45adaed76e5d6a5c4c0d2684b5314ed92fc78ad85304631cb6acff46b73920b39c40c557641156cdb04ddf0efe8fb74b6fbafed84583409797ebd057a5b + languageName: node + linkType: hard + +"hast-util-to-parse5@npm:^6.0.0": + version: 6.0.0 + resolution: "hast-util-to-parse5@npm:6.0.0" + dependencies: + hast-to-hyperscript: ^9.0.0 + property-information: ^5.0.0 + web-namespaces: ^1.0.0 + xtend: ^4.0.0 + zwitch: ^1.0.0 + checksum: 91a36244e37df1d63c8b7e865ab0c0a25bb7396155602be005cf71d95c348e709568f80e0f891681a3711d733ad896e70642dc41a05b574eddf2e07d285408a8 + languageName: node + linkType: hard + "hast-util-to-string@npm:^2.0.0": version: 2.0.0 resolution: "hast-util-to-string@npm:2.0.0" @@ -10947,6 +11269,13 @@ __metadata: languageName: node linkType: hard +"hast-util-whitespace@npm:^1.0.0": + version: 1.0.4 + resolution: "hast-util-whitespace@npm:1.0.4" + checksum: b7f4a1942bc78239a6fe4741aca34e3e7f84487e15e2cd2b6ca07bbba3055571763d877d7c077d7a2a029ede7500bc50a62af7b6dfe88e0644b16228b91dee0d + languageName: node + linkType: hard + "hast-util-whitespace@npm:^2.0.0": version: 2.0.1 resolution: "hast-util-whitespace@npm:2.0.1" @@ -10954,6 +11283,19 @@ __metadata: languageName: node linkType: hard +"hastscript@npm:^6.0.0": + version: 6.0.0 + resolution: "hastscript@npm:6.0.0" + dependencies: + "@types/hast": ^2.0.0 + comma-separated-tokens: ^1.0.0 + hast-util-parse-selector: ^2.0.0 + property-information: ^5.0.0 + space-separated-tokens: ^1.0.0 + checksum: 5e50b85af0d2cb7c17979cb1ddca75d6b96b53019dd999b39e7833192c9004201c3cee6445065620ea05d0087d9ae147a4844e582d64868be5bc6b0232dfe52d + languageName: node + linkType: hard + "he@npm:1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -11035,6 +11377,13 @@ __metadata: languageName: node linkType: hard +"html-void-elements@npm:^1.0.0": + version: 1.0.5 + resolution: "html-void-elements@npm:1.0.5" + checksum: 1a56f4f6cfbeb994c21701ff72b4b7f556fe784a70e5e554d1566ff775af83b91ea93f10664f039a67802d9f7b40d4a7f1ed20312bab47bd88d89bd792ea84ca + languageName: node + linkType: hard + "htmlparser2@npm:^6.1.0": version: 6.1.0 resolution: "htmlparser2@npm:6.1.0" @@ -11047,6 +11396,18 @@ __metadata: languageName: node linkType: hard +"htmlparser2@npm:^8.0.0, htmlparser2@npm:^8.0.1": + version: 8.0.2 + resolution: "htmlparser2@npm:8.0.2" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + entities: ^4.4.0 + checksum: 29167a0f9282f181da8a6d0311b76820c8a59bc9e3c87009e21968264c2987d2723d6fde5a964d4b7b6cba663fca96ffb373c06d8223a85f52a6089ced942700 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -11273,7 +11634,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -11438,6 +11799,13 @@ __metadata: languageName: node linkType: hard +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb + languageName: node + linkType: hard + "is-alphabetical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphabetical@npm:2.0.1" @@ -11445,6 +11813,16 @@ __metadata: languageName: node linkType: hard +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: ^1.0.0 + is-decimal: ^1.0.0 + checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f + languageName: node + linkType: hard + "is-alphanumerical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphanumerical@npm:2.0.1" @@ -11577,6 +11955,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 + languageName: node + linkType: hard + "is-decimal@npm:^2.0.0": version: 2.0.1 resolution: "is-decimal@npm:2.0.1" @@ -11666,6 +12051,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 + languageName: node + linkType: hard + "is-hexadecimal@npm:^2.0.0": version: 2.0.1 resolution: "is-hexadecimal@npm:2.0.1" @@ -11781,6 +12173,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^2.0.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + "is-plain-obj@npm:^4.0.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" @@ -11797,6 +12196,13 @@ __metadata: languageName: node linkType: hard +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + "is-promise@npm:^2.2.2": version: 2.2.2 resolution: "is-promise@npm:2.2.2" @@ -13012,6 +13418,13 @@ __metadata: languageName: node linkType: hard +"longest-streak@npm:^2.0.0": + version: 2.0.4 + resolution: "longest-streak@npm:2.0.4" + checksum: 28b8234a14963002c5c71035dee13a0a11e9e9d18ffa320fdc8796ed7437399204495702ed69cd2a7087b0af041a2a8b562829b7c1e2042e73a3374d1ecf6580 + languageName: node + linkType: hard + "longest-streak@npm:^3.0.0": version: 3.1.0 resolution: "longest-streak@npm:3.1.0" @@ -13209,6 +13622,15 @@ __metadata: languageName: node linkType: hard +"markdown-table@npm:^2.0.0": + version: 2.0.0 + resolution: "markdown-table@npm:2.0.0" + dependencies: + repeat-string: ^1.0.0 + checksum: 9bb634a9300016cbb41216c1eab44c74b6b7083ac07872e296f900a29449cf0e260ece03fa10c3e9784ab94c61664d1d147da0315f95e1336e2bdcc025615c90 + languageName: node + linkType: hard + "marked-terminal@npm:^7.0.0": version: 7.0.0 resolution: "marked-terminal@npm:7.0.0" @@ -13254,6 +13676,40 @@ __metadata: languageName: node linkType: hard +"mdast-util-find-and-replace@npm:^1.1.0": + version: 1.1.1 + resolution: "mdast-util-find-and-replace@npm:1.1.1" + dependencies: + escape-string-regexp: ^4.0.0 + unist-util-is: ^4.0.0 + unist-util-visit-parents: ^3.0.0 + checksum: e4c9e50d9bce5ae4c728a925bd60080b94d16aaa312c27e2b70b16ddc29a5d0a0844d6e18efaef08aeb22c68303ec528f20183d1b0420504a0c2c1710cebd76f + languageName: node + linkType: hard + +"mdast-util-footnote@npm:^0.1.0": + version: 0.1.7 + resolution: "mdast-util-footnote@npm:0.1.7" + dependencies: + mdast-util-to-markdown: ^0.6.0 + micromark: ~2.11.0 + checksum: 6d05396a9497c289fecf844d68d3210968750b215cf1df3fd1962c77d73560d8598cc4d79cef36a750d5b43f30b71fec079e0563f267b65072cfc38548d39eda + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^0.8.0": + version: 0.8.5 + resolution: "mdast-util-from-markdown@npm:0.8.5" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-string: ^2.0.0 + micromark: ~2.11.0 + parse-entities: ^2.0.0 + unist-util-stringify-position: ^2.0.0 + checksum: 5a9d0d753a42db763761e874c22365d0c7c9934a5a18b5ff76a0643610108a208a041ffdb2f3d3dd1863d3d915225a4020a0aade282af0facfd0df110601eee6 + languageName: node + linkType: hard + "mdast-util-from-markdown@npm:^1.0.0, mdast-util-from-markdown@npm:^1.1.0": version: 1.3.1 resolution: "mdast-util-from-markdown@npm:1.3.1" @@ -13274,6 +13730,58 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm-autolink-literal@npm:^0.1.0": + version: 0.1.3 + resolution: "mdast-util-gfm-autolink-literal@npm:0.1.3" + dependencies: + ccount: ^1.0.0 + mdast-util-find-and-replace: ^1.1.0 + micromark: ^2.11.3 + checksum: 9f7b888678631fd8c0a522b0689a750aead2b05d57361dbdf02c10381557f1ce874f746226141f3ace1e0e7952495e8d5ce8f9af423a7a66bb300d4635a918eb + languageName: node + linkType: hard + +"mdast-util-gfm-strikethrough@npm:^0.2.0": + version: 0.2.3 + resolution: "mdast-util-gfm-strikethrough@npm:0.2.3" + dependencies: + mdast-util-to-markdown: ^0.6.0 + checksum: 51aa11ca8f1a5745f1eb9ccddb0eca797b3ede6f0c7bf355d594ad57c02c98d95260f00b1c4b07504018e0b22708531eabb76037841f09ce8465444706a06522 + languageName: node + linkType: hard + +"mdast-util-gfm-table@npm:^0.1.0": + version: 0.1.6 + resolution: "mdast-util-gfm-table@npm:0.1.6" + dependencies: + markdown-table: ^2.0.0 + mdast-util-to-markdown: ~0.6.0 + checksum: eeb43faf833753315b4ccf8d7bc8a6845b31562b2d2dd12a92aa40f9cee1b1954643c7515399a98f9b2e143c95cf6b5c0aac5941a4f609d6a57335587cee99ac + languageName: node + linkType: hard + +"mdast-util-gfm-task-list-item@npm:^0.1.0": + version: 0.1.6 + resolution: "mdast-util-gfm-task-list-item@npm:0.1.6" + dependencies: + mdast-util-to-markdown: ~0.6.0 + checksum: c10480c0ae86547980b38b49fba2ecd36a50bf1f3478d3f12810a0d8e8f821585c2bd7d805dd735518e84493b5eef314afdb8d59807021e2d9aa22d077eb7588 + languageName: node + linkType: hard + +"mdast-util-gfm@npm:^0.1.0": + version: 0.1.2 + resolution: "mdast-util-gfm@npm:0.1.2" + dependencies: + mdast-util-gfm-autolink-literal: ^0.1.0 + mdast-util-gfm-strikethrough: ^0.2.0 + mdast-util-gfm-table: ^0.1.0 + mdast-util-gfm-task-list-item: ^0.1.0 + mdast-util-to-markdown: ^0.6.1 + checksum: 368ed535b2c2e0f33d0225a9e9c985468bf4825a06896815369aea585f6defaccb555ac40ba911e02c8e8c47e79f7efb4348de532de50bca2638a1e568f2d3c9 + languageName: node + linkType: hard + "mdast-util-mdx-expression@npm:^1.0.0": version: 1.3.2 resolution: "mdast-util-mdx-expression@npm:1.3.2" @@ -13375,6 +13883,20 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-markdown@npm:^0.6.0, mdast-util-to-markdown@npm:^0.6.1, mdast-util-to-markdown@npm:~0.6.0": + version: 0.6.5 + resolution: "mdast-util-to-markdown@npm:0.6.5" + dependencies: + "@types/unist": ^2.0.0 + longest-streak: ^2.0.0 + mdast-util-to-string: ^2.0.0 + parse-entities: ^2.0.0 + repeat-string: ^1.0.0 + zwitch: ^1.0.0 + checksum: 7ebc47533bff6e8669f85ae124dc521ea570e9df41c0d9e4f0f43c19ef4a8c9928d741f3e4afa62fcca1927479b714582ff5fd684ef240d84ee5b75ab9d863cf + languageName: node + linkType: hard + "mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0, mdast-util-to-markdown@npm:^1.5.0": version: 1.5.0 resolution: "mdast-util-to-markdown@npm:1.5.0" @@ -13391,6 +13913,25 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-nlcst@npm:^4.0.0": + version: 4.0.1 + resolution: "mdast-util-to-nlcst@npm:4.0.1" + dependencies: + nlcst-to-string: ^2.0.0 + repeat-string: ^1.0.0 + unist-util-position: ^3.0.0 + vfile-location: ^3.1.0 + checksum: a4194b4be3c6fc012eb1754e8a3904a4f46c42510599313cb5e3de413f3616ab47b4140ba010e9b7ad72847bec564e7e816a23218402f4fe5d809d9c57adb500 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-to-string@npm:2.0.0" + checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 + languageName: node + linkType: hard + "mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": version: 3.2.0 resolution: "mdast-util-to-string@npm:3.2.0" @@ -13400,6 +13941,21 @@ __metadata: languageName: node linkType: hard +"mdast-util-toc@npm:^5.1.0": + version: 5.1.0 + resolution: "mdast-util-toc@npm:5.1.0" + dependencies: + "@types/mdast": ^3.0.3 + "@types/unist": ^2.0.3 + extend: ^3.0.2 + github-slugger: ^1.2.1 + mdast-util-to-string: ^2.0.0 + unist-util-is: ^4.0.0 + unist-util-visit: ^2.0.0 + checksum: dd1019f0f69deaa0985297f63ec97abcf7cc2f90c542bd513aa17055bc3784923bd8e8f5092e8d9e5ea736ffc55b315c25979939a718eca369224e4ade28ce57 + languageName: node + linkType: hard + "mdast-util-toc@npm:^6.1.1": version: 6.1.1 resolution: "mdast-util-toc@npm:6.1.1" @@ -13564,6 +14120,72 @@ __metadata: languageName: node linkType: hard +"micromark-extension-footnote@npm:^0.3.0": + version: 0.3.2 + resolution: "micromark-extension-footnote@npm:0.3.2" + dependencies: + micromark: ~2.11.0 + checksum: 476c7f7ae86d7b3c33a07cbf7286d2cce06aa9b348eed79867fd6abc98c37519464c335c522e85208c99e573c1abbbcb72a0a27897f2a0b505d993c76df7bd1d + languageName: node + linkType: hard + +"micromark-extension-gfm-autolink-literal@npm:~0.5.0": + version: 0.5.7 + resolution: "micromark-extension-gfm-autolink-literal@npm:0.5.7" + dependencies: + micromark: ~2.11.3 + checksum: 319ec793c2e374e4cc0cbbb07326c1affb78819e507c7c1577f9d14b972852a6bb55e664332ec51f7cca24bdddd43429c5dd55f11e9200b1a00bab1bf494fb2d + languageName: node + linkType: hard + +"micromark-extension-gfm-strikethrough@npm:~0.6.5": + version: 0.6.5 + resolution: "micromark-extension-gfm-strikethrough@npm:0.6.5" + dependencies: + micromark: ~2.11.0 + checksum: 67711633590d3e688759a46aaed9f9d04bcaf29b6615eec17af082eabe1059fbca4beb41ba13db418ae7be3ac90198742fbabe519a70f9b6bb615598c5d6ef1a + languageName: node + linkType: hard + +"micromark-extension-gfm-table@npm:~0.4.0": + version: 0.4.3 + resolution: "micromark-extension-gfm-table@npm:0.4.3" + dependencies: + micromark: ~2.11.0 + checksum: 12c78de985944dd66aae409871c45d801cc65704f55ea5cc8afac422042c6d3b5e777b154c079ae81298b30b83434b257b54981bda51c220a102042dd2524a63 + languageName: node + linkType: hard + +"micromark-extension-gfm-tagfilter@npm:~0.3.0": + version: 0.3.0 + resolution: "micromark-extension-gfm-tagfilter@npm:0.3.0" + checksum: 9369736a203836b2933dfdeacab863e7a4976139b9dd46fa5bd6c2feeef50c7dbbcdd641ae95f0481f577d8aa22396bfa7ed9c38515647d4cf3f2c727cc094a3 + languageName: node + linkType: hard + +"micromark-extension-gfm-task-list-item@npm:~0.3.0": + version: 0.3.3 + resolution: "micromark-extension-gfm-task-list-item@npm:0.3.3" + dependencies: + micromark: ~2.11.0 + checksum: e4ccbe6b440234c8ee05d89315e1204c78773724241af31ac328194470a8a61bc6606eab3ce2d9a83da4401b06e07936038654493da715d40522133d1556dda4 + languageName: node + linkType: hard + +"micromark-extension-gfm@npm:^0.3.0": + version: 0.3.3 + resolution: "micromark-extension-gfm@npm:0.3.3" + dependencies: + micromark: ~2.11.0 + micromark-extension-gfm-autolink-literal: ~0.5.0 + micromark-extension-gfm-strikethrough: ~0.6.5 + micromark-extension-gfm-table: ~0.4.0 + micromark-extension-gfm-tagfilter: ~0.3.0 + micromark-extension-gfm-task-list-item: ~0.3.0 + checksum: 7957a1afd8c92daa0fc165342902729334b22d59feacd85b20a0d9cc453c90bbdd5b5ba85a3d177c01802060aeb3326daf05d3e6d95932fcbc8371827c98336e + languageName: node + linkType: hard + "micromark-extension-mdx-expression@npm:^1.0.0": version: 1.0.8 resolution: "micromark-extension-mdx-expression@npm:1.0.8" @@ -13859,6 +14481,16 @@ __metadata: languageName: node linkType: hard +"micromark@npm:^2.11.3, micromark@npm:~2.11.0, micromark@npm:~2.11.3": + version: 2.11.4 + resolution: "micromark@npm:2.11.4" + dependencies: + debug: ^4.0.0 + parse-entities: ^2.0.0 + checksum: f8a5477d394908a5d770227aea71657a76423d420227c67ea0699e659a5f62eb39d504c1f7d69ec525a6af5aaeb6a7bffcdba95614968c03d41d3851edecb0d6 + languageName: node + linkType: hard + "micromark@npm:^3.0.0": version: 3.2.0 resolution: "micromark@npm:3.2.0" @@ -14380,6 +15012,13 @@ __metadata: languageName: node linkType: hard +"nlcst-to-string@npm:^2.0.0": + version: 2.0.4 + resolution: "nlcst-to-string@npm:2.0.4" + checksum: 251b5d894ca13893bfc9c4e892a0656a2effb9a053becf8c94d9655ce3d5acc50811f535b0e77cc2156f45ac4addcef29a9654fc4e5841337c86aa08fa2ea878 + languageName: node + linkType: hard + "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -15349,6 +15988,32 @@ __metadata: languageName: node linkType: hard +"parse-english@npm:^4.0.0": + version: 4.2.0 + resolution: "parse-english@npm:4.2.0" + dependencies: + nlcst-to-string: ^2.0.0 + parse-latin: ^4.0.0 + unist-util-modify-children: ^2.0.0 + unist-util-visit-children: ^1.0.0 + checksum: 38e3302585d47d9a90011e437006eed4452f033fcdaf1b6904bbd36441323d6ecbd4549e5f0a4ae5bbfaa636cc02eddd4620d6121ff27522e0f955ed95000899 + languageName: node + linkType: hard + +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: ^1.0.0 + character-entities-legacy: ^1.0.0 + character-reference-invalid: ^1.0.0 + is-alphanumerical: ^1.0.0 + is-decimal: ^1.0.0 + is-hexadecimal: ^1.0.0 + checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce + languageName: node + linkType: hard + "parse-entities@npm:^4.0.0": version: 4.0.1 resolution: "parse-entities@npm:4.0.1" @@ -15409,6 +16074,17 @@ __metadata: languageName: node linkType: hard +"parse-latin@npm:^4.0.0": + version: 4.3.0 + resolution: "parse-latin@npm:4.3.0" + dependencies: + nlcst-to-string: ^2.0.0 + unist-util-modify-children: ^2.0.0 + unist-util-visit-children: ^1.0.0 + checksum: 4318342b85350f4da4dfa9613119648d4facbe61d653ef06e507f6c314b4d502b1d1956b0be2b71c9a3a863b9b6d42ce1a7af4680841d5b5d3d60097a288996b + languageName: node + linkType: hard + "parse-path@npm:^7.0.0": version: 7.0.0 resolution: "parse-path@npm:7.0.0" @@ -15418,6 +16094,13 @@ __metadata: languageName: node linkType: hard +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf + languageName: node + linkType: hard + "parse-url@npm:^8.1.0": version: 8.1.0 resolution: "parse-url@npm:8.1.0" @@ -15436,6 +16119,16 @@ __metadata: languageName: node linkType: hard +"parse5-htmlparser2-tree-adapter@npm:^7.0.0": + version: 7.0.0 + resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" + dependencies: + domhandler: ^5.0.2 + parse5: ^7.0.0 + checksum: fc5d01e07733142a1baf81de5c2a9c41426c04b7ab29dd218acb80cd34a63177c90aff4a4aee66cf9f1d0aeecff1389adb7452ad6f8af0a5888e3e9ad6ef733d + languageName: node + linkType: hard + "parse5@npm:^5.1.1": version: 5.1.1 resolution: "parse5@npm:5.1.1" @@ -15443,13 +16136,22 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^6.0.1": +"parse5@npm:^6.0.0, parse5@npm:^6.0.1": version: 6.0.1 resolution: "parse5@npm:6.0.1" checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd languageName: node linkType: hard +"parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + "parseurl@npm:^1.3.3, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -16191,7 +16893,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.2.9, postcss@npm:^8.4.23, postcss@npm:^8.4.24, postcss@npm:^8.4.38": +"postcss@npm:^8.2.15, postcss@npm:^8.2.9, postcss@npm:^8.3.11, postcss@npm:^8.4.23, postcss@npm:^8.4.24, postcss@npm:^8.4.38": version: 8.4.38 resolution: "postcss@npm:8.4.38" dependencies: @@ -16390,6 +17092,15 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^5.0.0, property-information@npm:^5.3.0": + version: 5.6.0 + resolution: "property-information@npm:5.6.0" + dependencies: + xtend: ^4.0.0 + checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 + languageName: node + linkType: hard + "property-information@npm:^6.0.0": version: 6.4.1 resolution: "property-information@npm:6.4.1" @@ -17003,6 +17714,26 @@ __metadata: languageName: node linkType: hard +"remark-footnotes@npm:^3.0.0": + version: 3.0.0 + resolution: "remark-footnotes@npm:3.0.0" + dependencies: + mdast-util-footnote: ^0.1.0 + micromark-extension-footnote: ^0.3.0 + checksum: 5e84afb47b57e512171f8af5146e8ba49817faff761c6cdd14abf26c9f018b497e69e79378d94b3ba529e491d3f0615c60851d3db86de785aa37641bf5bf7f8a + languageName: node + linkType: hard + +"remark-gfm@npm:^1.0.0": + version: 1.0.0 + resolution: "remark-gfm@npm:1.0.0" + dependencies: + mdast-util-gfm: ^0.1.0 + micromark-extension-gfm: ^0.3.0 + checksum: 877b0f6472a90a490b5d5a1393f46d22c4ab7451b1e83ebd7362e5be9c661b6ed03e76c28f76894f460bedf23345c589d3f412c273ce0d4d442c6a4d65b0eae4 + languageName: node + linkType: hard + "remark-mdx@npm:^2.0.0": version: 2.3.0 resolution: "remark-mdx@npm:2.3.0" @@ -17024,6 +17755,15 @@ __metadata: languageName: node linkType: hard +"remark-parse@npm:^9.0.0": + version: 9.0.0 + resolution: "remark-parse@npm:9.0.0" + dependencies: + mdast-util-from-markdown: ^0.8.0 + checksum: 50104880549639b7dd7ae6f1e23c214915fe9c054f02f3328abdaee3f6de6d7282bf4357c3c5b106958fe75e644a3c248c2197755df34f9955e8e028fc74868f + languageName: node + linkType: hard + "remark-rehype@npm:^10.0.0": version: 10.1.0 resolution: "remark-rehype@npm:10.1.0" @@ -17036,6 +17776,24 @@ __metadata: languageName: node linkType: hard +"remark-retext@npm:^4.0.0": + version: 4.0.0 + resolution: "remark-retext@npm:4.0.0" + dependencies: + mdast-util-to-nlcst: ^4.0.0 + checksum: b4222a49c47aaca825f5a5c930ae1c098fa1935c6faffc3ccf55d541a6d9acaf720365dcfad00a281ea4633fbda0060ae9379b5685a458618793699c7461c857 + languageName: node + linkType: hard + +"remark-stringify@npm:^9.0.0, remark-stringify@npm:^9.0.1": + version: 9.0.1 + resolution: "remark-stringify@npm:9.0.1" + dependencies: + mdast-util-to-markdown: ^0.6.0 + checksum: 93f46076f4d96ab1946d13e7dd43e83088480ac6b1dfe05a65e2c2f0e33d1f52a50175199b464a81803fc0f5b3bf182037665f89720b30515eba37bec4d63d56 + languageName: node + linkType: hard + "remark-unwrap-images@npm:^3.0.1": version: 3.0.1 resolution: "remark-unwrap-images@npm:3.0.1" @@ -17048,6 +17806,17 @@ __metadata: languageName: node linkType: hard +"remark@npm:^13.0.0": + version: 13.0.0 + resolution: "remark@npm:13.0.0" + dependencies: + remark-parse: ^9.0.0 + remark-stringify: ^9.0.0 + unified: ^9.1.0 + checksum: e3432bfa1b0029680302e99a6356c08789b3e908457a71eca37ada6a58497e302f08bd5f62fbad840082a8348c181b7f6f981aaf3cd3112207583ddf793a2429 + languageName: node + linkType: hard + "remove-trailing-separator@npm:^1.0.1": version: 1.1.0 resolution: "remove-trailing-separator@npm:1.1.0" @@ -17068,6 +17837,13 @@ __metadata: languageName: node linkType: hard +"repeat-string@npm:^1.0.0": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -17206,6 +17982,16 @@ __metadata: languageName: node linkType: hard +"retext-english@npm:^3.0.4": + version: 3.0.4 + resolution: "retext-english@npm:3.0.4" + dependencies: + parse-english: ^4.0.0 + unherit: ^1.0.4 + checksum: 0a8f164753eb187a4c02a4e55bf70bf72a3a41055a8d6e2b864fb7e601ceae20e31e726d14e8aca69b769e26056e6f15a76e36ac74c6ad24165ffe0d24f5c34c + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -17396,6 +18182,20 @@ __metadata: languageName: node linkType: hard +"sanitize-html@npm:^2.11.0": + version: 2.13.0 + resolution: "sanitize-html@npm:2.13.0" + dependencies: + deepmerge: ^4.2.2 + escape-string-regexp: ^4.0.0 + htmlparser2: ^8.0.0 + is-plain-object: ^5.0.0 + parse-srcset: ^1.0.2 + postcss: ^8.3.11 + checksum: d88602328306dbbddb9c5e2a5798783a3b38977a7ef40bf81dae31220d7fb583149c1046a33ec6817e9d96d172b1aaa9ea159776eb1ee08f6a0571150114c9bf + languageName: node + linkType: hard + "sax@npm:^1.2.4": version: 1.3.0 resolution: "sax@npm:1.3.0" @@ -17835,7 +18635,11 @@ __metadata: gatsby-plugin-postcss: ^6.13.1 gatsby-plugin-sharp: ^5.13.1 gatsby-plugin-sitemap: ^6.13.1 + gatsby-remark-images: ^7.13.1 + gatsby-remark-responsive-iframe: ^6.13.1 gatsby-source-filesystem: ^5.13.1 + gatsby-source-hubspot-node: 1.0.1 + gatsby-transformer-remark: ^6.13.1 gatsby-transformer-sharp: ^5.13.1 postcss: ^8.4.38 react: ^18.2.0 @@ -18030,6 +18834,13 @@ __metadata: languageName: node linkType: hard +"space-separated-tokens@npm:^1.0.0": + version: 1.1.5 + resolution: "space-separated-tokens@npm:1.1.5" + checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 + languageName: node + linkType: hard + "space-separated-tokens@npm:^2.0.0": version: 2.0.2 resolution: "space-separated-tokens@npm:2.0.2" @@ -18110,7 +18921,7 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:^1.1.3": +"sprintf-js@npm:^1.1.1, sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 @@ -18348,6 +19159,17 @@ __metadata: languageName: node linkType: hard +"stringify-entities@npm:^3.0.1": + version: 3.1.0 + resolution: "stringify-entities@npm:3.1.0" + dependencies: + character-entities-html4: ^1.0.0 + character-entities-legacy: ^1.0.0 + xtend: ^4.0.0 + checksum: 5b6212e2985101ddb8197d999a6c01abb610f2ba6efd6f8f7d7ec763b61cb08b55735b03febdf501c2091f484df16bc82412419ef35ee21135548f6a15881044 + languageName: node + linkType: hard + "stringify-entities@npm:^4.0.0": version: 4.0.3 resolution: "stringify-entities@npm:4.0.3" @@ -18485,6 +19307,15 @@ __metadata: languageName: node linkType: hard +"style-to-object@npm:^0.3.0": + version: 0.3.0 + resolution: "style-to-object@npm:0.3.0" + dependencies: + inline-style-parser: 0.1.1 + checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 + languageName: node + linkType: hard + "style-to-object@npm:^0.4.1": version: 0.4.4 resolution: "style-to-object@npm:0.4.4" @@ -19007,6 +19838,13 @@ __metadata: languageName: node linkType: hard +"trough@npm:^1.0.0": + version: 1.0.5 + resolution: "trough@npm:1.0.5" + checksum: d6c8564903ed00e5258bab92134b020724dbbe83148dc72e4bf6306c03ed8843efa1bcc773fa62410dd89161ecb067432dd5916501793508a9506cacbc408e25 + languageName: node + linkType: hard + "trough@npm:^2.0.0": version: 2.2.0 resolution: "trough@npm:2.2.0" @@ -19313,6 +20151,16 @@ __metadata: languageName: node linkType: hard +"underscore.string@npm:^3.3.6": + version: 3.3.6 + resolution: "underscore.string@npm:3.3.6" + dependencies: + sprintf-js: ^1.1.1 + util-deprecate: ^1.0.2 + checksum: b7719c30e5d1fdda4ee9379e8d80dca2b0668942420ba365ae3410120e08225fe36707a7981ce0f921812dee6a2290b713cdce1e75e770b98e67a45d8a378d35 + languageName: node + linkType: hard + "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -19320,6 +20168,16 @@ __metadata: languageName: node linkType: hard +"unherit@npm:^1.0.4": + version: 1.1.3 + resolution: "unherit@npm:1.1.3" + dependencies: + inherits: ^2.0.0 + xtend: ^4.0.0 + checksum: fd7922f84fc0bfb7c4df6d1f5a50b5b94a0218e3cda98a54dbbd209226ddd4072d742d3df44d0e295ab08d5ccfd304a1e193dfe31a86d2a91b7cb9fdac093194 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -19380,6 +20238,20 @@ __metadata: languageName: node linkType: hard +"unified@npm:^9.1.0, unified@npm:^9.2.2": + version: 9.2.2 + resolution: "unified@npm:9.2.2" + dependencies: + bail: ^1.0.0 + extend: ^3.0.0 + is-buffer: ^2.0.0 + is-plain-obj: ^2.0.0 + trough: ^1.0.0 + vfile: ^4.0.0 + checksum: 7c24461be7de4145939739ce50d18227c5fbdf9b3bc5a29dabb1ce26dd3e8bd4a1c385865f6f825f3b49230953ee8b591f23beab3bb3643e3e9dc37aa8a089d5 + languageName: node + linkType: hard + "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -19463,6 +20335,15 @@ __metadata: languageName: node linkType: hard +"unist-util-modify-children@npm:^2.0.0": + version: 2.0.0 + resolution: "unist-util-modify-children@npm:2.0.0" + dependencies: + array-iterate: ^1.0.0 + checksum: 7c8e11c320e2c8f8e0f7ab32a0d5a88317a8ed40c30ef0dca1038252eae9ca31db7e24f3c77799ae086bf1f73ee8cc34056e12334b05da304287e3a5b8700034 + languageName: node + linkType: hard + "unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": version: 1.1.2 resolution: "unist-util-position-from-estree@npm:1.1.2" @@ -19488,6 +20369,15 @@ __metadata: languageName: node linkType: hard +"unist-util-remove-position@npm:^3.0.0": + version: 3.0.0 + resolution: "unist-util-remove-position@npm:3.0.0" + dependencies: + unist-util-visit: ^2.0.0 + checksum: 66518939287cb83b456d18736effbfdb8dcf027f6a60f1a9e0545f80d079d2fc631953f778362dfda7000a36a1f52e70de7330c88fcc816b10e9be81b52b21b2 + languageName: node + linkType: hard + "unist-util-remove-position@npm:^4.0.0": version: 4.0.2 resolution: "unist-util-remove-position@npm:4.0.2" @@ -19498,6 +20388,28 @@ __metadata: languageName: node linkType: hard +"unist-util-select@npm:^3.0.4": + version: 3.0.4 + resolution: "unist-util-select@npm:3.0.4" + dependencies: + css-selector-parser: ^1.0.0 + not: ^0.1.0 + nth-check: ^2.0.0 + unist-util-is: ^4.0.0 + zwitch: ^1.0.0 + checksum: e6bdb4c79037e7d398a7682e3a2fb461e4b9ea8305e2228f54c47a3a27759e0bfc9f31eee763c31978b337d55f4a2216b974d3b7fcba058b1267ca1fc1e3ccfb + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-stringify-position@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.2 + checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 + languageName: node + linkType: hard + "unist-util-stringify-position@npm:^3.0.0": version: 3.0.3 resolution: "unist-util-stringify-position@npm:3.0.3" @@ -19507,7 +20419,14 @@ __metadata: languageName: node linkType: hard -"unist-util-visit-parents@npm:^3.0.0": +"unist-util-visit-children@npm:^1.0.0": + version: 1.1.4 + resolution: "unist-util-visit-children@npm:1.1.4" + checksum: df41bf79851781ea1b19de854e2cfc78c9a63098f0387b32eb74b7860eb1f59bb7d12cce7ef53536baf14eea055d201e8b8268176b849a681c5a678b4d2de293 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^3.0.0, unist-util-visit-parents@npm:^3.1.1": version: 3.1.1 resolution: "unist-util-visit-parents@npm:3.1.1" dependencies: @@ -19527,7 +20446,7 @@ __metadata: languageName: node linkType: hard -"unist-util-visit@npm:^2.0.0": +"unist-util-visit@npm:^2.0.0, unist-util-visit@npm:^2.0.3": version: 2.0.3 resolution: "unist-util-visit@npm:2.0.3" dependencies: @@ -19753,6 +20672,23 @@ __metadata: languageName: node linkType: hard +"vfile-location@npm:^3.1.0, vfile-location@npm:^3.2.0": + version: 3.2.0 + resolution: "vfile-location@npm:3.2.0" + checksum: 9bb3df6d0be31b5dd2d8da0170c27b7045c64493a8ba7b6ff7af8596c524fc8896924b8dd85ae12d201eead2709217a0fbc44927b7264f4bbf0aa8027a78be9c + languageName: node + linkType: hard + +"vfile-message@npm:^2.0.0": + version: 2.0.4 + resolution: "vfile-message@npm:2.0.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^2.0.0 + checksum: 1bade499790f46ca5aba04bdce07a1e37c2636a8872e05cf32c26becc912826710b7eb063d30c5754fdfaeedc8a7658e78df10b3bc535c844890ec8a184f5643 + languageName: node + linkType: hard + "vfile-message@npm:^3.0.0": version: 3.1.4 resolution: "vfile-message@npm:3.1.4" @@ -19763,6 +20699,18 @@ __metadata: languageName: node linkType: hard +"vfile@npm:^4.0.0": + version: 4.2.1 + resolution: "vfile@npm:4.2.1" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^2.0.0 + vfile-message: ^2.0.0 + checksum: ee5726e10d170472cde778fc22e0f7499caa096eb85babea5d0ce0941455b721037ee1c9e6ae506ca2803250acd313d0f464328ead0b55cfe7cb6315f1b462d6 + languageName: node + linkType: hard + "vfile@npm:^5.0.0, vfile@npm:^5.3.7": version: 5.3.7 resolution: "vfile@npm:5.3.7" @@ -19913,6 +20861,13 @@ __metadata: languageName: node linkType: hard +"web-namespaces@npm:^1.0.0": + version: 1.1.4 + resolution: "web-namespaces@npm:1.1.4" + checksum: 5149842ccbfbc56fe4f8758957b3f8c8616a281874a5bb84aa1b305e4436a9bad853d21c629a7b8f174902449e1489c7a6c724fccf60965077c5636bd8aed42b + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -20450,6 +21405,13 @@ __metadata: languageName: node linkType: hard +"zwitch@npm:^1.0.0": + version: 1.0.5 + resolution: "zwitch@npm:1.0.5" + checksum: 28a1bebacab3bc60150b6b0a2ba1db2ad033f068e81f05e4892ec0ea13ae63f5d140a1d692062ac0657840c8da076f35b94433b5f1c329d7803b247de80f064a + languageName: node + linkType: hard + "zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4"