feat(web): update Tabs component styles for improved UI consistency
Build, Test, and Push CFDM Docker Image / test (push) Successful in 5m33s
Build, Test, and Push CFDM Docker Image / build-and-push (push) Successful in 2m8s
Build, Test, and Push CFDM Docker Image / update-wiki (push) Successful in 7s
Build, Test, and Push CFDM Docker Image / create-release (push) Has been skipped

- Refactored TabsList and TabsTrigger components to enhance styling and responsiveness.
- Updated class names to ensure consistent appearance across different tabs, including adjustments for active states and background properties.
- Improved accessibility and visual feedback for active tab selections in the ResourcePage and AutomationLibraryGridView components.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-07-17 00:09:18 +07:00
co-authored by Cursor
parent d5de7f5e68
commit 777a263f26
3 changed files with 25 additions and 10 deletions
+12 -5
View File
@@ -81,19 +81,26 @@ Max 1 primary (`default`) на экран; остальные `outline` / `ghost
Эталон: [data-grid-filtering-2](https://reui.io/preview/base/data-grid-filtering-2). Эталон: [data-grid-filtering-2](https://reui.io/preview/base/data-grid-filtering-2).
```tsx ```tsx
<TabsList variant="line" className="h-auto! gap-5 overflow-visible"> <TabsList variant="line" className="h-auto gap-5 bg-transparent p-0">
<TabsTrigger <TabsTrigger
value="…" value="…"
className="data-active:text-foreground gap-2 px-0 pb-3 text-sm font-medium [&[data-active]>span:last-child]:bg-foreground [&[data-active]>span:last-child]:text-background" className={cn(
'h-auto flex-none gap-2 rounded-none bg-transparent px-0 pb-3 text-sm shadow-none',
'text-muted-foreground hover:text-foreground',
'data-active:bg-transparent data-active:text-foreground data-active:shadow-none',
'dark:data-active:border-transparent dark:data-active:bg-transparent',
'after:bottom-0 after:h-0.5',
)}
> >
<span>Label</span> <span>Label</span>
<span className="bg-muted text-muted-foreground … tabular-nums">{count}</span> <span className="bg-muted text-muted-foreground … tabular-nums rounded-md">{count}</span>
</TabsTrigger> </TabsTrigger>
</TabsList> </TabsList>
``` ```
- `h-auto!` снимает клип underline у `TabsList` (`h-8`) - Active = яркий текст + **белый underline** (`after:`), без фона/инвертированного badge
- Active count — контрастный chip (`bg-foreground` / `text-background`) - Count pill всегда `bg-muted` (как в preview)
- `h-auto` / `flex-none` / `data-active:bg-transparent` — снять клип `h-8` и `dark:bg-input/30` у примитива
- Active state — Base UI `data-active`, не Radix `data-[state=active]` - Active state — Base UI `data-active`, не Radix `data-[state=active]`
## Sidebar ## Sidebar
@@ -562,12 +562,12 @@ export function AutomationLibraryGridView() {
resetPagination() resetPagination()
}} }}
> >
<TabsList variant="line" className="gap-5"> <TabsList variant="line" className="h-auto gap-5 bg-transparent p-0">
{AUTOMATION_TABS.map((tab) => ( {AUTOMATION_TABS.map((tab) => (
<TabsTrigger <TabsTrigger
key={tab.value} key={tab.value}
value={tab.value} value={tab.value}
className="gap-2 px-0 pb-3 text-sm" className="text-muted-foreground hover:text-foreground data-active:bg-transparent data-active:text-foreground dark:data-active:border-transparent dark:data-active:bg-transparent h-auto flex-none gap-2 rounded-none bg-transparent px-0 pb-3 text-sm shadow-none after:bottom-0 after:h-0.5 data-active:shadow-none"
> >
<span>{tab.label}</span> <span>{tab.label}</span>
<span className="bg-muted text-muted-foreground inline-flex min-w-5 items-center justify-center rounded-md px-1.5 py-0.5 text-xs tabular-nums"> <span className="bg-muted text-muted-foreground inline-flex min-w-5 items-center justify-center rounded-md px-1.5 py-0.5 text-xs tabular-nums">
@@ -34,6 +34,7 @@ import { Separator } from '@cfdm/ui/components/separator'
import { Skeleton } from '@cfdm/ui/components/skeleton' import { Skeleton } from '@cfdm/ui/components/skeleton'
import { Tabs, TabsList, TabsTrigger } from '@cfdm/ui/components/tabs' import { Tabs, TabsList, TabsTrigger } from '@cfdm/ui/components/tabs'
import { Alert, AlertDescription, AlertTitle } from '@cfdm/ui/components/alert' import { Alert, AlertDescription, AlertTitle } from '@cfdm/ui/components/alert'
import { cn } from '@cfdm/ui/lib/utils'
import { EmptyState } from '@/components/empty-state' import { EmptyState } from '@/components/empty-state'
import { applyFiltersToData } from './filter-utils' import { applyFiltersToData } from './filter-utils'
import { debugAgentLog } from '@/lib/debug-agent-log' import { debugAgentLog } from '@/lib/debug-agent-log'
@@ -289,17 +290,24 @@ export function ResourcePage<T extends object>({
<FramePanel className="p-0 shadow-none!"> <FramePanel className="p-0 shadow-none!">
{tabs && tabs.length > 0 ? ( {tabs && tabs.length > 0 ? (
<> <>
<div className="overflow-visible px-(--frame-panel-header-px) pt-(--frame-panel-header-py)"> {/* Line tabs как @reui/data-grid-filtering-2: muted count + underline */}
<div className="px-(--frame-panel-header-px) pt-(--frame-panel-header-py)">
<Tabs value={activeTab} onValueChange={handleTabChange}> <Tabs value={activeTab} onValueChange={handleTabChange}>
<TabsList <TabsList
variant="line" variant="line"
className="h-auto! gap-5 overflow-visible" className="h-auto gap-5 bg-transparent p-0"
> >
{tabs.map((tab) => ( {tabs.map((tab) => (
<TabsTrigger <TabsTrigger
key={tab.id} key={tab.id}
value={tab.id} value={tab.id}
className="data-active:text-foreground gap-2 px-0 pb-3 text-sm font-medium [&[data-active]>span:last-child]:bg-foreground [&[data-active]>span:last-child]:text-background" className={cn(
'h-auto flex-none gap-2 rounded-none bg-transparent px-0 pb-3 text-sm shadow-none',
'text-muted-foreground hover:text-foreground',
'data-active:bg-transparent data-active:text-foreground data-active:shadow-none',
'dark:data-active:border-transparent dark:data-active:bg-transparent',
'after:bottom-0 after:h-0.5',
)}
> >
<span>{tab.label}</span> <span>{tab.label}</span>
<span className="bg-muted text-muted-foreground inline-flex min-w-5 items-center justify-center rounded-md px-1.5 py-0.5 text-xs tabular-nums"> <span className="bg-muted text-muted-foreground inline-flex min-w-5 items-center justify-center rounded-md px-1.5 py-0.5 text-xs tabular-nums">