//import { transparentize } from 'polished'
//import React, { useMemo } from 'react
import React from 'react'
import styled, {
ThemeProvider as StyledComponentsThemeProvider,
createGlobalStyle,
css,
DefaultTheme
} from 'styled-components'
//import { useIsDarkMode } from '../state/user/hooks'
import { Text, TextProps } from 'rebass'
import { Colors } from './styled'
import BackgroundImage from '../assets/images/background-min.png'
export * from './components'
const MEDIA_WIDTHS = {
upToExtraSmall: 500,
upToSmall: 600,
upToMedium: 960,
upToLarge: 1280
}
const mediaWidthTemplates: { [width in keyof typeof MEDIA_WIDTHS]: typeof css } = Object.keys(MEDIA_WIDTHS).reduce(
(accumulator, size) => {
;(accumulator as any)[size] = (a: any, b: any, c: any) => css`
@media (max-width: ${(MEDIA_WIDTHS as any)[size]}px) {
${css(a, b, c)}
}
`
return accumulator
},
{}
) as any
const white = '#FFFFFF'
const black = '#000000'
export function colors(): Colors {
return {
// base
white,
black,
// text
text1: '#FFFFFF',
text2: '#C3C5CB',
text3: '#6C7284',
text4: '#565A69',
text5: '#2C2F36',
// backgrounds / greys
bg1: '#212429',
bg2: '#2C2F36',
bg3: '#40444F',
bg4: '#565A69',
bg5: '#6C7284',
//specialty colors
modalBG: 'rgba(0,0,0,.425)',
advancedBG: 'rgba(0,0,0,0.1)',
//primary colors
primary1: '#2172E5',
primary2: '#3680E7',
primary3: '#4D8FEA',
primary4: '#376bad70',
primary5: '#153d6f70',
// color text
primaryText1: '#6da8ff',
// secondary colors
secondary1: '#2172E5',
secondary2: '#17000b26',
secondary3: '#17000b26',
// other
red1: '#FF6871',
red2: '#F82D3A',
green1: '#27AE60',
yellow1: '#FFE270',
yellow2: '#F3841E'
// dont wanna forget these blue yet
// blue4: darkMode ? '#153d6f70' : '#C4D9F8',
// blue5: darkMode ? '#153d6f70' : '#EBF4FF',
}
}
export function theme(): DefaultTheme {
return {
...colors(),
grids: {
sm: 8,
md: 12,
lg: 24
},
//shadows
shadow1: '#000',
// media queries
mediaWidth: mediaWidthTemplates,
// css snippets
flexColumnNoWrap: css`
display: flex;
flex-flow: column nowrap;
`,
flexRowNoWrap: css`
display: flex;
flex-flow: row nowrap;
`
}
}
export default function ThemeProvider({ children }: { children: React.ReactNode }) {
//const darkMode = useIsDarkMode()
const themeObject = theme()
return {children}
}
const TextWrapper = styled(Text)<{ color: keyof Colors }>`
color: ${({ color, theme }) => (theme as any)[color]};
`
export const TYPE = {
main(props: TextProps) {
return
},
link(props: TextProps) {
return
},
black(props: TextProps) {
return
},
body(props: TextProps) {
return
},
largeHeader(props: TextProps) {
return
},
mediumHeader(props: TextProps) {
return
},
subHeader(props: TextProps) {
return
},
blue(props: TextProps) {
return
},
yellow(props: TextProps) {
return
},
darkGray(props: TextProps) {
return
},
gray(props: TextProps) {
return
},
italic(props: TextProps) {
return
},
error({ error, ...props }: { error: boolean } & TextProps) {
return
}
}
export const FixedGlobalStyle = createGlobalStyle`
html, input, textarea, button {
font-family: 'Inter', sans-serif;
letter-spacing: -0.018em;
font-display: fallback;
}
@supports (font-variation-settings: normal) {
html, input, textarea, button {
font-family: 'Inter var', sans-serif;
}
}
html,
body {
margin: 0;
padding: 0;
}
* {
box-sizing: border-box;
}
button {
user-select: none;
}
html {
font-size: 16px;
font-variant: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
`
//background-color: ${({ theme }) => theme.bg2};
export const ThemedGlobalStyle = createGlobalStyle`
html {
color: ${({ theme }) => theme.text1};
background: url(${BackgroundImage})
}
`
/*
body {
min-height: 100vh;
background-position: 0 -30vh;
background-repeat: no-repeat;
background-image: ${({ theme }) =>
`radial-gradient(50% 50% at 50% 50%, ${theme.primary5} 0%, ${transparentize(1, theme.primary4)} 100%)`};
}
*/