);
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() {
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 */}
+
+
+
+ {/* Far right - Ellipsis actions */}
+
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
+
+
+
+
+
+ );
+ })}
diff --git a/app/src/components/Sidebar.tsx b/app/src/components/Sidebar.tsx
index fd7b8f91..9b690c24 100644
--- a/app/src/components/Sidebar.tsx
+++ b/app/src/components/Sidebar.tsx
@@ -37,8 +37,8 @@ export function Sidebar({ activeTab, onTabChange }: SidebarProps) {
onClick={() => onTabChange(tab.id)}
className={cn(
'w-12 h-12 rounded-full flex items-center justify-center transition-all duration-200',
- 'hover:bg-accent hover:text-accent-foreground',
- isActive ? 'bg-accent text-accent-foreground shadow-lg' : 'text-muted-foreground',
+ 'hover:bg-muted/50',
+ isActive ? 'bg-muted/50 text-foreground shadow-lg' : 'text-muted-foreground',
)}
title={tab.label}
aria-label={tab.label}
diff --git a/app/src/index.css b/app/src/index.css
index 6e65fb44..06381711 100644
--- a/app/src/index.css
+++ b/app/src/index.css
@@ -126,3 +126,32 @@
letter-spacing: 0.1em;
}
}
+
+@keyframes fadeInScale {
+ from {
+ opacity: 0;
+ transform: scale(0.8);
+ }
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+
+.animate-fade-in-scale {
+ animation: fadeInScale 0.5s ease-out forwards;
+}
+
+.animate-fade-in-delayed {
+ animation: fadeIn 0.5s ease-out 0.15s forwards;
+ opacity: 0;
+}
diff --git a/app/src/main.tsx b/app/src/main.tsx
index 7bc42d67..e4a5e482 100644
--- a/app/src/main.tsx
+++ b/app/src/main.tsx
@@ -1,5 +1,5 @@
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
-import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
+// import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
@@ -20,7 +20,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
-
+ {/* */}
,
);
diff --git a/tauri/src-tauri/gen/Assets.car b/tauri/src-tauri/gen/Assets.car
index cf90b0d2..e553bcf6 100644
Binary files a/tauri/src-tauri/gen/Assets.car and b/tauri/src-tauri/gen/Assets.car differ
diff --git a/tauri/src-tauri/tauri.conf.json b/tauri/src-tauri/tauri.conf.json
index f43ef98e..7a008bb0 100644
--- a/tauri/src-tauri/tauri.conf.json
+++ b/tauri/src-tauri/tauri.conf.json
@@ -57,9 +57,9 @@
"open": true
},
"updater": {
- "pubkey": "REPLACE_WITH_YOUR_PUBLIC_KEY",
+ "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEJDQzc3OTEwRkQyNkNDNUQKUldSZHpDYjlFSG5IdlBpL2tGMXo4N1IzWlJLdUpTNFQyZ1FGZTEzQmVTZzY5elZTYVpMNnFwTUoK",
"endpoints": [
- "https://github.com/YOUR_USERNAME/voicebox/releases/latest/download/latest.json"
+ "https://github.com/jamiepine/voicebox/releases/latest/download/latest.json"
]
}
}