/** * 代码编辑器组件,模拟现代代码编辑器的外观 */ import React from 'react' import HighlightSyntax from './HighlightSyntax' interface CodeEditorProps { code: string language?: string title?: string showLineNumbers?: boolean showHeader?: boolean showFooter?: boolean className?: string } const CodeEditor: React.FC = ({ code, language = 'javascript', title, showLineNumbers = false, showHeader = false, showFooter = false, className = '', }) => { const lines = code.split('\n') // 使用 Tailwind 的 dark: 前缀实现自动主题切换 const containerClasses = 'bg-linear-to-br from-gray-50 to-gray-100 dark:from-gray-900 dark:to-gray-800 border-gray-300 dark:border-gray-700' const headerClasses = 'bg-gray-100 dark:bg-gray-800 border-gray-300 dark:border-gray-700' const headerTextClasses = 'text-gray-700 dark:text-gray-300' const languageTextClasses = 'text-gray-600 dark:text-gray-400' const lineNumbersClasses = 'bg-gray-100 dark:bg-gray-800 border-gray-300 dark:border-gray-700 text-gray-600 dark:text-gray-500' const codeAreaClasses = 'bg-white dark:bg-gray-900' const footerClasses = 'bg-gray-100 dark:bg-gray-800 border-gray-300 dark:border-gray-700 text-gray-600 dark:text-gray-400' const copyButtonClasses = 'bg-gray-200 hover:bg-gray-300 dark:bg-gray-700 dark:hover:bg-gray-600 text-gray-600 hover:text-gray-800 dark:text-gray-300 dark:hover:text-white' return (
{/* 编辑器顶部栏 */} {showHeader && (
{/* 窗口控制按钮 */}
{title && ( {title} )}
{language}
)} {/* 代码内容区域 */}
{/* 行号 */} {showLineNumbers && (
{lines.map((line, lineIdx) => { const lineNum = lineIdx + 1 return (
{lineNum}
) })}
)} {/* 代码内容 */}
{/* 复制按钮 */}
{/* 底部状态栏 */} {showFooter && (
{lines.length} lines UTF-8
)}
) } export default CodeEditor