Skip to main content

TopBar

O TopBar é um componente de navegação superior que fornece contexto da página atual, ações de navegação e controles adicionais. É ideal para aplicações móveis e web, oferecendo uma experiência de navegação consistente e intuitiva.

Importação

import { TopBar } from '@useblu/ocean-react';

Importação específica (recomendado para tree-shaking)

import { TopBar } from '@useblu/ocean-react/TopBar';

Importação de tipos TypeScript

import type { TopBarProps } from '@useblu/ocean-react';

// Uso em componente customizado
const MyTopBar: React.FC<TopBarProps> = (props) => {
return <TopBar {...props} />;
};

Playground Interativo

Explore o componente TopBar no playground interativo do Storybook:

Documentação Completa

Para documentação técnica detalhada, exemplos de uso e API completa, consulte o Storybook do TopBar.

No Storybook você encontrará:

  • Controles interativos para testar todas as props
  • API gerada automaticamente com tipagem completa
  • Exemplos visuais de todas as variantes
  • Playground para experimentação rápida

Uso básico

<TopBar
title="Título da Página"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Menu')}
/>

Variantes

O TopBar oferece duas variantes principais para diferentes contextos de uso:

Default (padrão)

A variante padrão com layout horizontal simples:

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Menu')}
/>

Extended

A variante estendida com layout mais espaçoso e ações agrupadas:

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
leftIcon={<ArrowLeftOutline />}
rightIcon={<SettingsOutline />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Configurações')}
variants="extended"
/>

Configurações de ações

Apenas ação direita

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
rightIcon={<DotsVertical />}
onRightAction={() => console.log('Menu')}
/>

Apenas ação esquerda

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
leftIcon={<ArrowLeftOutline />}
onLeftAction={() => console.log('Voltar')}
/>

Sem ações

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
/>

Temas de cor

Tema padrão (off)

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Menu')}
color="off"
/>

Tema claro (on)

<div>
<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Menu')}
color="on"
/>
</div>

Scroll Bar

O TopBar pode exibir uma sombra quando há scroll na página:

<TopBar
title="Título da Página"
description="Descrição detalhada da página atual"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Menu')}
scrollBar
/>

Uso em aplicações reais

function PageNavigation() {
const [currentPage, setCurrentPage] = React.useState('home');

const pages = {
home: { title: 'Início', description: 'Página principal' },
profile: { title: 'Perfil', description: 'Suas informações pessoais' },
settings: {
title: 'Configurações',
description: 'Preferências do sistema',
},
};

const currentPageInfo = pages[currentPage as keyof typeof pages];

return (
<div>
<TopBar
title={currentPageInfo.title}
description={currentPageInfo.description}
leftIcon={<ArrowLeftOutline />}
rightIcon={<SettingsOutline />}
onLeftAction={() => setCurrentPage('home')}
onRightAction={() => setCurrentPage('settings')}
scrollBar
/>
<div>
<p>Página atual: {currentPage}</p>
<button onClick={() => setCurrentPage('profile')}>
Ir para Perfil
</button>
</div>
</div>
);
}

<PageNavigation />;

Aplicação móvel

function MobileApp() {
return (
<div>
<TopBar
title="Meus Pedidos"
description="Acompanhe suas compras"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Menu')}
scrollBar
/>
<div>
<p>Conteúdo da página...</p>
</div>
</div>
);
}

<MobileApp />;

API

Props

PropTipoPadrãoDescrição
titlestring-Título principal da barra superior
descriptionstring-Descrição opcional abaixo do título
variants'default' | 'extended''default'Variante visual do TopBar
color'off' | 'on''off'Tema de cor do TopBar
scrollBarbooleanfalseAdiciona sombra quando há scroll
leftIconReactElement-Ícone do lado esquerdo
rightIconReactElement-Ícone do lado direito
onLeftAction() => void-Função chamada ao clicar no ícone esquerdo
onRightAction() => void-Função chamada ao clicar no ícone direito

Comportamento

  • Layout responsivo: Adapta-se a diferentes tamanhos de tela
  • Navegação por teclado: Suporte completo a navegação por teclado
  • Acessibilidade: Atributos ARIA apropriados
  • Scroll detection: Detecta automaticamente o scroll da página

Acessibilidade

  • ✅ Suporte completo a navegação por teclado
  • ✅ Estados de foco visíveis
  • ✅ Atributos ARIA apropriados
  • ✅ Suporte a screen readers
  • ✅ Contraste adequado em todos os estados
TeclaFunção
TabMove o foco entre os elementos
Enter / SpaceAtiva o elemento em foco
EscapeVolta para a página anterior

Boas práticas para acessibilidade

  • Use títulos descritivos: O título deve indicar claramente a página atual
  • Forneça descrições úteis: Use descrições para contexto adicional
  • Use ícones semânticos: Escolha ícones que representem claramente a ação
  • Mantenha consistência: Use o mesmo padrão de navegação em toda a aplicação

CSS

Classes globais

Classe CSSDescrição
.ods-topbarClasse base do TopBar
.ods-topbar-extendVariante estendida do TopBar
.ods-topbar-titleContainer do título e descrição
.ods-topbar-leftContainer da ação esquerda
.ods-topbar-rightContainer da ação direita
.ods-topbar-actionsContainer das ações (variante extended)
.ods-topbar-scroll-barSombra quando há scroll
.ods-topbar-lightTema claro
.ods-topbar-defaultTema padrão

Melhores práticas

✅ Faça

  • Use títulos claros e concisos que identifiquem a página
  • Forneça descrições úteis para contexto adicional
  • Use ícones que representem claramente as ações
  • Mantenha consistência na navegação entre páginas
  • Use a variante extended para páginas com mais contexto

❌ Não faça

  • Não use títulos muito longos ou vagos
  • Não omita ações de navegação quando apropriado
  • Não use ícones genéricos ou confusos
  • Não ignore a acessibilidade e navegação por teclado
  • Não use TopBar para navegação principal complexa

Casos de uso comuns

Aplicações móveis

function MobileNavigation() {
return (
<div>
<TopBar
title="Detalhes do Produto"
description="iPhone 15 Pro - 256GB"
leftIcon={<ArrowLeftOutline />}
rightIcon={<DotsVertical />}
onLeftAction={() => console.log('Voltar')}
onRightAction={() => console.log('Compartilhar')}
scrollBar
/>
<div>
<p>Detalhes do produto...</p>
</div>
</div>
);
}

<MobileNavigation />;

Dashboards

function DashboardHeader() {
return (
<TopBar
title="Dashboard"
description="Visão geral dos seus dados"
rightIcon={<SettingsOutline />}
onRightAction={() => console.log('Configurações')}
variants="extended"
scrollBar
/>
);
}

<DashboardHeader />;

Visão geral das variantes

Veja todas as variantes do TopBar em ação:

Com descrição

Variante estendida