import React, { useState } from 'react'; import { formatTime } from '../utils/subtitleUtils'; import { useTranscriptionStore } from '../stores/transcriptionStore'; import { InformationCircleIcon } from '@heroicons/react/24/outline'; const FullTranscription: React.FC = () => { const [showInfoTooltip, setShowInfoTooltip] = useState(false); const [showExpandedChunks, setShowExpandedChunks] = useState(false); const { transcription, selectedLanguage } = useTranscriptionStore(); const renderInfoTooltip = () => { if (!transcription) return null; const chunks = transcription.chunks || []; const maxVisibleChunks = 3; const hasMoreChunks = chunks.length > maxVisibleChunks; const visibleChunks = showExpandedChunks ? chunks : chunks.slice(0, maxVisibleChunks); // Calculate better positioning to avoid edge cuts const tooltipStyle: React.CSSProperties = { position: 'fixed', left: '50%', top: '50%', transform: 'translate(-50%, -50%)', maxHeight: '80vh', // Prevent tooltip from being taller than viewport overflowY: 'auto' as const }; return (
Transcription Details
Model: {transcription.model}
Language: {selectedLanguage || 'auto-detect'}
Segments: {transcription.num_segments}
Duration: {formatTime(transcription.total_duration)}
Device: {transcription.device}
{/* Long-form specific info */} {transcription.num_chunks && ( <>
Long-form Processing
Chunks: {transcription.num_chunks}
)}
{/* Improved Chunk details */} {chunks.length > 0 && (
Chunk Details
{hasMoreChunks && ( )}
{visibleChunks.map((chunk, index) => (
Chunk #{index + 1}
{chunk.duration.toFixed(1)}s
{formatTime(chunk.start_time)} → {formatTime(chunk.end_time)}
))} {hasMoreChunks && !showExpandedChunks && (
)}
)}
); }; if (!transcription) return null; return (

Full Transcription

{/* Info tooltip */}
setShowInfoTooltip(true)} onMouseLeave={() => setShowInfoTooltip(false)} /> {showInfoTooltip && renderInfoTooltip()}
{transcription.transcription}
); }; export default FullTranscription;