The FIRST-RUN INTRO overlay for an interactive channel — a generic, channel-agnostic card
the surface panel floats over a channel's pane the very first time a user opens that channel
(whiteboard, remote browser, …). It renders whatever ChannelOnboardingDetails the
channel plugin supplied (icon · heading · description · optional tips) and a single "Got it"
action plus a small ✕ — both emit Dismissed, which the host uses to mark the channel
seen (per user, via the user's settings) and hide the panel.
This component owns NO persistence or channel knowledge: it's a pure presenter wired by
RealtimeSurfaceTabsComponent, so it stays reusable for any current or future channel. When
Content is null it renders nothing (the host already gates on that, but the guard
keeps the component safe to drop in unconditionally).
The FIRST-RUN INTRO overlay for an interactive channel — a generic, channel-agnostic card the surface panel floats over a channel's pane the very first time a user opens that channel (whiteboard, remote browser, …). It renders whatever ChannelOnboardingDetails the channel plugin supplied (icon · heading · description · optional tips) and a single "Got it" action plus a small ✕ — both emit Dismissed, which the host uses to mark the channel seen (per user, via the user's settings) and hide the panel.
This component owns NO persistence or channel knowledge: it's a pure presenter wired by
RealtimeSurfaceTabsComponent, so it stays reusable for any current or future channel. When Content isnullit renders nothing (the host already gates on that, but the guard keeps the component safe to drop in unconditionally).