managarten/apps-archived/mukke/apps/mobile/app/_layout.tsx
Till JS 7a56699d45 feat(mukke): rename LightWrite to Mukke and add music library, player, playlists
Combines LightWrite (beat/lyrics editor) and Mukke (iOS music player) into
a single web-based music workspace app. Archives the old Mukke mobile app.

- Rename: @lightwrite/* → @mukke/*, all branding, configs, Dockerfiles
- New DB schemas: songs, playlists, playlist_songs + songId FK on projects
- New backend modules: SongModule, PlaylistModule, LibraryModule
- New web: app shell with sidebar, library (songs/albums/artists/genres),
  web player (queue/shuffle/repeat/MediaSession), playlists, search,
  upload, dashboard, album/artist/genre detail pages
- Auth: add forgot-password + reset-password pages, extend auth store
- Tests: 40 backend unit tests (song, playlist, library services)
- Config: env generation, MinIO bucket, docker-compose prod, cloudflare
- Docs: update CLAUDE.md, auth guidelines with SvelteKit checklist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:55:56 +01:00

78 lines
2.1 KiB
TypeScript

import '../global.css';
import { Stack } from 'expo-router';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { ThemeWrapper } from '~/components/ThemeWrapper';
import { AudioProvider } from '~/contexts/AudioContext';
import { ThemeProvider } from '~/utils/themeContext';
export const unstable_settings = {
initialRouteName: '(tabs)',
};
export default function RootLayout() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<SafeAreaProvider>
<ThemeProvider>
{({ isDarkMode }) => (
<ThemeWrapper>
<AudioProvider>
<Stack
screenOptions={{
headerStyle: {
backgroundColor: isDarkMode ? '#1E1E1E' : 'transparent',
},
headerTintColor: isDarkMode ? '#FFFFFF' : '#000000',
headerTitleStyle: {
color: isDarkMode ? '#FFFFFF' : '#000000',
},
contentStyle: {
backgroundColor: isDarkMode ? '#121212' : '#FFFFFF',
},
}}
>
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
<Stack.Screen
name="player"
options={{
presentation: 'modal',
headerShown: false,
}}
/>
<Stack.Screen
name="queue"
options={{
presentation: 'modal',
title: 'Warteschlange',
}}
/>
<Stack.Screen
name="album/[id]"
options={{ title: 'Album', headerBackTitle: 'Zurück' }}
/>
<Stack.Screen
name="artist/[id]"
options={{ title: 'Künstler', headerBackTitle: 'Zurück' }}
/>
<Stack.Screen
name="playlist/[id]"
options={{ title: 'Playlist', headerBackTitle: 'Zurück' }}
/>
<Stack.Screen
name="playlist/new"
options={{
presentation: 'modal',
title: 'Neue Playlist',
}}
/>
</Stack>
</AudioProvider>
</ThemeWrapper>
)}
</ThemeProvider>
</SafeAreaProvider>
</GestureHandlerRootView>
);
}