Changed display of working directory and ellipsis to beginning of path (#2414)

This commit is contained in:
Zane
2025-05-01 11:49:53 -07:00
committed by GitHub
parent c99d5beb07
commit cf1a2db78a
@@ -19,10 +19,10 @@ const TOKEN_WARNING_THRESHOLD = 0.8; // warning shows at 80% of the token limit
const TOOLS_MAX_SUGGESTED = 60; // max number of tools before we show a warning const TOOLS_MAX_SUGGESTED = 60; // max number of tools before we show a warning
export default function BottomMenu({ export default function BottomMenu({
hasMessages, hasMessages,
setView, setView,
numTokens = 0, numTokens = 0,
}: { }: {
hasMessages: boolean; hasMessages: boolean;
setView: (view: View, viewOptions?: ViewOptions) => void; setView: (view: View, viewOptions?: ViewOptions) => void;
numTokens?: number; numTokens?: number;
@@ -158,27 +158,27 @@ export default function BottomMenu({
}, [isDirTruncated]); }, [isDirTruncated]);
return ( return (
<div className="flex justify-between items-center text-textSubtle relative bg-bgSubtle border-t border-borderSubtle text-xs pl-4 h-[40px] pb-1 align-middle"> <div className="flex justify-between items-center text-textSubtle relative bg-bgSubtle border-t border-borderSubtle text-xs pl-4 h-[40px] pb-1 align-middle">
{/* Directory Chooser - Always visible */} {/* Directory Chooser - Always visible */}
<span <span
className="cursor-pointer flex items-center [&>svg]:size-4" className="cursor-pointer flex items-center [&>svg]:size-4"
onClick={async () => { onClick={async () => {
if (hasMessages) { if (hasMessages) {
window.electron.directoryChooser(); window.electron.directoryChooser();
} else { } else {
window.electron.directoryChooser(true); window.electron.directoryChooser(true);
} }
}} }}
> >
<Document className="mr-1" /> <Document className="mr-1" />
<TooltipProvider> <TooltipProvider>
<Tooltip open={isTooltipOpen} onOpenChange={setIsTooltipOpen}> <Tooltip open={isTooltipOpen} onOpenChange={setIsTooltipOpen}>
<TooltipTrigger asChild> <TooltipTrigger asChild>
<span <span
ref={dirRef} ref={dirRef}
className="truncate max-w-[170px] md:max-w-[200px] lg:max-w-[380px] min-w-0 block" className="max-w-[170px] md:max-w-[200px] lg:max-w-[380px] min-w-0 block overflow-hidden text-ellipsis whitespace-nowrap [direction:rtl] text-left"
> >
Working in {window.appConfig.get('GOOSE_WORKING_DIR') as string} {window.appConfig.get('GOOSE_WORKING_DIR') as string}
</span> </span>
</TooltipTrigger> </TooltipTrigger>
{isDirTruncated && ( {isDirTruncated && (
@@ -191,85 +191,85 @@ export default function BottomMenu({
<ChevronUp className="ml-1" /> <ChevronUp className="ml-1" />
</span> </span>
{/* Goose Mode Selector Dropdown */} {/* Goose Mode Selector Dropdown */}
<BottomMenuModeSelection setView={setView} /> <BottomMenuModeSelection setView={setView} />
{/* Right-side section with ToolCount and Model Selector together */} {/* Right-side section with ToolCount and Model Selector together */}
<div className="flex items-center mr-4 space-x-1"> <div className="flex items-center mr-4 space-x-1">
{/* Tool and Token count */} {/* Tool and Token count */}
{<BottomMenuAlertPopover alerts={alerts} />} {<BottomMenuAlertPopover alerts={alerts} />}
{/* Model Selector Dropdown */} {/* Model Selector Dropdown */}
{settingsV2Enabled ? ( {settingsV2Enabled ? (
<ModelsBottomBar dropdownRef={dropdownRef} setView={setView} /> <ModelsBottomBar dropdownRef={dropdownRef} setView={setView} />
) : ( ) : (
<div className="relative flex items-center ml-0 mr-4" ref={dropdownRef}> <div className="relative flex items-center ml-0 mr-4" ref={dropdownRef}>
<div <div
className="flex items-center cursor-pointer" className="flex items-center cursor-pointer"
onClick={() => setIsModelMenuOpen(!isModelMenuOpen)} onClick={() => setIsModelMenuOpen(!isModelMenuOpen)}
> >
<span>{(currentModel?.alias ?? currentModel?.name) || 'Select Model'}</span> <span>{(currentModel?.alias ?? currentModel?.name) || 'Select Model'}</span>
{isModelMenuOpen ? ( {isModelMenuOpen ? (
<ChevronDown className="w-4 h-4 ml-1" /> <ChevronDown className="w-4 h-4 ml-1" />
) : ( ) : (
<ChevronUp className="w-4 h-4 ml-1" /> <ChevronUp className="w-4 h-4 ml-1" />
)} )}
</div> </div>
{/* Dropdown Menu */} {/* Dropdown Menu */}
{isModelMenuOpen && ( {isModelMenuOpen && (
<div className="absolute bottom-[24px] right-0 w-[300px] bg-bgApp rounded-lg border border-borderSubtle"> <div className="absolute bottom-[24px] right-0 w-[300px] bg-bgApp rounded-lg border border-borderSubtle">
<div className=""> <div className="">
<ModelRadioList <ModelRadioList
className="divide-y divide-borderSubtle" className="divide-y divide-borderSubtle"
renderItem={({ model, isSelected, onSelect }) => ( renderItem={({ model, isSelected, onSelect }) => (
<label key={model.alias ?? model.name} className="block cursor-pointer"> <label key={model.alias ?? model.name} className="block cursor-pointer">
<div <div
className="flex items-center justify-between p-2 text-textStandard hover:bg-bgSubtle transition-colors" className="flex items-center justify-between p-2 text-textStandard hover:bg-bgSubtle transition-colors"
onClick={onSelect} onClick={onSelect}
> >
<div> <div>
<p className="text-sm ">{model.alias ?? model.name}</p> <p className="text-sm ">{model.alias ?? model.name}</p>
<p className="text-xs text-textSubtle"> <p className="text-xs text-textSubtle">
{model.subtext ?? model.provider} {model.subtext ?? model.provider}
</p> </p>
</div> </div>
<div className="relative"> <div className="relative">
<input <input
type="radio" type="radio"
name="recentModels" name="recentModels"
value={model.name} value={model.name}
checked={isSelected} checked={isSelected}
onChange={onSelect} onChange={onSelect}
className="peer sr-only" className="peer sr-only"
/> />
<div <div
className="h-4 w-4 rounded-full border border-gray-400 dark:border-gray-500 className="h-4 w-4 rounded-full border border-gray-400 dark:border-gray-500
peer-checked:border-[6px] peer-checked:border-black dark:peer-checked:border-white peer-checked:border-[6px] peer-checked:border-black dark:peer-checked:border-white
peer-checked:bg-white dark:peer-checked:bg-black peer-checked:bg-white dark:peer-checked:bg-black
transition-all duration-200 ease-in-out" transition-all duration-200 ease-in-out"
></div> ></div>
</div> </div>
</div>
</label>
)}
/>
<div
className="flex items-center justify-between text-textStandard p-2 cursor-pointer hover:bg-bgStandard
border-t border-borderSubtle mt-2"
onClick={() => {
setIsModelMenuOpen(false);
setView('settings');
}}
>
<span className="text-sm">Tools and Settings</span>
<Sliders className="w-5 h-5 ml-2 rotate-90" />
</div> </div>
</div> </label>
</div> )}
)} />
<div
className="flex items-center justify-between text-textStandard p-2 cursor-pointer hover:bg-bgStandard
border-t border-borderSubtle mt-2"
onClick={() => {
setIsModelMenuOpen(false);
setView('settings');
}}
>
<span className="text-sm">Tools and Settings</span>
<Sliders className="w-5 h-5 ml-2 rotate-90" />
</div>
</div>
</div> </div>
)} )}
</div> </div>
)}
</div> </div>
</div>
); );
} }