// theme.ts import { Button, createTheme, MantineColorsTuple } from "@mantine/core" /* -------- 1. 自定义颜色(可删/可改) -------- */ const brandColors: MantineColorsTuple = [ "#E8F4FC", "#CEECFD", "#A7DAFF", "#69C0FF", "#4ABAFF", "#09ADFF", "#00A1FF", "#168DE8", "#0D73D0", "#0256A4", ] const greyColors: MantineColorsTuple = [ "#FFFFFF", "#F7F8F9", "#F1F2F4", "#DCDFE4", "#B5BBC2", "#8F979F", "#5D6872", "#47535F", "#1B2A38", "#0F151B", ] const darkColors: MantineColorsTuple = [ "#FFFFFF", "#EBEEF7", "#D3D4D8", "#7E858F", "#3C4859", "#2B3648", "#212A39", "#1A222D", "#151C24", "#0D0E12", ] const successColors: MantineColorsTuple = [ "#E6FCF5", "#C3FAE8", "#96F2D7", "#5BE7B6", "#38D9A9", "#20C997", "#0EA879", "#07815B", "#076B3F", "#043E22", ] /* -------- 2. 创建主题 -------- */ export const theme = createTheme({ /* ---- 颜色系统 ---- */ primaryColor: "brand", cursorType: "pointer", // primaryShade: { light: 5, dark: 6 }, colors: { brand: brandColors, success: successColors, grey: greyColors, dark: darkColors, }, /* ---- 圆角 ---- */ defaultRadius: "md", radius: { xs: "2px", sm: "4px", md: "8px", lg: "12px", xl: "16px", xxl: "24px", }, /* ---- 字体排版 ---- */ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif', fontFamilyMonospace: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', fontSizes: { xs: "0.75rem", sm: "0.875rem", md: "1rem", lg: "1.125rem", xl: "1.25rem", xxl: "1.5rem", }, headings: { fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif', fontWeight: "700", sizes: { h1: { fontSize: "2.25rem", lineHeight: "1.2" }, h2: { fontSize: "1.875rem", lineHeight: "1.3" }, h3: { fontSize: "1.5rem", lineHeight: "1.35" }, h4: { fontSize: "1.25rem", lineHeight: "1.4" }, h5: { fontSize: "1.125rem", lineHeight: "1.45" }, h6: { fontSize: "1rem", lineHeight: "1.5" }, }, }, /* ---- 间距 ---- */ spacing: { xs: "8px", sm: "12px", md: "16px", lg: "24px", xl: "32px", xxl: "48px", }, /* ---- 阴影 ---- */ shadows: { xs: "0 1px 2px 0 rgba(0, 0, 0, 0.05)", sm: "0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)", md: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", lg: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)", xl: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)", }, /* ---- 响应式断点 ---- */ breakpoints: { xs: "36em", // 576px sm: "48em", // 768px md: "62em", // 992px lg: "75em", // 1200px xl: "88em", // 1408px }, /* ---- 默认渐变 ---- */ defaultGradient: { from: "brand", to: "success", deg: 45, }, /* ---- 组件默认行为(示例) ---- */ components: { Button: Button.extend({ styles() { return { root: { outline: "none", }, } }, }), }, })