lotus(#4): focus-participant spotlight via widget action

Adds io.lotus.focus_participant (toWidget): the host can pin a participant
to the spotlight by Matrix user id (or clear with userId:null), via a
manual override injected into CallViewModel.spotlightSpeaker$. Replaces
cinny's fragile DOM .click() tile-selector focus hack. Extracts the action
enum into lotusActions.ts (no circular import) and allow-lists Lotus
toWidget actions in initializeWidget. Additive: no-op unless the host
sends the action.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Lotus CI
2026-06-29 23:10:16 -04:00
co-authored by Claude Opus 4.8
parent 444af5f7ac
commit 9d7784b9bc
6 changed files with 104 additions and 10 deletions
+26
View File
@@ -0,0 +1,26 @@
/*
Copyright 2026 Lotus Guild
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE in the repository root for full details.
*/
/**
* Custom widget actions exchanged between the Lotus host (cinny) and this fork.
* Kept dependency-free so both `widget.ts` and `lotus/*` can import it without
* a circular dependency.
*/
export enum LotusWidgetActions {
/** fromWidget: in-call per-participant speaking / mute state. */
CallState = "io.lotus.call_state",
/** toWidget: pin/spotlight (or clear, with userId=null) a participant. */
FocusParticipant = "io.lotus.focus_participant",
/** toWidget: mix an audio clip into the local published mic track. */
InjectAudio = "io.lotus.inject_audio",
}
/** toWidget Lotus actions that must be allow-listed in `initializeWidget`. */
export const LOTUS_TO_WIDGET_ACTIONS: LotusWidgetActions[] = [
LotusWidgetActions.FocusParticipant,
LotusWidgetActions.InjectAudio,
];