fix(dashboard): reset scroll on ChatView refocus to undo iOS drift

After dismissing and re-bringing up the mobile keyboard, iOS could
leave window.scrollY > 0 and visualViewport.offsetTop > 0. With
useMobileScrollLock then pinning body{position:fixed} relative to that
drifted scroll, the message thread anchored above the visible viewport
and a large blank area appeared below it.

handleInputFocus now resets window scroll to (0,0) on mobile in a
zero-delay timeout — late enough that iOS finishes its own
scroll-into-view first, but before useMobileScrollLock observes the
drifted state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-05-06 20:42:10 -07:00
parent 7b3a31ec3b
commit a41157545d
11 changed files with 352 additions and 11 deletions

View File

@@ -108,11 +108,31 @@
.quick-entry-actions {
display: flex;
align-items: center;
gap: 8px;
gap: var(--space-sm);
flex-wrap: wrap;
flex: 1 1 auto;
}
.quick-entry-branch-fields {
display: flex;
flex-wrap: wrap;
gap: var(--space-sm);
width: 100%;
}
.quick-entry-branch-fields label {
display: flex;
flex: 1 1 calc(50% - var(--space-sm));
flex-direction: column;
gap: var(--space-xs);
min-width: min(100%, calc(var(--space-xl) * 12));
}
.quick-entry-branch-fields span {
color: var(--text-muted);
font-size: 0.75rem;
}
.quick-entry-model-wrap {
position: relative;
}
@@ -434,8 +454,13 @@
min-height: 36px;
}
.quick-entry-branch-fields label {
flex: 1 1 100%;
min-width: 100%;
}
.quick-entry-box .dep-dropdown {
max-width: calc(100vw - 32px);
max-width: calc(100vw - calc(var(--space-lg) * 2));
}
}