Skip to content

fs-theme-provider 组件利用 Context API 传递状态, 同时使用 CSS 变量来给子组件提供样式配置

基于 Context API 可以实现多层嵌套, 页面上的每个部分都可以根据自己的需求来配置主题

接收一个参数 theme, 类型为 object, 用于配置主题, 多层嵌套时, 子组件用深度合并来覆盖父组件的配置

theme 参数的类型定义如下:

ts
type Theme = {
  theme: 'dark' | 'light';
  /** 亮色主题颜色 */
  lightColor: Required<ThemeColor>;
  /** 暗色主题颜色 */
  darkColor: Required<ThemeColor>;
  /** 圆角 */
  borderRadius: number;
  /** 按钮圆角 */
  buttonRadius: number;
  /** 输入框圆角 */
  inputRadius: number;
};
type ThemeColor = {
  /** 文本颜色 */
  textColor: string;
  /** 次文本颜色 */
  subTextColor: string;
  /** 背景颜色 */
  backgroundColor: string;
  /** 次背景颜色 */
  subBackgroundColor: string;
  /** 主要颜色 */
  primaryColor: string;
  /** 主要颜色浅色, 如果不写, 则直接使用 `primaryColor` */
  primaryColorLight?: string;
  /** 主要颜色深色, 如果不写, 则直接使用 `primaryColor` */
  primaryColorDark?: string;
  /** 主要颜色文本颜色, 如果不写, 则直接使用 `primaryColor` */
  primaryColorText?: string;
  /** 主要按钮文本颜色, 如果不写, 则直接使用 `textColor` */
  primaryButtonTextColor?: string;
};

基于 Mulan PSL v2 许可发布