パッケージの詳細

prosemirror-highlight

ocavue394.4kMIT0.13.0

A ProseMirror plugin to highlight code blocks

prosemirror, editor, highlight.js, shiki

readme

prosemirror-highlight

NPM version

Highlight your ProseMirror code blocks with any syntax highlighter you like!

Usage

With Shiki

<summary>Static loading of a fixed set of languages</summary> ts import { getSingletonHighlighter } from 'shiki' import { createHighlightPlugin } from 'prosemirror-highlight' import { createParser } from 'prosemirror-highlight/shiki' const highlighter = await getSingletonHighlighter({ themes: ['github-light'], langs: ['javascript', 'typescript', 'python'], }) const parser = createParser(highlighter) export const shikiPlugin = createHighlightPlugin({ parser })
<summary>Dynamic loading of arbitrary languages</summary> ts import { getSingletonHighlighter, type BuiltinLanguage, type Highlighter, } from 'shiki' import { createHighlightPlugin } from 'prosemirror-highlight' import { createParser, type Parser } from 'prosemirror-highlight/shiki' let highlighter: Highlighter | undefined let parser: Parser | undefined /** * Lazy load highlighter and highlighter languages. * * When the highlighter or the required language is not loaded, it returns a * promise that resolves when the highlighter or the language is loaded. * Otherwise, it returns an array of decorations. */ const lazyParser: Parser = (options) => { if (!highlighter) { return getSingletonHighlighter({ themes: ['github-light'], langs: [], }).then((h) => { highlighter = h }) } const language = options.language as BuiltinLanguage if (language && !highlighter.getLoadedLanguages().includes(language)) { return highlighter.loadLanguage(language) } if (!parser) { parser = createParser(highlighter) } return parser(options) } export const shikiLazyPlugin = createHighlightPlugin({ parser: lazyParser })
<summary>Set code block background color based on theme</summary> When using Shiki, two CSS variables are set automatically to the <pre> element: - --prosemirror-highlight: The text color of the code block - --prosemirror-highlight-bg: The background color of the code block You can use these variables to set the background color and text color of the code block. css .ProseMirror pre { color: var(--prosemirror-highlight, inherit); background-color: var(--prosemirror-highlight-bg, inherit); }

With lowlight (based on Highlight.js)

<summary>Static loading of all languages</summary> ts import 'highlight.js/styles/default.css' import { common, createLowlight } from 'lowlight' import { createHighlightPlugin } from 'prosemirror-highlight' import { createParser } from 'prosemirror-highlight/lowlight' const lowlight = createLowlight(common) const parser = createParser(lowlight) export const lowlightPlugin = createHighlightPlugin({ parser })

With refractor (based on Prism)

<summary>Static loading of all languages</summary> ts import { refractor } from 'refractor/all' import { createHighlightPlugin } from 'prosemirror-highlight' import { createParser } from 'prosemirror-highlight/refractor' const parser = createParser(refractor) export const refractorPlugin = createHighlightPlugin({ parser })

With Sugar high

<summary>Highlight with CSS</summary> ts import { createHighlightPlugin } from 'prosemirror-highlight' import { createParser } from 'prosemirror-highlight/sugar-high' const parser = createParser() export const sugarHighPlugin = createHighlightPlugin({ parser }) css :root { --sh-class: #2d5e9d; --sh-identifier: #354150; --sh-sign: #8996a3; --sh-property: #0550ae; --sh-entity: #249a97; --sh-jsxliterals: #6266d1; --sh-string: #00a99a; --sh-keyword: #f47067; --sh-comment: #a19595; }

Online demo

Open in StackBlitz

Credits

License

MIT

更新履歴

Changelog

0.13.0 (2025-03-14)

Features

0.12.2 (2025-02-06)

Bug Fixes

0.12.1 (2025-02-02)

Bug Fixes

0.12.0 (2025-02-02)

Features

0.11.1 (2025-01-22)

Bug Fixes

  • support shiki v2 and sugar-high v0.8 (#67) (b7fff1d)

0.11.0 (2024-12-03)

Features

  • add codeBlock as one of the default node type names (#61) (e96ec9e)

0.10.0 (2024-10-11)

Features

  • support shiki's object token.htmlStyle (#55) (70fc971)

0.9.0 (2024-09-04)

Features

0.8.0 (2024-06-21)

Features

0.7.0 (2024-06-21)

⚠ BREAKING CHANGES

  • remove shikiji support (#36)

Miscellaneous Chores

Code Refactoring

0.6.0 (2024-05-21)

Features

0.5.0 (2024-02-07)

Features

0.4.1 (2024-01-23)

Bug Fixes

0.4.0 (2024-01-01)

Features

  • allow the parser to return a promise (#16) (83751b3)

0.3.3 (2023-12-16)

Bug Fixes

0.3.2 (2023-12-14)

Bug Fixes

0.3.1 (2023-12-12)

Bug Fixes

0.3.0 (2023-12-10)

Features

0.2.0 (2023-12-10)

Features

0.1.0 (2023-12-10)

Features

Documentation