componentes / sobreposição
Dialog
Janela modal com foco controlado e devolvido ao fechar.
dialog-default.tsx
import { Button } from "@/components/ui/button";
import {
Dialog,
DialogClose,
DialogDescription,
DialogFooter,
DialogHeader,
DialogPopup,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog";
export default function DialogDefault() {
return (
<Dialog>
<DialogTrigger render={<Button variant="outline" />}>delete project</DialogTrigger>
<DialogPopup closeLabel="Close">
<DialogHeader>
<DialogTitle>delete project?</DialogTitle>
<DialogDescription>this removes the project and all its files. this cannot be undone.</DialogDescription>
</DialogHeader>
<DialogFooter>
<DialogClose render={<Button variant="ghost" />}>cancel</DialogClose>
<DialogClose render={<Button variant="destructive" />}>delete</DialogClose>
</DialogFooter>
</DialogPopup>
</Dialog>
);
}Instalação
$ npx shadcn@latest add https://cd-ui.vercel.app/r/dialog.jsonprimeira vez? configure o components.json e o tema antes: veja instalação.
Uso
import { Dialog, DialogPopup, DialogTitle, DialogTrigger } from "@/components/ui/dialog"
<Dialog>
<DialogTrigger render={<Button />}>open</DialogTrigger>
<DialogPopup>
<DialogTitle>title</DialogTitle>
</DialogPopup>
</Dialog>API
Dialog
Base UI · Dialog.RootRaiz.
| prop | tipo | padrão |
|---|---|---|
open · defaultOpen · onOpenChangeControle de abertura. | boolean / (open) => void | - |
DialogTrigger · DialogClose
Base UI · Dialog.Trigger · Dialog.CloseAbrem e fecham. Use render pra usar seu Button.
| prop | tipo | padrão |
|---|---|---|
renderTroca o elemento renderizado mantendo comportamento e estilo (ex.: virar | ReactElement | (props) => ReactElement | - |
DialogPopup
Base UI · Dialog.PopupJanela centralizada com fundo escurecido. Entra em escala (160ms), sai mais rápido (120ms).
| prop | tipo | padrão |
|---|---|---|
showCloseMostra o X no canto. | boolean | true |
closeLabelRótulo do X para leitor de tela. | string | "Close" |
positionOnde a janela fica: no centro, ou ancorada perto do topo (paletas de comando). | "center" | "top" | "center" |
instantAbre e fecha sem animação. Use em diálogos abertos por atalho de teclado. | boolean | false |
classNameClasses extras, mescladas com | string | - |
DialogHeader · DialogTitle · DialogDescription · DialogFooter
Estrutura do conteúdo. Título e descrição são anunciados ao abrir.
| prop | tipo | padrão |
|---|---|---|
classNameClasses extras, mescladas com | string | - |
Teclado
| tecla | ação |
|---|---|
| Esc | Fecha e devolve o foco ao gatilho. |
| Tab | Circula só dentro da janela. |