@yuntijs/ui
Version:
☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps
108 lines • 4.62 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["children", "language", "className", "style", "allowChangeLanguage", "fileName", "icon", "contentStyle", "enableTransformer", "theme", "animated", "wrap"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import { ActionIcon, CopyButton } from '@lobehub/ui';
import { Select } from 'antd';
import { ChevronDown, ChevronRight } from 'lucide-react';
import { memo, useEffect, useState } from 'react';
import { Flexbox } from 'react-layout-kit';
import { languageMap } from "../hooks/useHighlight";
import { SyntaxHighlighter } from "./SyntaxHighlighter";
import { useStyles } from "./style";
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
var options = languageMap.map(function (item) {
return {
label: item,
value: item.toLowerCase()
};
});
export var FullFeaturedHighlighter = /*#__PURE__*/memo(function (_ref) {
var children = _ref.children,
_ref$language = _ref.language,
language = _ref$language === void 0 ? 'markdown' : _ref$language,
className = _ref.className,
style = _ref.style,
_ref$allowChangeLangu = _ref.allowChangeLanguage,
allowChangeLanguage = _ref$allowChangeLangu === void 0 ? false : _ref$allowChangeLangu,
fileName = _ref.fileName,
icon = _ref.icon,
contentStyle = _ref.contentStyle,
enableTransformer = _ref.enableTransformer,
theme = _ref.theme,
animated = _ref.animated,
wrap = _ref.wrap,
rest = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(true),
_useState2 = _slicedToArray(_useState, 2),
expand = _useState2[0],
setExpand = _useState2[1];
var _useState3 = useState(language || 'markdown'),
_useState4 = _slicedToArray(_useState3, 2),
lang = _useState4[0],
setLang = _useState4[1];
var _useStyles = useStyles({
variant: 'filled',
expand: expand
}),
styles = _useStyles.styles,
cx = _useStyles.cx;
var container = cx(styles.container, wrap && styles.wrap, className);
useEffect(function () {
setLang(language);
}, [language]);
return /*#__PURE__*/_jsxs(Flexbox, _objectSpread(_objectSpread({
className: container,
"data-code-type": "highlighter",
style: style
}, rest), {}, {
children: [/*#__PURE__*/_jsxs(Flexbox, {
align: 'center',
className: styles.header,
horizontal: true,
justify: 'space-between',
children: [/*#__PURE__*/_jsx(ActionIcon, {
icon: expand ? ChevronDown : ChevronRight,
onClick: function onClick() {
return setExpand(!expand);
},
size: "small"
}), allowChangeLanguage && !fileName ? /*#__PURE__*/_jsx(Select, {
className: styles.select,
onSelect: setLang,
options: options,
size: 'small',
suffixIcon: false,
value: lang.toLowerCase(),
variant: 'borderless'
}) : /*#__PURE__*/_jsxs(Flexbox, {
align: 'center',
className: styles.select,
gap: 2,
horizontal: true,
children: [icon, /*#__PURE__*/_jsx("span", {
children: fileName || lang
})]
}), /*#__PURE__*/_jsx(CopyButton, {
content: children,
size: "small"
})]
}), /*#__PURE__*/_jsx(SyntaxHighlighter, {
animated: animated,
enableTransformer: enableTransformer,
language: lang === null || lang === void 0 ? void 0 : lang.toLowerCase(),
style: expand ? _objectSpread(_objectSpread({}, contentStyle), {}, {
flex: 1
}) : _objectSpread(_objectSpread({}, contentStyle), {}, {
height: 0,
overflow: 'hidden'
}),
theme: theme,
children: children
})]
}));
});
export * from "./SyntaxHighlighter";