Fix plenary spotlight for guest speakers without user accounts.
Deploy Ladill Meet / deploy (push) Successful in 52s

Spotlight by participant uuid, add on-stage picker in stage layout, and show who is currently spotlighted in the plenary status bar.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-03 22:22:07 +00:00
co-authored by Cursor
parent ee3f7410f4
commit 775c81f4ee
3 changed files with 156 additions and 33 deletions
+24 -5
View File
@@ -640,8 +640,8 @@
<span x-show="!isSpeaking(person.uuid)" class="block text-xs text-slate-400" x-text="roleLabel(person.role)"></span>
</span>
<span class="flex shrink-0 items-center gap-1">
<button x-show="usesStageLayout && isHost && person.user_ref && spotlightSpeakerRef !== person.user_ref"
type="button" @click="setSpotlight(person.user_ref)"
<button x-show="usesStageLayout && isHost && isSpeakerPerson(person) && !matchesSpotlightKey(resolveSpotlightKey(), person)"
type="button" @click="setSpotlight(spotlightKey(person))"
class="rounded-lg bg-indigo-600 px-2 py-1 text-[10px] font-medium text-white hover:bg-indigo-500">
Spotlight
</button>
@@ -722,6 +722,25 @@
</button>
</div>
<p x-show="stageLayout === 'plenary'" x-cloak class="mt-3 rounded-lg border border-sky-500/30 bg-sky-500/10 px-3 py-2 text-xs text-sky-100">
Plenary shows one speaker on the main stage. Everyone else appears in the strip below.
</p>
<div x-show="stageLayout === 'plenary'" x-cloak class="mt-5 space-y-2">
<p class="text-xs font-semibold uppercase tracking-wide text-slate-400">On stage</p>
<div class="flex flex-wrap gap-2">
<template x-for="speaker in speakerParticipantsSorted()" :key="'plenary-' + speaker.uuid">
<button type="button" @click="setSpotlight(spotlightKey(speaker))"
class="rounded-full px-3 py-1.5 text-xs font-medium transition-colors"
:class="matchesSpotlightKey(resolveSpotlightKey(), speaker)
? 'bg-sky-600 text-white ring-1 ring-sky-400/60'
: 'bg-slate-800 text-slate-300 hover:bg-slate-700'">
<span x-text="speaker.display_name"></span>
</button>
</template>
</div>
</div>
<p x-show="stageLayout === 'panel'" x-cloak class="mt-3 rounded-lg border border-violet-500/30 bg-violet-500/10 px-3 py-2 text-xs text-violet-100">
Switching to panel discussion changes the live stage to a multi-speaker grid for everyone in the room.
</p>
@@ -744,10 +763,10 @@
<div class="mt-3 flex flex-wrap gap-2">
<template x-for="speaker in speakerParticipantsSorted()" :key="panel.id + '-' + speaker.uuid">
<label class="inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs"
:class="panel.speaker_refs.includes(speaker.user_ref) ? 'bg-violet-600/30 text-violet-100 ring-1 ring-violet-500/50' : 'bg-slate-800 text-slate-300'">
:class="panel.speaker_refs.includes(spotlightKey(speaker)) ? 'bg-violet-600/30 text-violet-100 ring-1 ring-violet-500/50' : 'bg-slate-800 text-slate-300'">
<input type="checkbox" class="sr-only"
:checked="panel.speaker_refs.includes(speaker.user_ref)"
@change="togglePanelSpeaker(panel, speaker.user_ref)">
:checked="panel.speaker_refs.includes(spotlightKey(speaker))"
@change="togglePanelSpeaker(panel, spotlightKey(speaker))">
<span x-text="speaker.display_name"></span>
</label>
</template>