Sheets via neuer KeyboardAwareSheet-Composable (in Modal pattern, auto-grow mit Tastatur, paddingBottom-Lift): EditMail, AddDomain, CreateRoom, ConnectMail. GameOverScreen behält Spring-Slide-In, nutzt RN Keyboard.addListener für Lift. - KeyboardAwareSheet.tsx — universal modal with sheet-grow + keyboard-padding - react-native-keyboard-controller installiert + KeyboardProvider in Root - Snake: time + ScoreProgressBar + useSnakeSounds (haptic, audio TODO) - Tetris: title weg, Buttons zentriert, kein Pressable mit style-fn - DPad-Buttons 60→48, more bg, no scale - useMe: pub-sub listener pattern für app-weite avatar/nickname-Updates - dm.tsx: resolveAvatar wrap (iron.png-Warning) - Mail-error-humanizer + locales Recovery-Doc-Update in docs/internal/RECOVERY_LOG_2026-05-10.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
19 lines
481 B
TypeScript
19 lines
481 B
TypeScript
/**
|
|
* Reactive viewport height.
|
|
* Vereinfachte Version für Marketing-Site (kein Capacitor/WKWebView-Keyboard-Handling nötig).
|
|
*/
|
|
export function useViewportHeight() {
|
|
const height = ref(globalThis.innerHeight || 800);
|
|
|
|
onMounted(() => {
|
|
const update = () => {
|
|
height.value = window.innerHeight;
|
|
};
|
|
window.addEventListener("resize", update);
|
|
update();
|
|
onUnmounted(() => window.removeEventListener("resize", update));
|
|
});
|
|
|
|
return { height };
|
|
}
|