agent-relay-server 0.39.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-b8kUF4hR.js → activity-DAz3DcDA.js} +2 -2
- package/public/assets/{activity-b8kUF4hR.js.map → activity-DAz3DcDA.js.map} +1 -1
- package/public/assets/{agents-C_ZSRXRa.js → agents-BJ7qRWxt.js} +2 -2
- package/public/assets/{agents-C_ZSRXRa.js.map → agents-BJ7qRWxt.js.map} +1 -1
- package/public/assets/{analytics-3JbZ6M41.js → analytics-MNCS2qnT.js} +2 -2
- package/public/assets/{analytics-3JbZ6M41.js.map → analytics-MNCS2qnT.js.map} +1 -1
- package/public/assets/{automation-CVu2C3sk.js → automation-COp2Kb3h.js} +2 -2
- package/public/assets/{automation-CVu2C3sk.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-CSAGn8zM.js → formatted-body-impl-BbMHqkCy.js} +2 -2
- package/public/assets/{formatted-body-impl-CSAGn8zM.js.map → formatted-body-impl-BbMHqkCy.js.map} +1 -1
- package/public/assets/{index-n5wxGWSq.js → index-DgJOEApM.js} +5 -5
- package/public/assets/{index-n5wxGWSq.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-CCcvsBbm.js → maintenance-BHv90kXZ.js} +2 -2
- package/public/assets/{maintenance-CCcvsBbm.js.map → maintenance-BHv90kXZ.js.map} +1 -1
- package/public/assets/{managed-agents-DHfO5gVD.js → managed-agents-BAlvkxfo.js} +2 -2
- package/public/assets/{managed-agents-DHfO5gVD.js.map → managed-agents-BAlvkxfo.js.map} +1 -1
- package/public/assets/{markdown-preview-impl-C1jNXAEL.js → markdown-preview-impl-6k_FWjmd.js} +2 -2
- package/public/assets/{markdown-preview-impl-C1jNXAEL.js.map → markdown-preview-impl-6k_FWjmd.js.map} +1 -1
- package/public/assets/{memory-VmjJ-YZ8.js → memory-DBjqdVpg.js} +2 -2
- package/public/assets/{memory-VmjJ-YZ8.js.map → memory-DBjqdVpg.js.map} +1 -1
- package/public/assets/{messages-DXN6Rkjt.js → messages-axoaJY2N.js} +2 -2
- package/public/assets/{messages-DXN6Rkjt.js.map → messages-axoaJY2N.js.map} +1 -1
- package/public/assets/{orchestrators-CLyYvfn1.js → orchestrators-DMfHZ44H.js} +2 -2
- package/public/assets/{orchestrators-CLyYvfn1.js.map → orchestrators-DMfHZ44H.js.map} +1 -1
- package/public/assets/{overview-DZmVU2Fh.js → overview-DqxYWpUT.js} +2 -2
- package/public/assets/{overview-DZmVU2Fh.js.map → overview-DqxYWpUT.js.map} +1 -1
- package/public/assets/{pairs-BeEORfZF.js → pairs-D3wnzC1V.js} +2 -2
- package/public/assets/{pairs-BeEORfZF.js.map → pairs-D3wnzC1V.js.map} +1 -1
- package/public/assets/{security-DIe-a7rD.js → security-KWrb7PKj.js} +2 -2
- package/public/assets/{security-DIe-a7rD.js.map → security-KWrb7PKj.js.map} +1 -1
- package/public/assets/{settings-BeFPCFUZ.js → settings-PXMEzNAm.js} +2 -2
- package/public/assets/{settings-BeFPCFUZ.js.map → settings-PXMEzNAm.js.map} +1 -1
- package/public/assets/{tasks-BVXiBzUI.js → tasks-CFYShBCz.js} +2 -2
- package/public/assets/{tasks-BVXiBzUI.js.map → tasks-CFYShBCz.js.map} +1 -1
- package/public/assets/{terminal-viewer-impl-CN311GDZ.js → terminal-viewer-impl-BwPYZlWI.js} +2 -2
- package/public/assets/{terminal-viewer-impl-CN311GDZ.js.map → terminal-viewer-impl-BwPYZlWI.js.map} +1 -1
- package/public/assets/{work-queue-BnQftDAS.js → work-queue-VQ_6QDJc.js} +2 -2
- package/public/assets/{work-queue-BnQftDAS.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/db/messages.ts +36 -2
- package/src/db/migrations.ts +5 -0
- package/src/maintenance.ts +11 -17
- package/src/routes/commands.ts +22 -0
- package/src/services/send-message.ts +4 -0
- package/src/workspace-pr-completion.ts +121 -0
- package/public/assets/chat-BiCWbMPO.js +0 -2
- package/public/assets/chat-BiCWbMPO.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-D_O8VqMR.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/hooks/useMobileChatHistory.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\n// A `notice` session event (e.g. the runner's durable \"context compacted\" marker) renders\n// as a discreet timeline marker, reusing the StatusMarker path. Its `label` carries a\n// timeline-status key (e.g. \"compacted\"); we surface it as a StatusEvent so it dedupes with\n// the ephemeral live timeline-status decoration and survives a reload (the ephemeral one does\n// not). Returns null for non-notice messages or labels we don't render.\nexport function sessionNoticeStatusEvent(msg: Message): StatusEvent | null {\n if (msg.kind !== 'session') return null\n const s = msg.payload?.session as { type?: string; label?: string } | undefined\n if (s?.type !== 'notice') return null\n const status = typeof s.label === 'string' && s.label ? s.label : 'compacted'\n return { id: `notice-${msg.id}`, status, timestamp: messageEventTime(msg) }\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 const noticeStatusEvents: StatusEvent[] = []\n for (const msg of messages) {\n const notice = sessionNoticeStatusEvent(msg)\n if (notice) {\n noticeStatusEvents.push(notice)\n continue\n }\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, ...noticeStatusEvents])) {\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 { HUMAN_AGENT_ID } from '@/lib/constants'\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 const showBusy = agentStatus === 'busy' && !pendingApproval\n if (!pendingApproval && !showBusy) return null\n // pb gives the busy / approval bubble real breathing room above the composer.\n // A margin on the bubble itself is the scroller's LAST-child margin, which\n // browsers collapse at the scroll end (Safari especially) — so it sat flush\n // against the prompt area. Padding on this wrapper is part of its box and\n // always renders, so scrollHeight (and jump-to-latest) clears the bubble too.\n return (\n <div className={`${GUTTER} pb-3 md:pb-4`}>\n {pendingApproval && <PermissionRequestBubble key={pendingApproval.id} agentId={agentId} approval={pendingApproval} />}\n {showBusy && <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 // Count only what the AGENT sent — your own outbound prompt is appended to the\n // tail too, but it isn't \"new\" to you, so counting it made the badge tick up the\n // instant you hit send. Outbound = from HUMAN_AGENT_ID.\n const newTailCount = !atBottom && lastSeenIndex >= 0\n ? timeline.slice(lastSeenIndex + 1).filter((entry) => entry.type === 'message' && entry.msg.from !== HUMAN_AGENT_ID).length\n : 0\n\n useLayoutEffect(() => {\n if (atBottom) lastSeenAtBottomKey.current = latestKey\n }, [atBottom, latestKey])\n\n // Read at-bottom live without making it an effect dependency: the settle below\n // must fire on NEW tail content, not when you happen to scroll near the bottom\n // (which would yank away the atBottomThreshold slack and feel grabby).\n const atBottomRef = useRef(atBottom)\n atBottomRef.current = atBottom\n\n // When a new tail row appears while you're at the bottom — your own sent prompt,\n // a fresh agent message — followOutput pins to that row's ESTIMATED height, then\n // the real (taller) content renders and the true bottom drops below the fold,\n // leaving the new bubble half-cut at the viewport edge. Re-settle onto the\n // measured bottom over two frames (let Virtuoso commit the height, then scroll).\n // Instant, NOT smooth: a one-shot is fine, but a smooth scroll here would re-arm\n // the streaming jitter we fixed. Keyed on latestKey only — and latestKey is the\n // turn's FIRST step, so in-place streaming growth doesn't retrigger it; only a\n // genuinely new tail entry does (followOutput keeps streaming pinned meanwhile).\n useLayoutEffect(() => {\n if (!atBottomRef.current) return\n const el = scrollerRef.current\n if (!el) return\n let inner = 0\n const outer = requestAnimationFrame(() => {\n inner = requestAnimationFrame(() => {\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n })\n })\n return () => {\n cancelAnimationFrame(outer)\n cancelAnimationFrame(inner)\n }\n }, [latestKey])\n\n // The Footer (busy bubble / pending approval) renders BELOW the last data item,\n // and followOutput only reacts to data appends — so when it first appears while\n // the user is at the bottom, nothing scrolls and the agent can silently look\n // idle. Nudge to the true bottom on appearance. Keyed on the footer's PRESENCE\n // (status + approval id, never the approval object which is rebuilt every poll)\n // so it fires once on appearance, not on every refresh — no scroll churn.\n const approvalId = pendingApproval?.id\n useLayoutEffect(() => {\n if (!atBottom) return\n if (agentStatus !== 'busy' && !approvalId) return\n const el = scrollerRef.current\n if (el) el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' })\n }, [agentStatus, approvalId, atBottom])\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 // Bring the tail into the measured window FIRST. Off-screen rows are only\n // height-ESTIMATED, so a one-shot scrollTo(scrollHeight) from far up under-\n // shoots — the real (taller) heights only land as rows render mid-scroll, by\n // which point the target is stale and you stop mid-conversation (iPad Safari\n // exposed this; Android's continuous re-measure on manual drag hid it).\n // scrollToIndex is Virtuoso's job: it scrolls to and measures the last item.\n virtuosoRef.current?.scrollToIndex({ index: 'LAST', align: 'end' })\n // Then settle onto the true bottom so the Footer (busy \"working\" bubble /\n // pending approval, which renders below the last item) is fully visible.\n // Two frames: the first lets Virtuoso commit the tail measurement, the second\n // scrolls the now-correct height.\n const el = scrollerRef.current\n if (el) {\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' })\n }),\n )\n }\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 // overscrollBehavior contain stops iOS Safari's rubber-band overscroll at the\n // top/bottom from chaining to the page and bouncing back — that bounce fought\n // Virtuoso's programmatic positioning at the bottom (the \"vibrating\" jitter).\n style={{ height: '100%', overflowX: 'hidden', overscrollBehavior: 'contain' }}\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 //\n // 'auto' (instant), NOT 'smooth': react-virtuoso documents that a smooth follow\n // animation can't keep up with rapidly appended content — each new chunk restarts\n // the animation. On iOS Safari that perpetual programmatic scroll fought OS momentum\n // and pinned the layer in a low-res composited state (the \"vibrating + blurry\" bug).\n // Instant pinning settles each frame, so the layer rasterizes sharp and stays put.\n followOutput={(isAtBottom) => (isAtBottom ? 'auto' : 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'\n\n// While a chat is open on mobile (single-pane: list OR conversation), push a\n// browser-history entry so the Android system back button / swipe-back gesture\n// returns to the conversation list instead of leaving the dashboard. Drafts are\n// stored per-thread (server + store), so closing back to the list never loses\n// unsent input — there is nothing to guard against here.\n//\n// Desktop (list + conversation side by side) is excluded: there is no\n// list/conversation toggle to back out of, and pushing an entry would change\n// the meaning of browser-back. The existing draft guard (useBackNavProtection)\n// owns desktop back behavior.\nexport function useMobileChatHistory(open: boolean, onBack: () => void) {\n useEffect(() => {\n if (typeof window === 'undefined' || !open) return\n if (!window.matchMedia('(max-width: 767px)').matches) return\n\n window.history.pushState({ chatOpen: true }, '')\n\n function handlePopState() {\n onBack()\n }\n window.addEventListener('popstate', handlePopState)\n\n return () => {\n window.removeEventListener('popstate', handlePopState)\n // Closed via the in-app back arrow rather than the system back button:\n // our pushed entry is still on top, so consume it to keep the stack clean.\n if (window.history.state?.chatOpen) window.history.back()\n }\n }, [open, onBack])\n}\n","\nimport { useCallback, 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'\nimport { useMobileChatHistory } from './hooks/useMobileChatHistory'\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 const handleMobileBack = useCallback(() => {\n set({ selectedInboxThread: '' })\n }, [set])\n\n useMobileChatHistory(mobileShowChat, handleMobileBack)\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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"}
|