Skip to content

MarleneJiang/slidev-parser

Folders and files

NameName
Last commit message
Last commit date
Dec 15, 2024
Dec 17, 2024
Mar 11, 2025
Feb 10, 2025
Mar 11, 2025
Feb 11, 2025
Feb 11, 2025
Dec 13, 2024
Dec 15, 2024
Feb 11, 2025
Feb 11, 2025
Dec 15, 2024
Mar 1, 2025
Mar 1, 2025
Mar 1, 2025
Dec 13, 2024
Dec 16, 2024
Feb 19, 2025
Feb 19, 2025
Feb 10, 2025
Feb 11, 2025

Repository files navigation

slidev-parser

A powerful browser-side parser and renderer for Slidev presentations, enabling real-time MDC syntax rendering and UnoCSS styling.

license release issues pulls

English | 简体中文 | 🤹‍♂️ Demo | 🚀 Playground


Features ✨

  • 📝 Enhanced Markdown

    • Full MDC support
    • Seamless Vue component integration
    • Style modifiers (e.g. {.text-blue})
    • Nested syntax and shortcuts
  • 🎨 UnoCSS Integration

    • Atomic CSS utilities
    • Dynamic class generation
    • Icon preset support
    • Custom rules & theming
  • 🧩 Component System

    • Remote component loading
    • Custom component injection
    • Real-time component updates
    • Full lifecycle management
  • 📐 Layout Templates

    • default - Standard layout
    • center - Centered content
    • cover - Cover slide
    • two-cols - Two-column layout
    • image-right/left - Image with text
    • iframe - Embedded frame
  • 🔥 Advanced Features

    • Browser-side rendering
    • Responsive design
    • Zoom controls
    • Theme customization
    • Hot component reload

Installation 📦

# Using npm
npm install slidev-parser

# Using yarn
yarn add slidev-parser

# Using pnpm
pnpm add slidev-parser

Usage Guide 📖

Basic Usage

<script setup>
import { SlideRender } from 'slidev-parser'
import 'slidev-parser/index.css'

const slide = {
  frontmatter: {
    layout: 'cover', // Use cover layout
  },
  content: `
# My Presentation {.text-blue-500}

Content written in **Markdown**
  `,
  note: 'Speaker notes here'
}
</script>

<template>
  <SlideRender
    id="my-slide"
    :slide="slide"
    :zoom="1"
    :slide-aspect="16 / 9"
  />
</template>

Multiple Slides

<script setup>
import { SlidesRender } from 'slidev-parser'
import 'slidev-parser/index.css'

const slides = [
  {
    frontmatter: { layout: 'cover' },
    content: '# First Page',
  },
  {
    frontmatter: { layout: 'two-cols' },
    content: `
# Left Content
::right::
# Right Content
    `,
  }
]
</script>

<template>
  <SlidesRender :slides="slides" />
</template>

Remote Components

<script setup>
import { SlideRender } from 'slidev-parser'
import 'slidev-parser/index.css'

const slide = {
  frontmatter: {
    layout: 'cover',
  },
  content: `
# My Presentation

<remote url="https://gist.githubusercontent.com/MarleneJiang/b205007f50abcbc404f07127439c686a/raw/05414d8f57cf7d0af626200f73feb19d01d79619/test.vue"/>
  `,
  note: 'Speaker notes here'
}
</script>

<template>
  <SlideRender
    id="my-slide"
    :slide="slide"
  />
</template>

Custom Components

<script setup>
import { SlideRender } from 'slidev-parser'
import CustomComp from './CustomComp.vue'
import 'slidev-parser/index.css'

const slide = {
  frontmatter: {
    layout: 'cover',
  },
  content: `
# My Presentation

<CustomComp/>
  `,
  note: 'Speaker notes here'
}
</script>

<template>
  <SlideRender
    id="my-slide"
    :slide="slide"
  />
</template>

Configuration Options

interface BaseConfigOptions {
  mdOptions?: Record<string, any>
  sfcOptions?: Record<string, any>
  components?: Record<string, Component>
}
export interface RendererOptions extends BaseConfigOptions {
  unoConfig?: {
    customConfigRaw?: string
    customCSSLayerName?: string
    uno?: boolean
  }
  SlideLoading?: Component
  SlideError?: Component
}

Warn

  1. CAN NOT be used in SSR environment, if you want to use it in Nuxt, you can set ssr: false in nuxt.config.js to disable SSR.