import { html, nothing, type TemplateResult } from 'lit'; import type { NuiType } from '../../types/nui-type.js'; import type { BadgeSeverity, BadgeSize } from './types.js'; export interface NuiBadgeViewState { value: string; severity: BadgeSeverity | ''; size: BadgeSize | ''; nuiType: NuiType; badgeClass: string; lightDomHasContent: boolean; } export function resolveSeverity( state: Pick, ): BadgeSeverity | 'primary' { if (state.severity) { return state.severity; } return 'primary'; } export function isBadgeDot( state: Pick, ): boolean { return !state.value && !state.lightDomHasContent; } export function isBadgeCircle(value: string): boolean { return value.length === 1; } export function getBadgeClass(badgeClass: string): string { return ['nui-badge', badgeClass].filter(Boolean).join(' '); } export function renderBadge(state: NuiBadgeViewState): TemplateResult { const severity = resolveSeverity(state); const showSeverity = Boolean(state.severity); const dot = isBadgeDot(state); const circle = !dot && isBadgeCircle(state.value); return html` ${state.value || nothing} `; }