import React, { useState } from 'react'; import './YouTubeUrlInput.css'; interface YouTubeUrlInputProps { onUrlSubmit: (url: string, videoId: string) => void; isProcessing?: boolean; } const YouTubeUrlInput: React.FC = ({ onUrlSubmit, isProcessing = false }) => { const [url, setUrl] = useState(''); const [error, setError] = useState(''); const [videoPreview, setVideoPreview] = useState(null); const extractVideoId = (url: string): string | null => { // Support various YouTube URL formats const patterns = [ /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/, /^([a-zA-Z0-9_-]{11})$/, // Direct video ID ]; for (const pattern of patterns) { const match = url.match(pattern); if (match && match[1]) { return match[1]; } } return null; }; const handleUrlChange = (value: string) => { setUrl(value); setError(''); if (value.trim()) { const videoId = extractVideoId(value.trim()); if (videoId) { setVideoPreview(videoId); setError(''); } else { setVideoPreview(null); setError(''); } } else { setVideoPreview(null); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!url.trim()) { setError('Por favor, insira uma URL do YouTube'); return; } const videoId = extractVideoId(url.trim()); if (!videoId) { setError('URL inválida. Use um link do YouTube como youtube.com/watch?v=... ou youtu.be/...'); return; } onUrlSubmit(url.trim(), videoId); }; const exampleUrls = [ 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'https://youtu.be/dQw4w9WgXcQ', 'dQw4w9WgXcQ', ]; return (

📺 YouTube → Piano Tutorial

Converta qualquer música do YouTube em um tutorial de piano interativo

handleUrlChange(e.target.value)} placeholder="Cole a URL do YouTube aqui..." className={`url-input ${error ? 'error' : ''} ${videoPreview ? 'valid' : ''}`} disabled={isProcessing} />
{error &&
{error}
}
{videoPreview && !error && (

Pré-visualização:

Video preview

ID do vídeo: {videoPreview}

Clique em "Converter" para gerar o tutorial de piano
)}

Formatos suportados:

{exampleUrls.map((example, index) => ( ))}

O que você receberá:

  • 🎵 Notas identificadas automaticamente com IA
  • 🎨 Cores por nível de dificuldade (Verde = Fácil, Amarelo = Médio, Vermelho = Difícil)
  • 🎹 Player MIDI interativo com controle de velocidade
  • 📊 Análise de dificuldade da música
  • 🔄 Loop de estudo para seções específicas
); }; export default YouTubeUrlInput;