feat: Add incoming call modal

This commit is contained in:
2026-05-17 15:26:05 +02:00
parent 9d0a4478b2
commit 8e3ccf4157
8 changed files with 339 additions and 7 deletions

View File

@@ -0,0 +1,73 @@
@if (session()) {
<div class="fixed inset-0 z-[120] bg-black/60 backdrop-blur-sm"></div>
<div class="pointer-events-none fixed inset-0 z-[121] flex items-center justify-center p-4">
<section
class="pointer-events-auto w-full max-w-sm rounded-lg border border-border bg-card shadow-2xl"
role="dialog"
aria-modal="true"
aria-labelledby="incoming-call-title"
>
<div class="flex flex-col items-center px-6 pb-6 pt-7 text-center">
<div class="relative">
@if (caller(); as callerUser) {
<app-user-avatar
[avatarUrl]="callerUser.avatarUrl"
[name]="callerUser.displayName || callerUser.username"
[showStatusBadge]="true"
[status]="callerUser.status"
size="xl"
/>
} @else {
<div class="grid h-16 w-16 place-items-center rounded-full bg-secondary text-xl font-semibold text-secondary-foreground">
{{ callerName().charAt(0).toUpperCase() }}
</div>
}
<div class="absolute -bottom-1 -right-1 grid h-7 w-7 place-items-center rounded-full border border-card bg-green-600 text-white shadow-lg">
<ng-icon
name="lucidePhone"
class="h-3.5 w-3.5"
/>
</div>
</div>
<p class="mt-5 text-[11px] font-semibold uppercase tracking-[0.18em] text-primary">Incoming call</p>
<h2
id="incoming-call-title"
class="mt-2 text-xl font-semibold text-foreground"
>
{{ callerName() }} is calling
</h2>
<p class="mt-1 text-sm text-muted-foreground">{{ callKindLabel() }}</p>
<div class="mt-6 grid w-full grid-cols-2 gap-3">
<button
type="button"
class="inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-border bg-secondary px-4 text-sm font-semibold text-foreground transition-colors hover:bg-secondary/80"
(click)="decline()"
>
<ng-icon
name="lucidePhoneOff"
class="h-4 w-4"
/>
Decline
</button>
<button
type="button"
class="inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-green-600 px-4 text-sm font-semibold text-white transition-colors hover:bg-green-500 disabled:cursor-not-allowed disabled:opacity-70"
[disabled]="answering()"
(click)="answer()"
>
<ng-icon
name="lucidePhone"
class="h-4 w-4"
/>
Answer
</button>
</div>
</div>
</section>
</div>
}