import { useMemo } from 'react' import { cleanUrl } from '@/lib/url' import { getImetaInfosFromEvent } from '@/lib/event' import { Event } from 'nostr-tools' import Markdown from 'react-markdown' import remarkGfm from 'remark-gfm' import { remarkNostr } from '../Note/LongFormArticle/remarkNostr' import NostrNode from '../Note/LongFormArticle/NostrNode' import { cn } from '@/lib/utils' import ImageWithLightbox from '../ImageWithLightbox' interface SimpleContentProps { event?: Event content?: string className?: string } export default function SimpleContent({ event, content, className }: SimpleContentProps) { const imetaInfos = useMemo(() => event ? getImetaInfosFromEvent(event) : [], [event]) const processedContent = useMemo(() => { const rawContent = content || event?.content || '' // Clean URLs const cleaned = rawContent.replace( /(https?:\/\/[^\s]+)/g, (url) => { try { return cleanUrl(url) } catch { return url } } ) return cleaned }, [content, event?.content]) // Process content to handle images and markdown const { markdownContent, mediaElements } = useMemo(() => { const lines = processedContent.split('\n') const elements: JSX.Element[] = [] const markdownLines: string[] = [] let key = 0 lines.forEach((line) => { // Check if line contains an image URL const imageMatch = line.match(/(https?:\/\/[^\s]+\.(jpg|jpeg|png|gif|webp|heic|svg))/i) if (imageMatch) { const imageUrl = imageMatch[1] const imageInfo = imetaInfos.find((info) => info.url === imageUrl) const imageData = imageInfo || { url: imageUrl, pubkey: event?.pubkey } elements.push(
,
pre: (props: any) => ,
blockquote: (props: any) => ,
ul: (props: any) =>