diff --git a/ui/desktop/src/components/BottomMenu.tsx b/ui/desktop/src/components/BottomMenu.tsx
index c94d012e..57e3ee58 100644
--- a/ui/desktop/src/components/BottomMenu.tsx
+++ b/ui/desktop/src/components/BottomMenu.tsx
@@ -6,7 +6,6 @@ import { ModelRadioList } from './settings/models/ModelRadioList';
import { Document, ChevronUp, ChevronDown } from './icons';
import type { View } from '../App';
import { BottomMenuModeSelection } from './BottomMenuModeSelection';
-import { RadioInput } from './ui/RadioInput';
export default function BottomMenu({
hasMessages,
@@ -97,14 +96,34 @@ export default function BottomMenu({
(
-
+ renderItem={({ model, isSelected, onSelect }) => (
+
)}
/>
{
{/* Dropdown Menu */}
{isGooseModeMenuOpen && (
-
+
{filterGooseModes(gooseMode, all_goose_modes, previousApproveModel).map((mode) => (
(
-
-);
-
interface ModeSelectionItemProps {
currentMode: string;
mode: GooseMode;
@@ -100,29 +88,60 @@ export function ModeSelectionItem({
setChecked(currentMode === mode.key);
}, [currentMode, mode.key]);
- const showConfigure =
- !isApproveModeConfigure && (mode.key == 'approve' || mode.key == 'smart_approve');
-
return (
-
- showConfigure ? setIsDislogOpen(true)} /> : null
- }
- isChecked={checked}
+ handleModeChange(mode.key)}
- value={mode.key}
- />
-
- {isDislogOpen ? (
-
setIsDislogOpen(false)}
- handleModeChange={handleModeChange}
- currentMode={currentMode}
+ >
+
+
+ {mode.label}
+
+ {showDescription && (
+
+ {mode.description}
+
+ )}
+
+
+ {!isApproveModeConfigure && (mode.key == 'approve' || mode.key == 'smart_approve') && (
+
+ )}
+
handleModeChange(mode.key)}
+ className="peer sr-only"
/>
- ) : null}
+
+
+
+
+
+ {isDislogOpen ? (
+ {
+ setIsDislogOpen(false);
+ }}
+ handleModeChange={handleModeChange}
+ currentMode={currentMode}
+ />
+ ) : null}
+
);
diff --git a/ui/desktop/src/components/settings/models/ModelRadioList.tsx b/ui/desktop/src/components/settings/models/ModelRadioList.tsx
index e9e084df..7fd4eac8 100644
--- a/ui/desktop/src/components/settings/models/ModelRadioList.tsx
+++ b/ui/desktop/src/components/settings/models/ModelRadioList.tsx
@@ -5,7 +5,11 @@ import { useHandleModelSelection } from './utils';
import type { View } from '@/src/App';
interface ModelRadioListProps {
- RenderItem: React.FC<{ model: Model; isSelected: boolean; onSelect: () => void }>;
+ renderItem: (props: {
+ model: Model;
+ isSelected: boolean;
+ onSelect: () => void;
+ }) => React.ReactNode;
className?: string;
}
@@ -25,7 +29,7 @@ export function SeeMoreModelsButtons({ setView }: { setView: (view: View) => voi
);
}
-export function ModelRadioList({ RenderItem, className = '' }: ModelRadioListProps) {
+export function ModelRadioList({ renderItem, className = '' }: ModelRadioListProps) {
const { recentModels } = useRecentModels();
const { currentModel } = useModel();
const handleModelSelection = useHandleModelSelection();
@@ -49,14 +53,13 @@ export function ModelRadioList({ RenderItem, className = '' }: ModelRadioListPro
return (
- {recentModels.map((model) => (
- handleRadioChange(model)}
- />
- ))}
+ {recentModels.map((model) =>
+ renderItem({
+ model,
+ isSelected: selectedModel === model.name,
+ onSelect: () => handleRadioChange(model),
+ })
+ )}
);
}
diff --git a/ui/desktop/src/components/settings/models/RecentModels.tsx b/ui/desktop/src/components/settings/models/RecentModels.tsx
index 4df115c6..ecfb7095 100644
--- a/ui/desktop/src/components/settings/models/RecentModels.tsx
+++ b/ui/desktop/src/components/settings/models/RecentModels.tsx
@@ -137,7 +137,7 @@ export function RecentModelsRadio({ setView }: { setView: (view: View) => void }
(
+ renderItem={({ model, isSelected, onSelect }) => (