import { createMemo, JSX, Show } from 'solid-js' import 'prismjs/themes/prism-tomorrow.css' import styles from '../styles/CodePreview.module.css' import { detectLanguage, formatCode, highlightCode } from '../utils/codeHelpers' interface CodePreviewProps extends JSX.HTMLAttributes { content: string language?: string maxHeight?: string showLineNumbers?: boolean autoFormat?: boolean editable?: boolean onEdit?: () => void } /** * Компонент для отображения кода с подсветкой синтаксиса * * @example * ```tsx * setIsEditing(true)} * /> * ``` */ const CodePreview = (props: CodePreviewProps) => { // Реактивные вычисления const language = createMemo(() => props.language || detectLanguage(props.content)) const formattedContent = createMemo(() => props.autoFormat ? formatCode(props.content, language()) : props.content ) const highlightedCode = createMemo(() => highlightCode(formattedContent(), language())) const isEmpty = createMemo(() => !props.content?.trim()) return (
{ if (props.editable && (e.key === 'Enter' || e.key === ' ')) { e.preventDefault() props.onEdit?.() } }} >
{/* Область кода */}
{props.editable ? 'Нажмите для редактирования...' : 'Нет содержимого'}
} >
              
            
{/* Индикаторы */}
{language()}
Только чтение
{/* Кнопка редактирования */}
) } export default CodePreview export { detectLanguage, formatCode }