import { html, nothing, type TemplateResult } from 'lit'; import type { NuiType } from '../../types/nui-type.js'; import type { AvatarShape, AvatarSize } from './types.js'; export interface NuiAvatarViewState { label: string; icon: string; image: string; size: AvatarSize | ''; shape: AvatarShape | ''; ariaLabel: string; ariaLabelledby: string; nuiType: NuiType; avatarClass: string; } export function resolveAvatarShape(shape: AvatarShape | ''): AvatarShape { return shape || 'square'; } export function getAvatarClass(avatarClass: string): string { return ['nui-avatar', avatarClass].filter(Boolean).join(' '); } export function getAvatarIconSize(size: AvatarSize | ''): { width: string; height: string; } { switch (size) { case 'large': return { width: '1.5rem', height: '1.5rem' }; case 'xlarge': return { width: '2rem', height: '2rem' }; default: return { width: '1rem', height: '1rem' }; } } export function renderAvatarIcon( state: Pick, ): TemplateResult | typeof nothing { if (!state.icon) { return nothing; } const { width, height } = getAvatarIconSize(state.size); return html` `; } export function renderAvatarLabel( label: string, ): TemplateResult | typeof nothing { if (!label) { return nothing; } return html`${label}`; } export function renderAvatarImage( state: Pick, onError: (event: Event) => void, ): TemplateResult | typeof nothing { if (!state.image) { return nothing; } return html` ${state.ariaLabel `; } export function renderAvatarDefaultContent( state: NuiAvatarViewState, onError: (event: Event) => void, ): TemplateResult | typeof nothing { if (state.label) { return renderAvatarLabel(state.label); } if (state.icon) { return renderAvatarIcon(state); } return renderAvatarImage(state, onError); } export function renderAvatar( state: NuiAvatarViewState, onError: (event: Event) => void, ): TemplateResult { const shape = resolveAvatarShape(state.shape); return html` ${renderAvatarDefaultContent(state, onError)} `; }