Files
labelmain-demo/app/theme.ts
2026-02-03 18:05:47 +08:00

156 lines
3.2 KiB
TypeScript

// 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",
},
}
},
}),
},
})