Pular para o conteúdo

Side Panel

Painel lateral para inspeção, edição contextual e navegação sem abandonar a página atual.

Em cada stack

HTML e Astro
Classes itps-* do CSS Sinapse, com todas as variantes desta página.
React e Vue
Componentes padrão do shadcn (sheet, tabs) com o tema Sinapse: cores, fonte e raio vêm do tema, e as variantes itps-* desta página existem só no HTML. O Button é o Sinapse.

Instalação

O comando instala o Sheet e o Tabs da sua stack e o Button Sinapse com o tema Sinapse. Configure o registry uma vez por projeto em Comece por aqui.

terminal · React/Next

pnpm dlx shadcn@latest add @sinapse/side-panel

terminal · Vue 3/Nuxt 4

pnpm dlx shadcn-vue@latest add https://dsystem.sinapse.org.br/r/vue/side-panel.json

Sem shadcn, não há instalação por componente: use o CSS Sinapse e as classes da API copy-first desta página.

Uso

Use Side Panel quando a pessoa precisa consultar ou editar um contexto sem sair da página atual. Para uma decisão bloqueante, use Modal.

Em React/Next com shadcn/ui e Vue 3/Nuxt 4 com shadcn-vue, use Sheet com side="right". Para HTML ou wrappers finos, use itps-side-panel com os hooks data-sidepanel*.

Exemplos

Com metadados, ações e tabs

Use metadados no cabeçalho quando a informação ajuda a confirmar contexto. Em tabs, conecte cada itps-side-panel__tab a um role="tabpanel" real por aria-controls.

Estrutura

PeçaReact/Next e Vue 3/Nuxt 4HTML
RaizSheetitps-side-panel com data-sidepanel
GatilhoSheetTriggerbotão com data-sidepanel-open
SuperfícieSheetContent side="right"itps-side-panel__surface
CabeçalhoSheetHeader, SheetTitle, SheetDescriptionitps-side-panel__header, __title, __description
TabsTabs dentro do conteúdoitps-side-panel__tabs e itps-side-panel__tab

Comportamento

A aplicação controla data-state="open", alterna aria-hidden, trava o scroll da página enquanto aberto e devolve foco ao trigger ao fechar.

API copy-first

Classe/atributoUso
itps-side-panelContêiner raiz controlado por aria-hidden e data-state.
itps-side-panel__backdropCamada que fecha o painel ao clicar.
itps-side-panel__surfaceSuperfície lateral com role="dialog".
itps-side-panel__headerCabeçalho fixo com título, descrição, metadados e ações.
itps-side-panel__title, itps-side-panel__descriptionNome e contexto do painel, referenciados por aria-labelledby e aria-describedby.
itps-side-panel__metaMetadados curtos no cabeçalho.
itps-side-panel__actionAção curta de cabeçalho com aria-label.
itps-side-panel__closeBotão de fechar com aria-label="Fechar painel".
itps-side-panel__tabs, itps-side-panel__tabLista de tabs do painel.
itps-side-panel__bodyÁrea rolável do conteúdo.
data-sidepanel*Hooks usados pela aplicação para abrir, fechar, alternar tabs e devolver foco.

Acessibilidade

  • Use role="dialog" e aria-modal="true" na superfície.
  • Use aria-labelledby apontando para itps-side-panel__title.
  • Use aria-describedby quando houver descrição.
  • O botão de fechar precisa de aria-label="Fechar painel".
  • Em tabs, conecte cada tab a um role="tabpanel" real com aria-controls.
  • Feche com Esc, backdrop e botão explícito; devolva foco ao trigger.