import { Ban, Check, Loader2 } from 'lucide-react' import type { MyBackground } from '@/api/users' import { DEFAULT_BACKGROUNDS, NO_BACKGROUND, type BackgroundKey } from '@/lib/virtualBackground' import '@/styles/virtual-background.css' interface BackgroundPickerProps { value: BackgroundKey onChange: (key: BackgroundKey) => void /** Свои картинки пользователя; у гостя список всегда пуст — профиля у него нет. */ customBackgrounds: MyBackground[] /** Идёт применение фона (первый раз — ещё и загрузка модели) — показать индикатор на выбранной плитке. */ busy?: boolean } /** * Сетка выбора фона: «без фона», три дефолтные сцены и свои картинки. * * Один компонент на все три места, где выбирают фон (превью входа, комната, * профиль): плитки везде выглядят одинаково, а цвета берутся из токенов темы — * внутри комнаты (`[data-theme="room"]`) те же классы перекрашиваются в тёмную * палитру, см. `styles/virtual-background.css`. * * Кнопки — `aria-pressed`, а не радиогруппа: выбор применяется немедленно и * никуда не отправляется формой. */ export function BackgroundPicker({ value, onChange, customBackgrounds, busy = false, }: BackgroundPickerProps) { const renderTile = (key: BackgroundKey, label: string, url: string | null) => { const selected = value === key return ( ) } return (