"use client"; import React from "react"; import { useI18n } from "@/lib/i18n"; export type MascotPose = "bow" | "punch" | "kick" | "zen"; interface MascotGuideProps { pose?: MascotPose; speechText?: { en: string; zh: string; }; speechPosition?: "left" | "right" | "top"; className?: string; speechClassName?: string; size?: "sm" | "md" | "lg" | "xl" | "2xl"; animate?: boolean; } const POSE_IMAGES: Record = { bow: "/assets/theme/mascot_bow.webp", punch: "/assets/theme/mascot_punch.webp", kick: "/assets/theme/mascot_kick.webp", zen: "/assets/theme/mascot_zen.webp", }; export const MascotGuide: React.FC = ({ pose = "bow", speechText, speechPosition = "right", className = "", speechClassName = "", size = "md", animate = true, }) => { const { t, language } = useI18n(); const sizeClasses = { sm: "w-28 h-28 sm:w-36 sm:h-36", md: "w-40 h-40 sm:w-48 sm:h-48", lg: "w-48 h-48 sm:w-56 sm:h-56", xl: "w-56 h-56 sm:w-68 sm:h-68", "2xl": "w-64 h-64 sm:w-80 sm:h-80", }[size]; return (
{/* Mascot Cutout Character */}
{/* Soft magical glow backdrop */}
{/* eslint-disable-next-line @next/next/no-img-element */} {`Sensei
{/* Comic Speech Bubble */} {speechText && (
{/* Bubble arrow tail pointing towards the ghost */} {speechPosition === "right" && (
)} {speechPosition === "left" && (
)} {speechPosition === "top" && (
)}

{t(speechText)}

)}
); };