import { SecondaryPageLink, useSecondaryPage } from '@/PageManager' import ImageWithLightbox from '@/components/ImageWithLightbox' import HighlightButton from '@/components/HighlightButton' import PostEditor from '@/components/PostEditor' import { getLongFormArticleMetadataFromEvent } from '@/lib/event-metadata' import { toNote, toNoteList, toProfile } from '@/lib/link' import { ExternalLink } from 'lucide-react' import { Event, kinds } from 'nostr-tools' import { useMemo, useRef, useState } from 'react' import Markdown from 'react-markdown' import remarkGfm from 'remark-gfm' import NostrNode from './NostrNode' import { remarkNostr } from './remarkNostr' import { Components } from './types' export default function LongFormArticle({ event, className }: { event: Event className?: string }) { const { push } = useSecondaryPage() const metadata = useMemo(() => getLongFormArticleMetadataFromEvent(event), [event]) const contentRef = useRef(null) const [showHighlightEditor, setShowHighlightEditor] = useState(false) const [selectedText, setSelectedText] = useState('') const handleHighlight = (text: string) => { setSelectedText(text) setShowHighlightEditor(true) } const components = useMemo( () => ({ nostr: ({ rawText, bech32Id }) => , a: ({ href, children, ...props }) => { if (!href) { return } if (href.startsWith('note1') || href.startsWith('nevent1') || href.startsWith('naddr1')) { return ( {children} ) } if (href.startsWith('npub1') || href.startsWith('nprofile1')) { return ( {children} ) } return ( {children} ) }, p: (props) =>

, div: (props) =>

, code: (props) => , img: (props) => ( ) }) as Components, [event.pubkey] ) return ( <>

{metadata.title}

{metadata.summary && (

{metadata.summary}

)} {metadata.image && ( )} { if (url.startsWith('nostr:')) { return url.slice(6) // Remove 'nostr:' prefix for rendering } return url }} components={components} > {event.content} {metadata.tags.length > 0 && (
{metadata.tags.map((tag) => (
{ e.stopPropagation() push(toNoteList({ hashtag: tag, kinds: [kinds.LongFormArticle] })) }} > #{tag}
))}
)}
) }