diff --git a/packages/ui/src/components/chat/ChatContainer.tsx b/packages/ui/src/components/chat/ChatContainer.tsx index 63489175..f508b65e 100644 --- a/packages/ui/src/components/chat/ChatContainer.tsx +++ b/packages/ui/src/components/chat/ChatContainer.tsx @@ -18,6 +18,7 @@ import { OverlayScrollbar } from '@/components/ui/OverlayScrollbar'; import { TimelineDialog } from './TimelineDialog'; import type { PermissionRequest } from '@/types/permission'; import type { QuestionRequest } from '@/types/question'; +import { cn } from '@/lib/utils'; const EMPTY_MESSAGES: Array<{ info: Message; parts: Part[] }> = []; const EMPTY_PERMISSIONS: PermissionRequest[] = []; @@ -101,6 +102,7 @@ export const ChatContainer: React.FC = () => { const { isTimelineDialogOpen, setTimelineDialogOpen, + isExpandedInput, } = useUIStore(); const sessionMessages = useSessionStore( @@ -163,6 +165,7 @@ export const ChatContainer: React.FC = () => { const { isMobile } = useDeviceInfo(); const draftOpen = Boolean(newSessionDraft?.open); + const isDesktopExpandedInput = isExpandedInput && !isMobile; React.useEffect(() => { if (!currentSessionId && !draftOpen) { @@ -423,13 +426,22 @@ export const ChatContainer: React.FC = () => { if (!currentSessionId && draftOpen) { return (
+ {!isDesktopExpandedInput ? (
-
+ ) : null} +
@@ -470,13 +482,22 @@ export const ChatContainer: React.FC = () => { if (sessionMessages.length === 0 && !streamingMessageId) { return (
+ {!isDesktopExpandedInput ? (
-
+ ) : null} +
@@ -485,11 +506,18 @@ export const ChatContainer: React.FC = () => { return (
-
- +
{
-
- {showScrollButton && sessionMessages.length > 0 && ( +
+ {!isDesktopExpandedInput && showScrollButton && sessionMessages.length > 0 && (
-
+
{ @@ -1908,6 +2084,7 @@ export const ChatInput: React.FC = ({ onOpenSettings, scrollToBo
= ({ onOpenSettings, scrollToBo activeTab={autocompleteTab} onTabSelect={handleAutocompleteTabSelect} onClose={() => setShowCommandAutocomplete(false)} + style={isDesktopExpanded && autocompleteOverlayPosition + ? { + left: `${autocompleteOverlayPosition.left}px`, + top: `${autocompleteOverlayPosition.top}px`, + bottom: 'auto', + width: `min(450px, calc(100% - ${autocompleteOverlayPosition.left + 8}px))`, + maxHeight: `${autocompleteOverlayPosition.maxHeight}px`, + transform: autocompleteOverlayPosition.place === 'above' ? 'translateY(-100%)' : undefined, + } + : undefined} /> )} { } @@ -1962,6 +2149,16 @@ export const ChatInput: React.FC = ({ onOpenSettings, scrollToBo searchQuery={skillQuery} onSkillSelect={handleSkillSelect} onClose={() => setShowSkillAutocomplete(false)} + style={isDesktopExpanded && autocompleteOverlayPosition + ? { + left: `${autocompleteOverlayPosition.left}px`, + top: `${autocompleteOverlayPosition.top}px`, + bottom: 'auto', + width: `min(360px, calc(100% - ${autocompleteOverlayPosition.left + 8}px))`, + maxHeight: `${autocompleteOverlayPosition.maxHeight}px`, + transform: autocompleteOverlayPosition.place === 'above' ? 'translateY(-100%)' : undefined, + } + : undefined} /> )} @@ -1976,6 +2173,16 @@ export const ChatInput: React.FC = ({ onOpenSettings, scrollToBo activeTab={autocompleteTab} onTabSelect={handleAutocompleteTabSelect} onClose={() => setShowFileMention(false)} + style={isDesktopExpanded && autocompleteOverlayPosition + ? { + left: `${autocompleteOverlayPosition.left}px`, + top: `${autocompleteOverlayPosition.top}px`, + bottom: 'auto', + width: `min(520px, calc(100% - ${autocompleteOverlayPosition.left + 8}px))`, + maxHeight: `${autocompleteOverlayPosition.maxHeight}px`, + transform: autocompleteOverlayPosition.place === 'above' ? 'translateY(-100%)' : undefined, + } + : undefined} /> )}