UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

85 lines (84 loc) 2.64 kB
'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;