mobile wip

This commit is contained in:
marko-kraemer 2025-04-21 15:21:21 +01:00
parent f0bc3e9ad4
commit 2b8c3a9ffb
3 changed files with 40 additions and 15 deletions

View File

@ -18,6 +18,7 @@ import { useSidebar } from "@/components/ui/sidebar";
import { useAgentStream } from '@/hooks/useAgentStream'; import { useAgentStream } from '@/hooks/useAgentStream';
import { Markdown } from '@/components/ui/markdown'; import { Markdown } from '@/components/ui/markdown';
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { useIsMobile } from "@/hooks/use-mobile";
import { UnifiedMessage, ParsedContent, ParsedMetadata, ThreadParams } from '@/components/thread/types'; import { UnifiedMessage, ParsedContent, ParsedMetadata, ThreadParams } from '@/components/thread/types';
import { getToolIcon, extractPrimaryParam, safeJsonParse } from '@/components/thread/utils'; import { getToolIcon, extractPrimaryParam, safeJsonParse } from '@/components/thread/utils';
@ -188,6 +189,7 @@ function renderMarkdownContent(content: string, handleToolClick: (assistantMessa
export default function ThreadPage({ params }: { params: Promise<ThreadParams> }) { export default function ThreadPage({ params }: { params: Promise<ThreadParams> }) {
const unwrappedParams = React.use(params); const unwrappedParams = React.use(params);
const threadId = unwrappedParams.threadId; const threadId = unwrappedParams.threadId;
const isMobile = useIsMobile();
const router = useRouter(); const router = useRouter();
const [messages, setMessages] = useState<UnifiedMessage[]>([]); const [messages, setMessages] = useState<UnifiedMessage[]>([]);
@ -1132,14 +1134,16 @@ export default function ThreadPage({ params }: { params: Promise<ThreadParams> }
return ( return (
<div className="flex h-screen"> <div className="flex h-screen">
<div className={`flex flex-col flex-1 overflow-hidden transition-all duration-200 ease-in-out ${isSidePanelOpen ? 'mr-[90%] sm:mr-[450px] md:mr-[500px] lg:mr-[550px] xl:mr-[650px]' : ''}`}> <div className={`flex flex-col flex-1 overflow-hidden transition-all duration-200 ease-in-out ${isSidePanelOpen ? 'mr-[90%] sm:mr-[450px] md:mr-[500px] lg:mr-[550px] xl:mr-[650px]' : ''}`}>
<SiteHeader {!isMobile && (
threadId={threadId} <SiteHeader
projectName={projectName} threadId={threadId}
projectId={project?.id || ""} projectName={projectName}
onViewFiles={handleOpenFileViewer} projectId={project?.id || ""}
onToggleSidePanel={toggleSidePanel} onViewFiles={handleOpenFileViewer}
onProjectRenamed={handleProjectRenamed} onToggleSidePanel={toggleSidePanel}
/> onProjectRenamed={handleProjectRenamed}
/>
)}
<div <div
ref={messagesContainerRef} ref={messagesContainerRef}
className="flex-1 overflow-y-auto px-6 py-4 pb-24 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60" className="flex-1 overflow-y-auto px-6 py-4 pb-24 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"
@ -1429,9 +1433,13 @@ export default function ThreadPage({ params }: { params: Promise<ThreadParams> }
<div className={cn( <div className={cn(
"fixed bottom-0 z-10 bg-gradient-to-t from-background via-background/90 to-transparent px-4 pt-8 transition-all duration-200 ease-in-out", "fixed bottom-0 z-10 bg-gradient-to-t from-background via-background/90 to-transparent px-4 pt-8 transition-all duration-200 ease-in-out",
leftSidebarState === 'expanded' ? 'left-[72px] lg:left-[256px]' : 'left-[72px]', leftSidebarState === 'expanded' ? 'left-[72px] lg:left-[256px]' : 'left-[72px]',
isSidePanelOpen ? 'right-[90%] sm:right-[450px] md:right-[500px] lg:right-[550px] xl:right-[650px]' : 'right-0' isSidePanelOpen ? 'right-[90%] sm:right-[450px] md:right-[500px] lg:right-[550px] xl:right-[650px]' : 'right-0',
isMobile ? 'left-0 right-0' : ''
)}> )}>
<div className="mx-auto max-w-3xl"> <div className={cn(
"mx-auto",
isMobile ? "w-full px-4" : "max-w-3xl"
)}>
<ChatInput <ChatInput
value={newMessage} value={newMessage}
onChange={setNewMessage} onChange={setNewMessage}

View File

@ -2,6 +2,7 @@
import * as React from "react" import * as React from "react"
import Link from "next/link" import Link from "next/link"
import { Menu } from "lucide-react"
import { NavAgents } from "@/components/sidebar/nav-agents" import { NavAgents } from "@/components/sidebar/nav-agents"
import { NavUserWithTeams } from "@/components/sidebar/nav-user-with-teams" import { NavUserWithTeams } from "@/components/sidebar/nav-user-with-teams"
@ -23,11 +24,13 @@ import {
TooltipContent, TooltipContent,
TooltipTrigger TooltipTrigger
} from "@/components/ui/tooltip" } from "@/components/ui/tooltip"
import { useIsMobile } from "@/hooks/use-mobile"
export function SidebarLeft({ export function SidebarLeft({
...props ...props
}: React.ComponentProps<typeof Sidebar>) { }: React.ComponentProps<typeof Sidebar>) {
const { state, setOpen } = useSidebar() const { state, setOpen, setOpenMobile } = useSidebar()
const isMobile = useIsMobile()
const [user, setUser] = useState<{ const [user, setUser] = useState<{
name: string; name: string;
email: string; email: string;
@ -88,16 +91,29 @@ export function SidebarLeft({
{/* <span className="font-semibold"> SUNA</span> */} {/* <span className="font-semibold"> SUNA</span> */}
</div> </div>
)} )}
{state !== "collapsed" && ( <div className="ml-auto flex items-center gap-2">
<div className="ml-auto"> {state !== "collapsed" && (
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
<SidebarTrigger className="h-8 w-8" /> <SidebarTrigger className="h-8 w-8" />
</TooltipTrigger> </TooltipTrigger>
<TooltipContent>Toggle sidebar (CMD+B)</TooltipContent> <TooltipContent>Toggle sidebar (CMD+B)</TooltipContent>
</Tooltip> </Tooltip>
</div> )}
)} {isMobile && (
<Tooltip>
<TooltipTrigger asChild>
<button
onClick={() => setOpenMobile(true)}
className="h-8 w-8 flex items-center justify-center rounded-md hover:bg-accent"
>
<Menu className="h-4 w-4" />
</button>
</TooltipTrigger>
<TooltipContent>Open menu</TooltipContent>
</Tooltip>
)}
</div>
</div> </div>
</SidebarHeader> </SidebarHeader>
<SidebarContent className="[&::-webkit-scrollbar]:hidden [-ms-overflow-style:'none'] [scrollbar-width:'none']"> <SidebarContent className="[&::-webkit-scrollbar]:hidden [-ms-overflow-style:'none'] [scrollbar-width:'none']">

View File

@ -369,6 +369,7 @@ export function ToolCallSidePanel({
/> />
</div> </div>
)} )}
</div> </div>
); );
} }