@kite-copilot/chat-panel 0.1.2 → 0.2.1
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/README.md +186 -9
- package/dist/auto.cjs +3638 -0
- package/dist/auto.d.cts +60 -0
- package/dist/auto.d.ts +60 -0
- package/dist/auto.js +23 -0
- package/dist/chunk-R73Y24JS.js +3665 -0
- package/dist/createKiteChat-CFo7NUHz.d.cts +254 -0
- package/dist/createKiteChat-CFo7NUHz.d.ts +254 -0
- package/dist/embed.global.js +22 -23
- package/dist/index.cjs +3718 -0
- package/dist/index.d.cts +179 -0
- package/dist/index.d.ts +90 -287
- package/dist/index.js +67 -2737
- package/dist/styles.css +1 -1
- package/package.json +34 -23
- package/dist/index.d.mts +0 -376
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -2692
- package/dist/index.mjs.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/input.tsx","../src/components/ui/button.tsx","../src/components/ui/scroll-area.tsx","../src/components/AssistantActivity.tsx","../src/components/GuideCursor.tsx","../src/hooks/useGuideCursor.ts","../src/components/ui/card.tsx","../src/components/DataRenderer.tsx","../src/lib/ChatPanelContext.tsx","../src/components/ChatPanel.tsx","../src/components/AssistantSearchSummary.tsx"],"names":["twMerge","clsx","jsx","cva","Slot","React","jsxs","ScrollAreaPrimitive","Loader2","Search","CheckCircle2","AnimatePresence","motion","React2","Crown","Zap","Activity","XCircle","Clock","RefreshCw","AlertCircle","CreditCard","Mail","DollarSign","MapPin","Calendar","Users","Key","Smartphone","Laptop","Shield","TrendingUp","React3","Fragment","React4","currentGuideCheck","ArrowLeft","ChevronUp","ChevronDown","SquarePen","Command","CornerDownLeft","FileSpreadsheet","X","Paperclip","ArrowUp","React5"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n})\nScrollArea.displayName = \"ScrollArea\"\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Loader2, Search, CheckCircle2 } from \"lucide-react\"\n\ntype ActivityPhase = \"thinking\" | \"searching\" | \"executing\" | \"responding\"\n\ntype ProgressStep = {\n message: string\n completed: boolean\n}\n\nexport function AssistantActivity({ \n phase, \n progressSteps = [] \n}: { \n phase: ActivityPhase\n progressSteps?: ProgressStep[]\n}) {\n return (\n <div className=\"mb-3 rounded-lg bg-muted/40 px-3 py-3 text-xs text-muted-foreground transition-colors\">\n {phase === \"thinking\" && progressSteps.length === 0 && (\n <div className=\"flex items-center gap-2\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n <span>Thinking…</span>\n </div>\n )}\n\n {phase === \"searching\" && (\n <div className=\"space-y-2 animate-in fade-in-0 duration-300\">\n <div className=\"flex items-center gap-2\">\n <Search className=\"h-3.5 w-3.5 opacity-70\" />\n <span>Searching across pages…</span>\n </div>\n <ul className=\"ml-6 list-disc space-y-1\">\n <li className=\"opacity-90\">Checking recent changes</li>\n <li className=\"opacity-90\">Scanning documentation</li>\n <li className=\"opacity-90\">Summarizing relevant sections</li>\n </ul>\n </div>\n )}\n\n {(phase === \"thinking\" || phase === \"executing\" || phase === \"responding\") && progressSteps.length > 0 && (\n <div className=\"space-y-2 animate-in fade-in-0 duration-200\">\n {progressSteps.map((step, index) => (\n <div \n key={index} \n className={`flex items-center gap-2 transition-opacity duration-200 ${\n step.completed ? 'opacity-60' : 'opacity-100'\n }`}\n >\n {step.completed ? (\n <CheckCircle2 className=\"h-3.5 w-3.5 text-green-500 flex-shrink-0\" />\n ) : (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin flex-shrink-0\" />\n )}\n <span className={step.completed ? 'line-through' : ''}>{step.message}</span>\n </div>\n ))}\n {phase === \"responding\" && (\n <div className=\"flex items-center gap-2 opacity-100 animate-in fade-in-0 duration-200\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin flex-shrink-0\" />\n <span>Preparing response...</span>\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { motion, AnimatePresence } from \"framer-motion\"\n\ninterface GuideCursorProps {\n x: number\n y: number\n visible: boolean\n onClick?: boolean\n}\n\nexport function GuideCursor({ x, y, visible, onClick = false }: GuideCursorProps) {\n return (\n <AnimatePresence>\n {visible && (\n <motion.div\n className=\"fixed pointer-events-none z-[9999]\"\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{\n opacity: 1,\n scale: 1,\n x,\n y\n }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={{\n type: \"spring\",\n stiffness: 200,\n damping: 20\n }}\n style={{\n left: 0,\n top: 0,\n }}\n >\n {/* Cursor SVG */}\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Cursor shape */}\n <path\n d=\"M3 3L10.07 19.97L12.58 12.58L19.97 10.07L3 3Z\"\n fill=\"#C4B5FD\"\n />\n </svg>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport type { CursorTarget } from \"../types\"\n\nexport function useGuideCursor() {\n const [cursorState, setCursorState] = React.useState({\n x: 0,\n y: 0,\n visible: false,\n onClick: false\n })\n\n const moveTo = React.useCallback((target: CursorTarget) => {\n const element = document.querySelector(target.selector)\n\n if (element) {\n const rect = element.getBoundingClientRect()\n const offsetX = target.offset?.x || 0\n const offsetY = target.offset?.y || 0\n\n setCursorState({\n x: rect.left + rect.width / 2 + offsetX,\n y: rect.top + rect.height / 2 + offsetY,\n visible: true,\n onClick: target.onClick || false\n })\n }\n }, [])\n\n const hide = React.useCallback(() => {\n setCursorState(prev => ({ ...prev, visible: false }))\n }, [])\n\n const show = React.useCallback(() => {\n setCursorState(prev => ({ ...prev, visible: true }))\n }, [])\n\n return {\n cursorState,\n moveTo,\n hide,\n show\n }\n}\n\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from \"./ui/card\"\nimport {\n CheckCircle2,\n XCircle,\n Clock,\n DollarSign,\n CreditCard,\n Mail,\n MapPin,\n Calendar,\n TrendingUp,\n AlertCircle,\n RefreshCw,\n Users,\n Activity,\n Zap,\n Crown,\n Key,\n Laptop,\n Smartphone,\n Shield,\n} from \"lucide-react\"\nimport type { Subscription, Customer, Transaction, ApiKey, Session, DashboardStats } from \"../types\"\n\n// ============================================\n// Helper Functions\n// ============================================\n\nconst formatDate = (dateString: string) => {\n const date = new Date(dateString)\n return date.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" })\n}\n\nconst formatCurrency = (amount: number, currency: string = \"USD\") => {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency,\n }).format(amount)\n}\n\nconst getPlanIcon = (plan: string) => {\n switch (plan) {\n case \"Enterprise\": return Crown\n case \"Professional\": return Zap\n default: return Activity\n }\n}\n\nconst getPlanColor = (plan: string) => {\n switch (plan) {\n case \"Enterprise\": return \"bg-purple-50 text-purple-700 border-purple-200\"\n case \"Professional\": return \"bg-blue-50 text-blue-700 border-blue-200\"\n default: return \"bg-gray-50 text-gray-700 border-gray-200\"\n }\n}\n\n// ============================================\n// Status Badge Component\n// ============================================\n\nfunction StatusBadge({ status, type = \"default\" }: { status: string; type?: \"subscription\" | \"transaction\" | \"customer\" | \"default\" }) {\n const getConfig = () => {\n const statusLower = status.toLowerCase()\n \n if (type === \"transaction\") {\n switch (statusLower) {\n case \"paid\": return { color: \"bg-emerald-50 text-emerald-700 border-emerald-200\", icon: CheckCircle2 }\n case \"failed\": return { color: \"bg-red-50 text-red-700 border-red-200\", icon: XCircle }\n case \"pending\": return { color: \"bg-amber-50 text-amber-700 border-amber-200\", icon: Clock }\n case \"refunded\": return { color: \"bg-slate-50 text-slate-700 border-slate-200\", icon: RefreshCw }\n default: return { color: \"bg-gray-50 text-gray-700 border-gray-200\", icon: AlertCircle }\n }\n }\n \n if (type === \"subscription\") {\n switch (statusLower) {\n case \"active\": return { color: \"bg-emerald-50 text-emerald-700 border-emerald-200\", icon: CheckCircle2 }\n case \"cancelled\": return { color: \"bg-slate-50 text-slate-700 border-slate-200\", icon: XCircle }\n case \"past_due\": return { color: \"bg-red-50 text-red-700 border-red-200\", icon: AlertCircle }\n case \"trialing\": return { color: \"bg-blue-50 text-blue-700 border-blue-200\", icon: Clock }\n default: return { color: \"bg-gray-50 text-gray-700 border-gray-200\", icon: AlertCircle }\n }\n }\n \n // Default / customer status\n switch (statusLower) {\n case \"active\": return { color: \"bg-emerald-50 text-emerald-700 border-emerald-200\", icon: CheckCircle2 }\n case \"inactive\": return { color: \"bg-slate-50 text-slate-700 border-slate-200\", icon: XCircle }\n default: return { color: \"bg-gray-50 text-gray-700 border-gray-200\", icon: AlertCircle }\n }\n }\n \n const config = getConfig()\n const Icon = config.icon\n \n return (\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${config.color}`}>\n <Icon className=\"h-3 w-3\" />\n {status}\n </span>\n )\n}\n\n// ============================================\n// Subscription Components\n// ============================================\n\nexport function SubscriptionCard({ subscription }: { subscription: Subscription }) {\n const PlanIcon = getPlanIcon(subscription.plan)\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <div className={`h-1 ${subscription.status === \"active\" ? \"bg-emerald-500\" : subscription.status === \"past_due\" ? \"bg-red-500\" : \"bg-slate-300\"}`} />\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between\">\n <div className=\"space-y-1\">\n <CardTitle className=\"text-base font-semibold text-gray-900 flex items-center gap-2\">\n <CreditCard className=\"h-4 w-4 text-gray-500\" />\n {subscription.id}\n </CardTitle>\n {subscription.customer_email && (\n <CardDescription className=\"text-sm text-gray-500 flex items-center gap-1.5\">\n <Mail className=\"h-3 w-3\" />\n {subscription.customer_email}\n </CardDescription>\n )}\n </div>\n <StatusBadge status={subscription.status} type=\"subscription\" />\n </div>\n </CardHeader>\n <CardContent className=\"pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Plan</div>\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium border ${getPlanColor(subscription.plan)}`}>\n <PlanIcon className=\"h-3 w-3\" />\n {subscription.plan}\n </span>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Billing</div>\n <div className=\"text-sm font-medium text-gray-900\">\n {formatCurrency(subscription.amount, subscription.currency)} / {subscription.billing_cycle}\n </div>\n </div>\n </div>\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Current Period</div>\n <div className=\"text-sm text-gray-700\">\n {formatDate(subscription.current_period_start)} - {formatDate(subscription.current_period_end)}\n </div>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Created</div>\n <div className=\"text-sm text-gray-700\">\n {formatDate(subscription.created_at)}\n </div>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nexport function SubscriptionList({ subscriptions, maxItems = 5 }: { subscriptions: Subscription[]; maxItems?: number }) {\n const displaySubs = subscriptions.slice(0, maxItems)\n const hasMore = subscriptions.length > maxItems\n \n if (subscriptions.length === 0) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white\">\n <CardContent className=\"py-8 text-center\">\n <CreditCard className=\"h-10 w-10 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">No subscriptions found</p>\n </CardContent>\n </Card>\n )\n }\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <CreditCard className=\"h-4 w-4\" />\n {subscriptions.length} Subscription{subscriptions.length !== 1 ? \"s\" : \"\"}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-gray-100\">\n {displaySubs.map((sub) => {\n const PlanIcon = getPlanIcon(sub.plan)\n return (\n <div key={sub.id} className=\"px-4 py-3 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className={`p-2 rounded-lg ${getPlanColor(sub.plan).replace(\"text-\", \"text-\").replace(\"border-\", \"bg-\").split(\" \")[0]}`}>\n <PlanIcon className=\"h-4 w-4\" />\n </div>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {sub.customer_email || sub.customer_id}\n </div>\n <div className=\"text-xs text-gray-500\">\n {sub.plan} · {formatCurrency(sub.amount, sub.currency)}/{sub.billing_cycle}\n </div>\n </div>\n </div>\n <StatusBadge status={sub.status} type=\"subscription\" />\n </div>\n </div>\n )\n })}\n </div>\n {hasMore && (\n <div className=\"px-4 py-2 bg-gray-50 border-t border-gray-100 text-center\">\n <span className=\"text-xs text-gray-500\">\n +{subscriptions.length - maxItems} more subscription{subscriptions.length - maxItems !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n )\n}\n\n// ============================================\n// Customer Components\n// ============================================\n\nexport function CustomerCard({ customer }: { customer: Customer }) {\n const PlanIcon = getPlanIcon(customer.subscription)\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <div className={`h-1 ${customer.status === \"active\" ? \"bg-emerald-500\" : \"bg-slate-300\"}`} />\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div>\n <CardTitle className=\"text-base font-semibold text-gray-900\">\n {customer.name}\n </CardTitle>\n <CardDescription className=\"text-sm text-gray-500 flex items-center gap-1\">\n <Mail className=\"h-3 w-3\" />\n {customer.email}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={customer.status} type=\"customer\" />\n </div>\n </CardHeader>\n <CardContent className=\"pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Plan</div>\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium border ${getPlanColor(customer.subscription)}`}>\n <PlanIcon className=\"h-3 w-3\" />\n {customer.subscription}\n </span>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Revenue</div>\n <div className=\"text-sm font-medium text-gray-900 flex items-center gap-1\">\n <DollarSign className=\"h-3 w-3 text-emerald-500\" />\n {customer.revenue}\n </div>\n </div>\n </div>\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Location</div>\n <div className=\"text-sm text-gray-700 flex items-center gap-1\">\n <MapPin className=\"h-3 w-3 text-gray-400\" />\n {customer.location || \"Not specified\"}\n </div>\n </div>\n <div>\n <div className=\"text-xs text-gray-500 mb-1\">Customer Since</div>\n <div className=\"text-sm text-gray-700 flex items-center gap-1\">\n <Calendar className=\"h-3 w-3 text-gray-400\" />\n {customer.joinDate}\n </div>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nexport function CustomerList({ customers, maxItems = 5 }: { customers: Customer[]; maxItems?: number }) {\n const displayCustomers = customers.slice(0, maxItems)\n const hasMore = customers.length > maxItems\n \n if (customers.length === 0) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white\">\n <CardContent className=\"py-8 text-center\">\n <Users className=\"h-10 w-10 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">No customers found</p>\n </CardContent>\n </Card>\n )\n }\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n {customers.length} Customer{customers.length !== 1 ? \"s\" : \"\"}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-gray-100\">\n {displayCustomers.map((customer) => (\n <div key={customer.id} className=\"px-4 py-3 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {customer.name}\n </div>\n <div className=\"text-xs text-gray-500 truncate\">\n {customer.email}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className={`px-2 py-0.5 rounded text-xs font-medium ${getPlanColor(customer.subscription)}`}>\n {customer.subscription}\n </span>\n <StatusBadge status={customer.status} type=\"customer\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n {hasMore && (\n <div className=\"px-4 py-2 bg-gray-50 border-t border-gray-100 text-center\">\n <span className=\"text-xs text-gray-500\">\n +{customers.length - maxItems} more customer{customers.length - maxItems !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n )\n}\n\n// ============================================\n// Transaction Components\n// ============================================\n\nexport function TransactionList({ transactions, maxItems = 5 }: { transactions: Transaction[]; maxItems?: number }) {\n const displayTransactions = transactions.slice(0, maxItems)\n const hasMore = transactions.length > maxItems\n \n if (transactions.length === 0) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white\">\n <CardContent className=\"py-8 text-center\">\n <DollarSign className=\"h-10 w-10 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">No transactions found</p>\n </CardContent>\n </Card>\n )\n }\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <DollarSign className=\"h-4 w-4\" />\n {transactions.length} Transaction{transactions.length !== 1 ? \"s\" : \"\"}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-gray-100\">\n {displayTransactions.map((tx) => (\n <div key={tx.id} className=\"px-4 py-3 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className={`p-2 rounded-lg ${\n tx.status === \"paid\" ? \"bg-emerald-50\" :\n tx.status === \"failed\" ? \"bg-red-50\" :\n tx.status === \"refunded\" ? \"bg-slate-50\" :\n \"bg-amber-50\"\n }`}>\n {tx.status === \"paid\" ? <CheckCircle2 className=\"h-4 w-4 text-emerald-600\" /> :\n tx.status === \"failed\" ? <XCircle className=\"h-4 w-4 text-red-600\" /> :\n tx.status === \"refunded\" ? <RefreshCw className=\"h-4 w-4 text-slate-600\" /> :\n <Clock className=\"h-4 w-4 text-amber-600\" />}\n </div>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {tx.customer}\n </div>\n <div className=\"text-xs text-gray-500\">\n {tx.date}\n {tx.decline_reason && (\n <span className=\"text-red-500 ml-2\">· {tx.decline_reason}</span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className={`text-sm font-semibold ${\n tx.status === \"paid\" ? \"text-emerald-600\" :\n tx.status === \"failed\" ? \"text-red-600\" :\n tx.status === \"refunded\" ? \"text-slate-600\" :\n \"text-amber-600\"\n }`}>\n {tx.status === \"refunded\" ? \"-\" : \"\"}{tx.amount}\n </span>\n <StatusBadge status={tx.status} type=\"transaction\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n {hasMore && (\n <div className=\"px-4 py-2 bg-gray-50 border-t border-gray-100 text-center\">\n <span className=\"text-xs text-gray-500\">\n +{transactions.length - maxItems} more transaction{transactions.length - maxItems !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n )\n}\n\n// ============================================\n// API Key & Session Components\n// ============================================\n\nexport function ApiKeyList({ apiKeys }: { apiKeys: ApiKey[] }) {\n if (apiKeys.length === 0) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white\">\n <CardContent className=\"py-8 text-center\">\n <Key className=\"h-10 w-10 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">No API keys found</p>\n </CardContent>\n </Card>\n )\n }\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <Key className=\"h-4 w-4\" />\n {apiKeys.length} API Key{apiKeys.length !== 1 ? \"s\" : \"\"}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-gray-100\">\n {apiKeys.map((key, idx) => (\n <div key={idx} className=\"px-4 py-3 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-gray-900\">\n {key.name}\n </div>\n <div className=\"text-xs text-gray-500 font-mono\">\n {key.key.slice(0, 12)}...{key.key.slice(-4)}\n </div>\n </div>\n <div className=\"text-xs text-gray-500\">\n Last used: {key.lastUsed}\n </div>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )\n}\n\nexport function SessionList({ sessions }: { sessions: Session[] }) {\n const getDeviceIcon = (device: string) => {\n const deviceLower = device.toLowerCase()\n if (deviceLower.includes(\"mobile\") || deviceLower.includes(\"iphone\") || deviceLower.includes(\"android\")) {\n return Smartphone\n }\n return Laptop\n }\n \n if (sessions.length === 0) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white\">\n <CardContent className=\"py-8 text-center\">\n <Shield className=\"h-10 w-10 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">No active sessions</p>\n </CardContent>\n </Card>\n )\n }\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <Shield className=\"h-4 w-4\" />\n {sessions.length} Active Session{sessions.length !== 1 ? \"s\" : \"\"}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-gray-100\">\n {sessions.map((session, idx) => {\n const DeviceIcon = getDeviceIcon(session.device)\n return (\n <div key={idx} className=\"px-4 py-3 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded-lg bg-gray-100\">\n <DeviceIcon className=\"h-4 w-4 text-gray-600\" />\n </div>\n <div>\n <div className=\"text-sm font-medium text-gray-900\">\n {session.device}\n </div>\n <div className=\"text-xs text-gray-500 flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {session.location}\n </div>\n </div>\n </div>\n <div className=\"text-xs text-gray-500\">\n {session.time}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n </CardContent>\n </Card>\n )\n}\n\n// ============================================\n// Dashboard Stats Component\n// ============================================\n\nexport function DashboardStatsCard({ stats }: { stats: DashboardStats }) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4\" />\n Dashboard Overview\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n {stats.revenue && (\n <div className=\"p-3 rounded-lg bg-emerald-50 border border-emerald-100\">\n <div className=\"text-xs text-emerald-600 font-medium mb-1\">Revenue</div>\n <div className=\"text-lg font-bold text-emerald-700\">\n {formatCurrency(stats.revenue.total)}\n </div>\n {stats.revenue.change !== 0 && (\n <div className={`text-xs ${stats.revenue.change > 0 ? \"text-emerald-600\" : \"text-red-600\"}`}>\n {stats.revenue.change > 0 ? \"+\" : \"\"}{stats.revenue.change}% from last period\n </div>\n )}\n </div>\n )}\n {stats.subscriptions && (\n <div className=\"p-3 rounded-lg bg-blue-50 border border-blue-100\">\n <div className=\"text-xs text-blue-600 font-medium mb-1\">Subscriptions</div>\n <div className=\"text-lg font-bold text-blue-700\">\n {stats.subscriptions.active} active\n </div>\n <div className=\"text-xs text-blue-600\">\n {stats.subscriptions.total} total\n </div>\n </div>\n )}\n {stats.customers && (\n <div className=\"p-3 rounded-lg bg-purple-50 border border-purple-100\">\n <div className=\"text-xs text-purple-600 font-medium mb-1\">Customers</div>\n <div className=\"text-lg font-bold text-purple-700\">\n {stats.customers.total}\n </div>\n {stats.customers.new > 0 && (\n <div className=\"text-xs text-purple-600\">\n +{stats.customers.new} new this period\n </div>\n )}\n </div>\n )}\n {stats.transactions && (\n <div className=\"p-3 rounded-lg bg-amber-50 border border-amber-100\">\n <div className=\"text-xs text-amber-600 font-medium mb-1\">Transactions</div>\n <div className=\"text-lg font-bold text-amber-700\">\n {stats.transactions.successful} successful\n </div>\n {stats.transactions.failed > 0 && (\n <div className=\"text-xs text-red-600\">\n {stats.transactions.failed} failed\n </div>\n )}\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n )\n}\n\n// ============================================\n// Top Customers Component\n// ============================================\n\nexport function TopCustomersList({ customers }: { customers: Array<{ name: string; email: string; revenue: number | string }> }) {\n if (customers.length === 0) {\n return (\n <Card className=\"border-gray-200 shadow-sm bg-white\">\n <CardContent className=\"py-8 text-center\">\n <Crown className=\"h-10 w-10 text-gray-300 mx-auto mb-3\" />\n <p className=\"text-sm text-gray-500\">No top customers data</p>\n </CardContent>\n </Card>\n )\n }\n \n return (\n <Card className=\"border-gray-200 shadow-sm bg-white overflow-hidden\">\n <CardHeader className=\"pb-2 border-b border-gray-100\">\n <CardTitle className=\"text-sm font-medium text-gray-700 flex items-center gap-2\">\n <Crown className=\"h-4 w-4 text-amber-500\" />\n Top Customers\n </CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-gray-100\">\n {customers.map((customer, idx) => (\n <div key={idx} className=\"px-4 py-3 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className={`h-6 w-6 rounded-full flex items-center justify-center text-xs font-bold ${\n idx === 0 ? \"bg-amber-100 text-amber-700\" :\n idx === 1 ? \"bg-slate-100 text-slate-700\" :\n idx === 2 ? \"bg-orange-100 text-orange-700\" :\n \"bg-gray-100 text-gray-700\"\n }`}>\n {idx + 1}\n </div>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {customer.name}\n </div>\n <div className=\"text-xs text-gray-500 truncate\">\n {customer.email}\n </div>\n </div>\n </div>\n <div className=\"text-sm font-semibold text-emerald-600\">\n {typeof customer.revenue === \"number\" \n ? formatCurrency(customer.revenue) \n : customer.revenue}\n </div>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )\n}\n\n// ============================================\n// Data Renderer - Main Dispatcher\n// ============================================\n\nexport function DataRenderer({ type, data }: { type: string; data: unknown }) {\n if (!data) return null\n \n const dataObj = data as Record<string, unknown>\n \n switch (type) {\n case \"subscription\":\n return <SubscriptionCard subscription={dataObj as unknown as Subscription} />\n \n case \"subscriptions\": {\n const subs = (dataObj.subscriptions || dataObj || []) as Subscription[]\n return <SubscriptionList subscriptions={Array.isArray(subs) ? subs : [subs]} />\n }\n \n case \"customer\":\n return <CustomerCard customer={(dataObj.customer || dataObj) as Customer} />\n \n case \"customers\": {\n const custs = (dataObj.customers || dataObj || []) as Customer[]\n return <CustomerList customers={Array.isArray(custs) ? custs : [custs]} />\n }\n \n case \"transactions\": {\n const txs = (dataObj.transactions || dataObj || []) as Transaction[]\n return <TransactionList transactions={Array.isArray(txs) ? txs : [txs]} />\n }\n \n case \"transaction\":\n return <TransactionList transactions={[dataObj as unknown as Transaction]} maxItems={1} />\n \n case \"dashboard_stats\":\n return <DashboardStatsCard stats={dataObj as DashboardStats} />\n \n case \"top_customers\": {\n const topCustomers = (dataObj.customers || dataObj || []) as Array<{ name: string; email: string; revenue: number | string }>\n return <TopCustomersList customers={Array.isArray(topCustomers) ? topCustomers : [topCustomers]} />\n }\n \n case \"api_keys\": {\n const keys = (dataObj.api_keys || dataObj || []) as ApiKey[]\n return <ApiKeyList apiKeys={Array.isArray(keys) ? keys : [keys]} />\n }\n \n case \"sessions\": {\n const sessions = (dataObj.sessions || dataObj || []) as Session[]\n return <SessionList sessions={Array.isArray(sessions) ? sessions : [sessions]} />\n }\n \n default:\n return null\n }\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport type { ChatPanelConfig, Folder, GuideWithSteps } from \"../types\"\n\n// ============================================\n// Default Configuration\n// ============================================\n\nconst defaultFolders: Folder[] = [\n {\n id: \"customers\",\n title: \"Customer Management\",\n topics: [\n { id: \"add-customer\", label: \"Add a new customer\", prompt: \"How do I add a new customer to the system and what information is required?\" },\n { id: \"customer-details\", label: \"View customer details\", prompt: \"Show me how to view and edit customer information and their payment history.\" },\n ],\n },\n {\n id: \"payments\",\n title: \"Payment Processing\",\n topics: [\n { id: \"process-payment\", label: \"Process a payment\", prompt: \"How do I process a one-time payment for a customer?\" },\n { id: \"refund-payment\", label: \"Issue a refund\", prompt: \"Walk me through issuing a refund for a customer payment.\" },\n ],\n },\n {\n id: \"subscriptions\",\n title: \"Subscription Management\",\n topics: [\n { id: \"create-subscription\", label: \"Create a subscription\", prompt: \"How do I set up a new subscription plan for a customer?\" },\n { id: \"update-subscription\", label: \"Update subscription tier\", prompt: \"How can I change a customer's subscription plan or upgrade them?\" },\n ],\n },\n {\n id: \"billing\",\n title: \"Billing\",\n topics: [\n { id: \"payment-methods\", label: \"Manage payment methods\", prompt: \"How do customers add or update their payment methods?\" },\n ],\n },\n]\n\nconst defaultGuides: Record<string, GuideWithSteps> = {\n \"getting-started\": {\n id: \"getting-started\",\n title: \"Getting started\",\n steps: [\n {\n text: \"Step 1: Let's open the Customers page. This is where you'll manage all your customers - you can view, add, and edit customer information here.\",\n navigation: { page: \"customers\" },\n cursorTarget: {\n selector: '[data-page=\"customers\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n {\n text: \"Step 2: Now let's open the Add customer dialog. This is where you'll enter information for your first customer, including their name, email, and other details.\",\n navigation: { page: \"customers\" },\n cursorTarget: {\n selector: '[data-testid=\"add-customer-button\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n {\n text: \"Step 3: Let's open the Settings page. This is where you manage your account settings, company information, and preferences. We're going to verify your company address is correct.\",\n navigation: { page: \"settings\", subtab: \"general\" },\n cursorTarget: {\n selector: '[data-page=\"settings\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n {\n text: \"Step 4: Here's the address field in the Company Information section. It's important to verify this address is accurate since it's used for billing and shipping purposes. Make sure it's up to date.\",\n navigation: { page: \"settings\", subtab: \"general\" },\n cursorTarget: {\n selector: '[data-testid=\"company-address-input\"]',\n offset: { x: 0, y: 0 },\n onClick: false\n }\n },\n {\n text: \"Step 5: Let's open the API Keys tab. This section shows all your API keys - you'll need these to connect your application to our services. We're going to create a production API key.\",\n navigation: { page: \"settings\", subtab: \"api\" },\n cursorTarget: {\n selector: '[data-settings-tab=\"api\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n {\n text: \"Step 6: Let's open the Create API Key dialog. Here you can create a new API key for your application. You'll want to give it a descriptive name like 'Production Key' so you can easily identify it later.\",\n navigation: { page: \"settings\", subtab: \"api\" },\n cursorTarget: {\n selector: '[data-testid=\"create-api-key-button\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n ],\n },\n \"add-api-key\": {\n id: \"add-api-key\",\n title: \"How to add an API key\",\n steps: [\n {\n text: \"Step 1: Let's open the Settings page. This is where you manage your account settings and preferences. We need to go here to access the API Keys section.\",\n navigation: { page: \"settings\", subtab: \"general\" },\n cursorTarget: {\n selector: '[data-page=\"settings\"]',\n offset: { x: 0, y: 0 },\n onClick: false\n }\n },\n {\n text: \"Step 2: Let's open the API Keys tab. This section shows all your API keys and allows you to create new ones. You'll need API keys to connect your application to our services.\",\n navigation: { page: \"settings\", subtab: \"api\" },\n cursorTarget: {\n selector: '[data-settings-tab=\"api\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n {\n text: \"Step 3: Let's open the Create API Key dialog. This is where you'll create your new API key - you can give it a name to help you identify it later, then click Create to generate it.\",\n navigation: { page: \"settings\", subtab: \"api\" },\n cursorTarget: {\n selector: '[data-testid=\"create-api-key-button\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n ],\n },\n \"refund-payment\": {\n id: \"refund-payment\",\n title: \"How to refund a payment\",\n steps: [\n {\n text: \"Step 1: Let's open the Home page. This is your dashboard where you can view today's activity, your payment overview, and recent transactions. We need to go here to find the payment you want to refund.\",\n navigation: { page: \"dashboard\" },\n cursorTarget: {\n selector: '[data-page=\"dashboard\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n {\n text: \"Step 2: Scroll down to see the Recent transactions section at the bottom. This shows your latest payment transactions with their status. We're looking for a transaction with 'paid' status - only paid transactions can be refunded.\",\n navigation: { page: \"dashboard\" },\n cursorTarget: {\n selector: '[data-testid=\"recent-activity-card\"]',\n offset: { x: 0, y: 0 },\n onClick: false\n }\n },\n {\n text: \"Step 3: Let's open the dropdown menu for this paid transaction. Each transaction has a menu button (three dots) that gives you options like refunding. Click it to see the available actions, including the 'Refund payment' option.\",\n navigation: { page: \"dashboard\" },\n cursorTarget: {\n selector: '[data-testid=\"transaction-menu-button\"]',\n offset: { x: 0, y: 0 },\n onClick: true\n }\n },\n ],\n },\n}\n\nconst defaultConfig: ChatPanelConfig = {\n agentUrl: \"http://localhost:5002\",\n theme: \"light\",\n position: \"bottom-right\",\n showDefaultFolders: true,\n enableGuideCursor: true,\n}\n\n// ============================================\n// Context Definition\n// ============================================\n\ninterface ChatPanelContextValue {\n config: ChatPanelConfig\n agentUrl: string\n folders: Folder[]\n guides: Record<string, GuideWithSteps>\n theme: \"light\" | \"dark\" | \"system\"\n position: \"bottom-right\" | \"bottom-left\" | \"custom\"\n enableGuideCursor: boolean\n}\n\nconst ChatPanelContext = React.createContext<ChatPanelContextValue | null>(null)\n\n// ============================================\n// Provider Component\n// ============================================\n\nexport interface ChatPanelProviderProps {\n children: React.ReactNode\n config: ChatPanelConfig\n}\n\nexport function ChatPanelProvider({ children, config }: ChatPanelProviderProps) {\n const value = React.useMemo<ChatPanelContextValue>(() => {\n const mergedConfig = { ...defaultConfig, ...config }\n \n // Merge folders\n let folders: Folder[] = []\n if (mergedConfig.showDefaultFolders !== false) {\n folders = [...defaultFolders]\n }\n if (mergedConfig.folders) {\n folders = [...folders, ...mergedConfig.folders]\n }\n \n // Merge guides\n const guides = {\n ...(mergedConfig.showDefaultFolders !== false ? defaultGuides : {}),\n ...mergedConfig.guides,\n }\n \n return {\n config: mergedConfig,\n agentUrl: mergedConfig.agentUrl,\n folders,\n guides,\n theme: mergedConfig.theme || \"light\",\n position: mergedConfig.position || \"bottom-right\",\n enableGuideCursor: mergedConfig.enableGuideCursor !== false,\n }\n }, [config])\n\n return (\n <ChatPanelContext.Provider value={value}>\n {children}\n </ChatPanelContext.Provider>\n )\n}\n\n// ============================================\n// Hook\n// ============================================\n\nexport function useChatPanelConfig(): ChatPanelContextValue {\n const context = React.useContext(ChatPanelContext)\n if (!context) {\n // Return default config if no provider (allows standalone usage)\n return {\n config: defaultConfig,\n agentUrl: defaultConfig.agentUrl,\n folders: defaultFolders,\n guides: defaultGuides,\n theme: \"light\",\n position: \"bottom-right\",\n enableGuideCursor: true,\n }\n }\n return context\n}\n\n// Export defaults for external use\nexport { defaultFolders, defaultGuides, defaultConfig }\n\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { Input } from \"./ui/input\"\nimport { Button } from \"./ui/button\"\nimport { ScrollArea } from \"./ui/scroll-area\"\nimport { ArrowLeft, ArrowUp, Command, CornerDownLeft, CheckCircle2, SquarePen, Paperclip, X, FileSpreadsheet, Loader2, ChevronDown, ChevronUp } from \"lucide-react\"\nimport { AssistantActivity } from \"./AssistantActivity\"\nimport { AssistantSearchSummary } from \"./AssistantSearchSummary\"\nimport { GuideCursor } from \"./GuideCursor\"\nimport { useGuideCursor } from \"../hooks/useGuideCursor\"\nimport { DataRenderer } from \"./DataRenderer\"\nimport { useChatPanelConfig } from \"../lib/ChatPanelContext\"\nimport type {\n ChatPanelProps,\n Message,\n NavigationTarget,\n ActionType,\n ActionData,\n LinkItem,\n FollowupOption,\n CsvPreviewData,\n BulkSummary,\n GuideWithSteps,\n Folder,\n Topic,\n ApiKeyData,\n CustomerData,\n PasswordData,\n WebhookData,\n PaymentMethodData,\n RefundData,\n SubscriptionData,\n BlockRuleData,\n AgentActionCompleteEvent,\n} from \"../types\"\n\n// Simple markdown renderer for chat messages\nfunction renderMarkdown(text: string): React.ReactNode {\n if (!text) return null\n \n // Split into lines for processing\n const lines = text.split('\\n')\n const elements: React.ReactNode[] = []\n let currentList: { type: 'ul' | 'ol', items: React.ReactNode[] } | null = null\n let inCodeBlock = false\n let codeContent: string[] = []\n let codeLanguage = ''\n \n const processInlineFormatting = (line: string): React.ReactNode => {\n // Process inline formatting: **bold**, *italic*, `code`, [link](url)\n const parts: React.ReactNode[] = []\n let remaining = line\n let keyIndex = 0\n \n while (remaining.length > 0) {\n // Check for inline code first\n const codeMatch = remaining.match(/^`([^`]+)`/)\n if (codeMatch) {\n parts.push(\n <code key={keyIndex++} className=\"bg-gray-100 px-1 py-0.5 rounded text-xs font-mono\">\n {codeMatch[1]}\n </code>\n )\n remaining = remaining.slice(codeMatch[0].length)\n continue\n }\n \n // Check for bold\n const boldMatch = remaining.match(/^\\*\\*([^*]+)\\*\\*/)\n if (boldMatch) {\n parts.push(<strong key={keyIndex++}>{boldMatch[1]}</strong>)\n remaining = remaining.slice(boldMatch[0].length)\n continue\n }\n \n // Check for italic\n const italicMatch = remaining.match(/^\\*([^*]+)\\*/)\n if (italicMatch) {\n parts.push(<em key={keyIndex++}>{italicMatch[1]}</em>)\n remaining = remaining.slice(italicMatch[0].length)\n continue\n }\n \n // Check for links\n const linkMatch = remaining.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/)\n if (linkMatch) {\n parts.push(\n <a key={keyIndex++} href={linkMatch[2]} className=\"text-blue-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">\n {linkMatch[1]}\n </a>\n )\n remaining = remaining.slice(linkMatch[0].length)\n continue\n }\n \n // Find next special character or take one character\n const nextSpecial = remaining.search(/[`*\\[]/)\n if (nextSpecial === -1) {\n parts.push(remaining)\n break\n } else if (nextSpecial === 0) {\n parts.push(remaining[0])\n remaining = remaining.slice(1)\n } else {\n parts.push(remaining.slice(0, nextSpecial))\n remaining = remaining.slice(nextSpecial)\n }\n }\n \n return parts.length === 1 ? parts[0] : <>{parts}</>\n }\n \n const flushList = () => {\n if (currentList) {\n const ListTag = currentList.type === 'ul' ? 'ul' : 'ol'\n elements.push(\n <ListTag key={elements.length} className={`${currentList.type === 'ul' ? 'list-disc' : 'list-decimal'} ml-4 my-1`}>\n {currentList.items.map((item, i) => <li key={i} className=\"ml-2\">{item}</li>)}\n </ListTag>\n )\n currentList = null\n }\n }\n \n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n \n // Handle code blocks\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n // End code block\n elements.push(\n <pre key={elements.length} className=\"bg-gray-100 rounded p-2 my-1 overflow-x-auto\">\n <code className=\"text-xs font-mono\">{codeContent.join('\\n')}</code>\n </pre>\n )\n inCodeBlock = false\n codeContent = []\n codeLanguage = ''\n } else {\n // Start code block\n flushList()\n inCodeBlock = true\n codeLanguage = line.slice(3).trim()\n }\n continue\n }\n \n if (inCodeBlock) {\n codeContent.push(line)\n continue\n }\n \n // Handle headers\n const headerMatch = line.match(/^(#{1,6})\\s+(.+)/)\n if (headerMatch) {\n flushList()\n const level = headerMatch[1].length\n const content = processInlineFormatting(headerMatch[2])\n const className = level === 1 ? 'text-lg font-bold my-1' : \n level === 2 ? 'text-base font-bold my-1' : \n 'text-sm font-semibold my-1'\n elements.push(<div key={elements.length} className={className}>{content}</div>)\n continue\n }\n \n // Handle unordered list items\n const ulMatch = line.match(/^[-*]\\s+(.+)/)\n if (ulMatch) {\n if (!currentList || currentList.type !== 'ul') {\n flushList()\n currentList = { type: 'ul', items: [] }\n }\n currentList.items.push(processInlineFormatting(ulMatch[1]))\n continue\n }\n \n // Handle ordered list items\n const olMatch = line.match(/^\\d+[.)]\\s+(.+)/)\n if (olMatch) {\n if (!currentList || currentList.type !== 'ol') {\n flushList()\n currentList = { type: 'ol', items: [] }\n }\n currentList.items.push(processInlineFormatting(olMatch[1]))\n continue\n }\n \n // Handle empty lines\n if (line.trim() === '') {\n flushList()\n elements.push(<div key={elements.length} className=\"h-2\" />)\n continue\n }\n \n // Handle horizontal rule\n if (line.match(/^[-*_]{3,}$/)) {\n flushList()\n elements.push(<hr key={elements.length} className=\"my-2 border-gray-200\" />)\n continue\n }\n \n // Regular paragraph\n flushList()\n elements.push(<div key={elements.length}>{processInlineFormatting(line)}</div>)\n }\n \n // Flush any remaining list\n flushList()\n \n return <>{elements}</>\n}\n\nconst initialMessages: Message[] = []\n\nexport function ChatPanel({ \n onBack, \n onNavigate,\n onActionComplete,\n onAgentAction,\n currentPage,\n config: propConfig,\n}: ChatPanelProps) {\n // Get config from context or props\n const contextConfig = useChatPanelConfig()\n const { agentUrl, folders, guides, enableGuideCursor } = propConfig \n ? { ...contextConfig, ...propConfig, agentUrl: propConfig.agentUrl || contextConfig.agentUrl }\n : contextConfig\n\n const [messages, setMessages] = React.useState<Message[]>(initialMessages)\n const [input, setInput] = React.useState(\"\")\n const [sessionId] = React.useState(() => crypto.randomUUID())\n const streamIntervals = React.useRef<Record<number, number>>({})\n const isEmpty = messages.length === 0\n type Phase = \"idle\" | \"thinking\" | \"searching\" | \"responding\" | \"executing\"\n const [phase, setPhase] = React.useState<Phase>(\"idle\")\n const [progressSteps, setProgressSteps] = React.useState<{ message: string; completed: boolean }[]>([])\n const phaseTimers = React.useRef<number[]>([])\n const lastRole = messages.length ? messages[messages.length - 1].role : undefined\n const [panelView, setPanelView] = React.useState<\"landing\" | \"folder\">(\"landing\")\n const [currentFolderId, setCurrentFolderId] = React.useState<string | undefined>(undefined)\n const [activeGuide, setActiveGuide] = React.useState<{ id: string; stepIndex: number } | undefined>(undefined)\n const activeGuideRef = React.useRef<{ id: string; stepIndex: number } | undefined>(undefined)\n const latestBulkSummaryNavigationRef = React.useRef<{ page: string; subtab?: string } | null>(null)\n const [guideComplete, setGuideComplete] = React.useState(false)\n \n // Listen for integration tab click event and automatically send message\n React.useEffect(() => {\n // Expose reset function to window for testing\n ;(window as unknown as Record<string, unknown>).resetIntegrationNotification = () => {\n localStorage.removeItem('gmailNotificationSeen')\n console.log('Integration notification reset! Click the Integrations tab to see it again.')\n }\n \n const handleIntegrationTabClick = () => {\n // Check if notification has been seen\n const hasSeenNotification = localStorage.getItem('gmailNotificationSeen')\n if (!hasSeenNotification) {\n // Ensure we're in chat view\n setPanelView(\"landing\")\n setCurrentFolderId(undefined)\n // Create draft message for streaming\n const messageId = Date.now()\n const notificationText = \"I see you're exploring integrations. Let me know if there are any other connections we should add.\"\n const draftMessage: Message = {\n id: messageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\",\n isNotificationMessage: true\n }\n setMessages((prev) => [...prev, draftMessage])\n // Stream the message\n streamAssistantMessage(messageId, notificationText)\n // Mark notification as seen\n localStorage.setItem('gmailNotificationSeen', 'true')\n }\n }\n \n window.addEventListener('integrationTabClicked', handleIntegrationTabClick)\n \n return () => {\n window.removeEventListener('integrationTabClicked', handleIntegrationTabClick)\n }\n }, [])\n \n // Keep ref in sync with state, but don't overwrite if ref is already set and matches\n React.useEffect(() => {\n if (activeGuide) {\n if (!activeGuideRef.current || \n activeGuideRef.current.id !== activeGuide.id || \n activeGuideRef.current.stepIndex !== activeGuide.stepIndex) {\n activeGuideRef.current = activeGuide\n }\n } else {\n activeGuideRef.current = undefined\n }\n }, [activeGuide])\n\n const [pendingNavigation, setPendingNavigation] = React.useState<NavigationTarget | null>(null)\n const [pendingAction, setPendingAction] = React.useState<{ type: ActionType; data: ActionData } | null>(null)\n const [actionFormData, setActionFormData] = React.useState<Record<string, unknown>>({})\n const messagesEndRef = React.useRef<HTMLDivElement>(null)\n const messagesContainerRef = React.useRef<HTMLDivElement>(null)\n const currentStepRef = React.useRef<HTMLDivElement>(null)\n const { cursorState, moveTo, hide } = useGuideCursor()\n \n // CSV Bulk Upload State\n const [pendingFile, setPendingFile] = React.useState<File | null>(null)\n const [pendingBulkSession, setPendingBulkSession] = React.useState<string | null>(null)\n const [isCollapsed, setIsCollapsed] = React.useState(false)\n const pendingBulkSessionRef = React.useRef<string | null>(null)\n const fileInputRef = React.useRef<HTMLInputElement>(null)\n\n // Listen for dialog opening to automatically end the guide when on step 3\n React.useEffect(() => {\n if (!activeGuide || activeGuide.id !== \"add-api-key\" || activeGuide.stepIndex !== 2) {\n return\n }\n\n // Listen for when the create API key dialog opens\n const checkForDialogOpen = () => {\n const dialog = document.querySelector('[role=\"dialog\"]')\n const currentGuide = activeGuideRef.current\n if (dialog && currentGuide && currentGuide.id === \"add-api-key\" && currentGuide.stepIndex === 2) {\n hide()\n const id = Date.now() + 1\n setMessages((prev) => [\n ...prev,\n { id, role: \"assistant\", kind: \"guideComplete\", content: \"Perfect! The dialog is now open. You can enter a name and create your API key.\" },\n ])\n setActiveGuide(undefined)\n setGuideComplete(true)\n }\n }\n\n const interval = setInterval(checkForDialogOpen, 300)\n \n return () => clearInterval(interval)\n }, [activeGuide, hide])\n\n React.useEffect(() => {\n return () => {\n Object.values(streamIntervals.current).forEach((id) => window.clearInterval(id))\n streamIntervals.current = {}\n phaseTimers.current.forEach((id) => window.clearTimeout(id))\n phaseTimers.current = []\n }\n }, [])\n\n // Auto-scroll for guide steps and regular chat\n React.useEffect(() => {\n if (activeGuide && messages.length > 0) {\n const lastMessage = messages[messages.length - 1]\n if (lastMessage.kind === \"guideStep\" || lastMessage.kind === \"guideComplete\") {\n if (currentStepRef.current && messagesContainerRef.current) {\n const container = messagesContainerRef.current\n const stepElement = currentStepRef.current\n const containerRect = container.getBoundingClientRect()\n const stepRect = stepElement.getBoundingClientRect()\n const scrollTop = stepRect.top - containerRect.top + container.scrollTop\n container.scrollTop = scrollTop\n }\n }\n } else if (!activeGuide && messages.length > 0) {\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" })\n }\n }, [messages, phase, activeGuide])\n\n // Find the most recent bulk summary with navigation\n const latestBulkSummaryNavigation = React.useMemo(() => {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i]\n if (msg.kind === \"bulkSummary\" && msg.bulkSummary?.navigationPage && msg.bulkSummary.successes > 0) {\n return msg.bulkSummary.navigationPage\n }\n }\n return null\n }, [messages])\n \n React.useEffect(() => {\n latestBulkSummaryNavigationRef.current = latestBulkSummaryNavigation\n }, [latestBulkSummaryNavigation])\n \n React.useEffect(() => {\n pendingBulkSessionRef.current = pendingBulkSession\n }, [pendingBulkSession])\n\n // Global keyboard handler for cmd+enter\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"Enter\") {\n const currentBulkSession = pendingBulkSessionRef.current\n if (currentBulkSession) {\n e.preventDefault()\n e.stopPropagation()\n confirmBulkOperation(currentBulkSession)\n return\n }\n if (pendingAction) {\n e.preventDefault()\n e.stopPropagation()\n handleActionSubmit()\n return\n }\n if (pendingNavigation) {\n e.preventDefault()\n e.stopPropagation()\n handleConfirmNavigation(pendingNavigation)\n return\n }\n const currentBulkNav = latestBulkSummaryNavigationRef.current\n if (currentBulkNav && onNavigate) {\n e.preventDefault()\n e.stopPropagation()\n onNavigate(currentBulkNav.page, currentBulkNav.subtab)\n return\n }\n if (guideComplete) {\n e.preventDefault()\n e.stopPropagation()\n handleBack()\n return\n }\n const currentGuide = activeGuideRef.current\n if (currentGuide) {\n e.preventDefault()\n e.stopPropagation()\n advanceGuide()\n return\n }\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [pendingAction, pendingNavigation, activeGuide, guideComplete, onNavigate])\n\n function streamAssistantMessage(messageId: number, fullText: string, followups?: FollowupOption[]) {\n const tokens = fullText.split(\" \")\n let i = 0\n const intervalId = window.setInterval(() => {\n i += 1\n setMessages((prev) =>\n prev.map((m) => (m.id === messageId ? { ...m, content: tokens.slice(0, i).join(\" \") } : m))\n )\n if (i >= tokens.length) {\n window.clearInterval(intervalId)\n delete streamIntervals.current[messageId]\n if (followups && followups.length > 0) {\n setMessages((prev) =>\n prev.map((m) => (m.id === messageId ? { ...m, followups } : m))\n )\n }\n setPhase(\"idle\")\n }\n }, 25)\n streamIntervals.current[messageId] = intervalId\n }\n\n function handleFollowupClick(messageId: number, followup: FollowupOption) {\n setMessages((prev) =>\n prev.map((m) => (m.id === messageId ? { ...m, followupSelected: true } : m))\n )\n startChatFlow(followup.label)\n }\n\n function handleBack() {\n Object.values(streamIntervals.current).forEach((id) => window.clearInterval(id))\n streamIntervals.current = {}\n phaseTimers.current.forEach((id) => window.clearTimeout(id))\n phaseTimers.current = []\n hide()\n setMessages([])\n setInput(\"\")\n setPhase(\"idle\")\n setPanelView(\"landing\")\n setCurrentFolderId(undefined)\n setActiveGuide(undefined)\n setGuideComplete(false)\n setPendingNavigation(null)\n setPendingAction(null)\n setActionFormData({})\n if (onBack) onBack()\n }\n\n function openFolder(folderId: string) {\n setPanelView(\"folder\")\n setCurrentFolderId(folderId)\n }\n\n function closeFolder() {\n setPanelView(\"landing\")\n setCurrentFolderId(undefined)\n }\n\n function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault()\n const trimmed = input.trim()\n \n if (pendingFile) {\n if (!trimmed) {\n const errorMessage: Message = {\n id: Date.now(),\n role: \"assistant\",\n kind: \"text\",\n content: \"Please describe what you'd like to do with this CSV file. For example: 'Create customers from this file' or 'Add these subscriptions'.\"\n }\n setMessages((prev) => [...prev, errorMessage])\n return\n }\n startBulkUploadFlow(trimmed, pendingFile)\n setInput(\"\")\n setPendingFile(null)\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n return\n }\n \n if (!trimmed) return\n\n startChatFlow(trimmed)\n setInput(\"\")\n }\n\n function getPageDisplayName(target: NavigationTarget): string {\n const pageNames: Record<string, string> = {\n dashboard: \"dashboard\",\n customers: \"customers page\",\n payments: \"payments page\",\n settings: \"settings page\",\n support: \"support page\",\n disputes: \"disputes page\",\n radar: \"radar page\"\n }\n \n if (target.page === \"settings\" && target.subtab) {\n const subtabNames: Record<string, string> = {\n general: \"General\",\n billing: \"Billing\",\n security: \"Security\",\n api: \"API Keys\",\n notifications: \"Notifications\",\n integrations: \"Integrations\"\n }\n return `${pageNames.settings || target.page} (${subtabNames[target.subtab] || target.subtab} tab)`\n }\n \n return pageNames[target.page] || target.page\n }\n\n function handleConfirmNavigation(target: NavigationTarget) {\n if (onNavigate) {\n onNavigate(target.page, target.subtab)\n }\n setPendingNavigation(null)\n \n setMessages((prev) =>\n prev.map((msg) =>\n msg.kind === \"navigationAction\" && msg.navigationTarget?.page === target.page && msg.navigationTarget?.subtab === target.subtab\n ? { ...msg, navigationTarget: undefined }\n : msg\n )\n )\n }\n\n function handleActionSubmit() {\n if (!pendingAction) return\n\n const data = actionFormData as ActionData\n\n if (pendingAction.type === \"updateCompanyInfo\") {\n // Company info is optional\n } else if (pendingAction.type === \"addApiKey\") {\n const apiData = data as ApiKeyData\n if (!apiData.name || !apiData.name.trim()) return\n } else if (pendingAction.type === \"addCustomer\") {\n const customerData = data as CustomerData\n if (!customerData.name || !customerData.name.trim() || !customerData.email || !customerData.email.trim()) return\n } else if (pendingAction.type === \"changePassword\") {\n const passwordData = data as PasswordData\n if (!passwordData.currentPassword || !passwordData.newPassword || !passwordData.confirmPassword) return\n if (passwordData.newPassword !== passwordData.confirmPassword) return\n } else if (pendingAction.type === \"addWebhook\") {\n const webhookData = data as WebhookData\n if (!webhookData.url || !webhookData.url.trim()) return\n } else if (pendingAction.type === \"addPaymentMethod\") {\n const paymentData = data as PaymentMethodData\n if (!paymentData.cardNumber || !paymentData.expiryDate) return\n } else if (pendingAction.type === \"deleteApiKey\") {\n const apiData = data as ApiKeyData\n if (!apiData.keyId && !apiData.name) return\n } else if (pendingAction.type === \"refundPayment\") {\n const refundData = data as RefundData\n if (!refundData.transactionId && !refundData.customer) return\n } else if (pendingAction.type === \"createSubscription\") {\n const subscriptionData = data as SubscriptionData\n if (!subscriptionData.customerEmail && !subscriptionData.customerId) return\n } else if (pendingAction.type === \"toggleBlockRule\" || pendingAction.type === \"enableBlockRule\" || pendingAction.type === \"disableBlockRule\") {\n const blockRuleData = data as BlockRuleData\n if (!blockRuleData.ruleId) return\n }\n\n if (onActionComplete) {\n onActionComplete(pendingAction.type, data)\n }\n\n setMessages((prev) =>\n prev.map((msg) =>\n msg.kind === \"actionForm\" && msg.actionType === pendingAction.type\n ? { ...msg, isSubmitted: true }\n : msg\n )\n )\n\n setPendingAction(null)\n setActionFormData({})\n }\n\n // Dispatch agent action event\n function dispatchAgentAction(result: AgentActionCompleteEvent['result']) {\n if (onAgentAction) {\n onAgentAction({ result })\n }\n // Also dispatch window event for backward compatibility\n window.dispatchEvent(new CustomEvent('agentActionComplete', {\n detail: { result }\n }))\n }\n\n async function startChatFlow(userText: string) {\n phaseTimers.current.forEach((id) => window.clearTimeout(id))\n phaseTimers.current = []\n\n const lastAssistantMessage = [...messages].reverse().find(m => m.role === \"assistant\")\n const isRespondingToNotification = lastAssistantMessage?.isNotificationMessage === true\n\n const now = Date.now()\n const userMessage: Message = { id: now, role: \"user\", content: userText }\n setMessages((prev) => [...prev, userMessage])\n \n if (isRespondingToNotification) {\n const thankYouMessageId = Date.now() + 1\n const thankYouMessage: Message = {\n id: thankYouMessageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\"\n }\n setMessages((prev) => [...prev, thankYouMessage])\n streamAssistantMessage(thankYouMessageId, \"Thank you, your feedback is saved.\")\n return\n }\n \n setPendingNavigation(null)\n setPhase(\"thinking\")\n setProgressSteps([])\n \n let streamCompleted = false\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 60000)\n \n const response = await fetch(`${agentUrl}/chat/stream`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n session_id: sessionId,\n message: userText,\n current_page: currentPage || 'dashboard',\n }),\n signal: controller.signal,\n })\n \n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new Error(`Agent request failed: ${response.status}`)\n }\n\n const reader = response.body?.getReader()\n if (!reader) throw new Error('No response body')\n \n const decoder = new TextDecoder()\n let buffer = ''\n \n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n \n buffer += decoder.decode(value, { stream: true })\n \n const events = buffer.split('\\n\\n')\n buffer = events.pop() || ''\n \n for (const eventStr of events) {\n if (!eventStr.trim()) continue\n \n const lines = eventStr.split('\\n')\n let eventType = ''\n let eventData = ''\n \n for (const line of lines) {\n if (line.startsWith('event: ')) {\n eventType = line.slice(7)\n } else if (line.startsWith('data: ')) {\n eventData = line.slice(6)\n }\n }\n \n if (!eventType || !eventData) continue\n \n try {\n const data = JSON.parse(eventData)\n \n if (eventType === 'progress') {\n if (data.status === 'thinking') {\n setPhase(\"thinking\")\n setProgressSteps([{ message: data.message, completed: false }])\n } else if (data.status === 'executing') {\n setPhase(\"executing\")\n setProgressSteps(prev => {\n const updated = prev.map(step => ({ ...step, completed: true }))\n const lastStep = updated[updated.length - 1]\n if (!lastStep || lastStep.message !== data.message) {\n updated.push({ message: data.message, completed: false })\n }\n return updated\n })\n } else if (data.status === 'responding') {\n setPhase(\"responding\")\n setProgressSteps(prev => prev.map(step => ({ ...step, completed: true })))\n }\n } else if (eventType === 'response') {\n setProgressSteps([])\n streamCompleted = true\n \n const agentResponse = data\n \n if (agentResponse.action === \"navigate\" && agentResponse.navigation) {\n const navTarget: NavigationTarget = {\n page: agentResponse.navigation.page,\n subtab: agentResponse.navigation.subtab\n }\n setPendingNavigation(navTarget)\n \n const navigationMessage: Message = {\n id: now + 1,\n role: \"assistant\",\n kind: \"navigationAction\",\n content: agentResponse.response || `I can take you to the ${getPageDisplayName(navTarget)}.`,\n navigationTarget: navTarget\n }\n setMessages((prev) => [...prev, navigationMessage])\n setPhase(\"idle\")\n \n } else if (agentResponse.action === \"show_form\" && agentResponse.actionType) {\n setPendingAction({\n type: agentResponse.actionType as ActionType,\n data: agentResponse.actionData || {}\n })\n setActionFormData(agentResponse.actionData || {})\n \n const actionMessage: Message = {\n id: now + 1,\n role: \"assistant\",\n kind: \"actionForm\",\n content: agentResponse.response || agentResponse.message || \"Please fill in the details below:\",\n actionType: agentResponse.actionType as ActionType,\n actionData: agentResponse.actionData || {}\n }\n setMessages((prev) => [...prev, actionMessage])\n setPhase(\"idle\")\n \n } else if (agentResponse.action === \"suggest_bulk\") {\n const assistantMessageId = now + 1\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\"\n }\n setMessages((prev) => [...prev, assistantMessage])\n streamAssistantMessage(assistantMessageId, agentResponse.response || agentResponse.message || \"For bulk operations, you can upload a CSV file - just click the 📎 button!\", agentResponse.followups)\n streamCompleted = true\n \n } else if (agentResponse.action === \"bulk_preview\") {\n setPendingBulkSession(agentResponse.bulk_session_id)\n \n const previewMessage: Message = {\n id: now + 1,\n role: \"assistant\",\n kind: \"bulkPreview\",\n content: agentResponse.message || `I found ${agentResponse.csv_data?.rowCount || 0} items. Here's a preview:`,\n csvData: agentResponse.csv_data ? {\n rowCount: agentResponse.csv_data.rowCount,\n columns: agentResponse.csv_data.columns,\n sampleRows: agentResponse.csv_data.sampleRows,\n fileName: \"From context\"\n } : undefined,\n suggestedAction: agentResponse.suggested_action,\n bulkSessionId: agentResponse.bulk_session_id\n }\n setMessages((prev) => [...prev, previewMessage])\n setPhase(\"idle\")\n streamCompleted = true\n \n } else if (agentResponse.action === \"execute\" && agentResponse.executionResult) {\n const assistantMessageId = now + 1\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\",\n structuredData: agentResponse.structuredData || undefined\n }\n setMessages((prev) => [...prev, assistantMessage])\n streamAssistantMessage(assistantMessageId, agentResponse.response, agentResponse.followups)\n streamCompleted = true\n \n setTimeout(() => {\n dispatchAgentAction(agentResponse.executionResult)\n }, 100)\n \n } else {\n const assistantMessageId = now + 1\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\"\n }\n setMessages((prev) => [...prev, assistantMessage])\n streamAssistantMessage(assistantMessageId, agentResponse.response, agentResponse.followups)\n streamCompleted = true\n }\n } else if (eventType === 'error') {\n setPhase(\"idle\")\n setProgressSteps([])\n streamCompleted = true\n const errorMessageId = now + 1\n const errorMessage: Message = {\n id: errorMessageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\"\n }\n setMessages((prev) => [...prev, errorMessage])\n streamAssistantMessage(errorMessageId, data.message || \"An error occurred processing your request.\")\n } else if (eventType === 'done') {\n setProgressSteps([])\n setPhase(\"idle\")\n streamCompleted = true\n }\n } catch (parseError) {\n console.error('Failed to parse SSE event:', parseError)\n }\n }\n }\n \n setProgressSteps([])\n if (!streamCompleted) {\n setPhase(\"idle\")\n }\n\n } catch (error) {\n console.error('Agent request failed:', error)\n setProgressSteps([])\n \n const errorMessageId = now + 1\n const errorMessage: Message = {\n id: errorMessageId,\n role: \"assistant\",\n kind: \"text\",\n content: \"\"\n }\n setMessages((prev) => [...prev, errorMessage])\n streamAssistantMessage(errorMessageId, \"I'm having trouble connecting to my backend. Please make sure the agent server is running.\")\n } finally {\n setProgressSteps([])\n }\n }\n\n async function startBulkUploadFlow(userText: string, file: File) {\n phaseTimers.current.forEach((id) => window.clearTimeout(id))\n phaseTimers.current = []\n\n const now = Date.now()\n const userMessage: Message = { \n id: now, \n role: \"user\", \n content: `📎 ${file.name}\\n\\n${userText}` \n }\n setMessages((prev) => [...prev, userMessage])\n\n setPhase(\"thinking\")\n setProgressSteps([{ message: \"Analyzing CSV file...\", completed: false }])\n\n try {\n const formData = new FormData()\n formData.append('file', file)\n formData.append('message', userText)\n formData.append('session_id', sessionId)\n formData.append('current_page', currentPage || 'dashboard')\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 120000)\n\n const response = await fetch(`${agentUrl}/chat/bulk/stream`, {\n method: 'POST',\n body: formData,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new Error(`Bulk upload failed: ${response.status}`)\n }\n\n const reader = response.body?.getReader()\n if (!reader) throw new Error('No response body')\n\n const decoder = new TextDecoder()\n let buffer = ''\n let bulkSessionId: string | null = null\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n\n const events = buffer.split('\\n\\n')\n buffer = events.pop() || ''\n\n for (const eventStr of events) {\n if (!eventStr.trim()) continue\n\n const lines = eventStr.split('\\n')\n let eventType = ''\n let eventData = ''\n\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n eventType = line.slice(7)\n } else if (line.startsWith('data: ')) {\n eventData = line.slice(6)\n }\n }\n\n if (!eventType || !eventData) continue\n\n try {\n const data = JSON.parse(eventData)\n\n if (eventType === 'preview') {\n setPhase(\"idle\")\n setProgressSteps([])\n bulkSessionId = data.bulk_session_id\n setPendingBulkSession(bulkSessionId)\n\n const previewMessage: Message = {\n id: now + 1,\n role: \"assistant\",\n kind: \"bulkPreview\",\n content: data.message || `I found ${data.csv_data?.rowCount || 0} items. Here's a preview:`,\n csvData: data.csv_data ? {\n rowCount: data.csv_data.rowCount,\n columns: data.csv_data.columns,\n sampleRows: data.csv_data.sampleRows,\n fileName: file.name\n } : undefined,\n suggestedAction: data.suggested_action,\n bulkSessionId: bulkSessionId || undefined\n }\n setMessages((prev) => [...prev, previewMessage])\n\n } else if (eventType === 'error') {\n setPhase(\"idle\")\n setProgressSteps([])\n\n const errorMessage: Message = {\n id: Date.now(),\n role: \"assistant\",\n kind: \"text\",\n content: data.message || \"An error occurred processing the CSV file.\"\n }\n setMessages((prev) => [...prev, errorMessage])\n }\n } catch (parseError) {\n console.error('Failed to parse SSE event:', parseError)\n }\n }\n }\n\n } catch (error) {\n console.error('Bulk upload failed:', error)\n setPhase(\"idle\")\n setProgressSteps([])\n\n const errorMessage: Message = {\n id: Date.now(),\n role: \"assistant\",\n kind: \"text\",\n content: \"Failed to process CSV file. Please try again.\"\n }\n setMessages((prev) => [...prev, errorMessage])\n }\n }\n\n async function confirmBulkOperation(bulkSessionId: string) {\n setPhase(\"executing\")\n setProgressSteps([{ message: \"Starting bulk operation...\", completed: false }])\n setPendingBulkSession(null)\n\n try {\n const response = await fetch(`${agentUrl}/chat/bulk/confirm`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n session_id: sessionId,\n bulk_session_id: bulkSessionId,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`Bulk confirm failed: ${response.status}`)\n }\n\n const reader = response.body?.getReader()\n if (!reader) throw new Error('No response body')\n\n const decoder = new TextDecoder()\n let buffer = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n\n const events = buffer.split('\\n\\n')\n buffer = events.pop() || ''\n\n for (const eventStr of events) {\n if (!eventStr.trim()) continue\n\n const lines = eventStr.split('\\n')\n let eventType = ''\n let eventData = ''\n\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n eventType = line.slice(7)\n } else if (line.startsWith('data: ')) {\n eventData = line.slice(6)\n }\n }\n\n if (!eventType || !eventData) continue\n\n try {\n const data = JSON.parse(eventData)\n\n if (eventType === 'progress') {\n setMessages((prev) => {\n const existing = prev.find(m => m.kind === \"bulkProgress\")\n if (existing) {\n return prev.map(m => \n m.kind === \"bulkProgress\" \n ? { ...m, bulkProgress: { processed: data.row, total: data.total, successes: data.successes || 0, failures: data.failures || 0 } }\n : m\n )\n } else {\n return [...prev, {\n id: Date.now(),\n role: \"assistant\" as const,\n kind: \"bulkProgress\" as const,\n bulkProgress: { \n processed: data.row, \n total: data.total, \n successes: data.successes || 0, \n failures: data.failures || 0 \n }\n }]\n }\n })\n \n } else if (eventType === 'summary') {\n setPhase(\"idle\")\n setProgressSteps([])\n setPendingBulkSession(null)\n \n setMessages((prev) => {\n const filtered = prev.filter(m => m.kind !== \"bulkProgress\" && m.kind !== \"bulkPreview\")\n const newMsg = {\n id: Date.now(),\n role: \"assistant\" as const,\n kind: \"bulkSummary\" as const,\n content: data.message,\n bulkSummary: {\n total: data.total,\n successes: data.successes,\n failures: data.failures || [],\n navigationPage: data.navigationPage\n }\n }\n return [...filtered, newMsg]\n })\n \n setTimeout(() => {\n dispatchAgentAction({ bulk: true, total: data.total, successes: data.successes })\n }, 100)\n \n } else if (eventType === 'error') {\n setPhase(\"idle\")\n setProgressSteps([])\n setPendingBulkSession(null)\n \n const errorMessage: Message = {\n id: Date.now(),\n role: \"assistant\",\n kind: \"text\",\n content: data.message || \"An error occurred during bulk processing.\"\n }\n setMessages((prev) => [...prev, errorMessage])\n }\n } catch (parseError) {\n console.error('Failed to parse confirm SSE event:', parseError)\n }\n }\n }\n\n } catch (error) {\n console.error('Bulk confirm failed:', error)\n setPhase(\"idle\")\n setProgressSteps([])\n setPendingBulkSession(null)\n \n const errorMessage: Message = {\n id: Date.now(),\n role: \"assistant\",\n kind: \"text\",\n content: \"Failed to start bulk operation. Please try again.\"\n }\n setMessages((prev) => [...prev, errorMessage])\n }\n }\n\n function cancelBulkOperation() {\n setPendingBulkSession(null)\n setMessages((prev) => prev.filter(m => m.kind !== \"bulkPreview\"))\n }\n\n function sendTopic(prompt: string) {\n startChatFlow(prompt)\n }\n\n function appendAssistantText(text: string) {\n const id = Date.now() + Math.floor(Math.random() * 1000)\n setMessages((prev) => [...prev, { id, role: \"assistant\", kind: \"text\", content: text }])\n }\n\n function startGuide(guideId: string) {\n const guide = guides[guideId]\n if (!guide) return\n setPanelView(\"landing\")\n setCurrentFolderId(undefined)\n const initialGuideState = { id: guideId, stepIndex: 0 }\n \n setActiveGuide(initialGuideState)\n activeGuideRef.current = initialGuideState\n \n appendAssistantText(`I'll help you with ${guide.title}.`)\n\n const firstStep = guide.steps[0]\n\n const isNavigationButton = firstStep.cursorTarget?.selector.includes('[data-page=')\n const isTabButton = firstStep.cursorTarget?.selector.includes('[data-settings-tab=')\n\n if (firstStep.cursorTarget && (isNavigationButton || isTabButton)) {\n const cursorTarget = firstStep.cursorTarget\n \n if (isTabButton && firstStep.navigation && onNavigate) {\n onNavigate(firstStep.navigation.page, undefined)\n }\n \n const initialDelay = isTabButton ? 800 : 400\n setTimeout(() => {\n const waitForElement = () => {\n const element = document.querySelector(cursorTarget.selector) as HTMLElement\n if (element && element.offsetParent !== null) {\n moveTo(cursorTarget)\n if (cursorTarget.onClick) {\n setTimeout(() => {\n element.click()\n }, 1200)\n }\n } else {\n setTimeout(waitForElement, 200)\n }\n }\n waitForElement()\n }, initialDelay)\n } else {\n if (firstStep.navigation && onNavigate) {\n onNavigate(firstStep.navigation.page, firstStep.navigation.subtab)\n }\n\n if (firstStep.cursorTarget) {\n const cursorTarget = firstStep.cursorTarget\n const isSettingsTab = cursorTarget.selector.includes('data-settings-tab')\n const isDialogElement = cursorTarget.selector.includes('dialog') || cursorTarget.selector.includes('api-key-name-input')\n const initialDelay = isDialogElement ? 700 : isSettingsTab ? 600 : 400\n \n setTimeout(() => {\n const waitForElement = () => {\n const element = document.querySelector(cursorTarget.selector) as HTMLElement\n if (element && element.offsetParent !== null) {\n moveTo(cursorTarget)\n if (cursorTarget.onClick) {\n setTimeout(() => {\n element.click()\n }, 1000)\n }\n } else if (isSettingsTab || isDialogElement) {\n setTimeout(waitForElement, 200)\n } else {\n moveTo(cursorTarget)\n if (cursorTarget.onClick) {\n setTimeout(() => {\n const el = document.querySelector(cursorTarget.selector) as HTMLElement\n if (el) el.click()\n }, 1000)\n }\n }\n }\n waitForElement()\n }, initialDelay)\n }\n }\n\n const draft: Message = { \n id: Date.now() + 1, \n role: \"assistant\", \n kind: \"guideStep\", \n content: \"\",\n guideStepIndex: 0\n }\n setMessages((prev) => [...prev, draft])\n streamAssistantMessage(draft.id, firstStep.text)\n }\n\n function advanceGuide() {\n if (!activeGuide) return\n const guide = guides[activeGuide.id]\n if (!guide) return\n \n let currentGuide = activeGuideRef.current\n if (!currentGuide || currentGuide.id !== activeGuide.id) {\n currentGuide = activeGuide\n activeGuideRef.current = activeGuide\n }\n const currentStepIndex = currentGuide.stepIndex\n const nextIndex = currentStepIndex + 1\n \n if (nextIndex >= guide.steps.length) {\n hide()\n const id = Date.now() + 1\n setMessages((prev) => [\n ...prev,\n { id, role: \"assistant\", kind: \"guideComplete\", content: \"Guide Complete\" },\n ])\n setActiveGuide(undefined)\n setGuideComplete(true)\n return\n }\n\n const nextStep = guide.steps[nextIndex]\n\n const newGuideState = { id: activeGuide.id, stepIndex: nextIndex }\n setActiveGuide(newGuideState)\n activeGuideRef.current = newGuideState\n\n const draft: Message = { \n id: Date.now() + 1, \n role: \"assistant\", \n kind: \"guideStep\", \n content: \"\",\n guideStepIndex: nextIndex\n }\n setMessages((prev) => [...prev, draft])\n\n const isNavigationButton = nextStep.cursorTarget?.selector.includes('[data-page=')\n const isTabButton = nextStep.cursorTarget?.selector.includes('[data-settings-tab=')\n\n if (nextStep.cursorTarget && (isNavigationButton || isTabButton)) {\n const cursorTarget = nextStep.cursorTarget\n \n if (isTabButton && nextStep.navigation && onNavigate) {\n onNavigate(nextStep.navigation.page, undefined)\n }\n \n const initialDelay = isTabButton ? 800 : 400\n setTimeout(() => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n \n const waitForElement = () => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n \n const element = document.querySelector(cursorTarget.selector) as HTMLElement\n if (element && element.offsetParent !== null) {\n moveTo(cursorTarget)\n if (cursorTarget.onClick) {\n setTimeout(() => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n element.click()\n }, 1200)\n }\n } else {\n setTimeout(waitForElement, 200)\n }\n }\n waitForElement()\n }, initialDelay)\n } else {\n if (nextStep.navigation && onNavigate) {\n onNavigate(nextStep.navigation.page, nextStep.navigation.subtab)\n }\n\n if (nextStep.cursorTarget) {\n const cursorTarget = nextStep.cursorTarget\n const isDialogElement = cursorTarget.selector.includes('dialog') || cursorTarget.selector.includes('api-key-name-input')\n const isSettingsTab = cursorTarget.selector.includes('data-settings-tab')\n \n const navigationSetTab = nextStep.navigation?.subtab && isSettingsTab && \n cursorTarget.selector.includes(`data-settings-tab=\"${nextStep.navigation.subtab}\"`)\n const shouldAutoClick = cursorTarget.onClick && !navigationSetTab\n \n const hasNavigation = !!nextStep.navigation\n const hasSubtab = !!nextStep.navigation?.subtab\n const navigationDelay = hasSubtab ? 700 : hasNavigation ? 400 : 0\n const initialDelay = navigationDelay + (isDialogElement ? 700 : isSettingsTab ? 600 : 400)\n \n setTimeout(() => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n \n const waitForElement = () => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n \n const element = document.querySelector(cursorTarget.selector) as HTMLElement\n if (element && element.offsetParent !== null) {\n moveTo(cursorTarget)\n if (shouldAutoClick) {\n setTimeout(() => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n element.click()\n }, 1000)\n }\n } else if (isDialogElement || isSettingsTab || cursorTarget.selector.includes('data-testid')) {\n setTimeout(waitForElement, 200)\n } else {\n moveTo(cursorTarget)\n if (shouldAutoClick) {\n setTimeout(() => {\n const currentGuideCheck = activeGuideRef.current\n if (!currentGuideCheck || currentGuideCheck.id !== guide.id || currentGuideCheck.stepIndex !== nextIndex) {\n return\n }\n const el = document.querySelector(cursorTarget.selector) as HTMLElement\n if (el) el.click()\n }, 1000)\n }\n }\n }\n waitForElement()\n }, initialDelay)\n } else {\n hide()\n }\n }\n\n streamAssistantMessage(draft.id, nextStep.text)\n }\n\n function goBackGuide() {\n if (!activeGuide) return\n const guide = guides[activeGuide.id]\n if (!guide) return\n const prevIndex = activeGuide.stepIndex - 1\n if (prevIndex >= 0) {\n setActiveGuide({ id: activeGuide.id, stepIndex: prevIndex })\n activeGuideRef.current = { id: activeGuide.id, stepIndex: prevIndex }\n const prevStep = guide.steps[prevIndex]\n if (prevStep.navigation && onNavigate) {\n onNavigate(prevStep.navigation.page, prevStep.navigation.subtab)\n }\n if (prevStep.cursorTarget) {\n moveTo(prevStep.cursorTarget)\n } else {\n hide()\n }\n }\n }\n\n // Render the component\n const currentFolder = folders.find((f) => f.id === currentFolderId)\n\n return (\n <section className=\"fixed bottom-6 right-6 z-50 flex flex-col w-[380px] max-h-[600px] rounded-2xl border border-gray-200 bg-white shadow-2xl overflow-hidden\">\n {/* Header */}\n <div className=\"shrink-0 flex items-center justify-between px-4 py-3 border-b border-gray-100 bg-white\">\n <div className=\"flex items-center gap-2\">\n {(!isEmpty || panelView === \"folder\") && (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"h-7 w-7 rounded-full\"\n onClick={panelView === \"folder\" ? closeFolder : handleBack}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n )}\n <span className=\"text-sm font-medium text-gray-700\">\n {panelView === \"folder\" && currentFolder ? currentFolder.title : \"AI Assistant\"}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"h-7 w-7 rounded-full\"\n onClick={() => setIsCollapsed(!isCollapsed)}\n >\n {isCollapsed ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n {!isEmpty && (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"h-7 w-7 rounded-full\"\n onClick={handleBack}\n >\n <SquarePen className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n\n {/* Main content */}\n {!isCollapsed && (\n <div className=\"flex-1 min-h-0 flex flex-col overflow-hidden\">\n {isEmpty && panelView === \"landing\" ? (\n // Landing view\n <div className=\"flex-1 overflow-y-auto px-4 py-4\">\n <div className=\"space-y-2\">\n {folders.map((folder) => (\n <button\n key={folder.id}\n type=\"button\"\n onClick={() => openFolder(folder.id)}\n className=\"w-full text-left px-3 py-2.5 rounded-lg hover:bg-gray-50 transition-colors border border-gray-100\"\n >\n <div className=\"text-sm font-medium text-gray-800\">{folder.title}</div>\n <div className=\"text-xs text-gray-500 mt-0.5\">{folder.topics.length} topics</div>\n </button>\n ))}\n </div>\n \n {/* Guides section */}\n <div className=\"mt-6 pt-4 border-t border-gray-100\">\n <div className=\"text-xs uppercase tracking-wider text-gray-400 mb-2\">Interactive Guides</div>\n {Object.values(guides).map((guide) => (\n <button\n key={guide.id}\n type=\"button\"\n onClick={() => startGuide(guide.id)}\n className=\"w-full text-left px-3 py-2 rounded-lg hover:bg-gray-50 transition-colors text-sm text-gray-700\"\n >\n {guide.title}\n </button>\n ))}\n </div>\n </div>\n ) : isEmpty && panelView === \"folder\" && currentFolder ? (\n // Folder view\n <div className=\"flex-1 overflow-y-auto px-4 py-4\">\n <div className=\"space-y-1\">\n {currentFolder.topics.map((topic) => (\n <button\n key={topic.id}\n type=\"button\"\n onClick={() => sendTopic(topic.prompt)}\n className=\"w-full text-left px-3 py-2 rounded-lg hover:bg-gray-50 transition-colors text-sm text-gray-700\"\n >\n {topic.label}\n </button>\n ))}\n </div>\n </div>\n ) : (\n <>\n {/* Messages */}\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <ScrollArea ref={messagesContainerRef} className=\"h-full px-4 py-3\">\n <div className=\"space-y-1\">\n {messages.map((message, idx) => {\n const prevMessage = idx > 0 ? messages[idx - 1] : null\n const isRoleChange = !prevMessage || prevMessage.role !== message.role\n const isCurrentGuideStep = message.kind === \"guideStep\" && \n activeGuide && \n message.guideStepIndex === activeGuide.stepIndex\n\n // User messages\n if (message.role === \"user\") {\n return (\n <div key={message.id} className={`${isRoleChange ? \"mt-3\" : \"\"}`}>\n <div className=\"text-sm leading-6 text-gray-900 whitespace-pre-wrap\">\n {message.content}\n </div>\n </div>\n )\n }\n\n // Navigation action message\n if (message.kind === \"navigationAction\" && message.navigationTarget) {\n return (\n <div key={message.id} className={`${isRoleChange ? \"mt-3\" : \"\"}`}>\n <div className=\"text-sm leading-6 text-gray-700 mb-2\">\n {message.content}\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-8 rounded-xl px-3 text-xs gap-1.5 bg-gray-100 hover:bg-gray-200 border border-gray-200\"\n onClick={() => message.navigationTarget && handleConfirmNavigation(message.navigationTarget)}\n >\n <span>Go to {getPageDisplayName(message.navigationTarget)}</span>\n <span className=\"flex items-center gap-0.5 text-gray-400\">\n <Command className=\"h-3 w-3\" />\n <CornerDownLeft className=\"h-3 w-3\" />\n </span>\n </Button>\n </div>\n )\n }\n\n // Action form message\n if (message.kind === \"actionForm\" && message.actionType && !message.isSubmitted) {\n return (\n <div key={message.id} className={`${isRoleChange ? \"mt-3\" : \"\"}`}>\n <div className=\"text-sm leading-6 text-gray-700 mb-3\">\n {message.content}\n </div>\n {/* Form fields would be rendered here based on actionType */}\n <div className=\"space-y-2 mb-3\">\n {/* Simplified form - in real package, you'd have a form renderer */}\n <div className=\"text-xs text-gray-500\">Form for: {message.actionType}</div>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-8 rounded-xl px-3 text-xs gap-1.5 bg-gray-100 hover:bg-gray-200 border border-gray-200\"\n onClick={handleActionSubmit}\n >\n <span>Submit</span>\n <span className=\"flex items-center gap-0.5 text-gray-400\">\n <Command className=\"h-3 w-3\" />\n <CornerDownLeft className=\"h-3 w-3\" />\n </span>\n </Button>\n </div>\n )\n }\n\n // Bulk preview message\n if (message.kind === \"bulkPreview\" && message.csvData) {\n return (\n <div key={message.id} className={`${isRoleChange ? \"mt-3\" : \"\"}`}>\n <div className=\"text-sm leading-6 text-gray-700 mb-2\">\n {message.content}\n </div>\n <div className=\"bg-gray-50 rounded-lg border border-gray-200 overflow-hidden\">\n <div className=\"px-3 py-2 border-b border-gray-200 flex items-center gap-2\">\n <FileSpreadsheet className=\"h-4 w-4 text-gray-500\" />\n <span className=\"text-xs font-medium text-gray-700\">{message.csvData.fileName}</span>\n <span className=\"text-xs text-gray-400 ml-auto\">{message.csvData.rowCount} rows</span>\n </div>\n {message.csvData.sampleRows && message.csvData.sampleRows.length > 0 && (\n <div className=\"p-2\">\n <div className=\"space-y-1\">\n {message.csvData.sampleRows.slice(0, 3).map((row, i) => (\n <div key={i} className=\"text-xs text-gray-600 bg-white rounded px-2 py-1 border border-gray-100\">\n {Object.entries(row).slice(0, 3).map(([key, val], j) => (\n <span key={key}>\n {j > 0 && \" • \"}\n <span className=\"text-gray-400\">{key}:</span> {val}\n </span>\n ))}\n {Object.keys(row).length > 3 && <span className=\"text-gray-400\"> ...</span>}\n </div>\n ))}\n </div>\n </div>\n )}\n {message.suggestedAction && (\n <div className=\"px-3 py-2 bg-blue-50 border-t border-blue-100\">\n <span className=\"text-xs text-blue-700\">\n Suggested action: <strong>{message.suggestedAction.replace(/_/g, ' ')}</strong>\n </span>\n </div>\n )}\n </div>\n {message.bulkSessionId && (\n <div className=\"mt-3 flex items-center gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-8 rounded-xl px-3 text-xs gap-1.5 bg-gray-100 hover:bg-gray-200 border border-gray-200\"\n onClick={() => message.bulkSessionId && confirmBulkOperation(message.bulkSessionId)}\n >\n <span>Process {message.csvData.rowCount} rows</span>\n <span className=\"flex items-center gap-0.5 text-gray-400\">\n <Command className=\"h-3 w-3\" />\n <CornerDownLeft className=\"h-3 w-3\" />\n </span>\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-8 rounded-xl px-3 text-xs text-gray-500 hover:text-gray-700 hover:bg-gray-100\"\n onClick={cancelBulkOperation}\n >\n Cancel\n </Button>\n </div>\n )}\n </div>\n )\n }\n\n // Bulk progress\n if (message.kind === \"bulkProgress\" && message.bulkProgress) {\n const { processed, total, successes, failures } = message.bulkProgress\n const percentage = Math.round((processed / total) * 100)\n return (\n <div key={message.id} className={`${isRoleChange ? \"mt-3\" : \"\"}`}>\n <div className=\"bg-gray-50 rounded-lg border border-gray-200 p-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Loader2 className=\"h-4 w-4 animate-spin text-blue-600\" />\n <span className=\"text-sm font-medium text-gray-700\">\n Processing... {processed} of {total}\n </span>\n </div>\n <div className=\"h-2 bg-gray-200 rounded-full overflow-hidden mb-2\">\n <div \n className=\"h-full bg-blue-600 transition-all duration-300\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n <div className=\"flex items-center gap-3 text-xs text-gray-600\">\n <span className=\"flex items-center gap-1\">\n <CheckCircle2 className=\"h-3 w-3 text-green-600\" />\n {successes} successful\n </span>\n {failures > 0 && (\n <span className=\"flex items-center gap-1 text-red-600\">\n <X className=\"h-3 w-3\" />\n {failures} failed\n </span>\n )}\n </div>\n </div>\n </div>\n )\n }\n\n // Bulk summary\n if (message.kind === \"bulkSummary\" && message.bulkSummary) {\n const { total, successes, failures, navigationPage } = message.bulkSummary\n const hasFailures = failures.length > 0\n const pageLabel = navigationPage?.page === \"customers\" ? \"Customers\" \n : navigationPage?.page === \"dashboard\" ? \"Dashboard\"\n : navigationPage?.page === \"settings\" ? \"Settings\"\n : \"Results\"\n return (\n <div key={message.id} className={`${isRoleChange ? \"mt-3\" : \"\"}`}>\n <div className={`rounded-lg border p-3 ${hasFailures ? 'bg-amber-50 border-amber-200' : 'bg-green-50 border-green-200'}`}>\n <div className=\"flex items-center gap-2 mb-2\">\n <CheckCircle2 className={`h-5 w-5 ${hasFailures ? 'text-amber-600' : 'text-green-600'}`} />\n <span className=\"text-sm font-medium text-gray-800\">\n Bulk operation complete\n </span>\n </div>\n <div className=\"text-sm text-gray-600 mb-2\">\n {message.content || `Processed ${total} rows: ${successes} successful${hasFailures ? `, ${failures.length} failed` : ''}.`}\n </div>\n <div className=\"flex items-center gap-4 text-xs\">\n <span className=\"flex items-center gap-1 text-green-700\">\n <CheckCircle2 className=\"h-3 w-3\" />\n {successes} successful\n </span>\n {hasFailures && (\n <span className=\"flex items-center gap-1 text-red-600\">\n <X className=\"h-3 w-3\" />\n {failures.length} failed\n </span>\n )}\n </div>\n {hasFailures && (\n <div className=\"mt-3 pt-2 border-t border-amber-200\">\n <div className=\"text-[10px] uppercase tracking-wider text-amber-700 mb-1\">Failed Rows</div>\n <div className=\"space-y-1 max-h-32 overflow-y-auto\">\n {failures.slice(0, 5).map((failure, i) => (\n <div key={i} className=\"text-xs text-red-700 bg-red-50 rounded px-2 py-1\">\n Row {failure.row}: {failure.error || 'Unknown error'}\n </div>\n ))}\n {failures.length > 5 && (\n <div className=\"text-xs text-amber-600\">\n ...and {failures.length - 5} more\n </div>\n )}\n </div>\n </div>\n )}\n {navigationPage && successes > 0 && (\n <div className=\"mt-3 pt-2 border-t border-gray-200\">\n <button\n type=\"button\"\n onClick={() => {\n if (onNavigate && navigationPage.page) {\n onNavigate(navigationPage.page, navigationPage.subtab)\n }\n }}\n className=\"flex items-center gap-2 text-xs text-gray-500 hover:text-gray-700 transition-colors group cursor-pointer\"\n >\n <span className=\"flex items-center gap-1 px-1.5 py-0.5 bg-gray-100 rounded text-[10px] font-medium text-gray-600 group-hover:bg-gray-200\">\n <Command className=\"h-2.5 w-2.5\" />\n <span>+</span>\n <CornerDownLeft className=\"h-2.5 w-2.5\" />\n </span>\n <span>View {pageLabel}</span>\n </button>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n // Default text message\n return (\n <React.Fragment key={message.id}>\n <div\n ref={isCurrentGuideStep ? currentStepRef : null}\n className={`${isRoleChange ? \"mt-3\" : \"\"}`}\n >\n <div className=\"text-sm leading-6 text-gray-700\">\n {(() => {\n const text = message.content || \"\"\n if (message.kind === \"guideStep\") {\n const m = text.match(/^(Step\\s+\\d+:)([\\s\\S]*)/)\n if (m) {\n return (\n <>\n <strong>{m[1]}</strong>\n {m[2]}\n </>\n )\n }\n }\n if (message.role === \"assistant\" && text) {\n return renderMarkdown(text)\n }\n return text || <span className=\"opacity-70\">Thinking…</span>\n })()}\n </div>\n {message.role === \"assistant\" && message.structuredData && (\n <div className=\"mt-3\">\n <DataRenderer \n type={message.structuredData.type} \n data={message.structuredData.data} \n />\n </div>\n )}\n {message.role === \"assistant\" && \n message.followups && \n message.followups.length > 0 && \n !message.followupSelected && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {message.followups.map((followup) => (\n <button\n key={followup.id}\n type=\"button\"\n onClick={() => handleFollowupClick(message.id, followup)}\n className=\"inline-flex items-center px-3 py-1.5 text-xs font-medium rounded-xl\n bg-white hover:bg-gray-50 text-gray-600 hover:text-gray-800\n border border-gray-200 hover:border-gray-300 shadow-sm\n transition-all duration-150 ease-in-out\"\n >\n {followup.label}\n </button>\n ))}\n </div>\n )}\n </div>\n </React.Fragment>\n )\n })}\n\n {(activeGuide || guideComplete) && (\n <div className=\"mt-3 flex items-center gap-2\">\n {activeGuide && activeGuide.stepIndex > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-7 w-7 rounded-full p-0 bg-gray-100 hover:bg-gray-200 border border-gray-200\"\n onClick={goBackGuide}\n >\n <ArrowLeft className=\"h-3.5 w-3.5 text-gray-600\" />\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-8 rounded-xl px-3 text-xs gap-1.5 bg-gray-100 hover:bg-gray-200 border border-gray-200\"\n onClick={guideComplete ? handleBack : advanceGuide}\n >\n <span>{guideComplete ? \"Done\" : \"Next\"}</span>\n <span className=\"flex items-center gap-0.5 text-gray-400\">\n <Command className=\"h-3 w-3\" />\n <CornerDownLeft className=\"h-3 w-3\" />\n </span>\n </Button>\n </div>\n )}\n\n {(phase === \"thinking\" || phase === \"searching\" || phase === \"executing\" || phase === \"responding\") && (\n <div className={`${lastRole === \"user\" ? \"mt-3\" : \"\"}`}>\n <AssistantActivity \n phase={phase as \"thinking\" | \"searching\" | \"executing\" | \"responding\"} \n progressSteps={progressSteps}\n />\n </div>\n )}\n {!activeGuide && <div ref={messagesEndRef} />}\n </div>\n </ScrollArea>\n </div>\n </>\n )}\n </div>\n )}\n\n {/* Composer */}\n {!isCollapsed && (\n <div className=\"px-4 py-3 border-t border-gray-100 bg-gray-50/50 shrink-0\">\n {pendingFile && (\n <div className=\"mb-2 flex items-center gap-2 rounded-xl bg-blue-50 border border-blue-200 px-3 py-2\">\n <FileSpreadsheet className=\"h-4 w-4 text-blue-600\" />\n <span className=\"text-xs text-blue-700 flex-1 truncate\">{pendingFile.name}</span>\n <button\n type=\"button\"\n onClick={() => {\n setPendingFile(null)\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n }}\n className=\"text-blue-600 hover:text-blue-800\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n <form onSubmit={handleSubmit} className=\"w-full\">\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0]\n if (file) {\n setPendingFile(file)\n }\n }}\n />\n <div className=\"flex w-full items-center gap-2 rounded-2xl border border-gray-200 bg-white px-3 py-2 shadow-sm\">\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => fileInputRef.current?.click()}\n className=\"h-8 w-8 rounded-full text-gray-400 hover:text-gray-600 hover:bg-gray-100\"\n title=\"Upload CSV for bulk operations\"\n >\n <Paperclip className=\"h-4 w-4\" />\n </Button>\n <Input\n placeholder={pendingFile ? \"Describe what to do with this CSV...\" : \"Ask anything...\"}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n className=\"flex-1 border-0 bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 text-sm placeholder:text-gray-400\"\n />\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!input.trim() && !pendingFile}\n className=\"h-8 w-8 rounded-full bg-gray-900 hover:bg-gray-800 disabled:bg-gray-300\"\n >\n <ArrowUp className=\"h-4 w-4\" />\n </Button>\n </div>\n </form>\n </div>\n )}\n\n {/* Guide Cursor Overlay */}\n {enableGuideCursor && (\n <GuideCursor\n x={cursorState.x}\n y={cursorState.y}\n visible={cursorState.visible}\n onClick={cursorState.onClick}\n />\n )}\n </section>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Search, ChevronDown } from \"lucide-react\"\nimport type { LinkItem } from \"../types\"\n\nexport function AssistantSearchSummary({\n title,\n links,\n}: {\n title: string\n links: LinkItem[]\n}) {\n const [open, setOpen] = React.useState(false)\n\n return (\n <div className=\"text-xs text-muted-foreground\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-2 px-0 py-0\"\n aria-expanded={open}\n >\n <div className=\"flex items-center gap-1.5\">\n {open ? (\n <ChevronDown className=\"h-3 w-3 opacity-70\" />\n ) : (\n <Search className=\"h-3 w-3 opacity-70\" />\n )}\n <span>{title}</span>\n </div>\n </button>\n\n {open && links.length > 0 && (\n <ul className=\"ml-5 mt-1 space-y-0.5\">\n {links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n\n"]}
|