Capítulo 44 de 108
Janela sobreposta à janela principal (ou outro dialog), tornando o conteúdo por trás inerte. Uso padrão pra formulários modais e confirmações. Built on Base UI Dialog.
render={<Button variant="outline" />} para customizar o elemento que dispara o dialog (padrão Base UI de "render prop").showCloseButton={false} remove o X padrão do canto superior direito.DialogClose + botão de submit.render={<Button ... />} pra reaproveitar estilos de Button.<Dialog>
<DialogTrigger render={<Button variant="outline" />}>Open</DialogTrigger>
<DialogContent className="sm:max-w-sm">
<DialogHeader>
<DialogTitle>Edit profile</DialogTitle>
<DialogDescription>Make changes to your profile here.</DialogDescription>
</DialogHeader>
<DialogFooter>
<DialogClose render={<Button variant="outline" />}>Cancel</DialogClose>
<Button type="submit">Save changes</Button>
</DialogFooter>
</DialogContent>
</Dialog>
render prop pra estilizar trigger/close como Button.<DialogContent>
<DialogHeader>...</DialogHeader>
<div className="-mx-4 no-scrollbar max-h-[50vh] overflow-y-auto px-4">
{/* conteúdo longo */}
</div>
<DialogFooter>...</DialogFooter>
</DialogContent>
max-h-[50vh] overflow-y-auto numa div interna em vez de rolar o DialogContent inteiro.Composição:
Dialog
├── DialogTrigger
└── DialogContent
├── DialogHeader
│ ├── DialogTitle
│ └── DialogDescription
└── DialogFooter
DialogDescription: quebra acessibilidade (o Base UI espera título+descrição associados via aria).DialogContent inteiro para conteúdo longo: perde o header fixo; usar uma div interna com overflow-y-auto e max-h.render={<Button .../>} é o padrão do Base UI pra "vestir" trigger/close com outro componente sem quebrar a semântica do elemento original.showCloseButton={false} em DialogContent remove o X, útil quando o fechamento é só via DialogClose customizado no footer.div com max-h-[50vh] overflow-y-auto, não o DialogContent todo.npm install @base-ui/react.Field/FieldGroup (de @/components/ui/field) é o padrão recomendado para formulários dentro do dialog.DialogContent.