fix(client): inset the native sidebar below the status bar #296
No reviewers
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol!296
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "295-sidebar-safe-area"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The native navigation sidebar slid out over the system status bar — the Carol brand row overlapped the clock/battery/signal area.
Cause
The drawer surface paints from
y=0(under Android's translucent status bar / behind the iOS notch), but theSidebarroot container (apps/client/lib/nav/Sidebar.tsx) used onlypaddingVertical: 16and never consumeduseSafeAreaInsets(). The in-sceneMobileHeaderinapp/(app)/_layout.tsxalready insets correctly; the drawer didn't.Fix
Add
useSafeAreaInsets()and set the sidebar containerpaddingTop = 16 + insets.top, mirroring the header's pattern.react-native-safe-area-contextis already a dep andSafeAreaProvideris already mounted at the root.Correct on all targets
insets.top(status-bar height / notch) pushes content clear; the inset strip still fills with the themed surface, so no content sits under the clock.insets.topis 0 →paddingTopcollapses to the existing 16; the permanent (≥720px) and narrow-web slide-in sidebars are unchanged.Top-only, matching the reported bug and the
MobileHeaderprecedent (bottom inset out of scope).Verification
pnpm -F @carol/client typecheck— passes.Closes #295
🤖 Generated with Claude Code
📊 Test coverage
Patch coverage: no testable lines changed.
Overall (
app/,lib/,db/, excluding UI per ADR-0019):Soft thresholds per ADR-0019. Coverage is informational and does not block merge.