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

@kwangkim/mdx-deck

v1.2.3-3

Published

MDX-based slide deck presentations

Downloads

16

Readme

mdx-deck

MDX-based presentation decks (Beta)

Build Status Version Downloads

npm i -D mdx-deck
  • :memo: Write presentations in markdown
  • :atom_symbol: Import and use React components
  • :nail_care: Customizable themes and components
  • :zero: Zero-config CLI

View demo

Getting Started

Create an MDX file and separate each slide with ---.

# This is the title of my deck
---
# About Me
---
```jsx
<CodeSnippet />
```
---
import Demo from './components/Demo'

<Demo />
---
# The end

Add a run script to your package.json with the mdx-deck CLI pointing to the .mdx file to start the dev server:

"scripts": {
  "start": "mdx-deck deck.mdx"
}

Start the dev server:

npm start

Video Tutorial

For a video introduction, see this egghead tutorial by @andrewdelprete.

Usage

MDX can use Markdown syntax and render React components with JSX.

Imports

To import components, use ES import syntax separated with empty lines from any markdown or JSX syntax.

import { Box } from 'grid-styled'

<Box color='tomato'>
  Hello
</Box>

Theming

mdx-deck uses styled-components for styling.

Built-in Themes

mdx-deck includes several built-in themes to change the look and feel of the presentation. Export theme from your MDX file to enable a theme.

export { dark as theme } from 'mdx-deck/themes'

# Dark Theme

The following themes are available from mdx-deck/themes:

  • theme: default theme with white background
  • dark: black background dark theme
  • future: dark theme with Avenir Next
  • condensed: dark theme with Roboto Condensed

Custom Themes

A custom theme can be provided by exporting theme from the MDX file.

export { default as theme } from './theme'

# Hello

The theme should be an object based on styled-system's theme schema.

// example theme.js
export default {
  font: 'Georgia',
  monospace: 'Menlo, monospace',
  fontSizes: [
    '0.75em', '1em', '1.5em', '2em', '3em'
  ],
  colors: {
    text: '#000',
    background: 'transparent',
    link: '#07c',
    heading: '#000',
    quote: '#000',
    pre: '#f0f',
    preBackground: '#333',
    code: '#f0f',
    codeBackground: 'transparent',
  },
  css: {
    // apply any styles to the root element
  },
  // custom CSS can be provided to any of the default components:
  heading: {
    fontWeight: 400
  },
  link: {
    textDecoration: 'none',
    '&:hover': {
      textDecoration: 'underline',
    }
  }
}

The following keys are available for theming:

  • font: base font family
  • monospace: font family for <pre> and <code>
  • fontSizes: array of font sizes from smallest to largest
  • colors: object of colors used for MDX components
    • text: root foreground color
    • background: root background color
    • link
    • heading
    • blockquote
    • pre
    • preBackground
    • code
    • codeBackground
  • css: root CSS object
  • heading: CSS for all headings
  • h1: CSS for <h1>
  • h2: CSS for <h2>
  • h3: CSS for <h3>
  • paragraph: CSS for <p>
  • link: CSS for <a>
  • ul: CSS for <ul>
  • ol: CSS for <ol>
  • li: CSS for <li>
  • img: CSS for <img>

Custom Components

mdx-deck includes default components for MDX, but to provide custom components to the MDXProvider, export a components object.

export { default as components } from './components'

# Custom Components

Components

mdx-deck includes some built-in components to help with creating presentations.

Image

Use the <Image /> component to render a fullscreen image (using the CSS background-image property).

import { Image } from 'mdx-deck'

<Image src='kitten.png' />

Layouts

Each slide can include a custom layout around its content. This can be used as a substitute for slide templates found in other presentation apps and libraries.

// example Layout.js
import React from 'react'

export default ({ children }) =>
  <div
    style={{
      width: '100vw',
      height: '100vw',
      backgroundColor: 'tomato'
    }}>
    {children}
  </div>
import Layout from './Layout'

# No Layout

---
export default Layout

# Custom Layout

The layout component will wrap the MDX elements within that slide, which means you can use a nested ThemeProvider or target elements with CSS-in-JS.

Custom Provider

A custom Provider component can be exported to wrap the entire application. This is useful for adding custom context providers in React.

export { default as Provider } from './Provider'

# Hello

Exporting

Add a build script to your package.json to export a presentation as HTML with a JS bundle.

"scripts": {
  "build": "mdx-deck build deck.mdx"
}

PDF Export

Presentations can be exported as PDF using the CLI. This works well as a backup option for any unforeseen technical difficulties.

"script": {
  "pdf": "mdx-deck pdf deck.mdx"
}

CLI Options

-p --port     Dev server port
--no-open     Prevent from opening in default browser
-d --out-dir  Output directory for exporting
--title       Title for the HTML document

React API

mdx-deck components can also be used in any React application, such as create-react-app or next.js.

Webpack Loader

mdx-deck uses a custom webpack loader to split MDX files into an array of slides. Use this loader to import mdx files in a webpack application.

// example webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.mdx$/,
        ignore: /node_modules/,
        use: [
          'babel-loader',
          'mdx-deck/loader'
        ]
      }
    ]
  }
}

SlideDeck Component

import React from 'react'
import { SlideDeck } from 'mdx-deck'
import slides from './deck.mdx'
import theme from './theme'
import components from './components'

export default () =>
  <SlideDeck
    slides={slides}
    theme={theme}
    components={components}
    width='100vw'
    height='100vh'
  />

View the source for other components available for use.


Related

MIT License