diff --git a/apps/x/apps/renderer/src/App.tsx b/apps/x/apps/renderer/src/App.tsx index f5868166..560df891 100644 --- a/apps/x/apps/renderer/src/App.tsx +++ b/apps/x/apps/renderer/src/App.tsx @@ -6,7 +6,7 @@ import type { LanguageModelUsage, ToolUIPart } from 'ai'; import './App.css' import z from 'zod'; import { Button } from './components/ui/button'; -import { CheckIcon, LoaderIcon, ArrowUp, PanelLeftIcon, PanelRightIcon, Square, X, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'; +import { CheckIcon, LoaderIcon, ArrowUp, PanelLeftIcon, PanelRightIcon, Square, X, ChevronLeftIcon, ChevronRightIcon, SquarePen } from 'lucide-react'; import { cn } from '@/lib/utils'; import { MarkdownEditor } from './components/markdown-editor'; import { ChatInputBar } from './components/chat-button'; @@ -126,6 +126,12 @@ const graphPalette = [ ] const MACOS_TRAFFIC_LIGHTS_RESERVED_PX = 12 + 12 * 3 + 8 * 2 +const TITLEBAR_BUTTON_PX = 32 +const TITLEBAR_BUTTON_GAP_PX = 4 +const TITLEBAR_HEADER_GAP_PX = 8 +const TITLEBAR_TOGGLE_MARGIN_LEFT_PX = 12 +const TITLEBAR_BUTTONS_COLLAPSED = 4 +const TITLEBAR_BUTTON_GAPS_COLLAPSED = 3 const clampNumber = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value)) @@ -469,15 +475,18 @@ function FixedSidebarToggle({ onNavigateForward, canNavigateBack, canNavigateForward, + onNewChat, leftInsetPx, }: { onNavigateBack: () => void onNavigateForward: () => void canNavigateBack: boolean canNavigateForward: boolean + onNewChat: () => void leftInsetPx: number }) { - const { toggleSidebar } = useSidebar() + const { toggleSidebar, state } = useSidebar() + const isCollapsed = state === "collapsed" return (
) } /** Main content header that adjusts padding based on sidebar state */ -function ContentHeader({ children }: { children: React.ReactNode }) { +function ContentHeader({ + children, + onNavigateBack, + onNavigateForward, + canNavigateBack, + canNavigateForward, + collapsedLeftPaddingPx, +}: { + children: React.ReactNode + onNavigateBack?: () => void + onNavigateForward?: () => void + canNavigateBack?: boolean + canNavigateForward?: boolean + collapsedLeftPaddingPx?: number +}) { const { state } = useSidebar() const isCollapsed = state === "collapsed" return ( @@ -523,9 +558,35 @@ function ContentHeader({ children }: { children: React.ReactNode }) { "titlebar-drag-region flex h-10 shrink-0 items-center gap-2 border-b border-border px-3 bg-sidebar transition-[padding] duration-200 ease-linear", // When the sidebar is collapsed the content area shifts left, so we need enough left padding // to avoid overlapping the fixed traffic-lights/toggle/back/forward controls. - isCollapsed && "pl-[168px]" + isCollapsed && !collapsedLeftPaddingPx && "pl-[168px]" )} + style={isCollapsed && collapsedLeftPaddingPx ? { paddingLeft: collapsedLeftPaddingPx } : undefined} > + {!isCollapsed && onNavigateBack && onNavigateForward ? ( +
+ + +
+ ) : null} + {onNavigateBack && onNavigateForward ? ( +