solfaces 2.1.2 → 2.3.0
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/README.md +61 -35
- package/SKILL.md +4 -5
- package/dist/agent/index.cjs +14 -15
- package/dist/agent/index.js +4 -5
- package/dist/agent/mcp-server.cjs +333 -339
- package/dist/{chunk-5DT27HMT.js → chunk-2KW35VRI.js} +3 -3
- package/dist/{chunk-5DT27HMT.js.map → chunk-2KW35VRI.js.map} +1 -1
- package/dist/{chunk-4YFZ4W2Y.cjs → chunk-BI3GHRKQ.cjs} +22 -23
- package/dist/chunk-BI3GHRKQ.cjs.map +1 -0
- package/dist/{chunk-DRUSCLEF.js → chunk-MYUSB4LA.js} +28 -8
- package/dist/chunk-MYUSB4LA.js.map +1 -0
- package/dist/{chunk-3CE7Q44S.js → chunk-N5GDLCCL.js} +324 -110
- package/dist/chunk-N5GDLCCL.js.map +1 -0
- package/dist/{chunk-66PSL4YO.js → chunk-O2IIBSQH.js} +9 -10
- package/dist/chunk-O2IIBSQH.js.map +1 -0
- package/dist/{chunk-6QRDULAO.cjs → chunk-PCSRDAWQ.cjs} +28 -7
- package/dist/chunk-PCSRDAWQ.cjs.map +1 -0
- package/dist/{chunk-WIXGHS77.cjs → chunk-T7HEUW2O.cjs} +6 -6
- package/dist/{chunk-WIXGHS77.cjs.map → chunk-T7HEUW2O.cjs.map} +1 -1
- package/dist/{chunk-N5DDJ3WQ.js → chunk-UTT764K6.js} +10 -9
- package/dist/{chunk-N5DDJ3WQ.js.map → chunk-UTT764K6.js.map} +1 -1
- package/dist/{chunk-F54WHRCE.cjs → chunk-W2U6ITMR.cjs} +328 -110
- package/dist/chunk-W2U6ITMR.cjs.map +1 -0
- package/dist/{chunk-XXJJH56O.cjs → chunk-YGD7EQEX.cjs} +10 -9
- package/dist/{chunk-XXJJH56O.cjs.map → chunk-YGD7EQEX.cjs.map} +1 -1
- package/dist/core/index.cjs +43 -44
- package/dist/core/index.d.cts +39 -5
- package/dist/core/index.d.ts +39 -5
- package/dist/core/index.js +2 -3
- package/dist/index.cjs +61 -58
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +5 -6
- package/dist/names/index.cjs +9 -9
- package/dist/names/index.d.cts +4 -2
- package/dist/names/index.d.ts +4 -2
- package/dist/names/index.js +1 -1
- package/dist/react/index.cjs +112 -125
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +23 -1
- package/dist/react/index.d.ts +23 -1
- package/dist/react/index.js +96 -109
- package/dist/react/index.js.map +1 -1
- package/dist/solfaces.cdn.global.js +2 -2
- package/dist/solfaces.cdn.global.js.map +1 -1
- package/dist/themes/index.cjs +18 -14
- package/dist/themes/index.d.cts +30 -4
- package/dist/themes/index.d.ts +30 -4
- package/dist/themes/index.js +1 -1
- package/dist/traits-D4tbtZIr.d.cts +259 -0
- package/dist/traits-D4tbtZIr.d.ts +259 -0
- package/dist/vanilla/index.cjs +6 -7
- package/dist/vanilla/index.cjs.map +1 -1
- package/dist/vanilla/index.d.cts +1 -1
- package/dist/vanilla/index.d.ts +1 -1
- package/dist/vanilla/index.js +2 -3
- package/dist/vanilla/index.js.map +1 -1
- package/package.json +4 -1
- package/python/solfaces.py +108 -122
- package/reference/integrations.md +1 -1
- package/dist/chunk-3CE7Q44S.js.map +0 -1
- package/dist/chunk-4YFZ4W2Y.cjs.map +0 -1
- package/dist/chunk-66PSL4YO.js.map +0 -1
- package/dist/chunk-6QRDULAO.cjs.map +0 -1
- package/dist/chunk-CKHLRORB.js +0 -239
- package/dist/chunk-CKHLRORB.js.map +0 -1
- package/dist/chunk-DRUSCLEF.js.map +0 -1
- package/dist/chunk-F54WHRCE.cjs.map +0 -1
- package/dist/chunk-TYTBYDQU.cjs +0 -244
- package/dist/chunk-TYTBYDQU.cjs.map +0 -1
- package/dist/traits-sfe7rM9C.d.cts +0 -106
- package/dist/traits-sfe7rM9C.d.ts +0 -106
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/themes/presets.ts"],"names":[],"mappings":"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","file":"chunk-DRUSCLEF.js","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — Preset Themes\n// ═══════════════════════════════════════════════════════════════\n\nimport type { SolFaceTheme } from \"../core/traits\";\n\n// ─── Default (base look — gradients, no overrides) ─\n\nexport const defaultTheme: SolFaceTheme = {};\n\n// ─── Base Themes ────────────────────────────────\n\nexport const darkTheme: SolFaceTheme = {\n bgColors: [\"#1a1b23\", \"#1e1428\", \"#0a1e38\", \"#1b2838\", \"#201028\",\n \"#141a28\", \"#18122a\", \"#1a2020\", \"#221822\", \"#1e1020\"],\n eyeWhiteColor: \"#d8d0c8\",\n bgOpacity: 1,\n bgRadius: 4,\n border: { color: \"#333340\", width: 0.5 },\n};\n\nexport const lightTheme: SolFaceTheme = {\n bgColors: [\"#f5e8ea\", \"#f0f0d8\", \"#e4f0e6\", \"#d8f0e8\", \"#e0ece8\",\n \"#dce8f0\", \"#e0e4f0\", \"#e0d8f0\", \"#f0e0ee\", \"#f0d8e4\"],\n bgOpacity: 1,\n bgRadius: 8,\n};\n\nexport const monoTheme: SolFaceTheme = {\n skinColors: [\"#e8e8e8\", \"#d4d4d4\", \"#c0c0c0\", \"#a8a8a8\", \"#909090\",\n \"#787878\", \"#606060\", \"#505050\", \"#404040\", \"#303030\"],\n eyeColors: [\"#333\", \"#555\", \"#777\", \"#999\", \"#bbb\"],\n hairColors: [\"#1a1a1a\", \"#2a2a2a\", \"#404040\", \"#555\", \"#707070\",\n \"#888\", \"#a0a0a0\", \"#b8b8b8\", \"#d0d0d0\", \"#e0e0e0\"],\n bgColors: [\"#e8e0e0\", \"#e0e0d0\", \"#d8e0d8\", \"#d0e0d8\", \"#d8e0e0\",\n \"#d0d8e0\", \"#d4d4e0\", \"#d4d0e0\", \"#e0d8e0\", \"#e0d0d8\"],\n mouthColor: \"#666\",\n eyebrowColor: \"#555\",\n accessoryColor: \"#777\",\n eyeWhiteColor: \"#f0f0f0\",\n bgOpacity: 0.5,\n bgRadius: 4,\n};\n\nexport const flatTheme: SolFaceTheme = {\n flat: true,\n};\n\nexport const transparentTheme: SolFaceTheme = {\n flat: true,\n bgOpacity: 0,\n};\n\n// ─── React-Only: Liquid Glass ───────────────────\n\nexport const glassTheme: SolFaceTheme = {\n bgOpacity: 0.15,\n bgRadius: 16,\n _glass: true,\n _blurRadius: 12,\n _saturate: 1.8,\n _tintOpacity: 0.12,\n _tintColor: \"rgba(255,255,255,1)\",\n _borderOpacity: 0.25,\n _borderWidth: 1,\n _borderColor: \"rgba(255,255,255,0.25)\",\n _specularOpacity: 0.25,\n _specularColor: \"rgba(255,255,255,1)\",\n _specularEnd: 50,\n _lightAngle: 135,\n _rimIntensity: 0.08,\n _shadow: \"0 8px 32px rgba(0,0,0,0.12)\",\n};\n\nexport const glassDarkTheme: SolFaceTheme = {\n bgOpacity: 0.2,\n bgRadius: 16,\n _glass: true,\n _blurRadius: 16,\n _saturate: 2.0,\n _tintOpacity: 0.08,\n _tintColor: \"rgba(0,0,0,1)\",\n _borderOpacity: 0.15,\n _borderWidth: 1,\n _borderColor: \"rgba(255,255,255,0.15)\",\n _specularOpacity: 0.15,\n _specularColor: \"rgba(255,255,255,1)\",\n _specularEnd: 40,\n _lightAngle: 135,\n _rimIntensity: 0.05,\n _shadow: \"0 8px 32px rgba(0,0,0,0.25)\",\n};\n\n// ─── React-Only: Pixel Art ──────────────────────\n\nexport const pixelTheme: SolFaceTheme = {\n flat: true,\n _pixel: true,\n _pixelDensity: 16,\n _pixelRounded: true,\n _pixelOutline: true,\n _pixelOutlineColor: \"#222\",\n _pixelOutlineWidth: 2,\n};\n\nexport const pixelRetroTheme: SolFaceTheme = {\n flat: true,\n _pixel: true,\n _pixelDensity: 12,\n _pixelRounded: false,\n _pixelOutline: true,\n _pixelOutlineColor: \"#000\",\n _pixelOutlineWidth: 2,\n _pixelScanlines: true,\n _pixelScanlineOpacity: 0.1,\n _pixelScanlineSpacing: 2,\n _pixelShadow: true,\n _pixelShadowColor: \"rgba(0,0,0,0.4)\",\n _pixelShadowOffset: 3,\n};\n\nexport const pixelCleanTheme: SolFaceTheme = {\n flat: true,\n _pixel: true,\n _pixelDensity: 24,\n _pixelRounded: true,\n _pixelOutline: false,\n};\n\n// ─── Theme Map ──────────────────────────────────\n\nexport const PRESET_THEMES: Record<string, SolFaceTheme> = {\n default: defaultTheme,\n dark: darkTheme,\n light: lightTheme,\n mono: monoTheme,\n flat: flatTheme,\n transparent: transparentTheme,\n glass: glassTheme,\n glassDark: glassDarkTheme,\n pixel: pixelTheme,\n pixelRetro: pixelRetroTheme,\n pixelClean: pixelCleanTheme,\n};\n\nexport function getPresetTheme(\n name: string,\n overrides?: Partial<SolFaceTheme>,\n): SolFaceTheme {\n const base = PRESET_THEMES[name];\n if (!base) return (overrides as SolFaceTheme) ?? {};\n return overrides ? { ...base, ...overrides } : base;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/traits.ts","../src/core/colors.ts","../src/core/renderer.ts"],"names":["djb2"],"mappings":"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","file":"chunk-F54WHRCE.cjs","sourcesContent":["// ═══════════════════════════════════════════════════\n// SOLFACES v2 — Deterministic avatar trait engine\n// ═══════════════════════════════════════════════════\n\n// ─── Types ────────────────────────────────────────\n\nexport interface SolFaceTraits {\n faceShape: number; // 0-3 (consumed for PRNG ordering, all render as squircle)\n skinColor: number; // 0-9\n eyeStyle: number; // 0-7\n eyeColor: number; // 0-4\n eyebrows: number; // 0-4\n nose: number; // 0-3\n mouth: number; // 0-7\n hairStyle: number; // 0-9\n hairColor: number; // 0-9\n accessory: number; // 0-9\n bgColor: number; // 0-9\n}\n\nexport interface SolFaceTheme {\n // Palette overrides\n skinColors?: string[];\n eyeColors?: string[];\n hairColors?: string[];\n bgColors?: string[];\n\n // Single-color overrides\n mouthColor?: string;\n eyebrowColor?: string;\n accessoryColor?: string;\n eyeWhiteColor?: string;\n noseColor?: string;\n glassesColor?: string;\n earringColor?: string;\n headbandColor?: string;\n\n // Layout\n bgOpacity?: number;\n bgRadius?: number;\n border?: { color: string; width: number };\n\n // Rendering options\n flat?: boolean;\n cheekEnabled?: boolean;\n cheekColor?: string;\n cheekOpacity?: number;\n skinOpacity?: number;\n shadowEnabled?: boolean;\n glowIntensity?: number;\n\n // React-only: pixel art mode\n _pixel?: boolean;\n _pixelDensity?: number;\n _pixelRounded?: boolean;\n _pixelOutline?: boolean;\n _pixelOutlineColor?: string;\n _pixelOutlineWidth?: number;\n _pixelContrast?: number;\n _pixelSaturation?: number;\n _pixelBrightness?: number;\n _pixelScanlines?: boolean;\n _pixelScanlineOpacity?: number;\n _pixelScanlineSpacing?: number;\n _pixelGrid?: boolean;\n _pixelGridOpacity?: number;\n _pixelGridColor?: string;\n _pixelShadow?: boolean;\n _pixelShadowColor?: string;\n _pixelShadowOffset?: number;\n\n // React-only: liquid glass mode\n _glass?: boolean;\n _blurRadius?: number;\n _saturate?: number;\n _tintOpacity?: number;\n _tintColor?: string;\n _borderOpacity?: number;\n _borderWidth?: number;\n _borderColor?: string;\n _specularOpacity?: number;\n _specularColor?: string;\n _specularEnd?: number;\n _lightAngle?: number;\n _rimIntensity?: number;\n _shadow?: string;\n}\n\nexport interface RenderOptions {\n size?: number;\n theme?: SolFaceTheme;\n traitOverrides?: Partial<SolFaceTraits>;\n enableBlink?: boolean | {\n duration?: number;\n delay?: number;\n };\n className?: string;\n detail?: \"full\" | \"simplified\" | \"auto\";\n colorOverrides?: {\n skin?: string;\n eyes?: string;\n hair?: string;\n bg?: string;\n mouth?: string;\n eyebrow?: string;\n accessory?: string;\n nose?: string;\n eyeWhite?: string;\n };\n}\n\n// ─── Color Palettes ──────────────────────────────\n\nexport const SKIN_COLORS = [\n \"#faeae5\", \"#efd6c8\", \"#e4c5aa\", \"#d5b590\", \"#c59e77\",\n \"#b4875f\", \"#9d6d4d\", \"#805742\", \"#654134\", \"#4b2d25\",\n];\n\nexport const EYE_COLORS = [\n \"#382414\", \"#3868A8\", \"#38784C\", \"#808838\", \"#586878\",\n];\n\nexport const HAIR_COLORS = [\n \"#1A1A24\", \"#4C3428\", \"#887058\", \"#D4B868\", \"#A84830\",\n \"#C0C0CC\", \"#484858\", \"#783850\", \"#D8B0A0\", \"#C08048\",\n];\n\nexport const BG_COLORS = [\n \"#b98387\", \"#a9a360\", \"#9eb785\", \"#69ab79\", \"#81bbb0\",\n \"#6499af\", \"#7f8bbd\", \"#8869ab\", \"#b785b3\", \"#ab6984\",\n];\n\n// ─── Hashing (djb2) ─────────────────────────────\n\nfunction djb2(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0;\n }\n return hash >>> 0;\n}\n\n// ─── PRNG (mulberry32) ──────────────────────────\n\nfunction mulberry32(seed: number): () => number {\n let s = seed | 0;\n return () => {\n s = (s + 0x6d2b79f5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n// ─── Trait Generation ───────────────────────────\n\nexport function generateTraits(\n walletAddress: string,\n overrides?: Partial<SolFaceTraits>\n): SolFaceTraits {\n const seed = djb2(walletAddress);\n const rand = mulberry32(seed);\n\n // IMPORTANT: Order must NEVER change — shifts all downstream values.\n // faceShape is consumed for PRNG ordering but unused in rendering (all squircle).\n const traits: SolFaceTraits = {\n faceShape: Math.floor(rand() * 4),\n skinColor: Math.floor(rand() * 10),\n eyeStyle: Math.floor(rand() * 8),\n eyeColor: Math.floor(rand() * 5),\n eyebrows: Math.floor(rand() * 5),\n nose: Math.floor(rand() * 4),\n mouth: Math.floor(rand() * 8),\n hairStyle: Math.floor(rand() * 10),\n hairColor: Math.floor(rand() * 10),\n accessory: Math.floor(rand() * 10),\n bgColor: Math.floor(rand() * 10),\n };\n\n return overrides ? { ...traits, ...overrides } : traits;\n}\n\n// ─── Effective Accessory ────────────────────────\n// Earrings/studs are suppressed on long/bob hair\n\nexport function effectiveAccessory(traits: SolFaceTraits): number {\n const ai = traits.accessory % 10;\n const hi = traits.hairStyle % 10;\n if ((ai === 4 || ai === 7) && (hi === 5 || hi === 6)) return 0;\n return ai;\n}\n\n// ─── Trait Labels ───────────────────────────────\n\nconst FACE_LABELS = [\"Squircle\"];\nconst SKIN_LABELS = [\n \"Porcelain\", \"Ivory\", \"Fair\", \"Light\", \"Sand\",\n \"Golden\", \"Warm\", \"Caramel\", \"Brown\", \"Deep\",\n];\nconst EYE_STYLE_LABELS = [\"Round\", \"Minimal\", \"Almond\", \"Wide\", \"Relaxed\", \"Joyful\", \"Bright\", \"Gentle\"];\nconst EYE_COLOR_LABELS = [\"Chocolate\", \"Sky\", \"Emerald\", \"Hazel\", \"Storm\"];\nconst BROW_LABELS = [\"Wispy\", \"Straight\", \"Natural\", \"Arched\", \"Angled\"];\nconst NOSE_LABELS = [\"Shadow\", \"Button\", \"Soft\", \"Nostrils\"];\nconst MOUTH_LABELS = [\"Smile\", \"Calm\", \"Happy\", \"Oh\", \"Smirk\", \"Grin\", \"Flat\", \"Pout\"];\nconst HAIR_STYLE_LABELS = [\n \"Bald\", \"Short\", \"Curly\", \"Side Sweep\", \"Puff\",\n \"Long\", \"Bob\", \"Buzz\", \"Wavy\", \"Topknot\",\n];\nconst HAIR_COLOR_LABELS = [\n \"Black\", \"Espresso\", \"Walnut\", \"Honey\", \"Copper\",\n \"Silver\", \"Charcoal\", \"Burgundy\", \"Strawberry\", \"Ginger\",\n];\nconst ACCESSORY_LABELS = [\n \"None\", \"Beauty Mark\", \"Round Glasses\", \"Rect Glasses\", \"Earring\",\n \"Headband\", \"Freckles\", \"Stud Earrings\", \"Aviators\", \"Band-Aid\",\n];\nconst BG_COLOR_LABELS = [\n \"Rose\", \"Olive\", \"Sage\", \"Fern\", \"Mint\",\n \"Ocean\", \"Sky\", \"Lavender\", \"Orchid\", \"Blush\",\n];\n\nexport function getTraitLabels(traits: SolFaceTraits): Record<string, string> {\n return {\n faceShape: FACE_LABELS[0],\n skinColor: SKIN_LABELS[traits.skinColor] ?? \"Fair\",\n eyeStyle: EYE_STYLE_LABELS[traits.eyeStyle] ?? \"Round\",\n eyeColor: EYE_COLOR_LABELS[traits.eyeColor] ?? \"Chocolate\",\n eyebrows: BROW_LABELS[traits.eyebrows] ?? \"Wispy\",\n nose: NOSE_LABELS[traits.nose] ?? \"Shadow\",\n mouth: MOUTH_LABELS[traits.mouth] ?? \"Smile\",\n hairStyle: HAIR_STYLE_LABELS[traits.hairStyle] ?? \"Bald\",\n hairColor: HAIR_COLOR_LABELS[traits.hairColor] ?? \"Black\",\n accessory: ACCESSORY_LABELS[effectiveAccessory(traits)] ?? \"None\",\n bgColor: BG_COLOR_LABELS[traits.bgColor] ?? \"Rose\",\n };\n}\n\n// ─── Trait Hash ─────────────────────────────────\n\nexport function traitHash(walletAddress: string): string {\n return (djb2(walletAddress) >>> 0).toString(16).padStart(8, \"0\");\n}\n\n// ─── Theme Utilities ────────────────────────────\n\nexport function resolveTheme(\n themeName?: string,\n themes?: Record<string, SolFaceTheme>\n): SolFaceTheme | undefined {\n if (!themeName || !themes) return undefined;\n return themes[themeName];\n}\n\nexport function mergeTheme(\n base: SolFaceTheme | null | undefined,\n overrides: SolFaceTheme | null | undefined\n): SolFaceTheme | null {\n if (!base) return overrides || null;\n if (!overrides) return base;\n return { ...base, ...overrides };\n}\n","// ═══════════════════════════════════════════════════════════════\n// Color math utilities for SolFaces v2\n// Shared by renderer.ts (string) and SolFace.tsx (React)\n// ═══════════════════════════════════════════════════════════════\n\nexport function hexToRgb(hex: string): [number, number, number] {\n const h = hex.replace(\"#\", \"\");\n return [\n parseInt(h.slice(0, 2), 16),\n parseInt(h.slice(2, 4), 16),\n parseInt(h.slice(4, 6), 16),\n ];\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return (\n \"#\" +\n [r, g, b]\n .map((v) =>\n Math.max(0, Math.min(255, Math.round(v)))\n .toString(16)\n .padStart(2, \"0\")\n )\n .join(\"\")\n );\n}\n\nexport function darken(hex: string, pct = 0.12): string {\n const [r, g, b] = hexToRgb(hex);\n return rgbToHex(r * (1 - pct), g * (1 - pct), b * (1 - pct));\n}\n\nexport function lighten(hex: string, pct = 0.15): string {\n const [r, g, b] = hexToRgb(hex);\n return rgbToHex(r + (255 - r) * pct, g + (255 - g) * pct, b + (255 - b) * pct);\n}\n\nexport function blend(a: string, b: string, t = 0.5): string {\n const [r1, g1, b1] = hexToRgb(a);\n const [r2, g2, b2] = hexToRgb(b);\n return rgbToHex(\n r1 + (r2 - r1) * t,\n g1 + (g2 - g1) * t,\n b1 + (b2 - b1) * t\n );\n}\n\nexport function luminance(hex: string): number {\n const [r, g, b] = hexToRgb(hex);\n return (r + g + b) / 3;\n}\n\nexport interface DerivedColors {\n skinHi: string;\n skinLo: string;\n skinMid: string;\n isDark: boolean;\n cheekColor: string;\n cheekOpacity: number;\n lipColor: string;\n noseFill: string;\n browColor: string;\n earFill: string;\n earShadow: string;\n eyeWhiteAdapted: string;\n lidColor: string;\n accessoryColor: string;\n}\n\nexport function deriveSkinColors(skin: string): DerivedColors {\n const sL = luminance(skin);\n const isDark = sL < 100;\n\n const skinHi = lighten(skin, 0.10);\n const skinLo = darken(skin, 0.22);\n const skinMid = darken(skin, 0.05);\n\n // Cheek: warm blush relative to skin\n const [sr, sg, sb] = hexToRgb(skin);\n let cheekColor: string;\n if (sL > 120) {\n const rB = sL > 180 ? 0.03 : 0.06;\n const gD = sL > 180 ? 0.30 : 0.28;\n const bD = sL > 180 ? 0.25 : 0.22;\n cheekColor = rgbToHex(\n Math.min(255, sr + sr * rB),\n Math.max(0, sg - sg * gD),\n Math.max(0, sb - sb * bD)\n );\n } else {\n cheekColor = rgbToHex(\n Math.min(255, sr + 50),\n Math.max(0, sg - 10),\n Math.max(0, sb - 5)\n );\n }\n const cheekOpacity = 0.15 + 0.18 * (1 - Math.min(1, sL / 240));\n\n // Lips: smooth skin-relative gradient\n const lipT = Math.max(0, Math.min(1, (sL - 60) / 180));\n const lipBase = blend(\"#D89090\", \"#A83848\", lipT);\n const midBoost = 1 - Math.abs(sL - 140) / 80;\n const lipBlend = (isDark ? 0.70 : 0.62) + Math.max(0, midBoost) * 0.12;\n const lipRaw = blend(skin, lipBase, Math.min(0.82, lipBlend));\n const [lr, lg, lb] = hexToRgb(lipRaw);\n const lipD = Math.abs(sr - lr) + Math.abs(sg - lg) + Math.abs(sb - lb);\n const lipColor = lipD < 60 ? blend(skin, lipBase, 0.78) : lipRaw;\n\n // Features\n const browColor = isDark ? lighten(skin, sL < 80 ? 0.35 : 0.25) : darken(skin, 0.55);\n const noseFill = isDark ? lighten(skin, 0.20) : darken(skin, 0.20);\n const earT = Math.max(0, Math.min(1, (sL - 100) / 60));\n const earFill = blend(lighten(skin, 0.08), skinMid, earT);\n const earShadow = darken(skin, 0.10 + 0.06 * (1 - Math.min(1, sL / 160)));\n const lidColor = isDark ? lighten(skin, 0.18) : darken(skin, 0.15);\n\n // Eye white: adapted to skin luminance\n const ewT = Math.max(0, Math.min(1, (sL - 60) / 180));\n const eyeWhiteAdapted = blend(\"#EDE8E0\", \"#FBF8F2\", ewT);\n\n // Accessory color: skin-warm neutral\n const warmth = sL > 140 ? 0.3 : sL > 100 ? 0.5 : 0.7;\n const accessoryColor = blend(\"#808890\", blend(skin, \"#B0A898\", 0.3), warmth);\n\n return {\n skinHi, skinLo, skinMid, isDark,\n cheekColor, cheekOpacity,\n lipColor, noseFill, browColor,\n earFill, earShadow,\n eyeWhiteAdapted, lidColor,\n accessoryColor,\n };\n}\n\n/** Compute buzz cut opacity — higher when hair/skin contrast is low */\nexport function buzzOpacity(hairCol: string, skin: string): number {\n const [hr, hg, hb] = hexToRgb(hairCol);\n const [sr, sg, sb] = hexToRgb(skin);\n return Math.abs(hr - sr) + Math.abs(hg - sg) + Math.abs(hb - sb) < 80\n ? 0.70\n : 0.50;\n}\n","// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — SVG String Renderer\n// Gradient-rich, skin-luminance-driven avatar rendering.\n// Generates SVG markup as strings for server-side and non-React use.\n// ═══════════════════════════════════════════════════════════════\n\nimport {\n generateTraits,\n effectiveAccessory,\n SKIN_COLORS,\n EYE_COLORS,\n HAIR_COLORS,\n BG_COLORS,\n type RenderOptions,\n} from \"./traits\";\nimport { deriveSkinColors, darken, lighten, blend, buzzOpacity } from \"./colors\";\n\nexport type { RenderOptions } from \"./traits\";\n\n// ─── Helpers ────────────────────────────────────\n\nfunction djb2(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0;\n }\n return hash >>> 0;\n}\n\n// ─── Gradient Defs ──────────────────────────────\n\nfunction buildDefs(\n id: string,\n skin: string,\n skinHi: string,\n skinLo: string,\n hairCol: string,\n bgCol: string,\n cheekColor: string,\n cheekOpacity: number,\n flat: boolean,\n full: boolean,\n glowIntensity: number,\n): string {\n if (flat) return \"\";\n\n let d = \"<defs>\";\n\n // Skin gradient (top → bottom)\n d += `<linearGradient id=\"${id}sg\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">`;\n d += `<stop offset=\"0%\" stop-color=\"${skinHi}\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"${skinLo}\"/>`;\n d += `</linearGradient>`;\n\n // Hair gradient\n d += `<linearGradient id=\"${id}hg\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">`;\n d += `<stop offset=\"0%\" stop-color=\"${lighten(hairCol, 0.15)}\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"${darken(hairCol, 0.15)}\"/>`;\n d += `</linearGradient>`;\n\n // BG gradient\n d += `<linearGradient id=\"${id}bg\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">`;\n d += `<stop offset=\"0%\" stop-color=\"${lighten(bgCol, 0.12)}\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"${darken(bgCol, 0.12)}\"/>`;\n d += `</linearGradient>`;\n\n if (full) {\n // Glow (radial, top center)\n d += `<radialGradient id=\"${id}glow\" cx=\"0.5\" cy=\"0.28\" r=\"0.45\">`;\n d += `<stop offset=\"0%\" stop-color=\"#ffffff\" stop-opacity=\"${glowIntensity}\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"#ffffff\" stop-opacity=\"0\"/>`;\n d += `</radialGradient>`;\n\n // Chin shadow\n d += `<radialGradient id=\"${id}chin\" cx=\"0.5\" cy=\"0.85\" r=\"0.35\">`;\n d += `<stop offset=\"0%\" stop-color=\"${skinLo}\" stop-opacity=\"0.30\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"${skinLo}\" stop-opacity=\"0\"/>`;\n d += `</radialGradient>`;\n\n // Cheek L\n d += `<radialGradient id=\"${id}cL\" cx=\"0.5\" cy=\"0.5\" r=\"0.5\">`;\n d += `<stop offset=\"0%\" stop-color=\"${cheekColor}\" stop-opacity=\"${cheekOpacity.toFixed(2)}\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"${cheekColor}\" stop-opacity=\"0\"/>`;\n d += `</radialGradient>`;\n\n // Cheek R\n d += `<radialGradient id=\"${id}cR\" cx=\"0.5\" cy=\"0.5\" r=\"0.5\">`;\n d += `<stop offset=\"0%\" stop-color=\"${cheekColor}\" stop-opacity=\"${cheekOpacity.toFixed(2)}\"/>`;\n d += `<stop offset=\"100%\" stop-color=\"${cheekColor}\" stop-opacity=\"0\"/>`;\n d += `</radialGradient>`;\n }\n\n d += \"</defs>\";\n return d;\n}\n\n// ─── Hair Back (behind face) ────────────────────\n\nfunction renderHairBack(hi: number, id: string, flat: boolean): string {\n const fill = flat ? \"currentColor\" : `url(#${id}hg)`;\n switch (hi) {\n case 5: // Long\n return `<g fill=\"${fill}\"><rect x=\"10\" y=\"14\" width=\"44\" height=\"42\" rx=\"6\"/></g>`;\n case 6: // Bob\n return `<g fill=\"${fill}\"><rect x=\"12\" y=\"14\" width=\"40\" height=\"32\" rx=\"8\"/></g>`;\n case 8: // Wavy\n return `<g fill=\"${fill}\"><rect x=\"11\" y=\"14\" width=\"42\" height=\"38\" rx=\"8\"/></g>`;\n default:\n return \"\";\n }\n}\n\n// ─── Ears ───────────────────────────────────────\n\nfunction renderEars(earFill: string, earShadow: string): string {\n return (\n `<ellipse cx=\"11\" cy=\"34\" rx=\"4\" ry=\"5\" fill=\"${earFill}\"/>` +\n `<ellipse cx=\"11\" cy=\"34\" rx=\"2.5\" ry=\"3.5\" fill=\"${earShadow}\" opacity=\"0.3\"/>` +\n `<ellipse cx=\"53\" cy=\"34\" rx=\"4\" ry=\"5\" fill=\"${earFill}\"/>` +\n `<ellipse cx=\"53\" cy=\"34\" rx=\"2.5\" ry=\"3.5\" fill=\"${earShadow}\" opacity=\"0.3\"/>`\n );\n}\n\n// ─── Face ───────────────────────────────────────\n\nfunction renderFace(id: string, skin: string, flat: boolean, opacity: number = 1): string {\n const fill = flat ? skin : `url(#${id}sg)`;\n const opAttr = opacity < 1 ? ` opacity=\"${opacity}\"` : \"\";\n return `<rect x=\"14\" y=\"16\" width=\"36\" height=\"38\" rx=\"12\" ry=\"12\" fill=\"${fill}\"${opAttr}/>`;\n}\n\n// ─── Face Overlays (full detail) ────────────────\n\nfunction renderFaceOverlays(id: string, flat: boolean): string {\n if (flat) return \"\";\n return (\n `<rect x=\"14\" y=\"16\" width=\"36\" height=\"38\" rx=\"12\" ry=\"12\" fill=\"url(#${id}glow)\"/>` +\n `<rect x=\"14\" y=\"16\" width=\"36\" height=\"38\" rx=\"12\" ry=\"12\" fill=\"url(#${id}chin)\"/>` +\n `<ellipse cx=\"22\" cy=\"42\" rx=\"5\" ry=\"3.5\" fill=\"url(#${id}cL)\"/>` +\n `<ellipse cx=\"42\" cy=\"42\" rx=\"5\" ry=\"3.5\" fill=\"url(#${id}cR)\"/>` +\n `<line x1=\"20\" y1=\"50\" x2=\"44\" y2=\"50\" stroke=\"currentColor\" stroke-width=\"0.3\" opacity=\"0.08\" stroke-linecap=\"round\"/>`\n );\n}\n\n// ─── Hair Front ─────────────────────────────────\n\nfunction renderHairFront(hi: number, id: string, hairCol: string, skin: string, flat: boolean): string {\n const fill = flat ? hairCol : `url(#${id}hg)`;\n switch (hi) {\n case 0: return \"\"; // Bald\n case 1: // Short\n return `<path d=\"M14 28 Q14 14 32 12 Q50 14 50 28 L50 22 Q50 12 32 10 Q14 12 14 22 Z\" fill=\"${fill}\"/>`;\n case 2: // Curly\n return (\n `<g fill=\"${fill}\">` +\n `<circle cx=\"20\" cy=\"14\" r=\"5\"/>` +\n `<circle cx=\"28\" cy=\"11\" r=\"5.5\"/>` +\n `<circle cx=\"36\" cy=\"11\" r=\"5.5\"/>` +\n `<circle cx=\"44\" cy=\"14\" r=\"5\"/>` +\n `<circle cx=\"16\" cy=\"20\" r=\"4\"/>` +\n `<circle cx=\"48\" cy=\"20\" r=\"4\"/>` +\n `</g>`\n );\n case 3: // Side sweep\n return (\n `<path d=\"M14 26 Q14 12 32 10 Q50 12 50 26 L50 20 Q50 10 32 8 Q14 10 14 20 Z\" fill=\"${fill}\"/>` +\n `<path d=\"M14 20 Q8 16 10 8 Q14 10 20 16 Z\" fill=\"${fill}\"/>`\n );\n case 4: // Puff\n return `<ellipse cx=\"32\" cy=\"10\" rx=\"14\" ry=\"8\" fill=\"${fill}\"/>`;\n case 5: // Long\n return `<path d=\"M14 28 Q14 12 32 10 Q50 12 50 28 L50 20 Q50 10 32 8 Q14 10 14 20 Z\" fill=\"${fill}\"/>`;\n case 6: // Bob\n return (\n `<path d=\"M14 28 Q14 12 32 10 Q50 12 50 28 L50 20 Q50 10 32 8 Q14 10 14 20 Z\" fill=\"${fill}\"/>` +\n `<rect x=\"10\" y=\"28\" width=\"8\" height=\"14\" rx=\"4\" fill=\"${fill}\"/>` +\n `<rect x=\"46\" y=\"28\" width=\"8\" height=\"14\" rx=\"4\" fill=\"${fill}\"/>`\n );\n case 7: { // Buzz\n const bOp = buzzOpacity(hairCol, skin);\n return `<rect x=\"15\" y=\"13\" width=\"34\" height=\"16\" rx=\"10\" ry=\"8\" fill=\"${hairCol}\" opacity=\"${bOp.toFixed(2)}\"/>`;\n }\n case 8: // Wavy\n return (\n `<path d=\"M14 28 Q14 12 32 10 Q50 12 50 28 L50 20 Q50 10 32 8 Q14 10 14 20 Z\" fill=\"${fill}\"/>` +\n `<path d=\"M12 30 Q10 20 14 16\" fill=\"none\" stroke=\"${fill}\" stroke-width=\"4\" stroke-linecap=\"round\"/>` +\n `<path d=\"M52 30 Q54 20 50 16\" fill=\"none\" stroke=\"${fill}\" stroke-width=\"4\" stroke-linecap=\"round\"/>`\n );\n case 9: // Topknot\n return (\n `<path d=\"M14 28 Q14 14 32 12 Q50 14 50 28 L50 22 Q50 12 32 10 Q14 12 14 22 Z\" fill=\"${fill}\"/>` +\n `<ellipse cx=\"32\" cy=\"6\" rx=\"6\" ry=\"5\" fill=\"${fill}\"/>`\n );\n default: return \"\";\n }\n}\n\n// ─── Eyes ───────────────────────────────────────\n\nfunction renderEyes(\n ei: number,\n eyeCol: string,\n eyeWhite: string,\n lidColor: string,\n full: boolean,\n): string {\n const lx = 25, rx = 39, y = 33;\n let s = \"\";\n\n switch (ei) {\n case 0: // Round\n s += `<circle cx=\"${lx}\" cy=\"${y}\" r=\"4\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${lx + 0.8}\" cy=\"${y}\" r=\"2.2\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<circle cx=\"${lx + 1.5}\" cy=\"${y - 1}\" r=\"0.7\" fill=\"white\" opacity=\"0.8\"/>`;\n s += `<circle cx=\"${rx}\" cy=\"${y}\" r=\"4\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${rx + 0.8}\" cy=\"${y}\" r=\"2.2\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<circle cx=\"${rx + 1.5}\" cy=\"${y - 1}\" r=\"0.7\" fill=\"white\" opacity=\"0.8\"/>`;\n break;\n case 1: // Minimal\n s += `<circle cx=\"${lx}\" cy=\"${y}\" r=\"2\" fill=\"${eyeCol}\"/>`;\n s += `<circle cx=\"${rx}\" cy=\"${y}\" r=\"2\" fill=\"${eyeCol}\"/>`;\n break;\n case 2: // Almond\n s += `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"4.5\" ry=\"2.8\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${lx + 0.5}\" cy=\"${y}\" r=\"1.8\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<circle cx=\"${lx + 1.2}\" cy=\"${y - 0.8}\" r=\"0.6\" fill=\"white\" opacity=\"0.7\"/>`;\n s += `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"4.5\" ry=\"2.8\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${rx + 0.5}\" cy=\"${y}\" r=\"1.8\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<circle cx=\"${rx + 1.2}\" cy=\"${y - 0.8}\" r=\"0.6\" fill=\"white\" opacity=\"0.7\"/>`;\n break;\n case 3: // Wide\n s += `<circle cx=\"${lx}\" cy=\"${y}\" r=\"5\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${lx}\" cy=\"${y + 0.5}\" r=\"2.8\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<circle cx=\"${lx + 1.5}\" cy=\"${y - 1}\" r=\"0.8\" fill=\"white\" opacity=\"0.8\"/>`;\n s += `<circle cx=\"${rx}\" cy=\"${y}\" r=\"5\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${rx}\" cy=\"${y + 0.5}\" r=\"2.8\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<circle cx=\"${rx + 1.5}\" cy=\"${y - 1}\" r=\"0.8\" fill=\"white\" opacity=\"0.8\"/>`;\n break;\n case 4: // Relaxed\n s += `<ellipse cx=\"${lx}\" cy=\"${y + 1}\" rx=\"4\" ry=\"2.2\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${lx}\" cy=\"${y + 1}\" r=\"1.5\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<line x1=\"${lx - 4.5}\" y1=\"${y - 0.5}\" x2=\"${lx + 4.5}\" y2=\"${y - 0.5}\" stroke=\"${lidColor}\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>`;\n s += `<ellipse cx=\"${rx}\" cy=\"${y + 1}\" rx=\"4\" ry=\"2.2\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${rx}\" cy=\"${y + 1}\" r=\"1.5\" fill=\"${eyeCol}\"/>`;\n if (full) s += `<line x1=\"${rx - 4.5}\" y1=\"${y - 0.5}\" x2=\"${rx + 4.5}\" y2=\"${y - 0.5}\" stroke=\"${lidColor}\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>`;\n break;\n case 5: // Joyful\n s += `<path d=\"M${lx - 4} ${y} Q${lx} ${y + 4} ${lx + 4} ${y}\" fill=\"none\" stroke=\"${eyeCol}\" stroke-width=\"1.8\" stroke-linecap=\"round\"/>`;\n s += `<path d=\"M${rx - 4} ${y} Q${rx} ${y + 4} ${rx + 4} ${y}\" fill=\"none\" stroke=\"${eyeCol}\" stroke-width=\"1.8\" stroke-linecap=\"round\"/>`;\n break;\n case 6: // Bright\n s += `<circle cx=\"${lx}\" cy=\"${y}\" r=\"3.5\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${lx + 0.5}\" cy=\"${y}\" r=\"2\" fill=\"${eyeCol}\"/>`;\n s += `<circle cx=\"${lx + 1.5}\" cy=\"${y - 1}\" r=\"1\" fill=\"white\" opacity=\"0.9\"/>`;\n if (full) {\n s += `<line x1=\"${lx + 2.5}\" y1=\"${y - 3.5}\" x2=\"${lx + 4}\" y2=\"${y - 5}\" stroke=\"${eyeCol}\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>`;\n s += `<line x1=\"${lx + 3.5}\" y1=\"${y - 2.5}\" x2=\"${lx + 5}\" y2=\"${y - 3.5}\" stroke=\"${eyeCol}\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>`;\n }\n s += `<circle cx=\"${rx}\" cy=\"${y}\" r=\"3.5\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${rx + 0.5}\" cy=\"${y}\" r=\"2\" fill=\"${eyeCol}\"/>`;\n s += `<circle cx=\"${rx + 1.5}\" cy=\"${y - 1}\" r=\"1\" fill=\"white\" opacity=\"0.9\"/>`;\n if (full) {\n s += `<line x1=\"${rx + 2.5}\" y1=\"${y - 3.5}\" x2=\"${rx + 4}\" y2=\"${y - 5}\" stroke=\"${eyeCol}\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>`;\n s += `<line x1=\"${rx + 3.5}\" y1=\"${y - 2.5}\" x2=\"${rx + 5}\" y2=\"${y - 3.5}\" stroke=\"${eyeCol}\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>`;\n }\n break;\n case 7: // Gentle\n s += `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"4.5\" ry=\"1.5\" fill=\"${eyeWhite}\"/>`;\n s += `<ellipse cx=\"${lx + 0.5}\" cy=\"${y}\" rx=\"2.2\" ry=\"1.2\" fill=\"${eyeCol}\"/>`;\n s += `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"4.5\" ry=\"1.5\" fill=\"${eyeWhite}\"/>`;\n s += `<ellipse cx=\"${rx + 0.5}\" cy=\"${y}\" rx=\"2.2\" ry=\"1.2\" fill=\"${eyeCol}\"/>`;\n break;\n default:\n s += `<circle cx=\"${lx}\" cy=\"${y}\" r=\"3.5\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${lx + 0.8}\" cy=\"${y}\" r=\"2\" fill=\"${eyeCol}\"/>`;\n s += `<circle cx=\"${rx}\" cy=\"${y}\" r=\"3.5\" fill=\"${eyeWhite}\"/>`;\n s += `<circle cx=\"${rx + 0.8}\" cy=\"${y}\" r=\"2\" fill=\"${eyeCol}\"/>`;\n }\n\n // Eyelid strokes in full detail (except joyful/minimal)\n if (full && ei !== 1 && ei !== 5) {\n s += `<path d=\"M${lx - 4} ${y - 1.5} Q${lx} ${y - 4} ${lx + 4} ${y - 1.5}\" fill=\"none\" stroke=\"${lidColor}\" stroke-width=\"0.5\" opacity=\"0.4\"/>`;\n s += `<path d=\"M${rx - 4} ${y - 1.5} Q${rx} ${y - 4} ${rx + 4} ${y - 1.5}\" fill=\"none\" stroke=\"${lidColor}\" stroke-width=\"0.5\" opacity=\"0.4\"/>`;\n }\n\n return s;\n}\n\n// ─── Eyebrows ───────────────────────────────────\n\nfunction renderEyebrows(bi: number, browColor: string): string {\n const lx = 25, rx = 39, y = 27;\n switch (bi) {\n case 0: // Wispy\n return (\n `<line x1=\"${lx - 3}\" y1=\"${y}\" x2=\"${lx + 3}\" y2=\"${y - 0.5}\" stroke=\"${browColor}\" stroke-width=\"0.7\" stroke-linecap=\"round\"/>` +\n `<line x1=\"${rx - 3}\" y1=\"${y - 0.5}\" x2=\"${rx + 3}\" y2=\"${y}\" stroke=\"${browColor}\" stroke-width=\"0.7\" stroke-linecap=\"round\"/>`\n );\n case 1: // Straight\n return (\n `<line x1=\"${lx - 3.5}\" y1=\"${y}\" x2=\"${lx + 3.5}\" y2=\"${y}\" stroke=\"${browColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>` +\n `<line x1=\"${rx - 3.5}\" y1=\"${y}\" x2=\"${rx + 3.5}\" y2=\"${y}\" stroke=\"${browColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>`\n );\n case 2: // Natural\n return (\n `<path d=\"M${lx - 3.5} ${y + 0.5} Q${lx} ${y - 1.5} ${lx + 3.5} ${y + 0.5}\" fill=\"none\" stroke=\"${browColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>` +\n `<path d=\"M${rx - 3.5} ${y + 0.5} Q${rx} ${y - 1.5} ${rx + 3.5} ${y + 0.5}\" fill=\"none\" stroke=\"${browColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>`\n );\n case 3: // Arched\n return (\n `<path d=\"M${lx - 4} ${y + 1} Q${lx} ${y - 3} ${lx + 4} ${y + 1}\" fill=\"none\" stroke=\"${browColor}\" stroke-width=\"1\" stroke-linecap=\"round\"/>` +\n `<path d=\"M${rx - 4} ${y + 1} Q${rx} ${y - 3} ${rx + 4} ${y + 1}\" fill=\"none\" stroke=\"${browColor}\" stroke-width=\"1\" stroke-linecap=\"round\"/>`\n );\n case 4: // Angled\n return (\n `<polyline points=\"${lx - 3},${y + 1} ${lx},${y - 2} ${lx + 3},${y}\" fill=\"none\" stroke=\"${browColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>` +\n `<polyline points=\"${rx - 3},${y} ${rx},${y - 2} ${rx + 3},${y + 1}\" fill=\"none\" stroke=\"${browColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>`\n );\n default:\n return \"\";\n }\n}\n\n// ─── Nose ───────────────────────────────────────\n\nfunction renderNose(ni: number, noseFill: string): string {\n const cx = 32, y = 39;\n switch (ni) {\n case 0: // Shadow\n return `<ellipse cx=\"${cx}\" cy=\"${y}\" rx=\"2\" ry=\"1.2\" fill=\"${noseFill}\" opacity=\"0.35\"/>`;\n case 1: // Button\n return `<circle cx=\"${cx}\" cy=\"${y}\" r=\"1.8\" fill=\"${noseFill}\" opacity=\"0.5\"/>`;\n case 2: // Soft\n return `<path d=\"M${cx - 2} ${y + 1} Q${cx} ${y - 2} ${cx + 2} ${y + 1}\" fill=\"none\" stroke=\"${noseFill}\" stroke-width=\"1\" stroke-linecap=\"round\" opacity=\"0.5\"/>`;\n case 3: // Nostrils\n return (\n `<circle cx=\"${cx - 1.8}\" cy=\"${y}\" r=\"1.2\" fill=\"${noseFill}\" opacity=\"0.4\"/>` +\n `<circle cx=\"${cx + 1.8}\" cy=\"${y}\" r=\"1.2\" fill=\"${noseFill}\" opacity=\"0.4\"/>`\n );\n default:\n return `<ellipse cx=\"${cx}\" cy=\"${y}\" rx=\"2\" ry=\"1.2\" fill=\"${noseFill}\" opacity=\"0.35\"/>`;\n }\n}\n\n// ─── Mouth ──────────────────────────────────────\n\nfunction renderMouth(mi: number, lipColor: string, isDark: boolean): string {\n const cx = 32, y = 45;\n const teethCol = isDark ? \"#e8e0d8\" : \"#ffffff\";\n switch (mi) {\n case 0: // Smile\n return `<path d=\"M${cx - 4} ${y} Q${cx} ${y + 4} ${cx + 4} ${y}\" fill=\"none\" stroke=\"${lipColor}\" stroke-width=\"1.4\" stroke-linecap=\"round\"/>`;\n case 1: // Calm\n return `<line x1=\"${cx - 3}\" y1=\"${y + 1}\" x2=\"${cx + 3}\" y2=\"${y + 1}\" stroke=\"${lipColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>`;\n case 2: // Happy\n return `<path d=\"M${cx - 5} ${y} Q${cx} ${y + 5} ${cx + 5} ${y}\" fill=\"none\" stroke=\"${lipColor}\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>`;\n case 3: // Oh\n return `<ellipse cx=\"${cx}\" cy=\"${y + 1}\" rx=\"2.5\" ry=\"3\" fill=\"${lipColor}\" opacity=\"0.7\"/>`;\n case 4: // Smirk\n return `<path d=\"M${cx - 4} ${y + 1} Q${cx + 1} ${y + 1} ${cx + 4} ${y - 1.5}\" fill=\"none\" stroke=\"${lipColor}\" stroke-width=\"1.3\" stroke-linecap=\"round\"/>`;\n case 5: // Grin\n return (\n `<path d=\"M${cx - 5} ${y} Q${cx} ${y + 6} ${cx + 5} ${y}\" fill=\"${teethCol}\" stroke=\"${lipColor}\" stroke-width=\"1\"/>` +\n `<line x1=\"${cx - 4}\" y1=\"${y + 1.5}\" x2=\"${cx + 4}\" y2=\"${y + 1.5}\" stroke=\"${lipColor}\" stroke-width=\"0.3\" opacity=\"0.3\"/>`\n );\n case 6: // Flat\n return `<line x1=\"${cx - 4}\" y1=\"${y + 1}\" x2=\"${cx + 4}\" y2=\"${y + 1}\" stroke=\"${lipColor}\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>`;\n case 7: // Pout\n return (\n `<ellipse cx=\"${cx}\" cy=\"${y + 1}\" rx=\"3.5\" ry=\"2\" fill=\"${lipColor}\" opacity=\"0.25\"/>` +\n `<path d=\"M${cx - 3} ${y} Q${cx} ${y + 2.5} ${cx + 3} ${y}\" fill=\"none\" stroke=\"${lipColor}\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>`\n );\n default:\n return `<path d=\"M${cx - 4} ${y} Q${cx} ${y + 4} ${cx + 4} ${y}\" fill=\"none\" stroke=\"${lipColor}\" stroke-width=\"1.4\" stroke-linecap=\"round\"/>`;\n }\n}\n\n// ─── Accessories ────────────────────────────────\n\nfunction renderAccessory(\n ai: number,\n accessoryColor: string,\n glassesColor: string,\n earringColor: string,\n headbandColor: string,\n): string {\n switch (ai) {\n case 0: return \"\"; // None\n case 1: // Beauty mark\n return `<circle cx=\"40\" cy=\"44\" r=\"0.8\" fill=\"#3a2a2a\"/>`;\n case 2: // Round glasses\n return (\n `<g fill=\"none\" stroke=\"${glassesColor}\" stroke-width=\"1\">` +\n `<circle cx=\"25\" cy=\"33\" r=\"5.5\"/>` +\n `<circle cx=\"39\" cy=\"33\" r=\"5.5\"/>` +\n `<line x1=\"30.5\" y1=\"33\" x2=\"33.5\" y2=\"33\"/>` +\n `<line x1=\"19.5\" y1=\"33\" x2=\"14\" y2=\"31\"/>` +\n `<line x1=\"44.5\" y1=\"33\" x2=\"50\" y2=\"31\"/>` +\n `</g>`\n );\n case 3: // Rect glasses\n return (\n `<g fill=\"none\" stroke=\"${glassesColor}\" stroke-width=\"1\">` +\n `<rect x=\"19\" y=\"29\" width=\"12\" height=\"8\" rx=\"1.5\"/>` +\n `<rect x=\"33\" y=\"29\" width=\"12\" height=\"8\" rx=\"1.5\"/>` +\n `<line x1=\"31\" y1=\"33\" x2=\"33\" y2=\"33\"/>` +\n `<line x1=\"19\" y1=\"33\" x2=\"14\" y2=\"31\"/>` +\n `<line x1=\"45\" y1=\"33\" x2=\"50\" y2=\"31\"/>` +\n `</g>`\n );\n case 4: // Earring\n return (\n `<circle cx=\"10\" cy=\"38\" r=\"1.5\" fill=\"${earringColor}\"/>` +\n `<circle cx=\"10\" cy=\"41\" r=\"2\" fill=\"${earringColor}\" opacity=\"0.8\"/>`\n );\n case 5: // Headband\n return `<rect x=\"13\" y=\"20\" width=\"38\" height=\"3.5\" rx=\"1.5\" fill=\"${headbandColor}\" opacity=\"0.85\"/>`;\n case 6: // Freckles\n return (\n `<g fill=\"#a0785a\" opacity=\"0.35\">` +\n `<circle cx=\"21\" cy=\"40\" r=\"0.6\"/>` +\n `<circle cx=\"23\" cy=\"42\" r=\"0.5\"/>` +\n `<circle cx=\"19\" cy=\"41.5\" r=\"0.5\"/>` +\n `<circle cx=\"43\" cy=\"40\" r=\"0.6\"/>` +\n `<circle cx=\"41\" cy=\"42\" r=\"0.5\"/>` +\n `<circle cx=\"45\" cy=\"41.5\" r=\"0.5\"/>` +\n `</g>`\n );\n case 7: // Stud earrings\n return (\n `<circle cx=\"10\" cy=\"37\" r=\"1.2\" fill=\"${earringColor}\"/>` +\n `<circle cx=\"54\" cy=\"37\" r=\"1.2\" fill=\"${earringColor}\"/>`\n );\n case 8: // Aviators\n return (\n `<g fill=\"none\" stroke=\"${glassesColor}\" stroke-width=\"1.2\">` +\n `<path d=\"M19 30 Q19 28 25 28 Q31 28 31 33 Q31 38 25 38 Q19 38 19 33 Z\" fill=\"${glassesColor}\" fill-opacity=\"0.15\"/>` +\n `<path d=\"M33 30 Q33 28 39 28 Q45 28 45 33 Q45 38 39 38 Q33 38 33 33 Z\" fill=\"${glassesColor}\" fill-opacity=\"0.15\"/>` +\n `<line x1=\"31\" y1=\"32\" x2=\"33\" y2=\"32\"/>` +\n `<line x1=\"19\" y1=\"31\" x2=\"14\" y2=\"29\"/>` +\n `<line x1=\"45\" y1=\"31\" x2=\"50\" y2=\"29\"/>` +\n `</g>`\n );\n case 9: // Band-Aid\n return (\n `<g>` +\n `<rect x=\"38\" y=\"38\" width=\"8\" height=\"4\" rx=\"1\" fill=\"#f0d0a0\" transform=\"rotate(-15 42 40)\"/>` +\n `<line x1=\"40\" y1=\"39\" x2=\"40\" y2=\"41\" stroke=\"#c0a080\" stroke-width=\"0.4\" transform=\"rotate(-15 42 40)\"/>` +\n `<line x1=\"42\" y1=\"39\" x2=\"42\" y2=\"41\" stroke=\"#c0a080\" stroke-width=\"0.4\" transform=\"rotate(-15 42 40)\"/>` +\n `<line x1=\"44\" y1=\"39\" x2=\"44\" y2=\"41\" stroke=\"#c0a080\" stroke-width=\"0.4\" transform=\"rotate(-15 42 40)\"/>` +\n `</g>`\n );\n default:\n return \"\";\n }\n}\n\n// ─── Main Render Functions ──────────────────────\n\nexport function renderSolFaceSVG(\n walletAddress: string,\n options?: RenderOptions,\n): string {\n const { size = 64, theme, traitOverrides, enableBlink, className, colorOverrides } = options ?? {};\n const traits = generateTraits(walletAddress, traitOverrides);\n\n // Resolve detail level\n const detailOpt = options?.detail ?? \"auto\";\n const full = detailOpt === \"full\" || (detailOpt === \"auto\" && size >= 48);\n const flat = theme?.flat ?? false;\n\n // Color palettes\n const skinColors = theme?.skinColors ?? SKIN_COLORS;\n const eyeColors = theme?.eyeColors ?? EYE_COLORS;\n const hairColors = theme?.hairColors ?? HAIR_COLORS;\n const bgColors = theme?.bgColors ?? BG_COLORS;\n\n const skin = colorOverrides?.skin ?? skinColors[traits.skinColor % skinColors.length];\n const eyeCol = colorOverrides?.eyes ?? eyeColors[traits.eyeColor % eyeColors.length];\n const hairCol = colorOverrides?.hair ?? hairColors[traits.hairColor % hairColors.length];\n const bgCol = colorOverrides?.bg ?? bgColors[traits.bgColor % bgColors.length];\n\n // Derived skin colors\n const derived = deriveSkinColors(skin);\n\n const bgOpacity = theme?.bgOpacity ?? 1;\n const bgRadius = theme?.bgRadius ?? 4;\n const browColor = colorOverrides?.eyebrow ?? theme?.eyebrowColor ?? derived.browColor;\n const noseFill = colorOverrides?.nose ?? theme?.noseColor ?? derived.noseFill;\n const lipColor = colorOverrides?.mouth ?? theme?.mouthColor ?? derived.lipColor;\n const accColor = colorOverrides?.accessory ?? theme?.accessoryColor ?? derived.accessoryColor;\n const eyeWhite = colorOverrides?.eyeWhite ?? theme?.eyeWhiteColor ?? derived.eyeWhiteAdapted;\n const glassesColor = theme?.glassesColor ?? \"#4a4a5a\";\n const earringColor = theme?.earringColor ?? blend(skin, \"#d4a840\", 0.4);\n const headbandColor = theme?.headbandColor ?? blend(hairCol, \"#c04040\", 0.5);\n\n // Unique gradient ID prefix (collision-resistant)\n const id = \"sf\" + djb2(walletAddress).toString(36);\n\n // Cheek\n const cheekEnabled = theme?.cheekEnabled ?? true;\n const cheekColor = theme?.cheekColor ?? derived.cheekColor;\n const cheekOpacity = theme?.cheekOpacity ?? derived.cheekOpacity;\n\n const hi = traits.hairStyle % 10;\n const ai = effectiveAccessory(traits);\n\n const classAttr = className ? ` class=\"${className}\"` : \"\";\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" width=\"${size}\" height=\"${size}\"${classAttr}>`;\n\n // Defs\n const glowIntensity = theme?.glowIntensity ?? 0.10;\n svg += buildDefs(id, skin, derived.skinHi, derived.skinLo, hairCol, bgCol, cheekColor, cheekOpacity, flat, full && cheekEnabled, glowIntensity);\n\n // Blink animation\n const blinkEnabled = !!enableBlink;\n const blinkDuration = typeof enableBlink === \"object\" ? (enableBlink.duration ?? 4) : 4;\n const blinkDelay = typeof enableBlink === \"object\" ? (enableBlink.delay ?? 0) : 0;\n if (blinkEnabled) {\n const uid = `sf-${walletAddress.slice(0, 8)}`;\n const delayStr = blinkDelay ? ` ${blinkDelay}s` : \"\";\n svg += `<style>@keyframes ${uid}-blink{0%,90%,100%{transform:scaleY(1)}95%{transform:scaleY(0.1)}}.${uid}-eyes{animation:${uid}-blink ${blinkDuration}s ease-in-out${delayStr} infinite;transform-origin:32px 33px}</style>`;\n }\n\n // Background\n const bgFill = flat ? bgCol : `url(#${id}bg)`;\n svg += `<rect x=\"0\" y=\"0\" width=\"64\" height=\"64\" fill=\"${bgFill}\" opacity=\"${bgOpacity}\" rx=\"${bgRadius}\"/>`;\n\n // Hair back (Long, Bob, Wavy — behind face)\n svg += renderHairBack(hi, id, flat);\n\n // Ears\n svg += renderEars(derived.earFill, derived.earShadow);\n\n // Face\n const skinOpacity = theme?.skinOpacity ?? 1;\n svg += renderFace(id, skin, flat, skinOpacity);\n\n // Face overlays (glow, chin shadow, cheeks, jawline) — full detail only\n const shadowEnabled = theme?.shadowEnabled ?? true;\n if (full && cheekEnabled && shadowEnabled) {\n svg += renderFaceOverlays(id, flat);\n }\n\n // Headband (renders before eyes, after face)\n if (ai === 5) {\n svg += renderAccessory(5, accColor, glassesColor, earringColor, headbandColor);\n }\n\n // Hair front\n svg += renderHairFront(hi, id, hairCol, skin, flat);\n\n // Eyes\n if (blinkEnabled) {\n const uid = `sf-${walletAddress.slice(0, 8)}`;\n svg += `<g class=\"${uid}-eyes\">`;\n }\n svg += renderEyes(traits.eyeStyle % 8, eyeCol, eyeWhite, derived.lidColor, full);\n if (blinkEnabled) svg += `</g>`;\n\n // Eyebrows\n svg += renderEyebrows(traits.eyebrows % 5, browColor);\n\n // Nose\n svg += renderNose(traits.nose % 4, noseFill);\n\n // Mouth\n svg += renderMouth(traits.mouth % 8, lipColor, derived.isDark);\n\n // Accessories (except headband, already rendered)\n if (ai !== 0 && ai !== 5) {\n svg += renderAccessory(ai, accColor, glassesColor, earringColor, headbandColor);\n }\n\n // Border\n if (theme?.border) {\n svg += `<rect x=\"0\" y=\"0\" width=\"64\" height=\"64\" fill=\"none\" stroke=\"${theme.border.color}\" stroke-width=\"${theme.border.width}\" rx=\"${bgRadius}\"/>`;\n }\n\n svg += `</svg>`;\n return svg;\n}\n\nexport function renderSolFaceDataURI(\n walletAddress: string,\n options?: RenderOptions,\n): string {\n const svg = renderSolFaceSVG(walletAddress, options);\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nexport function renderSolFaceBase64(\n walletAddress: string,\n options?: RenderOptions,\n): string {\n const svg = renderSolFaceSVG(walletAddress, options);\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n}\n"]}
|
package/dist/chunk-TYTBYDQU.cjs
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkF54WHRCE_cjs = require('./chunk-F54WHRCE.cjs');
|
|
4
|
-
|
|
5
|
-
// src/core/describe.ts
|
|
6
|
-
var SKIN_TONES = {
|
|
7
|
-
0: "porcelain",
|
|
8
|
-
1: "ivory",
|
|
9
|
-
2: "fair",
|
|
10
|
-
3: "light",
|
|
11
|
-
4: "sand",
|
|
12
|
-
5: "golden",
|
|
13
|
-
6: "warm",
|
|
14
|
-
7: "caramel",
|
|
15
|
-
8: "brown",
|
|
16
|
-
9: "deep"
|
|
17
|
-
};
|
|
18
|
-
var EYE_STYLES = {
|
|
19
|
-
0: "round, wide-open",
|
|
20
|
-
1: "small and minimal",
|
|
21
|
-
2: "almond-shaped",
|
|
22
|
-
3: "wide and expressive",
|
|
23
|
-
4: "relaxed, half-lidded",
|
|
24
|
-
5: "joyful, crescent-shaped",
|
|
25
|
-
6: "bright and sparkling",
|
|
26
|
-
7: "gentle and narrow"
|
|
27
|
-
};
|
|
28
|
-
var EYE_COLORS_DESC = {
|
|
29
|
-
0: "dark brown",
|
|
30
|
-
1: "blue",
|
|
31
|
-
2: "green",
|
|
32
|
-
3: "hazel",
|
|
33
|
-
4: "gray"
|
|
34
|
-
};
|
|
35
|
-
var EYEBROW_STYLES = {
|
|
36
|
-
0: "wispy",
|
|
37
|
-
1: "straight",
|
|
38
|
-
2: "natural",
|
|
39
|
-
3: "elegantly arched",
|
|
40
|
-
4: "sharply angled"
|
|
41
|
-
};
|
|
42
|
-
var NOSE_STYLES = {
|
|
43
|
-
0: "a subtle shadow nose",
|
|
44
|
-
1: "a small button nose",
|
|
45
|
-
2: "a soft curved nose",
|
|
46
|
-
3: "a button nose with visible nostrils"
|
|
47
|
-
};
|
|
48
|
-
var MOUTH_STYLES = {
|
|
49
|
-
0: "a gentle smile",
|
|
50
|
-
1: "a calm, neutral expression",
|
|
51
|
-
2: "a happy grin",
|
|
52
|
-
3: "a surprised O-shaped mouth",
|
|
53
|
-
4: "a confident smirk",
|
|
54
|
-
5: "a wide, toothy grin",
|
|
55
|
-
6: "a flat, straight expression",
|
|
56
|
-
7: "a soft pout"
|
|
57
|
-
};
|
|
58
|
-
var HAIR_STYLES = {
|
|
59
|
-
0: "bald, with no hair",
|
|
60
|
-
1: "short, neatly cropped hair",
|
|
61
|
-
2: "bouncy, curly hair",
|
|
62
|
-
3: "side-swept hair",
|
|
63
|
-
4: "a voluminous puff",
|
|
64
|
-
5: "long hair that falls past the shoulders",
|
|
65
|
-
6: "a clean bob cut",
|
|
66
|
-
7: "a close buzz cut",
|
|
67
|
-
8: "flowing, wavy hair",
|
|
68
|
-
9: "a neat topknot"
|
|
69
|
-
};
|
|
70
|
-
var HAIR_COLORS_DESC = {
|
|
71
|
-
0: "jet black",
|
|
72
|
-
1: "espresso brown",
|
|
73
|
-
2: "walnut",
|
|
74
|
-
3: "honey blonde",
|
|
75
|
-
4: "copper red",
|
|
76
|
-
5: "silver",
|
|
77
|
-
6: "charcoal",
|
|
78
|
-
7: "burgundy",
|
|
79
|
-
8: "strawberry",
|
|
80
|
-
9: "ginger"
|
|
81
|
-
};
|
|
82
|
-
var ACCESSORY_DESC = {
|
|
83
|
-
0: "",
|
|
84
|
-
1: "a beauty mark",
|
|
85
|
-
2: "round glasses",
|
|
86
|
-
3: "rectangular glasses",
|
|
87
|
-
4: "a dangling earring",
|
|
88
|
-
5: "a headband",
|
|
89
|
-
6: "freckles",
|
|
90
|
-
7: "stud earrings",
|
|
91
|
-
8: "aviator sunglasses",
|
|
92
|
-
9: "a band-aid"
|
|
93
|
-
};
|
|
94
|
-
var BG_COLORS_DESC = {
|
|
95
|
-
0: "rose",
|
|
96
|
-
1: "olive",
|
|
97
|
-
2: "sage",
|
|
98
|
-
3: "fern",
|
|
99
|
-
4: "mint",
|
|
100
|
-
5: "ocean",
|
|
101
|
-
6: "sky",
|
|
102
|
-
7: "lavender",
|
|
103
|
-
8: "orchid",
|
|
104
|
-
9: "blush"
|
|
105
|
-
};
|
|
106
|
-
function describeAppearance(walletAddress, options) {
|
|
107
|
-
const traits = chunkF54WHRCE_cjs.generateTraits(walletAddress);
|
|
108
|
-
const {
|
|
109
|
-
includeBackground = true,
|
|
110
|
-
format = "paragraph",
|
|
111
|
-
perspective = "third",
|
|
112
|
-
name
|
|
113
|
-
} = options ?? {};
|
|
114
|
-
if (format === "structured") return buildStructured(traits, includeBackground);
|
|
115
|
-
if (format === "compact") return buildCompact(traits);
|
|
116
|
-
return buildParagraph(traits, perspective, name, includeBackground);
|
|
117
|
-
}
|
|
118
|
-
function describeTraits(traits, options) {
|
|
119
|
-
const {
|
|
120
|
-
includeBackground = true,
|
|
121
|
-
format = "paragraph",
|
|
122
|
-
perspective = "third",
|
|
123
|
-
name
|
|
124
|
-
} = options ?? {};
|
|
125
|
-
if (format === "structured") return buildStructured(traits, includeBackground);
|
|
126
|
-
if (format === "compact") return buildCompact(traits);
|
|
127
|
-
return buildParagraph(traits, perspective, name, includeBackground);
|
|
128
|
-
}
|
|
129
|
-
function buildParagraph(t, perspective, name, includeBg) {
|
|
130
|
-
const parts = [];
|
|
131
|
-
const ai = chunkF54WHRCE_cjs.effectiveAccessory(t);
|
|
132
|
-
const subject = perspective === "first" ? name ? `I'm ${name}. I have` : "I have" : name ? `${name} has` : "This SolFace has";
|
|
133
|
-
const im = perspective === "first" ? "I'm" : "They're";
|
|
134
|
-
parts.push(`${subject} a squircle face with ${SKIN_TONES[t.skinColor] ?? "warm"} skin`);
|
|
135
|
-
const eyeStyle = EYE_STYLES[t.eyeStyle] ?? "round";
|
|
136
|
-
const eyeColor = EYE_COLORS_DESC[t.eyeColor] ?? "dark";
|
|
137
|
-
parts.push(`${eyeStyle} ${eyeColor} eyes`);
|
|
138
|
-
const brows = EYEBROW_STYLES[t.eyebrows];
|
|
139
|
-
if (brows) parts.push(`${brows} eyebrows`);
|
|
140
|
-
const hairStyle = HAIR_STYLES[t.hairStyle] ?? "";
|
|
141
|
-
const hairColor = HAIR_COLORS_DESC[t.hairColor] ?? "";
|
|
142
|
-
if (t.hairStyle === 0) {
|
|
143
|
-
parts.push(perspective === "first" ? "and am bald" : "and is bald");
|
|
144
|
-
} else if (hairStyle.startsWith("a ")) {
|
|
145
|
-
parts.push(`and a ${hairColor} ${hairStyle.slice(2)}`);
|
|
146
|
-
} else {
|
|
147
|
-
parts.push(`and ${hairColor} ${hairStyle}`);
|
|
148
|
-
}
|
|
149
|
-
let desc = parts[0];
|
|
150
|
-
if (parts.length > 2) {
|
|
151
|
-
desc += ", " + parts.slice(1, -1).join(", ") + ", " + parts[parts.length - 1];
|
|
152
|
-
} else if (parts.length === 2) {
|
|
153
|
-
desc += " and " + parts[1];
|
|
154
|
-
}
|
|
155
|
-
desc += ".";
|
|
156
|
-
const nose = NOSE_STYLES[t.nose];
|
|
157
|
-
if (nose) {
|
|
158
|
-
const noseSubject = perspective === "first" ? "I have" : (name ?? "They") + (name ? " has" : " have");
|
|
159
|
-
desc += ` ${noseSubject} ${nose}.`;
|
|
160
|
-
}
|
|
161
|
-
const acc = ACCESSORY_DESC[ai];
|
|
162
|
-
if (acc) {
|
|
163
|
-
desc += ` ${im} wearing ${acc}.`;
|
|
164
|
-
}
|
|
165
|
-
const mouth = MOUTH_STYLES[t.mouth] ?? "a smile";
|
|
166
|
-
const mouthVerb = perspective === "first" ? "I have" : (name ?? "They") + (name ? " has" : " have");
|
|
167
|
-
desc += ` ${mouthVerb} ${mouth}.`;
|
|
168
|
-
if (includeBg) {
|
|
169
|
-
const bg = BG_COLORS_DESC[t.bgColor] ?? "colorful";
|
|
170
|
-
desc += ` The background is ${bg}.`;
|
|
171
|
-
}
|
|
172
|
-
return desc;
|
|
173
|
-
}
|
|
174
|
-
function buildStructured(t, includeBg) {
|
|
175
|
-
const ai = chunkF54WHRCE_cjs.effectiveAccessory(t);
|
|
176
|
-
const lines = [
|
|
177
|
-
`Face: squircle`,
|
|
178
|
-
`Skin: ${SKIN_TONES[t.skinColor] ?? "warm"}`,
|
|
179
|
-
`Eyes: ${EYE_STYLES[t.eyeStyle] ?? "round"}, ${EYE_COLORS_DESC[t.eyeColor] ?? "dark"}`,
|
|
180
|
-
`Eyebrows: ${EYEBROW_STYLES[t.eyebrows] ?? "wispy"}`
|
|
181
|
-
];
|
|
182
|
-
const nose = NOSE_STYLES[t.nose];
|
|
183
|
-
if (nose) lines.push(`Nose: ${nose.replace(/^a /, "")}`);
|
|
184
|
-
lines.push(`Mouth: ${MOUTH_STYLES[t.mouth] ?? "smile"}`);
|
|
185
|
-
if (t.hairStyle === 0) {
|
|
186
|
-
lines.push("Hair: bald");
|
|
187
|
-
} else {
|
|
188
|
-
const hs = HAIR_STYLES[t.hairStyle] ?? "";
|
|
189
|
-
const hc = HAIR_COLORS_DESC[t.hairColor] ?? "";
|
|
190
|
-
lines.push(`Hair: ${hc} ${hs.startsWith("a ") ? hs.slice(2) : hs}`);
|
|
191
|
-
}
|
|
192
|
-
const acc = ACCESSORY_DESC[ai];
|
|
193
|
-
if (acc) lines.push(`Accessory: ${acc}`);
|
|
194
|
-
if (includeBg) {
|
|
195
|
-
lines.push(`Background: ${BG_COLORS_DESC[t.bgColor] ?? "colorful"}`);
|
|
196
|
-
}
|
|
197
|
-
return lines.join("\n");
|
|
198
|
-
}
|
|
199
|
-
function buildCompact(t) {
|
|
200
|
-
const ai = chunkF54WHRCE_cjs.effectiveAccessory(t);
|
|
201
|
-
const parts = [];
|
|
202
|
-
parts.push(`squircle face`);
|
|
203
|
-
parts.push(`${SKIN_TONES[t.skinColor] ?? "warm"} skin`);
|
|
204
|
-
parts.push(`${EYE_COLORS_DESC[t.eyeColor] ?? "dark"} ${EYE_STYLES[t.eyeStyle] ?? "round"} eyes`);
|
|
205
|
-
if (t.hairStyle === 0) {
|
|
206
|
-
parts.push("bald");
|
|
207
|
-
} else {
|
|
208
|
-
const raw = HAIR_STYLES[t.hairStyle] ?? "hair";
|
|
209
|
-
const hs = raw.includes(",") ? raw.replace(/.*,\s*/, "") : raw;
|
|
210
|
-
const hc = HAIR_COLORS_DESC[t.hairColor] ?? "";
|
|
211
|
-
parts.push(`${hc} ${hs.startsWith("a ") ? hs.slice(2) : hs}`);
|
|
212
|
-
}
|
|
213
|
-
const acc = ACCESSORY_DESC[ai];
|
|
214
|
-
if (acc) parts.push(acc);
|
|
215
|
-
parts.push((MOUTH_STYLES[t.mouth] ?? "smiling").replace(/^a /, ""));
|
|
216
|
-
return parts.join(", ");
|
|
217
|
-
}
|
|
218
|
-
function solFaceAltText(walletAddress) {
|
|
219
|
-
return `SolFace avatar: ${describeAppearance(walletAddress, { format: "compact", includeBackground: false })}`;
|
|
220
|
-
}
|
|
221
|
-
function agentAppearancePrompt(walletAddress, agentName) {
|
|
222
|
-
const desc = describeAppearance(walletAddress, {
|
|
223
|
-
perspective: "first",
|
|
224
|
-
name: agentName,
|
|
225
|
-
includeBackground: false,
|
|
226
|
-
format: "paragraph"
|
|
227
|
-
});
|
|
228
|
-
const hash = (djb2Simple(walletAddress) >>> 0).toString(16).padStart(8, "0");
|
|
229
|
-
return `My visual identity is a SolFace avatar (ID: ${hash}) derived from my wallet address. ${desc} This appearance is deterministic \u2014 anyone who looks up my wallet will see the same face.`;
|
|
230
|
-
}
|
|
231
|
-
function djb2Simple(str) {
|
|
232
|
-
let hash = 5381;
|
|
233
|
-
for (let i = 0; i < str.length; i++) {
|
|
234
|
-
hash = (hash << 5) + hash + str.charCodeAt(i) | 0;
|
|
235
|
-
}
|
|
236
|
-
return hash >>> 0;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
exports.agentAppearancePrompt = agentAppearancePrompt;
|
|
240
|
-
exports.describeAppearance = describeAppearance;
|
|
241
|
-
exports.describeTraits = describeTraits;
|
|
242
|
-
exports.solFaceAltText = solFaceAltText;
|
|
243
|
-
//# sourceMappingURL=chunk-TYTBYDQU.cjs.map
|
|
244
|
-
//# sourceMappingURL=chunk-TYTBYDQU.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/describe.ts"],"names":["generateTraits","effectiveAccessory"],"mappings":"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","file":"chunk-TYTBYDQU.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — AI Agent Description Generator\n// Produces natural language descriptions of a wallet's SolFace\n// for use in system prompts, bios, and self-reference.\n// ═══════════════════════════════════════════════════════════════\n\nimport { generateTraits, effectiveAccessory, type SolFaceTraits } from \"./traits\";\n\n// ─── Vocabulary Maps ─────────────────────────────────────────\n\nconst SKIN_TONES: Record<number, string> = {\n 0: \"porcelain\",\n 1: \"ivory\",\n 2: \"fair\",\n 3: \"light\",\n 4: \"sand\",\n 5: \"golden\",\n 6: \"warm\",\n 7: \"caramel\",\n 8: \"brown\",\n 9: \"deep\",\n};\n\nconst EYE_STYLES: Record<number, string> = {\n 0: \"round, wide-open\",\n 1: \"small and minimal\",\n 2: \"almond-shaped\",\n 3: \"wide and expressive\",\n 4: \"relaxed, half-lidded\",\n 5: \"joyful, crescent-shaped\",\n 6: \"bright and sparkling\",\n 7: \"gentle and narrow\",\n};\n\nconst EYE_COLORS_DESC: Record<number, string> = {\n 0: \"dark brown\",\n 1: \"blue\",\n 2: \"green\",\n 3: \"hazel\",\n 4: \"gray\",\n};\n\nconst EYEBROW_STYLES: Record<number, string> = {\n 0: \"wispy\",\n 1: \"straight\",\n 2: \"natural\",\n 3: \"elegantly arched\",\n 4: \"sharply angled\",\n};\n\nconst NOSE_STYLES: Record<number, string> = {\n 0: \"a subtle shadow nose\",\n 1: \"a small button nose\",\n 2: \"a soft curved nose\",\n 3: \"a button nose with visible nostrils\",\n};\n\nconst MOUTH_STYLES: Record<number, string> = {\n 0: \"a gentle smile\",\n 1: \"a calm, neutral expression\",\n 2: \"a happy grin\",\n 3: \"a surprised O-shaped mouth\",\n 4: \"a confident smirk\",\n 5: \"a wide, toothy grin\",\n 6: \"a flat, straight expression\",\n 7: \"a soft pout\",\n};\n\nconst HAIR_STYLES: Record<number, string> = {\n 0: \"bald, with no hair\",\n 1: \"short, neatly cropped hair\",\n 2: \"bouncy, curly hair\",\n 3: \"side-swept hair\",\n 4: \"a voluminous puff\",\n 5: \"long hair that falls past the shoulders\",\n 6: \"a clean bob cut\",\n 7: \"a close buzz cut\",\n 8: \"flowing, wavy hair\",\n 9: \"a neat topknot\",\n};\n\nconst HAIR_COLORS_DESC: Record<number, string> = {\n 0: \"jet black\",\n 1: \"espresso brown\",\n 2: \"walnut\",\n 3: \"honey blonde\",\n 4: \"copper red\",\n 5: \"silver\",\n 6: \"charcoal\",\n 7: \"burgundy\",\n 8: \"strawberry\",\n 9: \"ginger\",\n};\n\nconst ACCESSORY_DESC: Record<number, string> = {\n 0: \"\",\n 1: \"a beauty mark\",\n 2: \"round glasses\",\n 3: \"rectangular glasses\",\n 4: \"a dangling earring\",\n 5: \"a headband\",\n 6: \"freckles\",\n 7: \"stud earrings\",\n 8: \"aviator sunglasses\",\n 9: \"a band-aid\",\n};\n\nconst BG_COLORS_DESC: Record<number, string> = {\n 0: \"rose\",\n 1: \"olive\",\n 2: \"sage\",\n 3: \"fern\",\n 4: \"mint\",\n 5: \"ocean\",\n 6: \"sky\",\n 7: \"lavender\",\n 8: \"orchid\",\n 9: \"blush\",\n};\n\n// ─── Description Builder ─────────────────────────────────────\n\nexport interface DescribeOptions {\n includeBackground?: boolean;\n format?: \"paragraph\" | \"structured\" | \"compact\";\n perspective?: \"first\" | \"third\";\n name?: string;\n}\n\nexport function describeAppearance(\n walletAddress: string,\n options?: DescribeOptions,\n): string {\n const traits = generateTraits(walletAddress);\n const {\n includeBackground = true,\n format = \"paragraph\",\n perspective = \"third\",\n name,\n } = options ?? {};\n\n if (format === \"structured\") return buildStructured(traits, includeBackground);\n if (format === \"compact\") return buildCompact(traits);\n return buildParagraph(traits, perspective, name, includeBackground);\n}\n\nexport function describeTraits(\n traits: SolFaceTraits,\n options?: DescribeOptions,\n): string {\n const {\n includeBackground = true,\n format = \"paragraph\",\n perspective = \"third\",\n name,\n } = options ?? {};\n\n if (format === \"structured\") return buildStructured(traits, includeBackground);\n if (format === \"compact\") return buildCompact(traits);\n return buildParagraph(traits, perspective, name, includeBackground);\n}\n\n// ─── Builders ────────────────────────────────────────────────\n\nfunction buildParagraph(\n t: SolFaceTraits,\n perspective: \"first\" | \"third\",\n name?: string,\n includeBg?: boolean,\n): string {\n const parts: string[] = [];\n const ai = effectiveAccessory(t);\n\n const subject = perspective === \"first\"\n ? (name ? `I'm ${name}. I have` : \"I have\")\n : (name ? `${name} has` : \"This SolFace has\");\n\n const im = perspective === \"first\" ? \"I'm\" : \"They're\";\n\n // Face + skin (all squircle now)\n parts.push(`${subject} a squircle face with ${SKIN_TONES[t.skinColor] ?? \"warm\"} skin`);\n\n // Eyes\n const eyeStyle = EYE_STYLES[t.eyeStyle] ?? \"round\";\n const eyeColor = EYE_COLORS_DESC[t.eyeColor] ?? \"dark\";\n parts.push(`${eyeStyle} ${eyeColor} eyes`);\n\n // Eyebrows\n const brows = EYEBROW_STYLES[t.eyebrows];\n if (brows) parts.push(`${brows} eyebrows`);\n\n // Hair\n const hairStyle = HAIR_STYLES[t.hairStyle] ?? \"\";\n const hairColor = HAIR_COLORS_DESC[t.hairColor] ?? \"\";\n if (t.hairStyle === 0) {\n parts.push(perspective === \"first\" ? \"and am bald\" : \"and is bald\");\n } else if (hairStyle.startsWith(\"a \")) {\n parts.push(`and a ${hairColor} ${hairStyle.slice(2)}`);\n } else {\n parts.push(`and ${hairColor} ${hairStyle}`);\n }\n\n // Build main sentence\n let desc = parts[0];\n if (parts.length > 2) {\n desc += \", \" + parts.slice(1, -1).join(\", \") + \", \" + parts[parts.length - 1];\n } else if (parts.length === 2) {\n desc += \" and \" + parts[1];\n }\n desc += \".\";\n\n // Nose\n const nose = NOSE_STYLES[t.nose];\n if (nose) {\n const noseSubject = perspective === \"first\"\n ? \"I have\"\n : (name ?? \"They\") + (name ? \" has\" : \" have\");\n desc += ` ${noseSubject} ${nose}.`;\n }\n\n // Accessory\n const acc = ACCESSORY_DESC[ai];\n if (acc) {\n desc += ` ${im} wearing ${acc}.`;\n }\n\n // Mouth\n const mouth = MOUTH_STYLES[t.mouth] ?? \"a smile\";\n const mouthVerb = perspective === \"first\"\n ? \"I have\"\n : (name ?? \"They\") + (name ? \" has\" : \" have\");\n desc += ` ${mouthVerb} ${mouth}.`;\n\n // Background\n if (includeBg) {\n const bg = BG_COLORS_DESC[t.bgColor] ?? \"colorful\";\n desc += ` The background is ${bg}.`;\n }\n\n return desc;\n}\n\nfunction buildStructured(t: SolFaceTraits, includeBg: boolean): string {\n const ai = effectiveAccessory(t);\n const lines: string[] = [\n `Face: squircle`,\n `Skin: ${SKIN_TONES[t.skinColor] ?? \"warm\"}`,\n `Eyes: ${EYE_STYLES[t.eyeStyle] ?? \"round\"}, ${EYE_COLORS_DESC[t.eyeColor] ?? \"dark\"}`,\n `Eyebrows: ${EYEBROW_STYLES[t.eyebrows] ?? \"wispy\"}`,\n ];\n\n const nose = NOSE_STYLES[t.nose];\n if (nose) lines.push(`Nose: ${nose.replace(/^a /, \"\")}`);\n\n lines.push(`Mouth: ${MOUTH_STYLES[t.mouth] ?? \"smile\"}`);\n\n if (t.hairStyle === 0) {\n lines.push(\"Hair: bald\");\n } else {\n const hs = HAIR_STYLES[t.hairStyle] ?? \"\";\n const hc = HAIR_COLORS_DESC[t.hairColor] ?? \"\";\n lines.push(`Hair: ${hc} ${hs.startsWith(\"a \") ? hs.slice(2) : hs}`);\n }\n\n const acc = ACCESSORY_DESC[ai];\n if (acc) lines.push(`Accessory: ${acc}`);\n\n if (includeBg) {\n lines.push(`Background: ${BG_COLORS_DESC[t.bgColor] ?? \"colorful\"}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildCompact(t: SolFaceTraits): string {\n const ai = effectiveAccessory(t);\n const parts: string[] = [];\n\n parts.push(`squircle face`);\n parts.push(`${SKIN_TONES[t.skinColor] ?? \"warm\"} skin`);\n parts.push(`${EYE_COLORS_DESC[t.eyeColor] ?? \"dark\"} ${EYE_STYLES[t.eyeStyle] ?? \"round\"} eyes`);\n\n if (t.hairStyle === 0) {\n parts.push(\"bald\");\n } else {\n const raw = HAIR_STYLES[t.hairStyle] ?? \"hair\";\n const hs = raw.includes(\",\") ? raw.replace(/.*,\\s*/, \"\") : raw;\n const hc = HAIR_COLORS_DESC[t.hairColor] ?? \"\";\n parts.push(`${hc} ${hs.startsWith(\"a \") ? hs.slice(2) : hs}`);\n }\n\n const acc = ACCESSORY_DESC[ai];\n if (acc) parts.push(acc);\n\n parts.push((MOUTH_STYLES[t.mouth] ?? \"smiling\").replace(/^a /, \"\"));\n\n return parts.join(\", \");\n}\n\n// ─── Alt Text Helper ─────────────────────────────────────────\n\nexport function solFaceAltText(walletAddress: string): string {\n return `SolFace avatar: ${describeAppearance(walletAddress, { format: \"compact\", includeBackground: false })}`;\n}\n\n// ─── System Prompt Helper ────────────────────────────────────\n\nexport function agentAppearancePrompt(\n walletAddress: string,\n agentName?: string,\n): string {\n const desc = describeAppearance(walletAddress, {\n perspective: \"first\",\n name: agentName,\n includeBackground: false,\n format: \"paragraph\",\n });\n\n const hash = (djb2Simple(walletAddress) >>> 0).toString(16).padStart(8, \"0\");\n\n return `My visual identity is a SolFace avatar (ID: ${hash}) derived from my wallet address. ${desc} This appearance is deterministic — anyone who looks up my wallet will see the same face.`;\n}\n\n// Inline djb2 to avoid circular dependency\nfunction djb2Simple(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0;\n }\n return hash >>> 0;\n}\n"]}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
interface SolFaceTraits {
|
|
2
|
-
faceShape: number;
|
|
3
|
-
skinColor: number;
|
|
4
|
-
eyeStyle: number;
|
|
5
|
-
eyeColor: number;
|
|
6
|
-
eyebrows: number;
|
|
7
|
-
nose: number;
|
|
8
|
-
mouth: number;
|
|
9
|
-
hairStyle: number;
|
|
10
|
-
hairColor: number;
|
|
11
|
-
accessory: number;
|
|
12
|
-
bgColor: number;
|
|
13
|
-
}
|
|
14
|
-
interface SolFaceTheme {
|
|
15
|
-
skinColors?: string[];
|
|
16
|
-
eyeColors?: string[];
|
|
17
|
-
hairColors?: string[];
|
|
18
|
-
bgColors?: string[];
|
|
19
|
-
mouthColor?: string;
|
|
20
|
-
eyebrowColor?: string;
|
|
21
|
-
accessoryColor?: string;
|
|
22
|
-
eyeWhiteColor?: string;
|
|
23
|
-
noseColor?: string;
|
|
24
|
-
glassesColor?: string;
|
|
25
|
-
earringColor?: string;
|
|
26
|
-
headbandColor?: string;
|
|
27
|
-
bgOpacity?: number;
|
|
28
|
-
bgRadius?: number;
|
|
29
|
-
border?: {
|
|
30
|
-
color: string;
|
|
31
|
-
width: number;
|
|
32
|
-
};
|
|
33
|
-
flat?: boolean;
|
|
34
|
-
cheekEnabled?: boolean;
|
|
35
|
-
cheekColor?: string;
|
|
36
|
-
cheekOpacity?: number;
|
|
37
|
-
skinOpacity?: number;
|
|
38
|
-
shadowEnabled?: boolean;
|
|
39
|
-
glowIntensity?: number;
|
|
40
|
-
_pixel?: boolean;
|
|
41
|
-
_pixelDensity?: number;
|
|
42
|
-
_pixelRounded?: boolean;
|
|
43
|
-
_pixelOutline?: boolean;
|
|
44
|
-
_pixelOutlineColor?: string;
|
|
45
|
-
_pixelOutlineWidth?: number;
|
|
46
|
-
_pixelContrast?: number;
|
|
47
|
-
_pixelSaturation?: number;
|
|
48
|
-
_pixelBrightness?: number;
|
|
49
|
-
_pixelScanlines?: boolean;
|
|
50
|
-
_pixelScanlineOpacity?: number;
|
|
51
|
-
_pixelScanlineSpacing?: number;
|
|
52
|
-
_pixelGrid?: boolean;
|
|
53
|
-
_pixelGridOpacity?: number;
|
|
54
|
-
_pixelGridColor?: string;
|
|
55
|
-
_pixelShadow?: boolean;
|
|
56
|
-
_pixelShadowColor?: string;
|
|
57
|
-
_pixelShadowOffset?: number;
|
|
58
|
-
_glass?: boolean;
|
|
59
|
-
_blurRadius?: number;
|
|
60
|
-
_saturate?: number;
|
|
61
|
-
_tintOpacity?: number;
|
|
62
|
-
_tintColor?: string;
|
|
63
|
-
_borderOpacity?: number;
|
|
64
|
-
_borderWidth?: number;
|
|
65
|
-
_borderColor?: string;
|
|
66
|
-
_specularOpacity?: number;
|
|
67
|
-
_specularColor?: string;
|
|
68
|
-
_specularEnd?: number;
|
|
69
|
-
_lightAngle?: number;
|
|
70
|
-
_rimIntensity?: number;
|
|
71
|
-
_shadow?: string;
|
|
72
|
-
}
|
|
73
|
-
interface RenderOptions {
|
|
74
|
-
size?: number;
|
|
75
|
-
theme?: SolFaceTheme;
|
|
76
|
-
traitOverrides?: Partial<SolFaceTraits>;
|
|
77
|
-
enableBlink?: boolean | {
|
|
78
|
-
duration?: number;
|
|
79
|
-
delay?: number;
|
|
80
|
-
};
|
|
81
|
-
className?: string;
|
|
82
|
-
detail?: "full" | "simplified" | "auto";
|
|
83
|
-
colorOverrides?: {
|
|
84
|
-
skin?: string;
|
|
85
|
-
eyes?: string;
|
|
86
|
-
hair?: string;
|
|
87
|
-
bg?: string;
|
|
88
|
-
mouth?: string;
|
|
89
|
-
eyebrow?: string;
|
|
90
|
-
accessory?: string;
|
|
91
|
-
nose?: string;
|
|
92
|
-
eyeWhite?: string;
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
declare const SKIN_COLORS: string[];
|
|
96
|
-
declare const EYE_COLORS: string[];
|
|
97
|
-
declare const HAIR_COLORS: string[];
|
|
98
|
-
declare const BG_COLORS: string[];
|
|
99
|
-
declare function generateTraits(walletAddress: string, overrides?: Partial<SolFaceTraits>): SolFaceTraits;
|
|
100
|
-
declare function effectiveAccessory(traits: SolFaceTraits): number;
|
|
101
|
-
declare function getTraitLabels(traits: SolFaceTraits): Record<string, string>;
|
|
102
|
-
declare function traitHash(walletAddress: string): string;
|
|
103
|
-
declare function resolveTheme(themeName?: string, themes?: Record<string, SolFaceTheme>): SolFaceTheme | undefined;
|
|
104
|
-
declare function mergeTheme(base: SolFaceTheme | null | undefined, overrides: SolFaceTheme | null | undefined): SolFaceTheme | null;
|
|
105
|
-
|
|
106
|
-
export { BG_COLORS as B, EYE_COLORS as E, HAIR_COLORS as H, type RenderOptions as R, SKIN_COLORS as S, type SolFaceTheme as a, type SolFaceTraits as b, getTraitLabels as c, effectiveAccessory as e, generateTraits as g, mergeTheme as m, resolveTheme as r, traitHash as t };
|