fixed scrolling

This commit is contained in:
2026-03-11 16:22:17 +01:00
parent 11cc5350c8
commit 64e03964e9
2 changed files with 65 additions and 16 deletions

View File

@@ -40,12 +40,12 @@
</div> </div>
} }
<div class="chat-header d-flex flex-column flex-lg-row justify-content-between align-items-start align-items-lg-center gap-3 mb-4"> <div class="chat-header mb-4">
<div>
<a class="back-link" routerLink="/">← Back to dashboard</a>
@if (currentUser(); as connectedUser) { @if (currentUser(); as connectedUser) {
<h1 class="h3 mb-1 mt-2">{{ connectedUser.displayName }}</h1> <div class="chat-header-main">
<div class="status-indicators mt-2"> <a class="back-link" routerLink="/" aria-label="Back to dashboard"></a>
<h1 class="chat-header-title mb-0">{{ connectedUser.displayName }}</h1>
<div class="status-indicators">
<div class="status-indicator"> <div class="status-indicator">
<span class="status-led" [class.status-led-ok]="indicatorTone(session.signalingState()) === 'ok'" [class.status-led-connecting]="indicatorTone(session.signalingState()) === 'connecting'" [class.status-led-offline]="indicatorTone(session.signalingState()) === 'offline'"></span> <span class="status-led" [class.status-led-ok]="indicatorTone(session.signalingState()) === 'ok'" [class.status-led-connecting]="indicatorTone(session.signalingState()) === 'connecting'" [class.status-led-offline]="indicatorTone(session.signalingState()) === 'offline'"></span>
<span>Signaling</span> <span>Signaling</span>
@@ -62,11 +62,13 @@
<span>WebRTC</span> <span>WebRTC</span>
</button> </button>
</div> </div>
} @else {
<h1 class="h3 mb-1 mt-2">Not signed in</h1>
<p class="small text-secondary mb-0">Return to the dashboard and sign in again.</p>
}
</div> </div>
} @else {
<div class="chat-header-main">
<a class="back-link" routerLink="/" aria-label="Back to dashboard"></a>
<h1 class="chat-header-title mb-0">Not signed in</h1>
</div>
}
</div> </div>
<div class="chat-layout"> <div class="chat-layout">
@@ -279,7 +281,7 @@
<textarea <textarea
#composerTextarea #composerTextarea
class="form-control composer-textarea" class="form-control composer-textarea"
rows="3" rows="2"
[(ngModel)]="messageText" [(ngModel)]="messageText"
(ngModelChange)="handleMessageTextChange($event)" (ngModelChange)="handleMessageTextChange($event)"
(keydown.enter)="handleComposerEnter($event)" (keydown.enter)="handleComposerEnter($event)"

View File

@@ -17,11 +17,32 @@
} }
.chat-page { .chat-page {
display: flex;
flex-direction: column;
width: min(100%, 800px); width: min(100%, 800px);
height: min(calc(100dvh - 2rem), 1024px);
max-height: 1024px;
margin-inline: auto; margin-inline: auto;
overflow-x: hidden; overflow-x: hidden;
} }
.chat-header {
flex: 0 0 auto;
}
.chat-header-main {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.85rem;
}
.chat-header-title {
margin: 0;
font-size: clamp(1.35rem, 2vw, 1.75rem);
line-height: 1.1;
}
.call-modal-backdrop { .call-modal-backdrop {
position: fixed; position: fixed;
inset: 0; inset: 0;
@@ -91,14 +112,22 @@
} }
.back-link { .back-link {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
color: var(--link-color); color: var(--link-color);
text-decoration: none; text-decoration: none;
font-size: 1.4rem;
line-height: 1;
} }
.status-indicators { .status-indicators {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.9rem; gap: 0.9rem;
margin-left: auto;
} }
.status-indicator { .status-indicator {
@@ -151,11 +180,16 @@
.chat-layout { .chat-layout {
display: grid; display: grid;
flex: 1 1 auto;
grid-template-columns: minmax(10rem, 13rem) minmax(0, 1fr); grid-template-columns: minmax(10rem, 13rem) minmax(0, 1fr);
gap:1.25rem; gap:1.25rem;
min-height: 0;
} }
.peer-sidebar { .peer-sidebar {
display: flex;
flex-direction: column;
min-height: 0;
padding:1rem; padding:1rem;
border-radius: 1.3rem; border-radius: 1.3rem;
border: 1px solid var(--surface-border-soft); border: 1px solid var(--surface-border-soft);
@@ -174,8 +208,10 @@
.peer-list { .peer-list {
display: grid; display: grid;
align-content: start;
flex: 1 1 auto;
gap: 0.75rem; gap: 0.75rem;
max-height: calc(100dvh - 17rem); min-height: 0;
overflow: auto; overflow: auto;
} }
@@ -273,15 +309,17 @@
} }
.chat-main { .chat-main {
display: grid;
grid-template-rows: minmax(0, 1fr) auto;
min-width: 0; min-width: 0;
min-height: 0;
} }
.conversation { .conversation {
display: grid; display: grid;
gap: 0.85rem; gap: 0.85rem;
align-content: start; align-content: start;
min-height: 24rem; min-height: 0;
max-height: calc(100dvh - 20rem);
overflow: auto; overflow: auto;
padding: 0.5rem 0; padding: 0.5rem 0;
} }
@@ -392,6 +430,7 @@
.composer { .composer {
display: grid; display: grid;
gap: 0.85rem; gap: 0.85rem;
flex: 0 0 auto;
padding-top: 1rem; padding-top: 1rem;
margin-top: 1rem; margin-top: 1rem;
border-top: 1px solid var(--surface-border-soft); border-top: 1px solid var(--surface-border-soft);
@@ -441,7 +480,10 @@
} }
.composer-textarea { .composer-textarea {
min-height: 7rem; min-height: calc(2 * 1.5rem + 1.25rem);
max-height: calc(6 * 1.5rem + 1.25rem);
overflow-y: auto;
resize: none;
} }
.composer-call { .composer-call {
@@ -626,6 +668,11 @@
max-height: 16rem; max-height: 16rem;
} }
.status-indicators {
width: 100%;
margin-left: 0;
}
.bubble { .bubble {
max-width: 88%; max-width: 88%;
} }