{"version":3,"sources":["../src/lib/cn.ts","../src/components/agent-steps.tsx","../src/components/approval-card.tsx","../src/components/chat-header.tsx","../src/components/tool-call-card.tsx","../src/components/message-bubble.tsx","../src/components/message-input.tsx","../src/components/scroll-anchor.tsx","../src/components/typing-indicator.tsx","../src/components/chat-window.tsx"],"names":["twMerge","clsx","useState","jsxs","jsx","useRef","useEffect","useCallback","useChat","useApproval"],"mappings":"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","file":"chunk-O7JXBGDA.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n","import { useState } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { AgentStep, AgentStepsProps } from \"../types\";\n\nexport function AgentSteps({ steps, className, collapsible = true }: AgentStepsProps) {\n  const [isOpen, setIsOpen] = useState(true);\n\n  if (steps.length === 0) return null;\n\n  return (\n    <div className={cn(\"prc-px-4 prc-py-2\", className)}>\n      {collapsible && (\n        <button\n          onClick={() => setIsOpen(!isOpen)}\n          className=\"prc-flex prc-items-center prc-gap-1 prc-text-xs prc-font-medium prc-text-text-secondary hover:prc-text-text-primary\"\n        >\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            viewBox=\"0 0 20 20\"\n            fill=\"currentColor\"\n            className={cn(\"prc-h-4 prc-w-4 prc-transition-transform\", isOpen && \"prc-rotate-90\")}\n          >\n            <path\n              fillRule=\"evenodd\"\n              d=\"M7.21 14.77a.75.75 0 0 1 .02-1.06L11.168 10 7.23 6.29a.75.75 0 1 1 1.04-1.08l4.5 4.25a.75.75 0 0 1 0 1.08l-4.5 4.25a.75.75 0 0 1-1.06-.02Z\"\n              clipRule=\"evenodd\"\n            />\n          </svg>\n          Agent Steps ({steps.length})\n        </button>\n      )}\n\n      {isOpen && (\n        <div className=\"prc-mt-2 prc-space-y-1\">\n          {steps.map((step) => (\n            <StepItem key={step.id} step={step} />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\nfunction StepItem({ step }: { step: AgentStep }) {\n  return (\n    <div className=\"prc-flex prc-items-center prc-gap-2 prc-rounded-lg prc-border prc-border-gray-100 prc-bg-white prc-px-3 prc-py-2\">\n      <StepStatusIcon status={step.status} />\n      <span className=\"prc-flex-1 prc-text-xs prc-font-medium prc-text-text-primary\">\n        {step.name}\n      </span>\n      {step.durationMs != null && (\n        <span className=\"prc-text-xs prc-text-text-secondary\">\n          {step.durationMs < 1000\n            ? `${step.durationMs}ms`\n            : `${(step.durationMs / 1000).toFixed(1)}s`}\n        </span>\n      )}\n    </div>\n  );\n}\n\nfunction StepStatusIcon({ status }: { status: AgentStep[\"status\"] }) {\n  switch (status) {\n    case \"completed\":\n      return (\n        <svg\n          className=\"prc-h-4 prc-w-4 prc-text-green-500\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 20 20\"\n          fill=\"currentColor\"\n        >\n          <path\n            fillRule=\"evenodd\"\n            d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z\"\n            clipRule=\"evenodd\"\n          />\n        </svg>\n      );\n    case \"failed\":\n      return (\n        <svg\n          className=\"prc-h-4 prc-w-4 prc-text-red-500\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 20 20\"\n          fill=\"currentColor\"\n        >\n          <path\n            fillRule=\"evenodd\"\n            d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z\"\n            clipRule=\"evenodd\"\n          />\n        </svg>\n      );\n    case \"running\":\n    case \"pending\":\n      return (\n        <svg\n          className=\"prc-h-4 prc-w-4 prc-animate-spin prc-text-primary\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n        >\n          <circle\n            className=\"prc-opacity-25\"\n            cx=\"12\"\n            cy=\"12\"\n            r=\"10\"\n            stroke=\"currentColor\"\n            strokeWidth=\"4\"\n          />\n          <path\n            className=\"prc-opacity-75\"\n            fill=\"currentColor\"\n            d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n          />\n        </svg>\n      );\n    default:\n      return <div className=\"prc-h-4 prc-w-4 prc-rounded-full prc-border-2 prc-border-gray-300\" />;\n  }\n}\n","import { useState } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { ApprovalCardProps } from \"../types\";\n\nexport function ApprovalCard({\n  request,\n  onApprove,\n  onReject,\n  className,\n  disabled = false,\n}: ApprovalCardProps) {\n  const [reason, setReason] = useState(\"\");\n\n  return (\n    <div\n      className={cn(\n        \"prc-mx-4 prc-rounded-xl prc-border prc-border-amber-200 prc-bg-amber-50 prc-p-4\",\n        className,\n      )}\n    >\n      <div className=\"prc-mb-2 prc-flex prc-items-center prc-gap-2\">\n        <svg\n          className=\"prc-h-5 prc-w-5 prc-text-amber-500\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 20 20\"\n          fill=\"currentColor\"\n        >\n          <path\n            fillRule=\"evenodd\"\n            d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-8-5a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-1.5 0v-4.5A.75.75 0 0 1 10 5Zm0 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n            clipRule=\"evenodd\"\n          />\n        </svg>\n        <span className=\"prc-text-sm prc-font-semibold prc-text-amber-800\">Approval Required</span>\n      </div>\n\n      {request.approvalExpiresAt && (\n        <p className=\"prc-mb-1 prc-text-xs prc-font-medium prc-text-amber-700\">\n          Expires {request.approvalExpiresAt.toLocaleString()}\n        </p>\n      )}\n\n      {Object.keys(request.payload).length > 0 && (\n        <pre className=\"prc-mb-3 prc-max-h-24 prc-overflow-auto prc-rounded prc-bg-white prc-p-2 prc-text-xs prc-text-gray-700\">\n          {JSON.stringify(request.payload, null, 2)}\n        </pre>\n      )}\n\n      <input\n        type=\"text\"\n        value={reason}\n        onChange={(e) => setReason(e.target.value)}\n        placeholder=\"Reason (optional)\"\n        disabled={disabled}\n        className={cn(\n          \"prc-mb-3 prc-w-full prc-rounded-lg prc-border prc-border-amber-200 prc-bg-white prc-px-3 prc-py-1.5 prc-text-xs\",\n          \"prc-outline-none focus:prc-border-amber-400 focus:prc-ring-1 focus:prc-ring-amber-400\",\n          \"disabled:prc-cursor-not-allowed disabled:prc-opacity-50\",\n        )}\n      />\n\n      <div className=\"prc-flex prc-gap-2\">\n        <button\n          onClick={() => onApprove(request.id, reason || undefined)}\n          disabled={disabled}\n          className={cn(\n            \"prc-flex-1 prc-rounded-lg prc-bg-green-600 prc-px-3 prc-py-1.5 prc-text-xs prc-font-medium prc-text-white\",\n            \"prc-transition-colors hover:prc-bg-green-700\",\n            \"disabled:prc-cursor-not-allowed disabled:prc-opacity-50\",\n          )}\n        >\n          Approve\n        </button>\n        <button\n          onClick={() => onReject(request.id, reason || undefined)}\n          disabled={disabled}\n          className={cn(\n            \"prc-flex-1 prc-rounded-lg prc-bg-red-600 prc-px-3 prc-py-1.5 prc-text-xs prc-font-medium prc-text-white\",\n            \"prc-transition-colors hover:prc-bg-red-700\",\n            \"disabled:prc-cursor-not-allowed disabled:prc-opacity-50\",\n          )}\n        >\n          Reject\n        </button>\n      </div>\n    </div>\n  );\n}\n","import { cn } from \"../lib/cn\";\n\ninterface ChatHeaderProps {\n  title?: string;\n  onClose?: () => void;\n  className?: string;\n}\n\nexport function ChatHeader({ title = \"Chat\", onClose, className }: ChatHeaderProps) {\n  return (\n    <div\n      className={cn(\n        \"prc-flex prc-items-center prc-justify-between prc-border-b prc-border-gray-200 prc-bg-surface prc-px-4 prc-py-3\",\n        className,\n      )}\n    >\n      <div className=\"prc-flex prc-items-center prc-gap-2\">\n        <div className=\"prc-h-2.5 prc-w-2.5 prc-rounded-full prc-bg-green-500\" />\n        <h2 className=\"prc-text-sm prc-font-semibold prc-text-text-primary\">{title}</h2>\n      </div>\n      {onClose && (\n        <button\n          onClick={onClose}\n          className=\"prc-rounded-lg prc-p-1 prc-text-text-secondary prc-transition-colors hover:prc-bg-gray-100 hover:prc-text-text-primary\"\n          aria-label=\"Close chat\"\n        >\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            viewBox=\"0 0 20 20\"\n            fill=\"currentColor\"\n            className=\"prc-h-5 prc-w-5\"\n          >\n            <path d=\"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z\" />\n          </svg>\n        </button>\n      )}\n    </div>\n  );\n}\n","import { useState } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { ToolCall } from \"../types\";\n\nexport interface ToolCallCardProps {\n  toolCall: ToolCall;\n  className?: string;\n}\n\nexport function ToolCallCard({ toolCall, className }: ToolCallCardProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const hasResult = typeof toolCall.result === \"string\" && toolCall.result.length > 0;\n\n  return (\n    <div\n      className={cn(\"prc-rounded-md prc-border prc-bg-surface-secondary/50 prc-text-xs\", className)}\n    >\n      <button\n        type=\"button\"\n        onClick={() => hasResult && setIsOpen((v) => !v)}\n        disabled={!hasResult}\n        className={cn(\n          \"prc-flex prc-w-full prc-items-center prc-gap-2 prc-px-2.5 prc-py-1.5 prc-text-left\",\n          hasResult && \"hover:prc-bg-surface-secondary\",\n        )}\n      >\n        <StatusIcon status={toolCall.status} />\n        <span className=\"prc-flex-1 prc-truncate prc-font-mono prc-text-[11px]\">\n          {toolCall.name || \"tool\"}\n        </span>\n        {hasResult && (\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            viewBox=\"0 0 20 20\"\n            fill=\"currentColor\"\n            className={cn(\n              \"prc-h-3.5 prc-w-3.5 prc-text-text-secondary prc-transition-transform\",\n              isOpen && \"prc-rotate-90\",\n            )}\n          >\n            <path\n              fillRule=\"evenodd\"\n              d=\"M7.21 14.77a.75.75 0 0 1 .02-1.06L11.168 10 7.23 6.29a.75.75 0 1 1 1.04-1.08l4.5 4.25a.75.75 0 0 1 0 1.08l-4.5 4.25a.75.75 0 0 1-1.06-.02Z\"\n              clipRule=\"evenodd\"\n            />\n          </svg>\n        )}\n      </button>\n\n      {isOpen && hasResult && (\n        <pre className=\"prc-overflow-x-auto prc-border-t prc-bg-gray-50 prc-px-2.5 prc-py-1.5 prc-text-[10px] prc-text-text-secondary\">\n          {toolCall.result}\n        </pre>\n      )}\n    </div>\n  );\n}\n\nfunction StatusIcon({ status }: { status: ToolCall[\"status\"] }) {\n  if (status === \"running\") {\n    return (\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        className=\"prc-h-3.5 prc-w-3.5 prc-animate-spin prc-text-text-secondary\"\n      >\n        <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n      </svg>\n    );\n  }\n  if (status === \"error\") {\n    return (\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 20 20\"\n        fill=\"currentColor\"\n        className=\"prc-h-3.5 prc-w-3.5 prc-text-red-500\"\n      >\n        <path\n          fillRule=\"evenodd\"\n          d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm-3.28-3.28a.75.75 0 0 1 0-1.06L8.94 11.5 6.72 9.28a.75.75 0 1 1 1.06-1.06L10 10.44l2.22-2.22a.75.75 0 1 1 1.06 1.06l-2.22 2.22 2.22 2.22a.75.75 0 1 1-1.06 1.06L10 12.56l-2.22 2.22a.75.75 0 0 1-1.06 0Z\"\n          clipRule=\"evenodd\"\n        />\n      </svg>\n    );\n  }\n  if (status === \"complete\") {\n    return (\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 20 20\"\n        fill=\"currentColor\"\n        className=\"prc-h-3.5 prc-w-3.5 prc-text-green-500\"\n      >\n        <path\n          fillRule=\"evenodd\"\n          d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.707-9.293a1 1 0 0 0-1.414-1.414L9 10.586 7.707 9.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4Z\"\n          clipRule=\"evenodd\"\n        />\n      </svg>\n    );\n  }\n  // pending\n  return <span className=\"prc-h-2 prc-w-2 prc-rounded-full prc-bg-text-secondary/40\" aria-hidden />;\n}\n","import { cn } from \"../lib/cn\";\nimport type { MessageBubbleProps } from \"../types\";\nimport { ToolCallCard } from \"./tool-call-card\";\n\nexport function MessageBubble({\n  message,\n  className,\n  renderMarkdown = true,\n  showToolCalls = true,\n}: MessageBubbleProps) {\n  const isUser = message.role === \"user\";\n  const isError = message.status === \"error\";\n  const isStreaming = message.status === \"streaming\";\n  const toolCalls = !isUser && showToolCalls ? (message.toolCalls ?? []) : [];\n\n  return (\n    <div\n      className={cn(\n        \"prc-flex prc-w-full\",\n        isUser ? \"prc-justify-end\" : \"prc-justify-start\",\n        className,\n      )}\n    >\n      <div className=\"prc-flex prc-max-w-[80%] prc-flex-col prc-gap-1.5\">\n        {toolCalls.length > 0 && (\n          <div className=\"prc-flex prc-flex-col prc-gap-1\">\n            {toolCalls.map((tc) => (\n              <ToolCallCard key={tc.id} toolCall={tc} />\n            ))}\n          </div>\n        )}\n\n        <div\n          className={cn(\n            \"prc-rounded-2xl prc-px-4 prc-py-2.5 prc-text-sm prc-leading-relaxed\",\n            isUser\n              ? \"prc-bg-primary prc-text-white\"\n              : \"prc-bg-surface-secondary prc-text-text-primary\",\n            isError && \"prc-border prc-border-red-300 prc-bg-red-50\",\n          )}\n        >\n          {renderMarkdown ? (\n            <div\n              className=\"prc-prose prc-prose-sm prc-max-w-none\"\n              dangerouslySetInnerHTML={{\n                __html: renderSimpleMarkdown(message.content),\n              }}\n            />\n          ) : (\n            <p className=\"prc-whitespace-pre-wrap\">{message.content}</p>\n          )}\n\n          {isStreaming && (\n            <span className=\"prc-inline-block prc-h-4 prc-w-1 prc-animate-pulse prc-bg-current prc-ml-0.5\" />\n          )}\n\n          {isError && typeof message.metadata?.error === \"string\" && (\n            <p className=\"prc-mt-1 prc-text-xs prc-text-red-600\">{message.metadata.error}</p>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n/**\n * Minimal markdown renderer for chat messages.\n * Supports: bold, italic, inline code, code blocks, links, line breaks.\n */\nfunction renderSimpleMarkdown(text: string): string {\n  if (!text) return \"\";\n\n  let html = escapeHtml(text);\n\n  // Code blocks (```)\n  html = html.replace(\n    /```(\\w*)\\n([\\s\\S]*?)```/g,\n    '<pre class=\"prc-rounded prc-bg-gray-800 prc-text-gray-100 prc-p-3 prc-my-2 prc-overflow-x-auto prc-text-xs\"><code>$2</code></pre>',\n  );\n\n  // Inline code (`)\n  html = html.replace(\n    /`([^`]+)`/g,\n    '<code class=\"prc-rounded prc-bg-gray-100 prc-px-1.5 prc-py-0.5 prc-text-xs prc-font-mono\">$1</code>',\n  );\n\n  // Bold (**text**)\n  html = html.replace(/\\*\\*(.+?)\\*\\*/g, \"<strong>$1</strong>\");\n\n  // Italic (*text*)\n  html = html.replace(/\\*(.+?)\\*/g, \"<em>$1</em>\");\n\n  // Links [text](url)\n  html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_match, label: string, href: string) => {\n    const safeHref = sanitizeLinkHref(href);\n    return safeHref\n      ? `<a href=\"${safeHref}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"prc-text-primary prc-underline\">${label}</a>`\n      : label;\n  });\n\n  // Line breaks\n  html = html.replace(/\\n/g, \"<br />\");\n\n  return html;\n}\n\nfunction sanitizeLinkHref(value: string): string {\n  const candidate = value.trim();\n  return /^(https?:\\/\\/|mailto:|tel:|\\/|#)/i.test(candidate) ? candidate : \"\";\n}\n\nfunction escapeHtml(text: string): string {\n  const map: Record<string, string> = {\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quot;\",\n    \"'\": \"&#039;\",\n  };\n  return text.replace(/[&<>\"']/g, (m) => map[m] ?? m);\n}\n","import { type KeyboardEvent, useCallback, useEffect, useRef } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { MessageInputProps } from \"../types\";\n\nexport function MessageInput({\n  value,\n  onChange,\n  onSubmit,\n  placeholder = \"Type a message...\",\n  disabled = false,\n  className,\n}: MessageInputProps) {\n  const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n  // Auto-resize textarea\n  useEffect(() => {\n    const textarea = textareaRef.current;\n    if (!textarea) return;\n    textarea.style.height = \"auto\";\n    textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;\n  }, [value]);\n\n  const handleKeyDown = useCallback(\n    (e: KeyboardEvent<HTMLTextAreaElement>) => {\n      if (e.key === \"Enter\" && !e.shiftKey) {\n        e.preventDefault();\n        if (value.trim() && !disabled) {\n          onSubmit();\n        }\n      }\n    },\n    [value, disabled, onSubmit],\n  );\n\n  return (\n    <div\n      className={cn(\n        \"prc-flex prc-items-end prc-gap-2 prc-border-t prc-border-gray-200 prc-bg-surface prc-p-3\",\n        className,\n      )}\n    >\n      <textarea\n        ref={textareaRef}\n        value={value}\n        onChange={(e) => onChange(e.target.value)}\n        onKeyDown={handleKeyDown}\n        placeholder={placeholder}\n        disabled={disabled}\n        rows={1}\n        className={cn(\n          \"prc-flex-1 prc-resize-none prc-rounded-xl prc-border prc-border-gray-200 prc-bg-white prc-px-4 prc-py-2.5 prc-text-sm\",\n          \"prc-outline-none prc-transition-colors\",\n          \"focus:prc-border-primary focus:prc-ring-1 focus:prc-ring-primary\",\n          \"disabled:prc-cursor-not-allowed disabled:prc-opacity-50\",\n          \"placeholder:prc-text-text-secondary\",\n        )}\n      />\n      <button\n        onClick={onSubmit}\n        disabled={disabled || !value.trim()}\n        className={cn(\n          \"prc-flex prc-h-10 prc-w-10 prc-shrink-0 prc-items-center prc-justify-center prc-rounded-full\",\n          \"prc-bg-primary prc-text-white prc-transition-colors\",\n          \"hover:prc-bg-primary-hover\",\n          \"disabled:prc-cursor-not-allowed disabled:prc-opacity-50\",\n        )}\n        aria-label=\"Send message\"\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=\"currentColor\"\n          className=\"prc-h-5 prc-w-5\"\n        >\n          <path d=\"M3.478 2.404a.75.75 0 0 0-.926.941l2.432 7.905H13.5a.75.75 0 0 1 0 1.5H4.984l-2.432 7.905a.75.75 0 0 0 .926.94 60.519 60.519 0 0 0 18.445-8.986.75.75 0 0 0 0-1.218A60.517 60.517 0 0 0 3.478 2.404Z\" />\n        </svg>\n      </button>\n    </div>\n  );\n}\n","import { useEffect, useRef } from \"react\";\n\ninterface ScrollAnchorProps {\n  trackVisibility?: boolean;\n}\n\nexport function ScrollAnchor({ trackVisibility }: ScrollAnchorProps) {\n  const ref = useRef<HTMLDivElement>(null);\n  const isVisibleRef = useRef(true);\n\n  useEffect(() => {\n    if (!trackVisibility || !ref.current) return;\n\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        if (entry) {\n          isVisibleRef.current = entry.isIntersecting;\n        }\n      },\n      { threshold: 0 },\n    );\n\n    observer.observe(ref.current);\n    return () => observer.disconnect();\n  }, [trackVisibility]);\n\n  useEffect(() => {\n    if (isVisibleRef.current && ref.current) {\n      ref.current.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n    }\n  });\n\n  return <div ref={ref} className=\"prc-h-px prc-w-full\" />;\n}\n","import { cn } from \"../lib/cn\";\nimport type { TypingIndicatorProps } from \"../types\";\n\nexport function TypingIndicator({ className, text }: TypingIndicatorProps) {\n  return (\n    <div className={cn(\"prc-flex prc-items-center prc-gap-2 prc-px-4 prc-py-2\", className)}>\n      <div className=\"prc-flex prc-gap-1\">\n        <span\n          className=\"prc-h-2 prc-w-2 prc-rounded-full prc-bg-text-secondary prc-animate-bounce\"\n          style={{ animationDelay: \"0ms\" }}\n        />\n        <span\n          className=\"prc-h-2 prc-w-2 prc-rounded-full prc-bg-text-secondary prc-animate-bounce\"\n          style={{ animationDelay: \"150ms\" }}\n        />\n        <span\n          className=\"prc-h-2 prc-w-2 prc-rounded-full prc-bg-text-secondary prc-animate-bounce\"\n          style={{ animationDelay: \"300ms\" }}\n        />\n      </div>\n      {text && <span className=\"prc-text-sm prc-text-text-secondary\">{text}</span>}\n    </div>\n  );\n}\n","import { useApproval } from \"../core/use-approval\";\nimport { useChat } from \"../core/use-chat\";\nimport { cn } from \"../lib/cn\";\nimport type { ChatWindowProps } from \"../types\";\nimport { AgentSteps } from \"./agent-steps\";\nimport { ApprovalCard } from \"./approval-card\";\nimport { ChatHeader } from \"./chat-header\";\nimport { MessageBubble } from \"./message-bubble\";\nimport { MessageInput } from \"./message-input\";\nimport { ScrollAnchor } from \"./scroll-anchor\";\nimport { TypingIndicator } from \"./typing-indicator\";\n\nexport function ChatWindow({\n  provider,\n  sessionId,\n  initialMessages,\n  title,\n  placeholder,\n  className,\n  showAgentSteps = false,\n  showApprovals = false,\n  showToolCalls = true,\n  onError,\n}: ChatWindowProps & { onClose?: () => void }) {\n  const chat = useChat({\n    provider,\n    sessionId,\n    initialMessages,\n    onError,\n  });\n\n  const approval = useApproval({\n    provider,\n  });\n\n  return (\n    <div\n      className={cn(\n        \"prc-flex prc-h-full prc-flex-col prc-overflow-hidden prc-rounded-2xl prc-border prc-border-gray-200 prc-bg-surface\",\n        className,\n      )}\n    >\n      <ChatHeader title={title} />\n\n      {/* Messages */}\n      <div className=\"prc-flex-1 prc-overflow-y-auto prc-p-4 prc-space-y-3\">\n        {chat.messages.length === 0 && (\n          <div className=\"prc-flex prc-h-full prc-items-center prc-justify-center\">\n            <p className=\"prc-text-sm prc-text-text-secondary\">Start a conversation</p>\n          </div>\n        )}\n\n        {chat.messages.map((message) => (\n          <MessageBubble key={message.id} message={message} showToolCalls={showToolCalls} />\n        ))}\n\n        {showAgentSteps && <AgentSteps steps={[]} />}\n\n        {showApprovals &&\n          approval.pendingApprovals.map((req) => (\n            <ApprovalCard\n              key={req.id}\n              request={req}\n              onApprove={approval.approve}\n              onReject={approval.reject}\n              disabled={approval.isDeciding}\n            />\n          ))}\n\n        {chat.isLoading && <TypingIndicator />}\n\n        <ScrollAnchor trackVisibility />\n      </div>\n\n      {/* Input */}\n      <MessageInput\n        value={chat.input}\n        onChange={chat.setInput}\n        onSubmit={chat.handleSubmit}\n        placeholder={placeholder}\n        disabled={chat.isLoading}\n      />\n    </div>\n  );\n}\n"]}