mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-17 02:16:43 +00:00
fix(ui): prevent settings tab truncation with grid layout
- Use CSS grid (grid-cols-6) for even tab distribution - Shorten tab labels to fit narrow panels - Add scrollbar-thin utility for overflow scenarios
This commit is contained in:
@@ -319,3 +319,26 @@
|
|||||||
display: block !important;
|
display: block !important;
|
||||||
min-width: 0 !important;
|
min-width: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Thin scrollbar utility for horizontal tab overflow */
|
||||||
|
.scrollbar-thin {
|
||||||
|
scrollbar-width: thin;
|
||||||
|
scrollbar-color: var(--border) transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollbar-thin::-webkit-scrollbar {
|
||||||
|
height: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollbar-thin::-webkit-scrollbar-track {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollbar-thin::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--border);
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollbar-thin::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--muted-foreground);
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,34 +12,25 @@ interface TabNavigationProps {
|
|||||||
onTabChange: (tab: SettingsTab) => void;
|
onTabChange: (tab: SettingsTab) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tabs = [
|
||||||
|
{ value: 'websearch' as const, label: 'Web', icon: Globe },
|
||||||
|
{ value: 'globalenv' as const, label: 'Env', icon: Settings2 },
|
||||||
|
{ value: 'thinking' as const, label: 'Think', icon: Brain },
|
||||||
|
{ value: 'proxy' as const, label: 'Proxy', icon: Server },
|
||||||
|
{ value: 'auth' as const, label: 'Auth', icon: KeyRound },
|
||||||
|
{ value: 'backups' as const, label: 'Backup', icon: Archive },
|
||||||
|
] as const;
|
||||||
|
|
||||||
export function TabNavigation({ activeTab, onTabChange }: TabNavigationProps) {
|
export function TabNavigation({ activeTab, onTabChange }: TabNavigationProps) {
|
||||||
return (
|
return (
|
||||||
<Tabs value={activeTab} onValueChange={(v) => onTabChange(v as SettingsTab)}>
|
<Tabs value={activeTab} onValueChange={(v) => onTabChange(v as SettingsTab)}>
|
||||||
<TabsList className="w-full">
|
<TabsList className="grid w-full grid-cols-6">
|
||||||
<TabsTrigger value="websearch" className="flex-1 gap-2">
|
{tabs.map(({ value, label, icon: Icon }) => (
|
||||||
<Globe className="w-4 h-4" />
|
<TabsTrigger key={value} value={value} className="gap-1.5 px-1 text-xs">
|
||||||
WebSearch
|
<Icon className="h-3.5 w-3.5 shrink-0" />
|
||||||
</TabsTrigger>
|
<span className="truncate">{label}</span>
|
||||||
<TabsTrigger value="globalenv" className="flex-1 gap-2">
|
</TabsTrigger>
|
||||||
<Settings2 className="w-4 h-4" />
|
))}
|
||||||
Global Env
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger value="thinking" className="flex-1 gap-2">
|
|
||||||
<Brain className="w-4 h-4" />
|
|
||||||
Thinking
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger value="proxy" className="flex-1 gap-2">
|
|
||||||
<Server className="w-4 h-4" />
|
|
||||||
Proxy
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger value="auth" className="flex-1 gap-2">
|
|
||||||
<KeyRound className="w-4 h-4" />
|
|
||||||
Auth
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger value="backups" className="flex-1 gap-2">
|
|
||||||
<Archive className="w-4 h-4" />
|
|
||||||
Backups
|
|
||||||
</TabsTrigger>
|
|
||||||
</TabsList>
|
</TabsList>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user