import { useEffect, useRef, useState } from "react"; import { Paperclip } from "lucide-react"; import type { RecordingMode } from "@/hooks/use-recording-mode"; import { AudioLevelBars } from "@/components/audio/audio-level-bars"; import { useAudioSource } from "@/components/audio/use-audio-source"; import { AttachmentStrip } from "@/features/compose/attachment-strip"; import type { PendingAttachment } from "@/features/compose/attachment-strip"; import { cn } from "@/lib/utils"; import { Button } from "@/components/ui/button"; interface RecordingOverlayProps { step: "recording" | "reviewing"; mediaStream: MediaStream | null; recordingMode: RecordingMode; reviewBlob: Blob | null; error: string | null; onClose: () => void; attachments: PendingAttachment[]; onRemoveAttachment: (id: string) => void; onAddFiles: () => void; isDragging: boolean; dropZoneProps: { onDragOver: (e: React.DragEvent) => void; onDragEnter: (e: React.DragEvent) => void; onDragLeave: (e: React.DragEvent) => void; onDrop: (e: React.DragEvent) => void; }; /** Mirror the video horizontally. Defaults to true (selfie-view for webcam). */ mirror?: boolean; /** How video fills its container. Defaults to "cover". Use "contain" for screen recordings. */ objectFit?: "cover" | "contain"; } function RecordingTimer() { const [elapsed, setElapsed] = useState(0); useEffect(() => { const interval = setInterval(() => { setElapsed((prev) => prev + 1); }, 1000); return () => clearInterval(interval); }, []); const minutes = Math.floor(elapsed / 60); const seconds = elapsed % 60; const display = `${minutes}:${seconds.toString().padStart(2, "0")}`; return (