Giter Site home page Giter Site logo

ghoshnirmalya / mdx Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mintlify/mdx

0.0 1.0 0.0 343 KB

Markdown parser from Mintlify that provides a better developer experience for Next.js users by supporting syntax highlighting.

JavaScript 3.12% TypeScript 52.23% CSS 44.64%

mdx's Introduction

Mintlify Logo

Mint

Open source docs builder that's beautiful, fast, and easy to work with.

contributions welcome Tweet

Mintlify

Mintlify's markdown parser

@mintlify/mdx is a thin layer on top of next-mdx-remote that provides a better developer experience for Next.js users by adding support for syntax highlighting.

Installation

# using npm
npm i @mintlify/mdx

# using yarn
yarn add @mintlify/mdx

# using pnpm
pnpm add @mintlify/mdx

Examples

Next.js pages router

You can check the example app here.

  1. Call the getCompiledMdx function inside getStaticProps and return the mdxSource object.

    export const getStaticProps = (async () => {
      const mdxSource = await getCompiledMdx({
        source: "## Markdown H2",
      });
    
      return {
        props: {
          mdxSource,
        },
      };
    }) satisfies GetStaticProps<{
      mdxSource: MDXCompiledResult;
    }>;
  2. Pass the mdxSource object as props inside the MDXComponent.

    export default function Page({
      mdxSource,
    }: InferGetStaticPropsType<typeof getStaticProps>) {
      return <MDXComponent {...mdxSource} />;
    }
  3. Import @mintlify/mdx/dist/styles.css inside your _app.tsx file. This file contains the styles for the code syntax highlighting.

    import "@mintlify/mdx/dist/styles.css";
    
    import { AppProps } from "next/app";
    
    export default function App({ Component, pageProps }: AppProps) {
      return <Component {...pageProps} />;
    }

Next.js app router

You can check the example app here.

  1. Call the getCompiledServerMdx function inside your async React Server Component which will give you the frontmatter and content.

    import { getCompiledServerMdx } from "@mintlify/mdx";
    
    export default async function Home() {
      const { content, frontmatter } = await getCompiledServerMdx({
        source: `---
          title: Title
          ---
    
          ## Markdown H2
        `,
      });
    
      return (
        <article className="prose mx-auto py-8">
          <h1>{String(frontmatter.title)}</h1>
    
          {content}
        </article>
      );
    }
  2. Import @mintlify/mdx/dist/styles.css inside your layout.tsx file. This file contains the styles for the code syntax highlighting.

    import type { Metadata } from "next";
    import "@mintlify/mdx/dist/styles.css";
    
    export const metadata: Metadata = {
      title: "Create Next App",
      description: "Generated by create next app",
    };
    
    export default function RootLayout({
      children,
    }: {
      children: React.ReactNode;
    }) {
      return (
        <html lang="en">
          <body>{children}</body>
        </html>
      );
    }

APIs

Similar to next-mdx-remote, this package exports the following APIs:

  • getCompiledMdx - a function that compiles MDX source to MDXCompiledResult.
  • MDXComponent - a component that renders MDXCompiledResult.
  • getCompiledServerMdx - a function that compiles MDX source to return content and frontmatter and should be used inside async React Server Component.
  • MDXServerComponent - a component that renders content and frontmatter and should be used inside async React Server Component.

getCompiledMdx

import { getCompiledMdx } from "@mintlify/mdx";

const mdxSource = await getCompiledMdx({
  source: "## Markdown H2",
  mdxOptions: {
    remarkPlugins: [
      // Remark plugins
    ],
    rehypePlugins: [
      // Rehype plugins
    ],
  },
});

MDXComponent

import { MDXComponent } from "@mintlify/mdx";

<MDXComponent
  components={
    {
      // Your custom components
    }
  }
  {...mdxSource}
/>;

getCompiledServerMdx

import { getCompiledServerMdx } from "@mintlify/mdx";

const { content, frontmatter } = await getCompiledServerMdx({
  source: `---
    title: Title
    ---

    ## Markdown H2
  `,
  mdxOptions: {
    remarkPlugins: [
      // Remark plugins
    ],
    rehypePlugins: [
      // Rehype plugins
    ],
  },
  components: {
    // Your custom components
  },
});

MDXServerComponent

import { MDXServerComponent } from "@mintlify/mdx";

<MDXServerComponent
  source="## Markdown H2"
  components={
    {
      // Your custom components
    }
  }
/>;

Built with ❤︎ by Mintlify

mdx's People

Contributors

ghoshnirmalya avatar hahnbeelee avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.