49 lines
2.0 KiB
TypeScript
49 lines
2.0 KiB
TypeScript
"use client";
|
|
|
|
import { LockKeyhole } from "lucide-react";
|
|
import { useActiveCharacter } from "@/providers/character-provider";
|
|
|
|
export interface PrivateMessageCardProps {
|
|
hint?: string | null;
|
|
isUnlocking?: boolean;
|
|
onUnlock?: () => void;
|
|
}
|
|
|
|
export function PrivateMessageCard({
|
|
hint,
|
|
isUnlocking = false,
|
|
onUnlock,
|
|
}: PrivateMessageCardProps) {
|
|
const character = useActiveCharacter();
|
|
|
|
return (
|
|
<div
|
|
className="max-w-[min(72vw,280px)] rounded-(--responsive-card-radius-sm,18px) rounded-tl-none border border-[rgba(246,87,160,0.2)] bg-[linear-gradient(180deg,rgba(255,244,248,0.95),rgba(255,255,255,0.95)),#ffffff] p-(--responsive-card-padding,14px) text-[#3c3b3b] shadow-[0_4px_12px_rgba(246,87,160,0.12)]"
|
|
role="group"
|
|
aria-label="Locked private message"
|
|
>
|
|
<div
|
|
className="mb-[clamp(8px,1.852vw,10px)] flex size-(--responsive-icon-button-size,42px) items-center justify-center rounded-full bg-[linear-gradient(135deg,#ff8fc7_0%,#f657a0_100%)] text-white"
|
|
aria-hidden="true"
|
|
>
|
|
<LockKeyhole className="block" size={22} />
|
|
</div>
|
|
<p className="m-0 text-(length:--responsive-body,14px) leading-[1.4] text-[#3c3b3b]">
|
|
{hint && hint.length > 0
|
|
? hint
|
|
: `${character.shortName} has a private message for you.`}
|
|
</p>
|
|
<button
|
|
type="button"
|
|
data-analytics-key="chat.unlock_message"
|
|
data-analytics-label="Unlock private message"
|
|
className="mt-(--spacing-md,12px) w-full cursor-pointer rounded-full border-0 bg-[linear-gradient(90deg,#ff67e0,#ff52a2)] px-(--spacing-md,12px) py-[clamp(9px,1.852vw,10px)] text-(length:--responsive-body,14px) font-bold text-white disabled:cursor-not-allowed disabled:opacity-65 focus-visible:outline-2 focus-visible:outline-offset-3 focus-visible:outline-[#f657a0]"
|
|
disabled={isUnlocking || !onUnlock}
|
|
onClick={onUnlock}
|
|
>
|
|
{isUnlocking ? "Unlocking..." : "Unlock private message"}
|
|
</button>
|
|
</div>
|
|
);
|
|
}
|