diff --git a/src/lib/avatars/multiavatar.ts b/src/lib/avatars/multiavatar.ts index dc249ac..aa0c847 100644 --- a/src/lib/avatars/multiavatar.ts +++ b/src/lib/avatars/multiavatar.ts @@ -1,32 +1,32 @@ -const AVATAR_PALETTE = [ - "#1d4ed8", - "#0f766e", - "#7c3aed", - "#c2410c", - "#be123c", - "#4f46e5", - "#0f172a", - "#1f2937", -] as const; - -const AVATAR_ACCENTS = [ - "#bfdbfe", - "#99f6e4", - "#ddd6fe", - "#fed7aa", - "#fecdd3", - "#c7d2fe", - "#cbd5e1", +const AVATAR_BACKGROUNDS = [ + "#67e8f9", + "#a7f3d0", + "#fbcfe8", "#fde68a", + "#c4b5fd", + "#fdba74", + "#93c5fd", + "#f9a8d4", ] as const; -const AVATAR_FOREGROUNDS = [ - "#eff6ff", +const AVATAR_EAR_INNERS = [ + "#f472b6", + "#fb7185", + "#f9a8d4", + "#fda4af", +] as const; + +const AVATAR_FUR = [ + "#ffffff", "#f8fafc", - "#fefce8", + "#fef2f2", "#fdf4ff", ] as const; +const AVATAR_EYE_COLORS = ["#1f2937", "#0f172a", "#3f3f46"] as const; + +const AVATAR_NOSE_COLORS = ["#f43f5e", "#ec4899", "#fb7185"] as const; + const hashSeed = (seed: string) => { let hash = 2166136261; for (let i = 0; i < seed.length; i += 1) { @@ -56,24 +56,39 @@ export const buildAvatarSvg = (seed: string): string => { } const hash = hashSeed(trimmed); - const background = pick(AVATAR_PALETTE, hash); - const accent = pick(AVATAR_ACCENTS, hash >>> 3); - const foreground = pick(AVATAR_FOREGROUNDS, hash >>> 5); + const background = pick(AVATAR_BACKGROUNDS, hash); + const earInner = pick(AVATAR_EAR_INNERS, hash >>> 2); + const fur = pick(AVATAR_FUR, hash >>> 4); + const eye = pick(AVATAR_EYE_COLORS, hash >>> 7); + const nose = pick(AVATAR_NOSE_COLORS, hash >>> 9); const label = buildAvatarLabel(trimmed); - const offsetA = 16 + (hash % 28); - const offsetB = 68 - ((hash >>> 7) % 24); - const radius = 12 + ((hash >>> 11) % 10); - const tilt = ((hash >>> 13) % 20) - 10; + const leftEarTilt = 10 + ((hash >>> 11) % 13); + const rightEarTilt = 10 + ((hash >>> 14) % 13); + const blinkHeight = 4 + ((hash >>> 17) % 3); + const cheekOffset = 13 + ((hash >>> 19) % 4); + const whiskerLift = (hash >>> 21) % 3; return [ - ``, + ``, ``, - ``, - ``, - ``, - ``, - ``, - `${label}`, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + ``, + `${label}`, ``, ].join(""); }; diff --git a/tests/unit/multiavatar.test.ts b/tests/unit/multiavatar.test.ts index 8096622..6668b3b 100644 --- a/tests/unit/multiavatar.test.ts +++ b/tests/unit/multiavatar.test.ts @@ -8,6 +8,8 @@ describe("multiavatar helpers", () => { expect(svg).toContain(""); expect(svg).toContain("AA"); + expect(svg).toContain("bunny avatar"); + expect(svg).toContain('data-bunny="true"'); }); it("buildAvatarDataUrl returns a data url", () => {