JS Component

Panel / Offcanvas SWPanel

Painel deslizante de qualquer lado com overlay - ideal para filtros, carrinhos, detalhes e drawers.

1. Demo ao Vivo

Painel Lateral

Este é um painel deslizante da direita. Ideal para filtros, carrinho, configurações e detalhes.

FILTROS

Painel Inferior

Painel deslizante de baixo - ideal para confirmações mobile, filtros e menus de ação.

Painel Esquerda

Painel deslizante da esquerda. Mesmo comportamento da sidebar, mas sem persistência.

Painel Superior

Painel deslizante do topo - ideal para notificações, alertas e banners de ação.

2. Estrutura HTML

3. Posições

4. Tamanhos

Precisa de um valor exato em vez dos nomes prontos? Use --sw-panel-sz direto no style — aceita px, rem ou %.

5. Tamanho por Porcentagem & Velocidade

Defina --sw-panel-sz com qualquer porcentagem da tela, e --sw-panel-spd pra controlar a velocidade da animação de abrir/fechar (padrão 0.35s).

20%

style="--sw-panel-sz:20%"

60%

style="--sw-panel-sz:60%"

80%

style="--sw-panel-sz:80%"

Lento

style="--sw-panel-spd:1.2s"

📱 Responsivo

Abaixo de 640px de largura de tela, o painel ignora --sw-panel-sz e as classes .is-sm/.is-lg — abre sempre em tela cheia, pra não ficar apertado no celular.

🌗 Dia & Noite

O painel usa os mesmos tokens de tema do resto do framework (--sw-bg, --sw-txt-mut, --sw-bor-glow) — troque o tema no botão do canto que ele se adapta automaticamente, sem nenhuma configuração extra.

6. Abrir com conteúdo via AJAX

Um botão com sw-ajax (a URL/arquivo a buscar) e sw-ajax-target="panel" busca o conteúdo e o coloca dentro de um painel, que é criado automaticamente se você não apontar um já existente via sw-panel="#id" — depois disso o painel abre sozinho. Segue a mesma restrição de mesma origem do resto do sw-ajax.

7. API JavaScript

const panel = document.querySelector('#meu-panel');

// Abrir / fechar
SW.Panel.show('#meu-panel');
SW.Panel.hide('#meu-panel');

// Eventos
panel.addEventListener('sw:panel:open',  () => console.log('Painel aberto'));
panel.addEventListener('sw:panel:close', () => console.log('Painel fechado'));

Quick Reference

Atributo / Classe Elemento Descrição
.sw-panel div Container/caixa deslizante do painel — já é o elemento posicionado, sem wrapper.
sw-panel-open="#id" button Botão de abertura por seletor.
sw-panel-close button Atributo — qualquer botão dentro do painel com isso fecha ao clicar.
.pnl-hdr div Cabeçalho do painel (opcional).
.pnl-bdy div Área de conteúdo com scroll — cresce pra preencher o espaço entre header e footer.
.pnl-ftr div Rodapé do painel (opcional).
.pnl-cls button Estilo do botão X — combine com sw-panel-close pra funcionar.
.is-lft / .is-bot / .is-top .sw-panel Posição do painel (padrão: direita).
.is-sm / .is-lg / .is-fl .sw-panel Tamanhos prontos: pequeno (240px) / grande (480px) / full (100%).
--sw-panel-sz .sw-panel (style) Largura (ou altura, em .is-bot/.is-top) exata — aceita px, rem ou %. Abaixo de 640px de tela, é ignorado (vira tela cheia).
--sw-panel-spd .sw-panel (style) Duração da animação de abrir/fechar (padrão 0.35s).
.is-active .sw-panel Estado aberto — adicionado automaticamente pelo JS.
sw:panel:open / sw:panel:close evento Eventos customizados disparados pelo componente.
Clique fora / Esc Fecha o painel automaticamente.
sw-ajax-target="panel" button/link com sw-ajax Busca conteúdo via AJAX e abre num painel (cria um automaticamente se sw-panel="#id" não for informado).