Tabs
Описание
Tabs полезны для переключения между представлениями отдельных и связанных групп информации.
Подробнее об использовании элемента читайте на официальном сайте
Примеры
Компонент
Компонент можно сохранить в src/shared/ui/Tabs.tsx. Обратите внимание на необходимые зависимости: Title и UIStateLayer.
Так же данный компонент использует @radix-ui/react-tabs компонент.
yarn add @radix-ui/react-tabs
"use client"import React from "react"import * as RadixTabs from "@radix-ui/react-tabs"import Title from "@/shared/typography/Title"import UIStateLayer from "@/shared/ui/UIStateLayer"import { cn } from "@/lib/cn"const Tabs = RadixTabs.Rootconst TabsList = React.forwardRef<React.ElementRef<typeof RadixTabs.List>,React.ComponentPropsWithoutRef<typeof RadixTabs.List>>(({ className, ...props }, forwardedRef) => (<RadixTabs.Listref={forwardedRef}className={cn("h-[48px] w-full flex items-center justify-between bg-surface",className)}{...props}/>))TabsList.displayName = "TabsList"const TabsTrigger = React.forwardRef<React.ElementRef<typeof RadixTabs.Trigger>,React.ComponentPropsWithoutRef<typeof RadixTabs.Trigger>>(({ className, children, ...props }, forwardedRef) => (<RadixTabs.TriggerclassName={cn("flex-1 group data-[state=active]:border-b-2 data-[state=active]:border-primary data-[state=active]:text-primary text-onSurfaceVariant border-b border-surfaceVariant transition-colors duration-short4 ease-standard",className)}{...props}ref={forwardedRef}><UIStateLayer className="p-2 group-data-[state=active]:bg-primary bg-onSurface group-data-[state=active]:bg-opacity-0 group-data-[state=active]:group-hover:bg-opacity-[0.08] group-data-[state=active]:group-active:bg-opacity-[0.12]"><Title size={"small"}>{children}</Title></UIStateLayer></RadixTabs.Trigger>))TabsTrigger.displayName = "TabsTrigger"const TabsContent = React.forwardRef<React.ElementRef<typeof RadixTabs.Content>,React.ComponentPropsWithoutRef<typeof RadixTabs.Content>>(({ className, ...props }, forwardedRef) => (<RadixTabs.ContentclassName={cn("px-3 py-2 w-full", className)}{...props}ref={forwardedRef}/>))TabsContent.displayName = "TabsContent"export { Tabs, TabsList, TabsTrigger, TabsContent }
Использование
Данный файл экспортирует 4 компонента: Tabs - компонент-обёртка, содержащая весь стейт компонента, TabsList - компонент-список, в котором располагаются кнопки, TabsTrigger - компонент-кнопка, которая служит для переключения самих табов, TabsContent - компонент, содержащий контент, относящийся к определённому табу.
Ниже - код для примера в начале страницы.
<Tabs className="w-[500px]" defaultValue="x"><TabsList><TabsTrigger value="x">First</TabsTrigger><TabsTrigger value="y">Second</TabsTrigger><TabsTrigger value="z">Third</TabsTrigger></TabsList><TabsContent value="x">First content</TabsContent><TabsContent value="y">Second content</TabsContent><TabsContent value="z">Third content</TabsContent></Tabs>