UNPKG

@ant-design/x-markdown

Version:

placeholder for @ant-design/x-markdown

124 lines (117 loc) 4.95 kB
"use strict"; 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;