import type * as React from 'react' import { Button } from '@/components/ui/button' import { Codicon } from '@/components/ui/codicon' import type { SessionInfo } from '@/hermes' import { sessionTitle } from '@/lib/chat-runtime' import { triggerHaptic } from '@/lib/haptics' import { cn } from '@/lib/utils' import { SessionActionsMenu } from './session-actions-menu' const SECOND = 1000 const MINUTE = 60 * SECOND const HOUR = 60 * MINUTE const DAY = 24 * HOUR interface SidebarSessionRowProps extends React.ComponentProps<'div'> { session: SessionInfo isPinned: boolean isSelected: boolean isWorking: boolean onDelete: () => void onPin: () => void onResume: () => void reorderable?: boolean dragging?: boolean dragHandleProps?: React.HTMLAttributes } function formatAge(seconds: number): string { const at = seconds * 1000 const delta = Math.max(0, Date.now() - at) if (delta < MINUTE) { return 'now' } if (delta < HOUR) { return `${Math.floor(delta / MINUTE)}m` } if (delta < DAY) { return `${Math.floor(delta / HOUR)}h` } return `${Math.floor(delta / DAY)}d` } export function SidebarSessionRow({ session, isPinned, isSelected, isWorking, onDelete, onPin, onResume, reorderable = false, dragging = false, dragHandleProps, className, style, ref, ...rest }: SidebarSessionRowProps) { const title = sessionTitle(session) const age = formatAge(session.last_active || session.started_at) const handleLabel = `Reorder ${title}` return (
{!isWorking && ( {age} )}
) } function SidebarRowDot({ isWorking, className }: { isWorking: boolean; className?: string }) { return ( ) }