@ant-design/x-markdown
Version:
placeholder for @ant-design/x-markdown
124 lines (117 loc) • 4.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _icons = require("@ant-design/icons");
var _useXComponentConfig = _interopRequireDefault(require("@ant-design/x/es/_util/hooks/use-x-component-config"));
var _useLocale = _interopRequireDefault(require("@ant-design/x/es/locale/useLocale"));
var _useXProviderContext = _interopRequireDefault(require("@ant-design/x/es/x-provider/hooks/use-x-provider-context"));
var _en_US = _interopRequireDefault(require("@ant-design/x/locale/en_US"));
var _antd = require("antd");
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireDefault(require("react"));
var _reactSyntaxHighlighter = require("react-syntax-highlighter");
var _prism = require("react-syntax-highlighter/dist/esm/styles/prism");
var _style = _interopRequireDefault(require("./style"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
const customOneLight = {
..._prism.oneLight,
'pre[class*="language-"]': {
..._prism.oneLight['pre[class*="language-"]'],
margin: 0
}
};
const HighlightCode = props => {
const {
lang,
children,
header,
prefixCls: customizePrefixCls,
className,
classNames = {},
styles = {},
style,
highlightProps
} = props;
// ============================ locale ============================
const [contextLocale] = (0, _useLocale.default)('HighlightCode', _en_US.default.HighlightCode);
// ============================ Prefix ============================
const {
getPrefixCls,
direction
} = (0, _useXProviderContext.default)();
const prefixCls = getPrefixCls('highlightCode', customizePrefixCls);
const [hashId, cssVarCls] = (0, _style.default)(prefixCls);
// ===================== Component Config =========================
const contextConfig = (0, _useXComponentConfig.default)('highlightCode');
// ============================ style ============================
const mergedCls = (0, _classnames.default)(prefixCls, contextConfig.className, className, contextConfig.classNames.root, classNames.root, hashId, cssVarCls, {
[`${prefixCls}-rtl`]: direction === 'rtl'
});
// ============================ locale ============================
const [messageApi, contextHolder] = _antd.message.useMessage();
const handleCopyCode = async () => {
if (!children) return;
try {
await navigator.clipboard.writeText(children.trim());
messageApi.open({
type: 'success',
content: contextLocale.copySuccess
});
} catch (error) {
console.error('Failed to copy code:', error);
}
};
const renderTitle = () => {
if (header === null) return null;
if (header) return header;
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)(`${prefixCls}-header`, contextConfig.classNames.header, classNames.header),
style: {
...contextConfig.styles.header,
...styles.header
}
}, contextHolder, /*#__PURE__*/_react.default.createElement("span", {
className: (0, _classnames.default)(`${prefixCls}-header-title`, classNames.headerTitle, contextConfig.classNames.headerTitle),
style: {
...contextConfig.styles.headerTitle,
...styles.headerTitle
}
}, lang), /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
title: contextLocale.copy
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
type: "text",
size: "small",
icon: /*#__PURE__*/_react.default.createElement(_icons.CopyOutlined, null),
onClick: handleCopyCode
})));
};
// ============================ render ============================
if (!children) {
return null;
}
if (!lang) {
return /*#__PURE__*/_react.default.createElement("code", null, children);
}
return /*#__PURE__*/_react.default.createElement("div", {
className: mergedCls,
style: {
...contextConfig.styles.root,
...style,
...styles.root
}
}, renderTitle(), /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)(`${prefixCls}-code`, contextConfig.classNames.code, classNames.code),
style: {
...contextConfig.styles.code,
...styles.code
}
}, /*#__PURE__*/_react.default.createElement(_reactSyntaxHighlighter.Prism, _extends({
language: lang,
wrapLines: true,
style: customOneLight
}, highlightProps), children.replace(/\n$/, ''))));
};
var _default = exports.default = HighlightCode;