import { Button } from '@/components/ui/button' import { cn } from '@/lib/utils' import { cleanUrl } from '@/lib/url' import { extractExternalUrlNostrForExpandable, getBrowserAppOrigin, parseSameOriginAppNostrUrl } from '@/lib/nostr-from-http-url' import { ChevronDown } from 'lucide-react' import type { Event } from 'nostr-tools' import { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { EmbeddedMention } from './EmbeddedMention' import { EmbeddedNormalUrl } from './EmbeddedNormalUrl' import { EmbeddedNote } from './EmbeddedNote' import WebPreview from '@/components/WebPreview' import YoutubeEmbeddedPlayer from '@/components/YoutubeEmbeddedPlayer' import ZapStreamLiveEventEmbed from '@/components/ZapStreamLiveEventEmbed' import { isEmbeddableYoutubeUrl } from '@/lib/youtube-url' import { isZapStreamWatchUrl } from '@/lib/zap-stream-url' type RenderMode = 'note-content' | 'article' export function HttpNostrAwareUrl({ url, renderMode, containingEvent, className }: { url: string renderMode: RenderMode containingEvent?: Event className?: string }) { const { t } = useTranslation() const appOrigin = useMemo(() => getBrowserAppOrigin(), []) const sameOriginTarget = useMemo( () => parseSameOriginAppNostrUrl(url, appOrigin), [url, appOrigin] ) const expandableTarget = useMemo( () => (!sameOriginTarget ? extractExternalUrlNostrForExpandable(url, appOrigin) : null), [url, appOrigin, sameOriginTarget] ) const cleaned = cleanUrl(url) || url if (isZapStreamWatchUrl(cleaned)) { return ( ) } if (isEmbeddableYoutubeUrl(cleaned)) { return ( ) } if (sameOriginTarget) { if (sameOriginTarget.kind === 'event') { return ( ) } return ( ) } if (expandableTarget) { return ( ) } if (renderMode === 'article') { return } return } function ExpandableExternalNostrLink({ url, cleanedUrl, target, containingEvent, className, expandLabel }: { url: string cleanedUrl: string target: { kind: 'event' | 'profile'; id: string } containingEvent?: Event className?: string expandLabel: string }) { const [open, setOpen] = useState(false) return ( {cleanedUrl} {open ? ( {target.kind === 'event' ? ( ) : ( )} ) : null} ) }