Skip to content

1:N Portal UX: roster, focus state, request/release/handoff flows #80

Description

@FelineStateMachine

Part of #74. Depends on the protocol issue; can develop against a mocked host.

Portal currently renders a private 1:1 session; 1:N makes shared state visible for the first time.

  • Roster panel: connected viewers (session handles from the protocol roster message), who holds input focus, own capability set. Follows the repo UI rule: mono text labels or pixel SVG marks, no emoji.
  • Focus flows: request focus (pending state while the holder decides or policy resolves), release focus, owner preempt if configured. Focus loss is a first-class UI event (revoked, holder-disconnected, owner-preempted) with distinct, non-alarming messaging; input surfaces (pointer capture, controller activation) must disengage cleanly on loss, reusing the existing control-mode transition machinery in portal/main.js (control transition generation guards, ~lines 145-148 @ 17980ad).
  • Spectator mode: view-only viewers get a UI that never offers input affordances rather than offering and failing them.
  • Stream panel: per-viewer adaptive contribution (from the adaptive issue) so a throttled viewer can see it is the constraint.
  • Tauri backend: commands and events for roster/focus mirroring the protocol messages; keep them in the post-[suggestion] Split src-tauri commands/network.rs (5,955 lines) into client-media modules #71 module layout if that has landed.
  • Sequencing note: this lands on top of the main.js breakup ([suggestion] Break up portal/main.js (2,941 lines) into the existing .mjs module pattern #72); build new panels as .mjs modules with paired tests from the start rather than growing main.js.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmulti-client1:N session pivot: N viewers, exclusive input focus

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions