eca0bb27a0
- NotesSection: ekle/düzenle/sil (onaylı), yazar ve tarih, kapalı dönemde salt okunur - Markdown gösterimi (react-markdown + remark-gfm): ham HTML yok, güvenli bağlantılar - Çakışma (409) mesajı formda; Plan sayfasına bağlandı - Dağıtım çubuğu boş dönemde "tamamı dağıtıldı" demiyor - Faz 4 tamamlandı Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
842 B
TypeScript
23 lines
842 B
TypeScript
import ReactMarkdown, { type Components } from 'react-markdown'
|
||
import remarkGfm from 'remark-gfm'
|
||
import { cn } from '@/lib/utils'
|
||
|
||
/**
|
||
* Not metnini Markdown olarak gösterir (GFM: tablo, ~~üstü çizili~~, `- [ ]` yapılacaklar).
|
||
* Güvenlik: ham HTML işlenmez (react-markdown varsayılanı); `javascript:` gibi
|
||
* tehlikeli bağlantılar kütüphane tarafından temizlenir. Bağlantılar yeni sekmede açılır.
|
||
*/
|
||
const components: Components = {
|
||
a: ({ node: _node, ...props }) => <a {...props} target="_blank" rel="noopener noreferrer" />,
|
||
}
|
||
|
||
export function Markdown({ children, className }: { children: string; className?: string }) {
|
||
return (
|
||
<div className={cn('markdown', className)}>
|
||
<ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>
|
||
{children}
|
||
</ReactMarkdown>
|
||
</div>
|
||
)
|
||
}
|