Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 'use client' import { useTheme } from '@/contexts/ThemeContext' import { getVariantSuffix, type ProfileSize, type ProfileTheme, type ProfileState, } from '@/lib/profile-variants' type SizeHint = ProfileSize /** * Returns the correct theme-, size-, and state-aware profile image URL. * * Reads the current resolved theme (light/dark) from ThemeContext and * combines it with a size hint and optional speaking flag to select the right variant. */ export function useCharacterProfileImage( baseProfileImage: string, size: SizeHint = 'default', speaking: boolean = false ): string { const { resolvedTheme } = useTheme() const theme: ProfileTheme = resolvedTheme // 'light' | 'dark' — both valid ProfileTheme values const state: ProfileState = speaking ? 'speaking' : 'idle' const suffix = getVariantSuffix(size, theme, state) return baseProfileImage.replace('.png', `${suffix}.png`) } |