diff --git a/components/site-chat-widget.tsx b/components/site-chat-widget.tsx index 3d7105cd..1ad9e9ef 100644 --- a/components/site-chat-widget.tsx +++ b/components/site-chat-widget.tsx @@ -64,6 +64,7 @@ const CHAT_UNAVAILABLE_MESSAGE = "Jessica is temporarily unavailable right now. const SESSION_STORAGE_KEY = "rmv-site-chat-session" const PROFILE_STORAGE_KEY = "rmv-site-chat-profile" const PANEL_MAX_HEIGHT = "min(40rem, calc(100vh - 7rem))" +const MOBILE_CHAT_MEDIA_QUERY = "(max-width: 767px)" function createMessage(role: ChatRole, content: string): ChatMessage { return { @@ -197,7 +198,7 @@ export function SiteChatWidget() { () => CHAT_INTENT_OPTIONS.map((option) => ({ label: option, value: option })), [], ) - const isSuppressed = isSiteChatSuppressedRoute(pathname) + const [isMobileViewport, setIsMobileViewport] = useState(false) const [isOpen, setIsOpen] = useState(false) const [messages, setMessages] = useState([]) const [draft, setDraft] = useState("") @@ -210,6 +211,23 @@ export function SiteChatWidget() { const [, setLimits] = useState(null) const messagesEndRef = useRef(null) + useEffect(() => { + const mediaQuery = window.matchMedia(MOBILE_CHAT_MEDIA_QUERY) + const handleViewportChange = () => setIsMobileViewport(mediaQuery.matches) + + handleViewportChange() + + if (typeof mediaQuery.addEventListener === "function") { + mediaQuery.addEventListener("change", handleViewportChange) + return () => mediaQuery.removeEventListener("change", handleViewportChange) + } + + mediaQuery.addListener(handleViewportChange) + return () => mediaQuery.removeListener(handleViewportChange) + }, []) + + const isSuppressed = isSiteChatSuppressedRoute(pathname) || isMobileViewport + useEffect(() => { const storedSessionId = window.localStorage.getItem(SESSION_STORAGE_KEY) if (storedSessionId) {