import { Check, Copy, Users } from 'lucide-react' import { useParticipants } from '@livekit/components-react' import { useState } from 'react' import { pluralizeParticipants } from '@/lib/pluralize' interface RoomTopbarProps { /** * Название конференции (`ConferenceOut.title`/`ResolveOut.title`) — * `null`/не задано, если организатор его не указал. НЕ путать с * `JoinOut.room_name` (техническое имя комнаты LiveKit вида `hC-Dmos9KEM`, * которое сюда раньше и попадало по ошибке, см. задачу A6) — тот нужен * только серверу и в UI показывать нечего. */ title: string | null /** Slug/номер конференции из адреса — для инвайт-чипа (копирование ссылки). */ slug?: string number?: string } /** * Верхняя панель комнаты: название, число участников и инвайт-чип * (номер + копирование ссылки-приглашения `/j/:slug`). * * Примечание: в design/mockups/room.html этого чипа нет — он добавлен, * чтобы ссылка и номер конференции были видны и копировались, в стиле * тёмных токенов темы `room` (см. `--color-room-tile*`), без новых * цветов и форм. */ export function RoomTopbar({ title, slug, number }: RoomTopbarProps) { const participants = useParticipants() const [copied, setCopied] = useState(false) async function handleCopy() { if (!slug) return const link = `${window.location.origin}/j/${slug}` try { await navigator.clipboard.writeText(link) setCopied(true) setTimeout(() => setCopied(false), 2000) } catch { // Буфер обмена недоступен (нет разрешения/не https) — молча игнорируем, // это некритичный вспомогательный элемент интерфейса. } } return (

{title ?? 'Конференция без названия'}

{slug && ( )}
) }