import {useCallback} from 'react' import Animated, { FadeInUp, FadeOutUp, LayoutAnimationConfig, LinearTransition, } from 'react-native-reanimated' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {IS_INTERNAL} from '#/lib/app-info' import { type CommonNavigatorParams, type NativeStackScreenProps, } from '#/lib/routes/types' import {useGate} from '#/lib/statsig/statsig' import {isNative} from '#/platform/detection' import {useSetThemePrefs, useThemePrefs} from '#/state/shell' import {SettingsListItem as AppIconSettingsListItem} from '#/screens/Settings/AppIconSettings/SettingsListItem' import {atoms as a, native, useAlf, useTheme} from '#/alf' import * as ToggleButton from '#/components/forms/ToggleButton' import {type Props as SVGIconProps} from '#/components/icons/common' import {Moon_Stroke2_Corner0_Rounded as MoonIcon} from '#/components/icons/Moon' import {Phone_Stroke2_Corner0_Rounded as PhoneIcon} from '#/components/icons/Phone' import {TextSize_Stroke2_Corner0_Rounded as TextSize} from '#/components/icons/TextSize' import {TitleCase_Stroke2_Corner0_Rounded as Aa} from '#/components/icons/TitleCase' import * as Layout from '#/components/Layout' import {Text} from '#/components/Typography' import * as SettingsList from './components/SettingsList' type Props = NativeStackScreenProps export function AppearanceSettingsScreen({}: Props) { const {_} = useLingui() const {fonts} = useAlf() const gate = useGate() const {colorMode, darkTheme} = useThemePrefs() const {setColorMode, setDarkTheme} = useSetThemePrefs() const onChangeAppearance = useCallback( (keys: string[]) => { const appearance = keys.find(key => key !== colorMode) as | 'system' | 'light' | 'dark' | undefined if (!appearance) return setColorMode(appearance) }, [setColorMode, colorMode], ) const onChangeDarkTheme = useCallback( (keys: string[]) => { const theme = keys.find(key => key !== darkTheme) as | 'dim' | 'dark' | undefined if (!theme) return setDarkTheme(theme) }, [setDarkTheme, darkTheme], ) const onChangeFontFamily = useCallback( (values: string[]) => { const next = values[0] === 'system' ? 'system' : 'theme' fonts.setFontFamily(next) }, [fonts], ) const onChangeFontScale = useCallback( (values: string[]) => { const next = values[0] || ('0' as any) fonts.setFontScale(next) }, [fonts], ) return ( Appearance {colorMode !== 'light' && ( )} {isNative && IS_INTERNAL && gate('debug_subscriptions') && ( <> )} ) } export function AppearanceToggleButtonGroup({ title, description, icon: Icon, items, values, onChange, }: { title: string description?: string icon: React.ComponentType items: { label: string name: string }[] values: string[] onChange: (values: string[]) => void }) { const t = useTheme() return ( <> {title} {description && ( {description} )} {items.map(item => ( {item.label} ))} ) }