diff --git a/app/src/components/History/HistoryTable.tsx b/app/src/components/History/HistoryTable.tsx
index 51a1a163..05f20341 100644
--- a/app/src/components/History/HistoryTable.tsx
+++ b/app/src/components/History/HistoryTable.tsx
@@ -10,6 +10,7 @@ import {
TableHeader,
TableRow,
} from '@/components/ui/table';
+import { cn } from '@/lib/utils/cn';
import { apiClient } from '@/lib/api/client';
import { useDeleteGeneration, useHistory } from '@/lib/hooks/useHistory';
import { formatDate, formatDuration } from '@/lib/utils/format';
@@ -60,8 +61,6 @@ export function HistoryTable() {
return (
-
Generation History
-
{history.length === 0 ? (
No generation history yet. Generate your first audio to see it here.
@@ -81,8 +80,13 @@ export function HistoryTable() {
- {history.map((gen) => (
-
+ {history.map((gen) => {
+ const isCurrentlyPlaying = currentAudioId === gen.id && isPlaying;
+ return (
+
{gen.text}
{gen.profile_name}
@@ -123,7 +127,8 @@ export function HistoryTable() {
- ))}
+ );
+ })}
diff --git a/app/src/components/VoiceProfiles/ProfileCard.tsx b/app/src/components/VoiceProfiles/ProfileCard.tsx
index f0aca1f6..0984ea1f 100644
--- a/app/src/components/VoiceProfiles/ProfileCard.tsx
+++ b/app/src/components/VoiceProfiles/ProfileCard.tsx
@@ -1,7 +1,16 @@
import { Edit, Eye, Mic, Trash2 } from 'lucide-react';
import { useState } from 'react';
import { Badge } from '@/components/ui/badge';
+import { Button } from '@/components/ui/button';
import { CircleButton } from '@/components/ui/circle-button';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from '@/components/ui/dialog';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { cn } from '@/lib/utils/cn';
import type { VoiceProfileResponse } from '@/lib/api/types';
@@ -16,6 +25,7 @@ interface ProfileCardProps {
export function ProfileCard({ profile }: ProfileCardProps) {
const [detailOpen, setDetailOpen] = useState(false);
+ const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
const deleteProfile = useDeleteProfile();
const setEditingProfileId = useUIStore((state) => state.setEditingProfileId);
const setProfileDialogOpen = useUIStore((state) => state.setProfileDialogOpen);
@@ -33,12 +43,14 @@ export function ProfileCard({ profile }: ProfileCardProps) {
setProfileDialogOpen(true);
};
- const handleDelete = () => {
- if (
- confirm(`Are you sure you want to delete "${profile.name}"? This action cannot be undone.`)
- ) {
- deleteProfile.mutate(profile.id);
- }
+ const handleDeleteClick = (e: React.MouseEvent) => {
+ e.stopPropagation();
+ setDeleteDialogOpen(true);
+ };
+
+ const handleDeleteConfirm = () => {
+ deleteProfile.mutate(profile.id);
+ setDeleteDialogOpen(false);
};
return (
@@ -67,12 +79,15 @@ export function ProfileCard({ profile }: ProfileCardProps) {
/>
{
+ e.stopPropagation();
+ handleEdit();
+ }}
aria-label="Edit profile"
/>
@@ -93,6 +108,25 @@ export function ProfileCard({ profile }: ProfileCardProps) {
+
+
>
);
}
diff --git a/app/src/components/VoiceProfiles/ProfileList.tsx b/app/src/components/VoiceProfiles/ProfileList.tsx
index 0e03f593..811bf520 100644
--- a/app/src/components/VoiceProfiles/ProfileList.tsx
+++ b/app/src/components/VoiceProfiles/ProfileList.tsx
@@ -31,7 +31,7 @@ export function ProfileList() {
return (
-
Voice Profiles
+
Voicebox