feat: basic selected server indicator

This commit is contained in:
2026-03-30 04:54:02 +02:00
parent e3b23247a9
commit 64e34ad586
2 changed files with 49 additions and 26 deletions

View File

@@ -15,10 +15,22 @@
<!-- Saved servers icons --> <!-- Saved servers icons -->
<div class="flex-1 w-full overflow-y-auto flex flex-col items-center gap-2 mt-2"> <div class="flex-1 w-full overflow-y-auto flex flex-col items-center gap-2 mt-2">
@for (room of visibleSavedRooms(); track room.id) { @for (room of visibleSavedRooms(); track room.id) {
<div class="relative flex w-full justify-center pl-2">
@if (isSelectedRoom(room)) {
<span
aria-hidden="true"
class="absolute left-1 top-1/2 h-7 w-1 -translate-y-1/2 rounded-full bg-primary shadow-[0_0_10px_rgba(59,130,246,0.45)]"
></span>
}
<button <button
type="button" type="button"
class="relative w-10 h-10 flex-shrink-0 rounded-2xl border border-border hover:border-primary/60 hover:shadow-sm transition-all" class="relative w-10 h-10 flex-shrink-0 rounded-2xl border border-border hover:border-primary/60 hover:shadow-sm transition-all"
[class.border-primary]="isSelectedRoom(room)"
[class.shadow-[0_0_0_1px_rgba(59,130,246,0.45),0_10px_20px_rgba(15,23,42,0.25)]]="isSelectedRoom(room)"
[class.scale-105]="isSelectedRoom(room)"
[title]="room.name" [title]="room.name"
[attr.aria-current]="isSelectedRoom(room) ? 'page' : null"
(click)="joinSavedRoom(room)" (click)="joinSavedRoom(room)"
(contextmenu)="openContextMenu($event, room)" (contextmenu)="openContextMenu($event, room)"
> >
@@ -30,8 +42,14 @@
class="w-full h-full object-cover" class="w-full h-full object-cover"
/> />
} @else { } @else {
<div class="w-full h-full flex items-center justify-center bg-secondary"> <div
<span class="text-sm font-semibold text-muted-foreground">{{ initial(room.name) }}</span> class="w-full h-full flex items-center justify-center bg-secondary transition-colors"
[class.bg-primary/15]="isSelectedRoom(room)"
>
<span
class="text-sm font-semibold text-muted-foreground transition-colors"
[class.text-foreground]="isSelectedRoom(room)"
>{{ initial(room.name) }}</span>
</div> </div>
} }
</div> </div>
@@ -42,6 +60,7 @@
</span> </span>
} }
</button> </button>
</div>
} }
</div> </div>
</nav> </nav>

View File

@@ -233,6 +233,10 @@ export class ServersRailComponent {
return count > 99 ? '99+' : String(count); return count > 99 ? '99+' : String(count);
} }
isSelectedRoom(room: Room): boolean {
return this.currentRoom()?.id === room.id;
}
private async refreshBannedLookup(rooms: Room[], currentUser: User | null): Promise<void> { private async refreshBannedLookup(rooms: Room[], currentUser: User | null): Promise<void> {
const requestVersion = ++this.banLookupRequestVersion; const requestVersion = ++this.banLookupRequestVersion;