z-uiDesign system
Componentes · z-ui

Modal

Modal controlado: quem usa guarda o estado em open e recebe o pedido de fechar em onClose (X, Esc, clique fora ou Cancelar). O rodapé sai de até três ações descritas como objetos. Para um diálogo com gatilho próprio e estado interno, use o ZDialog.

Formulário curto

primaryAction salva com loading. secondaryAction sem onClick fecha o modal.

Ação terciária

Com tertiaryAction o rodapé se divide: a terciária fica à esquerda e o par cancelar/confirmar à direita. danger pinta o botão de vermelho.

Tamanhos

sm, md e lg para formulários e confirmações. xl e full para tabelas e conteúdo largo; o corpo rola quando passa da altura da tela.

Sem fechar por fora

closeOnOverlay={false} ignora o clique fora e o Esc. hideClose tira o X; a saída fica só nas ações.

Uso

const [open, setOpen] = useState(false);

<Modal
  open={open}
  onClose={() => setOpen(false)}
  icon={PenLine}
  title="Editar signatário"
  description="As mudanças valem para os próximos envios."
  primaryAction={{ label: "Salvar", onClick: save, loading: saving }}
  secondaryAction={{ label: "Cancelar" }}
>
  {campos}
</Modal>

Props

ModalAction = { label, onClick?, disabled?, loading?, danger? }.

PropTipoPadrãoDescrição
openboolean—Estado aberto, sempre controlado.
onClose() => void—Pedido de fechar: X, Esc, clique fora ou secondaryAction sem onClick.
titleReactNode—Título, ligado por aria-labelledby.
descriptionReactNode—Subtítulo, ligado por aria-describedby.
iconLucideIcon—Ícone no quadro de 40px do cabeçalho.
size"sm" | "md" | "lg" | "xl" | "full""md"400, 560, 720, 1100px ou min(1400px, 92vw).
primaryActionModalAction—Botão sólido à direita.
secondaryActionModalAction—Botão de contorno. Sem onClick, chama onClose.
tertiaryActionModalAction—Botão ghost à esquerda; divide o rodapé.
footerReactNode—Rodapé próprio no lugar das ações.
hideClosebooleanfalseEsconde o X.
closeOnOverlaybooleantruefalse ignora clique fora e Esc.