跳到主要内容
Tennantite
EN
文档目录

对话框

基于 Base UI Dialog 的模态弹窗:半透明遮罩 + 暗面板。

安装

CLI 拷贝

$npx shadcn add @tennantite/dialog

npm 直装

$pnpm add @tennantite/ui

npm 方式安装编译产物;需要改造源码请用上方的 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

PropTypeDefault描述
variant"overlay" | "panel""panel"弹窗外观:panel 居中窗口面板 / overlay 全屏无底板(暂停、死亡界面)。仅 DialogPopup。

源码

packages/ui/src/primitives/dialog/index.tsx

npm 包保留源码目录,可直接复制改造。