ui: raise in-game emoji button above the hand + gender = male/female/unknown
CI/CD / CI - API (dotnet build + engine sim) (push) Successful in 29s
CI/CD / CI - Web (tsc + next build) (push) Successful in 1m13s
CI/CD / Deploy - local stack (db + server + web) (push) Successful in 1m4s

- GameTable reactions button (and its tray) moved up from the bottom-right so it
  no longer overlaps the player's cards on mobile portrait.
- Gender options are now Male / Female / Unknown — removed "other" from the
  Gender type, GENDER_META, and the profile picker; the empty value renders as
  «نامشخص» / "Unknown".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-13 08:59:15 +03:30
parent 1954992203
commit 53759be8b7
5 changed files with 6 additions and 7 deletions
+3 -3
View File
@@ -800,7 +800,7 @@ function Reactions() {
initial={{ opacity: 0, y: 12, scale: 0.95 }}
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: 12, scale: 0.95 }}
className="absolute bottom-20 ltr:right-4 rtl:left-4 z-50 glass rounded-2xl p-2 w-[min(270px,86vw)]"
className="absolute bottom-60 ltr:right-3 rtl:left-3 z-50 glass rounded-2xl p-2 w-[min(270px,86vw)]"
>
<div className="flex gap-1 p-1 rounded-xl bg-navy-900/70 mb-2">
<button
@@ -852,10 +852,10 @@ function Reactions() {
)}
</AnimatePresence>
{/* button */}
{/* button — raised above the hand so it doesn't overlap the cards on mobile */}
<button
onClick={() => setOpen((o) => !o)}
className="absolute bottom-[max(1rem,env(safe-area-inset-bottom))] ltr:right-4 rtl:left-4 z-50 glass rounded-full min-h-12 min-w-12 grid place-items-center hover:bg-navy-800 transition"
className="absolute bottom-44 ltr:right-3 rtl:left-3 z-50 glass rounded-full min-h-12 min-w-12 grid place-items-center hover:bg-navy-800 transition"
title={t("reactions.title")}
>
<SmilePlus className="size-5 text-gold-400" />
+1 -1
View File
@@ -407,7 +407,7 @@ function Stat({ label, value }: { label: string; value: string | number }) {
);
}
const GENDERS: Gender[] = ["male", "female", "other", ""];
const GENDERS: Gender[] = ["male", "female", ""];
const VIS_OPTIONS: { id: SocialVisibility; icon: React.ReactNode; key: string }[] = [
{ id: "public", icon: <Eye className="size-3.5" />, key: "profile.visPublic" },
{ id: "friends", icon: <Users className="size-3.5" />, key: "profile.visFriends" },
+1 -1
View File
@@ -737,7 +737,7 @@ const en: Dict = {
"profile.cardBack": "Card back",
"profile.social": "Social & contact",
"profile.gender": "Gender",
"profile.genderNone": "Unspecified",
"profile.genderNone": "Unknown",
"profile.socialLinks": "Social media",
"profile.socialsVisibility": "Show socials to",
"profile.visPublic": "Everyone",
+1 -1
View File
@@ -34,7 +34,7 @@ export interface PlayerStats {
export type PlanId = "free" | "pro";
/** Player-stated gender (empty = unspecified / not shown). */
export type Gender = "" | "male" | "female" | "other";
export type Gender = "" | "male" | "female";
/** Who may see a player's social links. */
export type SocialVisibility = "public" | "friends" | "hidden";
-1
View File
@@ -7,7 +7,6 @@ export const GENDER_META: Record<
> = {
male: { symbol: "♂", color: "#5aa6e0", faLabel: "آقا", enLabel: "Male" },
female: { symbol: "♀", color: "#ff7aa8", faLabel: "خانم", enLabel: "Female" },
other: { symbol: "⚧", color: "#c77dff", faLabel: "دیگر", enLabel: "Other" },
};
/** The social platforms a player can share, with link prefixes + brand colours. */