Files
codeg/src/components/chat/session-config-selector.tsx
xintaofei f0e0196d35 fix(frontend): remove explicit primary color from input bar controls
Drop text-primary/80 from expert dropdown icons and text-primary from
mode/config selector trigger buttons so they inherit the default
foreground color and transition naturally with themed hover states.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 14:06:04 +08:00

82 lines
2.7 KiB
TypeScript

"use client"
import { Fragment } from "react"
import { ChevronUp } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuLabel,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import { DropdownRadioItemContent } from "@/components/chat/dropdown-radio-item-content"
import type { SessionConfigOptionInfo } from "@/lib/types"
interface SessionConfigSelectorProps {
option: SessionConfigOptionInfo
onSelect: (configId: string, valueId: string) => void
}
export function SessionConfigSelector({
option,
onSelect,
}: SessionConfigSelectorProps) {
if (option.kind.type !== "select") return null
const selected = option.kind.options.find(
(item) => item.value === option.kind.current_value
)
const label = selected?.name ?? option.kind.current_value
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="outline"
size="xs"
className="gap-1 min-w-0 bg-transparent"
title={option.description ?? option.name}
>
<span className="truncate">{label}</span>
<ChevronUp className="size-3 shrink-0" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side="top" align="start" className="min-w-72">
<DropdownMenuRadioGroup
value={option.kind.current_value}
onValueChange={(value) => onSelect(option.id, value)}
>
{option.kind.groups.length > 0
? option.kind.groups.map((group, index) => (
<Fragment key={group.group}>
{index > 0 && <DropdownMenuSeparator />}
<DropdownMenuLabel>{group.name}</DropdownMenuLabel>
{group.options.map((item) => (
<DropdownMenuRadioItem
key={`${group.group}-${item.value}`}
value={item.value}
>
<DropdownRadioItemContent
label={item.name}
description={item.description}
/>
</DropdownMenuRadioItem>
))}
</Fragment>
))
: option.kind.options.map((item) => (
<DropdownMenuRadioItem key={item.value} value={item.value}>
<DropdownRadioItemContent
label={item.name}
description={item.description}
/>
</DropdownMenuRadioItem>
))}
</DropdownMenuRadioGroup>
</DropdownMenuContent>
</DropdownMenu>
)
}