react-shiki
Version:
Syntax highlighter component for react using shiki
54 lines (53 loc) • 2.17 kB
JavaScript
import { a as isLoadableLanguage, i as useHighlight, n as isInlineCode, r as rehypeInlineCodeProperty, t as createShikiHighlighterComponent } from "./component-CYq7SnJ0.mjs";
import { createOnigurumaEngine } from "shiki/engine/oniguruma";
import { createJavaScriptRawEngine, createJavaScriptRegexEngine } from "shiki/engine/javascript";
import { bundledLanguages, getSingletonHighlighter } from "shiki/bundle/web";
//#region src/bundles/web.ts
/**
* Creates a highlighter using the web Shiki bundle with web-focused languages.
* Smaller than the full bundle while covering most web development needs.
* Includes: HTML, CSS, JS, TS, JSON, Markdown, Vue, JSX, Svelte, etc.
*/
async function createWebHighlighter(langsToLoad, themesToLoad, engine) {
return await getSingletonHighlighter({
langs: langsToLoad.filter((lang) => isLoadableLanguage(lang, bundledLanguages)),
themes: themesToLoad,
engine: engine ?? createOnigurumaEngine(import("shiki/wasm"))
});
}
//#endregion
//#region src/web.ts
/**
* Highlight code with shiki (web bundle)
*
* @param code - Code to highlight
* @param lang - Language (bundled or custom)
* @param theme - Theme (bundled, multi-theme, or custom)
* @param options - react-shiki options + shiki options
* @returns Highlighted code as React elements or HTML string
*
* @example
* ```tsx
* const highlighted = useShikiHighlighter(
* 'const x = 1;',
* 'typescript',
* {
* light: 'github-light',
* dark: 'github-dark'
* }
* );
* ```
*
* Web bundle (~3.8MB minified, 695KB gzipped). For other bundles: `react-shiki` or `react-shiki/core`
*/
const useShikiHighlighter = (code, lang, themeInput, options = {}) => {
return useHighlight(code, lang, themeInput, options, createWebHighlighter);
};
/**
* ShikiHighlighter component using the web bundle.
* Includes web-focused languages for balanced size and functionality.
*/
const ShikiHighlighter = createShikiHighlighterComponent(useShikiHighlighter);
//#endregion
export { ShikiHighlighter, ShikiHighlighter as default, createJavaScriptRawEngine, createJavaScriptRegexEngine, isInlineCode, rehypeInlineCodeProperty, useShikiHighlighter };
//# sourceMappingURL=web.mjs.map