import { useState } from 'react'; import { Link } from 'react-router-dom'; import { Helmet } from 'react-helmet-async'; import { useSpeechSynthesis } from '@/hooks/useSpeechSynthesis'; import { TextInput } from '@/components/tts/TextInput'; import { VoiceSelector } from '@/components/tts/VoiceSelector'; import { SpeechControls } from '@/components/tts/SpeechControls'; import { PlaybackControls } from '@/components/tts/PlaybackControls'; import { StatusIndicator } from '@/components/tts/StatusIndicator'; import { ThemeToggle } from '@/components/ThemeToggle'; import { AudioExport } from '@/components/tts/AudioExport'; import { ReadingMode } from '@/components/tts/ReadingMode'; import { Volume2, Sparkles, Zap, Shield, RotateCcw, Play, BookOpen, Wand2, ArrowRight } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { toast } from 'sonner'; import { processTextForSpeech } from '@/utils/textProcessor'; const Index = () => { const { voices, languages, selectedVoice, selectedLanguage, settings, isSupported, isSpeaking, isPaused, currentPosition, currentWordStart, currentWordEnd, setSelectedVoice, setSelectedLanguage, setSettings, speak, pause, resume, stop, storedText, setStoredText, storedPosition, } = useSpeechSynthesis(); const [readingModeOpen, setReadingModeOpen] = useState(false); const text = storedText; const setText = setStoredText; const handleSpeak = () => { if (text.trim()) { const processedText = processTextForSpeech(text); speak(processedText); } }; const handleResumeFromPosition = () => { if (text.trim() && storedPosition > 0) { const processedText = processTextForSpeech(text); speak(processedText, storedPosition); toast.success('Resuming from where you left off'); } }; const canResume = storedPosition > 0 && storedPosition < text.length && !isSpeaking; return (
LabFlick - Free Online Text to Speech Converter | 100+ Voices, No Sign-Up {/* Open Graph - Facebook & LinkedIn */} {/* Twitter Card */} {/* Apple & Microsoft */} {/* JSON-LD Structured Data - WebApplication */} {/* Organization Schema */} {/* Breadcrumb Schema */}
LabFlick
Text to Speech
{/* Hero Section */}

Convert Text to{' '} Natural Speech

Free, unlimited text-to-speech powered by your browser. No API keys, no limits, works offline.

{/* Features Pills */} {/* Resume Banner */} {canResume && ( )} {/* Main Content Grid */}
{/* Text Input Section */}
{/* Playback Controls */}
0} onPlay={handleSpeak} onPause={pause} onResume={resume} onStop={stop} />
{/* Featured Tools Section - Compact Desktop Version (now visible on all sizes) */}

Explore All Our Tools

Discover our complete suite of productivity tools and features designed to help you work smarter.

Visit our tools hub for more innovative solutions and take your productivity to the next level.

{/* Settings Sidebar - Now visible on all screen sizes */}
{/* Footer */} {/* Reading Mode Overlay */} setReadingModeOpen(false)} />
); }; export default Index;