'use client' import { useLayoutEffect, useRef } from 'react' import { useNoteEditorContext } from './note-editor-context' import { TitleSuggestions } from '@/components/title-suggestions' import { Loader2, Sparkles } from 'lucide-react' import { useLanguage } from '@/lib/i18n' import { useAiConsent } from '@/components/legal/ai-consent-provider' import { cn } from '@/lib/utils' import { toast } from 'sonner' import { resolveTitleDirection, resolveTitleLang } from '@/lib/clip/rtl-content' import { InlinePaywall } from '@/components/settings/inline-paywall' function autosizeTitle(el: HTMLTextAreaElement | null) { if (!el) return el.style.height = 'auto' el.style.height = `${el.scrollHeight}px` } export function NoteTitleBlock() { const { note, state, actions, readOnly, fullPage } = useNoteEditorContext() const { t } = useLanguage() const { requestAiConsent } = useAiConsent() const titleRef = useRef(null) const titleDir = resolveTitleDirection(state.title || '', note.sourceUrl) const titleLang = resolveTitleLang(state.title || '', note.sourceUrl) const titleIsRtl = titleDir === 'rtl' useLayoutEffect(() => { autosizeTitle(titleRef.current) }, [state.title, fullPage]) useLayoutEffect(() => { const el = titleRef.current if (!el) return const onResize = () => autosizeTitle(el) window.addEventListener('resize', onResize) const parent = el.parentElement const ro = typeof ResizeObserver !== 'undefined' && parent ? new ResizeObserver(onResize) : null if (ro && parent) ro.observe(parent) return () => { window.removeEventListener('resize', onResize) ro?.disconnect() } }, [fullPage]) if (fullPage) { // Adaptive font size: short = big editorial, long = smaller but still premium const titleLen = (state.title || '').length const titleSizeClass = titleLen === 0 ? 'text-3xl sm:text-5xl md:text-6xl' : titleLen < 40 ? 'text-3xl sm:text-5xl md:text-6xl' : titleLen < 70 ? 'text-2xl sm:text-4xl md:text-5xl' : titleLen < 100 ? 'text-xl sm:text-3xl md:text-4xl' : 'text-xl sm:text-2xl md:text-3xl' return (
{state.quotaExceededFeature === 'auto_title' && ( actions.setQuotaExceededFeature(null)} /> )} {/* Title — auto-resizing textarea, adaptive size */}