@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
85 lines (84 loc) • 2.64 kB
JavaScript
'use client';
import { cva } from 'class-variance-authority';
import { memo, useMemo } from 'react';
import StaticRenderer from "./StaticRenderer";
import StreamRenderer from "./StreamRenderer";
import { useStyles } from "./style";
import { jsx as _jsx } from "react/jsx-runtime";
var SyntaxHighlighter = /*#__PURE__*/memo(function (_ref) {
var animated = _ref.animated,
children = _ref.children,
className = _ref.className,
enableTransformer = _ref.enableTransformer,
language = _ref.language,
style = _ref.style,
theme = _ref.theme,
_ref$variant = _ref.variant,
variant = _ref$variant === void 0 ? 'borderless' : _ref$variant;
var _useStyles = useStyles(),
styles = _useStyles.styles,
cx = _useStyles.cx;
var isDefaultTheme = theme === 'lobe-theme' || !theme;
var showBackground = !isDefaultTheme && variant === 'filled';
var resolvedTheme = isDefaultTheme ? undefined : theme;
var variants = useMemo(function () {
return cva(styles.root, {
defaultVariants: {
shiki: true,
showBackground: false,
variant: 'borderless'
},
/* eslint-disable sort-keys-fix/sort-keys-fix */
variants: {
shiki: {
false: styles.unshiki,
true: styles.shiki
},
variant: {
filled: styles.padding,
outlined: styles.padding,
borderless: styles.noPadding
},
showBackground: {
false: styles.noBackground,
true: null
}
}
/* eslint-enable sort-keys-fix/sort-keys-fix */
});
}, [styles]);
var shikiClassName = cx(variants({
shiki: true,
showBackground: showBackground,
variant: variant
}), className);
var fallbackClassName = cx(variants({
shiki: false,
showBackground: showBackground,
variant: variant
}), className);
if (animated) {
return /*#__PURE__*/_jsx(StreamRenderer, {
className: shikiClassName,
enableTransformer: enableTransformer,
fallbackClassName: fallbackClassName,
language: language,
style: style,
theme: resolvedTheme,
children: children
});
}
return /*#__PURE__*/_jsx(StaticRenderer, {
className: shikiClassName,
enableTransformer: enableTransformer,
fallbackClassName: fallbackClassName,
language: language,
style: style,
theme: resolvedTheme,
children: children
});
}, function (prevProps, nextProps) {
return prevProps.children === nextProps.children && prevProps.language === nextProps.language;
});
SyntaxHighlighter.displayName = 'SyntaxHighlighter';
export default SyntaxHighlighter;