'use client'; import { useState, useMemo, useEffect, useCallback } from 'react'; import { useTranslations } from 'next-intl'; import { useSearchParams } from 'next/navigation'; import { useAuth } from '@/components/auth-provider'; import { toast } from 'sonner'; export function EmbedBuilder() { const t = useTranslations('embedBuilder'); const { session } = useAuth(); const searchParams = useSearchParams(); const [identifier, setIdentifier] = useState(searchParams.get('handle') ?? session?.handle ?? ''); const [debouncedIdentifier, setDebouncedIdentifier] = useState(identifier); useEffect(() => { const timer = setTimeout(() => { setDebouncedIdentifier(identifier); }, 500); return () => clearTimeout(timer); }, [identifier]); const embedCode = useMemo(() => { if (!debouncedIdentifier.trim()) return ''; const isDid = debouncedIdentifier.startsWith('did:'); const dataAttr = isDid ? `data-did="${debouncedIdentifier}"` : `data-handle="${debouncedIdentifier}"`; return ``; }, [debouncedIdentifier]); const [iframeHeight, setIframeHeight] = useState(300); const handleMessage = useCallback((e: MessageEvent) => { if (e.data?.type === 'sifa-embed-resize' && typeof e.data.height === 'number') { setIframeHeight(e.data.height); } }, []); useEffect(() => { window.addEventListener('message', handleMessage); return () => window.removeEventListener('message', handleMessage); }, [handleMessage]); function handleCopy() { void navigator.clipboard.writeText(embedCode).then(() => { toast.success(t('copied')); }); } return (
{/* Left column: config form */}
setIdentifier(e.target.value)} placeholder="alice.bsky.social" className="mt-1 block w-full rounded-md border border-border bg-background px-3 py-2 text-sm" />

{t('themeNote')}

{debouncedIdentifier.trim() && (
              {embedCode}
            
)}
{/* Right column: preview */}

{t('previewLabel')}

{debouncedIdentifier.trim() ? (