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 }) => (