diff --git a/app/api/teams/[teamId]/image/route.tsx b/app/api/teams/[teamId]/image/route.tsx index d4b3a40..ab2b8ab 100644 --- a/app/api/teams/[teamId]/image/route.tsx +++ b/app/api/teams/[teamId]/image/route.tsx @@ -2,8 +2,8 @@ import { ImageResponse } from "next/og"; import sharp from "sharp"; +import { elementBackgroundColor } from "@/lib/catalog/element"; import { rarityGradient } from "@/lib/catalog/rarity"; -import { isCustomTravelerKey } from "@/lib/catalog/travelers"; import { getCachedPublicTeamExport } from "@/lib/cache/public"; import { imageContentDisposition } from "@/lib/guides/export-image"; @@ -110,10 +110,10 @@ export async function GET( alt="" width={78} height={78} - style={{ borderRadius: 16, border: "2px solid #ffffff2a", background: rarityGradient(isCustomTravelerKey(member.character.key) ? 5 : member.character.rarity), objectFit: "cover" }} + style={{ borderRadius: 16, border: "2px solid #ffffff2a", background: elementBackgroundColor(member.character.element), objectFit: "cover" }} /> ) : ( -
+
{member.character.name.slice(0, 1)}
)} diff --git a/components/public/team-search.tsx b/components/public/team-search.tsx index 349341f..6fb4c96 100644 --- a/components/public/team-search.tsx +++ b/components/public/team-search.tsx @@ -9,7 +9,7 @@ import { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } import { Input } from "@/components/ui/input"; import { Kbd } from "@/components/ui/kbd"; import { Separator } from "@/components/ui/separator"; -import { isCustomTravelerKey } from "@/lib/catalog/travelers"; +import { elementBackgroundColor } from "@/lib/catalog/element"; import { rarityGradientClass } from "@/lib/catalog/rarity"; import type { PublicGuide } from "@/lib/guides/queries"; import { cn } from "@/lib/utils"; @@ -77,7 +77,10 @@ export function TeamSearch({ teams }: { teams: PublicGuide["teams"] }) { {team.members.map((member) => (
-
+
{member.character.name} { + it("maps every character element to its flat color", () => { + expect(elementBackgroundColor("Pyro")).toBe("#EF7938"); + expect(elementBackgroundColor("Hydro")).toBe("#4CC2F1"); + expect(elementBackgroundColor("Anemo")).toBe("#74C2A8"); + expect(elementBackgroundColor("Electro")).toBe("#AF8EC1"); + expect(elementBackgroundColor("Dendro")).toBe("#A5C83B"); + expect(elementBackgroundColor("Cryo")).toBe("#9FD6E3"); + expect(elementBackgroundColor("Geo")).toBe("#FAB632"); + }); + + it("uses the neutral character background when the element is unavailable", () => { + expect(elementBackgroundColor(null)).toBe("#17383d"); + expect(elementBackgroundColor(undefined)).toBe("#17383d"); + expect(elementBackgroundColor("Unknown")).toBe("#17383d"); + }); +}); diff --git a/lib/catalog/element.ts b/lib/catalog/element.ts new file mode 100644 index 0000000..6deb7be --- /dev/null +++ b/lib/catalog/element.ts @@ -0,0 +1,13 @@ +const elementBackgroundColors: Record = { + Pyro: "#EF7938", + Hydro: "#4CC2F1", + Anemo: "#74C2A8", + Electro: "#AF8EC1", + Dendro: "#A5C83B", + Cryo: "#9FD6E3", + Geo: "#FAB632", +}; + +export function elementBackgroundColor(element: string | null | undefined): string { + return (element && elementBackgroundColors[element]) || "#17383d"; +}