UNPKG

@mantine/code-highlight

Version:

Code highlight with Mantine theme

41 lines (40 loc) 1.32 kB
import { dark, light } from "./shiki-themes.mjs"; //#region packages/@mantine/code-highlight/src/CodeHighlightProvider/adapters/shiki-adapter.ts function stripElement(openTag, data) { const openIndex = data.indexOf(`<${openTag}`); let closeIndex = openIndex + openTag.length; for (let i = openIndex; i < data.length; i++) if (data[i] === ">") { closeIndex = i; break; } return (data.slice(0, openIndex) + data.slice(closeIndex + 1)).replace(`</${openTag}>`, ""); } function stripShikiCodeBlocks(data) { return stripElement("code", stripElement("pre", data)); } const createShikiAdapter = (loadShiki, { forceColorScheme } = {}) => { return { loadContext: loadShiki, getHighlighter: (ctx) => { if (!ctx) return ({ code }) => ({ highlightedCode: code, isHighlighted: false }); return ({ code, language, colorScheme }) => { let _colorScheme = colorScheme; if (colorScheme === "light") _colorScheme = light; else if (colorScheme === "dark") _colorScheme = dark; return { isHighlighted: true, highlightedCode: stripShikiCodeBlocks(ctx.codeToHtml(code, { lang: language, theme: forceColorScheme || _colorScheme })) }; }; } }; }; //#endregion export { createShikiAdapter, stripShikiCodeBlocks }; //# sourceMappingURL=shiki-adapter.mjs.map