!!!###!!!title=适用于 Semi Design 的主题——VisActor/VChart 教程文档!!!###!!!

适用于 Semi Design 的主题

什么是 Semi

Semi Design 是由抖音前端团队,MED 产品设计团队设计、开发并维护的设计系统。它作为全面、易用、优质的现代应用 UI 解决方案,从字节跳动各业务线的复杂场景提炼而来,支撑近千计平台产品,服务内外部 10 万+ 用户。

目前 VChart 针对 Semi Design 提供了专项适配。Semi Design 的更多信息可见 Semi 官网

安装和使用 VChart

Semi Design 目前主要适配 React 工程。可以使用以下命令安装 react-vchart:

# 使用 npm 安装
npm install @visactor/react-vchart
# 使用 yarn 安装
yarn add @visactor/react-vchart

绘制图表以及更详细的指引详见这个教程

适用于 Semi Design 的图表主题包

为了使 VChart 在 Semi 页面环境中获得更好的体验,VisActor 额外推出了 @visactor/vchart-semi-theme 主题包。这个包有以下特性:

  • 开箱即用:经过简单的配置,就可以使 VChart 样式自动融入 Semi 设计语言,也会自动适配用户通过 Semi DSM 自定义的主题包。
  • 响应式:@visactor/vchart-semi-theme 支持监听页面上的亮暗模式变化以及主题切换,自动对页面上的 VChart 图表的主题进行热更新。

DEMO

完整 demo 请访问此页面

安装

https://www.npmjs.com/package/@visactor/vchart-semi-theme

# npm
npm install @visactor/vchart-semi-theme

# yarn
yarn add @visactor/vchart-semi-theme

使用

实现默认的功能,只需要在全局执行一次 initVChartSemiTheme 方法进行初始化。这个语句通常可以放在 React 项目的入口文件中。如以下示例:

import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './app.jsx';
import { initVChartSemiTheme } from '@visactor/vchart-semi-theme';

// initialization
initVChartSemiTheme();

const dom = document.querySelector('#root');
const root = createRoot(dom);
root.render(<App />);

initVChartSemiTheme 方法支持传入一个对象作为 option,其类型声明为:

interface IInitVChartSemiThemeOption {
  /** 初始亮暗色模式 */
  defaultMode?: 'light' | 'dark';
  /** 是否监听亮暗色模式自动更改图表主题,默认为 true */
  isWatchingMode?: boolean;
  /** 是否监听主题变化自动更改图表主题,默认为 false(适用于 semi 官方主题切换接口:https://semi.design/dsm/install_switcher)*/
  isWatchingThemeSwitch?: boolean;
  /** 指定 ThemeManager,一般不用指定,如果遇到多版本 vchart 共存时需要指定 */
  themeManager?: typeof ThemeManager;
}

例如,如果要开启监听用户侧的主题切换,初始化语句可以改为这样:

// initialization
initVChartSemiTheme({
  isWatchingThemeSwitch: true
});

Token 映射

在图表主题的功能上,VChart 支持数据色板和语义色板的自定义配置。@visactor/vchart-semi-theme 基于这个特性实现了和 Semi Design 的结合。

数据色板

Semi Design 为 VChart 声明了数据色板对应的 token。用户可以在 DSM 自定义主题时配置以下 token,来自定义 VChart 的数据色板。VChart 图表的数据色板会自动应用这些变量,用户则不需要介入。这个功能由 @visactor/vchart-semi-theme 主题包实现。

序号
Semi Token
默认色值
1
--semi-color-data-0
#1664FF
2
--semi-color-data-1
#B2CFFF
3
--semi-color-data-2
#1AC6FF
4
--semi-color-data-3
#94EFFF
5
--semi-color-data-4
#FF8A00
6
--semi-color-data-5
#FFCE7A
7
--semi-color-data-6
#3CC780
8
--semi-color-data-7
#B9EDCD
9
--semi-color-data-8
#7442D4
10
--semi-color-data-9
#DDC5FA
11
--semi-color-data-10
#FFC400
12
--semi-color-data-11
#FAE878
13
--semi-color-data-12
#304D77
14
--semi-color-data-13
#8B959E
15
--semi-color-data-14
#B48DEB
16
--semi-color-data-15
#EFE3FF
17
--semi-color-data-16
#009488
18
--semi-color-data-17
#59BAA8
19
--semi-color-data-18
#FF7DDA
20
--semi-color-data-19
#FFCFEE

这些 token 的对应颜色组成了 VChart 在 Semi 下默认的 20 色色板。

如文档 VChart 主题概念和设计规范 所述,VChart 数据色板也可以是动态的、渐进式的。在一般情况下,色板会根据数据项数量的范围来动态调整。数据组不超过 10 个时,采用 10 色的色板;数据组超过 10 个时,采用 20 色的色板。如果数据组超过 20 个,则会重复应用色板颜色,从第 1 个开始。

@visactor/vchart-semi-theme 会自动从上文中的 20 色色板抽 10 个颜色形成小数据量下的 10 色色板。当前逻辑是取偶数索引的颜色,也就是说默认的 10 色色板由以下 token 对应的色值组成:

序号
Semi Token
默认色值
1
--semi-color-data-0
#1664FF
2
--semi-color-data-2
#1AC6FF
3
--semi-color-data-4
#FF8A00
4
--semi-color-data-6
#3CC780
5
--semi-color-data-8
#7442D4
6
--semi-color-data-10
#FFC400
7
--semi-color-data-12
#304D77
8
--semi-color-data-14
#B48DEB
9
--semi-color-data-16
#009488
10
--semi-color-data-18
#FF7DDA

语义色板

除了上文提到的 token 以外,@visactor/vchart-semi-theme 也会自动在页面环境爬取当前 Semi 主题的其他 token 来自动生成 VChart 图表主题。这些 token 主要用于各个图表组件的样式。具体可以参阅以下文档:

静态资源

该包同时包含两个静态的主题 json 资源(静态资源只适用于默认的 Semi 主题),可以按需使用。