('light');
16 |
17 | const changeMode = (value: any) => {
18 | setMode(value ? 'vertical' : 'inline');
19 | };
20 |
21 | const changeTheme = (value: any) => {
22 | setTheme(value ? 'dark' : 'light');
23 | };
24 |
25 | return (
26 | <>
27 | Change Mode
28 |
29 | Change Style
30 |
31 |
32 |
39 | }>
40 | Navigation One
41 |
42 | }>
43 | Navigation Two
44 |
45 | } title="Navigation Two">
46 | Option 3
47 | Option 4
48 |
49 | Option 5
50 | Option 6
51 |
52 |
53 | } title="Navigation Three">
54 | Option 7
55 | Option 8
56 | Option 9
57 | Option 10
58 |
59 | }>
60 |
61 | Ant Design
62 |
63 |
64 |
65 | >
66 | );
67 | };
--------------------------------------------------------------------------------
/examples/react-ts-demo/src/components/MenuComp.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Menu, Button } from 'antd';
3 | import {
4 | AppstoreOutlined,
5 | MenuUnfoldOutlined,
6 | MenuFoldOutlined,
7 | PieChartOutlined,
8 | DesktopOutlined,
9 | ContainerOutlined,
10 | MailOutlined,
11 | } from '@ant-design/icons';
12 |
13 | const { SubMenu } = Menu;
14 |
15 | class App extends React.Component {
16 | state = {
17 | collapsed: false,
18 | };
19 |
20 | toggleCollapsed = () => {
21 | this.setState({
22 | collapsed: !this.state.collapsed,
23 | });
24 | };
25 |
26 | render() {
27 | return (
28 |
29 |
30 | {React.createElement(this.state.collapsed ? MenuUnfoldOutlined : MenuFoldOutlined)}
31 |
32 |
39 | }>
40 | Option 1
41 |
42 | }>
43 | Option 2
44 |
45 | }>
46 | Option 3
47 |
48 | } title="Navigation One">
49 | Option 5
50 | Option 6
51 | Option 7
52 | Option 8
53 |
54 | } title="Navigation Two">
55 | Option 9
56 | Option 10
57 |
58 | Option 11
59 | Option 12
60 |
61 |
62 |
63 |
64 | );
65 | }
66 | }
67 |
68 | export default App;
69 |
--------------------------------------------------------------------------------
/examples/react-ts-demo/src/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/examples/next-demo/pages/TreeSelect.js:
--------------------------------------------------------------------------------
1 | import { TreeSelect } from 'antd';
2 |
3 | const { SHOW_PARENT, TreeNode } = TreeSelect;
4 |
5 | const treeData = [
6 | {
7 | title: 'Node1',
8 | value: '0-0',
9 | key: '0-0',
10 | children: [
11 | {
12 | title: 'Child Node1',
13 | value: '0-0-0',
14 | key: '0-0-0',
15 | },
16 | ],
17 | },
18 | {
19 | title: 'Node2',
20 | value: '0-1',
21 | key: '0-1',
22 | children: [
23 | {
24 | title: 'Child Node3',
25 | value: '0-1-0',
26 | key: '0-1-0',
27 | },
28 | {
29 | title: 'Child Node4',
30 | value: '0-1-1',
31 | key: '0-1-1',
32 | },
33 | {
34 | title: 'Child Node5',
35 | value: '0-1-2',
36 | key: '0-1-2',
37 | },
38 | ],
39 | },
40 | ];
41 |
42 | const tProps = {
43 | treeData,
44 | treeCheckable: true,
45 | showCheckedStrategy: SHOW_PARENT,
46 | searchPlaceholder: 'Please select',
47 | style: {
48 | width: '100%',
49 | },
50 | };
51 |
52 | export default () => (
53 | <>
54 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | sss} key="random3" />
69 |
70 |
71 |
72 |
73 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | sss} key="random3" />
89 |
90 |
91 |
92 |
93 |
94 | >
95 | )
--------------------------------------------------------------------------------
/examples/next-demo/pages/Button.js:
--------------------------------------------------------------------------------
1 | import { Button, Icon } from 'antd';
2 |
3 | export default () => (
4 | <>
5 |
12 |
13 | Primary
14 | Default
15 | Dashed
16 | Danger
17 | Link
18 |
19 |
20 |
21 | Primary
22 |
23 | Normal
24 |
25 | Dashed
26 |
27 |
28 | Danger
29 |
30 |
31 | Link
32 |
33 |
34 |
35 |
36 | Primary
37 |
38 | Normal
39 |
40 | Dashed
41 |
42 |
43 | Danger
44 |
45 |
46 | Link
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | Download
55 |
56 |
57 | Download
58 |
59 |
60 |
61 |
62 |
63 | Backward
64 |
65 |
66 | Forward
67 |
68 |
69 |
70 |
71 |
72 |
73 | Primary(disabled)
74 |
75 |
76 | Primary Ghost(disabled)
77 |
78 |
79 | Dashed(disabled)
80 |
81 |
82 |
83 | Primary
84 | Default
85 | Dashed
86 | Danger
87 | Link
88 |
89 | >
90 | );
--------------------------------------------------------------------------------
/examples/react-ts-demo/src/components/TableSelectComp.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Table, Switch, Space } from 'antd';
3 |
4 | const columns = [
5 | {
6 | title: 'Name',
7 | dataIndex: 'name',
8 | key: 'name',
9 | },
10 | {
11 | title: 'Age',
12 | dataIndex: 'age',
13 | key: 'age',
14 | width: '12%',
15 | },
16 | {
17 | title: 'Address',
18 | dataIndex: 'address',
19 | width: '30%',
20 | key: 'address',
21 | },
22 | ];
23 |
24 | const data = [
25 | {
26 | key: 1,
27 | name: 'John Brown sr.',
28 | age: 60,
29 | address: 'New York No. 1 Lake Park',
30 | children: [
31 | {
32 | key: 11,
33 | name: 'John Brown',
34 | age: 42,
35 | address: 'New York No. 2 Lake Park',
36 | },
37 | {
38 | key: 12,
39 | name: 'John Brown jr.',
40 | age: 30,
41 | address: 'New York No. 3 Lake Park',
42 | children: [
43 | {
44 | key: 121,
45 | name: 'Jimmy Brown',
46 | age: 16,
47 | address: 'New York No. 3 Lake Park',
48 | },
49 | ],
50 | },
51 | {
52 | key: 13,
53 | name: 'Jim Green sr.',
54 | age: 72,
55 | address: 'London No. 1 Lake Park',
56 | children: [
57 | {
58 | key: 131,
59 | name: 'Jim Green',
60 | age: 42,
61 | address: 'London No. 2 Lake Park',
62 | children: [
63 | {
64 | key: 1311,
65 | name: 'Jim Green jr.',
66 | age: 25,
67 | address: 'London No. 3 Lake Park',
68 | },
69 | {
70 | key: 1312,
71 | name: 'Jimmy Green sr.',
72 | age: 18,
73 | address: 'London No. 4 Lake Park',
74 | },
75 | ],
76 | },
77 | ],
78 | },
79 | ],
80 | },
81 | {
82 | key: 2,
83 | name: 'Joe Black',
84 | age: 32,
85 | address: 'Sidney No. 1 Lake Park',
86 | },
87 | ];
88 |
89 | // rowSelection objects indicates the need for row selection
90 | const rowSelection = {
91 | // @ts-ignore
92 | onChange: (selectedRowKeys, selectedRows) => {
93 | console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
94 | },
95 | // @ts-ignore
96 | onSelect: (record, selected, selectedRows) => {
97 | console.log(record, selected, selectedRows);
98 | },
99 | // @ts-ignore
100 | onSelectAll: (selected, selectedRows, changeRows) => {
101 | console.log(selected, selectedRows, changeRows);
102 | },
103 | };
104 |
105 | function App() {
106 | const [checkStrictly, setCheckStrictly] = React.useState(false);
107 | return (
108 | <>
109 |
110 | CheckStrictly:
111 |
112 |
117 | >
118 | );
119 | }
120 |
121 | export default App;
--------------------------------------------------------------------------------
/src/dynamic-antd-theme.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import PropTypes from 'prop-types';
3 | import { SketchPicker } from 'react-color';
4 | import tinycolor from 'tinycolor2';
5 | import { changeAntdTheme, generateThemeColor, placementSketchPicker } from './core/util';
6 |
7 | class DynamicAntdTheme extends Component {
8 |
9 | static propTypes = {
10 | primaryColor: PropTypes.string,
11 | storageName: PropTypes.string,
12 | style: PropTypes.object,
13 | placement: PropTypes.string,
14 | themeChangeCallback: PropTypes.func,
15 | customCss: PropTypes.string
16 | }
17 |
18 | static defaultProps = {
19 | primaryColor: '#1890ff',
20 | storageName: 'custom-antd-primary-color',
21 | style: { display: 'inline-block' },
22 | placement: '',
23 | themeChangeCallback: null,
24 | customCss: ''
25 | }
26 |
27 | constructor(props) {
28 | super(props);
29 | const { primaryColor } = this.props;
30 | this.state = {
31 | color: tinycolor(primaryColor).toRgb()
32 | };
33 | }
34 |
35 | componentDidMount() {
36 | const { storageName, themeChangeCallback, customCss } = this.props;
37 | // initial storage color
38 | const storageColor = window.localStorage.getItem(storageName);
39 | if (storageColor) {
40 | changeAntdTheme(storageColor, { customCss });
41 | document.getElementById('change_antd_theme_color').style.backgroundColor = storageColor;
42 | if (themeChangeCallback) {
43 | themeChangeCallback(storageColor);
44 | }
45 | }
46 | }
47 |
48 | handleClick = () => {
49 | this.setState({ displayColorPicker: !this.state.displayColorPicker });
50 | };
51 |
52 | handleClose = () => {
53 | this.setState({ displayColorPicker: false });
54 | };
55 |
56 | handleChange = color => {
57 | this.setState({ color: color.rgb }, () => {
58 | changeAntdTheme(color.hex, { customCss: this.props.customCss });
59 | window.localStorage.setItem(this.props.storageName, color.hex);
60 | this.props.themeChangeCallback && this.props.themeChangeCallback(color.hex);
61 | });
62 | };
63 |
64 | render() {
65 | const styles = {
66 | color: {
67 | width: '36px',
68 | height: '14px',
69 | borderRadius: '2px',
70 | background: `rgba(${ this.state.color.r }, ${ this.state.color.g }, ${ this.state.color.b }, ${ this.state.color.a })`
71 | },
72 | swatch: {
73 | width: '46px',
74 | maxWidth: '46px',
75 | padding: '5px',
76 | background: '#fff',
77 | borderRadius: '1px',
78 | boxShadow: '0 0 0 1px rgba(0,0,0,.1)',
79 | display: 'inline-block',
80 | cursor: 'pointer'
81 | },
82 | popover: {
83 | position: 'absolute',
84 | zIndex: '99999',
85 | ...placementSketchPicker(this.props.placement)
86 | },
87 | cover: {
88 | position: 'fixed',
89 | top: '0px',
90 | right: '0px',
91 | bottom: '0px',
92 | left: '0px'
93 | }
94 | };
95 |
96 | return (
97 |
98 |
101 | {
102 | this.state.displayColorPicker
103 | ?
: null
110 | }
111 |
112 | );
113 | }
114 | }
115 |
116 | export { DynamicAntdTheme as default, changeAntdTheme, generateThemeColor };
--------------------------------------------------------------------------------
/examples/next-demo/docs/README_zh_CN.md:
--------------------------------------------------------------------------------
1 | ## 🌍 Browser Support
2 |
3 | |  |  |  |  |  |
4 | | --- | --- | --- | --- | --- |
5 | | Chrome 39.0+ ✔ | Edge 12.0+ ✔ | Firefox 30.0+ ✔ | IE 11+ ✔ | Safari 9.1+ ✔ |
6 |
7 | ## 📦 安装
8 |
9 | `npm install dynamic-antd-theme` 或 `yarn add dynamic-antd-theme`
10 |
11 |
12 | ## 🔨 如何使用
13 |
14 | 最好的方式是将组件安装在公用组件里,这样任何页面都可以使用,进行替换。
15 |
16 | 例如:Layout组件和Header组件。
17 |
18 | > 不是说每个页面都需要进行替换,只需要替换一次即可进行整个项目的替换。
19 |
20 | ```
21 | // Layout.js
22 | ...
23 | import DynamicAntdTheme from 'dynamic-antd-theme';
24 | ...
25 |
26 |
27 | Change antd theme:
28 |
29 |
30 |
31 | ```
32 | ### 更多示例
33 |
34 | ```
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | function themeChangeCallback (color) {
43 | document.getElementById('my-header-bar').style.backgroundColor = color;
44 | }
45 |
46 |
47 |
48 | ```
49 |
50 | ## ✨ 属性
51 |
52 | | 属性 | 类型 | 默认值 | 描述 |
53 | | ---------- | ------ | --------------------- | ------------ |
54 | | primaryColor | String | #1890d5 | 你当前项目用到的@primary-color,默认是antd官方的 |
55 | | storageName | String | custom-antd-primary-color | 缓存在本地localStorage里面的变量名 |
56 | | style | Object | { display: 'inline-block' } | 可以简单的对组件进行样式设置 |
57 | | placement | String | bottomRight | 改变color-picker的显示位置,有如下值可设置:`bottom, bottomRight, right, topRight, top, topLeft, left, bottomLeft`。|
58 | | themeChangeCallback | Func | null | 你可以在主题颜色变化的同时传入一个你想修改的自定义callback,用来修改你自己的与主题相关的样式,如Header/Sider这种antd不附带主题色的场景 |
59 |
60 | ## 🌞 方法
61 | | export | Description |
62 | | ---------- | ------------ |
63 | | default | 默认引入的是 组件 |
64 | | generateThemeColor | `param: color`, 根据传入的颜色生成一组颜色对象 |
65 | | changeAntdTheme | `param: colorObj`, 改变主题的方法 |
66 |
67 | #### 示例
68 | ```
69 | import { generateThemeColor, changeAntdTheme } from 'dynamic-antd-theme';
70 | ...
71 |
72 | {
75 | const color = 'blue';
76 | changeAntdTheme(
77 | generateThemeColor(color);
78 | );
79 | }
80 | }
81 | >改变主题
82 | ```
83 |
84 | ## ⚠️ 注意
85 |
86 | **该方案因为简易使用,所以容易出现问题,出现问题希望大家及时反馈,比如什么组件有问题,一定尽快修复更新版本。**
87 |
88 | - 目前版本要求你的antd版本低于v3.19.0
89 |
90 | > 版本高于v3.19.0也可以使用,如果出现问题,记得提issue,会立刻解决
91 |
92 | - ...插件版本会根据antd不定时更新(一般antd出新组件会进行更新)
93 |
94 | ## 🔗 更新记录
95 |
96 | - v0.1.3
97 |
98 | 修复Slider组件的显示问题。
99 |
100 | - v0.1.4
101 |
102 | 避免重复插入`
129 |
130 |
131 |
AntD V3.25.3
132 |
133 | {
138 | console.log(broken);
139 | console.log(path);
140 | }}
141 | onCollapse={(collapsed, type) => {
142 | console.log(collapsed, type);
143 | }}
144 | style={siderStyle}
145 | >
146 |
147 | Router.push(key)}
153 | >
154 |
155 | - Dynamic-Antd-Theme
156 |
157 |
158 | {
159 | AntdComps.map(item => (
160 | -
161 | {item.title}
162 |
163 | ))
164 | }
165 |
166 |
167 |
171 |
172 |
173 |
176 |
177 |
178 | {children}
179 |
180 |
181 |
182 |
183 | window.open('https://github.com/luffyZh')} type='primary' ghost>@author luffyZh
184 | window.open('https://github.com/luffyZh/dynamic-antd-theme/')} type='primary'>go to star 🌟
185 |
186 |
187 |
188 |
189 | )
--------------------------------------------------------------------------------
/examples/react-ts-demo/src/serviceWorker.ts:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read https://bit.ly/CRA-PWA
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.0/8 are considered localhost for IPv4.
18 | window.location.hostname.match(
19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
20 | )
21 | );
22 |
23 | type Config = {
24 | onSuccess?: (registration: ServiceWorkerRegistration) => void;
25 | onUpdate?: (registration: ServiceWorkerRegistration) => void;
26 | };
27 |
28 | export function register(config?: Config) {
29 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
30 | // The URL constructor is available in all browsers that support SW.
31 | const publicUrl = new URL(
32 | process.env.PUBLIC_URL,
33 | window.location.href
34 | );
35 | if (publicUrl.origin !== window.location.origin) {
36 | // Our service worker won't work if PUBLIC_URL is on a different origin
37 | // from what our page is served on. This might happen if a CDN is used to
38 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
39 | return;
40 | }
41 |
42 | window.addEventListener('load', () => {
43 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
44 |
45 | if (isLocalhost) {
46 | // This is running on localhost. Let's check if a service worker still exists or not.
47 | checkValidServiceWorker(swUrl, config);
48 |
49 | // Add some additional logging to localhost, pointing developers to the
50 | // service worker/PWA documentation.
51 | navigator.serviceWorker.ready.then(() => {
52 | console.log(
53 | 'This web app is being served cache-first by a service ' +
54 | 'worker. To learn more, visit https://bit.ly/CRA-PWA'
55 | );
56 | });
57 | } else {
58 | // Is not localhost. Just register service worker
59 | registerValidSW(swUrl, config);
60 | }
61 | });
62 | }
63 | }
64 |
65 | function registerValidSW(swUrl: string, config?: Config) {
66 | navigator.serviceWorker
67 | .register(swUrl)
68 | .then(registration => {
69 | registration.onupdatefound = () => {
70 | const installingWorker = registration.installing;
71 | if (installingWorker == null) {
72 | return;
73 | }
74 | installingWorker.onstatechange = () => {
75 | if (installingWorker.state === 'installed') {
76 | if (navigator.serviceWorker.controller) {
77 | // At this point, the updated precached content has been fetched,
78 | // but the previous service worker will still serve the older
79 | // content until all client tabs are closed.
80 | console.log(
81 | 'New content is available and will be used when all ' +
82 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
83 | );
84 |
85 | // Execute callback
86 | if (config && config.onUpdate) {
87 | config.onUpdate(registration);
88 | }
89 | } else {
90 | // At this point, everything has been precached.
91 | // It's the perfect time to display a
92 | // "Content is cached for offline use." message.
93 | console.log('Content is cached for offline use.');
94 |
95 | // Execute callback
96 | if (config && config.onSuccess) {
97 | config.onSuccess(registration);
98 | }
99 | }
100 | }
101 | };
102 | };
103 | })
104 | .catch(error => {
105 | console.error('Error during service worker registration:', error);
106 | });
107 | }
108 |
109 | function checkValidServiceWorker(swUrl: string, config?: Config) {
110 | // Check if the service worker can be found. If it can't reload the page.
111 | fetch(swUrl, {
112 | headers: { 'Service-Worker': 'script' }
113 | })
114 | .then(response => {
115 | // Ensure service worker exists, and that we really are getting a JS file.
116 | const contentType = response.headers.get('content-type');
117 | if (
118 | response.status === 404 ||
119 | (contentType != null && contentType.indexOf('javascript') === -1)
120 | ) {
121 | // No service worker found. Probably a different app. Reload the page.
122 | navigator.serviceWorker.ready.then(registration => {
123 | registration.unregister().then(() => {
124 | window.location.reload();
125 | });
126 | });
127 | } else {
128 | // Service worker found. Proceed as normal.
129 | registerValidSW(swUrl, config);
130 | }
131 | })
132 | .catch(() => {
133 | console.log(
134 | 'No internet connection found. App is running in offline mode.'
135 | );
136 | });
137 | }
138 |
139 | export function unregister() {
140 | if ('serviceWorker' in navigator) {
141 | navigator.serviceWorker.ready
142 | .then(registration => {
143 | registration.unregister();
144 | })
145 | .catch(error => {
146 | console.error(error.message);
147 | });
148 | }
149 | }
150 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | [](https://dynamic-antd-theme-luffyzh.vercel.app/)
4 | 
5 |
6 | A simple plugin to dynamic change [ant-design](https://ant.design) theme whether less or css.
7 |
8 | English | [简体中文](./README_zh_CN.md)
9 |
10 | > Ant Design V5 has very convenient's ability to support the dynamic change theme, so the warehouse is no longer maintained, relevant document reference: https://ant.design/docs/react/customize-theme-cn.
11 |
12 | **This project was initially targeted at 'ant-design', that means it's used in the React project. However, the core style was also applicable to 'ant-design-vue' || 'ant-design-angular'. In addition, for the convenience of one-key and auto use, the color-picker was also packaged into the project, resulting in too large a volume of the project. Aiming at this problem, I develope a new minor version —— [mini-dynamic-antd-theme](https://github.com/luffyZh/mini-dynamic-antd-theme).**
13 |
14 | ## 🏠 HomePage
15 | [Dynamic-Antd-Theme-Demo](https://dynamic-antd-theme.luffyzh.now.sh/)
16 |
17 | ## 🌍 Browser Support
18 |
19 | |  |  |  |  |  |
20 | | --- | --- | --- | --- | --- |
21 | | Chrome 39.0+ ✔ | Edge 12.0+ ✔ | Firefox 30.0+ ✔ | IE 11+ ✔ | Safari 9.1+ ✔ |
22 |
23 | ## 📦 Install
24 |
25 | `npm install dynamic-antd-theme` or `yarn add dynamic-antd-theme`
26 |
27 |
28 | ## 🔨 Usage
29 |
30 | The best usage of the dynamic-antd-theme is in the common compnent (Layout/Header etc...) of your application.
31 |
32 | ```
33 | // Layout.js
34 | ...
35 | import DynamicAntdTheme from 'dynamic-antd-theme';
36 | ...
37 |
38 |
39 | Change antd theme:
40 |
41 |
42 |
43 | ```
44 |
45 | ## ✨ Props
46 |
47 | | Props | Type | Default | Description |
48 | | ---------- | ------ | --------------------- | ------------ |
49 | | primaryColor | String | #1890d5 | your antd initial @primary-color |
50 | | storageName | String | custom-antd-primary-color | the name that is saved in the localStorage |
51 | | style | Object | null | you can custom the component style simply |
52 | | placement | String | bottomRight | change the color-picker position, `bottom, bottomRight, right, topRight, top, topLeft, left, bottomLeft`|
53 | | themeChangeCallback | Func | null | you can do something use themeColor when themeColor changed. |
54 | | customCss | String | '' | you can define custom css effect any element. |
55 |
56 | ### How to use the primaryColors in customCss?
57 |
58 | You can do this using the following four variables(just like scss):
59 |
60 | - $primary-color
61 | - $primary-hover-color
62 | - $primary-active-color
63 | - $primary-shadow-color
64 |
65 | ```
66 | const customCss = `
67 | .ant-btn {
68 | font-family: fantasy;
69 | }
70 | .custom-title {
71 | color: $primary-color;
72 | }
73 | .custom-title:hover {
74 | color: $primary-hover-color;
75 | cursor: pointer;
76 | }
77 | #custom-id {
78 | color: $primary-shadow-color;
79 | }
80 | `;
81 | ```
82 |
83 | ## 🌞 Export
84 | | export | Description |
85 | | ---------- | ------------ |
86 | | default | The component |
87 | | changeAntdTheme | `param: (color, options)`, change the antd theme. The options specific attributes are as follows: - `storageName`: This can be configured to set storageName when not using picker . - `customCss`: custom Css |
88 |
89 | ## 🌰 More Example
90 |
91 | ### Basic Use
92 |
93 | ```
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 | function themeChangeCallback (color) {
102 | document.getElementById('my-header-bar').style.backgroundColor = color;
103 | }
104 |
105 |
106 |
107 | ```
108 |
109 | ### Define Custom CSS
110 | ```
111 | // define custom css
112 | const customCss = `
113 | .ant-btn {
114 | font-family: fantasy;
115 | }
116 | .custom-title {
117 | color: $primary-color;
118 | }
119 | .custom-title:hover {
120 | color: $primary-hover-color;
121 | cursor: pointer;
122 | }
123 | #custom-id {
124 | color: $primary-shadow-color;
125 | }
126 | `;
127 |
128 |
131 |
132 | ```
133 | The effects as flow:
134 |
135 | 
136 |
137 | ### No Color-Picker
138 |
139 | > If u don't need the `color-picker`,[mini-dynamic-antd-theme](https://github.com/luffyZh/mini-dynamic-antd-theme) is more suitable for you.
140 |
141 | ```
142 | import { generateThemeColor, changeAntdTheme } from 'dynamic-antd-theme';
143 | ...
144 |
145 | {
148 | const color = 'blue';
149 | changeAntdTheme(color);
150 | }
151 | }
152 | >Change Theme
153 | ```
154 |
155 | ## ⚠️ Attention
156 |
157 | **This solution is easy to use, so it is prone to problems. We hope you can give us timely feedback. For example, if there is a problem with any component, we will fix the updated version as soon as possible.**
158 |
159 | - The current version requires your antd version to be lower than v3.19.0
160 |
161 | > The antd version is higher than v3.19.0 you can also use it, if have some problems remember give me an issue.
162 |
163 | - ...Plugin versions are updated from time to time based on antd (new antd components are updated)
164 |
165 | ## 🔗 Changelogs
166 | [CHANGELOG](./docs/CHANGELOG.md)
167 |
168 | ## 🍎 Follow-Up Plan
169 |
170 | - More custom type: `border-color`, `border-radius`, etc.
171 |
172 | > If you're interested in this repository, Fork/PR/Issue all are welcome.
173 |
174 |
--------------------------------------------------------------------------------
/src/core/util.js:
--------------------------------------------------------------------------------
1 | import BezierEasing from 'bezier-easing';
2 | import tinycolor from 'tinycolor2';
3 | import cssContent from './theme';
4 |
5 | /* basic-easiing */
6 | const baseEasing = BezierEasing(0.26, 0.09, 0.37, 0.18);
7 |
8 | const primaryEasing = baseEasing(0.6);
9 | const currentEasing = index => baseEasing(index * 0.1);
10 |
11 | /* tinycolor-mix */
12 | tinycolor.mix = function(color1, color2, amount) {
13 | amount = (amount === 0) ? 0 : (amount || 50);
14 |
15 | var rgb1 = tinycolor(color1).toRgb();
16 | var rgb2 = tinycolor(color2).toRgb();
17 |
18 | var p = amount / 100;
19 |
20 | var rgba = {
21 | r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
22 | g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
23 | b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
24 | a: ((rgb2.a - rgb1.a) * p) + rgb1.a
25 | };
26 | return tinycolor(rgba);
27 | };
28 |
29 | function generateHoverColor (color, ratio = 5) {
30 | return tinycolor.mix(
31 | '#ffffff',
32 | color,
33 | currentEasing(ratio) * 100 / primaryEasing
34 | ).toHexString();
35 | }
36 |
37 | function generateActiveColor (color, ratio = 7) {
38 | return tinycolor.mix(
39 | '#333333',
40 | color,
41 | (1 - (currentEasing(ratio) - primaryEasing) / (1 - primaryEasing)) * 100
42 | ).toHexString();
43 | }
44 |
45 | function generateShadowColor (color, ratio = 9) {
46 | return tinycolor.mix(
47 | '#ffffff',
48 | color,
49 | (1 - (currentEasing(ratio) - primaryEasing) / (1 - primaryEasing)) * 100
50 | ).toRgbString();
51 | }
52 |
53 | export function generateThemeColor (color) {
54 | return {
55 | primaryColor: color,
56 | hoverColor: generateHoverColor(color),
57 | activeColor: generateActiveColor(color),
58 | shadowColor: generateShadowColor(color)
59 | };
60 | }
61 |
62 | // 判断是否是IE系列浏览器
63 | function IEVersion() {
64 | const userAgent = navigator.userAgent; // 取得浏览器的userAgent字符串
65 | const isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; // 判断是否IE<11浏览器
66 | const isEdge = userAgent.indexOf("Edge") > -1 && !isIE; // 判断是否IE的Edge浏览器
67 | const isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
68 | if (isIE) {
69 | const reIE = new RegExp("MSIE (\\d+\\.\\d+);");
70 | reIE.test(userAgent);
71 | const fIEVersion = parseFloat(RegExp["$1"]);
72 | if (fIEVersion == 7) {
73 | return 7;
74 | } else if (fIEVersion == 8) {
75 | return 8;
76 | } else if (fIEVersion == 9) {
77 | return 9;
78 | } else if (fIEVersion == 10) {
79 | return 10;
80 | } else {
81 | return 6; // IE版本 <= 7
82 | }
83 | } else if (isEdge) {
84 | return 'edge'; // edge
85 | } else if (isIE11) {
86 | return 11; // IE11
87 | } else {
88 | return 0; // 不是ie浏览器
89 | }
90 | }
91 |
92 | const generateCustomCss = customCss => {
93 | if (typeof customCss !== 'string'
94 | || (typeof customCss === 'string' && customCss.trim().length === 0)
95 | ) {
96 | return '';
97 | }
98 | customCss = customCss.replace(/\$primary\-color/g, 'var(--primary-color)');
99 | customCss = customCss.replace(/\$primary\-hover-color/g, 'var(--primary-hover-color)');
100 | customCss = customCss.replace(/\$primary\-active-color/g, 'var(--primary-active-color)');
101 | customCss = customCss.replace(/\$primary\-shadow-color/g, 'var(--primary-shadow-color)');
102 | return customCss;
103 | }
104 |
105 | const generateStyleHtml = (colorObj, customCss) => {
106 | const {
107 | activeColor,
108 | primaryColor,
109 | hoverColor,
110 | shadowColor
111 | } = colorObj;
112 | if (!IEVersion()) {
113 | const cssVar = `
114 | :root {
115 | --primary-color: ${primaryColor};
116 | --primary-hover-color: ${hoverColor};
117 | --primary-active-color: ${activeColor};
118 | --primary-shadow-color: ${shadowColor};
119 | }
120 | `;
121 | return `${cssVar}\n${cssContent}\n${generateCustomCss(customCss)}`;
122 | }
123 | let IECSSContent = `${cssContent}${generateCustomCss(customCss)}`;
124 | IECSSContent = IECSSContent.replace(/var\(\-\-primary\-color\)/g, primaryColor);
125 | IECSSContent = IECSSContent.replace(/var\(\-\-primary\-hover\-color\)/g, hoverColor);
126 | IECSSContent = IECSSContent.replace(/var\(\-\-primary\-active\-color\)/g, activeColor);
127 | IECSSContent = IECSSContent.replace(/var\(\-\-primary\-shadow\-color\)/g, shadowColor);
128 | return IECSSContent;
129 | }
130 |
131 | const defaultOptions = {
132 | customCss: '',
133 | storageName: '',
134 | }
135 |
136 | export function changeAntdTheme (color, options = { ...defaultOptions }) {
137 | const colorObj = generateThemeColor(color);
138 | let styleNode = document.getElementById('dynamic_antd_theme_custom_style');
139 | const { customCss, storageName } = options;
140 | // deal ssr
141 | if (typeof window !== 'undefined') {
142 | // 这种方式就是不使用 picker 组件进行调用,也要存一份
143 | storageName && window.localStorage.setItem('custom-antd-primary-color', colorObj.primaryColor);
144 | }
145 | if (!styleNode) {
146 | // avoid repeat insertion
147 | styleNode = document.createElement('style');
148 | styleNode.id = 'dynamic_antd_theme_custom_style';
149 | styleNode.innerHTML = generateStyleHtml(colorObj, customCss);
150 | document.getElementsByTagName('head')[0].appendChild(styleNode);
151 | } else {
152 | styleNode.innerHTML = generateStyleHtml(colorObj, customCss);
153 | }
154 | }
155 |
156 | export function placementSketchPicker(placement) {
157 | switch (placement) {
158 | case 'bottomRight': {
159 | return {
160 | marginLeft: '0px'
161 | };
162 | }
163 | case 'bottom': {
164 | return {
165 | marginLeft: '-87px'
166 | };
167 | }
168 | case 'bottomLeft': {
169 | return {
170 | marginLeft: '-174px'
171 | };
172 | }
173 | case 'right': {
174 | return {
175 | marginLeft: '56px',
176 | marginTop: '-129px'
177 | };
178 | }
179 | case 'topRight': {
180 | return {
181 | marginTop: '-342px'
182 | }
183 | }
184 | case 'top': {
185 | return {
186 | marginLeft: '-87px',
187 | marginTop: '-342px'
188 | }
189 | }
190 | case 'topLeft': {
191 | return {
192 | marginLeft: '-174px',
193 | marginTop: '-342px'
194 | }
195 | }
196 | case 'left': {
197 | return {
198 | marginLeft: '-230px',
199 | marginTop: '-129px'
200 | }
201 | }
202 | default:
203 | return {
204 | marginLeft: '0px'
205 | };
206 | }
207 | }
--------------------------------------------------------------------------------
/README_zh_CN.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | [Ant-Design](https://ant.design) 最简单的动态换肤方案。它是一个通用的解决方案,无论你是使用less还是css。
4 |
5 | [](https://dynamic-antd-theme.luffyzh.now.sh/)
6 |
7 | > Ant Design V5 已经非常方便的支持了动态换肤的能力,所以本仓库不再进行维护,相关文档参考:https://ant.design/docs/react/customize-theme-cn。
8 |
9 | **此项目起初是针对 `ant-design`,也就是针对 React 项目,不过随着使用发现,其实核心样式对于 `ant-design-vue` 也是适用的,并且为了方便使用,项目进行了一键式封装,将 `color-picker` 也封装到了项目中,导致项目体积过大。针对此问题,开发了一个新的小版本 —— [mini-dynamic-antd-theme](https://github.com/luffyZh/mini-dynamic-antd-theme),感兴趣的可以去使用。**
10 |
11 | ## 🌍 Browser Support
12 |
13 | |  |  |  |  |  |
14 | | --- | --- | --- | --- | --- |
15 | | Chrome 39.0+ ✔ | Edge 12.0+ ✔ | Firefox 30.0+ ✔ | IE 11+ ✔ | Safari 9.1+ ✔ |
16 |
17 | ## 📦 安装
18 |
19 | `npm install dynamic-antd-theme` 或 `yarn add dynamic-antd-theme`
20 |
21 |
22 | ## 🔨 如何使用
23 |
24 | 最好的方式是将组件安装在公用组件里,这样任何页面都可以使用,进行替换。
25 |
26 | 例如:Layout组件和Header组件。
27 |
28 | > 不是说每个页面都需要进行替换,只需要替换一次即可进行整个项目的替换。
29 |
30 | ```
31 | // Layout.js
32 | ...
33 | import DynamicAntdTheme from 'dynamic-antd-theme';
34 | ...
35 |
36 |
37 | Change antd theme:
38 |
39 |
40 |
41 | ```
42 | ### 更多示例
43 |
44 | ```
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | function themeChangeCallback (color) {
53 | document.getElementById('my-header-bar').style.backgroundColor = color;
54 | }
55 |
56 |
57 |
58 | ```
59 |
60 | ## ✨ 属性
61 |
62 | | 属性 | 类型 | 默认值 | 描述 |
63 | | ---------- | ------ | --------------------- | ------------ |
64 | | primaryColor | String | #1890d5 | 你当前项目用到的@primary-color,默认是antd官方的 |
65 | | storageName | String | custom-antd-primary-color | 缓存在本地localStorage里面的变量名 |
66 | | style | Object | { display: 'inline-block' } | 可以简单的对组件进行样式设置 |
67 | | placement | String | bottomRight | 改变color-picker的显示位置,有如下值可设置:`bottom, bottomRight, right, topRight, top, topLeft, left, bottomLeft`。|
68 | | themeChangeCallback | Func | null | 你可以在主题颜色变化的同时传入一个你想修改的自定义callback,用来修改你自己的与主题相关的样式,如Header/Sider这种antd不附带主题色的场景 |
69 | | customCss | String | '' | 自定义 CSS 并且使用主题色到各种元素上 |
70 |
71 | ### 如何在 customCss 里使用自定义的主题色系?
72 |
73 | 可以在 CSS 字符串里使用如下四个变量(熟悉 scss 的应该都清楚):
74 |
75 | - $primary-color
76 | - $primary-hover-color
77 | - $primary-active-color
78 | - $primary-shadow-color
79 |
80 | ```
81 | const customCss = `
82 | .ant-btn {
83 | font-family: fantasy;
84 | }
85 | .custom-title {
86 | color: $primary-color;
87 | }
88 | .custom-title:hover {
89 | color: $primary-hover-color;
90 | cursor: pointer;
91 | }
92 | #custom-id {
93 | color: $primary-shadow-color;
94 | }
95 | `;
96 | ```
97 |
98 | ## 🌞 方法
99 | | export | Description |
100 | | ---------- | ------------ |
101 | | default | 默认引入的是 组件 |
102 | | changeAntdTheme | `param: (colorObj, options = { customCss: '', storageName: '' })`, 修改 Antd 的主题。 `options`参数有以下两个属性可以进行配置 . - `customCss`: 自定义的CSS样式, `storageName`: 如果没有使用 Picker 组件,可以通过这里进行 strogeName 的配置。 |
103 |
104 | ## 🌰 更多例子
105 |
106 | ### 基础用法
107 |
108 | ```
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 | function themeChangeCallback (color) {
117 | document.getElementById('my-header-bar').style.backgroundColor = color;
118 | }
119 |
120 |
121 |
122 | ```
123 |
124 | ### 自定义 CSS
125 |
126 | ```
127 | // define custom css
128 | const customCss = `
129 | .ant-btn {
130 | font-family: fantasy;
131 | }
132 | .custom-title {
133 | color: $primary-color;
134 | }
135 | .custom-title:hover {
136 | color: $primary-hover-color;
137 | cursor: pointer;
138 | }
139 | #custom-id {
140 | color: $primary-shadow-color;
141 | }
142 | `;
143 |
144 |
147 |
148 | ```
149 | The effects as flow:
150 |
151 | 
152 |
153 | ### 不使用 `color-picker`
154 |
155 | > If u don't need the `color-picker`,[mini-dynamic-antd-theme](https://github.com/luffyZh/mini-dynamic-antd-theme) is more suitable for you.
156 |
157 | ```
158 | import { changeAntdTheme } from 'dynamic-antd-theme';
159 | ...
160 |
161 | {
164 | const color = 'blue';
165 | changeAntdTheme(color);
166 | }
167 | }
168 | >Change Theme
169 |
170 | ## ⚠️ 注意
171 |
172 | **该方案因为简易使用,所以容易出现问题,出现问题希望大家及时反馈,比如什么组件有问题,一定尽快修复更新版本。**
173 |
174 | - 目前版本要求你的antd版本低于v3.19.0
175 |
176 | > 版本高于v3.19.0也可以使用,如果出现问题,记得提issue,会立刻解决
177 |
178 | - ...插件版本会根据antd不定时更新(一般antd出新组件会进行更新)
179 |
180 | ## 🔗 更新记录
181 |
182 | - v0.1.3
183 |
184 | 修复Slider组件的显示问题。
185 |
186 | - v0.1.4
187 |
188 | 避免重复插入`
108 |
109 | )
110 | ```
111 |
112 | Read more about [Next's CSS features](https://github.com/zeit/next.js#css).
113 |
114 | ## Adding Components
115 |
116 | We recommend keeping React components in `./components` and they should look like:
117 |
118 | ### `./components/simple.js`
119 |
120 | ```jsx
121 | const Simple = () => Simple Component
122 |
123 | export default Simple // don't forget to export default!
124 | ```
125 |
126 | ### `./components/complex.js`
127 |
128 | ```jsx
129 | import { Component } from 'react'
130 |
131 | class Complex extends Component {
132 | state = {
133 | text: 'World'
134 | }
135 |
136 | render() {
137 | const { text } = this.state
138 | return Hello {text}
139 | }
140 | }
141 |
142 | export default Complex // don't forget to export default!
143 | ```
144 |
145 | ## Fetching Data
146 |
147 | You can fetch data in `pages` components using `getInitialProps` like this:
148 |
149 | ### `./pages/stars.js`
150 |
151 | ```jsx
152 | const Page = props => Next stars: {props.stars}
153 |
154 | Page.getInitialProps = async ({ req }) => {
155 | const res = await fetch('https://api.github.com/repos/zeit/next.js')
156 | const json = await res.json()
157 | const stars = json.stargazers_count
158 | return { stars }
159 | }
160 |
161 | export default Page
162 | ```
163 |
164 | For the initial page load, `getInitialProps` will execute on the server only. `getInitialProps` will only be executed on the client when navigating to a different route via the `Link` component or using the routing APIs.
165 |
166 | _Note: `getInitialProps` can **not** be used in children components. Only in `pages`._
167 |
168 | Read more about [fetching data and the component lifecycle](https://github.com/zeit/next.js#fetching-data-and-component-lifecycle)
169 |
170 | ## Custom Server
171 |
172 | Want to start a new app with a custom server? Run `create-next-app --example customer-server custom-app`
173 |
174 | Typically you start your next server with `next start`. It's possible, however, to start a server 100% programmatically in order to customize routes, use route patterns, etc
175 |
176 | This example makes `/a` resolve to `./pages/b`, and `/b` resolve to `./pages/a`:
177 |
178 | ```jsx
179 | const { createServer } = require('http')
180 | const { parse } = require('url')
181 | const next = require('next')
182 |
183 | const dev = process.env.NODE_ENV !== 'production'
184 | const app = next({ dev })
185 | const handle = app.getRequestHandler()
186 |
187 | app.prepare().then(() => {
188 | createServer((req, res) => {
189 | // Be sure to pass `true` as the second argument to `url.parse`.
190 | // This tells it to parse the query portion of the URL.
191 | const parsedUrl = parse(req.url, true)
192 | const { pathname, query } = parsedUrl
193 |
194 | if (pathname === '/a') {
195 | app.render(req, res, '/b', query)
196 | } else if (pathname === '/b') {
197 | app.render(req, res, '/a', query)
198 | } else {
199 | handle(req, res, parsedUrl)
200 | }
201 | }).listen(3000, err => {
202 | if (err) throw err
203 | console.log('> Ready on http://localhost:3000')
204 | })
205 | })
206 | ```
207 |
208 | Then, change your `start` script to `NODE_ENV=production node server.js`.
209 |
210 | Read more about [custom server and routing](https://github.com/zeit/next.js#custom-server-and-routing)
211 |
212 | ## Syntax Highlighting
213 |
214 | To configure the syntax highlighting in your favorite text editor, head to the [relevant Babel documentation page](https://babeljs.io/docs/editors) and follow the instructions. Some of the most popular editors are covered.
215 |
216 | ## Deploy to Now
217 |
218 | [now](https://zeit.co/now) offers a zero-configuration single-command deployment.
219 |
220 | 1. Install the `now` command-line tool either via the recommended [desktop tool](https://zeit.co/download) or via node with `npm install -g now`.
221 |
222 | 2. Run `now` from your project directory. You will see a **now.sh** URL in your output like this:
223 |
224 | ```
225 | > Ready! https://your-project-dirname-tpspyhtdtk.now.sh (copied to clipboard)
226 | ```
227 |
228 | Paste that URL into your browser when the build is complete, and you will see your deployed app.
229 |
230 | You can find more details about [`now` here](https://zeit.co/now).
231 |
232 | ## Something Missing?
233 |
234 | If you have ideas for how we could improve this readme or the project in general, [let us know](https://github.com/segmentio/create-next-app/issues) or [contribute some!](https://github.com/segmentio/create-next-app/edit/master/lib/templates/default/README.md)
235 |
--------------------------------------------------------------------------------
/examples/next-demo/static/markdown.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: octicons-link;
3 | src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
4 | }
5 |
6 | .markdown-body .octicon {
7 | display: inline-block;
8 | fill: currentColor;
9 | vertical-align: text-bottom;
10 | }
11 |
12 | .markdown-body .anchor {
13 | float: left;
14 | line-height: 1;
15 | margin-left: -20px;
16 | padding-right: 4px;
17 | }
18 |
19 | .markdown-body .anchor:focus {
20 | outline: none;
21 | }
22 |
23 | .markdown-body h1 .octicon-link,
24 | .markdown-body h2 .octicon-link,
25 | .markdown-body h3 .octicon-link,
26 | .markdown-body h4 .octicon-link,
27 | .markdown-body h5 .octicon-link,
28 | .markdown-body h6 .octicon-link {
29 | color: #1b1f23;
30 | vertical-align: middle;
31 | visibility: hidden;
32 | }
33 |
34 | .markdown-body h1:hover .anchor,
35 | .markdown-body h2:hover .anchor,
36 | .markdown-body h3:hover .anchor,
37 | .markdown-body h4:hover .anchor,
38 | .markdown-body h5:hover .anchor,
39 | .markdown-body h6:hover .anchor {
40 | text-decoration: none;
41 | }
42 |
43 | .markdown-body h1:hover .anchor .octicon-link,
44 | .markdown-body h2:hover .anchor .octicon-link,
45 | .markdown-body h3:hover .anchor .octicon-link,
46 | .markdown-body h4:hover .anchor .octicon-link,
47 | .markdown-body h5:hover .anchor .octicon-link,
48 | .markdown-body h6:hover .anchor .octicon-link {
49 | visibility: visible;
50 | }
51 |
52 | .markdown-body {
53 | -ms-text-size-adjust: 100%;
54 | -webkit-text-size-adjust: 100%;
55 | color: #24292e;
56 | line-height: 1.5;
57 | font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;
58 | font-size: 16px;
59 | line-height: 1.5;
60 | word-wrap: break-word;
61 | }
62 |
63 | .markdown-body .pl-c {
64 | color: #6a737d;
65 | }
66 |
67 | .markdown-body .pl-c1,
68 | .markdown-body .pl-s .pl-v {
69 | color: #005cc5;
70 | }
71 |
72 | .markdown-body .pl-e,
73 | .markdown-body .pl-en {
74 | color: #6f42c1;
75 | }
76 |
77 | .markdown-body .pl-s .pl-s1,
78 | .markdown-body .pl-smi {
79 | color: #24292e;
80 | }
81 |
82 | .markdown-body .pl-ent {
83 | color: #22863a;
84 | }
85 |
86 | .markdown-body .pl-k {
87 | color: #d73a49;
88 | }
89 |
90 | .markdown-body .pl-pds,
91 | .markdown-body .pl-s,
92 | .markdown-body .pl-s .pl-pse .pl-s1,
93 | .markdown-body .pl-sr,
94 | .markdown-body .pl-sr .pl-cce,
95 | .markdown-body .pl-sr .pl-sra,
96 | .markdown-body .pl-sr .pl-sre {
97 | color: #032f62;
98 | }
99 |
100 | .markdown-body .pl-smw,
101 | .markdown-body .pl-v {
102 | color: #e36209;
103 | }
104 |
105 | .markdown-body .pl-bu {
106 | color: #b31d28;
107 | }
108 |
109 | .markdown-body .pl-ii {
110 | background-color: #b31d28;
111 | color: #fafbfc;
112 | }
113 |
114 | .markdown-body .pl-c2 {
115 | background-color: #d73a49;
116 | color: #fafbfc;
117 | }
118 |
119 | .markdown-body .pl-c2:before {
120 | content: "^M";
121 | }
122 |
123 | .markdown-body .pl-sr .pl-cce {
124 | color: #22863a;
125 | font-weight: 700;
126 | }
127 |
128 | .markdown-body .pl-ml {
129 | color: #735c0f;
130 | }
131 |
132 | .markdown-body .pl-mh,
133 | .markdown-body .pl-mh .pl-en,
134 | .markdown-body .pl-ms {
135 | color: #005cc5;
136 | font-weight: 700;
137 | }
138 |
139 | .markdown-body .pl-mi {
140 | color: #24292e;
141 | font-style: italic;
142 | }
143 |
144 | .markdown-body .pl-mb {
145 | color: #24292e;
146 | font-weight: 700;
147 | }
148 |
149 | .markdown-body .pl-md {
150 | background-color: #ffeef0;
151 | color: #b31d28;
152 | }
153 |
154 | .markdown-body .pl-mi1 {
155 | background-color: #f0fff4;
156 | color: #22863a;
157 | }
158 |
159 | .markdown-body .pl-mc {
160 | background-color: #ffebda;
161 | color: #e36209;
162 | }
163 |
164 | .markdown-body .pl-mi2 {
165 | background-color: #005cc5;
166 | color: #f6f8fa;
167 | }
168 |
169 | .markdown-body .pl-mdr {
170 | color: #6f42c1;
171 | font-weight: 700;
172 | }
173 |
174 | .markdown-body .pl-ba {
175 | color: #586069;
176 | }
177 |
178 | .markdown-body .pl-sg {
179 | color: #959da5;
180 | }
181 |
182 | .markdown-body .pl-corl {
183 | color: #032f62;
184 | text-decoration: underline;
185 | }
186 |
187 | .markdown-body details {
188 | display: block;
189 | }
190 |
191 | .markdown-body summary {
192 | display: list-item;
193 | }
194 |
195 | .markdown-body a {
196 | background-color: transparent;
197 | }
198 |
199 | .markdown-body a:active,
200 | .markdown-body a:hover {
201 | outline-width: 0;
202 | }
203 |
204 | .markdown-body strong {
205 | font-weight: inherit;
206 | font-weight: bolder;
207 | }
208 |
209 | .markdown-body h1 {
210 | font-size: 2em;
211 | margin: .67em 0;
212 | }
213 |
214 | .markdown-body img {
215 | border-style: none;
216 | }
217 |
218 | .markdown-body code,
219 | .markdown-body kbd,
220 | .markdown-body pre {
221 | font-family: monospace,monospace;
222 | font-size: 1em;
223 | }
224 |
225 | .markdown-body hr {
226 | box-sizing: content-box;
227 | height: 0;
228 | overflow: visible;
229 | }
230 |
231 | .markdown-body input {
232 | font: inherit;
233 | margin: 0;
234 | }
235 |
236 | .markdown-body input {
237 | overflow: visible;
238 | }
239 |
240 | .markdown-body [type=checkbox] {
241 | box-sizing: border-box;
242 | padding: 0;
243 | }
244 |
245 | .markdown-body * {
246 | box-sizing: border-box;
247 | }
248 |
249 | .markdown-body input {
250 | font-family: inherit;
251 | font-size: inherit;
252 | line-height: inherit;
253 | }
254 |
255 | .markdown-body a {
256 | color: #0366d6;
257 | text-decoration: none;
258 | }
259 |
260 | .markdown-body a:hover {
261 | text-decoration: underline;
262 | }
263 |
264 | .markdown-body strong {
265 | font-weight: 600;
266 | }
267 |
268 | .markdown-body hr {
269 | background: transparent;
270 | border: 0;
271 | border-bottom: 1px solid #dfe2e5;
272 | height: 0;
273 | margin: 15px 0;
274 | overflow: hidden;
275 | }
276 |
277 | .markdown-body hr:before {
278 | content: "";
279 | display: table;
280 | }
281 |
282 | .markdown-body hr:after {
283 | clear: both;
284 | content: "";
285 | display: table;
286 | }
287 |
288 | .markdown-body table {
289 | border-collapse: collapse;
290 | border-spacing: 0;
291 | }
292 |
293 | .markdown-body td,
294 | .markdown-body th {
295 | padding: 0;
296 | }
297 |
298 | .markdown-body details summary {
299 | cursor: pointer;
300 | }
301 |
302 | .markdown-body h1,
303 | .markdown-body h2,
304 | .markdown-body h3,
305 | .markdown-body h4,
306 | .markdown-body h5,
307 | .markdown-body h6 {
308 | margin-bottom: 0;
309 | margin-top: 0;
310 | }
311 |
312 | .markdown-body h1 {
313 | font-size: 32px;
314 | }
315 |
316 | .markdown-body h1,
317 | .markdown-body h2 {
318 | font-weight: 600;
319 | }
320 |
321 | .markdown-body h2 {
322 | font-size: 24px;
323 | }
324 |
325 | .markdown-body h3 {
326 | font-size: 20px;
327 | }
328 |
329 | .markdown-body h3,
330 | .markdown-body h4 {
331 | font-weight: 600;
332 | }
333 |
334 | .markdown-body h4 {
335 | font-size: 16px;
336 | }
337 |
338 | .markdown-body h5 {
339 | font-size: 14px;
340 | }
341 |
342 | .markdown-body h5,
343 | .markdown-body h6 {
344 | font-weight: 600;
345 | }
346 |
347 | .markdown-body h6 {
348 | font-size: 12px;
349 | }
350 |
351 | .markdown-body p {
352 | margin-bottom: 10px;
353 | margin-top: 0;
354 | }
355 |
356 | .markdown-body blockquote {
357 | margin: 0;
358 | }
359 |
360 | .markdown-body ol,
361 | .markdown-body ul {
362 | margin-bottom: 0;
363 | margin-top: 0;
364 | padding-left: 0;
365 | }
366 |
367 | .markdown-body ol ol,
368 | .markdown-body ul ol {
369 | list-style-type: lower-roman;
370 | }
371 |
372 | .markdown-body ol ol ol,
373 | .markdown-body ol ul ol,
374 | .markdown-body ul ol ol,
375 | .markdown-body ul ul ol {
376 | list-style-type: lower-alpha;
377 | }
378 |
379 | .markdown-body dd {
380 | margin-left: 0;
381 | }
382 |
383 | .markdown-body code,
384 | .markdown-body pre {
385 | font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
386 | font-size: 12px;
387 | }
388 |
389 | .markdown-body pre {
390 | margin-bottom: 0;
391 | margin-top: 0;
392 | }
393 |
394 | .markdown-body input::-webkit-inner-spin-button,
395 | .markdown-body input::-webkit-outer-spin-button {
396 | -webkit-appearance: none;
397 | appearance: none;
398 | margin: 0;
399 | }
400 |
401 | .markdown-body .border {
402 | border: 1px solid #e1e4e8!important;
403 | }
404 |
405 | .markdown-body .border-0 {
406 | border: 0!important;
407 | }
408 |
409 | .markdown-body .border-bottom {
410 | border-bottom: 1px solid #e1e4e8!important;
411 | }
412 |
413 | .markdown-body .rounded-1 {
414 | border-radius: 3px!important;
415 | }
416 |
417 | .markdown-body .bg-white {
418 | background-color: #fff!important;
419 | }
420 |
421 | .markdown-body .bg-gray-light {
422 | background-color: #fafbfc!important;
423 | }
424 |
425 | .markdown-body .text-gray-light {
426 | color: #6a737d!important;
427 | }
428 |
429 | .markdown-body .mb-0 {
430 | margin-bottom: 0!important;
431 | }
432 |
433 | .markdown-body .my-2 {
434 | margin-bottom: 8px!important;
435 | margin-top: 8px!important;
436 | }
437 |
438 | .markdown-body .pl-0 {
439 | padding-left: 0!important;
440 | }
441 |
442 | .markdown-body .py-0 {
443 | padding-bottom: 0!important;
444 | padding-top: 0!important;
445 | }
446 |
447 | .markdown-body .pl-1 {
448 | padding-left: 4px!important;
449 | }
450 |
451 | .markdown-body .pl-2 {
452 | padding-left: 8px!important;
453 | }
454 |
455 | .markdown-body .py-2 {
456 | padding-bottom: 8px!important;
457 | padding-top: 8px!important;
458 | }
459 |
460 | .markdown-body .pl-3,
461 | .markdown-body .px-3 {
462 | padding-left: 16px!important;
463 | }
464 |
465 | .markdown-body .px-3 {
466 | padding-right: 16px!important;
467 | }
468 |
469 | .markdown-body .pl-4 {
470 | padding-left: 24px!important;
471 | }
472 |
473 | .markdown-body .pl-5 {
474 | padding-left: 32px!important;
475 | }
476 |
477 | .markdown-body .pl-6 {
478 | padding-left: 40px!important;
479 | }
480 |
481 | .markdown-body .f6 {
482 | font-size: 12px!important;
483 | }
484 |
485 | .markdown-body .lh-condensed {
486 | line-height: 1.25!important;
487 | }
488 |
489 | .markdown-body .text-bold {
490 | font-weight: 600!important;
491 | }
492 |
493 | .markdown-body:before {
494 | content: "";
495 | display: table;
496 | }
497 |
498 | .markdown-body:after {
499 | clear: both;
500 | content: "";
501 | display: table;
502 | }
503 |
504 | .markdown-body>:first-child {
505 | margin-top: 0!important;
506 | }
507 |
508 | .markdown-body>:last-child {
509 | margin-bottom: 0!important;
510 | }
511 |
512 | .markdown-body a:not([href]) {
513 | color: inherit;
514 | text-decoration: none;
515 | }
516 |
517 | .markdown-body blockquote,
518 | .markdown-body dl,
519 | .markdown-body ol,
520 | .markdown-body p,
521 | .markdown-body pre,
522 | .markdown-body table,
523 | .markdown-body ul {
524 | margin-bottom: 16px;
525 | margin-top: 0;
526 | }
527 |
528 | .markdown-body hr {
529 | background-color: #e1e4e8;
530 | border: 0;
531 | height: .25em;
532 | margin: 24px 0;
533 | padding: 0;
534 | }
535 |
536 | .markdown-body blockquote {
537 | border-left: .25em solid #dfe2e5;
538 | color: #6a737d;
539 | padding: 0 1em;
540 | }
541 |
542 | .markdown-body blockquote>:first-child {
543 | margin-top: 0;
544 | }
545 |
546 | .markdown-body blockquote>:last-child {
547 | margin-bottom: 0;
548 | }
549 |
550 | .markdown-body kbd {
551 | background-color: #fafbfc;
552 | border: 1px solid #c6cbd1;
553 | border-bottom-color: #959da5;
554 | border-radius: 3px;
555 | box-shadow: inset 0 -1px 0 #959da5;
556 | color: #444d56;
557 | display: inline-block;
558 | font-size: 11px;
559 | line-height: 10px;
560 | padding: 3px 5px;
561 | vertical-align: middle;
562 | }
563 |
564 | .markdown-body h1,
565 | .markdown-body h2,
566 | .markdown-body h3,
567 | .markdown-body h4,
568 | .markdown-body h5,
569 | .markdown-body h6 {
570 | font-weight: 600;
571 | line-height: 1.25;
572 | margin-bottom: 16px;
573 | margin-top: 24px;
574 | }
575 |
576 | .markdown-body h1 {
577 | font-size: 2em;
578 | }
579 |
580 | .markdown-body h1,
581 | .markdown-body h2 {
582 | border-bottom: 1px solid #eaecef;
583 | padding-bottom: .3em;
584 | }
585 |
586 | .markdown-body h2 {
587 | font-size: 1.5em;
588 | }
589 |
590 | .markdown-body h3 {
591 | font-size: 1.25em;
592 | }
593 |
594 | .markdown-body h4 {
595 | font-size: 1em;
596 | }
597 |
598 | .markdown-body h5 {
599 | font-size: .875em;
600 | }
601 |
602 | .markdown-body h6 {
603 | color: #6a737d;
604 | font-size: .85em;
605 | }
606 |
607 | .markdown-body ol,
608 | .markdown-body ul {
609 | padding-left: 2em;
610 | }
611 |
612 | .markdown-body ol ol,
613 | .markdown-body ol ul,
614 | .markdown-body ul ol,
615 | .markdown-body ul ul {
616 | margin-bottom: 0;
617 | margin-top: 0;
618 | }
619 |
620 | .markdown-body li {
621 | word-wrap: break-all;
622 | }
623 |
624 | .markdown-body li>p {
625 | margin-top: 16px;
626 | }
627 |
628 | .markdown-body li+li {
629 | margin-top: .25em;
630 | }
631 |
632 | .markdown-body dl {
633 | padding: 0;
634 | }
635 |
636 | .markdown-body dl dt {
637 | font-size: 1em;
638 | font-style: italic;
639 | font-weight: 600;
640 | margin-top: 16px;
641 | padding: 0;
642 | }
643 |
644 | .markdown-body dl dd {
645 | margin-bottom: 16px;
646 | padding: 0 16px;
647 | }
648 |
649 | .markdown-body table {
650 | display: block;
651 | overflow: auto;
652 | width: 100%;
653 | }
654 |
655 | .markdown-body table th {
656 | font-weight: 600;
657 | }
658 |
659 | .markdown-body table td,
660 | .markdown-body table th {
661 | border: 1px solid #dfe2e5;
662 | padding: 6px 13px;
663 | }
664 |
665 | .markdown-body table tr {
666 | background-color: #fff;
667 | border-top: 1px solid #c6cbd1;
668 | }
669 |
670 | .markdown-body table tr:nth-child(2n) {
671 | background-color: #f6f8fa;
672 | }
673 |
674 | .markdown-body img {
675 | background-color: #fff;
676 | box-sizing: content-box;
677 | max-width: 100%;
678 | }
679 |
680 | .markdown-body img[align=right] {
681 | padding-left: 20px;
682 | }
683 |
684 | .markdown-body img[align=left] {
685 | padding-right: 20px;
686 | }
687 |
688 | .markdown-body code {
689 | background-color: rgba(27,31,35,.05);
690 | border-radius: 3px;
691 | font-size: 85%;
692 | margin: 0;
693 | padding: .2em .4em;
694 | }
695 |
696 | .markdown-body pre {
697 | word-wrap: normal;
698 | }
699 |
700 | .markdown-body pre>code {
701 | background: transparent;
702 | border: 0;
703 | font-size: 100%;
704 | margin: 0;
705 | padding: 0;
706 | white-space: pre;
707 | word-break: normal;
708 | }
709 |
710 | .markdown-body .highlight {
711 | margin-bottom: 16px;
712 | }
713 |
714 | .markdown-body .highlight pre {
715 | margin-bottom: 0;
716 | word-break: normal;
717 | }
718 |
719 | .markdown-body .highlight pre,
720 | .markdown-body pre {
721 | background-color: #f6f8fa;
722 | border-radius: 3px;
723 | font-size: 85%;
724 | line-height: 1.45;
725 | overflow: auto;
726 | padding: 16px;
727 | }
728 |
729 | .markdown-body pre code {
730 | background-color: transparent;
731 | border: 0;
732 | display: inline;
733 | line-height: inherit;
734 | margin: 0;
735 | max-width: auto;
736 | overflow: visible;
737 | padding: 0;
738 | word-wrap: normal;
739 | }
740 |
741 | .markdown-body .commit-tease-sha {
742 | color: #444d56;
743 | display: inline-block;
744 | font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
745 | font-size: 90%;
746 | }
747 |
748 | .markdown-body .blob-wrapper {
749 | border-bottom-left-radius: 3px;
750 | border-bottom-right-radius: 3px;
751 | overflow-x: auto;
752 | overflow-y: hidden;
753 | }
754 |
755 | .markdown-body .blob-wrapper-embedded {
756 | max-height: 240px;
757 | overflow-y: auto;
758 | }
759 |
760 | .markdown-body .blob-num {
761 | -moz-user-select: none;
762 | -ms-user-select: none;
763 | -webkit-user-select: none;
764 | color: rgba(27,31,35,.3);
765 | cursor: pointer;
766 | font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
767 | font-size: 12px;
768 | line-height: 20px;
769 | min-width: 50px;
770 | padding-left: 10px;
771 | padding-right: 10px;
772 | text-align: right;
773 | user-select: none;
774 | vertical-align: top;
775 | white-space: nowrap;
776 | width: 1%;
777 | }
778 |
779 | .markdown-body .blob-num:hover {
780 | color: rgba(27,31,35,.6);
781 | }
782 |
783 | .markdown-body .blob-num:before {
784 | content: attr(data-line-number);
785 | }
786 |
787 | .markdown-body .blob-code {
788 | line-height: 20px;
789 | padding-left: 10px;
790 | padding-right: 10px;
791 | position: relative;
792 | vertical-align: top;
793 | }
794 |
795 | .markdown-body .blob-code-inner {
796 | color: #24292e;
797 | font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
798 | font-size: 12px;
799 | overflow: visible;
800 | white-space: pre;
801 | word-wrap: normal;
802 | }
803 |
804 | .markdown-body .pl-token.active,
805 | .markdown-body .pl-token:hover {
806 | background: #ffea7f;
807 | cursor: pointer;
808 | }
809 |
810 | .markdown-body kbd {
811 | background-color: #fafbfc;
812 | border: 1px solid #d1d5da;
813 | border-bottom-color: #c6cbd1;
814 | border-radius: 3px;
815 | box-shadow: inset 0 -1px 0 #c6cbd1;
816 | color: #444d56;
817 | display: inline-block;
818 | font: 11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
819 | line-height: 10px;
820 | padding: 3px 5px;
821 | vertical-align: middle;
822 | }
823 |
824 | .markdown-body :checked+.radio-label {
825 | border-color: #0366d6;
826 | position: relative;
827 | z-index: 1;
828 | }
829 |
830 | .markdown-body .tab-size[data-tab-size="1"] {
831 | -moz-tab-size: 1;
832 | tab-size: 1;
833 | }
834 |
835 | .markdown-body .tab-size[data-tab-size="2"] {
836 | -moz-tab-size: 2;
837 | tab-size: 2;
838 | }
839 |
840 | .markdown-body .tab-size[data-tab-size="3"] {
841 | -moz-tab-size: 3;
842 | tab-size: 3;
843 | }
844 |
845 | .markdown-body .tab-size[data-tab-size="4"] {
846 | -moz-tab-size: 4;
847 | tab-size: 4;
848 | }
849 |
850 | .markdown-body .tab-size[data-tab-size="5"] {
851 | -moz-tab-size: 5;
852 | tab-size: 5;
853 | }
854 |
855 | .markdown-body .tab-size[data-tab-size="6"] {
856 | -moz-tab-size: 6;
857 | tab-size: 6;
858 | }
859 |
860 | .markdown-body .tab-size[data-tab-size="7"] {
861 | -moz-tab-size: 7;
862 | tab-size: 7;
863 | }
864 |
865 | .markdown-body .tab-size[data-tab-size="8"] {
866 | -moz-tab-size: 8;
867 | tab-size: 8;
868 | }
869 |
870 | .markdown-body .tab-size[data-tab-size="9"] {
871 | -moz-tab-size: 9;
872 | tab-size: 9;
873 | }
874 |
875 | .markdown-body .tab-size[data-tab-size="10"] {
876 | -moz-tab-size: 10;
877 | tab-size: 10;
878 | }
879 |
880 | .markdown-body .tab-size[data-tab-size="11"] {
881 | -moz-tab-size: 11;
882 | tab-size: 11;
883 | }
884 |
885 | .markdown-body .tab-size[data-tab-size="12"] {
886 | -moz-tab-size: 12;
887 | tab-size: 12;
888 | }
889 |
890 | .markdown-body .task-list-item {
891 | list-style-type: none;
892 | }
893 |
894 | .markdown-body .task-list-item+.task-list-item {
895 | margin-top: 3px;
896 | }
897 |
898 | .markdown-body .task-list-item input {
899 | margin: 0 .2em .25em -1.6em;
900 | vertical-align: middle;
901 | }
902 |
903 | .markdown-body hr {
904 | border-bottom-color: #eee;
905 | }
906 |
907 | .markdown-body .pl-0 {
908 | padding-left: 0!important;
909 | }
910 |
911 | .markdown-body .pl-1 {
912 | padding-left: 4px!important;
913 | }
914 |
915 | .markdown-body .pl-2 {
916 | padding-left: 8px!important;
917 | }
918 |
919 | .markdown-body .pl-3 {
920 | padding-left: 16px!important;
921 | }
922 |
923 | .markdown-body .pl-4 {
924 | padding-left: 24px!important;
925 | }
926 |
927 | .markdown-body .pl-5 {
928 | padding-left: 32px!important;
929 | }
930 |
931 | .markdown-body .pl-6 {
932 | padding-left: 40px!important;
933 | }
934 |
935 | .markdown-body .pl-7 {
936 | padding-left: 48px!important;
937 | }
938 |
939 | .markdown-body .pl-8 {
940 | padding-left: 64px!important;
941 | }
942 |
943 | .markdown-body .pl-9 {
944 | padding-left: 80px!important;
945 | }
946 |
947 | .markdown-body .pl-10 {
948 | padding-left: 96px!important;
949 | }
950 |
951 | .markdown-body .pl-11 {
952 | padding-left: 112px!important;
953 | }
954 |
955 | .markdown-body .pl-12 {
956 | padding-left: 128px!important;
957 | }
--------------------------------------------------------------------------------
/src/core/theme.js:
--------------------------------------------------------------------------------
1 | module.exports = `
2 | a{color:var(--primary-color);}a:hover{color:var(--primary-hover-color);}a:active{color:var(--primary-active-color);}::-moz-selection{background:var(--primary-color);}::selection{background:var(--primary-color);}html{--antd-wave-shadow-color:var(--primary-color);}[ant-click-animating-without-extra-node="true"]::after,.ant-click-animating-node{-webkit-box-shadow:0 0 0 0 var(--primary-color);box-shadow:0 0 0 0 var(--primary-color);-webkit-box-shadow:0 0 0 0 var(--antd-wave-shadow-color);box-shadow:0 0 0 0 var(--antd-wave-shadow-color);}@-webkit-keyframes waveEffect{100%{-webkit-box-shadow:0 0 0 var(--primary-color);box-shadow:0 0 0 var(--primary-color);-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color);}}@keyframes waveEffect{100%{-webkit-box-shadow:0 0 0 var(--primary-color);box-shadow:0 0 0 var(--primary-color);-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color);}}.ant-alert-info .ant-alert-icon{color:var(--primary-color);}.ant-anchor-ink-ball{border:2px solid var(--primary-color);}.ant-anchor-link-active > .ant-anchor-link-title{color:var(--primary-color);}.ant-select-auto-complete.ant-select .ant-input:focus,.ant-select-auto-complete.ant-select .ant-input:hover{border-color:var(--primary-hover-color);}.ant-select-selection:hover,.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:var(--primary-hover-color);}.ant-select-focused .ant-select-selection,.ant-select-selection:focus,.ant-select-selection:active,.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-select-open .ant-select-selection{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon,.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon{color:var(--primary-color);}.ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled){background-color:var(--primary-shadow-color);}.ant-select-dropdown-menu-item-active:not(.ant-select-dropdown-menu-item-disabled),.ant-select-item-option-selected:not(.ant-select-item-option-disabled){background-color:var(--primary-shadow-color);}.ant-input:hover{border-color:var(--primary-hover-color);}.ant-input:focus{border-color:var(--primary-hover-color);}.ant-input:focus,.ant-input-focused{box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-input-group-addon .ant-select-open .ant-select-selection,.ant-input-group-addon .ant-select-focused .ant-select-selection{color:var(--primary-color);}.ant-input-affix-wrapper:hover,.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:var(--primary-hover-color);}.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:var(--primary-hover-color);}.ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-focused{border-color:var(--primary-hover-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-input-search .ant-input:hover,.ant-input-search .ant-input:focus{border-color:var(--primary-hover-color);}.ant-input-search .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-color:var(--primary-hover-color);}.ant-btn:hover,.ant-btn:focus{color:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-btn:active,.ant-btn.active{border-color:var(--primary-active-color);}.ant-btn-primary{background-color:var(--primary-color);border-color:var(--primary-color);}.ant-btn-primary:hover,.ant-btn-primary:focus{color:#fff;background-color:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-btn-primary:active,.ant-btn-primary.active{background-color:var(--primary-active-color);border-color:var(--primary-active-color);}.ant-btn-danger:hover,.ant-btn-danger:focus{color:#fff;background-color:#ff7875;border-color:#ff7875;}.ant-btn-dangerous:hover,.ant-btn-dangerous:focus{color:#ff7875;border-color:#ff7875;}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:var(--primary-hover-color);border-left-color:var(--primary-hover-color);}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:var(--primary-hover-color);}.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group .ant-btn-primary + .ant-btn-primary{border-left-color:var(--primary-hover-color);}.ant-btn-ghost:hover,.ant-btn-ghost:focus{color:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-btn-ghost:active,.ant-btn-ghost.active{color:var(--primary-active-color);border-color:var(--primary-active-color);}.ant-btn-dashed:hover,.ant-btn-dashed:focus{color:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-btn-dashed:active,.ant-btn-dashed.active{color:var(--primary-active-color);border-color:var(--primary-active-color);}.ant-btn-link{color:var(--primary-color);}.ant-btn-link:hover,.ant-btn-link:focus{color:var(--primary-hover-color);border-color:transparent;}.ant-btn-link:active,.ant-btn-link.active{color:var(--primary-active-color);border-color:transparent;}.ant-btn-background-ghost.ant-btn-primary{color:var(--primary-color);border-color:var(--primary-color);}.ant-btn-background-ghost.ant-btn-primary:hover,.ant-btn-background-ghost.ant-btn-primary:focus{color:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-btn-background-ghost.ant-btn-primary:active,.ant-btn-background-ghost.ant-btn-primary.active{color:var(--primary-active-color);border-color:var(--primary-active-color);}.ant-btn-background-ghost.ant-btn-link{color:var(--primary-color);}.ant-btn-background-ghost.ant-btn-link:hover,.ant-btn-background-ghost.ant-btn-link:focus{color:var(--primary-hover-color);}.ant-btn-background-ghost.ant-btn-link:active,.ant-btn-background-ghost.ant-btn-link.active{color:var(--primary-active-color);}.ant-badge-status-processing{background-color:var(--primary-color);}.ant-badge-status-processing::after{border:1px solid var(--primary-color);}.ant-badge-status-blue{background:var(--primary-color);}.ant-breadcrumb a:hover{color:var(--primary-hover-color);}.ant-menu-item > a:hover{color:var(--primary-color);}.ant-menu-item:hover,.ant-menu-item-active,.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,.ant-menu-submenu-active,.ant-menu-submenu-title:hover{color:var(--primary-color);}.ant-menu-item-selected{color:var(--primary-color);}.ant-menu-item-selected > a,.ant-menu-item-selected > a:hover{color:var(--primary-color);}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:var(--primary-shadow-color);}.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before,.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before{background:-webkit-gradient(linear, left top, right top, from(var(--primary-color)), to(var(--primary-color)));background:-webkit-linear-gradient(left, var(--primary-color), var(--primary-color));background:linear-gradient(to right, var(--primary-color), var(--primary-color));}.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected{color:var(--primary-color);}.ant-menu-vertical .ant-menu-submenu-selected > a,.ant-menu-vertical-left .ant-menu-submenu-selected > a,.ant-menu-vertical-right .ant-menu-submenu-selected > a{color:var(--primary-color);}.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu:hover,.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-submenu-selected{color:var(--primary-color);border-bottom:2px solid var(--primary-color);}.ant-menu-horizontal > .ant-menu-item > a:hover{color:var(--primary-color);}.ant-menu-horizontal > .ant-menu-item-selected > a{color:var(--primary-color);}.ant-menu-vertical .ant-menu-item::after,.ant-menu-vertical-left .ant-menu-item::after,.ant-menu-vertical-right .ant-menu-item::after,.ant-menu-inline .ant-menu-item::after{border-right:3px solid var(--primary-color);}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:var(--primary-color);}.ant-menu.ant-menu-dark .ant-menu-item-selected,.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected{background-color:var(--primary-color);}.ant-menu-dark.ant-menu-horizontal > .ant-menu-item:hover{background-color:var(--primary-color);color:#fff;}.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected{color:var(--primary-color);border-bottom:2px solid var(--primary-color);}.ant-menu-submenu-selected{color:var(--primary-color);}.ant-menu-item a:hover{color:var(--primary-color);}.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-expand-icon{color:var(--primary-color);}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu-title-selected,.ant-dropdown-menu-item-selected > a,.ant-dropdown-menu-submenu-title-selected > a{color:var(--primary-color);background-color:var(--primary-shadow-color);}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:var(--primary-shadow-color);}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a{background:var(--primary-color);}.ant-fullcalendar-value:hover{background:var(--primary-shadow-color);}.ant-fullcalendar-value:active{background:var(--primary-color);}.ant-fullcalendar-today .ant-fullcalendar-value,.ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value{-webkit-box-shadow:0 0 0 1px var(--primary-color) inset;box-shadow:0 0 0 1px var(--primary-color) inset;}.ant-fullcalendar-fullscreen .ant-fullcalendar-month:hover,.ant-fullcalendar-fullscreen .ant-fullcalendar-date:hover{background:var(--primary-shadow-color);}.ant-fullcalendar-fullscreen .ant-fullcalendar-month:active,.ant-fullcalendar-fullscreen .ant-fullcalendar-date:active{background:var(--primary-shadow-color);}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-month,.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-date{border-top-color:var(--primary-color);}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value,.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-value{color:var(--primary-color);}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-month,.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-date{background:var(--primary-shadow-color);}.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner,.ant-radio-input:focus + .ant-radio-inner{border-color:var(--primary-color);}.ant-radio-checked::after{border:1px solid var(--primary-color);}.ant-radio-inner::after{background-color:var(--primary-color);}.ant-radio-checked .ant-radio-inner{border-color:var(--primary-color);}.ant-radio-button-wrapper:hover{color:var(--primary-color);}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled),.ant-radio-button-wrapper-checked{color:var(--primary-color);border-color:var(--primary-color);-webkit-box-shadow:-1px 0 0 0 var(--primary-color);box-shadow:-1px 0 0 0 var(--primary-color);}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:var(--primary-hover-color);border-color:var(--primary-hover-color);-webkit-box-shadow:-1px 0 0 0 var(--primary-hover-color);box-shadow:-1px 0 0 0 var(--primary-hover-color);}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:var(--primary-color);}.ant-radio-button-wrapper-checked::before{background-color:var(--primary-color) !important;opacity:0.1;}.ant-radio-button-wrapper-checked:first-child{border-color:var(--primary-color);-webkit-box-shadow:none !important;box-shadow:none !important;}.ant-radio-button-wrapper-checked:hover{color:var(--primary-hover-color);border-color:var(--primary-hover-color);-webkit-box-shadow:-1px 0 0 0 var(--primary-hover-color);box-shadow:-1px 0 0 0 var(--primary-hover-color);}.ant-radio-button-wrapper-checked:active{color:var(--primary-active-color);border-color:var(--primary-active-color);-webkit-box-shadow:-1px 0 0 0 var(--primary-active-color);box-shadow:-1px 0 0 0 var(--primary-active-color);}.ant-radio-button-wrapper-checked:focus-within{outline:3px solid rgba(24, 144, 255, 0.06);}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:var(--primary-color);border-color:var(--primary-color);}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:var(--primary-active-color);border-color:var(--primary-active-color);}.ant-radio-button-wrapper-checked:not([class*=" ant-radio-button-wrapper-disabled"]).ant-radio-button-wrapper:first-child{border-right-color:var(--primary-color);}.ant-card-actions > li > span:hover{color:var(--primary-color);-webkit-transition:color 0.3s;transition:color 0.3s;}.ant-card-actions > li > span a:hover{color:var(--primary-color);}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{color:var(--primary-color);}.ant-tabs-extra-content .ant-tabs-new-tab:hover{color:var(--primary-color);border-color:var(--primary-color);}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab-active{color:var(--primary-color);}.ant-tabs-ink-bar{background-color:var(--primary-color);}.ant-tabs-nav .ant-tabs-tab:hover{color:var(--primary-hover-color);}.ant-tabs-nav .ant-tabs-tab:active{color:var(--primary-active-color);}.ant-tabs-nav .ant-tabs-tab-active{color:var(--primary-color);}.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:var(--primary-color);}.ant-cascader-picker:focus .ant-cascader-input{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-cascader-picker-label:hover + .ant-cascader-input{border-color:var(--primary-hover-color);}.ant-cascader-menu-item:hover{background:var(--primary-shadow-color);}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus + .ant-checkbox-inner{border-color:var(--primary-color);}.ant-checkbox-checked::after{border:1px solid var(--primary-color);}.ant-checkbox-checked .ant-checkbox-inner{background-color:var(--primary-color);border-color:var(--primary-color);}.ant-checkbox-indeterminate .ant-checkbox-inner::after{background-color:var(--primary-color);}.ant-calendar-selected-day .ant-calendar-date{background:var(--primary-shadow-color);}.ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled){border-color:var(--primary-color);}.ant-calendar-picker:focus .ant-calendar-picker-input:not(.ant-input-disabled){border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-calendar-header a:hover{color:var(--primary-hover-color);}.ant-calendar-date:hover{background:var(--primary-shadow-color);}.ant-calendar-date:active{background:var(--primary-hover-color);}.ant-calendar-today .ant-calendar-date{color:var(--primary-color);border-color:var(--primary-color);}.ant-calendar-range .ant-calendar-selected-start-date .ant-calendar-date,.ant-calendar-range .ant-calendar-selected-end-date .ant-calendar-date{background:var(--primary-color);}.ant-calendar-range .ant-calendar-selected-start-date .ant-calendar-date:hover,.ant-calendar-range .ant-calendar-selected-end-date .ant-calendar-date:hover{background:var(--primary-hover-color);}.ant-calendar-selected-date .ant-calendar-date,.ant-calendar-selected-start-date .ant-calendar-date,.ant-calendar-selected-end-date .ant-calendar-date{background:var(--primary-color);color:#fff;}.ant-calendar-selected-date .ant-calendar-date:hover,.ant-calendar-selected-start-date .ant-calendar-date:hover,.ant-calendar-selected-end-date .ant-calendar-date:hover{background:var(--primary-color);color:#fff;}.ant-calendar .ant-calendar-ok-btn{background-color:var(--primary-color);border-color:var(--primary-color);}.ant-calendar .ant-calendar-ok-btn:hover,.ant-calendar .ant-calendar-ok-btn:focus{background-color:var(--primary-hover-color);border-color:var(--primary-hover-color);}.ant-calendar .ant-calendar-ok-btn:active,.ant-calendar .ant-calendar-ok-btn.active{background-color:var(--primary-active-color);border-color:var(--primary-active-color);}.ant-calendar-range .ant-calendar-input:hover,.ant-calendar-range .ant-calendar-time-picker-input:hover{border-color:var(--primary-hover-color);}.ant-calendar-range .ant-calendar-input:focus,.ant-calendar-range .ant-calendar-time-picker-input:focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-calendar-month-panel-header a:hover{color:var(--primary-hover-color);}.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month{background:var(--primary-color);}.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month:hover{background:var(--primary-color);}.ant-calendar-year-panel-header a:hover{color:var(--primary-hover-color);}.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year{background:var(--primary-color);}.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year:hover{background:var(--primary-color);}.ant-calendar-decade-panel-header a:hover{color:var(--primary-hover-color);}.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade{background:var(--primary-color);}.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade:hover{background:var(--primary-color);}.ant-calendar-range .ant-calendar-in-range-cell::before{background:var(--primary-shadow-color);}.ant-calendar-time-picker-select li:hover{background:var(--primary-shadow-color);}.ant-calendar-month-panel-month:hover{background:var(--primary-shadow-color);}.ant-calendar-year-panel-year:hover{background:var(--primary-shadow-color);}.ant-calendar-decade-panel-decade:hover{background:var(--primary-shadow-color);}.ant-calendar-week-number .ant-calendar-body tr:hover{background:var(--primary-shadow-color);}.ant-calendar-week-number .ant-calendar-body tr.ant-calendar-active-week{background:var(--primary-shadow-color);}.ant-time-picker-input:hover{border-color:var(--primary-hover-color);}.ant-time-picker-input:focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-time-picker-panel-select li:hover{background:var(--primary-shadow-color);}.ant-picker-focused,.ant-picker:hover{border-color:var(--primary-color);}.ant-picker-focused{box-shadow:var(--primary-shadow-color) 0px 0px 0px 2px;}.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:var(--primary-color);}.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{color:rgb(255, 255, 255);background:var(--primary-color);}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before,.ant-picker-cell-in-view.ant-picker-cell-in-range::before{background:var(--primary-shadow-color);}.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after{border-top:1px dashed var(--primary-color);border-bottom:1px dashed var(--primary-color);}tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after{border-left:1px dashed var(--primary-color);}.ant-picker-year-panel .ant-picker-cell-range-hover-end::after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-month-panel .ant-picker-cell-range-hover-end::after,tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after{border-right:1px dashed var(--primary-color);}.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before{background:var(--primary-shadow-color);}.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:var(--primary-shadow-color);}.ant-picker-range .ant-picker-active-bar{background:var(--primary-color);}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:var(--primary-color);}.ant-tag-checkable-checked{background-color:var(--primary-color);}.ant-tag-checkable:active{background-color:var(--primary-active-color);}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:var(--primary-shadow-color);}.has-error .ant-transfer-list-search:not([disabled]):hover{border-color:var(--primary-hover-color);border-right-width:1px !important;}.has-error .ant-transfer-list-search:not([disabled]):focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.is-validating.has-feedback .ant-form-item-children-icon{color:var(--primary-color);}.ant-input-number:hover{border-color:var(--primary-hover-color);}.ant-input-number:focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-input-number-handler:hover .ant-input-number-handler-up-inner,.ant-input-number-handler:hover .ant-input-number-handler-down-inner{color:var(--primary-hover-color);}.ant-input-number:hover{border-color:var(--primary-hover-color);border-right-width:1px !important;}.ant-input-number-focused{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-list-item-meta-title > a:hover{color:var(--primary-color);}.ant-spin{color:var(--primary-color);}.ant-spin-dot-item{background-color:var(--primary-color);}.ant-pagination-item:focus,.ant-pagination-item:hover{border-color:var(--primary-color);}.ant-pagination-item:focus a,.ant-pagination-item:hover a{color:var(--primary-color);}.ant-pagination-item-active{border-color:var(--primary-color);}.ant-pagination-item-active a{color:var(--primary-color);}.ant-pagination-item-active:focus,.ant-pagination-item-active:hover{border-color:var(--primary-hover-color);}.ant-pagination-item-active:focus a,.ant-pagination-item-active:hover a{color:var(--primary-hover-color);}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon{color:var(--primary-color);}.ant-pagination-prev:hover a,.ant-pagination-next:hover a{border-color:var(--primary-hover-color);}.ant-pagination-prev:focus .ant-pagination-item-link,.ant-pagination-next:focus .ant-pagination-item-link,.ant-pagination-prev:hover .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link{color:var(--primary-color);border-color:var(--primary-color);}.ant-pagination-options-quick-jumper input:hover{border-color:var(--primary-hover-color);}.ant-pagination-options-quick-jumper input:focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:var(--primary-color);}.ant-mention-wrapper .ant-mention-editor:hover{border-color:var(--primary-hover-color);}.ant-mention-wrapper .ant-mention-editor:focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-mention-wrapper.ant-mention-active:not(.disabled) .ant-mention-editor{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-mention-dropdown-notfound.ant-mention-dropdown-item .anticon-loading{color:var(--primary-color);}.ant-mentions:hover{border-color:var(--primary-hover-color);}.ant-mentions:focus{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-mentions-focused{border-color:var(--primary-hover-color);-webkit-box-shadow:0 0 0 2px var(--primary-shadow-color);box-shadow:0 0 0 2px var(--primary-shadow-color);}.ant-mention-dropdown-item:hover{background-color:var(--primary-shadow-color);}.ant-mention-dropdown-item.focus,.ant-mention-dropdown-item-active{background-color:var(--primary-shadow-color);}.ant-mentions-dropdown-menu-item:hover{background-color:var(--primary-shadow-color);}.ant-mentions-dropdown-menu-item-active{background-color:var(--primary-shadow-color);}.ant-message-info .anticon,.ant-message-loading .anticon{color:var(--primary-color);}.ant-modal-confirm-info .ant-modal-confirm-body > .anticon{color:var(--primary-color);}.anticon.ant-notification-notice-icon-info{color:var(--primary-color);}.ant-page-header-back-button{color:var(--primary-color);}.ant-page-header-back-button:focus,.ant-page-header-back-button:hover{color:var(--primary-hover-color);}.ant-page-header-back-button:active{color:var(--primary-active-color);}.ant-progress-circle-path{stroke:var(--primary-color);}.ant-progress-success-bg,.ant-progress-bg{background-color:var(--primary-color);}.ant-slider{width:100%;}.ant-slider-track{background-color:var(--primary-hover-color);}.ant-slider-handle{border:solid 2px var(--primary-hover-color);}.ant-slider-handle:focus{border-color:var(--primary-hover-color);box-shadow:0 0 0 5px var(--primary-shadow-color);outline:none;}.ant-slider-handle.ant-tooltip-open{border-color:var(--primary-color);}.ant-slider:hover .ant-slider-track{background-color:var(--primary-hover-color);}.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open){border-color:var(--primary-hover-color);}.ant-slider-dot-active{border-color:var(--primary-active-color);}.ant-steps-item-icon > .ant-steps-icon{color:var(--primary-color);}.ant-steps-item-process .ant-steps-item-icon{background-color:#fff;border-color:var(--primary-color);}.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot{background:var(--primary-color);}.ant-steps-item-process .ant-steps-item-icon{background:var(--primary-color);}.ant-steps-item-finish .ant-steps-item-icon{border-color:var(--primary-color);}.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon{color:var(--primary-color);}.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot{background:var(--primary-color);}.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title::after{background-color:var(--primary-color);}.ant-steps-item-finish > .ant-steps-item-tail::after{background-color:var(--primary-color);}.ant-steps-item[role="button"]:not(.ant-steps-item-process):hover .ant-steps-item-title,.ant-steps-item[role="button"]:not(.ant-steps-item-process):hover .ant-steps-item-description{color:var(--primary-color);}.ant-steps-item[role="button"]:not(.ant-steps-item-process):hover .ant-steps-item-icon{border-color:var(--primary-color);}.ant-steps-item[role="button"]:not(.ant-steps-item-process):hover .ant-steps-item-icon .ant-steps-icon{color:var(--primary-color);}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon{color:var(--primary-color);}.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon{background:var(--primary-color);}.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after{background-color:var(--primary-color);}.ant-switch-checked.ant-switch-loading .ant-switch-loading-icon{color:var(--primary-color);}.ant-switch-checked{background-color:var(--primary-color);}.ant-table-thead > tr > th .ant-table-filter-selected.anticon-filter{color:var(--primary-color);}.ant-table-thead > tr > th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up.on,.ant-table-thead > tr > th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down.on{color:var(--primary-color);}.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title::after{color:var(--primary-color);}.ant-table-filter-dropdown-link{color:var(--primary-color);}.ant-table-filter-dropdown-link:hover{color:var(--primary-hover-color);}.ant-table-filter-dropdown-link:active{color:var(--primary-active-color);}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:var(--primary-hover-color);}.ant-table-tbody>tr.ant-table-row-selected>td{background:var(--primary-shadow-color);}.ant-table-tbody>tr.ant-table-row-selected:hover>td{background:var(--primary-shadow-color);}.ant-timeline-item-head-blue{color:var(--primary-color);border-color:var(--primary-color);}.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner{border-color:var(--primary-color);}.ant-select-tree-checkbox-checked::after{border:1px solid var(--primary-color);}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:var(--primary-color);border-color:var(--primary-color);}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after{background-color:var(--primary-color);}.ant-select-tree li span.ant-select-icon_loading .ant-select-switcher-loading-icon{color:var(--primary-color);}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-loading-icon,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-loading-icon{color:var(--primary-color);}.ant-select-tree li .ant-select-tree-node-content-wrapper:hover{background-color:var(--primary-shadow-color);}.ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:var(--primary-shadow-color);}.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner,.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner{border-color:var(--primary-color);}.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after,.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after{border-color:var(--primary-color);}.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper::before,.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper::before{background:var(--primary-color);}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner,.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner{border-color:var(--primary-color);}.ant-tree-checkbox-checked::after{border:1px solid var(--primary-color);}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:var(--primary-color);border-color:var(--primary-color);}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after{background-color:var(--primary-color);}.ant-tree li.drag-over > span[draggable]{background-color:var(--primary-color);}.ant-tree li.drag-over-gap-top > span[draggable]{border-top-color:var(--primary-color);}.ant-tree li.drag-over-gap-bottom > span[draggable]{border-bottom-color:var(--primary-color);}.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon,.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon{color:var(--primary-color);}.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover::before,.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover::before{background:var(--primary-shadow-color);}.ant-tree li .ant-tree-node-content-wrapper:hover{background-color:var(--primary-shadow-color);}.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:var(--primary-shadow-color);}.ant-tree-checkbox-checked.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:#f5f5f5;}.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:var(--primary-shadow-color);}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:var(--primary-shadow-color);}.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before,.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before{background:var(--primary-color);}.ant-typography a{color:var(--primary-color);}.ant-typography a:focus,.ant-typography a:hover{color:var(--primary-hover-color);}.ant-typography a:active{color:var(--primary-active-color);}.ant-typography-expand,.ant-typography-edit,.ant-typography-copy{color:var(--primary-color);}.ant-typography-expand:focus,.ant-typography-edit:focus,.ant-typography-copy:focus,.ant-typography-expand:hover,.ant-typography-edit:hover,.ant-typography-copy:hover{color:var(--primary-hover-color);}.ant-typography-expand:active,.ant-typography-edit:active,.ant-typography-copy:active{color:var(--primary-active-color);}.ant-upload.ant-upload-select-picture-card:hover{border-color:var(--primary-color);}.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled){border-color:var(--primary-active-color);}.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover{border-color:var(--primary-hover-color);}.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon{color:var(--primary-hover-color);}
3 | `;
--------------------------------------------------------------------------------