diff --git a/mobile/App.tsx b/mobile/App.tsx index 5d5976a..f99d2ef 100644 --- a/mobile/App.tsx +++ b/mobile/App.tsx @@ -6,8 +6,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import * as Sentry from '@sentry/react-native'; import Constants from 'expo-constants'; import { registerRootComponent } from 'expo'; -import { useFonts } from 'expo-font'; -import { Text as RNText } from 'react-native'; import * as ScreenCapture from 'expo-screen-capture'; import { StatusBar } from 'expo-status-bar'; import * as Updates from 'expo-updates'; @@ -77,30 +75,12 @@ const queryClient = new QueryClient({ }, }); -// Globalny default fontu dla całego — General Sans Regular jako body. -// Komponenty które chcą display/mono nadpisują fontFamily jawnie (bo RN nie -// syntezuje weightów dla custom fontów). Bold-ale-bez-fontFamily tekst zostanie -// Regular weightem General Sans — wciąż distinctive face, akceptowalne dla -// nietkniętych ekranów; high-traffic komponenty mają jawny Semibold. -let _textDefaultApplied = false; -function applyDefaultFont() { - if (_textDefaultApplied) return; - _textDefaultApplied = true; - const T = RNText as unknown as { defaultProps?: { style?: unknown } }; - T.defaultProps = T.defaultProps || {}; - const prev = T.defaultProps.style; - T.defaultProps.style = [{ fontFamily: 'GeneralSans-Regular' }, prev].filter(Boolean); -} +// NB: custom fonty (General Sans + Geist Mono) USUNIĘTE z bundla 2026-05-31 — +// `expo-font`/`ExpoFontLoader` natywny moduł NIE jest w APK 0.1.9 (build 22-maja, +// przed dodaniem expo-font) → useFonts crashował OTA bundle (ErrorRecovery rollback). +// System font do czasu rebuildu APK z expo-font. Patrz [[reference-ota-runtime-version]]. export default function App() { - const [fontsLoaded] = useFonts({ - 'GeneralSans-Regular': require('./assets/fonts/GeneralSans-Regular.ttf'), - 'GeneralSans-Medium': require('./assets/fonts/GeneralSans-Medium.ttf'), - 'GeneralSans-Semibold': require('./assets/fonts/GeneralSans-Semibold.ttf'), - 'GeistMono-Regular': require('./assets/fonts/GeistMono-Regular.ttf'), - }); - if (fontsLoaded) applyDefaultFont(); - const [hydrated, setHydrated] = useState(false); const [ageAccepted, setAgeAccepted] = useState(false); const [client, setClient] = useState(null); @@ -270,7 +250,7 @@ export default function App() { return () => sub.remove(); }, []); - if (!fontsLoaded || !hydrated || !lockReady) { + if (!hydrated || !lockReady) { return ( diff --git a/mobile/app.json b/mobile/app.json index 79815a4..ccc0189 100644 --- a/mobile/app.json +++ b/mobile/app.json @@ -6,7 +6,7 @@ "orientation": "portrait", "userInterfaceStyle": "automatic", "newArchEnabled": false, - "runtimeVersion": "0.1.9", + "runtimeVersion": "1.0", "updates": { "enabled": true, "url": "https://api.goon-foss.org/expo-updates/manifest", diff --git a/mobile/src/components/GoonWordmark.tsx b/mobile/src/components/GoonWordmark.tsx index 2691c7b..d8ba112 100644 --- a/mobile/src/components/GoonWordmark.tsx +++ b/mobile/src/components/GoonWordmark.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { Text, View } from 'react-native'; import Svg, { Circle } from 'react-native-svg'; -import { fonts, theme } from '../theme'; +import { theme } from '../theme'; interface WordmarkProps { /** fontSize wordmarku w px. */ @@ -29,8 +29,9 @@ interface WordmarkProps { } export function GoonWordmark({ size = 26, color = theme.fg, mono = false }: WordmarkProps) { + // System bold (custom font usunięty z OTA bundla — ExpoFontLoader nie w APK). const base = { - fontFamily: fonts.display, + fontWeight: '800' as const, fontSize: size, letterSpacing: -size * 0.03, includeFontPadding: false as const, diff --git a/mobile/src/components/MoviePosterCard.tsx b/mobile/src/components/MoviePosterCard.tsx index 78cf24e..af47e6a 100644 --- a/mobile/src/components/MoviePosterCard.tsx +++ b/mobile/src/components/MoviePosterCard.tsx @@ -3,7 +3,7 @@ import { Image } from 'expo-image'; import React from 'react'; import { Pressable, StyleSheet, Text, View } from 'react-native'; -import { fonts, theme } from '../theme'; +import { theme } from '../theme'; import type { MovieOut } from '../types'; export function MoviePosterCard({ @@ -101,7 +101,7 @@ const styles = StyleSheet.create({ paddingHorizontal: 6, paddingVertical: 2, }, - newBadgeText: { color: theme.fg, fontSize: 9, fontFamily: fonts.mono, fontWeight: '700', letterSpacing: 0.6 }, + newBadgeText: { color: theme.fg, fontSize: 9, fontWeight: '800', letterSpacing: 0.6 }, posterDimmed: { opacity: 0.45 }, watchedBadge: { position: 'absolute', @@ -124,7 +124,7 @@ const styles = StyleSheet.create({ backgroundColor: 'rgba(0,0,0,0.5)', }, progressFg: { height: 3, backgroundColor: theme.accent }, - title: { color: theme.fg, fontSize: 13, fontFamily: fonts.display, marginTop: 6, letterSpacing: -0.2 }, + title: { color: theme.fg, fontSize: 13, fontWeight: '600', marginTop: 6, letterSpacing: -0.2 }, titleDimmed: { color: theme.muted }, - meta: { color: theme.muted, fontSize: 10, fontFamily: fonts.mono, marginTop: 2, letterSpacing: 0.5, textTransform: 'uppercase' }, + meta: { color: theme.muted, fontSize: 10, fontWeight: '600', marginTop: 2, letterSpacing: 0.5, textTransform: 'uppercase' }, }); diff --git a/mobile/src/components/SceneTile.tsx b/mobile/src/components/SceneTile.tsx index 94749cc..7f1cee7 100644 --- a/mobile/src/components/SceneTile.tsx +++ b/mobile/src/components/SceneTile.tsx @@ -27,7 +27,7 @@ import React, { useState } from 'react'; import { Pressable, StyleSheet, Text, View } from 'react-native'; import type { RootStackParamList } from '../navigation'; -import { fonts, theme } from '../theme'; +import { theme } from '../theme'; import type { SceneOut } from '../types'; import { Thumb } from './Thumb'; @@ -190,13 +190,13 @@ const styles = StyleSheet.create({ durText: { color: theme.fg, fontSize: 11, - fontFamily: fonts.mono, + fontWeight: '600', fontVariant: ['tabular-nums'], }, title: { color: theme.fg, fontSize: 14, - fontFamily: fonts.display, + fontWeight: '600', marginTop: 8, letterSpacing: -0.2, }, @@ -204,7 +204,7 @@ const styles = StyleSheet.create({ meta: { color: theme.muted, fontSize: 10, - fontFamily: fonts.mono, + fontWeight: '600', marginTop: 3, letterSpacing: 0.5, textTransform: 'uppercase', diff --git a/mobile/src/navigation.tsx b/mobile/src/navigation.tsx index 2613853..56f44bb 100644 --- a/mobile/src/navigation.tsx +++ b/mobile/src/navigation.tsx @@ -24,7 +24,7 @@ import { SitesScreen } from './screens/SitesScreen'; import { StudioScenesScreen } from './screens/StudioScenesScreen'; import { TagScenesScreen } from './screens/TagScenesScreen'; import { TagsScreen } from './screens/TagsScreen'; -import { fonts, theme } from './theme'; +import { theme } from './theme'; export type RootStackParamList = { Scenes: undefined; @@ -101,7 +101,7 @@ function TopTabs({ style={{ color: active ? theme.accent : theme.muted, fontSize: 13, - fontFamily: active ? fonts.display : fonts.medium, + fontWeight: active ? '700' : '500', letterSpacing: 0.3, }} > @@ -145,7 +145,7 @@ export function AppNavigator({ onLogout, client, appVersion }: AppNavigatorProps