文档目录
对话框
基于 Base UI Dialog 的模态弹窗:半透明遮罩 + 暗面板。
"use client";
import { useState } from "react";
import { Button } from "../button/index";
import { Dialog, DialogClose, DialogDescription, DialogPopup, DialogTitle, DialogTrigger } from "./index";
/**
* Dialog 预览用例:确认框
*/
export function DialogDemo() {
const [open, setOpen] = useState(false);
return (
<Dialog onOpenChange={setOpen} open={open}>
<DialogTrigger
render={
<Button>保存并退出到标题界面</Button>
}
/>
<DialogPopup>
<DialogTitle>确认退出?</DialogTitle>
<DialogDescription className="mt-4">
未保存的进度将会丢失。
</DialogDescription>
<div className="mt-12 flex justify-end gap-8">
<DialogClose render={<Button variant="ghost" />}>取消</DialogClose>
<DialogClose render={<Button variant="success" />}>退出</DialogClose>
</div>
</DialogPopup>
</Dialog>
);
}
安装
CLI 拷贝
$npx shadcn add @tennantite/dialognpm 直装
$pnpm add @tennantite/uinpm 方式安装编译产物;需要改造源码请用上方的 CLI 拷贝安装。
用法
npm 导入
import { Dialog, DialogBackdrop, DialogClose, DialogDescription, DialogPopup, DialogTitle, DialogTrigger } from "@tennantite/ui";CLI 拷贝导入
import { Dialog, DialogBackdrop, DialogClose, DialogDescription, DialogPopup, DialogTitle, DialogTrigger } from "@/components/tennantite/dialog";"use client";
import { useState } from "react";
import { Button } from "../button/index";
import { Dialog, DialogClose, DialogDescription, DialogPopup, DialogTitle, DialogTrigger } from "./index";
/**
* Dialog 预览用例:确认框
*/
export function DialogDemo() {
const [open, setOpen] = useState(false);
return (
<Dialog onOpenChange={setOpen} open={open}>
<DialogTrigger
render={
<Button>保存并退出到标题界面</Button>
}
/>
<DialogPopup>
<DialogTitle>确认退出?</DialogTitle>
<DialogDescription className="mt-4">
未保存的进度将会丢失。
</DialogDescription>
<div className="mt-12 flex justify-end gap-8">
<DialogClose render={<Button variant="ghost" />}>取消</DialogClose>
<DialogClose render={<Button variant="success" />}>退出</DialogClose>
</div>
</DialogPopup>
</Dialog>
);
}API Reference
| Prop | Type | Default | 描述 |
|---|---|---|---|
| variant | "overlay" | "panel" | "panel" | 弹窗外观:panel 居中窗口面板 / overlay 全屏无底板(暂停、死亡界面)。仅 DialogPopup。 |
源码
packages/ui/src/primitives/dialog/index.tsxnpm 包保留源码目录,可直接复制改造。