import React, {createContext, useContext, useMemo} from 'react' import {TextStyle, useColorScheme, ViewStyle} from 'react-native' import {darkTheme, defaultTheme} from './themes' export type ColorScheme = 'light' | 'dark' export type PaletteColorName = | 'default' | 'primary' | 'secondary' | 'inverted' | 'error' export type PaletteColor = { background: string backgroundLight: string text: string textLight: string textInverted: string link: string border: string borderDark: string icon: string [k: string]: string } export type Palette = Record export type ShapeName = 'button' | 'bigButton' | 'smallButton' export type Shapes = Record export type TypographyVariant = | 'xl-thin' | 'xl' | 'xl-medium' | 'xl-bold' | 'xl-heavy' | 'lg-thin' | 'lg' | 'lg-medium' | 'lg-bold' | 'lg-heavy' | 'md-thin' | 'md' | 'md-medium' | 'md-bold' | 'md-heavy' | 'sm-thin' | 'sm' | 'sm-medium' | 'sm-bold' | 'sm-heavy' | 'xs-thin' | 'xs' | 'xs-medium' | 'xs-bold' | 'xs-heavy' | 'title-xl' | 'title-lg' | 'title' | 'title-sm' | 'post-text-lg' | 'post-text' | 'button' | 'mono' export type Typography = Record export interface Theme { colorScheme: ColorScheme palette: Palette shapes: Shapes typography: Typography } export interface ThemeProviderProps { theme?: ColorScheme } export const ThemeContext = createContext(defaultTheme) export const useTheme = () => useContext(ThemeContext) export const ThemeProvider: React.FC = ({ theme, children, }) => { const colorScheme = useColorScheme() const value = useMemo( () => ((theme || colorScheme) === 'dark' ? darkTheme : defaultTheme), [colorScheme, theme], ) return {children} }