diff --git a/app/src/App.tsx b/app/src/App.tsx index 7fc4411e..0fda4e50 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -11,6 +11,7 @@ import { Sidebar } from '@/components/Sidebar'; import { AudioPlayer } from '@/components/AudioPlayer/AudioPlayer'; import { UpdateNotification } from '@/components/UpdateNotification'; import { isTauri, startServer, setupWindowCloseHandler } from '@/lib/tauri'; +import voiceboxLogo from '@/assets/voicebox-logo.png'; // Track if server is starting to prevent duplicate starts let serverStarting = false; @@ -77,9 +78,17 @@ function App() { if (isTauri() && !serverReady) { return (
-
-
-

Starting server...

+
+
+ Voicebox +
+

+ Starting voicebox... +

); diff --git a/app/src/components/Generation/GenerationForm.tsx b/app/src/components/Generation/GenerationForm.tsx index ffff041b..80a2aeab 100644 --- a/app/src/components/Generation/GenerationForm.tsx +++ b/app/src/components/Generation/GenerationForm.tsx @@ -2,7 +2,6 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { Loader2, Mic } from 'lucide-react'; import { useForm } from 'react-hook-form'; import * as z from 'zod'; -import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { @@ -104,7 +103,7 @@ export function GenerationForm() {
{selectedProfile.name} - {selectedProfile.language} + {selectedProfile.language}
) : (
diff --git a/app/src/components/History/HistoryTable.tsx b/app/src/components/History/HistoryTable.tsx index 681660c3..a68895b5 100644 --- a/app/src/components/History/HistoryTable.tsx +++ b/app/src/components/History/HistoryTable.tsx @@ -1,6 +1,5 @@ -import { Download, MoreHorizontal, Play, Trash2 } from 'lucide-react'; +import { AudioWaveform, Download, MoreHorizontal, Play, Trash2 } from 'lucide-react'; import { useState } from 'react'; -import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { DropdownMenu, @@ -8,20 +7,17 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '@/components/ui/table'; +import { Textarea } from '@/components/ui/textarea'; import { apiClient } from '@/lib/api/client'; import { useDeleteGeneration, useHistory } from '@/lib/hooks/useHistory'; import { cn } from '@/lib/utils/cn'; import { formatDate, formatDuration } from '@/lib/utils/format'; import { usePlayerStore } from '@/stores/playerStore'; +// OLD TABLE-BASED COMPONENT - REMOVED (can be found in git history) +// This is the new alternate history view with fixed height rows + +// NEW ALTERNATE HISTORY VIEW - FIXED HEIGHT ROWS export function HistoryTable() { const [page, setPage] = useState(0); const limit = 20; @@ -77,80 +73,99 @@ export function HistoryTable() { <>
- - - - Input - Voice - Lang - Length - Date - - - - - {history.map((gen) => { - const isCurrentlyPlaying = currentAudioId === gen.id && isPlaying; - return ( - handlePlay(gen.id, gen.text)} - > - {gen.text} - {gen.profile_name} - - - {gen.language} - - - {formatDuration(gen.duration)} - - {formatDate(gen.created_at)} - - -
e.stopPropagation()}> - - - - - - handlePlay(gen.id, gen.text)}> - - Play - - handleDownload(gen.id, gen.text)}> - - Download - - deleteGeneration.mutate(gen.id)} - disabled={deleteGeneration.isPending} - className="text-destructive focus:text-destructive" - > - - Delete - - - -
-
-
- ); - })} -
-
+ {history.map((gen) => { + const isCurrentlyPlaying = currentAudioId === gen.id && isPlaying; + return ( +
handlePlay(gen.id, gen.text)} + onKeyDown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + handlePlay(gen.id, gen.text); + } + }} + tabIndex={0} + role="button" + aria-label="Play audio" + > + {/* Waveform icon */} +
+ +
+ + {/* Left side - Meta information */} +
+
+ {gen.profile_name} +
+
+ + {gen.language} + + + {formatDuration(gen.duration)} + +
+
+ {formatDate(gen.created_at)} +
+
+ + {/* Right side - Transcript textarea */} +
+