Sidebar
StableO painel lateral de uma aplicação: um provider que guarda o estado aberto, um painel que é coluna fixa em tela larga e Sheet abaixo de md, e as partes do menu que vão dentro dele. Recolhe para fora da borda ou para uma coluna de ícones, e o estado desktop fica lembrado em cookie para o servidor renderizar onde a pessoa deixou. Compõe Button, Input, Separator, Sheet, Skeleton e Tooltip do Up Web DS; o hook useIsMobile é um support module (shadcn/use-mobile) que viaja com o item em vez de virar item do catálogo.
Instalação
npx up-web-ds add sidebarGera sidebar para a biblioteca de ícones do projeto (components.json → iconLibrary).
Preview
Basic
Default
Collapsible Icon
Floating
Inset
Right
Loading
Usage
Props
Composition
O provider envolve a página inteira: o painel e o SidebarInset são irmãos, e o gatilho pode estar em qualquer lugar dentro do provider.
Metadata
Notas de acessibilidade
Teclado verificado por teste e em navegador: o SidebarTrigger entra na sequência de tabulação, alterna com Enter e Espaço e mostra anel de foco, as entradas do menu são links ou botões reais com foco visível, e Ctrl ou Cmd + B alterna o painel sem roubar a letra B sozinha. O SidebarRail fica fora da sequência de tabulação de propósito: é uma área de clique na borda para ponteiro, e o caminho de teclado é o gatilho. Leitor de tela verificado por teste: gatilho e rail são nomeados por texto (Alternar barra lateral) e não pelo glifo, a entrada da página atual carrega data-active, SidebarInset é um landmark main por padrão, e abaixo de md o painel é um Sheet modal nomeado Barra lateral, que prende o foco, fecha com Escape e devolve o foco ao gatilho. Recolhido em ícones, cada entrada mantém o nome e reexibe o rótulo como tooltip. Touch verificado em navegador com emulação de toque em viewport de 375px: o gatilho abre o Sheet de 18rem deixando uma faixa da página visível, e todos os alvos medem acima do mínimo de 24x24. Reduced motion verificado em navegador com prefers-reduced-motion: reduce — recolher muda a largura e a posição do painel, e esse destino é o estado, então ele nunca é condicionado: sai só o tween (motion-reduce:transition-none no gap, no container, no rail, no rótulo do grupo e nos botões do menu), e o painel chega recolhido no primeiro frame. Nada ali espera transitionend; o Sheet usado no mobile mantém a política dele. Varredura axe WCAG 2.2 AA limpa em light e dark, desktop e mobile.
Classificação
- Layer
- Component
- Domínio
- Application
- Categoria
- navigation
- Status
- Stable
Origem e distribuição
- Fonte
- shadcn registry / sidebar
- Licença
- MIT
- Distribuição
- Interna
Acessibilidade
- Teclado: revisado
- Leitor de tela: revisado
- Touch: revisado
- Reduced motion: revisado
Dependências
- Pacotes
- @base-ui/react, class-variance-authority
- Ícones
- sidebar
- Usado por
- Nenhum ainda