refactor: 提取 Button 组件,统一按钮变体、尺寸和加载状态

新增 Button.tsx 支持 5 种变体(primary/secondary/danger/ghost/purple)、
3 种尺寸(sm/md/lg)、pill/rounded 形状及内置 loading 状态,
替换 8 个文件中 16 处重复的按钮样板代码。
This commit is contained in:
2026-02-26 18:39:14 +08:00
parent 19edcaeeb5
commit 455b9e04d8
9 changed files with 178 additions and 115 deletions
+12 -8
View File
@@ -6,6 +6,7 @@ import { X, Copy, Share2, QrCode } from "lucide-react";
import type { SceneType } from "@/types";
import { getSceneConfig } from "@/lib/sceneConfig";
import Modal from "@/components/Modal";
import Button from "@/components/Button";
import { useToast } from "@/hooks/useToast";
interface QrInviteModalProps {
@@ -92,20 +93,23 @@ export default function QrInviteModal({
</div>
<div className="mt-5 flex w-full gap-2.5">
<button
<Button
onClick={handleCopy}
className="flex h-11 flex-1 items-center justify-center gap-1.5 rounded-xl bg-elevated text-sm font-semibold text-secondary ring-1 ring-border transition-colors active:bg-subtle"
variant="secondary"
size="lg"
icon={<Copy size={15} />}
className="flex-1"
>
<Copy size={15} />
</button>
<button
</Button>
<Button
onClick={handleShare}
className="flex h-11 flex-1 items-center justify-center gap-1.5 rounded-xl bg-accent text-sm font-semibold text-white shadow-lg shadow-accent/20 transition-colors active:bg-accent-hover"
size="lg"
icon={<Share2 size={15} />}
className="flex-1"
>
<Share2 size={15} />
</button>
</Button>
</div>
</div>
</Modal>