import { StyleSheet } from 'react-native'; import NamedStyles = StyleSheet.NamedStyles; import type { ExtendedTheme, Theme } from './theme.types'; export function createThemedStyleSheet< Styles extends NamedStyles, D extends object | undefined = undefined >( createStylesWithTheme: ( theme: D extends undefined ? Theme : ExtendedTheme ) => Styles ) { return (theme: D extends undefined ? Theme : ExtendedTheme) => StyleSheet.create(createStylesWithTheme(theme)); } export function extendTheme( theme: Theme, extendedThemeMap: { [key: 'dark' | 'light' | string]: D; } ): ExtendedTheme { return { ...theme, ...extendedThemeMap[theme.type], }; } export function selectByTheme( theme: Theme, options: { [key: 'dark' | 'light' | string]: T; } ) { return options[theme.type]; }