import {Platform} from 'react-native' import {tokens} from '#/alf' import {type Palette} from '#/alf/themes' import {fontWeight} from '#/alf/tokens' import {colors} from './styles' import {type Theme} from './ThemeContext' export const defaultTheme = ({ lightPalette, darkPalette, }: { lightPalette: Palette darkPalette: Palette }): Theme => ({ colorScheme: 'light', palette: { default: { background: lightPalette.white, backgroundLight: lightPalette.contrast_25, text: lightPalette.black, textLight: lightPalette.contrast_700, textInverted: lightPalette.white, link: lightPalette.primary_500, border: lightPalette.contrast_100, }, primary: { background: colors.blue3, backgroundLight: colors.blue2, text: colors.white, textLight: colors.blue0, textInverted: colors.blue3, link: colors.blue0, border: colors.blue4, }, secondary: { background: colors.green3, backgroundLight: colors.green2, text: colors.white, textLight: colors.green1, textInverted: colors.green4, link: colors.green1, border: colors.green4, }, inverted: { background: darkPalette.black, backgroundLight: darkPalette.contrast_50, text: darkPalette.white, textLight: darkPalette.contrast_700, textInverted: darkPalette.black, link: darkPalette.primary_500, border: darkPalette.contrast_100, }, error: { background: colors.red3, backgroundLight: colors.red2, text: colors.white, textLight: colors.red1, textInverted: colors.red3, link: colors.red1, border: colors.red4, }, }, shapes: { button: { // TODO }, bigButton: { // TODO }, smallButton: { // TODO }, }, typography: { '2xl-thin': { fontSize: 18, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, '2xl': { fontSize: 18, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, '2xl-medium': { fontSize: 18, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, '2xl-bold': { fontSize: 18, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, '2xl-heavy': { fontSize: 18, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.bold, }, 'xl-thin': { fontSize: 17, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, xl: { fontSize: 17, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'xl-medium': { fontSize: 17, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'xl-bold': { fontSize: 17, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'xl-heavy': { fontSize: 17, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.bold, }, 'lg-thin': { fontSize: 16, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, lg: { fontSize: 16, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'lg-medium': { fontSize: 16, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'lg-bold': { fontSize: 16, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'lg-heavy': { fontSize: 16, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.bold, }, 'md-thin': { fontSize: 15, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, md: { fontSize: 15, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'md-medium': { fontSize: 15, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'md-bold': { fontSize: 15, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'md-heavy': { fontSize: 15, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.bold, }, 'sm-thin': { fontSize: 14, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, sm: { fontSize: 14, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'sm-medium': { fontSize: 14, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'sm-bold': { fontSize: 14, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'sm-heavy': { fontSize: 14, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.bold, }, 'xs-thin': { fontSize: 13, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, xs: { fontSize: 13, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'xs-medium': { fontSize: 13, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'xs-bold': { fontSize: 13, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'xs-heavy': { fontSize: 13, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.bold, }, 'title-2xl': { fontSize: 34, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'title-xl': { fontSize: 28, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.semiBold, }, 'title-lg': { fontSize: 22, fontWeight: fontWeight.semiBold, }, title: { fontWeight: fontWeight.semiBold, fontSize: 20, letterSpacing: tokens.TRACKING, }, 'title-sm': { fontWeight: fontWeight.semiBold, fontSize: 17, letterSpacing: tokens.TRACKING, }, 'post-text': { fontSize: 16, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'post-text-lg': { fontSize: 20, letterSpacing: tokens.TRACKING, fontWeight: fontWeight.normal, }, 'button-lg': { fontWeight: fontWeight.semiBold, fontSize: 18, letterSpacing: tokens.TRACKING, }, button: { fontWeight: fontWeight.semiBold, fontSize: 14, letterSpacing: tokens.TRACKING, }, mono: { fontSize: 14, fontFamily: Platform.OS === 'android' ? 'monospace' : 'Courier New', }, }, }) export const darkTheme = ({ lightPalette, darkPalette, }: { lightPalette: Palette darkPalette: Palette }): Theme => ({ ...defaultTheme({lightPalette, darkPalette}), colorScheme: 'dark', palette: { ...defaultTheme({lightPalette, darkPalette}).palette, default: { background: darkPalette.contrast_0, backgroundLight: darkPalette.contrast_25, text: darkPalette.white, textLight: darkPalette.contrast_600, textInverted: darkPalette.black, link: darkPalette.primary_500, border: darkPalette.contrast_100, }, primary: { ...defaultTheme({lightPalette, darkPalette}).palette.primary, textInverted: colors.blue2, }, secondary: { ...defaultTheme({lightPalette, darkPalette}).palette.secondary, textInverted: colors.green2, }, inverted: { background: darkPalette.white, backgroundLight: lightPalette.contrast_50, text: lightPalette.black, textLight: lightPalette.contrast_700, textInverted: darkPalette.white, link: lightPalette.primary_500, border: lightPalette.contrast_100, }, }, }) export const dimTheme = ({ lightPalette, darkPalette, dimPalette, }: { lightPalette: Palette darkPalette: Palette dimPalette: Palette }): Theme => ({ ...darkTheme({lightPalette, darkPalette}), palette: { ...darkTheme({lightPalette, darkPalette}).palette, default: { ...darkTheme({lightPalette, darkPalette}).palette.default, background: dimPalette.contrast_0, backgroundLight: dimPalette.contrast_25, text: dimPalette.white, textLight: dimPalette.contrast_700, textInverted: dimPalette.black, link: dimPalette.primary_500, border: dimPalette.contrast_100, }, }, })