Pular para o conteúdo

Tabs

Organize conteúdo em visualizações separadas onde apenas uma é visível por vez.

import { Tabs } from 'asterui'

Uso Básico

Abas simples com troca de conteúdo automática.

Content of Tab 1
import { Tabs, Typography } from 'asterui'

function App() {
  return (
      <Tabs>
        <Tabs.Panel tab="Tab 1" key="1">
          <Typography.Text>Content of Tab 1</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Tab 2" key="2">
          <Typography.Text>Content of Tab 2</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Tab 3" key="3">
          <Typography.Text>Content of Tab 3</Typography.Text>
        </Tabs.Panel>
      </Tabs>
    )
}

export default App

Página de Configurações

Página de configurações completa com formulários usando inputs com label flutuante.

import { Tabs, Space, Input, Button } from 'asterui'

function App() {
  return (
      <Tabs defaultActiveKey="account" variant="border">
        <Tabs.Panel tab="Account" key="account">
          <Space direction="vertical" size="md">
            <Input floatingLabel="Username" placeholder="john_doe" />
            <Input floatingLabel="Email" type="email" placeholder="john@example.com" />
            <Button color="primary">Save</Button>
          </Space>
        </Tabs.Panel>
        <Tabs.Panel tab="Security" key="security">
          <Space direction="vertical" size="md">
            <Input floatingLabel="Current Password" type="password" />
            <Input floatingLabel="New Password" type="password" />
            <Button color="primary">Update</Button>
          </Space>
        </Tabs.Panel>
      </Tabs>
    )
}

export default App

Variante Emoldurada

Abas com estilo de caixa fechada.

Home content
import { Tabs, Typography } from 'asterui'

function App() {
  return (
      <Tabs variant="box">
        <Tabs.Panel tab="Home" key="home">
          <Typography.Text>Home content</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Profile" key="profile">
          <Typography.Text>Profile content</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Settings" key="settings">
          <Typography.Text>Settings content</Typography.Text>
        </Tabs.Panel>
      </Tabs>
    )
}

export default App

Variante Elevada

Abas com aparência elevada 3D.

Overview content
import { Tabs, Typography } from 'asterui'

function App() {
  return (
      <Tabs variant="lift">
        <Tabs.Panel tab="Overview" key="1">
          <Typography.Text>Overview content</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Reports" key="2">
          <Typography.Text>Reports content</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Analytics" key="3">
          <Typography.Text>Analytics content</Typography.Text>
        </Tabs.Panel>
      </Tabs>
    )
}

export default App

Diferentes Tamanhos

Abas em vários tamanhos usando componentes Space e Typography.

Small
Small tabs content
Large
Large tabs content
import { Tabs, Space, Typography } from 'asterui'

function App() {
  return (
      <Space direction="vertical" size="md">
        <div>
          <Typography.Text strong>Small</Typography.Text>
          <Tabs size="sm">
            <Tabs.Panel tab="Tab 1" key="1"><Typography.Text>Small tabs content</Typography.Text></Tabs.Panel>
            <Tabs.Panel tab="Tab 2" key="2"><Typography.Text>Content 2</Typography.Text></Tabs.Panel>
          </Tabs>
        </div>
        <div>
          <Typography.Text strong>Large</Typography.Text>
          <Tabs size="lg">
            <Tabs.Panel tab="Tab 1" key="1"><Typography.Text>Large tabs content</Typography.Text></Tabs.Panel>
            <Tabs.Panel tab="Tab 2" key="2"><Typography.Text>Content 2</Typography.Text></Tabs.Panel>
          </Tabs>
        </div>
      </Space>
    )
}

export default App

Aba Desabilitada

Desabilite abas específicas.

Active content
import { Tabs, Typography } from 'asterui'

function App() {
  return (
      <Tabs>
        <Tabs.Panel tab="Active" key="1">
          <Typography.Text>Active content</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Disabled" key="2" disabled>
          <Typography.Text>Cannot see this</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Also Active" key="3">
          <Typography.Text>Active content</Typography.Text>
        </Tabs.Panel>
      </Tabs>
    )
}

export default App

Padrão Baseado em Dados

Use a prop items para abas baseadas em dados com ícones.

Home content
import { Tabs, notification, Typography } from 'asterui'
import { HomeIcon, UserIcon, Cog6ToothIcon } from '@aster-ui/icons'
import { useState } from 'react'

function App() {
  const [activeKey, setActiveKey] = useState('home')
  
  const items = [
    { key: 'home', label: 'Home', icon: <HomeIcon size="sm" />, children: <Typography.Text>Home content</Typography.Text> },
    { key: 'profile', label: 'Profile', icon: <UserIcon size="sm" />, children: <Typography.Text>Profile content</Typography.Text> },
    { key: 'settings', label: 'Settings', icon: <Cog6ToothIcon size="sm" />, children: <Typography.Text>Settings content</Typography.Text> },
  ]
  
  return (
      <Tabs
        items={items}
        activeKey={activeKey}
        onChange={(key) => {
          setActiveKey(key)
          notification.info({ message: `Switched to ${key}` })
        }}
        variant="border"
      />
    )
}

export default App

Posição Inferior

Abas posicionadas abaixo do conteúdo.

Content appears above the tabs
import { Tabs, Typography } from 'asterui'

function App() {
  return (
      <Tabs position="bottom" variant="border">
        <Tabs.Panel tab="Tab 1" key="1">
          <Typography.Text>Content appears above the tabs</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Tab 2" key="2">
          <Typography.Text>Second tab content</Typography.Text>
        </Tabs.Panel>
        <Tabs.Panel tab="Tab 3" key="3">
          <Typography.Text>Third tab content</Typography.Text>
        </Tabs.Panel>
      </Tabs>
    )
}

export default App
PropriedadeDescriçãoTipoPadrão
childrenPainéis de aba (padrão composto)React.ReactNode-
itemsItens de aba (padrão baseado em dados)TabItem[]-
activeKeyChave da aba ativa atual (controlado)string-
defaultActiveKeyChave da aba ativa padrão (não controlado)string-
onChangeCallback quando a aba muda(key: string) => void-
variantVariante de estilo visual'box' | 'border' | 'lift'-
sizeTamanho da aba'xs' | 'sm' | 'md' | 'lg' | 'xl'-
positionPosição da aba relativa ao conteúdo'top' | 'bottom''top'
classNameClasses CSS adicionaisstring-
PropriedadeDescriçãoTipoPadrão
keyIdentificador únicostring-
labelLabel do botão da abaReact.ReactNode-
childrenConteúdo do painel da abaReact.ReactNode-
disabledDesabilitar a ababooleanfalse
iconÍcone da abaReact.ReactNode-
PropriedadeDescriçãoTipoPadrão
keyIdentificador único para a aba (prop key do React)string-
tabLabel do botão da abaReact.ReactNode-
disabledDesabilitar a ababooleanfalse
iconÍcone da abaReact.ReactNode-
childrenConteúdo do painel da abaReact.ReactNode-
  • Usa roles ARIA adequados: tablist, tab e tabpanel
  • Navegação por teclado: Teclas de seta movem entre abas, tecla Tab move foco para o painel
  • Aba ativa é indicada com aria-selected="true"
  • Abas desabilitadas usam aria-disabled para comunicação adequada
  • Painéis de aba usam aria-labelledby para associar com sua aba
  • Use activeKey para abas controladas, defaultActiveKey para não controladas
  • Use a prop items para abas baseadas em dados, Tabs.Panel para padrão composto
  • Use position="bottom" para colocar abas abaixo do conteúdo