forked from mengyxu/noob-components
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
6.6 KiB
287 lines
6.6 KiB
|
3 months ago
|
# Config Styles
|
||
|
|
|
||
|
|
> Theme style classes using CSS custom properties pattern.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
Theme styles define the visual appearance of the application. Each theme is a class with properties for colors, backgrounds, and visual styling that map to CSS custom properties.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Theme Hierarchy
|
||
|
|
|
||
|
|
All themes inherit from the base `Plain` class:
|
||
|
|
|
||
|
|
```
|
||
|
|
Plain (base class)
|
||
|
|
├── Light
|
||
|
|
├── Dark
|
||
|
|
├── Plainb
|
||
|
|
└── ZhuBeiDong
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Base Plain Class
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/plain.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export default class Plain {
|
||
|
|
name = 'plain'; // 总体样式名称
|
||
|
|
icon = 'Sunset'; // 图标样式
|
||
|
|
i18n = 'styles.0'; // 样式提示i18n配置
|
||
|
|
|
||
|
|
bodyBg = light[7]; // 全局背景颜色
|
||
|
|
titleColor = light[0]; // 标题颜色
|
||
|
|
subTitleColor = dark[9]; // 二级标题颜色
|
||
|
|
color = '#4e5969'; // 全局字体颜色
|
||
|
|
selectionBg = '#3367d1'; // 全局文字选中后背景
|
||
|
|
selectionColor = '#fff'; // 全局文字选中后背景
|
||
|
|
|
||
|
|
headBg = '#40c9c6'; // 头部背景颜色
|
||
|
|
|
||
|
|
menuBg = '#323e4d'; // 菜单背景颜色
|
||
|
|
menuActiveBg = '#28323e'; // 菜单激活背景颜色
|
||
|
|
menuColor = light[7]; // 菜单文字颜色
|
||
|
|
menuActiveColor = '#409eff'; // 激活菜单文字颜色
|
||
|
|
menuDefaultIcon = 'Minus'; // 菜单默认图标
|
||
|
|
|
||
|
|
mainShadowColor = light[4]; // 主窗口阴影颜色
|
||
|
|
|
||
|
|
searchRowBg = light[8];
|
||
|
|
itemBg = light[2];
|
||
|
|
itemSelectColor = '#409eff';
|
||
|
|
|
||
|
|
tableBg = light[1]; // 表格背景颜色
|
||
|
|
tableHeadBg = light[2]; // 表头行背景颜色
|
||
|
|
tableCurBg = light[3]; // 当前行背景颜色
|
||
|
|
tableColor = dark[0]; // 表格字体颜色
|
||
|
|
tableBorderColor = light[9]; // 行底部边框颜色
|
||
|
|
tableChildBg = '#f0f9eb'; // 树型表格子行背景颜色
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Plain Properties
|
||
|
|
|
||
|
|
| Property | Type | Description |
|
||
|
|
|----------|------|-------------|
|
||
|
|
| `name` | string | Theme identifier |
|
||
|
|
| `icon` | string | Icon style name |
|
||
|
|
| `i18n` | string | i18n key for theme name |
|
||
|
|
| `bodyBg` | string | Global background color |
|
||
|
|
| `titleColor` | string | Title text color |
|
||
|
|
| `subTitleColor` | string | Secondary title color |
|
||
|
|
| `color` | string | Global font color |
|
||
|
|
| `selectionBg` | string | Text selection background |
|
||
|
|
| `headBg` | string | Header background |
|
||
|
|
| `menuBg` | string | Menu background |
|
||
|
|
| `menuActiveBg` | string | Active menu background |
|
||
|
|
| `menuColor` | string | Menu text color |
|
||
|
|
| `menuActiveColor` | string | Active menu text color |
|
||
|
|
| `tableBg` | string | Table background |
|
||
|
|
| `tableHeadBg` | string | Table header background |
|
||
|
|
| `tableCurBg` | string | Current table row background |
|
||
|
|
| `tableColor` | string | Table text color |
|
||
|
|
| `tableBorderColor` | string | Table row border color |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Theme Variants
|
||
|
|
|
||
|
|
### Light Theme
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/light.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export default class Light extends Plain {
|
||
|
|
name = 'light';
|
||
|
|
icon = 'Sunny';
|
||
|
|
i18n = 'styles.1';
|
||
|
|
bodyBg = light[0];
|
||
|
|
titleColor = dark[0];
|
||
|
|
subTitleColor = dark[3];
|
||
|
|
|
||
|
|
headBg = light[0];
|
||
|
|
menuBg = light[0];
|
||
|
|
menuActiveBg = light[1];
|
||
|
|
menuColor = dark[0];
|
||
|
|
menuActiveColor = '#4f5dfd';
|
||
|
|
|
||
|
|
tableBg = light[0];
|
||
|
|
tableHeadBg = light[0];
|
||
|
|
tableCurBg = light[2];
|
||
|
|
tableColor = dark[0];
|
||
|
|
tableBorderColor = light[9];
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Dark Theme
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/dark.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export default class Dark extends Plain {
|
||
|
|
name = 'dark';
|
||
|
|
icon = 'MoonNight';
|
||
|
|
i18n = 'styles.2';
|
||
|
|
bodyBg = dark[3];
|
||
|
|
titleColor = light[0];
|
||
|
|
subTitleColor = light[4];
|
||
|
|
color = grey[5];
|
||
|
|
selectionBg = '#0438a2';
|
||
|
|
|
||
|
|
headBg = dark[2];
|
||
|
|
menuBg = dark[2];
|
||
|
|
menuActiveBg = dark[6];
|
||
|
|
menuColor = light[0];
|
||
|
|
menuActiveColor = '#328ae3';
|
||
|
|
|
||
|
|
mainShadowColor = light[8];
|
||
|
|
|
||
|
|
tableBg = dark[2];
|
||
|
|
tableHeadBg = dark[4];
|
||
|
|
tableCurBg = dark[5];
|
||
|
|
tableColor = light[0];
|
||
|
|
tableBorderColor = dark[7];
|
||
|
|
tableChildBg = dark[3];
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Plainb Theme
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/plainb.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export default class Plainb extends Plain {
|
||
|
|
name = 'plainb';
|
||
|
|
i18n = 'styles.3';
|
||
|
|
bodyBg = light[0];
|
||
|
|
titleColor = light[3];
|
||
|
|
subTitleColor = '#424242';
|
||
|
|
color = grey[0];
|
||
|
|
selectionBg = '#9255f4';
|
||
|
|
|
||
|
|
headBg = '#6200ee';
|
||
|
|
menuBg = '#ebebeb';
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### ZhuBeiDong Theme
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/zhuBeiDong.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export default class ZhuBeiDong extends Plain {
|
||
|
|
name = 'zhuBeiDong';
|
||
|
|
i18n = 'styles.4';
|
||
|
|
bodyBg = light[0];
|
||
|
|
titleColor = dark[0];
|
||
|
|
subTitleColor = dark[3];
|
||
|
|
|
||
|
|
headBg = light[0];
|
||
|
|
|
||
|
|
tableBg = light[0];
|
||
|
|
tableHeadBg = light[0];
|
||
|
|
tableCurBg = light[2];
|
||
|
|
tableColor = dark[0];
|
||
|
|
tableBorderColor = light[9];
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Color Palette
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/color.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export const light = [
|
||
|
|
'#ffffff', // 0
|
||
|
|
'#F2F6FC', // 1
|
||
|
|
'#F5F7FA', // 2
|
||
|
|
'#F2F3F5', // 3
|
||
|
|
'#F0F2F5', // 4
|
||
|
|
'#EBEDF0', // 5
|
||
|
|
'#efefef', // 6
|
||
|
|
'#E5EAF3', // 7
|
||
|
|
'#E6E8EB', // 8
|
||
|
|
'#e5e6eb', // 9
|
||
|
|
];
|
||
|
|
|
||
|
|
export const dark = [
|
||
|
|
'#000000', // 0
|
||
|
|
'#121213', // 1
|
||
|
|
'#232324', // 2
|
||
|
|
'#2a2a2b', // 3
|
||
|
|
'#303133', // 4
|
||
|
|
'#373739', // 5
|
||
|
|
'#414142', // 6
|
||
|
|
'#484849', // 7
|
||
|
|
'#585860', // 8
|
||
|
|
'#606266', // 9
|
||
|
|
];
|
||
|
|
|
||
|
|
export const grey = [
|
||
|
|
'#909399', // 0
|
||
|
|
'#9b9b9d', // 1
|
||
|
|
'#A0A0A0', // 2
|
||
|
|
'#A8ABB2', // 3
|
||
|
|
'#b6b6b6', // 4
|
||
|
|
'#bdbdbe', // 5
|
||
|
|
'#C0C4CC', // 6
|
||
|
|
'#CDD0D6', // 7
|
||
|
|
'#D4D7DE', // 8
|
||
|
|
'#DCDFE6', // 9
|
||
|
|
];
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Exports
|
||
|
|
|
||
|
|
**File**: `/home/hechang27/Documents/sprt/noob-components/plugs/config/styles/index.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import Plain from './plain';
|
||
|
|
import Plainb from './plainb';
|
||
|
|
import Light from './light';
|
||
|
|
import Dark from './dark';
|
||
|
|
import ZhuBeidong from './zhuBeiDong';
|
||
|
|
|
||
|
|
export const plain = new Plain();
|
||
|
|
export const plainb = new Plainb();
|
||
|
|
export const light = new Light();
|
||
|
|
export const dark = new Dark();
|
||
|
|
export const zhuBeiDong = new ZhuBeidong();
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Usage Pattern
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { Styles } from '../config';
|
||
|
|
|
||
|
|
// Access current style
|
||
|
|
const currentStyle = state.style; // State.style is of type Styles.plain
|
||
|
|
|
||
|
|
// Style properties are used to set CSS custom properties
|
||
|
|
element.style.setProperty('--body-bg', currentStyle.bodyBg);
|
||
|
|
element.style.setProperty('--menu-bg', currentStyle.menuBg);
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Anti-Patterns
|
||
|
|
|
||
|
|
1. **Do not modify theme properties at runtime** - Themes are designed to be immutable configurations
|
||
|
|
2. **Do not create new themes without extending Plain** - Incomplete themes will lack required properties
|
||
|
|
3. **Do not use hardcoded colors** - Always use theme properties for consistent styling
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Language**: English
|