pixelpeeps 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/Avatar.tsx"],"sourcesContent":["export { default as Avatar } from \"./Avatar\";\r\nexport { default } from \"./Avatar\";\r\n","import * as React from \"react\";\r\nimport palettes100 from \"nice-color-palettes\";\r\n\r\nexport type HeadShape = \"circle\" | \"square\";\r\nexport type Variant =\r\n | \"auto\"\r\n | \"plain\"\r\n | \"split\"\r\n | \"swoop\"\r\n | \"diagonal\"\r\n | \"cap\"\r\n | \"crescent\"\r\n | \"band\"\r\n | \"corner\"\r\n | \"ring\"\r\n | \"arc\"\r\n | \"wave\"\r\n | \"half\";\r\nexport type AlignX = \"left\" | \"center\" | \"right\";\r\nexport type AlignY = \"top\" | \"center\" | \"bottom\";\r\n\r\nexport type FaceProps = {\r\n cx: number;\r\n cy: number;\r\n r: number;\r\n color: string;\r\n eyeShape?: \"circle\" | \"ellipse\" | \"line\" | \"wink\" | \"sleepy\" | \"surprised\" | \"random\";\r\n mouthShape?: \"smile\" | \"frown\" | \"flat\" | \"zigzag\" | \"open\" | \"random\";\r\n glasses?: \"none\" | \"round\" | \"square\" | \"random\";\r\n eyebrows?: boolean | \"random\";\r\n blush?: boolean | \"random\";\r\n freckles?: boolean | \"random\";\r\n ears?: boolean | \"random\";\r\n hat?: \"none\" | \"beanie\" | \"cap\" | \"random\";\r\n outline?: boolean;\r\n pupilColor?: string | \"auto\";\r\n eyeShine?: boolean | \"random\";\r\n rand: () => number;\r\n};\r\n\r\nexport type AvatarProps = {\r\n name: string;\r\n\r\n // pixel background\r\n size?: number;\r\n pixelSize?: number;\r\n mirrored?: boolean;\r\n bg?: [string, string] | string | \"random\";\r\n\r\n // character controls\r\n headShape?: HeadShape;\r\n square?: boolean; // deprecated\r\n alignX?: AlignX;\r\n alignY?: AlignY;\r\n padding?: number;\r\n\r\n colors?: string | [string, string] | [string, string, string] | \"random\";\r\n variant?: Variant;\r\n\r\n // new feature props (optional)\r\n eyeShape?: FaceProps[\"eyeShape\"];\r\n mouthShape?: FaceProps[\"mouthShape\"];\r\n glasses?: FaceProps[\"glasses\"];\r\n eyebrows?: FaceProps[\"eyebrows\"];\r\n blush?: FaceProps[\"blush\"];\r\n freckles?: FaceProps[\"freckles\"];\r\n ears?: FaceProps[\"ears\"];\r\n hat?: FaceProps[\"hat\"];\r\n outline?: boolean;\r\n pupilColor?: string | \"auto\";\r\n eyeShine?: boolean;\r\n\r\n // styling/a11y\r\n className?: string;\r\n style?: React.CSSProperties;\r\n title?: string;\r\n};\r\n\r\n//\r\n// Deterministic RNG (seeded)\r\n// (unchanged from original)\r\nfunction cyrb128(str: string) {\r\n let h1 = 1779033703,\r\n h2 = 3144134277,\r\n h3 = 1013904242,\r\n h4 = 2773480762;\r\n for (let i = 0, k; i < str.length; i++) {\r\n k = str.charCodeAt(i);\r\n h1 = h2 ^ Math.imul(h1 ^ k, 597399067);\r\n h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);\r\n h3 = h4 ^ Math.imul(h3 ^ k, 951274213);\r\n h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);\r\n }\r\n h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);\r\n h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);\r\n h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);\r\n h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);\r\n return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];\r\n}\r\nfunction sfc32(a: number, b: number, c: number, d: number) {\r\n return function () {\r\n a >>>= 0;\r\n b >>>= 0;\r\n c >>>= 0;\r\n d >>>= 0;\r\n let t = (a + b) | 0;\r\n a = b ^ (b >>> 9);\r\n b = (c + (c << 3)) | 0;\r\n c = (c << 21) | (c >>> 11);\r\n d = (d + 1) | 0;\r\n t = (t + d) | 0;\r\n c = (c + t) | 0;\r\n return (t >>> 0) / 4294967296;\r\n };\r\n}\r\nfunction rngFromSeed(seed: string) {\r\n const [a, b, c, d] = cyrb128(seed || \"pixelpeeps\");\r\n return sfc32(a, b, c, d);\r\n}\r\nfunction pick<T>(rand: () => number, arr: T[]) {\r\n return arr[Math.floor(rand() * arr.length)];\r\n}\r\n\r\n//\r\n// Color helpers (unchanged)\r\n//\r\nfunction hexToRgb(hex: string) {\r\n const h = hex.replace(\"#\", \"\");\r\n const full = h.length === 3 ? h.split(\"\").map((c) => c + c).join(\"\") : h;\r\n const n = parseInt(full, 16);\r\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };\r\n}\r\nfunction rgbToHex(r: number, g: number, b: number) {\r\n return \"#\" + [r, g, b].map((v) => v.toString(16).padStart(2, \"0\")).join(\"\");\r\n}\r\nfunction shade(hex: string, percent: number) {\r\n const { r, g, b } = hexToRgb(hex);\r\n const t = percent < 0 ? 0 : 255;\r\n const p = Math.abs(percent);\r\n return rgbToHex(\r\n Math.round((t - r) * p) + r,\r\n Math.round((t - g) * p) + g,\r\n Math.round((t - b) * p) + b\r\n );\r\n}\r\nfunction yiq(hex: string) {\r\n const { r, g, b } = hexToRgb(hex);\r\n return (r * 299 + g * 587 + b * 114) / 1000;\r\n}\r\nfunction bestFeatureColor(base: string) {\r\n return yiq(base) > 150 ? \"#111827\" : \"#ffffff\";\r\n}\r\n\r\n//\r\n// Palettes: use nice-color-palettes (top 100)\r\n//\r\nconst NICE_PALETTES: string[][] =\r\n palettes100 && Array.isArray(palettes100) ? (palettes100 as string[][]) : [[\"#73a9ff\", \"#fef3c7\", \"#ffd6a5\", \"#d4b4ff\", \"#a7f3d0\"]];\r\n\r\nfunction resolveBg(rand: () => number, bg?: AvatarProps[\"bg\"]): [string, string] {\r\n if (!bg || bg === \"random\") {\r\n return pick(rand, NICE_PALETTES).slice(0, 2) as [string, string];\r\n }\r\n if (Array.isArray(bg)) return [bg[0], bg[1] ?? bg[0]];\r\n return [shade(bg, 0.12), shade(bg, -0.06)];\r\n}\r\nfunction resolveCharColors(rand: () => number, colors?: AvatarProps[\"colors\"]): [string, string, string] {\r\n if (!colors || colors === \"random\") {\r\n const pal = pick(rand, NICE_PALETTES);\r\n const base = pal[0];\r\n const a1 = pal[1] ?? shade(base, 0.25);\r\n const a2 = pal[2] ?? shade(base, -0.2);\r\n return [base, a1, a2];\r\n }\r\n if (typeof colors === \"string\") {\r\n return [colors, shade(colors, 0.25), shade(colors, -0.2)];\r\n }\r\n const base = (colors as string[])[0];\r\n const a1 = (colors as string[])[1] ?? shade(base, 0.25);\r\n const a2 = (colors as string[])[2] ?? shade(base, -0.2);\r\n return [base, a1, a2];\r\n}\r\n\r\n//\r\n// Face component: extended features\r\n//\r\nfunction Face({\r\n cx,\r\n cy,\r\n r,\r\n color,\r\n eyeShape: eyeShapeProp,\r\n mouthShape: mouthShapeProp,\r\n glasses: glassesProp,\r\n eyebrows: eyebrowsProp,\r\n blush: blushProp,\r\n freckles: frecklesProp,\r\n ears: earsProp,\r\n hat: hatProp,\r\n outline,\r\n pupilColor,\r\n eyeShine: eyeShineProp,\r\n rand,\r\n}: FaceProps) {\r\n // 🌿 deterministic pick helpers\r\n const decide = <T,>(prop: T | \"random\" | undefined, opts: T[]) => {\r\n if (prop === undefined || prop === \"random\") return pick(rand, opts as any) as T;\r\n return prop as T;\r\n };\r\n\r\n // pick features deterministically if prop is \"random\"/undefined\r\n const eyeShape = decide(eyeShapeProp ?? \"random\", [\"circle\", \"ellipse\", \"line\", \"wink\", \"sleepy\", \"surprised\"]);\r\n const mouthShape = decide(mouthShapeProp ?? \"random\", [\"smile\", \"frown\", \"flat\", \"zigzag\", \"open\"]);\r\n const glasses = decide(glassesProp ?? \"random\", [\"none\", \"round\", \"square\"]);\r\n const eyebrows = decide(eyebrowsProp ?? \"random\", [true, false]);\r\n const blush = decide(blushProp ?? \"random\", [true, false]);\r\n const freckles = decide(frecklesProp ?? \"random\", [true, false]);\r\n const ears = decide(earsProp ?? \"random\", [true, false]);\r\n const hat = decide(hatProp ?? \"random\", [\"none\", \"beanie\", \"cap\"]);\r\n const eyeShine = decide(eyeShineProp ?? \"random\", [true, false]);\r\n\r\n // geometry\r\n const eyeOffsetX = r * (0.34 + rand() * 0.06);\r\n const eyeOffsetY = r * (0.20 + rand() * 0.06);\r\n const eyeR = Math.max(2, Math.round(r * (0.08 + rand() * 0.02)));\r\n const pupilR = Math.max(1, Math.round(eyeR * (0.45 + rand() * 0.25)));\r\n const mouthWidth = r * (0.7 + rand() * 0.3);\r\n const mouthLift = r * (0.18 + rand() * 0.16);\r\n const mouthStroke = Math.max(1, Math.round(r * 0.06));\r\n\r\n // pupil color\r\n let finalPupilColor = \"#111827\";\r\n if (pupilColor && pupilColor !== \"auto\") finalPupilColor = pupilColor;\r\n else finalPupilColor = yiq(color) > 150 ? \"#111827\" : \"#ffffff\";\r\n\r\n // helper positions\r\n const x0 = cx - mouthWidth / 2;\r\n const x1 = cx + mouthWidth / 2;\r\n const my = cy + mouthLift;\r\n\r\n // eyebrow offsets\r\n const browY = cy - eyeOffsetY - eyeR * 1.6;\r\n const browLen = eyeR * 2.2;\r\n\r\n // small helpers to draw various mouth shapes\r\n const mouthPathSmile = (() => {\r\n const mouthCurve = (rand() - 0.5) * 0.8;\r\n const cxQ = cx;\r\n const cyQ = my + r * (-0.25 * mouthCurve - 0.1);\r\n return `M ${x0} ${my} Q ${cxQ} ${cyQ} ${x1} ${my}`;\r\n })();\r\n\r\n const mouthPathFrown = (() => {\r\n const mouthCurve = (rand() - 0.5) * 0.8;\r\n const cxQ = cx;\r\n const cyQ = my + r * (0.25 * mouthCurve + 0.08); // control point below -> frown\r\n return `M ${x0} ${my} Q ${cxQ} ${cyQ} ${x1} ${my}`;\r\n })();\r\n\r\n const mouthPathZigzag = (() => {\r\n // create small zigzag across mouth width\r\n const segs = 6;\r\n const step = mouthWidth / (segs - 1);\r\n let d = `M ${x0} ${my}`;\r\n for (let i = 1; i < segs; i++) {\r\n const px = x0 + step * i;\r\n const py = my + (i % 2 === 0 ? -r * 0.08 : r * 0.08);\r\n d += ` L ${px} ${py}`;\r\n }\r\n return d;\r\n })();\r\n\r\n const mouthOpen = (() => {\r\n // oval open mouth\r\n const w = mouthWidth;\r\n const h = r * 0.26;\r\n const rx = w / 2;\r\n const ry = h / 2;\r\n return { rx, ry, cy: my + ry * 0.25 };\r\n })();\r\n\r\n // freckles positions\r\n const frecklesCoords = [\r\n { x: cx - eyeOffsetX * 1.1, y: cy + eyeOffsetY * 0.4 },\r\n { x: cx - eyeOffsetX * 0.6, y: cy + eyeOffsetY * 0.6 },\r\n { x: cx + eyeOffsetX * 1.1, y: cy + eyeOffsetY * 0.4 },\r\n { x: cx + eyeOffsetX * 0.6, y: cy + eyeOffsetY * 0.6 },\r\n ];\r\n\r\n // build JSX pieces\r\n const eyes = (\r\n <>\r\n {/* left eye */}\r\n {(() => {\r\n const ex = cx - eyeOffsetX;\r\n const ey = cy - eyeOffsetY;\r\n\r\n switch (eyeShape) {\r\n case \"ellipse\":\r\n return (\r\n <ellipse cx={ex} cy={ey} rx={eyeR * 1.1} ry={eyeR * 0.7} fill={color} key=\"le\" />\r\n );\r\n case \"line\":\r\n return <line x1={ex - eyeR} y1={ey} x2={ex + eyeR} y2={ey} stroke={color} strokeWidth={Math.max(1, Math.round(eyeR * 0.4))} strokeLinecap=\"round\" key=\"ll\" />;\r\n case \"wink\":\r\n // wink left = closed (line)\r\n return <line x1={ex - eyeR} y1={ey} x2={ex + eyeR} y2={ey} stroke={color} strokeWidth={Math.max(1, Math.round(eyeR * 0.4))} strokeLinecap=\"round\" key=\"lw\" />;\r\n case \"sleepy\":\r\n return (\r\n <>\r\n <ellipse cx={ex} cy={ey} rx={eyeR * 1.05} ry={eyeR * 0.45} fill={color} key=\"ls\" />\r\n </>\r\n );\r\n case \"surprised\":\r\n return <circle cx={ex} cy={ey} r={eyeR * 1.1} fill={color} key=\"lsp\" />;\r\n default:\r\n // circle\r\n return <circle cx={ex} cy={ey} r={eyeR} fill={color} key=\"lc\" />;\r\n }\r\n })()}\r\n\r\n {/* left pupil */}\r\n {(() => {\r\n const ex = cx - eyeOffsetX;\r\n const ey = cy - eyeOffsetY;\r\n // if line/wink (closed) skip pupil\r\n if (eyeShape === \"line\" || eyeShape === \"wink\") return null;\r\n if (eyeShape === \"sleepy\") {\r\n // smaller pupil\r\n return <circle cx={ex} cy={ey} r={Math.max(1, pupilR * 0.6)} fill={finalPupilColor} key=\"lps\" />;\r\n }\r\n return (\r\n <>\r\n <circle cx={ex} cy={ey} r={pupilR} fill={finalPupilColor} key=\"lp\" />\r\n {eyeShine ? <circle cx={ex - pupilR * 0.4} cy={ey - pupilR * 0.6} r={Math.max(0.6, pupilR * 0.35)} fill=\"#ffffff\" opacity={0.8} key=\"lshine\" /> : null}\r\n </>\r\n );\r\n })()}\r\n\r\n {/* right eye */}\r\n {(() => {\r\n const ex = cx + eyeOffsetX;\r\n const ey = cy - eyeOffsetY;\r\n\r\n switch (eyeShape) {\r\n case \"ellipse\":\r\n return (\r\n <ellipse cx={ex} cy={ey} rx={eyeR * 1.1} ry={eyeR * 0.7} fill={color} key=\"re\" />\r\n );\r\n case \"line\":\r\n return <line x1={ex - eyeR} y1={ey} x2={ex + eyeR} y2={ey} stroke={color} strokeWidth={Math.max(1, Math.round(eyeR * 0.4))} strokeLinecap=\"round\" key=\"rl\" />;\r\n case \"wink\":\r\n // wink right -> keep open; variety: one eye wink looks cute\r\n return <circle cx={ex} cy={ey} r={eyeR} fill={color} key=\"rw\" />;\r\n case \"sleepy\":\r\n return <ellipse cx={ex} cy={ey} rx={eyeR * 1.05} ry={eyeR * 0.45} fill={color} key=\"rs\" />;\r\n case \"surprised\":\r\n return <circle cx={ex} cy={ey} r={eyeR * 1.1} fill={color} key=\"rsp\" />;\r\n default:\r\n return <circle cx={ex} cy={ey} r={eyeR} fill={color} key=\"rc\" />;\r\n }\r\n })()}\r\n\r\n {/* right pupil */}\r\n {(() => {\r\n const ex = cx + eyeOffsetX;\r\n const ey = cy - eyeOffsetY;\r\n if (eyeShape === \"line\" || (eyeShape === \"wink\" && rand() > 0.2)) {\r\n // sometimes wink will be left eye closed; we've drawn right open earlier; if right is closed skip\r\n if (eyeShape === \"line\") return null;\r\n }\r\n if (eyeShape === \"sleepy\") {\r\n return <circle cx={ex} cy={ey} r={Math.max(1, pupilR * 0.6)} fill={finalPupilColor} key=\"rps\" />;\r\n }\r\n if (eyeShape === \"wink\") {\r\n // keep pupil\r\n return (\r\n <>\r\n <circle cx={ex} cy={ey} r={pupilR} fill={finalPupilColor} key=\"rp\" />\r\n {eyeShine ? <circle cx={ex - pupilR * 0.4} cy={ey - pupilR * 0.6} r={Math.max(0.6, pupilR * 0.35)} fill=\"#ffffff\" opacity={0.8} key=\"rshine\" /> : null}\r\n </>\r\n );\r\n }\r\n return (\r\n <>\r\n <circle cx={ex} cy={ey} r={pupilR} fill={finalPupilColor} key=\"rp\" />\r\n {eyeShine ? <circle cx={ex - pupilR * 0.4} cy={ey - pupilR * 0.6} r={Math.max(0.6, pupilR * 0.35)} fill=\"#ffffff\" opacity={0.8} key=\"rshine2\" /> : null}\r\n </>\r\n );\r\n })()}\r\n </>\r\n );\r\n\r\n // eyebrows\r\n const brows = eyebrows ? (\r\n <>\r\n <path d={`M ${cx - eyeOffsetX - browLen / 2} ${browY} Q ${cx - eyeOffsetX} ${browY - eyeR * 0.4} ${cx - eyeOffsetX + browLen / 2} ${browY}`} stroke={color} strokeWidth={Math.max(1, Math.round(eyeR * 0.25))} strokeLinecap=\"round\" fill=\"none\" />\r\n <path d={`M ${cx + eyeOffsetX - browLen / 2} ${browY} Q ${cx + eyeOffsetX} ${browY - eyeR * 0.4} ${cx + eyeOffsetX + browLen / 2} ${browY}`} stroke={color} strokeWidth={Math.max(1, Math.round(eyeR * 0.25))} strokeLinecap=\"round\" fill=\"none\" />\r\n </>\r\n ) : null;\r\n\r\n // glasses\r\n const glassesEl = (() => {\r\n if (glasses === \"none\") return null;\r\n const gx = eyeOffsetX;\r\n const gy = cy - eyeOffsetY;\r\n const frameW = eyeR * 2.4;\r\n const frameH = eyeR * 1.6;\r\n const bridgeW = eyeR * 0.6;\r\n if (glasses === \"round\") {\r\n return (\r\n <>\r\n <circle cx={cx - gx} cy={gy} r={frameW / 2} fill=\"transparent\" stroke={finalPupilColor} strokeWidth={Math.max(1, Math.round(eyeR * 0.35))} />\r\n <circle cx={cx + gx} cy={gy} r={frameW / 2} fill=\"transparent\" stroke={finalPupilColor} strokeWidth={Math.max(1, Math.round(eyeR * 0.35))} />\r\n <line x1={cx - bridgeW / 2} y1={gy} x2={cx + bridgeW / 2} y2={gy} stroke={finalPupilColor} strokeWidth={Math.max(1, Math.round(eyeR * 0.25))} strokeLinecap=\"round\" />\r\n </>\r\n );\r\n }\r\n // square\r\n return (\r\n <>\r\n <rect x={cx - gx - frameW / 2} y={gy - frameH / 2} width={frameW} height={frameH} rx={Math.max(1, eyeR * 0.25)} fill=\"transparent\" stroke={finalPupilColor} strokeWidth={Math.max(1, Math.round(eyeR * 0.35))} />\r\n <rect x={cx + gx - frameW / 2} y={gy - frameH / 2} width={frameW} height={frameH} rx={Math.max(1, eyeR * 0.25)} fill=\"transparent\" stroke={finalPupilColor} strokeWidth={Math.max(1, Math.round(eyeR * 0.35))} />\r\n <line x1={cx - bridgeW / 2} y1={gy} x2={cx + bridgeW / 2} y2={gy} stroke={finalPupilColor} strokeWidth={Math.max(1, Math.round(eyeR * 0.25))} strokeLinecap=\"round\" />\r\n </>\r\n );\r\n })();\r\n\r\n // mouth drawing based on mouthShape\r\n const mouth = (() => {\r\n switch (mouthShape) {\r\n case \"frown\":\r\n return <path d={mouthPathFrown} stroke={color} strokeWidth={mouthStroke} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />;\r\n case \"flat\":\r\n return <line x1={x0} y1={my} x2={x1} y2={my} stroke={color} strokeWidth={Math.max(1, Math.round(mouthStroke * 0.9))} strokeLinecap=\"round\" />;\r\n case \"zigzag\":\r\n return <path d={mouthPathZigzag} stroke={color} strokeWidth={Math.max(1, Math.round(mouthStroke * 0.9))} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />;\r\n case \"open\":\r\n // filled oval with darker shade for open mouth\r\n const open = mouthOpen;\r\n return (\r\n <>\r\n <ellipse cx={cx} cy={open.cy} rx={open.rx} ry={open.ry} fill={shade(color, -0.6)} />\r\n <ellipse cx={cx} cy={open.cy} rx={open.rx} ry={open.ry} fill=\"none\" stroke={color} strokeWidth={Math.max(1, Math.round(mouthStroke * 0.5))} />\r\n <rect x={cx - open.rx * 0.6} y={open.cy} width={open.rx * 1.2} height={Math.max(1, open.ry * 0.25)} rx={1} fill={shade(color, -0.2)} />\r\n </>\r\n );\r\n default:\r\n return <path d={mouthPathSmile} stroke={color} strokeWidth={mouthStroke} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />;\r\n }\r\n })();\r\n\r\n // blush\r\n const blushEl = blush ? (\r\n <>\r\n <circle cx={cx - eyeOffsetX * 0.9} cy={cy + eyeOffsetY * 0.6} r={Math.max(3, r * 0.12)} fill={shade(color, -0.5)} opacity={0.16} />\r\n <circle cx={cx + eyeOffsetX * 0.9} cy={cy + eyeOffsetY * 0.6} r={Math.max(3, r * 0.12)} fill={shade(color, -0.5)} opacity={0.16} />\r\n </>\r\n ) : null;\r\n\r\n // freckles\r\n const frecklesEl = freckles ? (\r\n <>\r\n {frecklesCoords.map((f, i) => (\r\n <circle key={`f${i}`} cx={f.x} cy={f.y} r={Math.max(0.8, r * 0.03 * (0.8 + (i % 3) * 0.2))} fill={shade(color, -0.6)} opacity={0.9} />\r\n ))}\r\n </>\r\n ) : null;\r\n\r\n // ears\r\n const earsEl =\r\n ears ? (\r\n <>\r\n <circle cx={cx - r - r * 0.12} cy={cy} r={r * 0.18} fill={color} />\r\n <circle cx={cx + r + r * 0.12} cy={cy} r={r * 0.18} fill={color} />\r\n </>\r\n ) : null;\r\n\r\n // hat (simple beanie / cap)\r\n const hatEl = (() => {\r\n if (hat === \"none\") return null;\r\n if (hat === \"beanie\") {\r\n return <path d={`M ${cx - r} ${cy - r * 0.55} Q ${cx} ${cy - r * 1.02} ${cx + r} ${cy - r * 0.55} L ${cx + r} ${cy - r * 0.85} L ${cx - r} ${cy - r * 0.85} Z`} fill={shade(color, 0.06)} opacity={0.98} />;\r\n }\r\n // cap\r\n return (\r\n <>\r\n <path d={`M ${cx - r * 0.75} ${cy - r * 0.6} Q ${cx} ${cy - r * 0.95} ${cx + r * 0.75} ${cy - r * 0.6} L ${cx + r * 0.75} ${cy - r * 0.9} L ${cx - r * 0.75} ${cy - r * 0.9} Z`} fill={shade(color, 0.06)} />\r\n <path d={`M ${cx - r * 0.6} ${cy - r * 0.3} Q ${cx} ${cy - r * 0.05} ${cx + r * 0.6} ${cy - r * 0.3} L ${cx + r * 0.6} ${cy - r * 0.15} Q ${cx} ${cy - r * 0.02} ${cx - r * 0.6} ${cy - r * 0.15} Z`} fill={shade(color, -0.08)} />\r\n </>\r\n );\r\n })();\r\n\r\n // outline stroke for head (if requested)\r\n const outlineStroke = outline ? { stroke: shade(color, -0.24), strokeWidth: Math.max(1, Math.round(r * 0.06)) } : {};\r\n\r\n return (\r\n <g>\r\n {/* ears are drawn behind head */}\r\n {earsEl}\r\n\r\n {/* head outline/stroke handled by parent clip group, but draw inner features */}\r\n {/* features */}\r\n {hatEl}\r\n {blushEl}\r\n {frecklesEl}\r\n {brows}\r\n {eyes}\r\n {glassesEl}\r\n <g>{mouth}</g>\r\n {/* outline is applied by parent when drawing head; here we can leave it as a hint */}\r\n </g>\r\n );\r\n}\r\n\r\n//\r\n// Overlays (variants) -- unchanged, but kept in file\r\n//\r\nfunction Overlays({\r\n cx,\r\n cy,\r\n r,\r\n a1,\r\n a2,\r\n variant,\r\n shape,\r\n rand,\r\n}: {\r\n cx: number;\r\n cy: number;\r\n r: number;\r\n a1: string;\r\n a2: string;\r\n variant: Exclude<Variant, \"auto\">;\r\n shape: HeadShape;\r\n rand: () => number;\r\n}) {\r\n const x0 = cx - r,\r\n y0 = cy - r,\r\n x1 = cx + r,\r\n y1 = cy + r;\r\n\r\n // deterministic options\r\n const left = rand() > 0.5;\r\n const tlbr = rand() > 0.5;\r\n const horiz = rand() > 0.5;\r\n const cornerTL = rand() > 0.5;\r\n\r\n switch (variant) {\r\n case \"plain\":\r\n return null;\r\n\r\n case \"split\":\r\n return <rect x={left ? x0 : cx} y={y0} width={r} height={2 * r} fill={a1} />;\r\n\r\n case \"diagonal\":\r\n return tlbr ? <polygon points={`${x0},${y0} ${x1},${y0} ${x1},${y1}`} fill={a1} /> : <polygon points={`${x0},${y0} ${x0},${y1} ${x1},${y1}`} fill={a1} />;\r\n\r\n case \"cap\":\r\n return <path d={`M ${x0} ${y0 + r * 0.25} L ${x1} ${y0} L ${x1} ${y0 + r * 0.6} Q ${cx} ${y0 + r * 0.85} ${x0} ${y0 + r * 0.6} Z`} fill={a1} />;\r\n\r\n case \"swoop\":\r\n return <path d={`M ${x0} ${cy - r * 0.55} Q ${cx} ${cy - r * 1.1} ${x1} ${cy - r * 0.35} L ${x1} ${y1} Q ${cx} ${cy + r * 0.95} ${x0} ${y1} Z`} fill={a1} />;\r\n\r\n case \"crescent\":\r\n return (\r\n <>\r\n <circle cx={left ? cx - r * 0.55 : cx + r * 0.55} cy={cy} r={r * 0.95} fill={a2} />\r\n <circle cx={left ? cx - r * 0.52 : cx + r * 0.52} cy={cy} r={r * 0.75} fill=\"transparent\" stroke={shade(a2, -0.25)} strokeWidth={r * 0.08} />\r\n </>\r\n );\r\n\r\n case \"band\":\r\n return horiz ? <rect x={x0} y={cy - r * 0.35} width={2 * r} height={r * 0.5} fill={a1} /> : <rect x={cx - r * 0.35} y={y0} width={r * 0.5} height={2 * r} fill={a1} />;\r\n\r\n case \"corner\":\r\n return cornerTL ? <polygon points={`${x0},${y0} ${x0 + r * 0.9},${y0} ${x0},${y0 + r * 0.9}`} fill={a1} /> : <polygon points={`${x1},${y0} ${x1 - r * 0.9},${y0} ${x1},${y0 + r * 0.9}`} fill={a1} />;\r\n\r\n case \"ring\":\r\n return shape === \"circle\" ? <circle cx={cx} cy={cy} r={r * 0.86} fill=\"none\" stroke={a1} strokeWidth={r * 0.18} /> : <rect x={cx - r * 0.86} y={cy - r * 0.86} width={2 * r * 0.86} height={2 * r * 0.86} rx={r * 0.18} fill=\"none\" stroke={a1} strokeWidth={r * 0.18} />;\r\n\r\n case \"arc\":\r\n return <path d={`M ${x0} ${cy - r * 0.2} A ${r} ${r} 0 0 1 ${x1} ${cy - r * 0.2} L ${x1} ${cy + r * 0.15} A ${r} ${r} 0 0 0 ${x0} ${cy + r * 0.15} Z`} fill={a1} />;\r\n\r\n case \"wave\":\r\n return <path d={`M ${x0} ${cy - r * 0.3} C ${cx - r * 0.6} ${cy - r * 0.8}, ${cx - r * 0.2} ${cy + r * 0.1}, ${cx} ${cy} S ${cx + r * 0.6} ${cy + r * 0.8}, ${x1} ${cy + r * 0.3} L ${x1} ${y1} L ${x0} ${y1} Z`} fill={a1} />;\r\n\r\n case \"half\": {\r\n const diag = rand() > 0.4;\r\n if (diag) {\r\n return <polygon points={`${x0},${y0} ${x1},${y0} ${x1},${cy + (left ? r * 0.1 : -r * 0.1)}`} fill={a1} />;\r\n } else {\r\n const offset = left ? -r * 0.18 : r * 0.18;\r\n return <circle cx={cx + offset} cy={cy} r={r * 0.95} fill={a1} />;\r\n }\r\n }\r\n\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\n//\r\n// Main component (extended props integrated)\r\n//\r\nexport default function Avatar({\r\n name,\r\n size = 128,\r\n pixelSize = 12,\r\n mirrored = true,\r\n bg,\r\n colors,\r\n headShape,\r\n square,\r\n alignX = \"center\",\r\n alignY = \"center\",\r\n padding,\r\n variant = \"auto\",\r\n className,\r\n style,\r\n title,\r\n\r\n // new feature props (pass these to control face features)\r\n eyeShape,\r\n mouthShape,\r\n glasses,\r\n eyebrows,\r\n blush,\r\n freckles,\r\n ears,\r\n hat,\r\n outline = false,\r\n pupilColor,\r\n eyeShine,\r\n}: AvatarProps) {\r\n const shape: HeadShape = headShape ?? (square ? \"square\" : \"circle\");\r\n const rand = React.useMemo(() => rngFromSeed(String(name)), [name]);\r\n\r\n // colors\r\n const [bg1, bg2] = React.useMemo(() => resolveBg(rand, bg), [rand, bg]);\r\n const [base, a1, a2] = React.useMemo(() => resolveCharColors(rand, colors), [rand, colors]);\r\n const faceColor = bestFeatureColor(base);\r\n\r\n // Pixel grid\r\n const grid = Math.max(6, Math.floor(size / pixelSize));\r\n const tile = Math.ceil(size / grid);\r\n\r\n // geometry\r\n const autoPad = Math.max(4, Math.round(size * (0.06 + rand() * 0.02)));\r\n const pad = padding ?? autoPad;\r\n const baseR = Math.floor(size * (0.36 + rand() * 0.04));\r\n const maxR = Math.floor(size / 2 - pad);\r\n const r = Math.max(8, Math.min(baseR, maxR));\r\n\r\n let cx = size / 2;\r\n let cy = size / 2;\r\n if (alignX === \"left\") cx = r + pad;\r\n if (alignX === \"right\") cx = size - (r + pad);\r\n if (alignY === \"top\") cy = r + pad;\r\n if (alignY === \"bottom\") cy = size - (r + pad);\r\n\r\n // pixel pattern\r\n const cells: React.ReactElement[] = [];\r\n const cols = mirrored ? Math.ceil(grid / 2) : grid;\r\n for (let y = 0; y < grid; y++) {\r\n for (let x = 0; x < cols; x++) {\r\n const use = rand() > 0.5;\r\n const fill = use ? bg1 : bg2;\r\n const px = x * tile;\r\n const py = y * tile;\r\n cells.push(<rect key={`L${x},${y}`} x={px} y={py} width={tile} height={tile} fill={fill} />);\r\n if (mirrored) {\r\n const mx = grid - x - 1;\r\n const mpx = mx * tile;\r\n cells.push(<rect key={`R${mx},${y}`} x={mpx} y={py} width={tile} height={tile} fill={fill} />);\r\n }\r\n }\r\n }\r\n\r\n // variants\r\n const variants: Exclude<Variant, \"auto\">[] = [\"split\", \"swoop\", \"diagonal\", \"cap\", \"crescent\", \"band\", \"corner\", \"ring\", \"arc\", \"wave\", \"plain\", \"half\"];\r\n const chosenVariant: Exclude<Variant, \"auto\"> = variant === \"auto\" ? pick(rand, variants) : (variant as Exclude<Variant, \"auto\">);\r\n\r\n // clip path id\r\n const clipId = React.useMemo(() => {\r\n const [a, b, c, d] = cyrb128(`pp-shape-${name}-${shape}-${r}`);\r\n return `pps-${a.toString(16)}${b.toString(16)}${c.toString(16)}${d.toString(16)}`;\r\n }, [name, shape, r]);\r\n\r\n // head stroke if outline requested\r\n const headStrokeProps = outline ? { stroke: shade(base, -0.25), strokeWidth: Math.max(1, Math.round(r * 0.06)) } : {};\r\n\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox={`0 0 ${size} ${size}`}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n role=\"img\"\r\n aria-label={title ?? `Avatar ${name}`}\r\n className={className}\r\n style={{ display: \"inline-block\", borderRadius: 12, ...style }}\r\n >\r\n {/* background grid */}\r\n <rect width={size} height={size} fill={bg1} />\r\n {cells}\r\n\r\n <defs>\r\n <clipPath id={clipId}>\r\n {shape === \"square\" ? (\r\n <rect x={cx - r} y={cy - r} width={2 * r} height={2 * r} rx={Math.max(4, r * 0.12)} />\r\n ) : (\r\n <circle cx={cx} cy={cy} r={r} />\r\n )}\r\n </clipPath>\r\n </defs>\r\n\r\n {/* head + overlays */}\r\n <g clipPath={`url(#${clipId})`}>\r\n {shape === \"square\" ? (\r\n <rect\r\n x={cx - r}\r\n y={cy - r}\r\n width={2 * r}\r\n height={2 * r}\r\n rx={Math.max(4, r * 0.12)}\r\n fill={base}\r\n {...(outline ? { stroke: shade(base, -0.25), strokeWidth: Math.max(1, Math.round(r * 0.06)) } : {})}\r\n />\r\n ) : (\r\n <circle cx={cx} cy={cy} r={r} fill={base} {...(outline ? { stroke: shade(base, -0.25), strokeWidth: Math.max(1, Math.round(r * 0.06)) } : {})} />\r\n )}\r\n\r\n <Overlays cx={cx} cy={cy} r={r} a1={a1} a2={a2} variant={chosenVariant} shape={shape} rand={rand} />\r\n </g>\r\n\r\n {/* facial features: pass randomized or explicit props */}\r\n <Face\r\n cx={cx}\r\n cy={cy}\r\n r={r}\r\n color={faceColor}\r\n eyeShape={eyeShape}\r\n mouthShape={mouthShape}\r\n glasses={glasses}\r\n eyebrows={eyebrows}\r\n blush={blush}\r\n freckles={freckles}\r\n ears={ears}\r\n hat={hat}\r\n outline={outline}\r\n pupilColor={pupilColor ?? \"auto\"}\r\n eyeShine={eyeShine}\r\n rand={rand}\r\n />\r\n </svg>\r\n );\r\n}\r\n"],"mappings":"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","names":["palettes100","base","a1","a2"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/Avatar.tsx"],"sourcesContent":["export { default as Avatar } from \"./Avatar\";\r\nexport { default } from \"./Avatar\";\r\n","import * as React from \"react\";\r\nimport palettes100 from \"nice-color-palettes\";\r\n\r\nexport type HeadShape = \"circle\" | \"square\";\r\nexport type Variant =\r\n | \"auto\"\r\n | \"plain\"\r\n | \"split\"\r\n | \"swoop\"\r\n | \"diagonal\"\r\n | \"cap\"\r\n | \"crescent\"\r\n | \"band\"\r\n | \"corner\"\r\n | \"ring\"\r\n | \"arc\"\r\n | \"wave\"\r\n | \"half\";\r\nexport type AlignX = \"left\" | \"center\" | \"right\";\r\nexport type AlignY = \"top\" | \"center\" | \"bottom\";\r\n\r\nexport type FaceProps = {\r\n cx: number;\r\n cy: number;\r\n r: number;\r\n color: string;\r\n eyeShape?: \"circle\" | \"ellipse\" | \"line\" | \"wink\" | \"sleepy\" | \"surprised\" | \"random\";\r\n mouthShape?: \"smile\" | \"frown\" | \"flat\" | \"zigzag\" | \"random\";\r\n pupilColor?: string | \"auto\";\r\n eyeShine?: boolean | \"random\";\r\n rand: () => number;\r\n};\r\n\r\nexport type AvatarProps = {\r\n name: string;\r\n size?: number;\r\n pixelSize?: number;\r\n mirrored?: boolean;\r\n bg?: [string, string] | string | \"random\";\r\n headShape?: HeadShape;\r\n alignX?: AlignX;\r\n alignY?: AlignY;\r\n padding?: number;\r\n colors?: string | [string, string] | [string, string, string] | \"random\";\r\n variant?: Variant;\r\n eyeShape?: FaceProps[\"eyeShape\"];\r\n mouthShape?: FaceProps[\"mouthShape\"];\r\n pupilColor?: string | \"auto\";\r\n eyeShine?: boolean;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n title?: string;\r\n};\r\n\r\nfunction cyrb128(str: string) {\r\n let h1 = 1779033703,\r\n h2 = 3144134277,\r\n h3 = 1013904242,\r\n h4 = 2773480762;\r\n for (let i = 0, k; i < str.length; i++) {\r\n k = str.charCodeAt(i);\r\n h1 = h2 ^ Math.imul(h1 ^ k, 597399067);\r\n h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);\r\n h3 = h4 ^ Math.imul(h3 ^ k, 951274213);\r\n h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);\r\n }\r\n h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);\r\n h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);\r\n h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);\r\n h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);\r\n return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];\r\n}\r\nfunction sfc32(a: number, b: number, c: number, d: number) {\r\n return function () {\r\n a >>>= 0;\r\n b >>>= 0;\r\n c >>>= 0;\r\n d >>>= 0;\r\n let t = (a + b) | 0;\r\n a = b ^ (b >>> 9);\r\n b = (c + (c << 3)) | 0;\r\n c = (c << 21) | (c >>> 11);\r\n d = (d + 1) | 0;\r\n t = (t + d) | 0;\r\n c = (c + t) | 0;\r\n return (t >>> 0) / 4294967296;\r\n };\r\n}\r\nfunction rngFromSeed(seed: string) {\r\n const [a, b, c, d] = cyrb128(seed || \"pixelpeeps\");\r\n return sfc32(a, b, c, d);\r\n}\r\nfunction pick<T>(rand: () => number, arr: T[]) {\r\n return arr[Math.floor(rand() * arr.length)];\r\n}\r\n\r\nfunction hexToRgb(hex: string) {\r\n const h = hex.replace(\"#\", \"\");\r\n const full = h.length === 3 ? h.split(\"\").map((c) => c + c).join(\"\") : h;\r\n const n = parseInt(full, 16);\r\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };\r\n}\r\nfunction rgbToHex(r: number, g: number, b: number) {\r\n return \"#\" + [r, g, b].map((v) => v.toString(16).padStart(2, \"0\")).join(\"\");\r\n}\r\nfunction shade(hex: string, percent: number) {\r\n const { r, g, b } = hexToRgb(hex);\r\n const t = percent < 0 ? 0 : 255;\r\n const p = Math.abs(percent);\r\n return rgbToHex(\r\n Math.round((t - r) * p) + r,\r\n Math.round((t - g) * p) + g,\r\n Math.round((t - b) * p) + b\r\n );\r\n}\r\nfunction yiq(hex: string) {\r\n const { r, g, b } = hexToRgb(hex);\r\n return (r * 299 + g * 587 + b * 114) / 1000;\r\n}\r\n\r\nconst NICE_PALETTES: string[][] =\r\n palettes100 && Array.isArray(palettes100)\r\n ? (palettes100 as string[][])\r\n : [[\"#73a9ff\", \"#fef3c7\", \"#ffd6a5\", \"#d4b4ff\", \"#a7f3d0\"]];\r\n\r\nfunction resolveBg(rand: () => number, bg?: AvatarProps[\"bg\"]): [string, string] {\r\n if (!bg || bg === \"random\") {\r\n return pick(rand, NICE_PALETTES).slice(0, 2) as [string, string];\r\n }\r\n if (Array.isArray(bg)) return [bg[0], bg[1] ?? bg[0]];\r\n return [shade(bg, 0.12), shade(bg, -0.06)];\r\n}\r\nfunction resolveCharColors(rand: () => number, colors?: AvatarProps[\"colors\"]): [string, string, string] {\r\n if (!colors || colors === \"random\") {\r\n const pal = pick(rand, NICE_PALETTES);\r\n const base = pal[0];\r\n const a1 = pal[1] ?? shade(base, 0.25);\r\n const a2 = pal[2] ?? shade(base, -0.2);\r\n return [base, a1, a2];\r\n }\r\n if (typeof colors === \"string\") {\r\n return [colors, shade(colors, 0.25), shade(colors, -0.2)];\r\n }\r\n const base = (colors as string[])[0];\r\n const a1 = (colors as string[])[1] ?? shade(base, 0.25);\r\n const a2 = (colors as string[])[2] ?? shade(base, -0.2);\r\n return [base, a1, a2];\r\n}\r\n\r\nfunction Face({\r\n cx,\r\n cy,\r\n r,\r\n color,\r\n eyeShape: eyeShapeProp,\r\n mouthShape: mouthShapeProp,\r\n pupilColor,\r\n eyeShine: eyeShineProp,\r\n rand,\r\n}: FaceProps) {\r\n const decide = <T,>(prop: T | \"random\" | undefined, opts: T[]) => {\r\n if (prop === undefined || prop === \"random\") return pick(rand, opts);\r\n return prop;\r\n };\r\n\r\n const eyeShape = decide(eyeShapeProp ?? \"random\", [\"circle\", \"ellipse\", \"line\", \"wink\", \"sleepy\", \"surprised\"]);\r\n const mouthShape = decide(mouthShapeProp ?? \"random\", [\"smile\", \"frown\", \"flat\", \"zigzag\"]);\r\n const eyeShine = decide(eyeShineProp ?? \"random\", [true, false]);\r\n\r\n const eyeOffsetX = r * 0.36;\r\n const eyeOffsetY = r * 0.22;\r\n const eyeR = Math.max(2, r * 0.08);\r\n const pupilR = eyeR * 0.5;\r\n const mouthWidth = r * 0.7;\r\n const mouthLift = r * 0.2;\r\n const mouthStroke = Math.max(1, Math.round(r * 0.06));\r\n\r\n const finalPupilColor = pupilColor && pupilColor !== \"auto\" ? pupilColor : yiq(color) > 150 ? \"#111827\" : \"#ffffff\";\r\n const x0 = cx - mouthWidth / 2;\r\n const x1 = cx + mouthWidth / 2;\r\n const my = cy + mouthLift;\r\n\r\n const mouthPaths = {\r\n smile: `M ${x0} ${my} Q ${cx} ${my - r * 0.2} ${x1} ${my}`,\r\n frown: `M ${x0} ${my} Q ${cx} ${my + r * 0.2} ${x1} ${my}`,\r\n flat: `M ${x0} ${my} L ${x1} ${my}`,\r\n zigzag: (() => {\r\n const segs = 6;\r\n const step = mouthWidth / (segs - 1);\r\n let d = `M ${x0} ${my}`;\r\n for (let i = 1; i < segs; i++) {\r\n const px = x0 + step * i;\r\n const py = my + (i % 2 === 0 ? -r * 0.08 : r * 0.08);\r\n d += ` L ${px} ${py}`;\r\n }\r\n return d;\r\n })(),\r\n };\r\n\r\n const drawEye = (ex: number, ey: number, key: string) => {\r\n switch (eyeShape) {\r\n case \"ellipse\":\r\n return <ellipse key={key} cx={ex} cy={ey} rx={eyeR * 1.1} ry={eyeR * 0.7} fill={color} />;\r\n case \"line\":\r\n return <line key={key} x1={ex - eyeR} y1={ey} x2={ex + eyeR} y2={ey} stroke={color} strokeWidth={eyeR * 0.5} strokeLinecap=\"round\" />;\r\n case \"wink\":\r\n return <line key={key} x1={ex - eyeR} y1={ey} x2={ex + eyeR} y2={ey} stroke={color} strokeWidth={eyeR * 0.5} strokeLinecap=\"round\" />;\r\n case \"sleepy\":\r\n return <ellipse key={key} cx={ex} cy={ey} rx={eyeR * 1.05} ry={eyeR * 0.45} fill={color} />;\r\n case \"surprised\":\r\n return <circle key={key} cx={ex} cy={ey} r={eyeR * 1.1} fill={color} />;\r\n default:\r\n return <circle key={key} cx={ex} cy={ey} r={eyeR} fill={color} />;\r\n }\r\n };\r\n\r\n const leftEye = drawEye(cx - eyeOffsetX, cy - eyeOffsetY, \"le\");\r\n const rightEye = drawEye(cx + eyeOffsetX, cy - eyeOffsetY, \"re\");\r\n\r\n const pupils = (\r\n <>\r\n <circle cx={cx - eyeOffsetX} cy={cy - eyeOffsetY} r={pupilR} fill={finalPupilColor} />\r\n <circle cx={cx + eyeOffsetX} cy={cy - eyeOffsetY} r={pupilR} fill={finalPupilColor} />\r\n </>\r\n );\r\n\r\n const shine = eyeShine ? (\r\n <>\r\n <circle cx={cx - eyeOffsetX - pupilR * 0.4} cy={cy - eyeOffsetY - pupilR * 0.6} r={pupilR * 0.3} fill=\"#fff\" opacity={0.8} />\r\n <circle cx={cx + eyeOffsetX - pupilR * 0.4} cy={cy - eyeOffsetY - pupilR * 0.6} r={pupilR * 0.3} fill=\"#fff\" opacity={0.8} />\r\n </>\r\n ) : null;\r\n\r\n const mouth = <path d={mouthPaths[mouthShape]} stroke={color} strokeWidth={mouthStroke} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />;\r\n\r\n return (\r\n <>\r\n {leftEye}\r\n {rightEye}\r\n {pupils}\r\n {shine}\r\n {mouth}\r\n </>\r\n );\r\n}\r\n\r\nexport default function Avatar({ name, size = 120, bg = \"random\", colors = \"random\" }: AvatarProps) {\r\n const rand = rngFromSeed(name);\r\n const [bg1, bg2] = resolveBg(rand, bg);\r\n const [base] = resolveCharColors(rand, colors);\r\n const cx = size / 2;\r\n const cy = size / 2;\r\n\r\n return (\r\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} style={{ borderRadius: \"50%\", background: `linear-gradient(135deg, ${bg1}, ${bg2})` }}>\r\n <Face cx={cx} cy={cy} r={size / 3} color={base} rand={rand} />\r\n </svg>\r\n );\r\n}\r\n"],"mappings":"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","names":["palettes100","base","a1","a2"]}