UNPKG

@jeremyckahn/farmhand

Version:
216 lines (211 loc) 6.44 kB
import createTheme from '@mui/material/styles/createTheme.js' import blueStripeBg from './img/ui/blue-stripe-bg.png' import lightBlueStripeBg from './img/ui/light-blue-stripe-bg.png' import { cardStyleSelectedSx, cardStyleSx, spriteShadowSx, } from './styles/sx.js' import { breakpoints, colors, layout } from './styles/tokens.js' // These global styles used to live in Farmhand.sass, scoped by a `.Farmhand` // class applied to many DOM roots across the app (including MUI Dialogs, // which portal outside the main component tree). Injecting them once via // MuiCssBaseline is a direct replacement that also sidesteps the reason // that class trick existed in the first place (styling portalled content). const globalStyleOverrides = { body: { overscrollBehavior: 'contain' }, 'ul, ol': { listStyle: 'none', margin: 0, padding: 0 }, p: { margin: 0 }, '.markdown': { '& p': { margin: '1em 0' }, '& ul li': { listStyle: 'disc', marginLeft: '1em' }, '& strong': { fontWeight: 'bold' }, }, img: { imageRendering: 'pixelated' }, strong: { fontWeight: 'bold' }, '.visually_hidden:not(:focus):not(:active)': { clip: 'rect(0 0 0 0)', clipPath: 'inset(50%)', height: '1px', overflow: 'hidden', position: 'absolute', whiteSpace: 'nowrap', width: '1px', }, 'h4, h5, h6, p, p.MuiTypography-root': { fontFamily: '"Public Sans", sans-serif', }, 'h3, h4, h5, h6': { fontWeight: 'bold' }, h2: { fontSize: '1.4em' }, 'h3, h4': { margin: '1em 0' }, 'p, .MuiTypography-body2': { lineHeight: '1.5em' }, 'ul.card-list': { flexGrow: 1, marginBottom: '1em', '& li': { margin: '1em 0' }, '& > li': { margin: '1em auto', maxWidth: layout.cardMaxWidth }, }, 'input[type="number"]': { minWidth: '140px' }, th: { fontWeight: 'bold' }, 'h1, h2, h3, h4, h5, h6, legend, td, th, .MuiTypography-h1, .MuiTypography-h2, .MuiTypography-h3, .MuiTypography-h4, .MuiTypography-h5, .MuiTypography-h6, .MuiButtonBase-root': { fontFamily: '"Francois One", sans-serif', }, '.danger-text': { color: colors.error }, hr: { background: 'none' }, '.MuiDivider-vertical': { width: 'auto' }, '.Farmhand.notification-container': { marginTop: '8em', paddingTop: 0, [`@media (min-width: ${breakpoints.md}px)`]: { marginTop: '4em', marginRight: '4em', }, '& .MuiCollapse-wrapperInner': { width: '100%' }, '& .MuiCollapse-wrapper': { marginBottom: 0 }, }, // Workaround for Safari layout rendering issues wherein bottom padding // for the stage and sidebar are not respected after interacting with the // elements within them. Used by both Farmhand.tsx and Stage.tsx. '.spacer': { minHeight: '7.5em' }, } as const export default createTheme({ palette: { mode: 'light', }, shape: {}, typography: { fontFamily: '"Public Sans", sans-serif', // Buttons and Tabs derive their default styles from this rather than // the `.MuiButtonBase-root` CssBaseline override below, which loses the // cascade to their own emotion-generated styles. button: { fontFamily: '"Francois One", sans-serif', textTransform: 'none', }, // DialogTitle (used by every modal header, e.g. Farmer's Log, Price // Events) renders variant="h6". Same cascade issue as `button` above. h6: { fontFamily: '"Francois One", sans-serif', fontSize: '1.4em', }, // CardHeader titles default to variant="h5" when no avatar is passed // (e.g. the peer name headers in the Active Players modal). Same // cascade issue as `button`/`h6` above. h5: { fontFamily: '"Francois One", sans-serif', }, }, components: { MuiCssBaseline: { styleOverrides: globalStyleOverrides, }, MuiTabs: { styleOverrides: { root: ({ theme }) => ({ background: '#ffeec6', borderColor: '#9b6d00', borderWidth: 2, borderStyle: 'solid', borderRadius: `${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0 0`, }), }, }, MuiInput: { styleOverrides: { root: { margin: '1rem 0', }, }, }, MuiCard: { styleOverrides: { root: ({ theme }) => ({ ...cardStyleSx(theme), '&.is-selected': cardStyleSelectedSx, '& .MuiCard-root': { background: colors.cardBackgroundNested, }, }), }, }, MuiTableContainer: { styleOverrides: { root: ({ theme }) => ({ ...cardStyleSx(theme), '&.is-selected': cardStyleSelectedSx, }), }, }, MuiCardHeader: { styleOverrides: { avatar: { '& img': spriteShadowSx, }, }, }, MuiCardContent: { styleOverrides: { root: { // Overrides an unhelpful MUI default '&:last-child': { padding: '16px' }, }, }, }, MuiTableCell: { styleOverrides: { root: { borderColor: '#e9c777' }, }, }, MuiButtonBase: { styleOverrides: { root: { textTransform: 'none' }, }, }, MuiPaper: { styleOverrides: { rounded: { backgroundColor: '#fff7e7' }, }, }, MuiTooltip: { styleOverrides: { tooltip: { '& p': { textAlign: 'center' }, }, }, }, MuiDialog: { styleOverrides: { root: { display: 'block' }, paper: { backgroundImage: `url(${lightBlueStripeBg})` }, }, }, MuiDivider: { styleOverrides: { root: { margin: '1.5em 0' }, }, }, MuiAlert: { styleOverrides: { root: { marginBottom: '1em', [`@media (min-width: 0px) and (orientation: landscape)`]: { top: '3.5em', }, [`@media (min-width: ${breakpoints.sm}px)`]: { top: '4.5em' }, '& p': { margin: '1em 0', '&:first-of-type': { marginTop: 0 }, '&:last-child': { marginBottom: 0 }, }, '& strong': { fontWeight: 'bold' }, '& li': { marginLeft: '1em' }, '& ul li': { listStyle: 'disc' }, '& ol li': { listStyle: 'decimal' }, }, }, }, }, }) // Re-exported so Farmhand.tsx can reference the same sidebar background // asset without importing it a second time. export { blueStripeBg }