Launcher: scrollable command guide, profile tabs fit without scrolling, confirm before removing a friend

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DjMbLQujBHunCCu5GpsHaT
This commit is contained in:
Claude committed 2026-09-30 20:07:15 +00:00
1 parent 38c9f249e1
commit eba2ccfdab
3 files changed
+41 -16

No files matched your search

+14 -1
View File
@@ -34,6 +34,9 @@
// Send Game Invite Modal
let inviteModalOpen = $state(false);
let removeTarget = $state<FriendInfo | null>(null);
let removeModalOpen = $state(false);
const askRemove = (friend: FriendInfo) => { removeTarget = friend; removeModalOpen = true; };
let inviteTargetFriend = $state<FriendInfo | null>(null);
let inviteInstanceId = $state(instances()[0]?.id ?? '');
let sendingInvite = $state(false);
@@ -381,7 +384,7 @@
<button class="ghost icon sm" onclick={() => openInviteModal(friend)} title="Invite to Game">
<Gamepad2 size={15} />
</button>
<button class="ghost icon sm danger-hover" onclick={() => handleRemoveFriend(friend.uuid)} title="Remove Friend">
<button class="ghost icon sm danger-hover" onclick={() => askRemove(friend)} title="Remove Friend">
<UserX size={15} />
</button>
</div>
@@ -625,6 +628,16 @@
</div>
<!-- Send Game Invite Modal -->
<Modal bind:open={removeModalOpen} title="Remove {removeTarget?.username}?" width={24}>
<p class="muted">{removeTarget?.username} will be removed from your friends. You can send a new request later.</p>
{#snippet footer()}
<button class="ghost" onclick={() => (removeModalOpen = false)}>Keep friend</button>
<button class="danger" onclick={() => { const f = removeTarget; removeModalOpen = false; if (f) handleRemoveFriend(f.uuid); }}>
<UserX size={14} /> Remove
</button>
{/snippet}
</Modal>
<Modal bind:open={inviteModalOpen} title="Invite {inviteTargetFriend?.username} to Play" width={24}>
<div class="invite-modal-body">
<p class="tiny muted">