mad-dropdown
Menu suspenso com items, separators, labels.
Menu suspenso disparado por um botao/elemento trigger. Reutiliza o padrao de navegacao dos demais componentes MAD (navigate, mad:click, open-drawer, open-modal).
Props do <mad-dropdown>
| Prop | Tipo | Default | Descricao |
|---|---|---|---|
| trigger | string (HTML) | '' | HTML do elemento clicavel que abre o menu |
| align | string | 'start' | start (alinha a esquerda) ou end (alinha a direita) |
| class | string | '' | Classes CSS extras |
O conteudo (slot) sao os itens do menu (<mad-dropdown-item>, <mad-dropdown-label>, <mad-dropdown-separator>).
Como trigger recebe HTML, pre-computar no @php quando for mais que uma string simples:
@php
$trigger = '<mad-btn variant="ghost" icon="more-horizontal">Acoes</mad-btn>';
@endphp
<mad-dropdown :trigger="$trigger" align="end">
...
</mad-dropdown>
Props do <mad-dropdown-item>
| Prop | Tipo | Default | Descricao |
|---|---|---|---|
| icon | string | '' | Icone Lucide (a esquerda do label) |
| variant | string | '' | danger |
| href | string | '' | Link externo (renderiza como <a>) |
| disabled | bool | false | |
| class | string | '' | Classes CSS extras |
Suporta as mesmas diretivas de navegacao/acao do <mad-btn>: mad:click, navigate, open-drawer, open-modal.
Sub-componentes
| Tag | Descricao |
|---|---|
<mad-dropdown-item> |
Item de acao |
<mad-dropdown-separator /> |
Divisor visual |
<mad-dropdown-label> |
Titulo/heading de grupo |
Uso basico
@php $trigger = '<mad-btn variant="ghost" icon="more-horizontal">Acoes</mad-btn>'; @endphp
<mad-dropdown :trigger="$trigger" align="end">
<mad-dropdown-label>Edicao</mad-dropdown-label>
<mad-dropdown-item icon="pencil">Editar</mad-dropdown-item>
<mad-dropdown-item icon="copy">Duplicar</mad-dropdown-item>
<mad-dropdown-separator />
<mad-dropdown-item icon="trash-2" variant="danger">Excluir</mad-dropdown-item>
</mad-dropdown>
Com mad:click (acao no servidor)
<mad-dropdown :trigger="$trigger">
<mad-dropdown-item icon="check-circle" mad:click="onAprovar">Aprovar</mad-dropdown-item>
<mad-dropdown-item icon="download" mad:click="onExportar">Exportar</mad-dropdown-item>
</mad-dropdown>
Com navegacao (navigate)
<mad-dropdown :trigger="$trigger">
<mad-dropdown-item icon="pencil" navigate="ProdutoForm">Editar</mad-dropdown-item>
<mad-dropdown-item icon="eye" navigate="ProdutoDetalhe">Visualizar</mad-dropdown-item>
</mad-dropdown>
Com open-drawer / open-modal
<mad-dropdown :trigger="$trigger">
<mad-dropdown-item icon="sliders-horizontal" open-drawer="filtro-avancado">Filtro Avancado</mad-dropdown-item>
<mad-dropdown-item icon="info" open-modal="detalhes">Detalhes</mad-dropdown-item>
</mad-dropdown>
Com link externo
<mad-dropdown :trigger="$trigger">
<mad-dropdown-item icon="external-link" href="https://docs.empresa.com">Documentacao</mad-dropdown-item>
</mad-dropdown>
Com grupos/labels
<mad-dropdown :trigger="$trigger" align="end">
<mad-dropdown-label>Acoes</mad-dropdown-label>
<mad-dropdown-item icon="pencil" mad:click="onEditar">Editar</mad-dropdown-item>
<mad-dropdown-item icon="copy" mad:click="onDuplicar">Duplicar</mad-dropdown-item>
<mad-dropdown-separator />
<mad-dropdown-label>Perigo</mad-dropdown-label>
<mad-dropdown-item icon="archive" variant="danger" mad:click="onArquivar">Arquivar</mad-dropdown-item>
<mad-dropdown-item icon="trash-2" variant="danger" mad:click="onExcluir">Excluir</mad-dropdown-item>
</mad-dropdown>
Item desabilitado
<mad-dropdown-item icon="lock" disabled>Bloqueado</mad-dropdown-item>
Alinhamento
| align | Comportamento |
|---|---|
start |
Menu abre alinhado a borda esquerda do trigger (padrao) |
end |
Menu abre alinhado a borda direita do trigger — usar quando o trigger esta proximo da borda direita da tela |
NUNCA fazer
{{-- ERRADO: trigger como filho do dropdown --}}
<mad-dropdown>
<mad-btn icon="more-horizontal">Acoes</mad-btn>
<mad-dropdown-item ...>Editar</mad-dropdown-item>
</mad-dropdown>
{{-- CERTO: trigger e prop HTML --}}
@php $trigger = '<mad-btn icon="more-horizontal">Acoes</mad-btn>'; @endphp
<mad-dropdown :trigger="$trigger">
<mad-dropdown-item ...>Editar</mad-dropdown-item>
</mad-dropdown>
{{-- ERRADO: attrs com data-mad-click manual --}}
<mad-dropdown-item attrs='data-mad-click="onEditar"'>Editar</mad-dropdown-item>
{{-- CERTO: mad:click direto --}}
<mad-dropdown-item mad:click="onEditar">Editar</mad-dropdown-item>
{{-- ERRADO: href para engine.php --}}
<mad-dropdown-item href="engine.php?class=ProdutoForm&method=show">Editar</mad-dropdown-item>
{{-- CERTO: usar navigate --}}
<mad-dropdown-item navigate="ProdutoForm">Editar</mad-dropdown-item>
{{-- ERRADO: montar dropdown manualmente com Alpine --}}
<div x-data="{ open: false }">
<button @click="open = !open">Acoes</button>
<div class="mad-dropdown-menu" x-show="open">...</div>
</div>
{{-- CERTO --}}
<mad-dropdown :trigger="$trigger">...</mad-dropdown>