From 0d52cb184693048a2588f07aa3928879bcc634a8 Mon Sep 17 00:00:00 2001 From: chahinebrini Date: Thu, 7 May 2026 21:23:46 +0200 Subject: [PATCH] fix(ui): keyboard-first-tap, Teilen-Button bigger, Header-Icon hitSlop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (app)/index.tsx: - FlatList keyboardShouldPersistTaps="handled" — Bild-Icon im ComposeCard reagiert ab erstem Tap auch wenn Tastatur offen. Vorher dismisste der Tap nur die Tastatur (RN-Default "never"). ComposeCard.tsx Teilen-Button: - height 44→52, px-5→px-6, paper-plane-outline-Icon size 18 + text-base Nunito_700Bold. Standard-iOS-Filled-Primary-Button-Style. AppHeader.tsx Bell + Avatar: - hitSlop 4pt allseitig auf beiden Pressables — effective tap-area 36→44pt ohne Layout-Verschiebung - Bell-Icon size 18→22 (konsistent mit Avatar-36pt-Kreis) Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/rebreak-native/app/(app)/index.tsx | 1 + apps/rebreak-native/components/AppHeader.tsx | 4 +++- apps/rebreak-native/components/ComposeCard.tsx | 9 ++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/rebreak-native/app/(app)/index.tsx b/apps/rebreak-native/app/(app)/index.tsx index 68ba2cd..ccc9bdc 100644 --- a/apps/rebreak-native/app/(app)/index.tsx +++ b/apps/rebreak-native/app/(app)/index.tsx @@ -87,6 +87,7 @@ export default function HomeScreen() { keyExtractor={keyExtractor} contentContainerStyle={{ paddingHorizontal: 16, paddingTop: 12, paddingBottom: 32 }} showsVerticalScrollIndicator={false} + keyboardShouldPersistTaps="handled" // Performance tuning — measured on Galaxy A50 (older mid-range): // VirtualizedList warned with dt=2.26s for ~7k content. These props // shrink the per-batch render cost and reclaim off-screen views. diff --git a/apps/rebreak-native/components/AppHeader.tsx b/apps/rebreak-native/components/AppHeader.tsx index f881b47..53422fc 100644 --- a/apps/rebreak-native/components/AppHeader.tsx +++ b/apps/rebreak-native/components/AppHeader.tsx @@ -71,10 +71,11 @@ export function AppHeader({ notifCount, showBack, title }: Props = {}) { setNotifOpen(true)} + hitSlop={{ top: 4, bottom: 4, left: 4, right: 4 }} className="w-9 h-9 rounded-full bg-white items-center justify-center" style={({ pressed }) => ({ opacity: pressed ? 0.7 : 1 })} > - + {badge > 0 && ( @@ -87,6 +88,7 @@ export function AppHeader({ notifCount, showBack, title }: Props = {}) { {/* Avatar = Trigger für Dropdown-Menu (kein separates 3-Punkte-Icon) */} setMenuOpen(true)} + hitSlop={{ top: 4, bottom: 4, left: 4, right: 4 }} className={`w-9 h-9 rounded-full items-center justify-center overflow-hidden ${showAvatarImage ? 'bg-neutral-100' : 'bg-rebreak-500'}`} style={({ pressed }) => ({ opacity: pressed ? 0.7 : 1 })} > diff --git a/apps/rebreak-native/components/ComposeCard.tsx b/apps/rebreak-native/components/ComposeCard.tsx index 1d63b08..72c70db 100644 --- a/apps/rebreak-native/components/ComposeCard.tsx +++ b/apps/rebreak-native/components/ComposeCard.tsx @@ -163,16 +163,19 @@ export function ComposeCard({ onPosted }: Props) { ({ - height: 44, + height: 52, opacity: pressed || !content.trim() || posting ? 0.5 : 1, })} > {posting ? ( ) : ( - {t('community.share')} + <> + + {t('community.share')} + )}