npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jsx-in-md

v1.0.0

Published

This package allows you to use react elements (and jsx in general) in you markdown.

Downloads

2

Readme

jsx-in-md

This package allows you to use react elements (and jsx in general) in you markdown.

Usage Example

To use the package, import the default export:

import initMd from 'jsx-in-md';

Then, you can use the function in a component to pass configuration settings, and get back an md function:

const ExampleComponent = () => {
   const md = initMd(
      // Configuration goes here, more details after.
   );
};

You can then use md as a tagged template, and pass in the markdown. Whenever you want to use jsx, just wrap it inside a placeholders (${})!

// inside ExampleComponent
return md`
# This will be rendered as a <h1>!

## Inside this heading I will include a ${<button>Button!</button>}
`

Passing different component:

By default, the package uses the following mapping to map markdown elements to jsx ones: | Element Key | Markdown Element | JSX Element | | :---------: | :--------------: | :---------: | | h1-h6 | Heading 1 - 6 | <h1> - <h6> | | paragraph | Paragraph | <p> | | strong | Strong | <strong> | | emphasis | Emphasis | <em> | | delete | Delete | <s> | | link | Link | <a> | | listItem | List Item | <li> | | ol | Ordered List | <ol> | | ul | Unordered List | <ul> | | img | Image | <img> | | thematicBreak| Thematic Break | <hr> | | code | Code (Block) | <pre><code> | | inlineCode | Code (inline) | <code> | | break | Line Break | <br> | | blockquote | Block Quote | <blockquote> |

Additionally, each heading block in wrapped with two elements: a section and a subsection. The generated HTML looks something like this:

<sectionElement id="heading-text">
   <Heading1>Heading Text</Heading1>
   <subsectionElement>
      <!-- Everything under this heading -->
   </subsectionElement>
</sectionElement>

This is useful to link to headings and have the page line up well. The section and subsection elements can also be changed, and their defaults are: | Element Key | Element | JSX Element | | :---------: | :--------------: | :---------: | | sectionContainer | Section Element | <div> | | subsectionContainer | Subsection Element | <div> |

You can pass any component you want into the initMd function to change them. For example:

const GreenH1 = ({ children }: PropsWithChildren) => {
   // Will render its children in an h1 with green text

   return (
      <h1 style={{ color: 'green' }}>{children}</h1>
   );
};

// In ExampleComponent
const md = initMd({
   h1: GreenH1,
   sectionContainer: 'section',
});

Caveats

  • Make sure your markdown isn't too indented: It has to be on the same level as the begining of the statment (see examples in this file).
  • If you want to use the string {{}}, make sure to escape it using a placeholder (${'{{}}'}).
  • If you want to use the string ${}, you can escape it using a backslash (\${}). This is just normal javascript templates.

Examples

You can view how this readme page is rendered using jsx-in-md by running npm run dev (the code for it is in src/App.tsx)

Unsupported markdown

Currently, the following markdown is not supported

  • Tables
  • Task list items (will be disaplyed as regular items)
  • Autolinks
  • Footnotes
  • HTML
  • Frontmatter