// Modified for targeted chat realtime recovery; see docs/fixes/chat-realtime-recovery.md. "use client" import { CheckCircle2Icon, MessageSquarePlusIcon, RotateCwIcon, XIcon, } from "lucide-react" import { useCallback, useEffect, useLayoutEffect, useRef, useState, type ComponentProps, type CSSProperties, } from "react" import { useShallow } from "zustand/react/shallow" import { SupportChatErrorBoundary } from "@/components/support-chat/chat-error-boundary" import { SupportChatConnectionStatus } from "@/components/support-chat/connection-status" import { SupportChatConversationSwitcher } from "@/components/support-chat/conversation-switcher" import { SupportChatNewRequestDialog } from "@/components/support-chat/new-request-dialog" import { getStandaloneClosedUrl } from "@/components/support-chat/close-navigation" import { CSATCard } from "@/components/support-chat/csat-card" import { CustomerMessageEditor } from "@/components/support-chat/customer-message-editor" import { getCustomerSessionToken } from "@/lib/api/im" import { SupportChatMessageList, type SupportChatMessageListHandle, } from "@/components/support-chat/message-list" import { bindSupportHostBridge, requestSupportHostMinimize, } from "@/lib/support-host-bridge" import { useSupportChatStore } from "@/lib/stores/support-chat" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { cn } from "@/lib/utils" import { useI18n } from "@/i18n/provider" const windowActionButtonClass = "size-8 rounded-full border-0 bg-transparent text-muted-foreground shadow-none hover:bg-foreground/[0.06] hover:text-foreground focus-visible:ring-primary/20 dark:hover:bg-white/10" function WindowActionButton({ className, ...props }: ComponentProps) { return ( { messageListRef.current?.scrollToBottom() }} /> ) } export function SupportChatPanel() { return ( ) } /** * The embedded widget frame. The host sizes the iframe, so the panel always * fills the whole document box. */ export function SupportChatShell() { return (
) }