@mantine/code-highlight
Version:
Code highlight with Mantine theme
31 lines (28 loc) • 1.07 kB
JavaScript
'use client';
import { jsx } from 'react/jsx-runtime';
import { useState, useMemo, useEffect } from 'react';
import { createOptionalContext } from '@mantine/core';
import { plainTextAdapter } from './adapters/plain-text-adapter.mjs';
const [CodeHighlightProvider, useCodeHighlight] = createOptionalContext({
adapter: plainTextAdapter,
highlight: plainTextAdapter.getHighlighter(null)
});
function CodeHighlightAdapterProvider({
adapter,
children
}) {
const [ctx, setCtx] = useState(null);
const highlight = useMemo(() => adapter.getHighlighter(ctx), [adapter, ctx]);
useEffect(() => {
if (adapter.loadContext) {
adapter.loadContext().then(setCtx);
}
}, [adapter]);
return /* @__PURE__ */ jsx(CodeHighlightProvider, { value: { adapter, highlight }, children });
}
function useHighlight() {
const ctx = useCodeHighlight();
return ctx?.highlight || plainTextAdapter.getHighlighter(null);
}
export { CodeHighlightAdapterProvider, CodeHighlightProvider, useCodeHighlight, useHighlight };
//# sourceMappingURL=CodeHighlightProvider.mjs.map