import ControlHint from '../ControlHint/index.jsx'; import NicknameForm from '../NicknameForm/index.jsx'; import SocialButton from '../SocialButton/index.jsx'; import KeyPill from '../vip/VipAudioUploadCard/KeyPill.jsx'; import { useSessionSelector } from '../../context/SessionContext.jsx'; import { getSocialById } from '../../lib/socials.js'; function ControlRow({ label, actionId }) { return (
{label} } />
); } function DesktopQuickstart() { return (

1. Click "Your rover is docked" to undock.

2. Drive with these keybindings:

3. Use the video HUD for rover controls and information.

4. Click "Dock rover" when finished.

); } function MobileQuickstart() { return (

1. Tap "Your rover is docked" to undock.

2. Hold and drag on the drive pad.

3. Choose Precision, Normal, or Turbo above the drive pad.

4. Use the other column for rover controls.

5. Tap "Dock and charge" when finished.

); } function DiscordQuickstartCard() { const discord = useSessionSelector((state) => getSocialById(state, 'discord')); /* The section has explanatory text around the actual button, so SocialButton's own null return is not enough here. Keep the whole Discord prompt self- contained so layouts do not need a separate social feature check. */ if (!discord?.url) return null; return (

Join our Discord server!

We have an active and welcoming community :3

); } export default function QuickstartOverlay({ visible, layout, showOnLoad, onToggleShowOnLoad, onClose, }) { const isDesktop = layout === 'desktop'; if (!visible) return null; const handleCheckbox = (event) => { const keepShowing = !event.target.checked; onToggleShowOnLoad?.(keepShowing); }; return (
Welcome! To get started: {/* */}
{isDesktop ? : }
{/* {!isDesktop?
: null} */}

Next...

Set your nickname

Nicknames are assigned randomly by default, you can change yours here.

{/* */}
); }