vitepress-codeblock-collapse

Auto-collapse long code blocks in VitePress with expand/collapse toggle
22,634 16
Install
npm install vitepress-codeblock-collapse
Latest Version:1.0.0
Vue:3
License:MIT
Last Updated:Apr 27, 2026
Links: GitHub  ·  npm
Maintainer: ilyazelenko

vitepress-codeblock-collapse

Auto-collapse long code blocks in VitePress with an expand/collapse toggle.

  • Collapses code blocks taller than a configurable height
  • Gradient overlay with animated chevron button
  • Keyboard accessible (Tab, Enter/Space, focus-visible)
  • ARIA attributes (aria-expanded, aria-controls)
  • Respects prefers-reduced-motion
  • SSR-safe — no document access on the server
  • Cleanup API to remove all UI and event listeners
  • Works with any Vue 3 project (VitePress optional)

Installation

npm install vitepress-codeblock-collapse

Usage

VitePress (recommended)

// .vitepress/theme/index.ts
import { computed } from 'vue'
import DefaultTheme from 'vitepress/theme'
import { useData } from 'vitepress'
import { useCodeblockCollapse } from 'vitepress-codeblock-collapse'
import 'vitepress-codeblock-collapse/style.css'

export default {
  extends: DefaultTheme,
  setup() {
    const { page } = useData()
    const pagePath = computed(() => page.value.relativePath)
    useCodeblockCollapse(pagePath)
  },
}

Standalone (any Vue 3 app)

import { collapseCodeblocks } from 'vitepress-codeblock-collapse'
import 'vitepress-codeblock-collapse/style.css'

// Call after DOM is ready
collapseCodeblocks({
  selector: '.my-code-blocks div[class*="language-"]',
  maxHeight: 400,
})

API

useCodeblockCollapse(pagePath, options?)

Vue composable — auto-collapses on mount and re-processes on page navigation.

Param Type Description
pagePath Ref<string> Reactive ref that changes on navigation
options CodeblockCollapseOptions Optional config

collapseCodeblocks(options?)

Scans the DOM for tall code blocks and adds collapse/expand UI. Safe to call multiple times.

cleanupCodeblocks(options?)

Removes all collapse UI and event listeners from processed blocks.

CodeblockCollapseOptions

Option Type Default Description
maxHeight number 380 Max height (px) before collapse
selector string '.vp-doc div[class*="language-"]' CSS selector for code block containers
dataAttr string 'collapsed' Data attribute for tracking state

License

MIT

Related Packages

@red-asuka/vitepress-plugin-tabs

VitePress plugin - markdown custom container to display content in tabs

49,189 10
vp-dynamic-nav

VitePress plugin that fetches and renders the navbar dynamically from a remote J...

4,229
vitepress-theme-website

vitepress plugin for website

1,857 20
vitepress-plugin-component

VitePress plugin that renders Vue components with tabs showing preview and sourc...

1,223 2

Version History

Version Released License
1.0.0 MIT