@include('partials.favicon') @vite(['resources/css/app.css', 'resources/js/meet-room.js']) @php use App\Models\User; use App\Services\Meet\ParticipantPresenter; $joined = $session->participants->whereIn('status', ['joined', 'waiting']); $participantAvatars = ParticipantPresenter::avatarMap($joined, $room->host_user_ref); $joinedParticipants = $joined ->map(fn ($p) => ParticipantPresenter::toArray($p, $participantAvatars, $room->host_user_ref)) ->values(); $roomHostUser = User::query()->where('public_id', $room->host_user_ref)->first(); $roomHost = [ 'user_ref' => $room->host_user_ref, 'display_name' => $roomHostUser?->name ?? 'Host', 'avatar_url' => $roomHostUser?->avatarUrl(), ]; $isConferenceSession = $isConference ?? false; $sessionNoun = match (true) { $isConferenceSession => 'conference', ($isSpace ?? false) => 'room', $room->isWebinar() => 'webinar', default => 'meeting', }; $sessionNounTitle = ucfirst($sessionNoun); $presenterRefsList = (array) ($presenterRefs ?? []); $headerHostPerson = ParticipantPresenter::headerHost($joinedParticipants->all(), $roomHost); $headerParticipantCount = ParticipantPresenter::headerCountNumber( $joinedParticipants->all(), (bool) ($usesStageLayout ?? false), $presenterRefsList, ); $headerParticipantSuffix = ParticipantPresenter::headerCountSuffix( $joinedParticipants->all(), (bool) ($usesStageLayout ?? false), $presenterRefsList, ); $headerWaitingCount = $joinedParticipants->where('status', 'waiting')->count(); $stageLayoutName = ($stageConfig['stage_layout'] ?? 'plenary') === 'panel' ? 'Panel discussion' : 'Plenary'; $initialConferenceStatus = match (true) { ($inBreakout ?? false) => 'Breakout · meeting mode', ($isGreenRoom ?? false) && ($usesStageLayout ?? false) => "Green room · {$stageLayoutName}", ($isGreenRoom ?? false) => 'Green room', ! ($usesStageLayout ?? false) => 'Conference live', ($stageConfig['stage_layout'] ?? 'plenary') === 'panel' => 'Panel discussion live', default => 'Plenary live', }; $initialConferenceStatusClass = match (true) { ($inBreakout ?? false) => 'text-amber-400/90', ($isGreenRoom ?? false) => 'text-violet-400/90', ($stageConfig['stage_layout'] ?? 'plenary') === 'panel' => 'text-violet-400/90', default => 'text-sky-400/90', }; @endphp @if (! $mediaConfigured)
LiveKit is not configured. Set LIVEKIT_URL, LIVEKIT_API_KEY, and LIVEKIT_API_SECRET in .env for video.
@endif

{{ $room->title }}

@if ($isAudioOnly ?? false)

Audio room

@elseif ($isConference ?? false)

{{ $initialConferenceStatus }}

@endif

is_locked) style="display: none" @endunless class="rounded bg-amber-600 px-2 py-0.5 font-medium text-white">Locked
@if (($isConference ?? false) && ($isGreenRoom ?? false))

Green room

Only hosts and speakers are visible. Attendees join after you go live.

Stage layout:

@endif @if (($inBreakout ?? false) && ! ($isSpace ?? false))

Breakout session

@endif @unless ($isSpace ?? false)

Breakouts are active

Attendees are in smaller discussion groups. You remain on the main stage.

@endunless @if (($usesStageLayout ?? false) && ! ($isGreenRoom ?? false) && ! ($inBreakout ?? false))

@endif

Invite others

Share this link so people can join the {{ $sessionNoun }}.

Passcode:

@php $toolbarShowMic = ($canPublish ?? true) && ((! ($audioOnlyPublish ?? false)) || ($speakGranted ?? false)); $toolbarShowVideo = ($canPublish ?? true) && ! ($isAudioOnly ?? false) && ! ($audioOnlyPublish ?? false); $toolbarShowAudiencePrimary = ($isSpace ?? false) ? ! ($canPublish ?? true) : (($usesSpeakAccess ?? false) && ((! ($canPublish ?? true)) || ($audioOnlyPublish ?? false))); $toolbarShowAudienceDesktop = ($isSpace ?? false) ? ! ($canPublish ?? true) : (($usesSpeakAccess ?? false) ? ((! ($canPublish ?? true)) || ($audioOnlyPublish ?? false)) : ($canPublish ?? true)); $toolbarShowReactPrimary = $toolbarShowAudiencePrimary && ! (($usesSpeakAccess ?? false) && ($speakGranted ?? false) && ($audioOnlyPublish ?? false)); @endphp

You can speak — your microphone is available

@if (($isSpace ?? false) && ($speakRequested ?? false) && ! ($canPublish ?? true))
You've been invited to speak
@endif
@if ($isSpace ?? false) @if ($participant->isHost()) @endif @else @endif
@unless ($isSpace ?? false) @endunless @if ($isSpace ?? false) @endif @if (($isSpace ?? false) && $participant->isHost()) @endif
@csrf
@if ($participant->isHost()) @endif
@unless ($isSpace ?? false)

Start breakout rooms

Attendees and speakers are split into smaller groups with full meeting controls. You stay on the main stage.

@endunless

End {{ $sessionNoun }} for everyone?

All participants will be disconnected and the session will close.

Messages are visible to everyone in the {{ ($isSpace ?? false) ? 'room' : 'call' }}

@foreach ($messages as $message) @php $isOwn = $message->sender_name === $participant->display_name; @endphp
@unless ($isOwn)

{{ $message->sender_name }}

@endunless

{{ $message->body }}

{{ $message->created_at->format('g:i A') }}

@endforeach
@unless ($isSpace ?? false)

Lineup from Events when linked to this {{ $sessionNoun }}

@include('meet.room.partials.programme-panel', [ 'programmeSnapshot' => $programmeSnapshot, 'linkedProgrammeItems' => $linkedProgrammeItems ?? [], 'sessionNoun' => $sessionNoun, ])
@endunless

Stage layout

Choose how speakers appear on stage. Changes apply when you save.

Plenary shows one speaker on the main stage.

On stage

Switching to panel discussion changes the live stage to a multi-speaker grid for everyone in the room.

@unless ($isSpace ?? false)

{{ ($isSpace ?? false) ? 'Audio room controls' : $sessionNounTitle.' tools and extras' }}

@unless ($isSpace ?? false) @endunless @if ($participant->isHost()) @unless ($isSpace ?? false)

Broadcast to breakouts

@endunless @endif
@if ($isWebinar ?? false)

Q&A

  • No questions yet.
@endif

@endunless