agent-relay-server 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/openapi.json +1 -1
- package/package.json +2 -2
- package/public/assets/{activity-ClpDglG8.js → activity-DAz3DcDA.js} +2 -2
- package/public/assets/{activity-ClpDglG8.js.map → activity-DAz3DcDA.js.map} +1 -1
- package/public/assets/{agents-CHmEJvqV.js → agents-BJ7qRWxt.js} +2 -2
- package/public/assets/{agents-CHmEJvqV.js.map → agents-BJ7qRWxt.js.map} +1 -1
- package/public/assets/{analytics-2kTjXIj1.js → analytics-MNCS2qnT.js} +2 -2
- package/public/assets/{analytics-2kTjXIj1.js.map → analytics-MNCS2qnT.js.map} +1 -1
- package/public/assets/{automation-B5U_g-1P.js → automation-COp2Kb3h.js} +2 -2
- package/public/assets/{automation-B5U_g-1P.js.map → automation-COp2Kb3h.js.map} +1 -1
- package/public/assets/chat-D_O8VqMR.js +2 -0
- package/public/assets/chat-D_O8VqMR.js.map +1 -0
- package/public/assets/display-ConJ9cJB.js.map +1 -1
- package/public/assets/{formatted-body-impl-tmf8IBfr.js → formatted-body-impl-BbMHqkCy.js} +2 -2
- package/public/assets/{formatted-body-impl-tmf8IBfr.js.map → formatted-body-impl-BbMHqkCy.js.map} +1 -1
- package/public/assets/{index-B1QUkb_O.js → index-DgJOEApM.js} +5 -5
- package/public/assets/{index-B1QUkb_O.js.map → index-DgJOEApM.js.map} +1 -1
- package/public/assets/{index-Bins8N_5.css → index-Dop-uXiy.css} +1 -1
- package/public/assets/{maintenance-Tn23oWBF.js → maintenance-BHv90kXZ.js} +2 -2
- package/public/assets/{maintenance-Tn23oWBF.js.map → maintenance-BHv90kXZ.js.map} +1 -1
- package/public/assets/managed-agents-BAlvkxfo.js +2 -0
- package/public/assets/managed-agents-BAlvkxfo.js.map +1 -0
- package/public/assets/{markdown-preview-impl-D4UIjB3I.js → markdown-preview-impl-6k_FWjmd.js} +2 -2
- package/public/assets/{markdown-preview-impl-D4UIjB3I.js.map → markdown-preview-impl-6k_FWjmd.js.map} +1 -1
- package/public/assets/{memory-SVCob0fo.js → memory-DBjqdVpg.js} +2 -2
- package/public/assets/{memory-SVCob0fo.js.map → memory-DBjqdVpg.js.map} +1 -1
- package/public/assets/{messages-CHK24Uxx.js → messages-axoaJY2N.js} +2 -2
- package/public/assets/{messages-CHK24Uxx.js.map → messages-axoaJY2N.js.map} +1 -1
- package/public/assets/{orchestrators-CQcJb6VE.js → orchestrators-DMfHZ44H.js} +2 -2
- package/public/assets/{orchestrators-CQcJb6VE.js.map → orchestrators-DMfHZ44H.js.map} +1 -1
- package/public/assets/{overview-DbyX7k-7.js → overview-DqxYWpUT.js} +2 -2
- package/public/assets/{overview-DbyX7k-7.js.map → overview-DqxYWpUT.js.map} +1 -1
- package/public/assets/{pairs-CaL0_ZfW.js → pairs-D3wnzC1V.js} +2 -2
- package/public/assets/{pairs-CaL0_ZfW.js.map → pairs-D3wnzC1V.js.map} +1 -1
- package/public/assets/{security-BogsfkbT.js → security-KWrb7PKj.js} +2 -2
- package/public/assets/{security-BogsfkbT.js.map → security-KWrb7PKj.js.map} +1 -1
- package/public/assets/{settings-BOsnUh5f.js → settings-PXMEzNAm.js} +2 -2
- package/public/assets/{settings-BOsnUh5f.js.map → settings-PXMEzNAm.js.map} +1 -1
- package/public/assets/{tasks-CCxQovOv.js → tasks-CFYShBCz.js} +2 -2
- package/public/assets/{tasks-CCxQovOv.js.map → tasks-CFYShBCz.js.map} +1 -1
- package/public/assets/{terminal-viewer-impl-BDikdsxs.js → terminal-viewer-impl-BwPYZlWI.js} +2 -2
- package/public/assets/{terminal-viewer-impl-BDikdsxs.js.map → terminal-viewer-impl-BwPYZlWI.js.map} +1 -1
- package/public/assets/{work-queue-fM-tu0iP.js → work-queue-VQ_6QDJc.js} +2 -2
- package/public/assets/{work-queue-fM-tu0iP.js.map → work-queue-VQ_6QDJc.js.map} +1 -1
- package/public/index.html +2 -2
- package/runner/src/adapter.ts +5 -1
- package/src/config-store.ts +1 -1
- package/src/db/messages.ts +36 -2
- package/src/db/migrations.ts +5 -0
- package/src/lifecycle-manager.ts +74 -6
- package/src/maintenance.ts +20 -27
- package/src/reviewer-pipeline.ts +197 -0
- package/src/routes/commands.ts +28 -0
- package/src/services/managed-running.ts +1 -0
- package/src/services/send-message.ts +4 -0
- package/src/workspace-pr-completion.ts +121 -0
- package/public/assets/chat-zPXWB-03.js +0 -2
- package/public/assets/chat-zPXWB-03.js.map +0 -1
- package/public/assets/managed-agents-CasacvJX.js +0 -2
- package/public/assets/managed-agents-CasacvJX.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat-zPXWB-03.js","names":[],"sources":["../../dashboard/src/components/chat/helpers.ts","../../dashboard/src/components/chat/hooks/useChatAgents.ts","../../dashboard/src/components/chat/AgentListPanel.tsx","../../dashboard/src/lib/slash-commands.ts","../../dashboard/src/components/chat/ChatHeader.tsx","../../dashboard/src/components/chat/SlashPalette.tsx","../../dashboard/src/components/chat/Composer.tsx","../../dashboard/src/components/chat/FilePreview.tsx","../../dashboard/src/components/chat/sessionTrace.ts","../../dashboard/src/components/chat/hooks/useAgentStatusEvents.ts","../../dashboard/src/components/chat/hooks/useBackNavProtection.ts","../../dashboard/node_modules/react-virtuoso/dist/index.mjs","../../dashboard/src/components/chat/hooks/useTtsPlayingKey.ts","../../dashboard/src/components/chat/MessageBubble.tsx","../../dashboard/src/components/chat/AskQuestionForm.tsx","../../dashboard/src/components/chat/TraceView.tsx","../../dashboard/src/components/chat/VirtualTimeline.tsx","../../dashboard/src/components/chat/ChatPanel.tsx","../../dashboard/src/components/chat/hooks/useDraftCleanup.ts","../../dashboard/src/components/chat/ChatView.tsx"],"sourcesContent":["\nimport { AlertCircle, Check, CheckCheck, Clock } from 'lucide-react'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport {\n isReactionEventMessage,\n normalizePathForCompare,\n normalizeReactionEmoji,\n pathWithinBase,\n toTimestamp,\n} from '@/lib/display'\nimport type { AttachmentRef, InboxThread, Message, Orchestrator } from '@/types'\nimport type { PendingAttachment } from './types'\n\nexport function formatBytes(size: number): string {\n if (size < 1024) return `${size} B`\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`\n return `${(size / 1024 / 1024).toFixed(1)} MB`\n}\n\nexport function resolveRelativePath(cwd: string, path: string): string {\n if (path.startsWith('/')) return path\n const parts = `${cwd.replace(/\\/+$/, '')}/${path}`.split('/')\n const stack: string[] = []\n for (const part of parts) {\n if (!part || part === '.') continue\n if (part === '..') stack.pop()\n else stack.push(part)\n }\n return '/' + stack.join('/')\n}\n\nexport function parentPath(path: string): string {\n const trimmed = path.replace(/\\/+$/, '')\n const index = trimmed.lastIndexOf('/')\n return index > 0 ? trimmed.slice(0, index) : '/'\n}\n\nexport function orchestratorForFilePreview(orchestrators: Orchestrator[], path: string): Orchestrator | undefined {\n return orchestrators\n .filter((orch) => orch.status === 'online' && pathWithinBase(path, orch.baseDir))\n .sort((a, b) => normalizePathForCompare(b.baseDir).length - normalizePathForCompare(a.baseDir).length)[0] ||\n orchestrators.find((orch) => orch.status === 'online')\n}\n\nexport function supportsSideFilePreview(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(min-width: 1280px)').matches\n}\n\nexport function hasActiveTextSelection(): boolean {\n return typeof window !== 'undefined' && Boolean(window.getSelection()?.toString())\n}\n\nexport function messageAttachments(msg: Message): AttachmentRef[] {\n const attachments = msg.payload?.attachments\n if (!Array.isArray(attachments)) return []\n return attachments.filter((item): item is AttachmentRef => Boolean(item && typeof item === 'object' && typeof (item as AttachmentRef).artifactId === 'string'))\n}\n\nexport const QUICK_REACTIONS = ['👍', '❤️', '✅', '👀'] as const\n\nexport function groupedReactions(msg: Message): Array<{ emoji: string; count: number; mine: boolean; actors: string[] }> {\n const groups = new Map<string, { emoji: string; count: number; mine: boolean; actors: string[] }>()\n for (const reaction of msg.reactions || []) {\n const emoji = normalizeReactionEmoji(reaction.emoji)\n const current = groups.get(emoji) ?? { emoji, count: 0, mine: false, actors: [] }\n current.count += 1\n current.mine = current.mine || reaction.actorId === HUMAN_AGENT_ID\n current.actors.push(reaction.actorId)\n groups.set(emoji, current)\n }\n return [...groups.values()].sort((a, b) => b.count - a.count || a.emoji.localeCompare(b.emoji))\n}\n\nexport function isReactionEvent(msg: Message): boolean {\n return isReactionEventMessage(msg)\n}\n\nexport function outboundReceipt(msg: Message, peer: string): { label: string; title: string; tone: 'muted' | 'ok' | 'warn' | 'danger'; icon: typeof Check } {\n const readBy = msg.readBy || []\n const expectedReader = msg.resolvedToAgent || peer || msg.to\n const readByExpected = expectedReader ? readBy.includes(expectedReader) : false\n const readBySomeone = readBy.some((id) => id !== HUMAN_AGENT_ID)\n if (readByExpected || readBySomeone) {\n const reader = readByExpected ? expectedReader : readBy.find((id) => id !== HUMAN_AGENT_ID)\n return { label: 'read', title: reader ? `Read by ${reader}` : 'Read by agent', tone: 'ok', icon: CheckCheck }\n }\n if (msg.deliveryStatus === 'delivered') {\n return { label: 'delivered', title: 'Delivered to agent inbox', tone: 'ok', icon: CheckCheck }\n }\n if (msg.deliveryStatus === 'queued') {\n return { label: 'queued', title: 'Queued until the target agent is available', tone: 'warn', icon: Clock }\n }\n if (msg.deliveryStatus === 'failed' || msg.deliveryStatus === 'dead') {\n const detail = msg.deliveryPoisonReason || msg.deliveryLastError || msg.deliveryStatus\n return { label: msg.deliveryStatus, title: detail, tone: 'danger', icon: AlertCircle }\n }\n return { label: 'sent', title: 'Accepted by Relay', tone: 'muted', icon: Check }\n}\n\nexport function messageActivityTimestamp(msg: Message): number {\n const messageAt = toTimestamp(msg.createdAt)\n return (msg.reactions || []).reduce((latest, reaction) => {\n return Math.max(latest, toTimestamp(reaction.updatedAt || reaction.createdAt))\n }, messageAt)\n}\n\nexport function threadActivityTimestamp(thread: InboxThread | undefined): number {\n if (!thread) return 0\n return thread.messages.reduce((latest, msg) => Math.max(latest, messageActivityTimestamp(msg)), 0)\n}\n\nexport function chatTimestamp(iso: string | number): string {\n const d = new Date(iso as string)\n return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n}\n\nexport function revokePendingAttachmentUrls(items: PendingAttachment[]): void {\n for (const item of items) if (item.previewUrl) URL.revokeObjectURL(item.previewUrl)\n}\n","\nimport { useMemo } from 'react'\nimport { useUniqueHosts } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { CHAT_STATUS_SORT_ORDER } from '@/lib/constants'\nimport { agentType, displayName, toTimestamp, userFacingCapabilities, visibleAgents } from '@/lib/display'\n\nexport { useUniqueHosts }\n\nexport function useChatAgents() {\n const agents = useRelayStore((s) => s.agents)\n const showBuiltIns = useRelayStore((s) => s.showBuiltIns)\n const showOffline = useRelayStore((s) => s.showOffline)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const managedPolicies = useRelayStore((s) => s.managedPolicies)\n\n return useMemo(() => {\n let list = visibleAgents(agents, showBuiltIns, managedPolicies)\n if (!showOffline) list = list.filter((a) => a.status !== 'offline')\n\n if (chatAgentSearch) {\n const q = chatAgentSearch.toLowerCase()\n list = list.filter((a) =>\n a.id.toLowerCase().includes(q) ||\n (a.name || '').toLowerCase().includes(q) ||\n (a.label || '').toLowerCase().includes(q) ||\n (a.tags || []).some((t) => t.toLowerCase().includes(q)) ||\n (a.capabilities || []).some((c) => c.toLowerCase().includes(q))\n )\n }\n\n if (chatAgentProviderFilter) list = list.filter((a) => agentType(a) === chatAgentProviderFilter)\n if (chatAgentStatusFilter) list = list.filter((a) => a.status === chatAgentStatusFilter)\n if (chatAgentTagFilter) list = list.filter((a) => (a.tags || []).includes(chatAgentTagFilter))\n if (chatAgentCapFilter) list = list.filter((a) => (a.capabilities || []).includes(chatAgentCapFilter))\n if (chatAgentHostFilter) list = list.filter((a) => (a.machine || '') === chatAgentHostFilter)\n\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...list].sort((a, b) => {\n if (chatAgentSort === 'name') return displayName(a).localeCompare(displayName(b)) * dir\n if (chatAgentSort === 'lastSeen') return (toTimestamp(b.lastSeen) - toTimestamp(a.lastSeen)) * dir || displayName(a).localeCompare(displayName(b))\n const s = ((CHAT_STATUS_SORT_ORDER[a.status] ?? 9) - (CHAT_STATUS_SORT_ORDER[b.status] ?? 9)) * dir\n return s || displayName(a).localeCompare(displayName(b))\n })\n }, [agents, showBuiltIns, showOffline, managedPolicies, chatAgentSearch, chatAgentProviderFilter,\n chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter, chatAgentSort, chatAgentSortDir])\n}\n","\nimport { useMemo } from 'react'\nimport { AlertCircle, Search, Bot, SortAsc, SortDesc, Plus, SlidersHorizontal, ChevronDown, ChevronUp } from 'lucide-react'\nimport { useRelayStore, useNow } from '@/store'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { ContextRing, agentWorkspaceMeta, agentProjectName, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { agentNeedsHumanResponse, displayName, fmtTime, messagePreview, timeAgo, userFacingCapabilities } from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Agent, InboxThread } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { threadActivityTimestamp } from './helpers'\nimport { useChatAgents, useUniqueHosts } from './hooks/useChatAgents'\n\nexport function AgentListPanel({ threads, onSelectAgent }: { threads: InboxThread[]; onSelectAgent?: (id: string) => void }) {\n const set = useRelayStore((s) => s.set)\n const openInboxThread = useRelayStore((s) => s.openInboxThread)\n const openAgentSpawn = useRelayStore((s) => s.openAgentSpawn)\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentGroupBy = useRelayStore((s) => s.chatAgentGroupBy)\n const chatAgentFiltersCollapsed = useRelayStore((s) => s.chatAgentFiltersCollapsed)\n const now = useNow()\n const chatAgents = useChatAgents()\n\n const threadByPeer = useMemo(() => {\n const m = new Map<string, InboxThread>()\n for (const t of threads) m.set(t.peer, t)\n return m\n }, [threads])\n\n const sortedAgents = useMemo(() => {\n if (chatAgentSort !== 'lastMessage') return chatAgents\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...chatAgents].sort((a, b) => {\n const ta = threadActivityTimestamp(threadByPeer.get(a.id))\n const tb = threadActivityTimestamp(threadByPeer.get(b.id))\n return (tb - ta) * dir || displayName(a).localeCompare(displayName(b))\n })\n }, [chatAgents, chatAgentSort, chatAgentSortDir, threadByPeer])\n\n const uniqueTags = useMemo(() => [...new Set(chatAgents.flatMap((a) => a.tags || []))], [chatAgents])\n const uniqueCaps = useMemo(() => [...new Set(chatAgents.flatMap((a) => userFacingCapabilities(a.capabilities || [])))], [chatAgents])\n const uniqueHosts = useUniqueHosts()\n\n // Group the (already sorted) agents by project, preserving sort order within\n // each group. null when grouping is off → render a flat list.\n const groupedAgents = useMemo(() => {\n if (chatAgentGroupBy !== 'project') return null\n const groups = new Map<string, Agent[]>()\n for (const a of sortedAgents) {\n const key = agentProjectName(a) || 'No project'\n const bucket = groups.get(key)\n if (bucket) bucket.push(a)\n else groups.set(key, [a])\n }\n return [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]))\n }, [sortedAgents, chatAgentGroupBy])\n\n const activeFilterCount = [chatAgentProviderFilter, chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter].filter(Boolean).length\n\n function handleSelect(id: string) {\n openInboxThread(id, threadByPeer.get(id)?.messages)\n onSelectAgent?.(id)\n }\n\n function renderAgentRow(agent: Agent) {\n const thread = threadByPeer.get(agent.id)\n const unread = thread?.attention.unread || 0\n const needsHumanResponse = agentNeedsHumanResponse(agent)\n const lastMsg = thread?.previewMessage\n const lastActivityAt = threadActivityTimestamp(thread)\n const isSelected = selectedInboxThread === agent.id\n const ws = agentWorkspaceMeta(agent)\n const project = agentProjectName(agent)\n const WsIcon = ws.Icon\n\n return (\n <li key={agent.id}>\n <button\n className={cn(\n 'w-full text-left px-3 py-2.5 flex items-start gap-2.5 hover:bg-muted/50 transition-colors border-b border-border/50',\n isSelected && 'bg-muted/60'\n )}\n onClick={() => handleSelect(agent.id)}\n >\n <div className=\"relative shrink-0 mt-0.5\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-1 mb-0.5\">\n <span className=\"text-xs font-medium truncate\">{displayName(agent)}</span>\n <div className=\"flex items-center gap-1 shrink-0\">\n {lastActivityAt > 0 && (\n <span className=\"text-[10px] text-muted-foreground\" title={fmtTime(lastActivityAt)}>\n {timeAgo(now, lastActivityAt)}\n </span>\n )}\n {unread > 0 && (\n <Badge className=\"bg-red-500 text-white text-xs min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1\">\n {unread}\n </Badge>\n )}\n {!unread && needsHumanResponse && (\n <Badge className=\"bg-amber-500 text-black text-xs min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1\" title=\"Needs response\">\n <AlertCircle className=\"h-3 w-3\" />\n </Badge>\n )}\n </div>\n </div>\n\n {/* Workspace icon + project name, with context usage on the right */}\n <div className=\"flex items-center gap-1.5 mb-0.5 text-[10px] text-muted-foreground\">\n <span title={ws.title} className=\"inline-flex shrink-0\">\n <WsIcon className={cn('h-3 w-3', ws.iconColor)} />\n </span>\n <span className=\"truncate\">{project || ws.label}</span>\n {agentHasContextTelemetry(agent) && (\n <span className=\"ml-auto shrink-0\">\n <ContextRing context={agent.context} expected size={18} />\n </span>\n )}\n </div>\n\n {lastMsg && (\n <p className=\"text-xs text-muted-foreground truncate leading-tight\">\n {lastMsg.from === HUMAN_AGENT_ID ? 'You: ' : ''}\n {messagePreview(lastMsg)}\n </p>\n )}\n\n {agent.status !== 'offline' && (\n <div className=\"mt-1\">\n <span className={cn('text-xs', agent.status === 'busy' ? 'text-yellow-400' : 'text-emerald-400')}>\n {agent.status}\n </span>\n </div>\n )}\n </div>\n </button>\n </li>\n )\n }\n\n return (\n <div className=\"flex flex-col h-full border-r border-border min-w-0\">\n {/* Search + filters */}\n <div className=\"p-3 border-b border-border space-y-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder=\"Search agents...\"\n value={chatAgentSearch}\n onChange={(e) => set({ chatAgentSearch: e.target.value })}\n className=\"pl-8 h-7 text-xs\"\n />\n </div>\n\n {/* Filters toggle — mobile only; on desktop the panel is always open */}\n <button\n type=\"button\"\n onClick={() => set({ chatAgentFiltersCollapsed: !chatAgentFiltersCollapsed })}\n className=\"sm:hidden flex w-full items-center justify-between h-6 px-1.5 text-xs rounded-md border border-border bg-background text-muted-foreground\"\n >\n <span className=\"inline-flex items-center gap-1.5\">\n <SlidersHorizontal className=\"w-3.5 h-3.5\" />\n Filters & sort\n {activeFilterCount > 0 && (\n <Badge className=\"bg-primary/20 text-primary text-[10px] h-4 min-w-4 px-1 flex items-center justify-center\">{activeFilterCount}</Badge>\n )}\n </span>\n {chatAgentFiltersCollapsed ? <ChevronDown className=\"w-3.5 h-3.5\" /> : <ChevronUp className=\"w-3.5 h-3.5\" />}\n </button>\n\n <div className={cn('space-y-2', chatAgentFiltersCollapsed ? 'hidden' : 'block', 'sm:block')}>\n {/* Sort row */}\n <div className=\"flex items-center gap-1.5\">\n <select\n value={chatAgentSort}\n onChange={(e) => set({ chatAgentSort: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"status\">By status</option>\n <option value=\"name\">By name</option>\n <option value=\"lastSeen\">By last seen</option>\n <option value=\"lastMessage\">By last activity</option>\n </select>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => set({ chatAgentSortDir: chatAgentSortDir === 'asc' ? 'desc' : 'asc' })}\n >\n {chatAgentSortDir === 'asc' ? <SortAsc className=\"w-3.5 h-3.5\" /> : <SortDesc className=\"w-3.5 h-3.5\" />}\n </Button>\n </div>\n\n {/* Grouping */}\n <select\n value={chatAgentGroupBy}\n onChange={(e) => set({ chatAgentGroupBy: e.target.value })}\n className=\"w-full h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">No grouping</option>\n <option value=\"project\">Group by project</option>\n </select>\n\n {/* Filter row */}\n <div className=\"flex gap-1\">\n <select\n value={chatAgentProviderFilter}\n onChange={(e) => set({ chatAgentProviderFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All types</option>\n <option value=\"claude\">Claude</option>\n <option value=\"codex\">Codex</option>\n <option value=\"agent\">Agent</option>\n <option value=\"user\">User</option>\n </select>\n <select\n value={chatAgentStatusFilter}\n onChange={(e) => set({ chatAgentStatusFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All status</option>\n <option value=\"online\">Online</option>\n <option value=\"idle\">Idle</option>\n <option value=\"busy\">Busy</option>\n <option value=\"offline\">Offline</option>\n </select>\n {uniqueHosts.length > 1 && (\n <select\n value={chatAgentHostFilter}\n onChange={(e) => set({ chatAgentHostFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All hosts</option>\n {uniqueHosts.map((h) => <option key={h} value={h}>{h}</option>)}\n </select>\n )}\n </div>\n\n {(uniqueTags.length > 0 || uniqueCaps.length > 0) && (\n <div className=\"flex gap-1\">\n {uniqueTags.length > 0 && (\n <select\n value={chatAgentTagFilter}\n onChange={(e) => set({ chatAgentTagFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All tags</option>\n {uniqueTags.map((t) => <option key={t} value={t}>#{t}</option>)}\n </select>\n )}\n {uniqueCaps.length > 0 && (\n <select\n value={chatAgentCapFilter}\n onChange={(e) => set({ chatAgentCapFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All caps</option>\n {uniqueCaps.map((c) => <option key={c} value={c}>{c}</option>)}\n </select>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Spawn — pinned above the list so it never scrolls out of reach */}\n <button\n type=\"button\"\n className=\"flex w-full shrink-0 items-center gap-2.5 border-b border-border px-3 py-2 text-left transition-colors hover:bg-muted/50\"\n onClick={openAgentSpawn}\n >\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full border border-dashed border-primary/50 bg-primary/10 text-primary\">\n <Plus className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium\">New Agent</div>\n <div className=\"truncate text-[10px] text-muted-foreground\">Spawn a fresh chat agent</div>\n </div>\n </button>\n\n {/* Agent list */}\n <div className=\"flex-1 overflow-y-auto\">\n {sortedAgents.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-10 text-center px-4\">\n <Bot className=\"w-8 h-8 text-zinc-600 mb-2\" />\n <p className=\"text-xs text-muted-foreground\">No agents match filters</p>\n </div>\n ) : groupedAgents ? (\n groupedAgents.map(([project, agents]) => (\n <div key={project}>\n <div className=\"sticky top-0 z-10 flex items-center gap-1.5 border-b border-border/50 bg-background/95 px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground backdrop-blur\">\n <span className=\"truncate\">{project}</span>\n <span className=\"text-muted-foreground/50\">{agents.length}</span>\n </div>\n <ul>{agents.map(renderAgentRow)}</ul>\n </div>\n ))\n ) : (\n <ul>{sortedAgents.map(renderAgentRow)}</ul>\n )}\n </div>\n </div>\n )\n}\n","// Slash-command catalog for the chat-input autocomplete palette. Dashboard-only\n// UI data (the runner/server never need it), so it lives here rather than in the\n// SDK — which keeps the dashboard build free of a cross-package value dependency.\n\nexport interface SlashCommand {\n name: string\n description?: string\n /** \"builtin\" | \"skill\" — purely for grouping/icons. */\n source?: string\n /** Argument hint shown after the name, e.g. \"<message>\". */\n argumentHint?: string\n}\n\n// Agent Relay slash commands bundled into every managed session (the runner ships\n// these skills for both providers). Exact and stable — sourced from this repo.\nconst RELAY_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/reply', source: 'skill', description: 'Reply to a relay message by id', argumentHint: '<messageId> <body>' },\n { name: '/message', source: 'skill', description: 'Send a relay message to an agent, label, tag, or broadcast', argumentHint: '<target> <body>' },\n { name: '/pair', source: 'skill', description: 'Start or manage a two-agent pair session' },\n { name: '/react', source: 'skill', description: 'Add a reaction to a relay message', argumentHint: '<messageId> <emoji>' },\n { name: '/read-message', source: 'skill', description: 'Fetch a full relay message by id', argumentHint: '<messageId>' },\n { name: '/send-claimable', source: 'skill', description: 'Enqueue a claimable work item for one agent to claim' },\n { name: '/status', source: 'skill', description: \"Show this agent's relay status\" },\n { name: '/tags', source: 'skill', description: \"List or update this agent's relay tags\" },\n { name: '/label', source: 'skill', description: \"Read, set, or clear this agent's relay label\" },\n { name: '/disconnect', source: 'skill', description: 'End the current relay pair session' },\n]\n\n// Stable provider built-ins. Deliberately conservative — only commands known to\n// exist across versions of each provider — so the palette never offers a command\n// that isn't there. Project/skill commands are grown in organically later.\nconst CLAUDE_BUILTIN_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/clear', source: 'builtin', description: 'Clear conversation history and free up context' },\n { name: '/compact', source: 'builtin', description: 'Compact the conversation to reclaim context', argumentHint: '[instructions]' },\n { name: '/model', source: 'builtin', description: 'Switch the active model', argumentHint: '[model]' },\n { name: '/help', source: 'builtin', description: 'Show help' },\n]\n\nconst CODEX_BUILTIN_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/compact', source: 'builtin', description: 'Compact the conversation to reclaim context' },\n { name: '/new', source: 'builtin', description: 'Start a new thread' },\n]\n\n/** Slash-command catalog for a provider's chat-input autocomplete palette. */\nexport function providerSlashCommands(provider: string | undefined): SlashCommand[] {\n const builtins = provider === 'claude' ? CLAUDE_BUILTIN_SLASH_COMMANDS\n : provider === 'codex' ? CODEX_BUILTIN_SLASH_COMMANDS\n : []\n return [...builtins, ...RELAY_SLASH_COMMANDS]\n}\n","import {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n Minimize2,\n MoreHorizontal,\n Power,\n Terminal,\n Volume2,\n VolumeX,\n} from 'lucide-react'\nimport { AgentRuntimeChips, ContextRing, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { voiceTts } from '@/lib/voice'\nimport { displayName, providerBlockedState, shortPath } from '@/lib/display'\nimport type { Agent, ChatHistoryImport, InboxThread, Message } from '@/types'\n\ntype ExportableThread = InboxThread | { peer: string; messages: Message[]; importedHistory: ChatHistoryImport[] }\n\nexport function ChatHeader({\n selectedInboxThread,\n agent,\n now,\n blockedState,\n thread,\n exportableThread,\n importedHistory,\n showBackButton,\n onBack,\n openAgentDetail,\n openWorkspaceFocus,\n voiceTtsEnabled,\n setVoiceTtsEnabled,\n canOpenTerminal,\n terminalOpening,\n handleOpenTerminal,\n canInterrupt,\n interruptAgent,\n canCompact,\n canClearContext,\n canShutdown,\n openConfirm,\n workspaceAction,\n doAgentAction,\n openFilesForAgent,\n forkFromAgent,\n markInboxThreadUnread,\n markInboxThreadRead,\n exportThread,\n}: {\n selectedInboxThread: string\n agent: Agent | null\n now: number\n blockedState: ReturnType<typeof providerBlockedState>\n thread: InboxThread | null\n exportableThread: ExportableThread | null\n importedHistory: ChatHistoryImport[]\n showBackButton?: boolean\n onBack?: () => void\n openAgentDetail: (agent: Agent) => void\n openWorkspaceFocus: (workspaceId: string) => void\n voiceTtsEnabled: boolean\n setVoiceTtsEnabled: (enabled: boolean) => void\n canOpenTerminal: boolean\n terminalOpening: boolean\n handleOpenTerminal: () => void | Promise<void>\n canInterrupt: boolean\n interruptAgent: () => void\n canCompact: boolean\n canClearContext: boolean\n canShutdown: boolean\n openConfirm: (title: string, body: string, action: () => void) => void\n workspaceAction: (workspaceId: string, action: 'ready') => void | Promise<void>\n doAgentAction: (agent: Agent, action: 'interrupt' | 'compact' | 'clearContext' | 'shutdown') => void | Promise<void>\n openFilesForAgent: (agent: Agent) => void | Promise<void>\n forkFromAgent: (agentId: string, messages: Message[]) => void\n markInboxThreadUnread: (peer: string) => void\n markInboxThreadRead: (peer: string, messages: Message[]) => void\n exportThread: (thread: ExportableThread, format: 'json') => void\n}) {\n return (\n <div className=\"flex items-center justify-between px-3 md:px-4 py-2.5 md:py-3 border-b border-border shrink-0\">\n <div className=\"flex items-center gap-2 md:gap-2.5 min-w-0\">\n {showBackButton && (\n <Button variant=\"ghost\" size=\"icon-sm\" onClick={onBack} className=\"shrink-0 -ml-1\">\n <ArrowLeft className=\"w-4 h-4\" />\n </Button>\n )}\n <button\n type=\"button\"\n className=\"flex items-center gap-2 md:gap-2.5 min-w-0 hover:opacity-80 transition-opacity\"\n onClick={() => agent && openAgentDetail(agent)}\n disabled={!agent}\n >\n <div className=\"relative shrink-0\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n <div className=\"min-w-0 text-left\">\n <p className=\"text-sm font-medium truncate\">{agent ? displayName(agent) : selectedInboxThread}</p>\n {agent && (\n <p className=\"text-xs text-muted-foreground truncate\">\n {blockedState ? `blocked: ${blockedState.label}` : agent.status}\n {agent.machine && ` · ${agent.machine}`}\n {typeof agent.meta?.cwd === 'string' && agent.meta.cwd && ` · ${shortPath(agent.meta.cwd as string, 1)}`}\n </p>\n )}\n </div>\n </button>\n {agent && <AgentRuntimeChips agent={agent} compact className=\"hidden @4xl/chat:flex shrink-0\" />}\n {agent && agentHasContextTelemetry(agent) && <ContextRing context={agent.context} expected />}\n {agent?.branchState && agent.branchWorkspaceId && (\n <BranchStateBadge state={agent.branchState} className=\"shrink-0\" onClick={() => void openWorkspaceFocus(agent.branchWorkspaceId!)} />\n )}\n {thread?.attention.unread ? (\n <Badge className=\"bg-red-500/20 text-red-400 text-xs shrink-0 hidden @2xl/chat:flex\">{thread.attention.unread} unread</Badge>\n ) : null}\n </div>\n \n <div className=\"flex items-center gap-0.5 md:gap-1 shrink-0\">\n {agent && (\n <>\n <CopyButton value={agent.id} label=\"Copy agent ID\" size=\"icon-sm\" />\n {voiceTts.available && <Button variant=\"ghost\" size=\"icon-sm\" title={voiceTtsEnabled ? 'Speaking agent responses aloud — click to mute (engine & voice in Settings)' : 'Speak agent responses aloud (active chat) — engine & voice in Settings'} className={voiceTtsEnabled ? 'text-primary' : ''} onClick={() => setVoiceTtsEnabled(!voiceTtsEnabled)}>{voiceTtsEnabled ? <Volume2 className=\"w-3.5 h-3.5\" /> : <VolumeX className=\"w-3.5 h-3.5\" />}</Button>}\n {canOpenTerminal && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" disabled={terminalOpening} title=\"Terminal\" onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" /></Button>}\n {canInterrupt && <Button variant=\"ghost\" size=\"icon-sm\" className=\"text-red-400 hover:text-red-300\" title=\"Interrupt\" onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" /></Button>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex text-amber-400 hover:text-amber-300\" title=\"Mark workspace ready — hand off to the auto-merge\" onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" /></Button>}\n {canCompact && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Compact\" onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" /></Button>}\n {canClearContext && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Clear context\" onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" /></Button>}\n {canShutdown && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Shutdown\" onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" /></Button>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title={`Open ${agent.meta.cwd as string} in Files`} onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" /></Button>}\n {agent && thread && thread.messages.length > 0 && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Fork — spawn new agent with this chat history\" onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark unread\" onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark read\" onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" /></Button>}\n {exportableThread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Export thread\" onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" /></Button>}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"@4xl/chat:hidden\"><MoreHorizontal className=\"w-3.5 h-3.5\" /></Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {canOpenTerminal && <DropdownMenuItem disabled={terminalOpening} onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" />Terminal</DropdownMenuItem>}\n {canInterrupt && <DropdownMenuItem onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" />Interrupt</DropdownMenuItem>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <DropdownMenuItem onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" />Mark Ready</DropdownMenuItem>}\n {canCompact && <DropdownMenuItem onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" />Compact</DropdownMenuItem>}\n {canClearContext && <DropdownMenuItem onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" />Clear Context</DropdownMenuItem>}\n {canShutdown && <DropdownMenuItem onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" />Shutdown</DropdownMenuItem>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <DropdownMenuItem onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" />Open Files</DropdownMenuItem>}\n {agent && thread && thread.messages.length > 0 && <DropdownMenuItem onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" />Fork</DropdownMenuItem>}\n {(canOpenTerminal || canCompact || canClearContext || canShutdown) && <DropdownMenuSeparator />}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" />Mark Unread</DropdownMenuItem>}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" />Mark Read</DropdownMenuItem>}\n {exportableThread && <DropdownMenuItem onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" />Download</DropdownMenuItem>}\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n </div>\n </div>\n )\n}\n","\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { cn } from '@/lib/utils'\n\nexport function SlashPalette({\n matches,\n activeIndex,\n onAccept,\n onHover,\n}: {\n matches: SlashCommand[]\n activeIndex: number\n onAccept: (cmd: SlashCommand) => void\n onHover: (index: number) => void\n}) {\n if (matches.length === 0) return null\n return (\n <div className=\"absolute bottom-full left-3 right-3 md:left-4 md:right-4 mb-2 z-20 max-h-64 overflow-auto rounded-xl border border-border bg-popover shadow-lg\">\n {matches.map((cmd, i) => (\n <button\n key={cmd.name}\n onMouseDown={(e) => { e.preventDefault(); onAccept(cmd) }}\n onMouseEnter={() => onHover(i)}\n className={cn('flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm', i === activeIndex ? 'bg-accent' : 'hover:bg-accent/50')}\n >\n <span className=\"font-medium shrink-0\">{cmd.name}</span>\n {cmd.argumentHint && <span className=\"text-xs text-muted-foreground shrink-0\">{cmd.argumentHint}</span>}\n {cmd.description && <span className=\"ml-auto truncate text-xs text-muted-foreground/70\">{cmd.description}</span>}\n </button>\n ))}\n </div>\n )\n}\n","\nimport { useEffect, useRef, useState } from 'react'\nimport { AlertCircle, FileText, Loader2, Mic, Paperclip, Send, X, ZoomIn } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'\nimport { cn } from '@/lib/utils'\nimport type { PendingAttachment } from './types'\nimport { formatBytes } from './helpers'\nimport { SlashPalette } from './SlashPalette'\nimport type { SlashCommand } from '@/lib/slash-commands'\n\nfunction AutoGrowTextarea({\n value, onChange, onKeyDown, onPaste, placeholder, className,\n}: {\n value: string\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste?: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n placeholder: string\n className?: string\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n useEffect(() => {\n const el = textareaRef.current\n if (!el) return\n el.style.height = 'auto'\n el.style.height = Math.min(el.scrollHeight, 200) + 'px'\n }, [value])\n\n // Handle mobile keyboard: keep input visible\n useEffect(() => {\n const vv = window.visualViewport\n if (!vv) return\n\n function handleResize() {\n const el = textareaRef.current\n if (!el || document.activeElement !== el) return\n // Scroll the input into view when keyboard appears\n requestAnimationFrame(() => {\n el.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n })\n }\n\n vv.addEventListener('resize', handleResize)\n return () => vv.removeEventListener('resize', handleResize)\n }, [])\n\n return (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'w-full resize-none rounded-xl border border-border bg-background px-3.5 py-2.5 text-sm',\n 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'min-h-[42px] max-h-[200px] overflow-y-auto',\n className\n )}\n />\n )\n}\n\nfunction PendingAttachmentPreview({ item, onRemove }: { item: PendingAttachment; onRemove: () => void }) {\n const [open, setOpen] = useState(false)\n const canPreview = Boolean(item.previewUrl && !item.error)\n\n return (\n <>\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-card px-2.5 py-2 text-xs\">\n <button\n type=\"button\"\n disabled={!canPreview}\n onClick={() => setOpen(true)}\n className=\"group/pending relative flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded bg-muted disabled:cursor-default\"\n title={canPreview ? 'Preview image' : item.fileName}\n >\n {item.previewUrl ? (\n <>\n <img src={item.previewUrl} alt={item.fileName} className=\"h-full w-full object-cover\" />\n <span className=\"absolute inset-0 flex items-center justify-center bg-black/0 group-hover/pending:bg-black/30 transition-colors\">\n <ZoomIn className=\"h-3.5 w-3.5 text-white opacity-0 group-hover/pending:opacity-100 transition-opacity drop-shadow-md\" />\n </span>\n </>\n ) : (\n item.error ? <AlertCircle className=\"h-4 w-4 text-red-400\" /> : item.uploading ? <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" /> : <FileText className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium\">{item.fileName}</p>\n <p className={cn('truncate text-muted-foreground', item.error && 'text-red-400')}>{item.error || (item.uploading ? 'Uploading' : formatBytes(item.size))}</p>\n </div>\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Remove attachment\" onClick={onRemove}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n {item.previewUrl && (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className=\"max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden\" showCloseButton={false}>\n <DialogTitle className=\"sr-only\">{item.fileName}</DialogTitle>\n <div className=\"relative flex items-center justify-center min-h-[200px]\">\n <img src={item.previewUrl} alt={item.fileName} className=\"max-w-[93vw] max-h-[90vh] object-contain\" />\n <button type=\"button\" onClick={() => setOpen(false)} className=\"absolute top-2 right-2 rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Close\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )}\n </>\n )\n}\n\nexport function Composer({\n draft,\n placeholder,\n chatSending,\n disabled,\n hasPendingUploads,\n readyAttachmentCount,\n pendingAttachments,\n micAvailable,\n micState,\n slashMatches,\n slashActiveIndex,\n onDraftChange,\n onKeyDown,\n onPaste,\n onUploadFiles,\n onRemovePendingAttachment,\n onSend,\n onAcceptSlash,\n onSlashHover,\n onStartPtt,\n onStopPtt,\n footerText,\n}: {\n draft: string\n placeholder: string\n chatSending: boolean\n disabled: boolean\n hasPendingUploads: boolean\n readyAttachmentCount: number\n pendingAttachments: PendingAttachment[]\n micAvailable: boolean\n micState: 'idle' | 'recording' | 'transcribing'\n slashMatches: SlashCommand[]\n slashActiveIndex: number\n onDraftChange: (value: string) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n onUploadFiles: (files: FileList | File[]) => void\n onRemovePendingAttachment: (id: string) => void\n onSend: () => void\n onAcceptSlash: (cmd: SlashCommand) => void\n onSlashHover: (index: number) => void\n onStartPtt: () => void\n onStopPtt: () => void\n footerText?: string\n}) {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [dragActive, setDragActive] = useState(false)\n const sendDisabled = (!draft.trim() && readyAttachmentCount === 0) || hasPendingUploads || chatSending || disabled\n\n return (\n <div\n className={cn(\n 'relative shrink-0 border-t border-border px-3 md:px-4 py-2.5 md:py-3 safe-area-bottom',\n dragActive && 'bg-primary/5 ring-1 ring-primary/40'\n )}\n onDragOver={(e) => { e.preventDefault(); setDragActive(true) }}\n onDragLeave={() => setDragActive(false)}\n onDrop={(e) => {\n e.preventDefault()\n setDragActive(false)\n onUploadFiles(e.dataTransfer.files)\n }}\n >\n {pendingAttachments.length > 0 && (\n <div className=\"mb-2 grid gap-2 sm:grid-cols-2\">\n {pendingAttachments.map((item) => (\n <PendingAttachmentPreview key={item.id} item={item} onRemove={() => onRemovePendingAttachment(item.id)} />\n ))}\n </div>\n )}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files) onUploadFiles(e.target.files)\n e.currentTarget.value = ''\n }}\n />\n <SlashPalette matches={slashMatches} activeIndex={slashActiveIndex} onAccept={onAcceptSlash} onHover={onSlashHover} />\n <div className=\"hidden md:flex items-end gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"flex-1\"\n />\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px] ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n <div className=\"md:hidden space-y-2\">\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"w-full\"\n />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"rounded-xl h-9 w-9\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`rounded-xl h-9 w-9 ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n </div>\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"rounded-xl h-9 w-9\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n {footerText && (\n <p className=\"text-xs text-muted-foreground mt-1.5 hidden md:block\">\n {footerText}\n </p>\n )}\n </div>\n )\n}\n","\nimport { createPortal } from 'react-dom'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport type { ReferencedPathInfo } from './types'\n\nexport function FloatingFilePreview({\n preview,\n error,\n onReadError,\n onMouseEnter,\n onMouseLeave,\n}: {\n preview: { orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect }\n error: string\n onReadError: (error: string) => void\n onMouseEnter: () => void\n onMouseLeave: () => void\n}) {\n const { anchor } = preview\n const gap = 8\n const width = Math.min(560, window.innerWidth - 24)\n const height = Math.min(380, window.innerHeight - 24)\n const left = Math.max(12, Math.min(anchor.left, window.innerWidth - width - 12))\n const spaceBelow = window.innerHeight - anchor.bottom\n const top = spaceBelow >= height + gap\n ? anchor.bottom + gap\n : anchor.top - gap - height >= 12\n ? anchor.top - gap - height\n : Math.max(12, window.innerHeight - height - 12)\n\n return createPortal(\n <div\n className=\"fixed z-50 flex flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\"\n style={{ top, left, width, height }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"flex h-8 shrink-0 items-center gap-2 border-b border-border px-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-[11px] font-medium text-muted-foreground\">{preview.path}</span>\n {error && <span className=\"max-w-[12rem] truncate text-[11px] text-red-400\">{error}</span>}\n <span className=\"shrink-0 text-[10px] text-muted-foreground/70\">click to pin</span>\n </div>\n <div className=\"min-h-0 flex-1\">\n {preview.type === 'directory' ? (\n <DirectoryContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} onReadError={onReadError} />\n ) : (\n <FileContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} line={preview.line} onReadError={onReadError} />\n )}\n </div>\n </div>,\n document.body,\n )\n}\n","\nimport { toTimestamp, responseBodyContainsBlock } from '@/lib/display'\nimport type { ChatStatusEvent as StatusEvent } from '@/store'\nimport type { ChatHistoryImport, ChatHistoryImportEntry, Message } from '@/types'\n\nexport interface ActivityStep { id: number; kind: 'narration' | 'reasoning' | 'tool'; label?: string; text: string; ts: number; turnId?: string }\n\nexport type TimelineEntry =\n | { type: 'message'; msg: Message }\n | { type: 'activity'; steps: ActivityStep[]; timestamp: number }\n | { type: 'import-boundary'; history: ChatHistoryImport; timestamp: number }\n | { type: 'imported-message'; history: ChatHistoryImport; entry: ChatHistoryImportEntry }\n | { type: 'status'; event: StatusEvent }\n | { type: 'date'; date: string; timestamp: number }\n | { type: 'created'; timestamp: number }\n\nexport const TIMELINE_STATUS_LABELS: Record<string, string> = {\n online: 'came online',\n offline: 'went offline',\n shutdown: 'shut down',\n restarted: 'restarted',\n 'compaction-requested': 'compaction requested',\n compacting: 'compaction started',\n compacted: 'context compacted',\n 'compaction-stalled': 'compaction stalled — may need manual intervention',\n 'clear-requested': 'clear requested',\n 'clearing-context': 'clear started',\n 'context-cleared': 'context cleared',\n 'clear-stalled': 'context clear stalled — may need manual intervention',\n 'shutting-down': 'shutting down',\n}\n\nconst TIMELINE_STATUSES = new Set(Object.keys(TIMELINE_STATUS_LABELS))\nconst STATUS_DEDUPE_WINDOW_MS = 3000\n\n// True event time of a message: occurredAt (set when a Runner backfilled a message it had\n// queued during an outage, #196) falling back to the server receive time. Used for chat\n// timeline ordering + display so a backfilled turn lands where it actually happened in the\n// conversation, not at the bottom. Display-only — DB poll cursors still use created_at.\nexport function messageEventTime(msg: Message): number {\n return new Date(msg.occurredAt ?? msg.createdAt).getTime()\n}\n\n// Narration/reasoning/tool session events are mirrored as `kind:\"session\"` messages\n// but must not become chat bubbles — they render inline in the turn's activity trace.\n// (`narration` = the agent's intermediate spoken text; `reasoning` = its thinking.)\nexport function sessionActivityStep(msg: Message): ActivityStep | null {\n if (msg.kind !== 'session') return null\n const s = msg.payload?.session as { type?: string; label?: string; turnId?: string } | undefined\n if (!s || (s.type !== 'narration' && s.type !== 'reasoning' && s.type !== 'tool')) return null\n return {\n id: msg.id,\n kind: s.type,\n label: typeof s.label === 'string' ? s.label : undefined,\n text: msg.body,\n ts: messageEventTime(msg),\n turnId: typeof s.turnId === 'string' ? s.turnId : undefined,\n }\n}\n\nexport function dateKey(ts: number): string {\n const d = new Date(ts)\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nexport function dedupeStatusEvents(statusEvents: StatusEvent[]): StatusEvent[] {\n const events = statusEvents\n .filter((event) => TIMELINE_STATUSES.has(event.status))\n .slice()\n .sort((a, b) => a.timestamp - b.timestamp)\n const result: StatusEvent[] = []\n for (const event of events) {\n if (result.some((existing) => existing.id === event.id)) continue\n if (result.some((existing) => existing.status === event.status && Math.abs(existing.timestamp - event.timestamp) <= STATUS_DEDUPE_WINDOW_MS)) continue\n result.push(event)\n }\n return result\n}\n\nexport function buildTimeline(messages: Message[], statusEvents: StatusEvent[], createdAt?: string | number | null, importedHistory: ChatHistoryImport[] = []): TimelineEntry[] {\n const raw: Array<{ ts: number; entry: TimelineEntry }> = []\n\n for (const history of importedHistory) {\n const firstImportedAt = history.entries.reduce((min, entry) => Math.min(min, toTimestamp(entry.originalCreatedAt)), Number.POSITIVE_INFINITY)\n const boundaryAt = Number.isFinite(firstImportedAt) ? firstImportedAt - 1 : history.importedAt\n raw.push({ ts: boundaryAt, entry: { type: 'import-boundary', history, timestamp: boundaryAt } })\n for (const entry of history.entries) {\n raw.push({ ts: toTimestamp(entry.originalCreatedAt), entry: { type: 'imported-message', history, entry } })\n }\n }\n\n if (createdAt) {\n const ts = new Date(createdAt as string).getTime()\n if (Number.isFinite(ts)) raw.push({ ts, entry: { type: 'created', timestamp: ts } })\n }\n\n // The closing response bubble (session type \"response\") repeats the turn's\n // narration. In `final` capture mode the body is just the final line; in `full`\n // mode it is every narration block joined with blank-line separators\n // (matching extractLastAssistantTurn).\n // Collect the response bodies per turn so a narration step is suppressed from the\n // trace whenever it appears as a blank-line-delimited block of the body — so no line\n // shows twice in either mode (final: only the matching final line; full: all of them).\n const responseBodiesByTurn = new Map<string, string[]>()\n for (const msg of messages) {\n if (msg.kind !== 'session') continue\n const s = msg.payload?.session as { type?: string; turnId?: string } | undefined\n if (s?.type === 'response' && typeof s.turnId === 'string') {\n const list = responseBodiesByTurn.get(s.turnId) ?? []\n list.push(msg.body.trim())\n responseBodiesByTurn.set(s.turnId, list)\n }\n }\n\n for (const msg of messages) {\n const step = sessionActivityStep(msg)\n if (step) {\n if (step.kind === 'narration' && step.turnId) {\n const bodies = responseBodiesByTurn.get(step.turnId)\n if (bodies?.some((body) => responseBodyContainsBlock(body, step.text))) continue\n }\n raw.push({ ts: step.ts, entry: { type: 'activity', steps: [step], timestamp: step.ts } })\n continue\n }\n raw.push({ ts: messageEventTime(msg), entry: { type: 'message', msg } })\n }\n for (const event of dedupeStatusEvents(statusEvents)) {\n raw.push({ ts: event.timestamp, entry: { type: 'status', event } })\n }\n\n const typeOrder = { created: 0, date: 1, 'import-boundary': 2, 'imported-message': 3, message: 4, activity: 4, status: 5 } as const\n raw.sort((a, b) => {\n const dt = a.ts - b.ts\n if (Math.abs(dt) < 3000) return typeOrder[a.entry.type] - typeOrder[b.entry.type] || dt\n return dt\n })\n\n const entries: TimelineEntry[] = []\n let lastDate = ''\n for (const { ts, entry } of raw) {\n if (entry.type === 'created') {\n entries.push(entry)\n continue\n }\n const dk = dateKey(ts)\n if (dk !== lastDate) {\n entries.push({ type: 'date', date: dk, timestamp: ts })\n lastDate = dk\n }\n // Coalesce consecutive activity steps from the same turn into one trace.\n if (entry.type === 'activity') {\n const prev = entries[entries.length - 1]\n if (prev && prev.type === 'activity' && sameActivityTurn(prev, entry)) {\n prev.steps.push(...entry.steps)\n continue\n }\n }\n entries.push(entry)\n }\n\n return entries\n}\n\nexport function sameActivityTurn(a: Extract<TimelineEntry, { type: 'activity' }>, b: Extract<TimelineEntry, { type: 'activity' }>): boolean {\n const at = a.steps[a.steps.length - 1]?.turnId\n const bt = b.steps[0]?.turnId\n if (at && bt) return at === bt\n // No turn id on either side: group adjacent steps regardless.\n return !at && !bt\n}\n","\nimport { useRelayStore, type ChatStatusEvent as StatusEvent } from '@/store'\n\nconst NO_STATUS_EVENTS: StatusEvent[] = []\n\nexport function useAgentStatusEvents(agentId: string): StatusEvent[] {\n return useRelayStore((s) => s.chatStatusEvents[agentId] ?? NO_STATUS_EVENTS)\n}\n","\nimport { useEffect, useRef } from 'react'\n\nexport function useBackNavProtection(hasDraft: boolean, onBack: () => void) {\n const historyPushedRef = useRef(false)\n\n useEffect(() => {\n if (!hasDraft) return\n\n if (!historyPushedRef.current) {\n window.history.pushState({ chatGuard: true }, '')\n historyPushedRef.current = true\n }\n\n function handlePopState(e: PopStateEvent) {\n if (e.state?.chatGuard !== undefined || !historyPushedRef.current) {\n // Re-push state to keep the guard active\n window.history.pushState({ chatGuard: true }, '')\n onBack()\n }\n }\n\n function handleBeforeUnload(e: BeforeUnloadEvent) {\n e.preventDefault()\n }\n\n window.addEventListener('popstate', handlePopState)\n window.addEventListener('beforeunload', handleBeforeUnload)\n return () => {\n window.removeEventListener('popstate', handlePopState)\n window.removeEventListener('beforeunload', handleBeforeUnload)\n }\n }, [hasDraft, onBack])\n\n useEffect(() => {\n if (!hasDraft && historyPushedRef.current) {\n historyPushedRef.current = false\n }\n }, [hasDraft])\n}\n","import { jsx as G, jsxs as $t } from \"react/jsx-runtime\";\nimport E, { createElement as Dt } from \"react\";\nimport So from \"react-dom\";\nconst we = 0, Pt = 1, Xt = 2, Wn = 4;\nfunction fn(t) {\n return () => t;\n}\nfunction xo(t) {\n t();\n}\nfunction re(t, e) {\n return (n) => t(e(n));\n}\nfunction mn(t, e) {\n return () => t(e);\n}\nfunction vo(t, e) {\n return (n) => t(e, n);\n}\nfunction _e(t) {\n return t !== void 0;\n}\nfunction To(...t) {\n return () => {\n t.map(xo);\n };\n}\nfunction Jt() {\n}\nfunction ye(t, e) {\n return e(t), t;\n}\nfunction Co(t, e) {\n return e(t);\n}\nfunction rt(...t) {\n return t;\n}\nfunction Y(t, e) {\n return t(Pt, e);\n}\nfunction _(t, e) {\n t(we, e);\n}\nfunction Ne(t) {\n t(Xt);\n}\nfunction it(t) {\n return t(Wn);\n}\nfunction k(t, e) {\n return Y(t, vo(e, we));\n}\nfunction yt(t, e) {\n const n = t(Pt, (o) => {\n n(), e(o);\n });\n return n;\n}\nfunction pn(t) {\n let e, n;\n return (o) => (r) => {\n e = r, n && clearTimeout(n), n = setTimeout(() => {\n o(e);\n }, t);\n };\n}\nfunction Pn(t, e) {\n return t === e;\n}\nfunction nt(t = Pn) {\n let e;\n return (n) => (o) => {\n t(e, o) || (e = o, n(o));\n };\n}\nfunction P(t) {\n return (e) => (n) => {\n t(n) && e(n);\n };\n}\nfunction B(t) {\n return (e) => re(e, t);\n}\nfunction Bt(t) {\n return (e) => () => {\n e(t);\n };\n}\nfunction x(t, ...e) {\n const n = wo(...e);\n return ((o, r) => {\n switch (o) {\n case Xt:\n Ne(t);\n return;\n case Pt:\n return Y(t, n(r));\n }\n });\n}\nfunction Lt(t, e) {\n return (n) => (o) => {\n n(e = t(e, o));\n };\n}\nfunction Ut(t) {\n return (e) => (n) => {\n t > 0 ? t-- : e(n);\n };\n}\nfunction zt(t) {\n let e = null, n;\n return (o) => (r) => {\n e = r, !n && (n = setTimeout(() => {\n n = void 0, o(e);\n }, t));\n };\n}\nfunction $(...t) {\n const e = new Array(t.length);\n let n = 0, o = null;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n const d = n;\n n |= l, e[i] = c, d !== r && n === r && o && (o(), o = null);\n });\n }), (s) => (i) => {\n const l = () => {\n s([i].concat(e));\n };\n n === r ? l() : o = l;\n };\n}\nfunction wo(...t) {\n return (e) => t.reduceRight(Co, e);\n}\nfunction yo(t) {\n let e, n;\n const o = () => e?.();\n return function(r, s) {\n switch (r) {\n case Pt:\n return s ? n === s ? void 0 : (o(), n = s, e = Y(t, s), e) : (o(), Jt);\n case Xt:\n o(), n = null;\n return;\n }\n };\n}\nfunction T(t) {\n let e = t;\n const n = U();\n return ((o, r) => {\n switch (o) {\n case we:\n e = r;\n break;\n case Pt: {\n r(e);\n break;\n }\n case Wn:\n return e;\n }\n return n(o, r);\n });\n}\nfunction ht(t, e) {\n return ye(T(e), (n) => k(t, n));\n}\nfunction U() {\n const t = [];\n return ((e, n) => {\n switch (e) {\n case we:\n t.slice().forEach((o) => {\n o(n);\n });\n return;\n case Xt:\n t.splice(0, t.length);\n return;\n case Pt:\n return t.push(n), () => {\n const o = t.indexOf(n);\n o > -1 && t.splice(o, 1);\n };\n }\n });\n}\nfunction Tt(t) {\n return ye(U(), (e) => k(t, e));\n}\nfunction j(t, e = [], { singleton: n } = { singleton: !0 }) {\n return {\n constructor: t,\n dependencies: e,\n id: bo(),\n singleton: n\n };\n}\nconst bo = () => Symbol();\nfunction Ro(t) {\n const e = /* @__PURE__ */ new Map(), n = ({ constructor: o, dependencies: r, id: s, singleton: i }) => {\n if (i && e.has(s))\n return e.get(s);\n const l = o(r.map((c) => n(c)));\n return i && e.set(s, l), l;\n };\n return n(t);\n}\nfunction at(...t) {\n const e = U(), n = new Array(t.length);\n let o = 0;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n n[i] = c, o |= l, o === r && _(e, n);\n });\n }), function(s, i) {\n switch (s) {\n case Xt: {\n Ne(e);\n return;\n }\n case Pt:\n return o === r && i(n), Y(e, i);\n }\n };\n}\nfunction W(t, e = Pn) {\n return x(t, nt(e));\n}\nfunction Fe(...t) {\n return function(e, n) {\n switch (e) {\n case Xt:\n return;\n case Pt:\n return To(...t.map((o) => Y(o, n)));\n }\n };\n}\nconst ft = {\n /** Detailed debugging information including item measurements */\n DEBUG: 0,\n /** General informational messages */\n INFO: 1,\n /** Warning messages for potential issues */\n WARN: 2,\n /** Error messages for failures (default level) */\n ERROR: 3\n}, Ho = {\n [ft.DEBUG]: \"debug\",\n [ft.ERROR]: \"error\",\n [ft.INFO]: \"log\",\n [ft.WARN]: \"warn\"\n}, Eo = () => typeof globalThis > \"u\" ? window : globalThis, Gt = j(\n () => {\n const t = T(ft.ERROR);\n return {\n log: T((n, o, r = ft.INFO) => {\n const s = Eo().VIRTUOSO_LOG_LEVEL ?? it(t);\n r >= s && console[Ho[r]](\n \"%creact-virtuoso: %c%s %o\",\n \"color: #0253b3; font-weight: bold\",\n \"color: initial\",\n n,\n o\n );\n }),\n logLevel: t\n };\n },\n [],\n { singleton: !0 }\n), Ve = /* @__PURE__ */ new WeakMap();\nfunction Gn(t) {\n return \"self\" in t ? t.document.documentElement : t;\n}\nfunction Bo(t) {\n const e = Gn(t), n = Ve.get(e);\n if (n !== void 0)\n return n;\n const o = e.ownerDocument.defaultView.getComputedStyle(e).direction === \"rtl\";\n return Ve.set(e, o), o;\n}\nfunction hn(t) {\n Ve.delete(Gn(t));\n}\nfunction An(t, e) {\n return Bo(t) ? -e : e;\n}\nconst _t = An;\nfunction gn(t, e) {\n return An(t, e);\n}\nfunction Ot(t, e, n) {\n return De(t, e, n).callbackRef;\n}\nfunction De(t, e, n) {\n const o = E.useRef(null);\n let r = (i) => {\n };\n const s = E.useMemo(() => typeof ResizeObserver < \"u\" ? new ResizeObserver((i) => {\n const l = () => {\n const c = i[0].target;\n c.offsetParent !== null && t(c);\n };\n n ? l() : requestAnimationFrame(l);\n }) : null, [t, n]);\n return r = (i) => {\n i && e ? (s?.observe(i), o.current = i) : (o.current && s?.unobserve(o.current), o.current = null);\n }, { callbackRef: r, ref: o };\n}\nfunction Mn(t, e, n, o, r, s, i, l, c) {\n const d = E.useCallback(\n (m) => {\n const v = Lo(m.children, e, l ? \"offsetWidth\" : \"offsetHeight\", r);\n let p = m.parentElement;\n for (; p.dataset.virtuosoScroller === void 0; )\n p = p.parentElement;\n const I = p.lastElementChild.dataset.viewportType === \"window\";\n let w;\n I && (w = p.ownerDocument.defaultView);\n const R = i ? l ? i.scrollWidth : i.scrollHeight : I ? l ? w.document.documentElement.scrollWidth : w.document.documentElement.scrollHeight : l ? p.scrollWidth : p.scrollHeight, h = i ? l ? i.offsetWidth : i.offsetHeight : I ? l ? w.innerWidth : w.innerHeight : l ? p.offsetWidth : p.offsetHeight, f = i ? l ? _t(i, i.scrollLeft) : i.scrollTop : I ? l ? _t(w, w.scrollX || w.document.documentElement.scrollLeft) : w.scrollY || w.document.documentElement.scrollTop : l ? _t(p, p.scrollLeft) : p.scrollTop;\n o({\n scrollHeight: R,\n scrollTop: Math.max(f, 0),\n viewportHeight: h\n }), s?.(\n l ? In(\"column-gap\", getComputedStyle(m).columnGap, r) : In(\"row-gap\", getComputedStyle(m).rowGap, r)\n ), v !== null && t(v);\n },\n [t, e, r, s, i, o, l]\n );\n return De(d, n, c);\n}\nfunction Lo(t, e, n, o) {\n const r = t.length;\n if (r === 0)\n return null;\n const s = [];\n for (let i = 0; i < r; i++) {\n const l = t.item(i);\n if (l.dataset.index === void 0)\n continue;\n const c = parseInt(l.dataset.index), d = parseFloat(l.dataset.knownSize), m = e(l, n);\n if (m === 0 && o(\"Zero-sized element, this should not happen\", { child: l }, ft.ERROR), m === d)\n continue;\n const v = s[s.length - 1];\n s.length === 0 || v.size !== m || v.endIndex !== c - 1 ? s.push({ endIndex: c, size: m, startIndex: c }) : s[s.length - 1].endIndex++;\n }\n return s;\n}\nfunction In(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nfunction $e(t, e, n) {\n const o = E.useRef(null), r = E.useCallback(\n (c) => {\n if (!c?.offsetParent)\n return;\n const d = c.getBoundingClientRect(), m = d.width;\n let v, p;\n if (e) {\n const I = e.getBoundingClientRect(), w = d.top - I.top;\n p = I.height - Math.max(0, w), v = w + e.scrollTop;\n } else {\n const I = i.current.ownerDocument.defaultView;\n p = I.innerHeight - Math.max(0, d.top), v = d.top + I.scrollY;\n }\n o.current = {\n listHeight: d.height,\n offsetTop: v,\n visibleHeight: p,\n visibleWidth: m\n }, t(o.current);\n },\n // oxlint-disable-next-line exhaustive-deps\n [t, e]\n ), { callbackRef: s, ref: i } = De(r, !0, n), l = E.useCallback(() => {\n r(i.current);\n }, [r, i]);\n return E.useEffect(() => {\n if (e) {\n e.addEventListener(\"scroll\", l);\n const d = new ResizeObserver(() => {\n requestAnimationFrame(l);\n });\n return d.observe(e), () => {\n e.removeEventListener(\"scroll\", l), d.unobserve(e);\n };\n }\n const c = i.current?.ownerDocument.defaultView;\n return c?.addEventListener(\"scroll\", l), c?.addEventListener(\"resize\", l), () => {\n c?.removeEventListener(\"scroll\", l), c?.removeEventListener(\"resize\", l);\n };\n }, [l, e, i]), s;\n}\nconst It = j(\n () => {\n const t = U(), e = U(), n = T(0), o = U(), r = T(0), s = U(), i = U(), l = T(0), c = T(0), d = T(0), m = T(0), v = U(), p = U(), I = T(!1), w = T(!1), R = T(!1);\n return k(\n x(\n t,\n B(({ scrollTop: h }) => h)\n ),\n e\n ), k(\n x(\n t,\n B(({ scrollHeight: h }) => h)\n ),\n i\n ), k(e, r), {\n deviation: n,\n fixedFooterHeight: d,\n fixedHeaderHeight: c,\n footerHeight: m,\n headerHeight: l,\n horizontalDirection: w,\n scrollBy: p,\n // input\n scrollContainerState: t,\n scrollHeight: i,\n scrollingInProgress: I,\n // signals\n scrollTo: v,\n scrollTop: e,\n skipAnimationFrameInResizeObserver: R,\n smoothScrollTargetReached: o,\n // state\n statefulScrollTop: r,\n viewportHeight: s\n };\n },\n [],\n { singleton: !0 }\n), se = { lvl: 0 };\nfunction _n(t, e) {\n const n = t.length;\n if (n === 0)\n return [];\n let { index: o, value: r } = e(t[0]);\n const s = [];\n for (let i = 1; i < n; i++) {\n const { index: l, value: c } = e(t[i]);\n s.push({ end: l - 1, start: o, value: r }), o = l, r = c;\n }\n return s.push({ end: 1 / 0, start: o, value: r }), s;\n}\nfunction J(t) {\n return t === se;\n}\nfunction ie(t, e) {\n if (!J(t))\n return e === t.k ? t.v : e < t.k ? ie(t.l, e) : ie(t.r, e);\n}\nfunction Rt(t, e, n = \"k\") {\n if (J(t))\n return [-1 / 0, void 0];\n if (Number(t[n]) === e)\n return [t.k, t.v];\n if (Number(t[n]) < e) {\n const o = Rt(t.r, e, n);\n return o[0] === -1 / 0 ? [t.k, t.v] : o;\n }\n return Rt(t.l, e, n);\n}\nfunction vt(t, e, n) {\n return J(t) ? $n(e, n, 1) : e === t.k ? dt(t, { k: e, v: n }) : e < t.k ? Sn(dt(t, { l: vt(t.l, e, n) })) : Sn(dt(t, { r: vt(t.r, e, n) }));\n}\nfunction Yt() {\n return se;\n}\nfunction Zt(t, e, n) {\n if (J(t))\n return [];\n const o = Rt(t, e)[0];\n return Oo(Pe(t, o, n));\n}\nfunction We(t, e) {\n if (J(t))\n return se;\n const { k: n, l: o, r } = t;\n if (e === n) {\n if (J(o))\n return r;\n if (J(r))\n return o;\n const [s, i] = Dn(o);\n return xe(dt(t, { k: s, l: Nn(o), v: i }));\n }\n return e < n ? xe(dt(t, { l: We(o, e) })) : xe(dt(t, { r: We(r, e) }));\n}\nfunction Nt(t) {\n return J(t) ? [] : [...Nt(t.l), { k: t.k, v: t.v }, ...Nt(t.r)];\n}\nfunction Pe(t, e, n) {\n if (J(t))\n return [];\n const { k: o, l: r, r: s, v: i } = t;\n let l = [];\n return o > e && (l = l.concat(Pe(r, e, n))), o >= e && o <= n && l.push({ k: o, v: i }), o <= n && (l = l.concat(Pe(s, e, n))), l;\n}\nfunction xe(t) {\n const { l: e, lvl: n, r: o } = t;\n if (o.lvl >= n - 1 && e.lvl >= n - 1)\n return t;\n if (n > o.lvl + 1) {\n if (Be(e))\n return Un(dt(t, { lvl: n - 1 }));\n if (!J(e) && !J(e.r))\n return dt(e.r, {\n l: dt(e, { r: e.r.l }),\n lvl: n,\n r: dt(t, {\n l: e.r.r,\n lvl: n - 1\n })\n });\n throw new Error(\"Unexpected empty nodes\");\n }\n if (Be(t))\n return Ge(dt(t, { lvl: n - 1 }));\n if (!J(o) && !J(o.l)) {\n const r = o.l, s = Be(r) ? o.lvl - 1 : o.lvl;\n return dt(r, {\n l: dt(t, {\n lvl: n - 1,\n r: r.l\n }),\n lvl: r.lvl + 1,\n r: Ge(dt(o, { l: r.r, lvl: s }))\n });\n }\n throw new Error(\"Unexpected empty nodes\");\n}\nfunction dt(t, e) {\n return $n(\n e.k !== void 0 ? e.k : t.k,\n e.v !== void 0 ? e.v : t.v,\n e.lvl !== void 0 ? e.lvl : t.lvl,\n e.l !== void 0 ? e.l : t.l,\n e.r !== void 0 ? e.r : t.r\n );\n}\nfunction Nn(t) {\n return J(t.r) ? t.l : xe(dt(t, { r: Nn(t.r) }));\n}\nfunction Be(t) {\n return J(t) || t.lvl > t.r.lvl;\n}\nfunction Dn(t) {\n return J(t.r) ? [t.k, t.v] : Dn(t.r);\n}\nfunction $n(t, e, n, o = se, r = se) {\n return { k: t, l: o, lvl: n, r, v: e };\n}\nfunction Sn(t) {\n return Ge(Un(t));\n}\nfunction Un(t) {\n const { l: e } = t;\n return !J(e) && e.lvl === t.lvl ? dt(e, { r: dt(t, { l: e.r }) }) : t;\n}\nfunction Ge(t) {\n const { lvl: e, r: n } = t;\n return !J(n) && !J(n.r) && n.lvl === e && n.r.lvl === e ? dt(n, { l: dt(t, { r: n.l }), lvl: e + 1 }) : t;\n}\nfunction Oo(t) {\n return _n(t, ({ k: e, v: n }) => ({ index: e, value: n }));\n}\nfunction Kn(t, e) {\n return !!(t && t.startIndex === e.startIndex && t.endIndex === e.endIndex);\n}\nfunction le(t, e) {\n return !!(t && t[0] === e[0] && t[1] === e[1]);\n}\nconst Ue = j(\n () => ({ recalcInProgress: T(!1) }),\n [],\n { singleton: !0 }\n);\nfunction jn(t, e, n) {\n return t[Te(t, e, n)];\n}\nfunction Te(t, e, n, o = 0) {\n let r = t.length - 1;\n for (; o <= r; ) {\n const s = Math.floor((o + r) / 2), i = t[s], l = n(i, e);\n if (l === 0)\n return s;\n if (l === -1) {\n if (r - o < 2)\n return s - 1;\n r = s - 1;\n } else {\n if (r === o)\n return s;\n o = s + 1;\n }\n }\n throw new Error(`Failed binary finding record in array - ${t.join(\",\")}, searched for ${e}`);\n}\nfunction ko(t, e, n, o) {\n const r = Te(t, e, o), s = Te(t, n, o, r);\n return t.slice(r, s + 1);\n}\nfunction Ht(t, e) {\n return Math.round(t.getBoundingClientRect()[e]);\n}\nfunction be(t) {\n return !J(t.groupOffsetTree);\n}\nfunction Ke({ index: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction zo() {\n return {\n groupIndices: [],\n groupOffsetTree: Yt(),\n lastIndex: 0,\n lastOffset: 0,\n lastSize: 0,\n offsetTree: [],\n sizeTree: Yt()\n };\n}\nfunction Fo(t, e) {\n let n = J(t) ? 0 : 1 / 0;\n for (const o of e) {\n const { endIndex: r, size: s, startIndex: i } = o;\n if (n = Math.min(n, i), J(t)) {\n t = vt(t, 0, s);\n continue;\n }\n const l = Zt(t, i - 1, r + 1);\n if (l.some(_o(o)))\n continue;\n let c = !1, d = !1;\n for (const { end: m, start: v, value: p } of l)\n c ? (r >= v || s === p) && (t = We(t, v)) : (d = p !== s, c = !0), m > r && r >= v && p !== s && (t = vt(t, r + 1, p));\n d && (t = vt(t, i, s));\n }\n return [t, n];\n}\nfunction Vo(t) {\n return typeof t.groupIndex < \"u\";\n}\nfunction Wo({ offset: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction ce(t, e, n) {\n if (e.length === 0)\n return 0;\n const { index: o, offset: r, size: s } = jn(e, t, Ke), i = t - o, l = s * i + (i - 1) * n + r;\n return l > 0 ? l + n : l;\n}\nfunction qn(t, e) {\n if (!be(e))\n return t;\n let n = 0;\n for (; e.groupIndices[n] <= t + n; )\n n++;\n return t + n;\n}\nfunction Yn(t, e, n) {\n if (Vo(t))\n return e.groupIndices[t.groupIndex] + 1;\n const o = t.index === \"LAST\" ? n : t.index;\n let r = qn(o, e);\n return r = Math.max(0, r, Math.min(n, r)), r;\n}\nfunction Po(t, e, n, o = 0) {\n return o > 0 && (e = Math.max(e, jn(t, o, Ke).offset)), _n(ko(t, e, n, Wo), Mo);\n}\nfunction Go(t, [e, n, o, r]) {\n e.length > 0 && o(\"received item sizes\", e, ft.DEBUG);\n const s = t.sizeTree;\n let i = s, l = 0;\n if (n.length > 0 && J(s) && e.length === 2) {\n const p = e[0].size, I = e[1].size;\n i = n.reduce((w, R) => vt(vt(w, R, p), R + 1, I), i);\n } else\n [i, l] = Fo(i, e);\n if (i === s)\n return t;\n const { lastIndex: c, lastOffset: d, lastSize: m, offsetTree: v } = Ae(t.offsetTree, l, i, r);\n return {\n groupIndices: n,\n groupOffsetTree: n.reduce((p, I) => vt(p, I, ce(I, v, r)), Yt()),\n lastIndex: c,\n lastOffset: d,\n lastSize: m,\n offsetTree: v,\n sizeTree: i\n };\n}\nfunction Ao(t) {\n return Nt(t).map(({ k: e, v: n }, o, r) => {\n const s = r[o + 1];\n return { endIndex: s !== void 0 ? s.k - 1 : 1 / 0, size: n, startIndex: e };\n });\n}\nfunction xn(t, e) {\n let n = 0, o = 0;\n for (; n < t; )\n n += e[o + 1] - e[o] - 1, o++;\n return o - (n === t ? 0 : 1);\n}\nfunction Ae(t, e, n, o) {\n let r = t, s = 0, i = 0, l = 0, c = 0;\n if (e !== 0) {\n c = Te(r, e - 1, Ke), l = r[c].offset;\n const m = Rt(n, e - 1);\n s = m[0], i = m[1], r.length && r[c].size === Rt(n, e)[1] && (c -= 1), r = r.slice(0, c + 1);\n } else\n r = [];\n for (const { start: d, value: m } of Zt(n, e, 1 / 0)) {\n const v = d - s, p = v * i + l + v * o;\n r.push({\n index: d,\n offset: p,\n size: m\n }), s = d, l = p, i = m;\n }\n return {\n lastIndex: s,\n lastOffset: l,\n lastSize: i,\n offsetTree: r\n };\n}\nfunction Mo(t) {\n return { index: t.index, value: t };\n}\nfunction _o(t) {\n const { endIndex: e, size: n, startIndex: o } = t;\n return (r) => r.start === o && (r.end === e || r.end === 1 / 0) && r.value === n;\n}\nconst No = {\n offsetHeight: \"height\",\n offsetWidth: \"width\"\n}, kt = j(\n ([{ log: t }, { recalcInProgress: e }]) => {\n const n = U(), o = U(), r = ht(o, 0), s = U(), i = U(), l = T(0), c = T([]), d = T(void 0), m = T(void 0), v = T(void 0), p = T(void 0), I = T((u, g) => Ht(u, No[g])), w = T(void 0), R = T(0), h = zo(), f = ht(\n x(n, $(c, t, R), Lt(Go, h), nt()),\n h\n ), a = ht(\n x(\n c,\n nt(),\n Lt((u, g) => ({ current: g, prev: u.current }), {\n current: [],\n prev: []\n }),\n B(({ prev: u }) => u)\n ),\n []\n );\n k(\n x(\n c,\n P((u) => u.length > 0),\n $(f, R),\n B(([u, g, C]) => {\n const z = u.reduce((L, V, N) => vt(L, V, ce(V, g.offsetTree, C) || N), Yt());\n return {\n ...g,\n groupIndices: u,\n groupOffsetTree: z\n };\n })\n ),\n f\n ), k(\n x(\n o,\n $(f),\n P(([u, { lastIndex: g }]) => u < g),\n B(([u, { lastIndex: g, lastSize: C }]) => [\n {\n endIndex: g,\n size: C,\n startIndex: u\n }\n ])\n ),\n n\n ), k(d, m);\n const S = ht(\n x(\n d,\n B((u) => u === void 0)\n ),\n !0\n );\n k(\n x(\n m,\n P((u) => u !== void 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = it(v), C = it(c).length > 0;\n return g !== void 0 && g !== 0 ? C ? [\n { endIndex: 0, size: g, startIndex: 0 },\n { endIndex: 1, size: u, startIndex: 1 }\n ] : [] : [{ endIndex: 0, size: u, startIndex: 0 }];\n })\n ),\n n\n ), k(\n x(\n p,\n P((u) => u !== void 0 && u.length > 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = [];\n let C = u[0], z = 0;\n for (let L = 1; L < u.length; L++) {\n const V = u[L];\n V !== C && (g.push({\n endIndex: L - 1,\n size: C,\n startIndex: z\n }), C = V, z = L);\n }\n return g.push({\n endIndex: u.length - 1,\n size: C,\n startIndex: z\n }), g;\n })\n ),\n n\n ), k(\n x(\n c,\n $(v, m),\n P(([, u, g]) => u !== void 0 && g !== void 0),\n B(([u, g, C]) => {\n const z = [];\n for (let L = 0; L < u.length; L++) {\n const V = u[L], N = u[L + 1];\n z.push({\n startIndex: V,\n endIndex: V,\n size: g\n }), N !== void 0 && z.push({\n startIndex: V + 1,\n endIndex: N - 1,\n size: C\n });\n }\n return z;\n })\n ),\n n\n );\n const H = Tt(\n x(\n n,\n $(f),\n Lt(\n ({ sizes: u }, [g, C]) => ({\n changed: C !== u,\n sizes: C\n }),\n { changed: !1, sizes: h }\n ),\n B((u) => u.changed)\n )\n );\n Y(\n x(\n l,\n Lt(\n (u, g) => ({ diff: u.prev - g, prev: g }),\n { diff: 0, prev: 0 }\n ),\n B((u) => u.diff)\n ),\n (u) => {\n const { groupIndices: g } = it(f);\n if (u > 0)\n _(e, !0), _(s, u + xn(u, g));\n else if (u < 0) {\n const C = it(a);\n C.length > 0 && (u -= xn(-u, C)), _(i, u);\n }\n }\n ), Y(x(l, $(t)), ([u, g]) => {\n u < 0 && g(\n \"`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value\",\n { firstItemIndex: l },\n ft.ERROR\n );\n });\n const y = Tt(s);\n k(\n x(\n s,\n $(f),\n B(([u, g]) => {\n const C = g.groupIndices.length > 0, z = [], L = g.lastSize;\n if (C) {\n const V = ie(g.sizeTree, 0);\n let N = 0, Z = 0;\n for (; N < u; ) {\n const q = g.groupIndices[Z], Q = g.groupIndices.length === Z + 1 ? 1 / 0 : g.groupIndices[Z + 1] - q - 1;\n z.push({\n endIndex: q,\n size: V,\n startIndex: q\n }), z.push({\n endIndex: q + 1 + Q - 1,\n size: L,\n startIndex: q + 1\n }), Z++, N += Q + 1;\n }\n const F = Nt(g.sizeTree);\n return N !== u && F.shift(), F.reduce(\n (q, { k: Q, v: gt }) => {\n let ut = q.ranges;\n return q.prevSize !== 0 && (ut = [\n ...q.ranges,\n {\n endIndex: Q + u - 1,\n size: q.prevSize,\n startIndex: q.prevIndex\n }\n ]), {\n prevIndex: Q + u,\n prevSize: gt,\n ranges: ut\n };\n },\n {\n prevIndex: u,\n prevSize: 0,\n ranges: z\n }\n ).ranges;\n }\n return Nt(g.sizeTree).reduce(\n (V, { k: N, v: Z }) => ({\n prevIndex: N + u,\n prevSize: Z,\n ranges: [...V.ranges, { endIndex: N + u - 1, size: V.prevSize, startIndex: V.prevIndex }]\n }),\n {\n prevIndex: 0,\n prevSize: L,\n ranges: []\n }\n ).ranges;\n })\n ),\n n\n );\n const O = Tt(\n x(\n i,\n $(f, R),\n B(([u, { offsetTree: g }, C]) => {\n const z = -u;\n return ce(z, g, C);\n })\n )\n );\n return k(\n x(\n i,\n $(f, R),\n B(([u, g, C]) => {\n if (g.groupIndices.length > 0) {\n if (J(g.sizeTree))\n return g;\n let V = Yt();\n const N = it(a);\n let Z = 0, F = 0, mt = 0;\n for (; Z < -u; ) {\n mt = N[F];\n const Q = N[F + 1] - mt - 1;\n F++, Z += Q + 1;\n }\n if (V = Nt(g.sizeTree).reduce((Q, { k: gt, v: ut }) => vt(Q, Math.max(0, gt + u), ut), V), Z !== -u) {\n const Q = ie(g.sizeTree, mt);\n V = vt(V, 0, Q);\n const gt = Rt(g.sizeTree, -u + 1)[1];\n V = vt(V, 1, gt);\n }\n return {\n ...g,\n sizeTree: V,\n ...Ae(g.offsetTree, 0, V, C)\n };\n }\n const L = Nt(g.sizeTree).reduce((V, { k: N, v: Z }) => vt(V, Math.max(0, N + u), Z), Yt());\n return {\n ...g,\n sizeTree: L,\n ...Ae(g.offsetTree, 0, L, C)\n };\n })\n ),\n f\n ), {\n beforeUnshiftWith: y,\n // input\n data: w,\n defaultItemSize: m,\n firstItemIndex: l,\n fixedItemSize: d,\n fixedGroupSize: v,\n gap: R,\n groupIndices: c,\n heightEstimates: p,\n itemSize: I,\n listRefresh: H,\n shiftWith: i,\n shiftWithOffset: O,\n sizeRanges: n,\n // output\n sizes: f,\n statefulTotalCount: r,\n totalCount: o,\n trackItemSizes: S,\n unshiftWith: s\n };\n },\n rt(Gt, Ue),\n { singleton: !0 }\n);\nfunction Do(t) {\n return t.reduce(\n (e, n) => (e.groupIndices.push(e.totalCount), e.totalCount += n + 1, e),\n {\n groupIndices: [],\n totalCount: 0\n }\n );\n}\nconst Zn = j(\n ([{ groupIndices: t, sizes: e, totalCount: n }, { headerHeight: o, scrollTop: r }]) => {\n const s = U(), i = U(), l = Tt(x(s, B(Do)));\n return k(\n x(\n l,\n B((c) => c.totalCount)\n ),\n n\n ), k(\n x(\n l,\n B((c) => c.groupIndices)\n ),\n t\n ), k(\n x(\n at(r, e, o),\n P(([c, d]) => be(d)),\n B(([c, d, m]) => Rt(d.groupOffsetTree, Math.max(c - m, 0), \"v\")[0]),\n nt(),\n B((c) => [c])\n ),\n i\n ), { groupCounts: s, topItemsIndexes: i };\n },\n rt(kt, It)\n), At = j(\n ([{ log: t }]) => {\n const e = T(!1), n = Tt(\n x(\n e,\n P((o) => o),\n nt()\n )\n );\n return Y(e, (o) => {\n o && it(t)(\"props updated\", {}, ft.DEBUG);\n }), { didMount: n, propsReady: e };\n },\n rt(Gt),\n { singleton: !0 }\n), $o = typeof document < \"u\" && \"scrollBehavior\" in document.documentElement.style;\nfunction Xn(t) {\n const e = typeof t == \"number\" ? { index: t } : t;\n return e.align || (e.align = \"start\"), (!e.behavior || !$o) && (e.behavior = \"auto\"), e.offset === void 0 && (e.offset = 0), e;\n}\nconst fe = j(\n ([\n { gap: t, listRefresh: e, sizes: n, totalCount: o },\n {\n fixedFooterHeight: r,\n fixedHeaderHeight: s,\n footerHeight: i,\n headerHeight: l,\n scrollingInProgress: c,\n scrollTo: d,\n smoothScrollTargetReached: m,\n viewportHeight: v\n },\n { log: p }\n ]) => {\n const I = U(), w = U(), R = T(0);\n let h = null, f = null, a = null;\n function S() {\n h !== null && (h(), h = null), a !== null && (a(), a = null), f && (clearTimeout(f), f = null), _(c, !1);\n }\n return k(\n x(\n I,\n $(n, v, o, R, l, i, p),\n $(t, s, r),\n B(\n ([\n [H, y, O, u, g, C, z, L],\n V,\n N,\n Z\n ]) => {\n const F = Xn(H), { align: mt, behavior: q, offset: Q } = F, gt = u - 1, ut = Yn(F, y, gt);\n let St = ce(ut, y.offsetTree, V) + C;\n mt === \"end\" ? (St += N + Rt(y.sizeTree, ut)[1] - O + Z, ut === gt && (St += z)) : mt === \"center\" ? St += (N + Rt(y.sizeTree, ut)[1] - O + Z) / 2 : St -= g, Q !== void 0 && Q !== 0 && (St += Q);\n const Ft = (pt) => {\n S(), pt ? (L(\"retrying to scroll to\", { location: H }, ft.DEBUG), _(I, H)) : (_(w, !0), L(\"list did not change, scroll successful\", {}, ft.DEBUG));\n };\n if (S(), q === \"smooth\") {\n let pt = !1;\n a = Y(e, (jt) => {\n pt = pt || jt;\n }), h = yt(m, () => {\n Ft(pt);\n });\n } else\n h = yt(x(e, Uo(150)), Ft);\n return f = setTimeout(() => {\n S();\n }, 1200), _(c, !0), L(\"scrolling from index to\", { behavior: q, index: ut, top: St }, ft.DEBUG), { behavior: q, top: St };\n }\n )\n ),\n d\n ), {\n scrollTargetReached: w,\n scrollToIndex: I,\n topListHeight: R\n };\n },\n rt(kt, It, Gt),\n { singleton: !0 }\n);\nfunction Uo(t) {\n return (e) => {\n const n = setTimeout(() => {\n e(!1);\n }, t);\n return (o) => {\n o && (e(!0), clearTimeout(n));\n };\n };\n}\nfunction je(t, e) {\n t === 0 ? e() : requestAnimationFrame(() => {\n je(t - 1, e);\n });\n}\nfunction qe(t, e) {\n const n = e - 1;\n return typeof t == \"number\" ? t : t.index === \"LAST\" ? n : t.index;\n}\nconst me = j(\n ([{ defaultItemSize: t, listRefresh: e, sizes: n }, { scrollTop: o }, { scrollTargetReached: r, scrollToIndex: s }, { didMount: i }]) => {\n const l = T(!0), c = T(0), d = T(!0);\n return k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n l\n ), k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n d\n ), Y(\n x(\n at(e, i),\n $(l, n, t, d),\n P(([[, m], v, { sizeTree: p }, I, w]) => m && (!J(p) || _e(I)) && !v && !w),\n $(c)\n ),\n ([, m]) => {\n yt(r, () => {\n _(d, !0);\n }), je(4, () => {\n yt(o, () => {\n _(l, !0);\n }), _(s, m);\n });\n }\n ), {\n initialItemFinalLocationReached: d,\n initialTopMostItemIndex: c,\n scrolledToInitialItem: l\n };\n },\n rt(kt, It, fe, At),\n { singleton: !0 }\n);\nfunction Jn(t, e) {\n return Math.abs(t - e) < 1.01;\n}\nconst ue = \"up\", ne = \"down\", Ko = \"none\", jo = {\n atBottom: !1,\n notAtBottomBecause: \"NOT_SHOWING_LAST_ITEM\",\n state: {\n offsetBottom: 0,\n scrollHeight: 0,\n scrollTop: 0,\n viewportHeight: 0\n }\n}, qo = 0, pe = j(([{ footerHeight: t, headerHeight: e, scrollBy: n, scrollContainerState: o, scrollTop: r, viewportHeight: s }]) => {\n const i = T(!1), l = T(!0), c = U(), d = U(), m = T(4), v = T(qo), p = ht(\n x(\n Fe(x(W(r), Ut(1), Bt(!0)), x(W(r), Ut(1), Bt(!1), pn(100))),\n nt()\n ),\n !1\n ), I = ht(\n x(Fe(x(n, Bt(!0)), x(n, Bt(!1), pn(200))), nt()),\n !1\n );\n k(\n x(\n at(W(r), W(v)),\n B(([a, S]) => a <= S),\n nt()\n ),\n l\n ), k(x(l, zt(50)), d);\n const w = Tt(\n x(\n at(o, W(s), W(e), W(t), W(m)),\n Lt((a, [{ scrollHeight: S, scrollTop: H }, y, O, u, g]) => {\n const C = H + y - S > -g, z = {\n scrollHeight: S,\n scrollTop: H,\n viewportHeight: y\n };\n if (C) {\n let V, N;\n return H > a.state.scrollTop ? (V = \"SCROLLED_DOWN\", N = a.state.scrollTop - H) : (V = \"SIZE_DECREASED\", N = a.state.scrollTop - H || a.scrollTopDelta), {\n atBottom: !0,\n atBottomBecause: V,\n scrollTopDelta: N,\n state: z\n };\n }\n let L;\n return z.scrollHeight > a.state.scrollHeight ? L = \"SIZE_INCREASED\" : y < a.state.viewportHeight ? L = \"VIEWPORT_HEIGHT_DECREASING\" : H < a.state.scrollTop ? L = \"SCROLLING_UPWARDS\" : L = \"NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM\", {\n atBottom: !1,\n notAtBottomBecause: L,\n state: z\n };\n }, jo),\n nt((a, S) => a !== void 0 && a.atBottom === S.atBottom)\n )\n ), R = ht(\n x(\n o,\n Lt(\n (a, { scrollHeight: S, scrollTop: H, viewportHeight: y }) => {\n if (!Jn(a.scrollHeight, S)) {\n const O = S - (H + y) < 1;\n return a.scrollTop !== H && O ? {\n changed: !0,\n jump: a.scrollTop - H,\n scrollHeight: S,\n scrollTop: H\n } : {\n changed: !0,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n }\n return {\n changed: !1,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n },\n { changed: !1, jump: 0, scrollHeight: 0, scrollTop: 0 }\n ),\n P((a) => a.changed),\n B((a) => a.jump)\n ),\n 0\n );\n k(\n x(\n w,\n B((a) => a.atBottom)\n ),\n i\n ), k(x(i, zt(50)), c);\n const h = T(ne);\n k(\n x(\n o,\n B(({ scrollTop: a }) => a),\n nt(),\n Lt(\n (a, S) => it(I) ? { direction: a.direction, prevScrollTop: S } : { direction: S < a.prevScrollTop ? ue : ne, prevScrollTop: S },\n { direction: ne, prevScrollTop: 0 }\n ),\n B((a) => a.direction)\n ),\n h\n ), k(x(o, zt(50), Bt(Ko)), h);\n const f = T(0);\n return k(\n x(\n p,\n P((a) => !a),\n Bt(0)\n ),\n f\n ), k(\n x(\n r,\n zt(100),\n $(p),\n P(([a, S]) => S),\n Lt(([a, S], [H]) => [S, H], [0, 0]),\n B(([a, S]) => S - a)\n ),\n f\n ), {\n atBottomState: w,\n atBottomStateChange: c,\n atBottomThreshold: m,\n atTopStateChange: d,\n atTopThreshold: v,\n isAtBottom: i,\n isAtTop: l,\n isScrolling: p,\n lastJumpDueToItemResize: R,\n scrollDirection: h,\n scrollVelocity: f\n };\n}, rt(It)), ae = \"top\", de = \"bottom\", vn = \"none\";\nfunction Tn(t, e, n) {\n return typeof t == \"number\" ? n === ue && e === ae || n === ne && e === de ? t : 0 : n === ue ? e === ae ? t.main : t.reverse : e === de ? t.main : t.reverse;\n}\nfunction Cn(t, e) {\n return typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Ye = j(\n ([{ deviation: t, fixedHeaderHeight: e, headerHeight: n, scrollTop: o, viewportHeight: r }]) => {\n const s = U(), i = T(0), l = T(0), c = T(0), d = ht(\n x(\n at(\n W(o),\n W(r),\n W(n),\n W(s, le),\n W(c),\n W(i),\n W(e),\n W(t),\n W(l)\n ),\n B(\n ([\n m,\n v,\n p,\n [I, w],\n R,\n h,\n f,\n a,\n S\n ]) => {\n const H = m - a, y = h + f, O = Math.max(p - H, 0);\n let u = vn;\n const g = Cn(S, ae), C = Cn(S, de);\n return I -= a, I += p + f, w += p + f, w -= a, I > m + y - g && (u = ue), w < m - O + v + C && (u = ne), u !== vn ? [\n Math.max(H - p - Tn(R, ae, u) - g, 0),\n H - O - f + v + Tn(R, de, u) + C\n ] : null;\n }\n ),\n P((m) => m !== null),\n nt(le)\n ),\n [0, 0]\n );\n return {\n increaseViewportBy: l,\n // input\n listBoundary: s,\n overscan: c,\n topListHeight: i,\n // output\n visibleRange: d\n };\n },\n rt(It),\n { singleton: !0 }\n);\nfunction Yo(t, e, n) {\n if (be(e)) {\n const o = qn(t, e);\n return [\n { index: Rt(e.groupOffsetTree, o)[0], offset: 0, size: 0 },\n { data: n?.[0], index: o, offset: 0, size: 0 }\n ];\n }\n return [{ data: n?.[0], index: t, offset: 0, size: 0 }];\n}\nconst Le = {\n bottom: 0,\n firstItemIndex: 0,\n items: [],\n offsetBottom: 0,\n offsetTop: 0,\n top: 0,\n topItems: [],\n topListHeight: 0,\n totalCount: 0\n};\nfunction ve(t, e, n, o, r, s) {\n const { lastIndex: i, lastOffset: l, lastSize: c } = r;\n let d = 0, m = 0;\n if (t.length > 0) {\n d = t[0].offset;\n const R = t[t.length - 1];\n m = R.offset + R.size;\n }\n const v = n - i, p = l + v * c + (v - 1) * o, I = d, w = p - m;\n return {\n bottom: m,\n firstItemIndex: s,\n items: wn(t, r, s),\n offsetBottom: w,\n offsetTop: d,\n top: I,\n topItems: wn(e, r, s),\n topListHeight: e.reduce((R, h) => h.size + R, 0),\n totalCount: n\n };\n}\nfunction Qn(t, e, n, o, r, s) {\n let i = 0;\n if (n.groupIndices.length > 0)\n for (const m of n.groupIndices) {\n if (m - i >= t)\n break;\n i++;\n }\n const l = t + i, c = qe(e, l), d = Array.from({ length: l }).map((m, v) => ({\n data: s[v + c],\n index: v + c,\n offset: 0,\n size: 0\n }));\n return ve(d, [], l, r, n, o);\n}\nfunction wn(t, e, n) {\n if (t.length === 0)\n return [];\n if (!be(e))\n return t.map((d) => ({ ...d, index: d.index + n, originalIndex: d.index }));\n const o = t[0].index, r = t[t.length - 1].index, s = [], i = Zt(e.groupOffsetTree, o, r);\n let l, c = 0;\n for (const d of t) {\n (!l || l.end < d.index) && (l = i.shift(), c = e.groupIndices.indexOf(l.start));\n let m;\n d.index === l.start ? m = {\n index: c,\n type: \"group\"\n } : m = {\n groupIndex: c,\n index: d.index - (c + 1) + n\n }, s.push({\n ...m,\n data: d.data,\n offset: d.offset,\n originalIndex: d.index,\n size: d.size\n });\n }\n return s;\n}\nfunction yn(t, e) {\n return t === void 0 ? 0 : typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Kt = j(\n ([\n { data: t, firstItemIndex: e, gap: n, sizes: o, totalCount: r },\n s,\n { listBoundary: i, topListHeight: l, visibleRange: c },\n { initialTopMostItemIndex: d, scrolledToInitialItem: m },\n { topListHeight: v },\n p,\n { didMount: I },\n { recalcInProgress: w }\n ]) => {\n const R = T([]), h = T(0), f = U(), a = T(0);\n k(s.topItemsIndexes, R);\n const S = ht(\n x(\n at(\n I,\n w,\n W(c, le),\n W(r),\n W(o),\n W(d),\n m,\n W(R),\n W(e),\n W(n),\n W(a),\n t\n ),\n P(([u, g, , C, , , , , , , , z]) => {\n const L = z !== void 0 && z.length !== C;\n return u && !g && !L;\n }),\n B(\n ([\n ,\n ,\n [u, g],\n C,\n z,\n L,\n V,\n N,\n Z,\n F,\n mt,\n q\n ]) => {\n const Q = z, { offsetTree: gt, sizeTree: ut } = Q, St = it(h);\n if (C === 0)\n return { ...Le, totalCount: C };\n if (u === 0 && g === 0)\n return St === 0 ? { ...Le, totalCount: C } : Qn(St, L, z, Z, F, q || []);\n if (J(ut))\n return St > 0 ? null : ve(\n Yo(qe(L, C), Q, q),\n [],\n C,\n F,\n Q,\n Z\n );\n const Ft = [];\n if (N.length > 0) {\n const D = N[0], K = N[N.length - 1];\n let st = 0;\n for (const tt of Zt(ut, D, K)) {\n const X = tt.value, lt = Math.max(tt.start, D), xt = Math.min(tt.end, K);\n for (let ct = lt; ct <= xt; ct++)\n Ft.push({ data: q?.[ct], index: ct, offset: st, size: X }), st += X;\n }\n }\n if (!V)\n return ve([], Ft, C, F, Q, Z);\n const pt = N.length > 0 ? N[N.length - 1] + 1 : 0, jt = Po(gt, u, g, pt);\n if (jt.length === 0)\n return null;\n const Qt = C - 1, Et = ye([], (D) => {\n for (const K of jt) {\n const st = K.value;\n let tt = st.offset, X = K.start;\n const lt = st.size;\n if (st.offset < u) {\n X += Math.floor((u - st.offset + F) / (lt + F));\n const ct = X - K.start;\n tt += ct * lt + ct * F;\n }\n X < pt && (tt += (pt - X) * lt, X = pt);\n const xt = Math.min(K.end, Qt);\n for (let ct = X; ct <= xt && !(tt >= g); ct++)\n D.push({ data: q?.[ct], index: ct, offset: tt, size: lt }), tt += lt + F;\n }\n }), te = yn(mt, ae), b = yn(mt, de);\n if (Et.length > 0 && (te > 0 || b > 0)) {\n const D = Et[0], K = Et[Et.length - 1];\n if (te > 0 && D.index > pt) {\n const st = Math.min(te, D.index - pt), tt = [];\n let X = D.offset;\n for (let lt = D.index - 1; lt >= D.index - st; lt--) {\n const ct = Zt(ut, lt, lt)[0]?.value ?? D.size;\n X -= ct + F, tt.unshift({ data: q?.[lt], index: lt, offset: X, size: ct });\n }\n Et.unshift(...tt);\n }\n if (b > 0 && K.index < Qt) {\n const st = Math.min(b, Qt - K.index);\n let tt = K.offset + K.size + F;\n for (let X = K.index + 1; X <= K.index + st; X++) {\n const xt = Zt(ut, X, X)[0]?.value ?? K.size;\n Et.push({ data: q?.[X], index: X, offset: tt, size: xt }), tt += xt + F;\n }\n }\n }\n return ve(Et, Ft, C, F, Q, Z);\n }\n ),\n //@ts-expect-error filter needs to be fixed\n P((u) => u !== null),\n nt()\n ),\n Le\n );\n k(\n x(\n t,\n P(_e),\n B((u) => u?.length)\n ),\n r\n ), k(\n x(\n S,\n B((u) => u.topListHeight)\n ),\n v\n ), k(v, l), k(\n x(\n S,\n B((u) => [u.top, u.bottom])\n ),\n i\n ), k(\n x(\n S,\n B((u) => u.items)\n ),\n f\n );\n const H = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n $(r, t),\n P(([{ items: u }, g]) => u[u.length - 1].originalIndex === g - 1),\n B(([, u, g]) => [u - 1, g]),\n nt(le),\n B(([u]) => u)\n )\n ), y = Tt(\n x(\n S,\n zt(200),\n P(({ items: u, topItems: g }) => u.length > 0 && u[0].originalIndex === g.length),\n B(({ items: u }) => u[0].index),\n nt()\n )\n ), O = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n B(({ items: u }) => {\n let g = 0, C = u.length - 1;\n for (; u[g].type === \"group\" && g < C; )\n g++;\n for (; u[C].type === \"group\" && C > g; )\n C--;\n return {\n endIndex: u[C].index,\n startIndex: u[g].index\n };\n }),\n nt(Kn)\n )\n );\n return {\n endReached: H,\n initialItemCount: h,\n itemsRendered: f,\n listState: S,\n minOverscanItemCount: a,\n rangeChanged: O,\n startReached: y,\n topItemsIndexes: R,\n ...p\n };\n },\n rt(\n kt,\n Zn,\n Ye,\n me,\n fe,\n pe,\n At,\n Ue\n ),\n { singleton: !0 }\n), to = j(\n ([{ fixedFooterHeight: t, fixedHeaderHeight: e, footerHeight: n, headerHeight: o }, { listState: r }]) => {\n const s = U(), i = ht(\n x(\n at(n, t, o, e, r),\n B(([l, c, d, m, v]) => l + c + d + m + v.offsetBottom + v.bottom)\n ),\n 0\n );\n return k(W(i), s), { totalListHeight: i, totalListHeightChanged: s };\n },\n rt(It, Kt),\n { singleton: !0 }\n), Zo = j(\n ([{ viewportHeight: t }, { totalListHeight: e }]) => {\n const n = T(!1), o = ht(\n x(\n at(n, t, e),\n P(([r]) => r),\n B(([, r, s]) => Math.max(0, r - s)),\n zt(0),\n nt()\n ),\n 0\n );\n return { alignToBottom: n, paddingTopAddition: o };\n },\n rt(It, to),\n { singleton: !0 }\n), eo = j(() => ({\n context: T(null)\n})), Xo = ({\n itemBottom: t,\n itemTop: e,\n locationParams: { align: n, behavior: o, ...r },\n viewportBottom: s,\n viewportTop: i\n}) => e < i ? { ...r, align: n ?? \"start\", ...o !== void 0 ? { behavior: o } : {} } : t > s ? { ...r, align: n ?? \"end\", ...o !== void 0 ? { behavior: o } : {} } : null, no = j(\n ([\n { gap: t, sizes: e, totalCount: n },\n { fixedFooterHeight: o, fixedHeaderHeight: r, headerHeight: s, scrollingInProgress: i, scrollTop: l, viewportHeight: c },\n { scrollToIndex: d }\n ]) => {\n const m = U();\n return k(\n x(\n m,\n $(e, c, n, s, r, o, l),\n $(t),\n B(([[v, p, I, w, R, h, f, a], S]) => {\n const { calculateViewLocation: H = Xo, done: y, ...O } = v, u = Yn(v, p, w - 1), g = ce(u, p.offsetTree, S) + R + h, C = g + Rt(p.sizeTree, u)[1], z = a + h, L = a + I - f, V = H({\n itemBottom: C,\n itemTop: g,\n locationParams: O,\n viewportBottom: L,\n viewportTop: z\n });\n return V !== null ? y && yt(\n x(\n i,\n P((N) => !N),\n // skips the initial publish of false, and the cleanup call.\n // but if scrollingInProgress is true, we skip the initial publish.\n Ut(it(i) ? 1 : 2)\n ),\n y\n ) : y?.(), V;\n }),\n P((v) => v !== null)\n ),\n d\n ), {\n scrollIntoView: m\n };\n },\n rt(kt, It, fe, Kt, Gt),\n { singleton: !0 }\n);\nfunction bn(t) {\n return t === !1 ? !1 : t === \"smooth\" ? \"smooth\" : \"auto\";\n}\nconst Jo = (t, e) => typeof t == \"function\" ? bn(t(e)) : e && bn(t), Qo = j(\n ([\n { listRefresh: t, totalCount: e, fixedItemSize: n, data: o },\n { atBottomState: r, isAtBottom: s },\n { scrollToIndex: i },\n { scrolledToInitialItem: l },\n { didMount: c, propsReady: d },\n { log: m },\n { scrollingInProgress: v },\n { context: p },\n { scrollIntoView: I }\n ]) => {\n const w = T(!1), R = U();\n let h = null;\n function f(y) {\n _(i, {\n align: \"end\",\n behavior: y,\n index: \"LAST\"\n });\n }\n Y(\n x(\n at(x(W(e), Ut(1)), c),\n $(W(w), s, l, v),\n B(([[y, O], u, g, C, z]) => {\n let L = O && C, V = \"auto\";\n return L && (V = Jo(u, g || z), L = L && V !== !1), { followOutputBehavior: V, shouldFollow: L, totalCount: y };\n }),\n P(({ shouldFollow: y }) => y)\n ),\n ({ followOutputBehavior: y, totalCount: O }) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y);\n }) : h = yt(t, () => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y), h = null;\n });\n }\n );\n function a(y) {\n const O = yt(r, (u) => {\n y && !u.atBottom && u.notAtBottomBecause === \"SIZE_INCREASED\" && h === null && (it(m)(\"scrolling to bottom due to increased size\", {}, ft.DEBUG), f(\"auto\"));\n });\n setTimeout(O, 100);\n }\n Y(\n x(\n at(W(w), e, d),\n P(([y, , O]) => y !== !1 && O),\n Lt(\n ({ value: y }, [, O]) => ({ refreshed: y === O, value: O }),\n { refreshed: !1, value: 0 }\n ),\n P(({ refreshed: y }) => y),\n $(w, e)\n ),\n ([, y]) => {\n it(l) && a(y !== !1);\n }\n ), Y(R, () => {\n a(it(w) !== !1);\n }), Y(at(W(w), r), ([y, O]) => {\n y !== !1 && !O.atBottom && O.notAtBottomBecause === \"VIEWPORT_HEIGHT_DECREASING\" && f(\"auto\");\n });\n const S = T(null), H = U();\n return k(\n Fe(\n x(\n W(o),\n B((y) => y?.length ?? 0)\n ),\n x(W(e))\n ),\n H\n ), Y(\n x(\n at(x(H, Ut(1)), c),\n $(W(S), l, v, p),\n B(([[y, O], u, g, C, z]) => O && g && u?.({ context: z, totalCount: y, scrollingInProgress: C })),\n P((y) => !!y),\n zt(0)\n ),\n (y) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"scrolling into view\", {}), _(I, y);\n }) : h = yt(t, () => {\n it(m)(\"scrolling into view\", {}), _(I, y), h = null;\n });\n }\n ), { autoscrollToBottom: R, followOutput: w, scrollIntoViewOnChange: S };\n },\n rt(\n kt,\n pe,\n fe,\n me,\n At,\n Gt,\n It,\n eo,\n no\n )\n), tr = j(\n ([{ data: t, firstItemIndex: e, gap: n, sizes: o }, { initialTopMostItemIndex: r }, { initialItemCount: s, listState: i }, { didMount: l }]) => (k(\n x(\n l,\n $(s),\n P(([, c]) => c !== 0),\n $(r, o, e, n, t),\n B(([[, c], d, m, v, p, I = []]) => Qn(c, d, m, v, p, I))\n ),\n i\n ), {}),\n rt(kt, me, Kt, At),\n { singleton: !0 }\n), er = j(\n ([{ didMount: t }, { scrollTo: e }, { listState: n }]) => {\n const o = T(0);\n return Y(\n x(\n t,\n $(o),\n P(([, r]) => r !== 0),\n B(([, r]) => ({ top: r }))\n ),\n (r) => {\n yt(\n x(\n n,\n Ut(1),\n P((s) => s.items.length > 1)\n ),\n () => {\n requestAnimationFrame(() => {\n _(e, r);\n });\n }\n );\n }\n ), {\n initialScrollTop: o\n };\n },\n rt(At, It, Kt),\n { singleton: !0 }\n), oo = j(\n ([{ scrollVelocity: t }]) => {\n const e = T(!1), n = U(), o = T(!1);\n return k(\n x(\n t,\n $(o, e, n),\n P(([r, s]) => s !== !1 && s !== void 0),\n B(([r, s, i, l]) => {\n const { enter: c, exit: d } = s;\n if (i) {\n if (d(r, l))\n return !1;\n } else if (c(r, l))\n return !0;\n return i;\n }),\n nt()\n ),\n e\n ), Y(\n x(at(e, t, n), $(o)),\n ([[r, s, i], l]) => {\n r && l !== !1 && l !== void 0 && l.change && l.change(s, i);\n }\n ), { isSeeking: e, scrollSeekConfiguration: o, scrollSeekRangeChanged: n, scrollVelocity: t };\n },\n rt(pe),\n { singleton: !0 }\n), Ze = j(([{ scrollContainerState: t, scrollTo: e }]) => {\n const n = U(), o = U(), r = U(), s = T(!1), i = T(void 0);\n return k(\n x(\n at(n, o),\n B(([{ scrollTop: l, viewportHeight: c }, { offsetTop: d, listHeight: m }]) => ({\n scrollHeight: m,\n scrollTop: Math.max(0, l - d),\n viewportHeight: c\n }))\n ),\n t\n ), k(\n x(\n e,\n $(o),\n B(([l, { offsetTop: c }]) => ({\n ...l,\n top: l.top + c\n }))\n ),\n r\n ), {\n customScrollParent: i,\n // config\n useWindowScroll: s,\n // input\n windowScrollContainerState: n,\n // signals\n windowScrollTo: r,\n windowViewportRect: o\n };\n}, rt(It)), nr = j(\n ([\n { sizeRanges: t, sizes: e },\n { headerHeight: n, scrollTop: o },\n { initialTopMostItemIndex: r },\n { didMount: s },\n { useWindowScroll: i, windowScrollContainerState: l, windowViewportRect: c }\n ]) => {\n const d = U(), m = T(void 0), v = T(null), p = T(null);\n return k(l, v), k(c, p), Y(\n x(\n d,\n $(e, o, i, v, p, n)\n ),\n ([I, w, R, h, f, a, S]) => {\n const H = Ao(w.sizeTree);\n h && f !== null && a !== null && (R = f.scrollTop - a.offsetTop), R -= S, I({ ranges: H, scrollTop: R });\n }\n ), k(x(m, P(_e), B(or)), r), k(\n x(\n s,\n $(m),\n P(([, I]) => I !== void 0),\n nt(),\n B(([, I]) => I.ranges)\n ),\n t\n ), {\n getState: d,\n restoreStateFrom: m\n };\n },\n rt(kt, It, me, At, Ze)\n);\nfunction or(t) {\n return { align: \"start\", index: 0, offset: t.scrollTop };\n}\nconst rr = j(([{ topItemsIndexes: t }]) => {\n const e = T(0);\n return k(\n x(\n e,\n P((n) => n >= 0),\n B((n) => Array.from({ length: n }).map((o, r) => r))\n ),\n t\n ), { topItemCount: e };\n}, rt(Kt));\nfunction ro(t) {\n let e = !1, n;\n return (() => (e || (e = !0, n = t()), n));\n}\nconst sr = ro(() => /iP(ad|od|hone)/i.test(navigator.userAgent) && /WebKit/i.test(navigator.userAgent)), ir = j(\n ([\n { deviation: t, scrollBy: e, scrollingInProgress: n, scrollTop: o },\n { isAtBottom: r, isScrolling: s, lastJumpDueToItemResize: i, scrollDirection: l },\n { listState: c },\n { beforeUnshiftWith: d, gap: m, shiftWithOffset: v, sizes: p },\n { log: I },\n { recalcInProgress: w }\n ]) => {\n const R = Tt(\n x(\n c,\n $(i),\n Lt(\n ([, f, a, S], [{ bottom: H, items: y, offsetBottom: O, totalCount: u }, g]) => {\n const C = H + O;\n let z = 0;\n return a === u && f.length > 0 && y.length > 0 && (y[0].originalIndex === 0 && f[0].originalIndex === 0 || (z = C - S, z !== 0 && (z += g))), [z, y, u, C];\n },\n [0, [], 0, 0]\n ),\n P(([f]) => f !== 0),\n $(o, l, n, r, I, w),\n P(([, f, a, S, , , H]) => !H && !S && f !== 0 && a === ue),\n B(([[f], , , , , a]) => (a(\"Upward scrolling compensation\", { amount: f }, ft.DEBUG), f))\n )\n );\n function h(f) {\n f > 0 ? (_(e, { behavior: \"auto\", top: -f }), _(t, 0)) : (_(t, 0), _(e, { behavior: \"auto\", top: -f }));\n }\n return Y(x(R, $(t, s)), ([f, a, S]) => {\n S && sr() ? _(t, a - f) : h(-f);\n }), Y(\n x(\n at(ht(s, !1), t, w),\n P(([f, a, S]) => !f && !S && a !== 0),\n B(([f, a]) => a),\n zt(1)\n ),\n h\n ), k(\n x(\n v,\n B((f) => ({ top: -f }))\n ),\n e\n ), Y(\n x(\n d,\n $(p, m),\n B(([f, { groupIndices: a, lastSize: S, sizeTree: H }, y]) => {\n function O(L) {\n return L * (S + y);\n }\n if (a.length === 0)\n return O(f);\n let u = 0;\n const g = ie(H, 0);\n let C = 0, z = 0;\n for (; C < f; ) {\n C++, u += g;\n let L = a.length === z + 1 ? 1 / 0 : a[z + 1] - a[z] - 1;\n C + L > f && (u -= g, L = f - C + 1), C += L, u += O(L), z++;\n }\n return u;\n })\n ),\n (f) => {\n _(t, f), requestAnimationFrame(() => {\n _(e, { top: f }), requestAnimationFrame(() => {\n _(t, 0), _(w, !1);\n });\n });\n }\n ), { deviation: t };\n },\n rt(It, pe, Kt, kt, Gt, Ue)\n), lr = j(\n ([\n t,\n e,\n n,\n o,\n r,\n s,\n i,\n l,\n c,\n d,\n m\n ]) => ({\n ...t,\n ...e,\n ...n,\n ...o,\n ...r,\n ...s,\n ...i,\n ...l,\n ...c,\n ...d,\n ...m\n }),\n rt(\n Ye,\n tr,\n At,\n oo,\n to,\n er,\n Zo,\n Ze,\n no,\n Gt,\n eo\n )\n), so = j(\n ([\n {\n data: t,\n defaultItemSize: e,\n firstItemIndex: n,\n fixedItemSize: o,\n fixedGroupSize: r,\n gap: s,\n groupIndices: i,\n heightEstimates: l,\n itemSize: c,\n sizeRanges: d,\n sizes: m,\n statefulTotalCount: v,\n totalCount: p,\n trackItemSizes: I\n },\n { initialItemFinalLocationReached: w, initialTopMostItemIndex: R, scrolledToInitialItem: h },\n f,\n a,\n S,\n H,\n { scrollToIndex: y },\n O,\n { topItemCount: u },\n { groupCounts: g },\n C\n ]) => {\n const { listState: z, minOverscanItemCount: L, topItemsIndexes: V, rangeChanged: N, ...Z } = H;\n return k(N, C.scrollSeekRangeChanged), k(\n x(\n C.windowViewportRect,\n B((F) => F.visibleHeight)\n ),\n f.viewportHeight\n ), {\n data: t,\n defaultItemHeight: e,\n firstItemIndex: n,\n fixedItemHeight: o,\n fixedGroupHeight: r,\n gap: s,\n groupCounts: g,\n heightEstimates: l,\n initialItemFinalLocationReached: w,\n initialTopMostItemIndex: R,\n scrolledToInitialItem: h,\n sizeRanges: d,\n topItemCount: u,\n topItemsIndexes: V,\n // input\n totalCount: p,\n ...S,\n groupIndices: i,\n itemSize: c,\n listState: z,\n minOverscanItemCount: L,\n scrollToIndex: y,\n // output\n statefulTotalCount: v,\n trackItemSizes: I,\n // exported from stateFlagsSystem\n rangeChanged: N,\n ...Z,\n // the bag of IO from featureGroup1System\n ...C,\n ...f,\n sizes: m,\n ...a\n };\n },\n rt(\n kt,\n me,\n It,\n nr,\n Qo,\n Kt,\n fe,\n ir,\n rr,\n Zn,\n lr\n )\n);\nfunction cr(t, e) {\n const n = {}, o = {};\n let r = 0;\n const s = t.length;\n for (; r < s; )\n o[t[r]] = 1, r += 1;\n for (const i in e)\n Object.hasOwn(o, i) || (n[i] = e[i]);\n return n;\n}\nconst Ie = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction Xe(t, e, n) {\n const o = Object.keys(e.required || {}), r = Object.keys(e.optional || {}), s = Object.keys(e.methods || {}), i = Object.keys(e.events || {}), l = E.createContext({});\n function c(f, a) {\n f.propsReady !== void 0 && _(f.propsReady, !1);\n for (const S of o) {\n const H = f[e.required[S]];\n _(H, a[S]);\n }\n for (const S of r)\n if (S in a) {\n const H = f[e.optional[S]];\n _(H, a[S]);\n }\n f.propsReady !== void 0 && _(f.propsReady, !0);\n }\n function d(f) {\n return s.reduce((a, S) => (a[S] = (H) => {\n const y = f[e.methods[S]];\n _(y, H);\n }, a), {});\n }\n function m(f) {\n return i.reduce((a, S) => (a[S] = yo(f[e.events[S]]), a), {});\n }\n const v = E.forwardRef(function(a, S) {\n const { children: H, ...y } = a, [O] = E.useState(() => ye(Ro(t), (C) => {\n c(C, y);\n })), [u] = E.useState(mn(m, O));\n Ie(() => {\n for (const C of i)\n C in y && Y(u[C], y[C]);\n return () => {\n Object.values(u).map(Ne);\n };\n }, [y, u, O]), Ie(() => {\n c(O, y);\n }), E.useImperativeHandle(S, fn(d(O)));\n const g = n;\n return /* @__PURE__ */ G(l.Provider, { value: O, children: n !== void 0 ? /* @__PURE__ */ G(g, { ...cr([...o, ...r, ...i], y), children: H }) : H });\n }), p = (f) => {\n const a = E.useContext(l);\n return E.useCallback(\n (S) => {\n _(a[f], S);\n },\n [a, f]\n );\n }, I = (f) => {\n const S = E.useContext(l)[f], H = E.useCallback(\n (y) => Y(S, y),\n [S]\n );\n return E.useSyncExternalStore(\n H,\n () => it(S),\n () => it(S)\n );\n }, w = (f) => {\n const S = E.useContext(l)[f], [H, y] = E.useState(mn(it, S));\n return Ie(\n () => Y(S, (O) => {\n O !== H && y(fn(O));\n }),\n [S, H]\n ), H;\n }, R = parseInt(E.version) >= 18 ? I : w;\n return {\n Component: v,\n useEmitter: (f, a) => {\n const H = E.useContext(l)[f];\n Ie(() => Y(H, a), [a, H]);\n },\n useEmitterValue: R,\n usePublisher: p\n };\n}\nconst Re = E.createContext(void 0), io = E.createContext(void 0), Oe = \"-webkit-sticky\", Rn = \"sticky\", Je = ro(() => {\n if (typeof document > \"u\")\n return Rn;\n const t = document.createElement(\"div\");\n return t.style.position = Oe, t.style.position === Oe ? Oe : Rn;\n}), lo = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction ke(t) {\n return \"self\" in t;\n}\nfunction ur(t) {\n return \"body\" in t;\n}\nfunction co(t, e, n, o = Jt, r, s) {\n const i = E.useRef(null), l = E.useRef(null), c = E.useRef(null), d = E.useCallback(\n (p) => {\n let I, w, R;\n const h = p.target;\n if (ur(h) || ke(h)) {\n const a = ke(h) ? h : h.defaultView;\n R = s === !0 ? _t(a, a.scrollX) : a.scrollY, I = s === !0 ? a.document.documentElement.scrollWidth : a.document.documentElement.scrollHeight, w = s === !0 ? a.innerWidth : a.innerHeight;\n } else\n R = s === !0 ? _t(h, h.scrollLeft) : h.scrollTop, I = s === !0 ? h.scrollWidth : h.scrollHeight, w = s === !0 ? h.offsetWidth : h.offsetHeight;\n const f = () => {\n t({\n scrollHeight: I,\n scrollTop: Math.max(R, 0),\n viewportHeight: w\n });\n };\n p.suppressFlushSync === !0 ? f() : So.flushSync(f), l.current !== null && (R === l.current || R <= 0 || R === I - w) && (l.current = null, e(!0), c.current && (clearTimeout(c.current), c.current = null));\n },\n [t, e, s]\n );\n E.useEffect(() => {\n const p = r || i.current;\n return hn(p), o(r || i.current), d({ suppressFlushSync: !0, target: p }), p.addEventListener(\"scroll\", d, { passive: !0 }), () => {\n hn(p), o(null), p.removeEventListener(\"scroll\", d);\n };\n }, [i, d, n, o, r]);\n function m(p) {\n const I = i.current;\n if (!I || (s === !0 ? \"offsetWidth\" in I && I.offsetWidth === 0 : \"offsetHeight\" in I && I.offsetHeight === 0))\n return;\n const w = p.behavior === \"smooth\";\n let R, h, f;\n ke(I) ? (h = Math.max(\n Ht(I.document.documentElement, s === !0 ? \"width\" : \"height\"),\n s === !0 ? I.document.documentElement.scrollWidth : I.document.documentElement.scrollHeight\n ), R = s === !0 ? I.innerWidth : I.innerHeight, f = s === !0 ? _t(I, I.scrollX) : I.scrollY) : (h = I[s === !0 ? \"scrollWidth\" : \"scrollHeight\"], R = Ht(I, s === !0 ? \"width\" : \"height\"), f = s === !0 ? _t(I, I.scrollLeft) : I.scrollTop);\n const a = h - R;\n if (p.top === void 0) {\n I.scrollTo(p);\n return;\n }\n const S = Math.ceil(Math.max(Math.min(a, p.top), 0));\n if (p.top = S, Jn(R, h) || S === f) {\n t({ scrollHeight: h, scrollTop: f, viewportHeight: R }), w && e(!0);\n return;\n }\n w ? (l.current = S, c.current && clearTimeout(c.current), c.current = setTimeout(() => {\n c.current = null, l.current = null, e(!0);\n }, 1e3)) : l.current = null, s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n left: gn(I, S)\n }), I.scrollTo(p);\n }\n function v(p) {\n s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n ...p.top !== void 0 ? { left: gn(i.current, p.top) } : {}\n }), i.current.scrollBy(p);\n }\n return { scrollByCallback: v, scrollerRef: i, scrollToCallback: m };\n}\nfunction Qe(t) {\n return t;\n}\nconst ar = /* @__PURE__ */ j(() => {\n const t = T((l) => `Item ${l}`), e = T((l) => `Group ${l}`), n = T({}), o = T(Qe), r = T(\"div\"), s = T(Jt), i = (l, c = null) => ht(\n x(\n n,\n B((d) => d[l]),\n nt()\n ),\n c\n );\n return {\n components: n,\n computeItemKey: o,\n EmptyPlaceholder: i(\"EmptyPlaceholder\"),\n FooterComponent: i(\"Footer\"),\n GroupComponent: i(\"Group\", \"div\"),\n groupContent: e,\n HeaderComponent: i(\"Header\"),\n HeaderFooterTag: r,\n ItemComponent: i(\"Item\", \"div\"),\n itemContent: t,\n ListComponent: i(\"List\", \"div\"),\n ScrollerComponent: i(\"Scroller\", \"div\"),\n scrollerRef: s,\n ScrollSeekPlaceholder: i(\"ScrollSeekPlaceholder\"),\n TopItemListComponent: i(\"TopItemList\")\n };\n}), dr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, ar)\n), fr = ({ height: t }) => /* @__PURE__ */ G(\"div\", { style: { height: t } }), mr = { overflowAnchor: \"none\", position: Je(), zIndex: 1 }, uo = { overflowAnchor: \"none\" }, pr = { ...uo, display: \"inline-block\", height: \"100%\" }, Hn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = A(\"listState\"), o = Ct(\"sizeRanges\"), r = A(\"useWindowScroll\"), s = A(\"customScrollParent\"), i = Ct(\"windowScrollContainerState\"), l = Ct(\"scrollContainerState\"), c = s || r ? i : l, d = A(\"itemContent\"), m = A(\"context\"), v = A(\"groupContent\"), p = A(\"trackItemSizes\"), I = A(\"itemSize\"), w = A(\"log\"), R = Ct(\"gap\"), h = A(\"horizontalDirection\"), { callbackRef: f } = Mn(\n o,\n I,\n p,\n e ? Jt : c,\n w,\n R,\n s,\n h,\n A(\"skipAnimationFrameInResizeObserver\")\n ), [a, S] = E.useState(0);\n on(\"deviation\", (F) => {\n a !== F && S(F);\n });\n const H = A(\"EmptyPlaceholder\"), y = A(\"ScrollSeekPlaceholder\") ?? fr, O = A(\"ListComponent\"), u = A(\"ItemComponent\"), g = A(\"GroupComponent\"), C = A(\"computeItemKey\"), z = A(\"isSeeking\"), L = A(\"groupIndices\").length > 0, V = A(\"alignToBottom\"), N = A(\"initialItemFinalLocationReached\"), Z = e ? {} : {\n boxSizing: \"border-box\",\n ...h ? {\n display: \"inline-block\",\n height: \"100%\",\n marginInlineStart: a !== 0 ? a : V ? \"auto\" : 0,\n paddingInlineEnd: n.offsetBottom,\n paddingInlineStart: n.offsetTop,\n whiteSpace: \"nowrap\"\n } : {\n marginTop: a !== 0 ? a : V ? \"auto\" : 0,\n paddingBottom: n.offsetBottom,\n paddingTop: n.offsetTop\n },\n ...N ? {} : { visibility: \"hidden\" }\n };\n return !e && n.totalCount === 0 && H !== null && H !== void 0 ? /* @__PURE__ */ G(H, { ...ot(H, m) }) : /* @__PURE__ */ G(\n O,\n {\n ...ot(O, m),\n \"data-testid\": e ? \"virtuoso-top-item-list\" : \"virtuoso-item-list\",\n ref: f,\n style: Z,\n children: (e ? n.topItems : n.items).map((F) => {\n const mt = F.originalIndex, q = C(mt + n.firstItemIndex, F.data, m);\n return z ? /* @__PURE__ */ Dt(\n y,\n {\n ...ot(y, m),\n height: F.size,\n index: F.index,\n key: q,\n type: F.type || \"item\",\n ...F.type === \"group\" ? {} : { groupIndex: F.groupIndex }\n }\n ) : F.type === \"group\" ? /* @__PURE__ */ Dt(\n g,\n {\n ...ot(g, m),\n \"data-index\": mt,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: mr\n },\n v(F.index, m)\n ) : /* @__PURE__ */ Dt(\n u,\n {\n ...ot(u, m),\n ...ao(u, F.data),\n \"data-index\": mt,\n \"data-item-group-index\": F.groupIndex,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: h ? pr : uo\n },\n L ? d(F.index, F.groupIndex, F.data, m) : d(F.index, F.data, m)\n );\n })\n }\n );\n}), hr = {\n height: \"100%\",\n outline: \"none\",\n overflowY: \"auto\",\n position: \"relative\",\n WebkitOverflowScrolling: \"touch\"\n}, gr = {\n outline: \"none\",\n overflowX: \"auto\",\n position: \"relative\"\n}, He = (t) => ({\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n width: \"100%\",\n ...t ? { display: \"flex\", flexDirection: \"column\" } : void 0\n}), tn = (t, e, n = 0) => ({\n ...He(t),\n position: e ? \"relative\" : \"absolute\",\n top: e ? -n : 0\n}), Ir = {\n position: Je(),\n top: 0,\n width: \"100%\",\n zIndex: 1\n};\nfunction ot(t, e) {\n if (typeof t != \"string\")\n return { context: e };\n}\nfunction ao(t, e) {\n return { item: typeof t == \"string\" ? void 0 : e };\n}\nconst Sr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"HeaderComponent\"), n = Ct(\"headerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), xr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"FooterComponent\"), n = Ct(\"footerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n});\nfunction en({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"scrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"scrollerRef\"), I = e(\"horizontalDirection\") || !1, { scrollByCallback: w, scrollerRef: R, scrollToCallback: h } = co(\n d,\n v,\n m,\n p,\n void 0,\n I\n );\n return t(\"scrollTo\", h), t(\"scrollBy\", w), /* @__PURE__ */ G(\n m,\n {\n \"data-testid\": \"virtuoso-scroller\",\n \"data-virtuoso-scroller\": !0,\n ref: R,\n style: { ...I ? gr : hr, ...i },\n tabIndex: 0,\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nfunction nn({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"windowScrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"totalListHeight\"), I = e(\"deviation\"), w = e(\"customScrollParent\"), R = E.useRef(null), h = e(\"scrollerRef\"), { scrollByCallback: f, scrollerRef: a, scrollToCallback: S } = co(\n d,\n v,\n m,\n h,\n w\n );\n return lo(() => (a.current = w || R.current?.ownerDocument.defaultView, () => {\n a.current = null;\n }), [a, w]), t(\"windowScrollTo\", S), t(\"scrollBy\", f), /* @__PURE__ */ G(\n m,\n {\n ref: R,\n \"data-virtuoso-scroller\": !0,\n style: { position: \"relative\", ...i, ...p !== 0 ? { height: p + I } : void 0 },\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nconst vr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"viewportHeight\"), o = Ct(\"fixedItemHeight\"), r = A(\"alignToBottom\"), s = A(\"horizontalDirection\"), i = E.useMemo(\n () => re(n, (c) => Ht(c, s ? \"width\" : \"height\")),\n [n, s]\n ), l = Ot(i, !0, A(\"skipAnimationFrameInResizeObserver\"));\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: l, style: He(r), children: t });\n}, Tr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"windowViewportRect\"), o = Ct(\"fixedItemHeight\"), r = A(\"customScrollParent\"), s = A(\"useWindowScroll\"), i = A(\"topListHeight\"), l = $e(\n n,\n r,\n A(\"skipAnimationFrameInResizeObserver\")\n ), c = A(\"alignToBottom\");\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: l, style: tn(c, s, i), children: t });\n}, Cr = ({ children: t }) => {\n const e = A(\"TopItemListComponent\") ?? \"div\", n = A(\"headerHeight\"), o = { ...Ir, marginTop: `${n}px` }, r = A(\"context\");\n return /* @__PURE__ */ G(e, { style: o, ...ot(e, r), children: t });\n}, wr = /* @__PURE__ */ E.memo(function(e) {\n const n = A(\"useWindowScroll\"), o = A(\"topItemsIndexes\").length > 0, r = A(\"customScrollParent\"), s = A(\"context\");\n return /* @__PURE__ */ $t(r || n ? br : yr, { ...e, context: s, children: [\n o && /* @__PURE__ */ G(Cr, { children: /* @__PURE__ */ G(Hn, { showTopList: !0 }) }),\n /* @__PURE__ */ $t(r || n ? Tr : vr, { children: [\n /* @__PURE__ */ G(Sr, {}),\n /* @__PURE__ */ G(Hn, {}),\n /* @__PURE__ */ G(xr, {})\n ] })\n ] });\n}), {\n Component: fo,\n useEmitter: on,\n useEmitterValue: A,\n usePublisher: Ct\n} = /* @__PURE__ */ Xe(\n dr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n scrollIntoViewOnChange: \"scrollIntoViewOnChange\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n groupCounts: \"groupCounts\",\n topItemCount: \"topItemCount\",\n firstItemIndex: \"firstItemIndex\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n heightEstimates: \"heightEstimates\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"HeaderFooterTag\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n horizontalDirection: \"horizontalDirection\",\n skipAnimationFrameInResizeObserver: \"skipAnimationFrameInResizeObserver\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n autoscrollToBottom: \"autoscrollToBottom\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n wr\n), yr = /* @__PURE__ */ en({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), br = /* @__PURE__ */ nn({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), ns = fo, os = fo, Rr = /* @__PURE__ */ j(() => {\n const t = T((d) => /* @__PURE__ */ $t(\"td\", { children: [\n \"Item $\",\n d\n ] })), e = T(null), n = T((d) => /* @__PURE__ */ $t(\"td\", { colSpan: 1e3, children: [\n \"Group \",\n d\n ] })), o = T(null), r = T(null), s = T({}), i = T(Qe), l = T(Jt), c = (d, m = null) => ht(\n x(\n s,\n B((v) => v[d]),\n nt()\n ),\n m\n );\n return {\n components: s,\n computeItemKey: i,\n context: e,\n EmptyPlaceholder: c(\"EmptyPlaceholder\"),\n FillerRow: c(\"FillerRow\"),\n fixedFooterContent: r,\n fixedHeaderContent: o,\n itemContent: t,\n groupContent: n,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\"),\n TableBodyComponent: c(\"TableBody\", \"tbody\"),\n TableComponent: c(\"Table\", \"table\"),\n TableFooterComponent: c(\"TableFoot\", \"tfoot\"),\n TableHeadComponent: c(\"TableHead\", \"thead\"),\n TableRowComponent: c(\"TableRow\", \"tr\"),\n GroupComponent: c(\"Group\", \"tr\")\n };\n}), Hr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, Rr)\n), Er = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { height: t } }) }), Br = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { border: 0, height: t, padding: 0 } }) }), Lr = { overflowAnchor: \"none\" }, En = { position: Je(), zIndex: 2, overflowAnchor: \"none\" }, Bn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = M(\"listState\"), o = M(\"computeItemKey\"), r = M(\"firstItemIndex\"), s = M(\"context\"), i = M(\"isSeeking\"), l = M(\"fixedHeaderHeight\"), c = M(\"groupIndices\").length > 0, d = M(\"itemContent\"), m = M(\"groupContent\"), v = M(\"ScrollSeekPlaceholder\") ?? Er, p = M(\"GroupComponent\"), I = M(\"TableRowComponent\"), w = (e ? n.topItems : []).reduce((h, f, a) => (a === 0 ? h.push(f.size) : h.push(h[a - 1] + f.size), h), []);\n return (e ? n.topItems : n.items).map((h) => {\n const f = h.originalIndex, a = o(f + r, h.data, s), S = e ? f === 0 ? 0 : w[f - 1] : 0;\n return i ? /* @__PURE__ */ Dt(\n v,\n {\n ...ot(v, s),\n height: h.size,\n index: h.index,\n key: a,\n type: h.type || \"item\"\n }\n ) : h.type === \"group\" ? /* @__PURE__ */ Dt(\n p,\n {\n ...ot(p, s),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n key: a,\n style: {\n ...En,\n top: l\n }\n },\n m(h.index, s)\n ) : /* @__PURE__ */ Dt(\n I,\n {\n ...ot(I, s),\n ...ao(I, h.data),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n \"data-item-group-index\": h.groupIndex,\n key: a,\n style: e ? { ...En, top: l + S } : Lr\n },\n c ? d(h.index, h.groupIndex, h.data, s) : d(h.index, h.data, s)\n );\n });\n}), Or = /* @__PURE__ */ E.memo(function() {\n const e = M(\"listState\"), n = M(\"topItemsIndexes\").length > 0, o = bt(\"sizeRanges\"), r = M(\"useWindowScroll\"), s = M(\"customScrollParent\"), i = bt(\"windowScrollContainerState\"), l = bt(\"scrollContainerState\"), c = s || r ? i : l, d = M(\"trackItemSizes\"), m = M(\"itemSize\"), v = M(\"log\"), { callbackRef: p, ref: I } = Mn(\n o,\n m,\n d,\n c,\n v,\n void 0,\n s,\n !1,\n M(\"skipAnimationFrameInResizeObserver\")\n ), [w, R] = E.useState(0);\n rn(\"deviation\", (L) => {\n w !== L && (I.current.style.marginTop = `${L}px`, R(L));\n });\n const h = M(\"EmptyPlaceholder\"), f = M(\"FillerRow\") ?? Br, a = M(\"TableBodyComponent\"), S = M(\"paddingTopAddition\"), H = M(\"statefulTotalCount\"), y = M(\"context\");\n if (H === 0 && h !== null && h !== void 0)\n return /* @__PURE__ */ G(h, { ...ot(h, y) });\n const O = (n ? e.topItems : []).reduce((L, V) => L + V.size, 0), u = e.offsetTop + S + w - O, g = e.offsetBottom, C = u > 0 ? /* @__PURE__ */ G(f, { context: y, height: u }, \"padding-top\") : null, z = g > 0 ? /* @__PURE__ */ G(f, { context: y, height: g }, \"padding-bottom\") : null;\n return /* @__PURE__ */ $t(a, { \"data-testid\": \"virtuoso-item-list\", ref: p, ...ot(a, y), children: [\n C,\n n && /* @__PURE__ */ G(Bn, { showTopList: !0 }),\n /* @__PURE__ */ G(Bn, {}),\n z\n ] });\n}), kr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"viewportHeight\"), o = bt(\"fixedItemHeight\"), r = Ot(\n E.useMemo(() => re(n, (s) => Ht(s, \"height\")), [n]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: r, style: He(!1), children: t });\n}, zr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"windowViewportRect\"), o = bt(\"fixedItemHeight\"), r = M(\"customScrollParent\"), s = M(\"useWindowScroll\"), i = $e(\n n,\n r,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: i, style: tn(!1, s), children: t });\n}, Fr = /* @__PURE__ */ E.memo(function(e) {\n const n = M(\"useWindowScroll\"), o = M(\"customScrollParent\"), r = bt(\"fixedHeaderHeight\"), s = bt(\"fixedFooterHeight\"), i = M(\"fixedHeaderContent\"), l = M(\"fixedFooterContent\"), c = M(\"context\"), d = Ot(\n E.useMemo(() => re(r, (a) => Ht(a, \"height\")), [r]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), m = Ot(\n E.useMemo(() => re(s, (a) => Ht(a, \"height\")), [s]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), v = o || n ? Wr : Vr, p = o || n ? zr : kr, I = M(\"TableComponent\"), w = M(\"TableHeadComponent\"), R = M(\"TableFooterComponent\"), h = i ? /* @__PURE__ */ G(\n w,\n {\n ref: d,\n style: { position: \"sticky\", top: 0, zIndex: 2 },\n ...ot(w, c),\n children: i()\n },\n \"TableHead\"\n ) : null, f = l ? /* @__PURE__ */ G(\n R,\n {\n ref: m,\n style: { bottom: 0, position: \"sticky\", zIndex: 1 },\n ...ot(R, c),\n children: l()\n },\n \"TableFoot\"\n ) : null;\n return /* @__PURE__ */ G(v, { ...e, ...ot(v, c), children: /* @__PURE__ */ G(p, { children: /* @__PURE__ */ $t(I, { style: { borderSpacing: 0, overflowAnchor: \"none\" }, ...ot(I, c), children: [\n h,\n /* @__PURE__ */ G(Or, {}, \"TableBody\"),\n f\n ] }) }) });\n}), {\n Component: mo,\n useEmitter: rn,\n useEmitterValue: M,\n usePublisher: bt\n} = /* @__PURE__ */ Xe(\n Hr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n firstItemIndex: \"firstItemIndex\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n fixedHeaderContent: \"fixedHeaderContent\",\n fixedFooterContent: \"fixedFooterContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n topItemCount: \"topItemCount\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n groupCounts: \"groupCounts\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n Fr\n), Vr = /* @__PURE__ */ en({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), Wr = /* @__PURE__ */ nn({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), rs = mo, ss = mo, Ln = {\n bottom: 0,\n itemHeight: 0,\n items: [],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, Pr = {\n bottom: 0,\n itemHeight: 0,\n items: [{ index: 0 }],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, { ceil: On, floor: Ce, max: oe, min: ze, round: kn } = Math;\nfunction zn(t, e, n) {\n return Array.from({ length: e - t + 1 }).map((o, r) => ({ data: n === null ? null : n[r + t], index: r + t }));\n}\nfunction Gr(t) {\n return {\n ...Pr,\n items: t\n };\n}\nfunction Se(t, e) {\n return t !== void 0 && t.width === e.width && t.height === e.height;\n}\nfunction Ar(t, e) {\n return t !== void 0 && t.column === e.column && t.row === e.row;\n}\nconst Mr = /* @__PURE__ */ j(\n ([\n { increaseViewportBy: t, listBoundary: e, overscan: n, visibleRange: o },\n { footerHeight: r, headerHeight: s, scrollBy: i, scrollContainerState: l, scrollTo: c, scrollTop: d, smoothScrollTargetReached: m, viewportHeight: v },\n p,\n I,\n { didMount: w, propsReady: R },\n { customScrollParent: h, useWindowScroll: f, windowScrollContainerState: a, windowScrollTo: S, windowViewportRect: H },\n y\n ]) => {\n const O = T(0), u = T(0), g = T(Ln), C = T({ height: 0, width: 0 }), z = T({ height: 0, width: 0 }), L = U(), V = U(), N = T(0), Z = T(null), F = T({ column: 0, row: 0 }), mt = U(), q = U(), Q = T(!1), gt = T(0), ut = T(!0), St = T(!1), Ft = T(!1);\n Y(\n x(\n w,\n $(gt),\n P(([b, D]) => D !== 0)\n ),\n () => {\n _(ut, !1);\n }\n ), Y(\n x(\n at(w, ut, z, C, gt, St),\n P(([b, D, K, st, , tt]) => b && !D && K.height !== 0 && st.height !== 0 && !tt)\n ),\n ([, , , , b]) => {\n _(St, !0), je(1, () => {\n _(L, b);\n }), yt(x(d), () => {\n _(e, [0, 0]), _(ut, !0);\n });\n }\n ), k(\n x(\n q,\n P((b) => b != null && b.scrollTop > 0),\n Bt(0)\n ),\n u\n ), Y(\n x(\n w,\n $(q),\n P(([, b]) => b != null)\n ),\n ([, b]) => {\n b && (_(C, b.viewport), _(z, b.item), _(F, b.gap), b.scrollTop > 0 && (_(Q, !0), yt(x(d, Ut(1)), (D) => {\n _(Q, !1);\n }), _(c, { top: b.scrollTop })));\n }\n ), k(\n x(\n C,\n B(({ height: b }) => b)\n ),\n v\n ), k(\n x(\n at(\n W(C, Se),\n W(z, Se),\n W(F, (b, D) => b !== void 0 && b.column === D.column && b.row === D.row),\n W(d)\n ),\n B(([b, D, K, st]) => ({\n gap: K,\n item: D,\n scrollTop: st,\n viewport: b\n }))\n ),\n mt\n ), k(\n x(\n at(\n W(O),\n o,\n W(F, Ar),\n W(z, Se),\n W(C, Se),\n W(Z),\n W(u),\n W(Q),\n W(ut),\n W(gt)\n ),\n P(([, , , , , , , b]) => !b),\n B(\n ([\n b,\n [D, K],\n st,\n tt,\n X,\n lt,\n xt,\n ,\n ct,\n Vt\n ]) => {\n const { column: Wt, row: ee } = st, { height: he, width: Ee } = tt, { width: sn } = X;\n if (xt === 0 && (b === 0 || sn === 0))\n return Ln;\n if (Ee === 0) {\n const dn = qe(Vt, b), Io = dn + Math.max(xt - 1, 0);\n return Gr(zn(dn, Io, lt));\n }\n const ge = po(sn, Ee, Wt);\n let qt, Mt;\n ct ? D === 0 && K === 0 && xt > 0 ? (qt = 0, Mt = xt - 1) : (qt = ge * Ce((D + ee) / (he + ee)), Mt = ge * On((K + ee) / (he + ee)) - 1, Mt = ze(b - 1, oe(Mt, ge - 1)), qt = ze(Mt, oe(0, qt))) : (qt = 0, Mt = -1);\n const ln = zn(qt, Mt, lt), { bottom: cn, top: un } = Fn(X, st, tt, ln), an = On(b / ge), go = an * he + (an - 1) * ee - cn;\n return { bottom: cn, itemHeight: he, items: ln, itemWidth: Ee, offsetBottom: go, offsetTop: un, top: un };\n }\n )\n ),\n g\n ), k(\n x(\n Z,\n P((b) => b !== null),\n B((b) => b.length)\n ),\n O\n ), k(\n x(\n at(C, z, g, F),\n P(([b, D, { items: K }]) => K.length > 0 && D.height !== 0 && b.height !== 0),\n B(([b, D, { items: K }, st]) => {\n const { bottom: tt, top: X } = Fn(b, st, D, K);\n return [X, tt];\n }),\n nt(le)\n ),\n e\n );\n const pt = T(!1);\n k(\n x(\n d,\n $(pt),\n B(([b, D]) => D || b !== 0)\n ),\n pt\n );\n const jt = Tt(\n x(\n at(g, O),\n P(([{ items: b }]) => b.length > 0),\n $(pt),\n P(([[b, D], K]) => {\n const tt = b.items[b.items.length - 1].index === D - 1;\n return (K || b.bottom > 0 && b.itemHeight > 0 && b.offsetBottom === 0 && b.items.length === D) && tt;\n }),\n B(([[, b]]) => b - 1),\n nt()\n )\n ), Qt = Tt(\n x(\n W(g),\n P(({ items: b }) => b.length > 0 && b[0].index === 0),\n Bt(0),\n nt()\n )\n ), Et = Tt(\n x(\n W(g),\n $(Q),\n P(([{ items: b }, D]) => b.length > 0 && !D),\n B(([{ items: b }]) => ({\n endIndex: b[b.length - 1].index,\n startIndex: b[0].index\n })),\n nt(Kn),\n zt(0)\n )\n );\n k(Et, I.scrollSeekRangeChanged), k(\n x(\n L,\n $(C, z, O, F),\n B(([b, D, K, st, tt]) => {\n const X = Xn(b), { align: lt, behavior: xt, offset: ct } = X;\n let Vt = X.index;\n Vt === \"LAST\" && (Vt = st - 1), Vt = oe(0, Vt, ze(st - 1, Vt));\n let Wt = Me(D, tt, K, Vt);\n return lt === \"end\" ? Wt = kn(Wt - D.height + K.height) : lt === \"center\" && (Wt = kn(Wt - D.height / 2 + K.height / 2)), ct !== void 0 && ct !== 0 && (Wt += ct), { behavior: xt, top: Wt };\n })\n ),\n c\n );\n const te = ht(\n x(\n g,\n B((b) => b.offsetBottom + b.bottom)\n ),\n 0\n );\n return k(\n x(\n H,\n B((b) => ({ height: b.visibleHeight, width: b.visibleWidth }))\n ),\n C\n ), {\n customScrollParent: h,\n // input\n data: Z,\n deviation: N,\n footerHeight: r,\n gap: F,\n headerHeight: s,\n increaseViewportBy: t,\n initialItemCount: u,\n itemDimensions: z,\n overscan: n,\n restoreStateFrom: q,\n scrollBy: i,\n scrollContainerState: l,\n scrollHeight: V,\n scrollTo: c,\n scrollToIndex: L,\n scrollTop: d,\n smoothScrollTargetReached: m,\n totalCount: O,\n useWindowScroll: f,\n viewportDimensions: C,\n windowScrollContainerState: a,\n windowScrollTo: S,\n windowViewportRect: H,\n ...I,\n // output\n gridState: g,\n horizontalDirection: Ft,\n initialTopMostItemIndex: gt,\n totalListHeight: te,\n ...p,\n endReached: jt,\n propsReady: R,\n rangeChanged: Et,\n startReached: Qt,\n stateChanged: mt,\n stateRestoreInProgress: Q,\n ...y\n };\n },\n rt(Ye, It, pe, oo, At, Ze, Gt)\n);\nfunction po(t, e, n) {\n return oe(1, Ce((t + n) / (Ce(e) + n)));\n}\nfunction Fn(t, e, n, o) {\n const { height: r } = n;\n if (r === void 0 || o.length === 0)\n return { bottom: 0, top: 0 };\n const s = Me(t, e, n, o[0].index);\n return { bottom: Me(t, e, n, o[o.length - 1].index) + r, top: s };\n}\nfunction Me(t, e, n, o) {\n const r = po(t.width, n.width, e.column), s = Ce(o / r), i = s * n.height + oe(0, s - 1) * e.row;\n return i > 0 ? i + e.row : i;\n}\nconst _r = /* @__PURE__ */ j(() => {\n const t = T((v) => `Item ${v}`), e = T({}), n = T(null), o = T(\"virtuoso-grid-item\"), r = T(\"virtuoso-grid-list\"), s = T(Qe), i = T(\"div\"), l = T(Jt), c = (v, p = null) => ht(\n x(\n e,\n B((I) => I[v]),\n nt()\n ),\n p\n ), d = T(!1), m = T(!1);\n return k(W(m), d), {\n components: e,\n computeItemKey: s,\n context: n,\n FooterComponent: c(\"Footer\"),\n HeaderComponent: c(\"Header\"),\n headerFooterTag: i,\n itemClassName: o,\n ItemComponent: c(\"Item\", \"div\"),\n itemContent: t,\n listClassName: r,\n ListComponent: c(\"List\", \"div\"),\n readyStateChanged: d,\n reportReadyState: m,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\", \"div\")\n };\n}), Nr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(Mr, _r)\n), Dr = /* @__PURE__ */ E.memo(function() {\n const e = et(\"gridState\"), n = et(\"listClassName\"), o = et(\"itemClassName\"), r = et(\"itemContent\"), s = et(\"computeItemKey\"), i = et(\"isSeeking\"), l = wt(\"scrollHeight\"), c = et(\"ItemComponent\"), d = et(\"ListComponent\"), m = et(\"ScrollSeekPlaceholder\"), v = et(\"context\"), p = wt(\"itemDimensions\"), I = wt(\"gap\"), w = et(\"log\"), R = et(\"stateRestoreInProgress\"), h = wt(\"reportReadyState\"), f = Ot(\n E.useMemo(\n () => (a) => {\n const S = a.parentElement.parentElement.scrollHeight;\n l(S);\n const H = a.firstChild;\n if (H !== null) {\n const { height: y, width: O } = H.getBoundingClientRect();\n p({ height: y, width: O });\n }\n I({\n column: Vn(\"column-gap\", getComputedStyle(a).columnGap, w),\n row: Vn(\"row-gap\", getComputedStyle(a).rowGap, w)\n });\n },\n [l, p, I, w]\n ),\n !0,\n !1\n );\n return lo(() => {\n e.itemHeight > 0 && e.itemWidth > 0 && h(!0);\n }, [e]), R ? null : /* @__PURE__ */ G(\n d,\n {\n className: n,\n ref: f,\n ...ot(d, v),\n \"data-testid\": \"virtuoso-item-list\",\n style: { paddingBottom: e.offsetBottom, paddingTop: e.offsetTop },\n children: e.items.map((a) => {\n const S = s(a.index, a.data, v);\n return i ? /* @__PURE__ */ G(\n m,\n {\n ...ot(m, v),\n height: e.itemHeight,\n index: a.index,\n width: e.itemWidth\n },\n S\n ) : /* @__PURE__ */ Dt(\n c,\n {\n ...ot(c, v),\n className: o,\n \"data-index\": a.index,\n key: S\n },\n r(a.index, a.data, v)\n );\n })\n }\n );\n}), $r = E.memo(function() {\n const e = et(\"HeaderComponent\"), n = wt(\"headerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Ur = E.memo(function() {\n const e = et(\"FooterComponent\"), n = wt(\"footerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Kr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"itemDimensions\"), o = wt(\"viewportDimensions\"), r = Ot(\n E.useMemo(\n () => (s) => {\n o(s.getBoundingClientRect());\n },\n [o]\n ),\n !0,\n !1\n );\n return E.useEffect(() => {\n e && (o({ height: e.viewportHeight, width: e.viewportWidth }), n({ height: e.itemHeight, width: e.itemWidth }));\n }, [e, o, n]), /* @__PURE__ */ G(\"div\", { ref: r, style: He(!1), children: t });\n}, jr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"windowViewportRect\"), o = wt(\"itemDimensions\"), r = et(\"customScrollParent\"), s = et(\"useWindowScroll\"), i = $e(n, r, !1);\n return E.useEffect(() => {\n e && (o({ height: e.itemHeight, width: e.itemWidth }), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: e.viewportWidth }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { ref: i, style: tn(!1, s), children: t });\n}, qr = /* @__PURE__ */ E.memo(function({ ...e }) {\n const n = et(\"useWindowScroll\"), o = et(\"customScrollParent\"), r = o || n ? Xr : Zr, s = o || n ? jr : Kr, i = et(\"context\");\n return /* @__PURE__ */ G(r, { ...e, ...ot(r, i), children: /* @__PURE__ */ $t(s, { children: [\n /* @__PURE__ */ G($r, {}),\n /* @__PURE__ */ G(Dr, {}),\n /* @__PURE__ */ G(Ur, {})\n ] }) });\n}), {\n Component: Yr,\n useEmitter: ho,\n useEmitterValue: et,\n usePublisher: wt\n} = /* @__PURE__ */ Xe(\n Nr,\n {\n optional: {\n context: \"context\",\n totalCount: \"totalCount\",\n overscan: \"overscan\",\n itemContent: \"itemContent\",\n components: \"components\",\n computeItemKey: \"computeItemKey\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"headerFooterTag\",\n listClassName: \"listClassName\",\n itemClassName: \"itemClassName\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n restoreStateFrom: \"restoreStateFrom\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n increaseViewportBy: \"increaseViewportBy\"\n },\n methods: {\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n scrollToIndex: \"scrollToIndex\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n stateChanged: \"stateChanged\",\n readyStateChanged: \"readyStateChanged\"\n }\n },\n qr\n), Zr = /* @__PURE__ */ en({ useEmitter: ho, useEmitterValue: et, usePublisher: wt }), Xr = /* @__PURE__ */ nn({ useEmitter: ho, useEmitterValue: et, usePublisher: wt });\nfunction Vn(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nconst is = Yr;\nexport {\n ss as GroupedTableVirtuoso,\n os as GroupedVirtuoso,\n ft as LogLevel,\n rs as TableVirtuoso,\n ns as Virtuoso,\n is as VirtuosoGrid,\n io as VirtuosoGridMockContext,\n Re as VirtuosoMockContext\n};\n","\nimport { useSyncExternalStore } from 'react'\nimport { voiceTts } from '@/lib/voice'\n\nexport function useTtsPlayingKey(): string | null {\n return useSyncExternalStore(\n (cb) => voiceTts.subscribe(cb),\n () => voiceTts.getPlayingKey(),\n () => null,\n )\n}\n","\nimport { memo, useEffect, useRef, useState } from 'react'\nimport { AlertCircle, CircleStop, Download, FileText, Loader2, SmilePlus, Volume2, X, ZoomIn } from 'lucide-react'\nimport { voiceTts } from '@/lib/voice'\nimport { useRelayStore } from '@/store'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'\nimport { apiBlob } from '@/lib/api'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport { messageBody } from '@/lib/display'\nimport type { AttachmentRef, Message } from '@/types'\nimport { cn } from '@/lib/utils'\nimport type { ReferencedPathInfo } from './types'\nimport {\n chatTimestamp,\n groupedReactions,\n hasActiveTextSelection,\n isReactionEvent,\n messageAttachments,\n outboundReceipt,\n QUICK_REACTIONS,\n resolveRelativePath,\n} from './helpers'\nimport { useTtsPlayingKey } from './hooks/useTtsPlayingKey'\n\nfunction AttachmentPreview({ attachment, outbound }: { attachment: AttachmentRef; outbound: boolean }) {\n const isImage = attachment.kind === 'image'\n const title = attachment.title || attachment.artifactId\n const [objectUrl, setObjectUrl] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n const [lightboxOpen, setLightboxOpen] = useState(false)\n\n useEffect(() => {\n let cancelled = false\n let url: string | null = null\n\n async function load() {\n setLoading(true)\n setError(null)\n setObjectUrl(null)\n try {\n const blob = await apiBlob(`/artifacts/${encodeURIComponent(attachment.artifactId)}/content`)\n if (cancelled) return\n url = URL.createObjectURL(blob)\n setObjectUrl(url)\n } catch (e) {\n if (!cancelled) setError((e as Error).message)\n } finally {\n if (!cancelled) setLoading(false)\n }\n }\n\n void load()\n return () => {\n cancelled = true\n if (url) URL.revokeObjectURL(url)\n }\n }, [attachment.artifactId])\n\n function download() {\n if (!objectUrl) return\n const a = document.createElement('a')\n a.href = objectUrl\n a.download = title\n document.body.appendChild(a)\n a.click()\n a.remove()\n }\n\n if (isImage) {\n return (\n <>\n <button\n type=\"button\"\n onClick={() => objectUrl && setLightboxOpen(true)}\n disabled={!objectUrl}\n className=\"group/img mt-2 block overflow-hidden rounded-md border border-foreground/10 bg-black/10 text-left disabled:cursor-default relative\"\n >\n {objectUrl ? (\n <>\n <img src={objectUrl} alt={title} loading=\"lazy\" className=\"block max-h-72 max-w-full object-contain\" />\n <span className=\"absolute inset-0 flex items-center justify-center bg-black/0 group-hover/img:bg-black/30 transition-colors\">\n <ZoomIn className=\"w-6 h-6 text-white opacity-0 group-hover/img:opacity-100 transition-opacity drop-shadow-md\" />\n </span>\n </>\n ) : (\n <span className={cn('flex min-h-20 items-center gap-2 px-3 py-2 text-xs', error ? 'text-red-400' : 'text-muted-foreground')}>\n {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <AlertCircle className=\"h-4 w-4\" />}\n {error || 'Loading image'}\n </span>\n )}\n </button>\n {objectUrl && (\n <Dialog open={lightboxOpen} onOpenChange={setLightboxOpen}>\n <DialogContent className=\"max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden\" showCloseButton={false}>\n <DialogTitle className=\"sr-only\">{title}</DialogTitle>\n <div className=\"relative flex items-center justify-center min-h-[200px]\">\n <img src={objectUrl} alt={title} className=\"max-w-[93vw] max-h-[90vh] object-contain\" />\n <div className=\"absolute top-2 right-2 flex gap-1\">\n <button type=\"button\" onClick={download} className=\"rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Download\">\n <Download className=\"w-4 h-4\" />\n </button>\n <button type=\"button\" onClick={() => setLightboxOpen(false)} className=\"rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Close\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )}\n </>\n )\n }\n\n return (\n <button\n type=\"button\"\n onClick={download}\n disabled={!objectUrl}\n className={cn(\n 'mt-2 flex w-full items-center gap-2 rounded-md border px-2.5 py-2 text-left text-xs transition-colors disabled:cursor-default disabled:opacity-70',\n outbound ? 'border-primary-foreground/20 bg-primary-foreground/10 hover:bg-primary-foreground/15' : 'border-border bg-background hover:bg-muted'\n )}\n >\n {loading ? <Loader2 className=\"h-4 w-4 shrink-0 animate-spin\" /> : error ? <AlertCircle className=\"h-4 w-4 shrink-0 text-red-400\" /> : <FileText className=\"h-4 w-4 shrink-0\" />}\n <span className={cn('min-w-0 flex-1 truncate', error && 'text-red-400')}>{error || title}</span>\n <Download className=\"h-3.5 w-3.5 shrink-0\" />\n </button>\n )\n}\n\nfunction AddReaction({ open, onToggle, onReact }: { open: boolean; onToggle: () => void; onReact: (emoji: string) => void }) {\n return (\n <div className=\"relative shrink-0\">\n <button\n type=\"button\"\n title=\"Add reaction\"\n onClick={onToggle}\n className={cn(\n 'inline-flex h-5 w-6 items-center justify-center rounded-full border border-border bg-popover text-muted-foreground shadow-sm transition hover:bg-muted hover:text-foreground',\n open ? 'opacity-100' : 'opacity-0 pointer-events-none md:group-hover/msg:opacity-100 md:group-hover/msg:pointer-events-auto'\n )}\n >\n <SmilePlus className=\"h-3 w-3\" />\n </button>\n {open && (\n <div className=\"absolute bottom-full left-0 z-30 mb-1 flex gap-0.5 rounded-full border border-border bg-popover p-0.5 shadow-md\">\n {QUICK_REACTIONS.map((emoji) => (\n <button\n key={emoji}\n type=\"button\"\n title={`React ${emoji}`}\n onClick={() => onReact(emoji)}\n className=\"inline-flex h-6 w-7 items-center justify-center rounded-full text-xs transition-colors hover:bg-muted\"\n >\n {emoji}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport const MessageBubble = memo(function MessageBubble({\n msg,\n peer,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: {\n msg: Message\n peer: string\n onOpenReferencedPath?: (path: string, line?: number, type?: ReferencedPathInfo['type']) => void\n onPreviewReferencedPath?: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd?: () => void\n}) {\n const isOutbound = msg.from === HUMAN_AGENT_ID\n const reactToMessage = useRelayStore((s) => s.reactToMessage)\n const voiceTtsEnabled = useRelayStore((s) => s.voiceTtsEnabled)\n const ttsPlayingKey = useTtsPlayingKey()\n const peerCwd = useRelayStore((s) => {\n const cwd = s.agentsById[peer]?.meta?.cwd\n return typeof cwd === 'string' ? cwd : ''\n })\n const [showQuickReact, setShowQuickReact] = useState(false)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const pointerStartRef = useRef<{ x: number; y: number } | null>(null)\n const suppressBubbleClickRef = useRef(false)\n const body = messageBody(msg)\n const time = chatTimestamp(msg.occurredAt ?? (msg.createdAt as string))\n const attachments = messageAttachments(msg)\n const reactions = groupedReactions(msg)\n const receipt = isOutbound ? outboundReceipt(msg, peer) : null\n const ReceiptIcon = receipt?.icon\n // On-demand TTS: replay any agent response through the same Kokoro/browser\n // pipeline. Only when the speaker is on, and only for inbound non-reaction text.\n const isTtsPlaying = ttsPlayingKey === String(msg.id)\n const showPlayButton = voiceTtsEnabled && !isOutbound && !isReactionEvent(msg) && body.trim().length > 0\n function togglePlay(e: React.MouseEvent) {\n e.stopPropagation()\n if (isTtsPlaying) voiceTts.bargeIn()\n else voiceTts.speak(msg.body, String(msg.id))\n }\n useEffect(() => {\n if (!showQuickReact) return\n function dismiss(e: MouseEvent | TouchEvent) {\n if (hasActiveTextSelection()) return\n if (bubbleRef.current && !bubbleRef.current.contains(e.target as Node)) setShowQuickReact(false)\n }\n document.addEventListener('mousedown', dismiss)\n document.addEventListener('touchstart', dismiss)\n return () => { document.removeEventListener('mousedown', dismiss); document.removeEventListener('touchstart', dismiss) }\n }, [showQuickReact])\n\n function resolvedReferencedPath(path: string): string {\n return resolveRelativePath(peerCwd || '/', path)\n }\n\n function openReferencedPath(path: string, line?: number) {\n const absolute = resolvedReferencedPath(path)\n onOpenReferencedPath?.(absolute, line)\n }\n\n function previewReferencedPath(path: string, line?: number, anchor?: DOMRect) {\n const absolute = resolvedReferencedPath(path)\n onPreviewReferencedPath?.(absolute, line, anchor)\n }\n\n function handleReact(emoji: string) {\n reactToMessage(msg, emoji)\n setShowQuickReact(false)\n }\n\n function handleBubblePointerDown(e: React.PointerEvent<HTMLDivElement>) {\n if (e.button !== 0) return\n pointerStartRef.current = { x: e.clientX, y: e.clientY }\n suppressBubbleClickRef.current = false\n }\n\n function handleBubblePointerMove(e: React.PointerEvent<HTMLDivElement>) {\n const start = pointerStartRef.current\n if (!start) return\n if (Math.abs(e.clientX - start.x) > 3 || Math.abs(e.clientY - start.y) > 3) {\n suppressBubbleClickRef.current = true\n }\n }\n\n function handleBubbleClick(e: React.MouseEvent<HTMLDivElement>) {\n if (isReactionEvent(msg) || isOutbound) return\n const target = e.target as HTMLElement\n if (target.closest('a,button,input,textarea,select,[role=\"button\"]')) return\n if (suppressBubbleClickRef.current || hasActiveTextSelection()) {\n suppressBubbleClickRef.current = false\n return\n }\n setShowQuickReact((v) => !v)\n }\n\n return (\n <div data-msg-id={msg.id} className={cn('group/msg flex mb-3', isOutbound ? 'justify-end' : 'justify-start')}>\n <div ref={bubbleRef} className=\"relative max-w-[85%] md:max-w-[75%]\">\n {showPlayButton && (\n <button\n type=\"button\"\n title={isTtsPlaying ? 'Stop playback' : 'Play aloud'}\n onClick={togglePlay}\n className={cn(\n 'absolute -top-2 -right-2 z-20 inline-flex h-6 w-6 items-center justify-center rounded-full border bg-popover shadow-sm transition',\n isTtsPlaying\n ? 'border-primary/50 text-primary opacity-100'\n // Hide-until-hover only on hover-capable devices; touch screens (iPad)\n // have no hover, so keep the button visible there instead of opacity-0.\n : 'border-border text-muted-foreground opacity-70 hover:bg-muted hover:text-foreground hover:opacity-100 [@media(hover:hover)]:md:opacity-0 [@media(hover:hover)]:md:group-hover/msg:opacity-100'\n )}\n >\n {isTtsPlaying ? <CircleStop className=\"h-3.5 w-3.5 animate-pulse\" /> : <Volume2 className=\"h-3.5 w-3.5\" />}\n </button>\n )}\n <div\n className={cn(\n 'rounded-2xl px-3.5 py-2 text-sm select-text',\n !isOutbound && !isReactionEvent(msg) && 'cursor-pointer',\n isOutbound\n ? 'bg-primary text-primary-foreground rounded-br-sm'\n : 'bg-card ring-1 ring-foreground/10 rounded-bl-sm'\n )}\n onPointerDown={handleBubblePointerDown}\n onPointerMove={handleBubblePointerMove}\n onClick={handleBubbleClick}\n >\n {msg.subject && (\n <p className={cn('text-xs font-semibold mb-1', isOutbound ? 'text-primary-foreground/70' : 'text-muted-foreground')}>\n {msg.subject}\n </p>\n )}\n <FormattedBody\n text={body}\n rawBody={msg.body}\n className=\"leading-relaxed\"\n onOpenPath={openReferencedPath}\n onPreviewPath={previewReferencedPath}\n onPreviewPathEnd={onPreviewReferencedPathEnd}\n resolvePathTitle={(path, line) => `${resolvedReferencedPath(path)}${line ? `:${line}` : ''}`}\n />\n {attachments.map((attachment) => (\n <AttachmentPreview key={`${msg.id}-${attachment.artifactId}-${attachment.role || ''}`} attachment={attachment} outbound={isOutbound} />\n ))}\n <p className={cn('text-xs mt-1 flex items-center gap-1.5', isOutbound ? 'justify-end text-primary-foreground/60' : 'justify-end text-muted-foreground')}>\n <span className=\"opacity-40\">#{msg.id}</span>\n <span>{time}</span>\n {receipt && ReceiptIcon && (\n <span\n className={cn(\n 'inline-flex items-center gap-1',\n receipt.tone === 'ok' && 'text-emerald-300',\n receipt.tone === 'warn' && 'text-amber-200',\n receipt.tone === 'danger' && 'text-red-200'\n )}\n title={receipt.title}\n >\n <ReceiptIcon className=\"h-3 w-3\" />\n {receipt.label}\n </span>\n )}\n </p>\n </div>\n {!isReactionEvent(msg) && reactions.length > 0 && (\n <div className={cn('flex flex-wrap items-center gap-0.5 -mt-1 relative z-10', isOutbound ? 'justify-end pr-2' : 'justify-start pl-2')}>\n {!isOutbound && <AddReaction open={showQuickReact} onToggle={() => setShowQuickReact((v) => !v)} onReact={handleReact} />}\n {reactions.map((reaction) => (\n <button\n key={reaction.emoji}\n type=\"button\"\n title={reaction.actors.join(', ')}\n onClick={() => handleReact(reaction.emoji)}\n className={cn(\n 'inline-flex h-5 items-center gap-0.5 rounded-full border px-1.5 text-[11px] shadow-sm transition-colors',\n reaction.mine\n ? 'border-primary/40 bg-primary/10 text-primary'\n : 'border-border bg-background hover:bg-muted text-foreground'\n )}\n >\n <span>{reaction.emoji}</span>\n {reaction.count > 1 && <span>{reaction.count}</span>}\n </button>\n ))}\n </div>\n )}\n {!isReactionEvent(msg) && !isOutbound && reactions.length === 0 && (\n <div className=\"absolute -bottom-2.5 left-1 z-20\">\n <AddReaction open={showQuickReact} onToggle={() => setShowQuickReact((v) => !v)} onReact={handleReact} />\n </div>\n )}\n </div>\n </div>\n )\n})\n","\nimport { useState } from 'react'\nimport { AlertCircle, Check, ChevronLeft, ChevronRight, ListChecks, Loader2, MessageCircleQuestion } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Textarea } from '@/components/ui/textarea'\nimport type { ProviderPendingApproval, ProviderQuestion } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\nexport function PermissionRequestBubble({ agentId, approval }: { agentId: string; approval?: ProviderPendingApproval }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [submitting, setSubmitting] = useState<string | null>(null)\n if (!approval) return null\n if (approval.questions && approval.questions.length) {\n return <QuestionForm agentId={agentId} approval={approval} questions={approval.questions} />\n }\n const currentApproval = approval\n const choices = approval.choices.length ? approval.choices : [\n { id: 'approve' as const, label: 'Approve' },\n { id: 'deny' as const, label: 'Deny' },\n ]\n\n async function choose(choice: typeof choices[number]) {\n if (submitting) return\n setSubmitting(choice.id)\n try {\n await sendPermissionDecision(agentId, currentApproval.id, choice.id)\n } finally {\n setSubmitting(null)\n }\n }\n\n const isPlan = approval.kind === 'plan'\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-start gap-2\">\n {isPlan ? <ListChecks className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" /> : <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" />}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-amber-100\">{approval.title}</div>\n {approval.body && (isPlan\n ? <div className=\"mt-2 max-h-72 overflow-auto rounded-md bg-background/60 p-2.5 text-xs leading-relaxed\"><FormattedBody text={approval.body} rawBody={approval.body} className=\"leading-relaxed\" /></div>\n : <pre className=\"mt-2 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background/80 p-2 font-mono text-xs leading-relaxed text-muted-foreground\">{approval.body}</pre>)}\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {choices.map((choice) => (\n <Button\n key={choice.id}\n size=\"sm\"\n variant={choice.id === 'deny' || choice.id === 'abort' ? 'outline' : 'default'}\n disabled={Boolean(submitting)}\n onClick={() => void choose(choice)}\n className=\"h-7 px-2 text-xs\"\n >\n {submitting === choice.id && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n {choice.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\ninterface QState { labels: string[]; other: string; otherActive: boolean }\n\nfunction questionAnswered(s: QState | undefined): boolean {\n if (!s) return false\n if (s.otherActive && s.other.trim()) return true\n return s.labels.length > 0\n}\n\nfunction answerValue(s: QState): string {\n const parts = [...s.labels]\n if (s.otherActive && s.other.trim()) parts.push(s.other.trim())\n return parts.join(', ')\n}\n\n// Renders a Claude AskUserQuestion as a sequential form (one question at a\n// time). Collects all answers, then submits a single 'answer' decision that the\n// runner turns into a PreToolUse allow + updatedInput so the tool completes.\nfunction QuestionForm({ agentId, approval, questions }: { agentId: string; approval: ProviderPendingApproval; questions: ProviderQuestion[] }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [step, setStep] = useState(0)\n const [state, setState] = useState<Record<number, QState>>({})\n const [submitting, setSubmitting] = useState<null | 'answer' | 'dismiss'>(null)\n\n const q = questions[Math.min(step, questions.length - 1)]\n const cur = state[step]\n if (!q) return null\n const multi = Boolean(q.multiSelect)\n const total = questions.length\n const isLast = step === total - 1\n const answered = questionAnswered(cur)\n const allAnswered = questions.every((_, i) => questionAnswered(state[i]))\n const busy = Boolean(submitting)\n\n function update(patch: Partial<QState>) {\n setState((prev) => {\n const base: QState = prev[step] ?? { labels: [], other: '', otherActive: false }\n return { ...prev, [step]: { ...base, ...patch } }\n })\n }\n function pickOption(label: string) {\n if (multi) {\n const has = cur?.labels.includes(label)\n update({ labels: has ? (cur?.labels ?? []).filter((l) => l !== label) : [...(cur?.labels ?? []), label] })\n } else {\n update({ labels: [label], otherActive: false })\n }\n }\n function pickOther() {\n if (multi) update({ otherActive: !cur?.otherActive })\n else update({ labels: [], otherActive: true })\n }\n\n async function submit() {\n if (!allAnswered || busy) return\n setSubmitting('answer')\n try {\n const answers: Record<string, string> = {}\n questions.forEach((qq, i) => { const s = state[i]; if (s) answers[qq.question] = answerValue(s) })\n await sendPermissionDecision(agentId, approval.id, 'answer', answers)\n } finally { setSubmitting(null) }\n }\n async function dismiss() {\n if (busy) return\n setSubmitting('dismiss')\n try { await sendPermissionDecision(agentId, approval.id, 'deny') } finally { setSubmitting(null) }\n }\n\n const otherActive = Boolean(cur?.otherActive)\n\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"w-full max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <MessageCircleQuestion className=\"h-4 w-4 shrink-0 text-amber-400\" />\n <div className=\"text-sm font-medium text-amber-100\">{approval.title}</div>\n {total > 1 && (\n <Badge variant=\"outline\" className=\"ml-auto h-5 px-1.5 text-[10px] text-muted-foreground\">{step + 1} / {total}</Badge>\n )}\n </div>\n\n <div className=\"mt-3\">\n {q.header && <div className=\"text-[11px] font-semibold uppercase tracking-wide text-amber-300/80\">{q.header}</div>}\n <div className=\"mt-0.5 text-sm text-foreground whitespace-pre-wrap break-words\">{q.question}</div>\n {multi && <div className=\"mt-0.5 text-[11px] text-muted-foreground\">Select all that apply</div>}\n\n <div className=\"mt-2 flex flex-col gap-1.5\">\n {q.options.map((opt) => {\n const selected = Boolean(cur?.labels.includes(opt.label))\n return (\n <button\n key={opt.label}\n type=\"button\"\n disabled={busy}\n onClick={() => pickOption(opt.label)}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n selected ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n selected ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {selected && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"text-sm text-foreground\">{opt.label}</span>\n {opt.description && <span className=\"block text-xs text-muted-foreground\">{opt.description}</span>}\n </span>\n </button>\n )\n })}\n\n <button\n type=\"button\"\n disabled={busy}\n onClick={pickOther}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n otherActive ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n otherActive ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {otherActive && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"text-sm text-foreground\">Other…</span>\n </button>\n {otherActive && (\n <Textarea\n autoFocus\n rows={2}\n disabled={busy}\n value={cur?.other ?? ''}\n onChange={(e) => update({ other: e.target.value, otherActive: true })}\n placeholder=\"Type your answer\"\n className=\"mt-1 text-sm\"\n />\n )}\n </div>\n </div>\n\n <div className=\"mt-3 flex items-center gap-1.5\">\n {step > 0 && (\n <Button size=\"sm\" variant=\"outline\" disabled={busy} onClick={() => setStep((s) => s - 1)} className=\"h-7 px-2 text-xs\">\n <ChevronLeft className=\"mr-1 h-3 w-3\" />Back\n </Button>\n )}\n {!isLast ? (\n <Button size=\"sm\" disabled={busy || !answered} onClick={() => setStep((s) => s + 1)} className=\"h-7 px-2 text-xs\">\n Next<ChevronRight className=\"ml-1 h-3 w-3\" />\n </Button>\n ) : (\n <Button size=\"sm\" disabled={busy || !allAnswered} onClick={() => void submit()} className=\"h-7 px-2 text-xs\">\n {submitting === 'answer' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Send answer{total > 1 ? 's' : ''}\n </Button>\n )}\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={() => void dismiss()} className=\"ml-auto h-7 px-2 text-xs text-muted-foreground\">\n {submitting === 'dismiss' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Dismiss\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","\nimport { useEffect, useMemo, useState, useSyncExternalStore } from 'react'\nimport type React from 'react'\nimport { AlertCircle, Brain, ChevronDown, ChevronRight, ChevronUp, Circle, CircleStop, GitFork, Terminal } from 'lucide-react'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport { messageBody } from '@/lib/display'\nimport type { ChatHistoryImport, ChatHistoryImportEntry } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { chatTimestamp } from './helpers'\nimport { dateKey, TIMELINE_STATUS_LABELS, type ActivityStep, type TimelineEntry } from './sessionTrace'\nimport type { ChatStatusEvent as StatusEvent } from '@/store'\n\nconst TIMELINE_STATUS_COLORS: Record<string, string> = {\n online: 'text-emerald-400',\n offline: 'text-zinc-400',\n shutdown: 'text-zinc-400',\n restarted: 'text-blue-400',\n 'compaction-requested': 'text-zinc-400',\n compacting: 'text-amber-400',\n compacted: 'text-amber-400',\n 'compaction-stalled': 'text-red-400',\n 'clear-requested': 'text-zinc-400',\n 'clearing-context': 'text-amber-400',\n 'context-cleared': 'text-amber-400',\n 'clear-stalled': 'text-red-400',\n 'shutting-down': 'text-zinc-400',\n}\n\nfunction dateSeparatorLabel(dateStr: string): string {\n const today = new Date()\n const [y, m, d] = dateStr.split('-').map(Number)\n const target = new Date(y!, m! - 1, d)\n const todayKey = dateKey(today.getTime())\n if (dateStr === todayKey) return 'Today'\n const yesterday = new Date(today)\n yesterday.setDate(yesterday.getDate() - 1)\n if (dateStr === dateKey(yesterday.getTime())) return 'Yesterday'\n return target.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric', year: target.getFullYear() !== today.getFullYear() ? 'numeric' : undefined })\n}\n\nexport function StatusMarker({ event }: { event: StatusEvent }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Circle className={cn('w-2 h-2 fill-current', TIMELINE_STATUS_COLORS[event.status] || 'text-zinc-400')} />\n <span>{TIMELINE_STATUS_LABELS[event.status] || event.status}</span>\n <span className=\"text-muted-foreground/60\">{chatTimestamp(event.timestamp)}</span>\n </div>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function BusyIndicator({ blockedLabel, onInterrupt }: { blockedLabel?: string; onInterrupt?: () => void }) {\n if (blockedLabel) {\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"flex items-center gap-2 rounded-2xl rounded-bl-sm bg-card ring-1 ring-red-500/30 px-4 py-2.5\">\n <AlertCircle className=\"w-3.5 h-3.5 text-red-400\" />\n <span className=\"text-xs text-red-300\">blocked: {blockedLabel}</span>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"flex items-center gap-2 rounded-2xl rounded-bl-sm bg-card ring-1 ring-foreground/10 px-4 py-2.5\">\n <div className=\"flex items-center gap-1\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-yellow-400 animate-[pulse_1.4s_ease-in-out_infinite]\" />\n <span className=\"w-1.5 h-1.5 rounded-full bg-yellow-400 animate-[pulse_1.4s_ease-in-out_0.2s_infinite]\" />\n <span className=\"w-1.5 h-1.5 rounded-full bg-yellow-400 animate-[pulse_1.4s_ease-in-out_0.4s_infinite]\" />\n </div>\n <span className=\"text-xs text-muted-foreground\">working</span>\n {onInterrupt && (\n <button\n onClick={onInterrupt}\n title=\"Interrupt\"\n className=\"ml-1 flex items-center gap-1 rounded-full px-1.5 py-0.5 text-xs text-muted-foreground hover:text-red-300 hover:bg-red-500/10 transition-colors\"\n >\n <CircleStop className=\"w-3.5 h-3.5\" />\n Stop\n </button>\n )}\n </div>\n </div>\n )\n}\n\nconst HIDE_TOOLS_KEY = 'agent-relay:chat-hide-tools'\nconst hideToolsStore = (() => {\n const listeners = new Set<() => void>()\n let value = (() => {\n try {\n return window.localStorage.getItem(HIDE_TOOLS_KEY) === 'on'\n } catch {\n return false\n }\n })()\n const emit = () => listeners.forEach((l) => l())\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (e) => {\n if (e.key !== HIDE_TOOLS_KEY) return\n value = e.newValue === 'on'\n emit()\n })\n }\n return {\n subscribe(cb: () => void) {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n get: () => value,\n toggle() {\n value = !value\n try {\n window.localStorage.setItem(HIDE_TOOLS_KEY, value ? 'on' : 'off')\n } catch {}\n emit()\n },\n }\n})()\n\nfunction useHideTools(): [boolean, () => void] {\n const hideTools = useSyncExternalStore(hideToolsStore.subscribe, hideToolsStore.get, () => false)\n return [hideTools, hideToolsStore.toggle]\n}\n\nexport function ActivityTrace({ steps, showReasoning }: { steps: ActivityStep[]; showReasoning: boolean }) {\n const [hideTools, toggleHideTools] = useHideTools()\n const visible = showReasoning ? steps : steps.filter((s) => s.kind !== 'reasoning')\n if (!visible.length) return null\n const toolCount = visible.filter((s) => s.kind === 'tool').length\n return (\n <div className=\"flex justify-start mb-2\">\n <div className=\"max-w-[85%] md:max-w-[75%] min-w-0 space-y-1.5\">\n {visible.map((step) => {\n if (step.kind === 'narration') {\n return (\n <div key={step.id} className=\"text-sm leading-relaxed whitespace-pre-wrap break-words text-foreground/90 min-w-0\">\n {step.text}\n </div>\n )\n }\n if (step.kind === 'reasoning') {\n return (\n <div key={step.id} className=\"flex items-start gap-1.5 text-xs leading-relaxed text-muted-foreground/80\">\n <Brain className=\"w-3.5 h-3.5 mt-0.5 shrink-0 opacity-70\" />\n <span className=\"italic whitespace-pre-wrap break-words min-w-0\">{step.text}</span>\n </div>\n )\n }\n if (hideTools) return null\n return (\n <div key={step.id} className=\"flex items-start gap-1.5 text-xs leading-relaxed text-muted-foreground\">\n <Terminal className=\"w-3 h-3 mt-0.5 shrink-0 opacity-70\" />\n <span className=\"min-w-0 break-words\">\n <span className=\"font-medium\">{step.label || 'tool'}</span>\n {step.text ? <span className=\"opacity-70\"> — {step.text}</span> : null}\n </span>\n </div>\n )\n })}\n {toolCount > 0 && (\n <button\n onClick={toggleHideTools}\n className=\"flex items-center gap-1 text-[11px] text-muted-foreground/50 hover:text-muted-foreground transition-colors text-left\"\n >\n <ChevronRight className={cn('w-3 h-3 shrink-0 transition-transform', !hideTools && 'rotate-90')} />\n <span>{hideTools ? `show ${toolCount} tool step${toolCount === 1 ? '' : 's'}` : 'hide tool steps'}</span>\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport function DateSeparator({ date }: { date: string }) {\n return (\n <div className=\"flex items-center justify-center gap-3 py-3 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <span className=\"text-xs font-medium text-muted-foreground\">{dateSeparatorLabel(date)}</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function CreatedMarker({ timestamp }: { timestamp: number }) {\n const d = new Date(timestamp)\n const label = d.toLocaleString(undefined, { month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit' })\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <span className=\"text-xs text-muted-foreground/60\">created {label}</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function ImportedHistoryMarker({ history }: { history: ChatHistoryImport }) {\n const source = history.sourceAgentLabel || history.sourcePeerId\n const count = history.entries.length\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <div className=\"flex items-center gap-1.5 rounded-full border border-dashed border-border bg-muted/30 px-2 py-1 text-[11px] text-muted-foreground\">\n <GitFork className=\"h-3 w-3\" />\n <span>forked history from {source}</span>\n <span className=\"text-muted-foreground/60\">{count} {count === 1 ? 'entry' : 'entries'}</span>\n </div>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function ImportedMessageBubble({ entry, sourceLabel }: { entry: ChatHistoryImportEntry; sourceLabel?: string }) {\n const msg = entry.message\n const body = messageBody(msg)\n const isOriginalHuman = entry.originalFrom === HUMAN_AGENT_ID\n return (\n <div className={cn('flex mb-3 opacity-80', isOriginalHuman ? 'justify-end' : 'justify-start')}>\n <div className=\"max-w-[85%] md:max-w-[75%]\">\n <div\n className={cn(\n 'rounded-2xl border border-dashed px-3.5 py-2 text-sm select-text',\n isOriginalHuman\n ? 'border-primary/25 bg-primary/10 text-foreground rounded-br-sm'\n : 'border-border bg-card/70 rounded-bl-sm'\n )}\n >\n <div className={cn('mb-1 text-[10px] uppercase tracking-normal', isOriginalHuman ? 'text-primary/70' : 'text-muted-foreground')}>\n forked history · {isOriginalHuman ? 'you' : (sourceLabel || entry.originalFrom)}\n </div>\n <FormattedBody text={body} rawBody={msg.body} className=\"leading-relaxed\" />\n <p className={cn('mt-1 flex items-center justify-end gap-1.5 text-xs', isOriginalHuman ? 'text-primary/60' : 'text-muted-foreground')}>\n <span className=\"opacity-40\">#{entry.originalMessageId}</span>\n <span>{chatTimestamp(entry.originalCreatedAt)}</span>\n </p>\n </div>\n </div>\n </div>\n )\n}\n\nexport function StickyPromptBanner({ scrollRef, timeline }: { scrollRef: React.RefObject<HTMLElement | null>; timeline: TimelineEntry[] }) {\n const [hidden, setHidden] = useState(true)\n const [expandedByPrompt, setExpandedByPrompt] = useState<{ id: number; value: boolean } | null>(null)\n const [collapsedByPrompt, setCollapsedByPrompt] = useState<{ id: number; value: boolean } | null>(null)\n const [promptAbove, setPromptAbove] = useState(true)\n\n const lastOutbound = useMemo(() => {\n for (let i = timeline.length - 1; i >= 0; i--) {\n const entry = timeline[i]\n if (!entry || entry.type !== 'message') continue\n if (entry.msg.from === HUMAN_AGENT_ID) {\n return { id: entry.msg.id, body: messageBody(entry.msg) }\n }\n }\n return null\n }, [timeline])\n\n useEffect(() => {\n const scrollEl = scrollRef.current\n if (!lastOutbound || !scrollEl) { setHidden(true); return }\n const target = scrollEl.querySelector(`[data-msg-id=\"${lastOutbound.id}\"]`)\n if (!target) { setHidden(true); return }\n const observer = new IntersectionObserver(\n ([e]) => {\n if (!e) return\n setHidden(e.isIntersecting)\n if (!e.isIntersecting) {\n const rootTop = e.rootBounds?.top ?? scrollEl.getBoundingClientRect().top\n setPromptAbove(e.boundingClientRect.top < rootTop)\n }\n },\n { root: scrollEl, threshold: 0 }\n )\n observer.observe(target)\n const onScroll = () => {\n const r = target.getBoundingClientRect()\n const sr = scrollEl.getBoundingClientRect()\n setPromptAbove(r.top < sr.top)\n }\n scrollEl.addEventListener('scroll', onScroll, { passive: true })\n return () => { observer.disconnect(); scrollEl.removeEventListener('scroll', onScroll) }\n }, [lastOutbound?.id, scrollRef])\n\n if (hidden || !lastOutbound || !lastOutbound.body.trim()) return null\n\n const expanded = expandedByPrompt?.id === lastOutbound.id ? expandedByPrompt.value : false\n const collapsed = collapsedByPrompt?.id === lastOutbound.id ? collapsedByPrompt.value : false\n\n function scrollToPrompt() {\n const scrollEl = scrollRef.current\n if (!scrollEl || !lastOutbound) return\n const target = scrollEl.querySelector(`[data-msg-id=\"${lastOutbound.id}\"]`)\n target?.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n\n const arrow = promptAbove ? '↑' : '↓'\n\n if (collapsed) {\n return (\n <div className=\"sticky top-0 z-10 -mx-3 md:-mx-4 -mt-3 md:-mt-4 bg-background\">\n <button\n type=\"button\"\n className=\"w-full flex items-center justify-center gap-1.5 py-1 text-[11px] text-primary/60 hover:text-primary border-b border-primary/10 transition-colors\"\n onClick={() => setCollapsedByPrompt({ id: lastOutbound.id, value: false })}\n >\n <span>Your prompt</span>\n <ChevronDown className=\"w-3 h-3\" />\n </button>\n </div>\n )\n }\n\n return (\n <div className=\"sticky top-0 z-10 -mx-3 md:-mx-4 -mt-3 md:-mt-4 px-2 md:px-3 pt-2 pb-1.5 bg-background border-b border-primary/10\">\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground mb-0.5\">\n <span className=\"font-medium text-primary/70\">Your prompt</span>\n <button\n type=\"button\"\n className=\"ml-auto hover:text-foreground transition-colors\"\n onClick={scrollToPrompt}\n >\n {arrow} scroll to original\n </button>\n <button\n type=\"button\"\n className=\"hover:text-foreground transition-colors\"\n onClick={() => setCollapsedByPrompt({ id: lastOutbound.id, value: true })}\n title=\"Minimize\"\n >\n <ChevronUp className=\"w-3 h-3\" />\n </button>\n </div>\n <p\n className={cn('text-sm text-foreground leading-snug cursor-pointer', !expanded && 'line-clamp-2')}\n onClick={() => setExpandedByPrompt({ id: lastOutbound.id, value: !expanded })}\n >\n {lastOutbound.body}\n </p>\n </div>\n )\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { ArrowDownToLine, Loader2, MessageSquare } from 'lucide-react'\nimport { Virtuoso, type VirtuosoHandle } from 'react-virtuoso'\nimport { Button } from '@/components/ui/button'\nimport type { ProviderPendingApproval } from '@/lib/display'\nimport { MessageBubble } from './MessageBubble'\nimport { PermissionRequestBubble } from './AskQuestionForm'\nimport {\n ActivityTrace,\n BusyIndicator,\n CreatedMarker,\n DateSeparator,\n ImportedHistoryMarker,\n ImportedMessageBubble,\n StatusMarker,\n StickyPromptBanner,\n} from './TraceView'\nimport type { TimelineEntry } from './sessionTrace'\n\nconst FIRST_ITEM_INDEX_BASE = 1_000_000\n\n// Horizontal gutter lives on the ROWS, not the Virtuoso scroller. Virtuoso sizes\n// its inner list to the scroller's padding-box width, so padding on the scroller\n// insets content on the left but is negated on the right — which let justify-end\n// (outbound) bubbles clip against the screen edge. Padding on each row is real.\nconst GUTTER = 'px-3 md:px-4'\n\ninterface TimelineFooterContext {\n agentId: string\n agentStatus?: string\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n onInterrupt: () => void\n}\n\n// Module-stable component (see footerContext note in VirtualTimeline). Virtuoso reconciles\n// its custom components by function identity, so this MUST NOT be recreated per-render or the\n// pending-approval form it hosts remounts and loses the user's in-progress selection. Dynamic\n// values arrive via Virtuoso's `context` prop. The PermissionRequestBubble is keyed by the\n// approval id so it remounts only on a genuinely new prompt, not on every poll/SSE refresh.\nfunction TimelineFooter({ context }: { context?: TimelineFooterContext }) {\n if (!context) return null\n const { agentId, agentStatus, pendingApproval, blockedLabel, canInterrupt, onInterrupt } = context\n return (\n <div className={GUTTER}>\n {pendingApproval && <PermissionRequestBubble key={pendingApproval.id} agentId={agentId} approval={pendingApproval} />}\n {agentStatus === 'busy' && !pendingApproval && <BusyIndicator blockedLabel={blockedLabel} onInterrupt={canInterrupt ? onInterrupt : undefined} />}\n </div>\n )\n}\n\ninterface VirtualTimelineProps {\n agentId: string\n agentStatus?: string\n timeline: TimelineEntry[]\n hasMore: boolean\n loading: boolean\n loadedInitial: boolean\n showReasoning: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n onAtBottomChange?: (atBottom: boolean) => void\n onLoadOlder: () => void\n onInterrupt: () => void\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}\n\ninterface TimelineAnchor {\n key: string | null\n index: number\n}\n\nfunction timelineEntryKey(entry: TimelineEntry): string {\n if (entry.type === 'message') return `msg-${entry.msg.id}`\n // Key by the FIRST step only — stable as the turn streams. Including the last\n // step's id rekeyed the entry on every appended step, so virtuoso treated the\n // in-place-growing turn as a replaced item and lost its resize anchoring: the\n // viewport jumped down by the added height while scrolled up reading history.\n if (entry.type === 'activity') return `act-${entry.steps[0]?.id ?? entry.timestamp}`\n if (entry.type === 'import-boundary') return `import-${entry.history.id}`\n if (entry.type === 'imported-message') return `import-msg-${entry.history.id}-${entry.entry.originalMessageId}-${entry.entry.position}`\n if (entry.type === 'status') return `status-${entry.event.id}`\n if (entry.type === 'date') return `date-${entry.date}`\n return `created-${entry.timestamp}`\n}\n\nfunction anchorForTimeline(timeline: TimelineEntry[]): TimelineAnchor {\n const anchorIndex = timeline.findIndex((entry) => entry.type !== 'date' && entry.type !== 'created')\n const index = anchorIndex >= 0 ? anchorIndex : 0\n const entry = timeline[index]\n return { key: entry ? timelineEntryKey(entry) : null, index }\n}\n\nfunction usePrependFirstItemIndex(agentId: string, timeline: TimelineEntry[]): number {\n const [firstItemIndex, setFirstItemIndex] = useState(() => FIRST_ITEM_INDEX_BASE - timeline.length)\n const previous = useRef<{ agentId: string; anchor: TimelineAnchor }>({\n agentId,\n anchor: anchorForTimeline(timeline),\n })\n\n useLayoutEffect(() => {\n const nextAnchor = anchorForTimeline(timeline)\n const prev = previous.current\n\n setFirstItemIndex((current) => {\n if (prev.agentId !== agentId) return FIRST_ITEM_INDEX_BASE - timeline.length\n if (!prev.anchor.key) return current\n const anchorIndex = timeline.findIndex((entry) => timelineEntryKey(entry) === prev.anchor.key)\n const prependedRows = anchorIndex - prev.anchor.index\n return prependedRows > 0 ? current - prependedRows : current\n })\n\n previous.current = { agentId, anchor: nextAnchor }\n }, [agentId, timeline])\n\n return firstItemIndex\n}\n\nexport function VirtualTimeline({\n agentId,\n agentStatus,\n timeline,\n hasMore,\n loading,\n loadedInitial,\n showReasoning,\n pendingApproval,\n blockedLabel,\n canInterrupt,\n onAtBottomChange,\n onLoadOlder,\n onInterrupt,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: VirtualTimelineProps) {\n const virtuosoRef = useRef<VirtuosoHandle>(null)\n const scrollerRef = useRef<HTMLElement | null>(null)\n const [atBottom, setAtBottom] = useState(true)\n const firstItemIndex = usePrependFirstItemIndex(agentId, timeline)\n const latestKey = timeline.length > 0 ? timelineEntryKey(timeline[timeline.length - 1]!) : null\n const lastSeenAtBottomKey = useRef<string | null>(latestKey)\n const previousAgentId = useRef(agentId)\n if (previousAgentId.current !== agentId) {\n previousAgentId.current = agentId\n lastSeenAtBottomKey.current = latestKey\n }\n const lastSeenIndex = lastSeenAtBottomKey.current\n ? timeline.findIndex((entry) => timelineEntryKey(entry) === lastSeenAtBottomKey.current)\n : -1\n const newTailCount = !atBottom && lastSeenIndex >= 0\n ? timeline.slice(lastSeenIndex + 1).filter((entry) => entry.type === 'message').length\n : 0\n\n useLayoutEffect(() => {\n if (atBottom) lastSeenAtBottomKey.current = latestKey\n }, [atBottom, latestKey])\n\n const setScrollerRef = useCallback((ref: HTMLElement | Window | null) => {\n scrollerRef.current = ref instanceof HTMLElement ? ref : null\n }, [])\n\n const handleAtBottomChange = useCallback((bottom: boolean) => {\n setAtBottom(bottom)\n onAtBottomChange?.(bottom)\n }, [onAtBottomChange])\n\n const handleStartReached = useCallback(() => {\n if (!hasMore || loading) return\n onLoadOlder()\n }, [hasMore, loading, onLoadOlder])\n\n const jumpToLatest = useCallback(() => {\n lastSeenAtBottomKey.current = latestKey\n // Scroll the scroller to its true bottom rather than aligning the last data item:\n // the Footer (busy \"working\" bubble / pending approval) lives below the last item,\n // so scrollToIndex('LAST') leaves it — and the last bubble itself — partly off-screen.\n const el = scrollerRef.current\n if (el) {\n el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' })\n return\n }\n virtuosoRef.current?.scrollToIndex({ index: 'LAST', align: 'end', behavior: 'smooth' })\n }, [latestKey])\n\n const Header = useMemo(() => {\n return function TimelineHeader() {\n return (\n <div className={GUTTER}>\n <StickyPromptBanner scrollRef={scrollerRef} timeline={timeline} />\n <TimelineStartMarker hasMore={hasMore} loading={loading} loadedInitial={loadedInitial} hasItems={timeline.length > 0} />\n </div>\n )\n }\n }, [hasMore, loadedInitial, loading, timeline])\n\n // Keep the Footer component identity module-stable (TimelineFooter) and pass the dynamic\n // values through Virtuoso's context. pendingApproval gets a fresh object reference on every\n // poll/SSE refresh (providerPendingApproval rebuilds it, no upstream memo); recreating the\n // Footer closure on that churn made Virtuoso remount the approval form and discard the user's\n // selection ~1s after they clicked. Context updates re-render the footer without remounting.\n const footerContext = useMemo<TimelineFooterContext>(\n () => ({ agentId, agentStatus, pendingApproval, blockedLabel, canInterrupt, onInterrupt }),\n [agentId, agentStatus, blockedLabel, canInterrupt, onInterrupt, pendingApproval],\n )\n\n const EmptyPlaceholder = useMemo(() => {\n return function TimelineEmptyPlaceholder() {\n return (\n <div className=\"flex h-full flex-col items-center justify-center text-center\">\n {loading ? <Loader2 className=\"mb-2 h-5 w-5 animate-spin text-muted-foreground\" /> : <MessageSquare className=\"mb-2 h-8 w-8 text-zinc-600\" />}\n <p className=\"text-xs text-muted-foreground\">{loading ? 'Loading messages' : 'No messages yet'}</p>\n </div>\n )\n }\n }, [loading])\n\n const components = useMemo(() => ({ Header, Footer: TimelineFooter, EmptyPlaceholder }), [EmptyPlaceholder, Header])\n\n return (\n <div className=\"relative min-h-0 flex-1\">\n <Virtuoso\n key={agentId}\n ref={virtuosoRef}\n scrollerRef={setScrollerRef}\n className=\"h-full py-3 md:py-4\"\n // Clip horizontal overflow so a bubble can never make the chat scroll sideways past\n // the screen edge. Virtuoso only sets overflowY inline, so this takes effect; code\n // blocks/tables already scroll internally, so nothing meaningful is clipped.\n // Horizontal padding is on the rows (GUTTER), not here — see GUTTER note above.\n style={{ height: '100%', overflowX: 'hidden' }}\n context={footerContext}\n data={timeline}\n firstItemIndex={firstItemIndex}\n initialTopMostItemIndex={Math.max(0, timeline.length - 1)}\n computeItemKey={(_, entry) => timelineEntryKey(entry)}\n itemContent={(_, entry) => (\n <div className={GUTTER}>\n <TimelineRow\n entry={entry}\n agentId={agentId}\n showReasoning={showReasoning}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n </div>\n )}\n components={components}\n startReached={handleStartReached}\n atBottomStateChange={handleAtBottomChange}\n atBottomThreshold={64}\n // Function form reads virtuoso's LIVE at-bottom state at the moment each item is\n // appended — so a busy agent's streaming tool/narration only auto-scrolls when the\n // user is actually at the bottom. The old static `stickToBottom` value was stale at\n // append time and yanked the viewport down even while scrolled up reading history.\n followOutput={(isAtBottom) => (isAtBottom ? 'smooth' : false)}\n increaseViewportBy={{ top: 600, bottom: 600 }}\n />\n {!atBottom && timeline.length > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"absolute bottom-3 right-4 z-20 h-8 gap-1.5 rounded-full border border-border/70 bg-background/95 px-3 text-xs shadow-lg backdrop-blur\"\n onClick={jumpToLatest}\n >\n <ArrowDownToLine className=\"h-3.5 w-3.5\" />\n Latest\n {newTailCount > 0 && (\n <span className=\"ml-0.5 min-w-4 rounded-full bg-primary px-1.5 py-0.5 text-[10px] font-medium leading-none text-primary-foreground\">\n {newTailCount > 99 ? '99+' : newTailCount}\n </span>\n )}\n </Button>\n )}\n </div>\n )\n}\n\nfunction TimelineStartMarker({ hasMore, loading, loadedInitial, hasItems }: { hasMore: boolean; loading: boolean; loadedInitial: boolean; hasItems: boolean }) {\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n <span>Loading earlier messages</span>\n </div>\n )\n }\n if (!hasMore && loadedInitial && hasItems) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground/70\">\n <div className=\"h-px flex-1 bg-border\" />\n <span>Beginning of conversation</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n }\n return null\n}\n\nfunction TimelineRow({\n entry,\n agentId,\n showReasoning,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: {\n entry: TimelineEntry\n agentId: string\n showReasoning: boolean\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}) {\n if (entry.type === 'message') {\n return (\n <MessageBubble\n msg={entry.msg}\n peer={agentId}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n )\n }\n if (entry.type === 'activity') return <ActivityTrace steps={entry.steps} showReasoning={showReasoning} />\n if (entry.type === 'import-boundary') return <ImportedHistoryMarker history={entry.history} />\n if (entry.type === 'imported-message') return <ImportedMessageBubble entry={entry.entry} sourceLabel={entry.history.sourceAgentLabel || entry.history.sourcePeerId} />\n if (entry.type === 'status') return <StatusMarker event={entry.event} />\n if (entry.type === 'date') return <DateSeparator date={entry.date} />\n return <CreatedMarker timestamp={entry.timestamp} />\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n MessageSquare,\n Minimize2,\n MoreHorizontal,\n Power,\n Terminal,\n Volume2,\n VolumeX,\n X,\n} from 'lucide-react'\nimport { useAgentTerminal } from '@/hooks/use-agent-terminal'\nimport { useRelayStore, useNow } from '@/store'\nimport { AgentRuntimeChips, ContextRing } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { TerminalDialog } from '@/components/shared/terminal-viewer'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { api, apiUpload } from '@/lib/api'\nimport { providerSlashCommands } from '@/lib/slash-commands'\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { micAvailable, PttRecorder, transcribeClip, voiceTts } from '@/lib/voice'\nimport {\n agentSupportsControlAction,\n displayName,\n inboxPeer,\n isReactionEventMessage,\n providerBlockedState,\n shortPath,\n} from '@/lib/display'\nimport type { Artifact, AttachmentRef, FileStatResult, InboxThread, Message } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { ChatHeader } from './ChatHeader'\nimport { Composer } from './Composer'\nimport { FloatingFilePreview } from './FilePreview'\nimport type { PendingAttachment, ReferencedPathInfo } from './types'\nimport {\n chatTimestamp,\n orchestratorForFilePreview,\n parentPath,\n revokePendingAttachmentUrls,\n supportsSideFilePreview,\n} from './helpers'\nimport { buildTimeline } from './sessionTrace'\nimport { useAgentStatusEvents } from './hooks/useAgentStatusEvents'\nimport { useBackNavProtection } from './hooks/useBackNavProtection'\nimport { VirtualTimeline } from './VirtualTimeline'\n\nconst NO_THREAD_HISTORY: Message[] = []\n\nexport function ChatPanel({ threads, onBack, showBackButton }: { threads: InboxThread[]; onBack?: () => void; showBackButton?: boolean }) {\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const agentsById = useRelayStore((s) => s.agentsById)\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const now = useNow()\n const sendChatMessage = useRelayStore((s) => s.sendChatMessage)\n const openFilesAt = useRelayStore((s) => s.openFilesAt)\n const openFilesForAgent = useRelayStore((s) => s.openFilesForAgent)\n const openAgentDetail = useRelayStore((s) => s.openAgentDetail)\n const chatSending = useRelayStore((s) => s.chatSending)\n const markInboxThreadRead = useRelayStore((s) => s.markInboxThreadRead)\n const markInboxThreadUnread = useRelayStore((s) => s.markInboxThreadUnread)\n const setReplyDraft = useRelayStore((s) => s.setReplyDraft)\n const exportThread = useRelayStore((s) => s.exportThread)\n const doAgentAction = useRelayStore((s) => s.doAgentAction)\n const workspaceAction = useRelayStore((s) => s.workspaceAction)\n const openWorkspaceFocus = useRelayStore((s) => s.openWorkspaceFocus)\n const forkFromAgent = useRelayStore((s) => s.forkFromAgent)\n const chatHistoryImports = useRelayStore((s) => s.chatHistoryImports)\n const agentChatWindow = useRelayStore((s) => s.agentChatByAgent[s.selectedInboxThread])\n const agentChatMessages = agentChatWindow?.messages ?? NO_THREAD_HISTORY\n const loadOlder = useRelayStore((s) => s.loadOlder)\n const openConfirm = useRelayStore((s) => s.openConfirm)\n const showError = useRelayStore((s) => s.showError)\n const orchestrators = useRelayStore((s) => s.orchestrators)\n const fetchOrchestrators = useRelayStore((s) => s.fetchOrchestrators)\n const showReasoning = useRelayStore((s) => s.showReasoning)\n const voiceTtsEnabled = useRelayStore((s) => s.voiceTtsEnabled)\n const setVoiceTtsEnabled = useRelayStore((s) => s.setVoiceTtsEnabled)\n const voiceInputMode = useRelayStore((s) => s.voiceInputMode)\n\n const fileInputRef = useRef<HTMLInputElement>(null)\n const pttRecorderRef = useRef<PttRecorder | null>(null)\n const [micState, setMicState] = useState<'idle' | 'recording' | 'transcribing'>('idle')\n const pendingAttachmentsRef = useRef<PendingAttachment[]>([])\n const [pendingAttachments, setPendingAttachments] = useState<PendingAttachment[]>([])\n const [dragActive, setDragActive] = useState(false)\n const [filePreview, setFilePreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type'] } | null>(null)\n const [floatingPreview, setFloatingPreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect } | null>(null)\n const [filePreviewError, setFilePreviewError] = useState('')\n const filePreviewCloseTimer = useRef<number | null>(null)\n const filePreviewRequest = useRef(0)\n const statusEvents = useAgentStatusEvents(selectedInboxThread)\n\n const thread = useMemo(\n () => threads.find((t) => t.peer === selectedInboxThread) || null,\n [threads, selectedInboxThread]\n )\n\n const threadMessages = useMemo(() => {\n return agentChatMessages\n .filter((message) => inboxPeer(message) === selectedInboxThread && !isReactionEventMessage(message))\n .sort((a, b) => a.id - b.id)\n }, [agentChatMessages, selectedInboxThread])\n\n const agent = agentsById[selectedInboxThread] || null\n // Pre-session-destroy window (#183): the agent is running end-of-session work before a\n // compact/clear/restart/shutdown and is intentionally non-addressable. Block the composer\n // so a message can't be fired into a session that's tearing down.\n const agentFinalizing = typeof agent?.meta?.lifecycleAction === 'string' && agent.meta.lifecycleAction.startsWith('finalizing-')\n const { terminalOpen, terminalTarget, terminalOpening, openTerminal: handleOpenTerminal, closeTerminal: handleCloseTerminal } = useAgentTerminal(agent?.id)\n const agentSpawnRequestId = typeof agent?.meta?.spawnRequestId === 'string' ? agent.meta.spawnRequestId as string : ''\n const importedHistory = useMemo(() => {\n return chatHistoryImports.filter((history) =>\n history.targetAgentId === selectedInboxThread ||\n Boolean(agentSpawnRequestId && history.targetSpawnRequestId === agentSpawnRequestId)\n )\n }, [agentSpawnRequestId, chatHistoryImports, selectedInboxThread])\n const blockedState = providerBlockedState(agent)\n const pendingApproval = blockedState?.pendingApproval\n const chatThread = useMemo(() => {\n if (!selectedInboxThread) return null\n if (!thread && threadMessages.length === 0) return null\n const lastMessage = threadMessages[threadMessages.length - 1] ?? thread?.lastMessage ?? null\n const previewMessage = thread?.previewMessage && threadMessages.some((message) => message.id === thread.previewMessage?.id)\n ? thread.previewMessage\n : lastMessage\n return {\n id: thread?.id ?? selectedInboxThread,\n peer: selectedInboxThread,\n messages: threadMessages,\n lastMessage,\n previewMessage,\n attention: thread?.attention ?? { unread: 0, needsHumanResponse: false, score: 0 },\n archived: thread?.archived ?? false,\n draft: thread?.draft ?? '',\n }\n }, [selectedInboxThread, thread, threadMessages])\n const exportableThread = chatThread || (importedHistory.length > 0 ? { peer: selectedInboxThread, messages: [], importedHistory } : null)\n const draft = inboxDrafts[selectedInboxThread] || ''\n\n const tmuxSession = typeof agent?.meta?.tmuxSession === 'string' && (agent.meta.tmuxSession as string).trim() ? agent.meta.tmuxSession as string : null\n const termOrch = tmuxSession ? orchestrators.find((o) => (o as any).managedAgents?.some((m: any) => m.agentId === agent!.id || m.tmuxSession === tmuxSession)) ?? null : null\n const canReadTerminal = Boolean(tmuxSession && termOrch?.status === 'online' && agent?.providerCapabilities?.terminal?.live?.read)\n const runtimeProvider = agent?.providerCapabilities?.model?.provider ?? (typeof agent?.meta?.provider === 'string' ? agent.meta.provider : undefined)\n const canWriteTerminal = Boolean(canReadTerminal && (agent?.providerCapabilities?.terminal?.live?.write || runtimeProvider === 'claude'))\n const canAttachTerminal = agent?.providerCapabilities?.terminal?.attach?.create === true\n const canOpenTerminal = canReadTerminal || canAttachTerminal\n const canCompact = agentSupportsControlAction(agent, 'compact')\n const canClearContext = agentSupportsControlAction(agent, 'clearContext')\n const canShutdown = agentSupportsControlAction(agent, 'shutdown')\n const canInterrupt = agentSupportsControlAction(agent, 'interrupt')\n const interruptAgent = () => { if (agent) void doAgentAction(agent, 'interrupt') }\n\n // Slash-command palette (item 6). Derived purely from the draft during render —\n // no effect syncs it. slashClosed lets Escape dismiss until the draft changes.\n const [slashIndex, setSlashIndex] = useState(0)\n const [slashClosed, setSlashClosed] = useState(false)\n const slashEnabled = agent?.providerCapabilities?.liveSession?.slashCommands === true\n const slashProvider = agent?.providerCapabilities?.model?.provider ?? (typeof agent?.meta?.provider === 'string' ? agent.meta.provider : undefined)\n const slashMatches = (slashEnabled && !slashClosed && /^\\/\\S*$/.test(draft))\n ? providerSlashCommands(slashProvider).filter((c) => c.name.toLowerCase().startsWith(draft.toLowerCase()))\n : []\n const slashActiveIndex = slashMatches.length ? Math.min(slashIndex, slashMatches.length - 1) : 0\n function acceptSlash(cmd: SlashCommand) {\n setReplyDraft(selectedInboxThread, `${cmd.name} `)\n setSlashIndex(0)\n }\n function handleDraftChange(value: string) {\n setReplyDraft(selectedInboxThread, value)\n if (slashClosed) setSlashClosed(false)\n setSlashIndex(0)\n }\n const hasPendingUploads = pendingAttachments.some((item) => item.uploading)\n const readyAttachments = pendingAttachments.filter((item) => item.artifact)\n const hasDraft = draft.trim().length > 0 || pendingAttachments.length > 0\n\n // Back navigation protection when draft exists\n const handleBackNav = useCallback(() => {\n // Don't navigate away — the draft is protected\n }, [])\n useBackNavProtection(hasDraft, handleBackNav)\n\n pendingAttachmentsRef.current = pendingAttachments\n\n useEffect(() => {\n return () => {\n revokePendingAttachmentUrls(pendingAttachmentsRef.current)\n }\n }, [])\n\n useEffect(() => {\n if (agent?.meta?.tmuxSession && orchestrators.length === 0) void fetchOrchestrators()\n }, [agent?.id, agent?.meta?.tmuxSession, orchestrators.length])\n\n useEffect(() => {\n return () => {\n if (filePreviewCloseTimer.current !== null) window.clearTimeout(filePreviewCloseTimer.current)\n }\n }, [])\n\n const timeline = useMemo(\n () => buildTimeline(threadMessages, statusEvents, agent?.createdAt, importedHistory),\n [threadMessages, statusEvents, agent?.createdAt, importedHistory]\n )\n\n const loadOlderForSelectedAgent = useCallback(() => {\n if (!selectedInboxThread || !agentChatWindow?.hasMore || agentChatWindow.loading) return\n void loadOlder(selectedInboxThread)\n }, [agentChatWindow?.hasMore, agentChatWindow?.loading, loadOlder, selectedInboxThread])\n\n const clearFilePreviewCloseTimer = useCallback(() => {\n if (filePreviewCloseTimer.current === null) return\n window.clearTimeout(filePreviewCloseTimer.current)\n filePreviewCloseTimer.current = null\n }, [])\n\n const resolveReferencedFile = useCallback(async (path: string): Promise<ReferencedPathInfo | null> => {\n const orchestrator = orchestratorForFilePreview(orchestrators, path)\n if (!orchestrator) return null\n try {\n const stat = await api<FileStatResult>('GET', `/orchestrators/${encodeURIComponent(orchestrator.id)}/files/stat?path=${encodeURIComponent(path)}`)\n return { orchestratorId: orchestrator.id, path: stat.path, type: stat.type }\n } catch {\n return null\n }\n }, [orchestrators])\n\n // Hover shows a lightweight floating preview anchored to the link — it does\n // not reflow the chat, so the link stays under the cursor.\n const previewReferencedFile = useCallback((path: string, line?: number, anchor?: DOMRect) => {\n if (!supportsSideFilePreview() || !anchor) return\n const request = ++filePreviewRequest.current\n void resolveReferencedFile(path).then((info) => {\n if (filePreviewRequest.current !== request) return\n if (!info) return\n clearFilePreviewCloseTimer()\n setFloatingPreview({ ...info, line: line || 0, anchor })\n setFilePreviewError('')\n })\n }, [clearFilePreviewCloseTimer, resolveReferencedFile])\n\n const scheduleCloseReferencedFilePreview = useCallback(() => {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n filePreviewCloseTimer.current = window.setTimeout(() => {\n setFloatingPreview(null)\n }, 250)\n }, [clearFilePreviewCloseTimer])\n\n // Clicking the link commits to the side panel — and dismisses the floating\n // preview so the two never show at once.\n const openReferencedFile = useCallback((path: string, line?: number) => {\n void resolveReferencedFile(path).then((info) => {\n if (!info) {\n showError('File Not Found', path)\n return\n }\n if (supportsSideFilePreview()) {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n setFloatingPreview(null)\n setFilePreview({ ...info, line: line || 0 })\n setFilePreviewError('')\n return\n }\n if (info.type === 'directory') void openFilesAt({ orchestratorId: info.orchestratorId, path: info.path, overlay: true })\n else void openFilesAt({ orchestratorId: info.orchestratorId, path: parentPath(info.path), selectedPath: info.path, line, overlay: true })\n })\n }, [clearFilePreviewCloseTimer, openFilesAt, resolveReferencedFile, showError])\n\n function closeFilePreview() {\n setFilePreview(null)\n setFilePreviewError('')\n }\n async function uploadFiles(files: FileList | File[]) {\n const list = Array.from(files).filter((file) => file.size > 0)\n if (!list.length) return\n const pending = list.map((file): PendingAttachment => ({\n id: `${Date.now()}-${file.name}-${Math.random().toString(16).slice(2)}`,\n fileName: file.name,\n size: file.size,\n previewUrl: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n uploading: true,\n }))\n setPendingAttachments((current) => [...current, ...pending])\n\n for (let i = 0; i < list.length; i += 1) {\n const file = list[i]!\n const item = pending[i]!\n try {\n const artifact = await apiUpload<Artifact>('/artifacts', file, {\n filename: file.name,\n sensitivity: 'normal',\n })\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, artifact, uploading: false } : entry))\n } catch (e) {\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, error: (e as Error).message, uploading: false } : entry))\n }\n }\n }\n\n function removePendingAttachment(id: string) {\n setPendingAttachments((current) => {\n const item = current.find((entry) => entry.id === id)\n if (item?.previewUrl) URL.revokeObjectURL(item.previewUrl)\n return current.filter((entry) => entry.id !== id)\n })\n }\n\n function clearPendingAttachments() {\n revokePendingAttachmentUrls(pendingAttachments)\n setPendingAttachments([])\n }\n\n function handleSend() {\n if ((!draft.trim() && readyAttachments.length === 0) || !selectedInboxThread || chatSending || hasPendingUploads || agentFinalizing) return\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(draft, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n if (slashMatches.length) {\n if (e.key === 'ArrowDown') { e.preventDefault(); setSlashIndex((i) => Math.min(i + 1, slashMatches.length - 1)); return }\n if (e.key === 'ArrowUp') { e.preventDefault(); setSlashIndex((i) => Math.max(i - 1, 0)); return }\n if (e.key === 'Escape') { e.preventDefault(); setSlashClosed(true); return }\n if (e.key === 'Enter' || e.key === 'Tab') { e.preventDefault(); const cmd = slashMatches[slashActiveIndex]; if (cmd) acceptSlash(cmd); return }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLTextAreaElement>) {\n const files = Array.from(e.clipboardData.files).filter((file) => file.type.startsWith('image/'))\n if (!files.length) return\n e.preventDefault()\n void uploadFiles(files)\n }\n\n // Push-to-talk. Two behaviours (Settings → Voice input):\n // 'compose' — transcribe into the composer (review, then Enter). The default.\n // 'autosend' — transcribe and send to the agent immediately, hands-light loop.\n async function startPtt() {\n if (!micAvailable || micState !== 'idle' || !selectedInboxThread) return\n voiceTts.bargeIn() // stop any speech while the user talks\n const recorder = new PttRecorder()\n try {\n await recorder.start()\n pttRecorderRef.current = recorder\n setMicState('recording')\n } catch (e) {\n pttRecorderRef.current = null\n setMicState('idle')\n showError('Microphone unavailable', (e as Error)?.message || 'Could not access the microphone.')\n }\n }\n\n async function stopPtt() {\n const recorder = pttRecorderRef.current\n if (!recorder || micState !== 'recording') return\n pttRecorderRef.current = null\n setMicState('transcribing')\n try {\n const clip = await recorder.stop()\n if (!clip) return\n const text = await transcribeClip(clip)\n if (!text) return\n const combined = draft ? `${draft} ${text}` : text\n if (voiceInputMode === 'autosend' && !chatSending && !hasPendingUploads) {\n // Speak-and-send: skip the composer, fire it straight at the agent. The\n // reply auto-speaks (voiceTts.onResponse) and you hold to talk again.\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(combined, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n } else {\n setReplyDraft(selectedInboxThread, combined)\n }\n } catch (e) {\n showError('Transcription failed', (e as Error)?.message || 'Could not transcribe audio.')\n } finally {\n setMicState('idle')\n }\n }\n\n if (!selectedInboxThread) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-4\">\n <MessageSquare className=\"w-12 h-12 text-zinc-600 mb-3\" />\n <p className=\"text-muted-foreground text-sm\">Select an agent to start chatting</p>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"flex h-full min-w-0\">\n <div className=\"@container/chat flex h-full min-w-0 flex-1 flex-col\">\n <ChatHeader\n selectedInboxThread={selectedInboxThread}\n agent={agent}\n now={now}\n blockedState={blockedState}\n thread={chatThread}\n exportableThread={exportableThread}\n importedHistory={importedHistory}\n showBackButton={showBackButton}\n onBack={onBack}\n openAgentDetail={openAgentDetail}\n openWorkspaceFocus={openWorkspaceFocus}\n voiceTtsEnabled={voiceTtsEnabled}\n setVoiceTtsEnabled={setVoiceTtsEnabled}\n canOpenTerminal={canOpenTerminal}\n terminalOpening={terminalOpening}\n handleOpenTerminal={handleOpenTerminal}\n canInterrupt={canInterrupt}\n interruptAgent={interruptAgent}\n canCompact={canCompact}\n canClearContext={canClearContext}\n canShutdown={canShutdown}\n openConfirm={openConfirm}\n workspaceAction={workspaceAction}\n doAgentAction={doAgentAction}\n openFilesForAgent={openFilesForAgent}\n forkFromAgent={forkFromAgent}\n markInboxThreadUnread={markInboxThreadUnread}\n markInboxThreadRead={markInboxThreadRead}\n exportThread={exportThread}\n />\n\n {/* Timeline */}\n <VirtualTimeline\n agentId={selectedInboxThread}\n agentStatus={agent?.status}\n timeline={timeline}\n hasMore={agentChatWindow?.hasMore ?? false}\n loading={agentChatWindow?.loading ?? false}\n loadedInitial={agentChatWindow?.loadedInitial ?? false}\n showReasoning={showReasoning}\n pendingApproval={pendingApproval}\n blockedLabel={blockedState?.label}\n canInterrupt={canInterrupt}\n onLoadOlder={loadOlderForSelectedAgent}\n onInterrupt={interruptAgent}\n onOpenReferencedPath={openReferencedFile}\n onPreviewReferencedPath={previewReferencedFile}\n onPreviewReferencedPathEnd={scheduleCloseReferencedFilePreview}\n />\n\n <Composer\n draft={draft}\n placeholder={`Message ${agent ? displayName(agent) : selectedInboxThread}…`}\n chatSending={chatSending}\n disabled={agentFinalizing}\n hasPendingUploads={hasPendingUploads}\n readyAttachmentCount={readyAttachments.length}\n pendingAttachments={pendingAttachments}\n micAvailable={micAvailable}\n micState={micState}\n slashMatches={slashMatches}\n slashActiveIndex={slashActiveIndex}\n onDraftChange={handleDraftChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onUploadFiles={(files) => { void uploadFiles(files) }}\n onRemovePendingAttachment={removePendingAttachment}\n onSend={handleSend}\n onAcceptSlash={acceptSlash}\n onSlashHover={setSlashIndex}\n onStartPtt={() => { void startPtt() }}\n onStopPtt={() => { void stopPtt() }}\n footerText={agentFinalizing\n ? `${agent ? displayName(agent) : 'Agent'} is wrapping up (${(agent?.meta?.lifecycleAction as string).slice('finalizing-'.length)}) — messaging paused`\n : 'Enter to send · Shift+Enter for newline'}\n />\n </div>\n {filePreview && (\n <aside\n className=\"hidden h-full w-[min(44vw,720px)] min-w-[360px] shrink-0 flex-col border-l border-border bg-background xl:flex\"\n >\n <div className=\"flex h-10 shrink-0 items-center gap-2 border-b border-border px-3\">\n <span className=\"min-w-0 flex-1 text-xs font-medium text-muted-foreground\">File preview</span>\n {filePreviewError && <span className=\"max-w-[18rem] truncate text-xs text-red-400\">{filePreviewError}</span>}\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Close preview\" onClick={closeFilePreview}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n <div className=\"min-h-0 flex-1\">\n {filePreview.type === 'directory' ? (\n <DirectoryContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n onReadError={setFilePreviewError}\n />\n ) : (\n <FileContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n line={filePreview.line}\n onReadError={setFilePreviewError}\n />\n )}\n </div>\n </aside>\n )}\n </div>\n {floatingPreview && (\n <FloatingFilePreview\n preview={floatingPreview}\n error={filePreviewError}\n onReadError={setFilePreviewError}\n onMouseEnter={clearFilePreviewCloseTimer}\n onMouseLeave={scheduleCloseReferencedFilePreview}\n />\n )}\n {terminalTarget && (\n <TerminalDialog open={terminalOpen} onOpenChange={handleCloseTerminal} orchestratorId={terminalTarget.orchestratorId} session={terminalTarget.session} interactive={terminalTarget.interactive || canWriteTerminal} />\n )}\n </>\n )\n}\n","\nimport { useEffect } from 'react'\nimport { useRelayStore } from '@/store'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\n\nexport function useDraftCleanup() {\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const agentsById = useRelayStore((s) => s.agentsById)\n const set = useRelayStore((s) => s.set)\n\n useEffect(() => {\n const draftPeers = Object.keys(inboxDrafts)\n if (draftPeers.length === 0) return\n\n const stale = draftPeers.filter((peer) => !agentsById[peer] && peer !== HUMAN_AGENT_ID)\n if (stale.length === 0) return\n\n // Only clean up if the agent has been gone for a reasonable time (check on mount only)\n const timer = setTimeout(() => {\n const currentAgents = useRelayStore.getState().agentsById\n const next = { ...useRelayStore.getState().inboxDrafts }\n let changed = false\n for (const peer of stale) {\n if (!currentAgents[peer]) {\n delete next[peer]\n changed = true\n }\n }\n if (changed) set({ inboxDrafts: next })\n }, 30_000) // 30s grace period before purging\n\n return () => clearTimeout(timer)\n }, [])\n}\n","\nimport { useEffect } from 'react'\nimport { useKeyboardViewportHeight } from '@/hooks/use-keyboard-viewport'\nimport { useAllInboxThreads } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { AgentListPanel } from './AgentListPanel'\nimport { ChatPanel } from './ChatPanel'\nimport { useChatAgents } from './hooks/useChatAgents'\nimport { useDraftCleanup } from './hooks/useDraftCleanup'\n\nexport function ChatView() {\n const threads = useAllInboxThreads()\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const set = useRelayStore((s) => s.set)\n const loadAgentChat = useRelayStore((s) => s.loadAgentChat)\n const visibleChatAgents = useChatAgents()\n const mobileShowChat = Boolean(selectedInboxThread)\n\n useDraftCleanup()\n\n useEffect(() => {\n if (!selectedInboxThread) return\n void loadAgentChat(selectedInboxThread)\n }, [selectedInboxThread, loadAgentChat])\n\n useEffect(() => {\n if (!selectedInboxThread) return\n if (!visibleChatAgents.some((agent) => agent.id === selectedInboxThread)) {\n set({ selectedInboxThread: '' })\n }\n }, [selectedInboxThread, visibleChatAgents, set])\n\n function handleMobileBack() {\n set({ selectedInboxThread: '' })\n }\n\n return (\n <div\n className=\"flex -m-4 md:-m-6\"\n style={{ height: 'calc(100dvh - var(--header-h) - var(--sat))' }}\n >\n <div className=\"hidden md:flex w-full\">\n <div className=\"w-1/3 min-w-[240px] max-w-xs flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} />\n </div>\n </div>\n\n <div className=\"md:hidden flex w-full overflow-hidden\">\n {!mobileShowChat ? (\n <div className=\"w-full flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n ) : (\n <MobileChatContainer>\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} onBack={handleMobileBack} showBackButton />\n </MobileChatContainer>\n )}\n </div>\n </div>\n )\n}\n\nfunction MobileChatContainer({ children }: { children: React.ReactNode }) {\n const height = useKeyboardViewportHeight()\n\n return (\n <div\n className=\"fixed inset-x-0 top-0 z-40 flex flex-col bg-background pt-[var(--sat)]\"\n style={{ height: height ? `${height}px` : '100dvh' }}\n >\n {children}\n </div>\n )\n}\n"],"x_google_ignoreList":[11],"mappings":"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"}
|