Files
Felis/panel/src/components/InlineConfirm.tsx
T
Lemon-miaow bd49313e7e refactor(panel): 抽取 10 个公共组件,消除 ~150 处重复代码
新增组件:
- PageHeader: 统一页面头部(14 个页面)
- StatCard: 统一数值统计卡片(6 个页面)
- MessageLine: 统一错误/成功提示条(16 处)
- ConfirmFooter: 统一 Dialog 底部按钮(8 个文件)
- SearchInput: 统一搜索框(5 个页面)
- SubmissionStatusBadge: 统一提交状态徽章
- RoleBadge / UserStatusBadge: 统一用户角色/状态徽章
- BackLink: 统一返回导航链接(5 个页面)
- InlineConfirm: 统一二次确认交互(3 个 section)

修复:
- Pagination 图标尺寸统一 h-4 w-4
- 右上角按钮统一 size=sm gap-1.5
- StatCard 默认值恢复 text-2xl(24px)

States.tsx 新增 NotYours / NotRunning 通用状态组件

已有文件 -659 行,新组件 +353 行,净减 306 行
2026-07-05 01:15:03 +08:00

53 lines
1.0 KiB
TypeScript

import { Loader2 } from "lucide-react";
import { Button } from "@/components/ui/button";
interface Props {
open: boolean;
confirming: boolean;
onConfirm: () => void;
onCancel: () => void;
confirmLabel: string;
cancelLabel: string;
confirmVariant?: "destructive" | "default";
size?: "default" | "sm";
className?: string;
}
export function InlineConfirm({
open,
confirming,
onConfirm,
onCancel,
confirmLabel,
cancelLabel,
confirmVariant = "destructive",
size = "sm",
className,
}: Props) {
if (!open) return null;
return (
<div className={className}>
<Button
variant="ghost"
size={size}
onClick={onCancel}
disabled={confirming}
>
{cancelLabel}
</Button>
<Button
variant={confirmVariant}
size={size}
onClick={onConfirm}
disabled={confirming}
>
{confirming ? (
<Loader2 className="h-4 w-4 animate-spin" />
) : (
confirmLabel
)}
</Button>
</div>
);
}