Files
altbin.dev/components/paste/CodeViewer.tsx
T

43 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-08-20 15:16:00 +02:00
'use client';
import Prism from 'prismjs';
import 'prismjs/components/prism-bash';
import 'prismjs/components/prism-javascript';
import 'prismjs/components/prism-json';
import 'prismjs/components/prism-python';
import 'prismjs/components/prism-typescript';
import 'prismjs/plugins/line-numbers/prism-line-numbers.css';
import 'prismjs/plugins/line-numbers/prism-line-numbers.js';
import 'prismjs/themes/prism-tomorrow.css';
import { useEffect, useRef } from 'react';
2025-08-20 16:41:27 +02:00
import { Paste } from '@/types/paste';
2025-08-20 15:16:00 +02:00
export default function CodeViewer({
paste,
language,
}: {
2025-08-20 16:41:27 +02:00
paste: Paste;
2025-08-20 15:16:00 +02:00
language: string;
}) {
const codeRef = useRef<HTMLPreElement | null>(null);
useEffect(() => {
if (paste?.content) {
Prism.highlightAll();
}
}, [paste, language]);
return (
<div className="flex-1 h-full font-mono text-sm">
2025-08-20 16:41:27 +02:00
<pre
ref={codeRef}
className="h-full overflow-auto pt-6 pb-6 px-6 line-numbers"
>
2025-08-20 15:16:00 +02:00
<code className={`${language} whitespace-pre-wrap break-words`}>
{paste.content}
</code>
</pre>
</div>
);
2025-08-20 16:41:27 +02:00
}