import { cn } from '@/lib/utils'; import { PlaybackPageIndicator } from '@/features/particles/playback-page-indicator'; import { VideoAudioToggle } from '@/components/video-audio-toggle'; import { KeyHint } from '@/components/key-hint'; import { useComposeIntentStore } from '@/stores/compose-intent-store'; import type { HumanPresence } from '@/hooks/use-presence-positions'; export function BottomBar({ visible, total, current, progress, onGoTo, presenceBySegment, onlineHumanIds, exitRemainingMs, onOpenKeybindings, onOpenHuddle, onExit, }: { visible: boolean; total: number; current: number; progress: number; onGoTo: (index: number) => void; presenceBySegment: Map; onlineHumanIds: Set; exitRemainingMs: number | null; onOpenKeybindings: () => void; onOpenHuddle: () => void; onExit: () => void; }) { return (
{/* Presence avatars — above the blurred background */} {/* Blurred background container — tracks + controls */}
{exitRemainingMs !== null && (
Closing in {Math.ceil(exitRemainingMs / 1000)}s
)}
); } export function StreamViewControls({ showEscape, onOpenKeybindings, onOpenHuddle, onExit, }: { showEscape?: boolean; onOpenKeybindings: () => void; onOpenHuddle: () => void; onExit: () => void; }) { const requestIntent = useComposeIntentStore((s) => s.request); return (
{showEscape && ( back )} requestIntent('record')} title="Reply with a recording (or hold `)" > to reply requestIntent('text')} title="Reply with text (or press T)" > text requestIntent('task')} title="Add a task (or press D)" > task huddle
); }