diff --git a/packages/ui/src/components/chat/ChatContainer.tsx b/packages/ui/src/components/chat/ChatContainer.tsx index d754a54f..90e90874 100644 --- a/packages/ui/src/components/chat/ChatContainer.tsx +++ b/packages/ui/src/components/chat/ChatContainer.tsx @@ -148,6 +148,7 @@ type HydratingToolSkeletonRow = { type ChatViewportProps = { onStatusOverlayNode: (node: HTMLDivElement | null) => void; + statusOverlayHidden: boolean; currentSessionId: string; currentSessionKey: string; isDesktopExpandedInput: boolean; @@ -192,6 +193,7 @@ type ChatViewportProps = { const ChatViewport = React.memo(({ onStatusOverlayNode, + statusOverlayHidden, currentSessionId, currentSessionKey, isDesktopExpandedInput, @@ -421,10 +423,15 @@ const ChatViewport = React.memo(({ background — text streams beneath it; the measured height feeds composerOverlayHeight so the live line never hides under it. */} -
+
@@ -445,6 +452,7 @@ const ChatViewport = React.memo(({ ); }, (prev, next) => { return prev.onStatusOverlayNode === next.onStatusOverlayNode + && prev.statusOverlayHidden === next.statusOverlayHidden && prev.currentSessionId === next.currentSessionId && prev.currentSessionKey === next.currentSessionKey && prev.isDesktopExpandedInput === next.isDesktopExpandedInput @@ -1359,6 +1367,7 @@ export const ChatContainer: React.FC = ({ return ( = ({ {!draftLayoutVisible && !isDesktopExpandedInput && sessionMessages.length > 0 && ( )} diff --git a/packages/ui/src/components/chat/components/ScrollToBottomButton.tsx b/packages/ui/src/components/chat/components/ScrollToBottomButton.tsx index 15726e76..64f0d4e6 100644 --- a/packages/ui/src/components/chat/components/ScrollToBottomButton.tsx +++ b/packages/ui/src/components/chat/components/ScrollToBottomButton.tsx @@ -7,26 +7,36 @@ import { useI18n } from '@/lib/i18n'; interface ScrollToBottomButtonProps { visible: boolean; + /** The session is still streaming: the pill carries the activity signal + while the floating status row is hidden away from the live edge. */ + working?: boolean; onClick: () => void; } -const ScrollToBottomButton: React.FC = ({ visible, onClick }) => { +const ScrollToBottomButton: React.FC = ({ visible, working = false, onClick }) => { const { t } = useI18n(); return (
);