import { HTMLAttributes } from 'react';
import { Pseudos } from 'csstype';
import css from '@styled-system/css';
import styled from '../styled';
import { theme, Theme } from '../theme';
import { color, ResponsiveValue } from 'styled-system';
import {
TextColorProps,
TextAlignProps,
TextShadowProps,
TextStyleProps,
} from 'styled-system';
import shouldForwardProp from '@styled-system/should-forward-prop';
// @ts-ignore
import variant from '@styled-system/variant';
import capsize from '../capsize';
const styles = {
'-1m': {
letterSpacing: '-0.45px',
fontWeight: 500,
...capsize({ leading: 20, fontSize: theme.fontSizes[-1] }),
},
'-1r': {
letterSpacing: '-0.75px',
fontWeight: 300,
...capsize({ leading: 20, fontSize: theme.fontSizes[-1] }),
},
'-1u': {
...capsize({ leading: 20, fontSize: theme.fontSizes[-1] }),
letterSpacing: '0.6px',
fontWeight: 700,
textTransform: 'uppercase',
},
'1rserif': {
...capsize({ leading: 21, fontSize: theme.fontSizes[1] }),
letterSpacing: '-0.25px',
fontWeight: 300,
fontFamily: 'serif',
},
'1r': {
...capsize({ leading: 22, fontSize: theme.fontSizes[1] }),
letterSpacing: '-0.45px',
fontWeight: 300,
},
'1b': {
...capsize({ leading: 22, fontSize: theme.fontSizes[1] }),
letterSpacing: '-0.4px',
fontWeight: 700,
},
'2r': {
...capsize({ leading: 24, fontSize: theme.fontSizes[2] }),
letterSpacing: '-0.6px',
fontWeight: 300,
},
'2b': {
...capsize({ leading: 24, fontSize: theme.fontSizes[2] }),
letterSpacing: '-0.65px',
fontWeight: 700,
},
'3r': {
...capsize({ leading: 25, fontSize: theme.fontSizes[3] }),
letterSpacing: '-0.75px',
fontWeight: 300,
},
'3b': {
...capsize({ leading: 25, fontSize: theme.fontSizes[3] }),
letterSpacing: '-0.75px',
fontWeight: 700,
},
'3serif': {
...capsize({ leading: 28, fontSize: theme.fontSizes[3] }),
letterSpacing: '-0.25px',
fontWeight: 300,
fontFamily: 'serif',
},
'4b': {
...capsize({ leading: 28, fontSize: theme.fontSizes[4] }),
letterSpacing: '-0.95px',
fontWeight: 700,
},
'5': {
...capsize({ leading: 36, fontSize: theme.fontSizes[5] }),
letterSpacing: '-1.15px',
fontWeight: 700,
},
'5b': {
...capsize({ leading: 36, fontSize: theme.fontSizes[5] }),
letterSpacing: '-1.15px',
fontWeight: 800,
},
'6': {
...capsize({ leading: 44, fontSize: theme.fontSizes[6] }),
letterSpacing: '-1.45px',
fontWeight: 700,
},
'7': {
...capsize({ leading: 72, fontSize: theme.fontSizes[7] }),
letterSpacing: '-1.45px',
fontWeight: 700,
},
};
type TextVariant =
| '1r'
| '1rserif'
| '1b'
| '2r'
| '2b'
| '3b'
| '3r'
| '3serif'
| '4'
| 4
| '4b'
| '5'
| 5
| '5b'
| '6'
| 6
| '7'
| 7
| '-1m'
| '-1r'
| '-1b'
| '-1u';
type BaseTextProps = TextColorProps &
TextAlignProps &
TextShadowProps &
TextStyleProps;
export type TextProps = Partial, 'color'>> & {
key?: any;
as?: any;
variant?: ResponsiveValue;
color?: ResponsiveValue | string>;
sx?: BaseTextProps & Partial>;
};
// @ts-ignore
const Text = styled('span', { shouldForwardProp })(
color,
variant({
variants: Object.entries(styles).reduce((acc, [k, v]) => {
acc[k] = v;
return acc;
}, {}),
}),
({ sx }: { sx: any }) => {
return sx ? css(sx) : null;
},
);
Text.defaultProps = {
variant: '1r',
};
Text.displayName = 'Monterey(Text)';
export { Text as default, styles };