Fired when the active-speaker set changes.
Optional avatar URL for the agent participant (matched by agent role).
The user asked to let agents see their camera and shared screen (true) or to stop (false). The room changes
nothing itself: the host records the choice (in a LiveKit room, the server sets the person's attribute), and the
room shows it once its controller reports it.
Fired before connecting. Cancelable.
Fired before the active device is switched. Cancelable.
Fired before disconnecting/leaving. Cancelable (e.g. confirm "leave call?").
Fired before a local-media track is toggled. Cancelable.
Fired before a data-channel message is sent. Cancelable; Text is mutable.
Turns the leave button into a Zoom/Teams-style split offering Leave vs. End meeting for everyone.
Purely presentational here — this generic component has no notion of "ending for everyone"; it just emits
EndForAll so the host (e.g. the MJ binding) can tear down agents/the room. Default false (plain Leave).
Fired when a chat message (chat-topic data) is received, and when the user's own message has gone out. A message that does not go out is not reported here: the chat marks it not sent, and the controller's failure, if any, comes through ErrorOccurred.
The accumulated chat messages.
Open the chat panel by default on connect.
Fired when the room connects.
Fired for every inbound data-channel message (all topics).
Whether the device menu popover is open.
The device lists for the device menu.
Fired when the room disconnects.
The display name to publish for the local participant.
End-to-end-encryption passphrase. When set with E2EEWorker, the room connects with E2EE.
The E2EE web worker (host-provided, bundler-specific). Required for E2EEPassphrase.
Offer the "Let the agent see me" switch ("Let agents see me" with more than one agent) while an agent in the room watches (LiveKitRoomState.AgentWatching). The switch only asks: see AgentVisionChange.
Expose the background-blur toggle in the settings menu.
Allow toggling the camera.
Allow opening the device-settings menu.
Show the layout switcher (gallery / active speaker / split / audio-only).
Allow leaving the room from the control bar.
Allow toggling the microphone.
Expose the Krisp noise-filter toggle in the settings menu (LiveKit Cloud).
Allow pinning a participant to the spotlight (hover pin button on tiles).
Allow screen sharing.
Fired when the user chooses "End meeting for everyone" from the split-leave menu (only reachable when CanEndForAll). The host should tear down the meeting (e.g. stop all agents), then disconnect.
Fired when a room error occurs.
Whether a recording is currently in progress (host-managed).
The last room error message, surfaced in the overlay.
The stage layout mode.
Fired when the user changes the layout via the layout switcher.
Whether the layout switcher popover is open.
ReadonlyLayoutThe available layout options for the switcher.
Reads the lobby microphone's level, for the camera check's meter; null outside the lobby.
What the lobby shows: the camera, the devices and the user's choices; null outside the lobby.
Fired when the local-media toggle state changes.
Devices as one /media list, for the device menu.
ReadonlyMeterHow the tiles' meters move: as LiveKit's meter always did.
Fired when a participant joins.
Fired when a participant leaves.
Where the user put picture-in-picture boxes, by participant identity, as PipRectsChange gave them to the host.
Fired when the user moves or resizes a picture-in-picture box, or resets the layout: every box, by participant identity, for the host to save and give back through PipRects.
The PreJoin choices, once confirmed.
Whether the user has passed the PreJoin lobby (or PreJoin is disabled).
Fired when reconnection succeeds.
Fired when reconnection begins.
OptionalRoomAdvanced livekit-client room options merged into the constructed Room (overrides speech defaults).
The active camera deviceId, used to pre-select it in the device menu.
The active microphone deviceId, used to pre-select it in the device menu.
The active speaker deviceId, used to pre-select it in the device menu.
Whether the user hid their self-view (Hide on their tile); the camera stays on, so others still see them. A host that saves it gives it back here, as SelfViewHiddenChange gave it; otherwise it lasts for the session.
Fired when the user hides their self-view (true), or shows it again from the "Self-view hidden" chip or resets the
layout (false), for the host to save and give back through SelfViewHidden.
The panels of the page the Share menu offers under "This panel", such as the room's whiteboard: those on screen, in page order, leaving out any that holds this room. Empty where the browser cannot share a single panel.
Highlight active speakers with a ring.
Show the agent-state visualizer (listening/thinking/speaking) for the agent participant.
Show per-tile audio meters.
Enable the data-channel chat feature (toggle + panel).
Render the connecting/reconnecting/error overlay.
Show per-tile connection-quality indicators.
Show the control bar at all.
Show the header bar.
Show participant name badges on tiles.
Show the participant count in the header.
Enable the participants roster panel (toggle + panel).
Show a device-preview PreJoin lobby before connecting (suppresses auto-connect until the user joins).
Show the recording toggle in the control bar (the host wires the actual egress call).
Show the local participant's self-view tile.
Enable the collaborative whiteboard surface (data-channel-synced; agent co-authoring supported).
Which side panel is currently open.
The split-view ratio (left/screen pane fraction, 0.2–0.8).
Start with the camera enabled.
Start with the microphone enabled.
The current normalized room state snapshot.
Fired on every normalized room state change.
Fired when the user moves a participant's tile or resets the layout: the room's moves, oldest first, for the host to save and give back through TileMoves.
The header title.
Fired when the user toggles recording (the host performs the server-side egress call).
The unread chat count (since the chat panel was last open).
Whether the whiteboard surface is currently shown (replaces the participant stage).
The number of agents in the room. The agent-vision words (the tiles' chips, the self-view and the "Let the agent see me" control) are plural only when there is more than one.
The agent participant whose name/state the agent indicator shows. In a MULTI-agent room this prefers the agent that is currently speaking (so the indicator reads e.g. "Marketing Agent · speaking", not whichever agent merely joined first), falling back to the first agent when none is speaking.
The agent's visual state: an explicit data-channel signal wins, else derived from speaking activity.
All participants (local + remote) for the roster panel.
The underlying controller — exposed for advanced/imperative host scenarios.
The participants to render on the stage (local included unless the host or the user turned the self-view off).
The non-spotlight participants for the spotlight-layout filmstrip.
Whether the room is connected.
The user's own screen share as a video source, while they share.
The participant the user put in the spotlight (the pin), or null: their tile was moved to the stage
(MoveTile), pinning is on, and they are in the room. Setting it moves that participant's tile there; null
sends the pinned tile back to the strip.
Where a picture-in-picture box's participant may go, for the "Move to…" menu on its bar.
The participants the user moved into picture-in-picture boxes, for mj-media-stage, keyed by identity.
The participant currently sharing their screen (for split view), if any.
The LiveKit server URL (e.g. wss://livekit.myorg.com).
Whether the bar offers the "Let the agent see me" switch: the host allows it, and an agent in the room watches.
Whether the connection overlay should be visible.
Whether the "Self-view hidden" chip shows: the host allows a self-view and the user hid theirs.
The "speaker" pane participant for split view (active speaker → agent → first remote → local).
The participant featured in spotlight layout (pinned → active speaker → agent → first remote → local).
What the "Move to…" menu calls the room's places: the strip is the gallery in Gallery, else the filmstrip.
Where the user moved participants' tiles, as TileMovesChange gave them to the host: oldest first, one per
tile. Setting it replaces the room's moves. A move to the spotlight counts only while pinning is on, and a move to
hidden, a place the room does not offer, leaves the tile among the others.
The signed access token authorizing this participant to join the room.
Per-tile avatar URL for a participant (agent gets the configured agent avatar).
Connects to the room using the current inputs. Safe to call repeatedly.
Leaves the room.
A participant as the tiles render it: the same view always gives the same participant, so a tile never reattaches.
Moves a participant's tile: to the spotlight (stage), back among the others (tab, the filmstrip or the grid), or
into a picture-in-picture box (pip), and tells the host (TileMovesChange). One participant holds the
spotlight: a newer move there sends the last one back. The grid has no spotlight, so a move there switches the room
to the Active speaker layout. Moving to the spotlight needs EnablePinning.
A callback method that is invoked immediately after the default change detector has completed one change-check cycle for a component's view.
A callback method that is invoked immediately after the default change detector has checked data-bound properties if at least one has changed, and before the view and content children are checked.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.
Toggles camera background blur.
Shares something else, from the preview's Change: the browser's picker opens again.
Use OnCloseDeviceMenu.
Closes the device menu.
Use OnEnableSound.
Resumes audio playback after a browser autoplay block (must run from a user gesture).
Hides the user's self-view, and tells the host (SelfViewHiddenChange); the camera stays on.
The user turned the lobby's camera on or off.
The user joined from the lobby: the lobby frees its devices first, so the room can open them, then the room connects with the name from the check and the devices the lobby chose.
The user picked a microphone or camera in the lobby.
The user turned the lobby's microphone on or off.
Switches the device picked in the device menu.
Toggles the Krisp noise filter.
Use OnOpenDeviceSettings.
Opens the device menu and (re)loads device lists.
Shares one panel of the page alone, picked under "This panel" in the Share menu: the browser's picker offers this tab, and the share shows only the panel (Chrome and Edge). A panel that went away since the menu listed it shares nothing.
The user moved or resized a picture-in-picture box: keep it, and tell the host (PipRectsChange).
Handles PreJoin completion: stores the choices, marks PreJoin complete, and connects.
"Reset layout": every tile goes back where the call places it, so the pin and the boxes are cleared, every box's position is forgotten, and a hidden self-view shows again, as the realtime call's reset brings back a hidden camera box. The host hears all three, the self-view's on every reset, hidden or not.
Sends a message marked not sent again, from its Retry: the marked message goes, and the text is sent as a new message at the end of the chat, where the others will see it. Does nothing for a message that is not marked not sent or is no longer in the chat.
Starts screen sharing with the kind of surface the user picked from the Share menu offered first.
Sends a chat message on the chat topic and shows it in the chat at once. Once it has gone out it is reported on ChatMessage; one that does not go out is marked not sent (LiveKitChatMessage.NotSent), with a Retry (OnRetryChat).
Shows the user's self-view again, from the "Self-view hidden" chip or Reset layout, and tells the host.
Use OnSplitDragEnd.
Ends the split-view drag.
Updates the split ratio while dragging the divider, clamped to 20–80%.
Begins dragging the split-view divider.
Stops the user's screen share, from its preview.
Use OnToggleCamera.
Toggles the camera.
Use OnToggleChat.
Toggles the chat panel and clears the unread count when opening.
Use OnToggleLayoutMenu.
Toggles the layout switcher popover.
Use OnToggleMicrophone.
Toggles the microphone.
Use OnToggleParticipants.
Toggles the participants panel.
Pins/unpins a participant to the spotlight (toggles off if already pinned): a move to the spotlight and back.
Use OnToggleRecording.
Toggles recording intent (the host performs the actual server-side egress call).
Use OnToggleScreenShare.
Toggles screen sharing.
Use OnToggleWhiteboard.
Toggles the collaborative whiteboard surface.
Broadcasts a local whiteboard snapshot to the room over the data channel.
The participant in a picture-in-picture box, by the box's key (their identity).
Where a participant's tile may go from where it shows, for its "Move to…" menu, or null for no menu. The participant
the call put in the spotlight may be pinned there or boxed, but not sent to the strip, where the call would not keep
them while they speak. Without pinning the spotlight is not offered. The screen-share pane has no menu, and a
picture-in-picture box has its menu on its bar (PipMoves).
Where a participant's tile is, for its "Move to…" menu: the spotlight when the user put it there, else the strip.
mj-livekit-room— a full-featured, framework-portable LiveKit room UI. Owns a room controller (ILiveKitRoomController; LiveKit's by default), renders a participant grid/spotlight, control bar, chat, device picker, and participants roster, and re-surfaces the core's cancelable event model as@Output()s.Every feature is gated by an
@Inputso a host can compose exactly the experience it wants (voice-only widget, full conferencing surface, embedded co-agent panel, …) without forking the component.Public class members are PascalCase (MJ convention); private/protected members are camelCase.