feat(hall): 支持全保金额整除校验与规则提示,优化桌面端转账按钮布局
Some checks failed
lotteryfront CI / build (push) Has been cancelled

This commit is contained in:
2026-07-15 13:40:19 +08:00
parent 295cfb97cd
commit 406ebb7671
14 changed files with 510 additions and 74 deletions

View File

@@ -36,6 +36,8 @@ export function TransferInDialog({
triggerClassName,
triggerVariant = "wallet",
triggerLabel,
triggerDescription,
triggerIconOnly = false,
open: controlledOpen,
onOpenChange: controlledOnOpenChange,
}: BaseProps & {
@@ -44,6 +46,8 @@ export function TransferInDialog({
triggerClassName?: string;
triggerVariant?: "wallet" | "hall";
triggerLabel?: string;
triggerDescription?: string;
triggerIconOnly?: boolean;
}) {
const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
const isControlled = controlledOpen !== undefined;
@@ -72,9 +76,20 @@ export function TransferInDialog({
triggerClassName,
)}
onClick={() => setOpen(true)}
aria-label={triggerIconOnly ? resolvedTriggerLabel : undefined}
title={triggerIconOnly ? resolvedTriggerLabel : undefined}
>
<ArrowDownLeft className="size-4 shrink-0" />
{resolvedTriggerLabel}
{triggerIconOnly ? (
<span className="sr-only">{resolvedTriggerLabel}</span>
) : triggerDescription ? (
<span className="flex min-w-0 flex-col text-left">
<span>{resolvedTriggerLabel}</span>
<span className="mt-0.5 text-xs font-medium opacity-75">{triggerDescription}</span>
</span>
) : (
resolvedTriggerLabel
)}
</Button>
<DialogContent showCloseButton className="gap-0 overflow-hidden p-0 sm:max-w-md">
<DialogHeader className="space-y-1.5 border-b border-border px-4 py-3 text-left">
@@ -110,6 +125,8 @@ export function TransferOutDialog({
triggerClassName,
triggerVariant = "wallet",
triggerLabel,
triggerDescription,
triggerIconOnly = false,
open: controlledOpen,
onOpenChange: controlledOnOpenChange,
}: BaseProps & {
@@ -117,6 +134,8 @@ export function TransferOutDialog({
triggerClassName?: string;
triggerVariant?: "wallet" | "hall";
triggerLabel?: string;
triggerDescription?: string;
triggerIconOnly?: boolean;
}) {
const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
const isControlled = controlledOpen !== undefined;
@@ -145,9 +164,20 @@ export function TransferOutDialog({
triggerClassName,
)}
onClick={() => setOpen(true)}
aria-label={triggerIconOnly ? resolvedTriggerLabel : undefined}
title={triggerIconOnly ? resolvedTriggerLabel : undefined}
>
<ArrowUpRight className="size-4 shrink-0" />
{resolvedTriggerLabel}
{triggerIconOnly ? (
<span className="sr-only">{resolvedTriggerLabel}</span>
) : triggerDescription ? (
<span className="flex min-w-0 flex-col text-left">
<span>{resolvedTriggerLabel}</span>
<span className="mt-0.5 text-xs font-medium opacity-75">{triggerDescription}</span>
</span>
) : (
resolvedTriggerLabel
)}
</Button>
<DialogContent showCloseButton className="gap-0 overflow-hidden p-0 sm:max-w-md">
<DialogHeader className="space-y-1.5 border-b border-border px-4 py-3 text-left">