import { useState, useMemo } from 'react'; import { syntaxHighlight } from '../utils/syntaxHighlight'; import './JsonViewer.css'; export type FontFamily = 'jetbrains' | 'fira'; interface JsonViewerProps { value: string; title?: string; placeholder?: string; fontFamily?: FontFamily; } const FONT_FAMILIES = { jetbrains: "'JetBrains Mono', monospace", fira: "'Fira Mono', monospace" }; export function JsonViewer({ value, title = 'Форматированный JSON', placeholder = 'Форматированный результат появится здесь...', fontFamily = 'jetbrains' }: JsonViewerProps) { const [copied, setCopied] = useState(false); const highlightedValue = useMemo(() => { return value ? syntaxHighlight(value) : ''; }, [value]); const handleCopy = async () => { if (!value) return; try { await navigator.clipboard.writeText(value); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error('Ошибка копирования:', err); } }; return (

{title}

{value && ( )}
{value ? (
      ) : (
        
          {placeholder}
        
)} {copied &&
Скопировано!
}
); }