mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-08 04:50:12 +02:00
144 lines
3.6 KiB
TypeScript
144 lines
3.6 KiB
TypeScript
import type { MantineColorsTuple, MantineThemeOverride } from '@mantine/core';
|
|
|
|
import { generateColors } from '@mantine/colors-generator';
|
|
import { createTheme, rem } from '@mantine/core';
|
|
import merge from 'lodash/merge';
|
|
|
|
import { AppThemeConfiguration } from '/@/shared/themes/app-theme-types';
|
|
|
|
// const lightColors: MantineColorsTuple = [
|
|
// '#f5f5f5',
|
|
// '#e7e7e7',
|
|
// '#cdcdcd',
|
|
// '#b2b2b2',
|
|
// '#9a9a9a',
|
|
// '#8b8b8b',
|
|
// '#848484',
|
|
// '#717171',
|
|
// '#656565',
|
|
// '#575757',
|
|
// ];
|
|
|
|
const darkColors: MantineColorsTuple = [
|
|
'#C9C9C9',
|
|
'#b8b8b8',
|
|
'#828282',
|
|
'#696969',
|
|
'#424242',
|
|
'#3b3b3b',
|
|
'#242424',
|
|
'#181818',
|
|
'#1f1f21',
|
|
'#141414',
|
|
];
|
|
|
|
const mantineTheme: MantineThemeOverride = createTheme({
|
|
autoContrast: true,
|
|
breakpoints: {
|
|
'2xl': '120em',
|
|
'3xl': '160em',
|
|
lg: '75em',
|
|
md: '62em',
|
|
sm: '48em',
|
|
xl: '88em',
|
|
xs: '36em',
|
|
},
|
|
cursorType: 'pointer',
|
|
defaultRadius: 'sm',
|
|
focusRing: 'never',
|
|
fontFamily: 'var(--theme-content-font-family)',
|
|
fontSizes: {
|
|
'2xl': rem('20px'),
|
|
'3xl': rem('24px'),
|
|
'4xl': rem('28px'),
|
|
'5xl': rem('32px'),
|
|
lg: rem('16px'),
|
|
md: rem('14px'),
|
|
sm: rem('13px'),
|
|
xl: rem('18px'),
|
|
xs: rem('11px'),
|
|
},
|
|
fontSmoothing: true,
|
|
headings: {
|
|
fontFamily: 'var(--theme-content-font-family)',
|
|
sizes: {
|
|
h1: {
|
|
fontSize: rem('36px'),
|
|
fontWeight: '900',
|
|
lineHeight: rem('44px'),
|
|
},
|
|
h2: {
|
|
fontSize: rem('30px'),
|
|
fontWeight: '900',
|
|
lineHeight: rem('38px'),
|
|
},
|
|
h3: {
|
|
fontSize: rem('24px'),
|
|
fontWeight: '900',
|
|
lineHeight: rem('32px'),
|
|
},
|
|
h4: {
|
|
fontSize: rem('20px'),
|
|
fontWeight: '900',
|
|
lineHeight: rem('30px'),
|
|
},
|
|
},
|
|
},
|
|
lineHeights: {
|
|
lg: rem('20px'),
|
|
md: rem('18px'),
|
|
sm: rem('16px'),
|
|
xl: rem('24px'),
|
|
xs: rem('14px'),
|
|
},
|
|
luminanceThreshold: 0.3,
|
|
primaryColor: 'primary',
|
|
primaryShade: { dark: 5, light: 9 },
|
|
radius: {
|
|
lg: rem('12px'),
|
|
md: rem('5px'),
|
|
sm: rem('3px'),
|
|
xl: rem('16px'),
|
|
xs: rem('3px'),
|
|
},
|
|
scale: 1,
|
|
shadows: {
|
|
lg: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)',
|
|
md: '0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06)',
|
|
sm: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)',
|
|
xl: '0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)',
|
|
xs: '0 1px 2px rgba(0, 0, 0, 0.05)',
|
|
xxl: '0 25px 50px rgba(0, 0, 0, 0.25)',
|
|
},
|
|
spacing: {
|
|
'0': rem('0px'),
|
|
'2xl': rem('32px'),
|
|
'3xl': rem('36px'),
|
|
'4xl': rem('40px'),
|
|
lg: rem('16px'),
|
|
md: rem('12px'),
|
|
sm: rem('8px'),
|
|
xl: rem('24px'),
|
|
xs: rem('4px'),
|
|
},
|
|
});
|
|
|
|
export function createMantineTheme(theme: AppThemeConfiguration): MantineThemeOverride {
|
|
const primaryColor = theme.colors?.primary ?? '#000';
|
|
|
|
const mergedTheme: MantineThemeOverride = merge(
|
|
{},
|
|
{
|
|
...mantineTheme,
|
|
black: theme.colors?.black,
|
|
colors: {
|
|
dark: darkColors,
|
|
primary: generateColors(primaryColor),
|
|
},
|
|
white: theme.colors?.white,
|
|
},
|
|
theme.mantineOverride,
|
|
);
|
|
return createTheme(mergedTheme);
|
|
}
|