Pārlūkot izejas kodu

scaffolding chalk (#6643)

* scaffolding chalk

* update button
杨奕 8 gadi atpakaļ
vecāks
revīzija
79016032ea
100 mainītis faili ar 6874 papildinājumiem un 193 dzēšanām
  1. 6 4
      build/bin/gen-cssfile.js
  2. 4 0
      build/cooking.common.js
  3. 4 0
      build/cooking.component.js
  4. 4 0
      build/cooking.conf.js
  5. 5 0
      build/cooking.demo.js
  6. 69 87
      examples/docs/en-US/button.md
  7. 69 88
      examples/docs/zh-CN/button.md
  8. 1 1
      examples/docs/zh-CN/dialog.md
  9. 1 1
      examples/entry.js
  10. 6 2
      package.json
  11. 1 1
      packages/breadcrumb/src/breadcrumb-item.vue
  12. 0 6
      packages/button/src/button-group.vue
  13. 4 2
      packages/button/src/button.vue
  14. 1 1
      packages/collapse/src/collapse-item.vue
  15. 3 0
      packages/theme-chalk/.gitignore
  16. 33 0
      packages/theme-chalk/README.md
  17. 25 0
      packages/theme-chalk/gulpfile.js
  18. 34 0
      packages/theme-chalk/package.json
  19. 85 0
      packages/theme-chalk/src/alert.scss
  20. 0 0
      packages/theme-chalk/src/aside.scss
  21. 80 0
      packages/theme-chalk/src/autocomplete.scss
  22. 41 0
      packages/theme-chalk/src/badge.scss
  23. 2 0
      packages/theme-chalk/src/base.scss
  24. 0 0
      packages/theme-chalk/src/breadcrumb-item.scss
  25. 43 0
      packages/theme-chalk/src/breadcrumb.scss
  26. 0 0
      packages/theme-chalk/src/button-group.scss
  27. 216 0
      packages/theme-chalk/src/button.scss
  28. 21 0
      packages/theme-chalk/src/card.scss
  29. 50 0
      packages/theme-chalk/src/carousel-item.scss
  30. 134 0
      packages/theme-chalk/src/carousel.scss
  31. 172 0
      packages/theme-chalk/src/cascader.scss
  32. 0 0
      packages/theme-chalk/src/checkbox-button.scss
  33. 0 0
      packages/theme-chalk/src/checkbox-group.scss
  34. 256 0
      packages/theme-chalk/src/checkbox.scss
  35. 100 0
      packages/theme-chalk/src/col.scss
  36. 0 0
      packages/theme-chalk/src/collapse-item.scss
  37. 51 0
      packages/theme-chalk/src/collapse.scss
  38. 264 0
      packages/theme-chalk/src/color-picker.scss
  39. 33 0
      packages/theme-chalk/src/common/popup.scss
  40. 99 0
      packages/theme-chalk/src/common/transition.scss
  41. 624 0
      packages/theme-chalk/src/common/var.scss
  42. 12 0
      packages/theme-chalk/src/container.scss
  43. 11 0
      packages/theme-chalk/src/date-picker.scss
  44. 85 0
      packages/theme-chalk/src/date-picker/date-picker.scss
  45. 110 0
      packages/theme-chalk/src/date-picker/date-range-picker.scss
  46. 83 0
      packages/theme-chalk/src/date-picker/date-table.scss
  47. 36 0
      packages/theme-chalk/src/date-picker/month-table.scss
  48. 112 0
      packages/theme-chalk/src/date-picker/picker-panel.scss
  49. 33 0
      packages/theme-chalk/src/date-picker/picker.scss
  50. 84 0
      packages/theme-chalk/src/date-picker/time-picker.scss
  51. 31 0
      packages/theme-chalk/src/date-picker/time-range-picker.scss
  52. 61 0
      packages/theme-chalk/src/date-picker/time-spinner.scss
  53. 40 0
      packages/theme-chalk/src/date-picker/year-table.scss
  54. 107 0
      packages/theme-chalk/src/dialog.scss
  55. 0 0
      packages/theme-chalk/src/dropdown-item.scss
  56. 0 0
      packages/theme-chalk/src/dropdown-menu.scss
  57. 73 0
      packages/theme-chalk/src/dropdown.scss
  58. BIN
      packages/theme-chalk/src/fonts/element-icons.ttf
  59. BIN
      packages/theme-chalk/src/fonts/element-icons.woff
  60. 7 0
      packages/theme-chalk/src/footer.scss
  61. 0 0
      packages/theme-chalk/src/form-item.scss
  62. 91 0
      packages/theme-chalk/src/form.scss
  63. 7 0
      packages/theme-chalk/src/header.scss
  64. 88 0
      packages/theme-chalk/src/icon.scss
  65. 67 0
      packages/theme-chalk/src/index.scss
  66. 96 0
      packages/theme-chalk/src/input-number.scss
  67. 234 0
      packages/theme-chalk/src/input.scss
  68. 82 0
      packages/theme-chalk/src/loading.scss
  69. 9 0
      packages/theme-chalk/src/main.scss
  70. 0 0
      packages/theme-chalk/src/menu-item-group.scss
  71. 0 0
      packages/theme-chalk/src/menu-item.scss
  72. 273 0
      packages/theme-chalk/src/menu.scss
  73. 167 0
      packages/theme-chalk/src/message-box.scss
  74. 101 0
      packages/theme-chalk/src/message.scss
  75. 78 0
      packages/theme-chalk/src/mixins/_button.scss
  76. 4 0
      packages/theme-chalk/src/mixins/config.scss
  77. 44 0
      packages/theme-chalk/src/mixins/function.scss
  78. 169 0
      packages/theme-chalk/src/mixins/mixins.scss
  79. 39 0
      packages/theme-chalk/src/mixins/utils.scss
  80. 102 0
      packages/theme-chalk/src/notification.scss
  81. 25 0
      packages/theme-chalk/src/option-group.scss
  82. 44 0
      packages/theme-chalk/src/option.scss
  83. 208 0
      packages/theme-chalk/src/pagination.scss
  84. 118 0
      packages/theme-chalk/src/popover.scss
  85. 119 0
      packages/theme-chalk/src/progress.scss
  86. 110 0
      packages/theme-chalk/src/radio-button.scss
  87. 13 0
      packages/theme-chalk/src/radio-group.scss
  88. 127 0
      packages/theme-chalk/src/radio.scss
  89. 45 0
      packages/theme-chalk/src/rate.scss
  90. 79 0
      packages/theme-chalk/src/reset.scss
  91. 39 0
      packages/theme-chalk/src/row.scss
  92. 70 0
      packages/theme-chalk/src/scrollbar.scss
  93. 57 0
      packages/theme-chalk/src/select-dropdown.scss
  94. 143 0
      packages/theme-chalk/src/select.scss
  95. 209 0
      packages/theme-chalk/src/slider.scss
  96. 44 0
      packages/theme-chalk/src/spinner.scss
  97. 211 0
      packages/theme-chalk/src/step.scss
  98. 17 0
      packages/theme-chalk/src/steps.scss
  99. 0 0
      packages/theme-chalk/src/submenu.scss
  100. 119 0
      packages/theme-chalk/src/switch.scss

+ 6 - 4
build/bin/gen-cssfile.js

@@ -2,7 +2,8 @@ var fs = require('fs');
 var path = require('path');
 var Components = require('../../components.json');
 var themes = [
-  'theme-default'
+  'theme-default',
+  'theme-chalk'
 ];
 Components = Object.keys(Components);
 var basepath = path.resolve(__dirname, '../../packages/');
@@ -16,10 +17,11 @@ function fileExists(filePath) {
 }
 
 themes.forEach((theme) => {
-  var indexContent = '@import "./base.css";\n';
+  var isSCSS = theme !== 'theme-default';
+  var indexContent = isSCSS ? '@import "./base.scss";\n' : '@import "./base.css";\n';
   Components.forEach(function(key) {
     if (['icon', 'option', 'option-group'].indexOf(key) > -1) return;
-    var fileName = key + '.css';
+    var fileName = key + (isSCSS ? '.scss' : '.css');
     indexContent += '@import "./' + fileName + '";\n';
     var filePath = path.resolve(basepath, theme, 'src', fileName);
     if (!fileExists(filePath)) {
@@ -27,5 +29,5 @@ themes.forEach((theme) => {
       console.log(theme, ' 创建遗漏的 ', fileName, ' 文件');
     }
   });
-  fs.writeFileSync(path.resolve(basepath, theme, 'src', 'index.css'), indexContent);
+  fs.writeFileSync(path.resolve(basepath, theme, 'src', isSCSS ? 'index.scss' : 'index.css'), indexContent);
 });

+ 4 - 0
build/cooking.common.js

@@ -14,5 +14,9 @@ cooking.set({
 
 cooking.add('output.filename', 'element-ui.common.js');
 cooking.add('loader.js.exclude', config.jsexclude);
+cooking.add('loader.scss', {
+  test: /\.scss$/,
+  loaders: ['style-loader', 'css-loader', 'sass-loader']
+});
 cooking.add('vue.preserveWhitespace', false);
 module.exports = cooking.resolve();

+ 4 - 0
build/cooking.component.js

@@ -15,5 +15,9 @@ cooking.set({
 
 cooking.add('output.filename', '[name].js');
 cooking.add('loader.js.exclude', config.jsexclude);
+cooking.add('loader.scss', {
+  test: /\.scss$/,
+  loaders: ['style-loader', 'css-loader', 'sass-loader']
+});
 cooking.add('vue.preserveWhitespace', false);
 module.exports = cooking.resolve();

+ 4 - 0
build/cooking.conf.js

@@ -14,5 +14,9 @@ cooking.set({
 
 cooking.add('output.filename', 'index.js');
 cooking.add('loader.js.exclude', config.jsexclude);
+cooking.add('loader.scss', {
+  test: /\.scss$/,
+  loaders: ['style-loader', 'css-loader', 'sass-loader']
+});
 cooking.add('vue.preserveWhitespace', false);
 module.exports = cooking.resolve();

+ 5 - 0
build/cooking.demo.js

@@ -55,6 +55,11 @@ cooking.add('loader.md', {
   loader: 'vue-markdown-loader'
 });
 
+cooking.add('loader.scss', {
+  test: /\.scss$/,
+  loaders: ['style-loader', 'css-loader', 'sass-loader']
+});
+
 cooking.add(
   'output.chunkFilename',
   isProd ? '[name].[chunkhash:7].js' : '[name].js'

+ 69 - 87
examples/docs/en-US/button.md

@@ -1,27 +1,3 @@
-<script>
-  import { addClass } from 'element-ui/src/utils/dom';
-  export default {
-    data() {
-      return {
-        isLoading: false,
-        isLoading2: false
-      };
-    },
-    methods: {
-      handleClick(event) {
-        console.log(event);
-        alert('button clicked!');
-      }
-    },
-    mounted() {
-      this.$nextTick(() => {
-        let demos = document.querySelectorAll('.source');
-        let thirdDemo = demos[2];
-        addClass(thirdDemo, 'intro-block');
-      });
-    }
-  }
-</script>
 <style>
   .demo-box.demo-button {
     .el-row {
@@ -42,30 +18,6 @@
       }
     }
   }
-
-  .demo-box.demo-button .intro-block {
-    padding: 0;
-  }
-
-  .demo-button .intro-block .block {
-    padding: 30px 24px;
-    overflow: hidden;
-    border-bottom: solid 1px #EFF2F6;
-    &:last-child {
-      border-bottom: none;
-    }
-  }
-
-  .demo-button .intro-block .demonstration {
-    font-size: 14px;
-    color: #8492a6;
-    line-height: 44px;
-  }
-
-  .demo-button .intro-block .wrapper {
-    float: right;
-    margin-right: 20px;
-  }
 </style>
 
 ## Button
@@ -77,55 +29,76 @@ Commonly used button.
 ::: demo Button provides 7 themes defined by the `type` attribute.
 
 ```html
-<el-button>Default Button</el-button>
-<el-button type="primary">Primary Button</el-button>
-<el-button type="text">Text Button</el-button>
+<div>
+  <el-button>Default</el-button>
+  <el-button type="primary">Primary</el-button>
+  <el-button type="success">Success</el-button>
+  <el-button type="info">Info</el-button>
+  <el-button type="warning">Warning</el-button>
+  <el-button type="danger">Danger</el-button>
+</div>
+
+<div style="margin: 20px 0">
+  <el-button plain>Plain</el-button>
+  <el-button type="primary" plain>Primary</el-button>
+  <el-button type="success" plain>Success</el-button>
+  <el-button type="info" plain>Info</el-button>
+  <el-button type="warning" plain>Warning</el-button>
+  <el-button type="danger" plain>Danger</el-button>
+</div>
+
+<div>
+  <el-button round>Round</el-button>
+  <el-button type="primary" round>Primary</el-button>
+  <el-button type="success" round>Success</el-button>
+  <el-button type="info" round>Info</el-button>
+  <el-button type="warning" round>Warning</el-button>
+  <el-button type="danger" round>Danger</el-button>
+</div>
 ```
 :::
 
 ### Disabled Button
 
-The `disableds` attribute determines if the button is disabled.
+The `disabled` attribute determines if the button is disabled.
 
 :::demo Use `disabled` attribute to determine whether a button is disabled. It accepts a `Boolean` value.
 
 ```html
-<el-button :plain="true" :disabled="true">Default Button</el-button>
-<el-button type="primary" disabled>Primary Button</el-button>
-<el-button type="text" disabled>Text Button</el-button>
+<div>
+  <el-button disabled>Default</el-button>
+  <el-button type="primary" disabled>Primary</el-button>
+  <el-button type="success" disabled>Success</el-button>
+  <el-button type="info" disabled>Info</el-button>
+  <el-button type="warning" disabled>Warning</el-button>
+  <el-button type="danger" disabled>Danger</el-button>
+</div>
+
+<div style="margin-top: 20px">
+  <el-button plain disabled>Plain</el-button>
+  <el-button type="primary" plain disabled>Primary</el-button>
+  <el-button type="success" plain disabled>Success</el-button>
+  <el-button type="info" plain disabled>Info</el-button>
+  <el-button type="warning" plain disabled>Warning</el-button>
+  <el-button type="danger" plain disabled>Danger</el-button>
+</div>
 ```
 :::
 
-### Color Indication
+### Text Button
 
-Different colors represent different meanings.
+Buttons without border and background.
 
-:::demo Use `plain` attribute to create a plain button, and it accepts a `Boolean` value. You can assign different `type` to a plain button as mentioned above. **Note**: When using the plain button, you still can set `type` to `text`, but it makes no difference. A plain button will be styled like a `text button` by default.
+:::demo
 ```html
-<div class="block">
-  <span class="demonstration">Default</span>
-  <span class="wrapper">
-    <el-button type="success">Success</el-button>
-    <el-button type="warning">Warning</el-button>
-    <el-button type="danger">Danger</el-button>
-    <el-button type="info">Info</el-button>
-  </span>
-</div>
-<div class="block">
-  <span class="demonstration">Hover to display color</span>
-  <span class="wrapper">
-    <el-button :plain="true" type="success">Success</el-button>
-    <el-button :plain="true" type="warning">Warning</el-button>
-    <el-button :plain="true" type="danger">Danger</el-button>
-    <el-button :plain="true" type="info">Info</el-button>
-  </span>
-</div>
+<el-button type="text">Text Button</el-button>
+<el-button type="text" disabled>Text Button</el-button>
 ```
 :::
 
 ### Icon Button
 
-Use icons to add more meaning to Button. You can use icon alone to save some space, or with text together.
+Use icons to add more meaning to Button. You can use icon alone to save some space, or use it with text.
 
 :::demo Use the `icon` attribute to add icon. You can find the icon list in Element icon component. Adding icons to the right side of the text is achievable with an `<i>` tag. Custom icons can be used as well.
 
@@ -172,24 +145,33 @@ Click the button to load data, then the button displays a loading state.
 
 Besides default size, Button component provides three additional sizes for you to choose among different scenarios.
 
-:::demo Use attribute `size` to set additional sizes with `large`, `small` or `mini`.
+:::demo Use attribute `size` to set additional sizes with `medium`, `small` or `mini`.
 
 ```html
-<el-button type="primary" size="large">Large Button</el-button>
-<el-button type="primary">Default Button</el-button>
-<el-button type="primary" size="small">Small Button</el-button>
-<el-button type="primary" size="mini">Mini Button</el-button>
+<div>
+  <el-button>Default</el-button>
+  <el-button size="medium">Medium</el-button>
+  <el-button size="small">Small</el-button>
+  <el-button size="mini">Mini</el-button>
+</div>
+<div style="margin-top: 20px">
+  <el-button round>Default</el-button>
+  <el-button size="medium" round>Medium</el-button>
+  <el-button size="small" round>Small</el-button>
+  <el-button size="mini" round>Mini</el-button>
+</div>
 ```
 :::
 
 ### Attributes
 | Attribute      | Description    | Type      | Accepted values       | Default   |
 |---------- |-------- |---------- |-------------  |-------- |
-| size     | button size   | string  |   large/small/mini            |    —     |
-| type     | button type   | string    |   primary/success/warning/danger/info/text |     —    |
-| plain     | determine whether it's a plain button   | Boolean    | — | false   |
-| loading   | determine whether it's loading   | Boolean    | — | false   |
+| size     | button size   | string  |   large / small / mini            |    —     |
+| type     | button type   | string    |   primary / success / warning / danger / info / text |     —    |
+| plain     | determine whether it's a plain button   | boolean    | — | false   |
+| round     | determine whether it's a round button   | boolean    | — | false   |
+| loading   | determine whether it's loading   | boolean    | — | false   |
 | disabled  | disable the button    | boolean   | —   | false   |
 | icon  | button icon, accepts an icon name of Element icon component | string   |  —  |  —  |
 | autofocus  | same as native button's `autofocus` | boolean   |  —  |  false  |
-| native-type | same as native button's `type` | string | button/submit/reset | button |
+| native-type | same as native button's `type` | string | button / submit / reset | button |

+ 69 - 88
examples/docs/zh-CN/button.md

@@ -1,27 +1,3 @@
-<script>
-  import { addClass } from 'element-ui/src/utils/dom';
-  export default {
-    data() {
-      return {
-        isLoading: false,
-        isLoading2: false
-      };
-    },
-    methods: {
-      handleClick(event) {
-        console.log(event);
-        alert('button clicked!');
-      }
-    },
-    mounted() {
-      this.$nextTick(() => {
-        let demos = document.querySelectorAll('.source');
-        let thirdDemo = demos[2];
-        addClass(thirdDemo, 'intro-block');
-      });
-    }
-  }
-</script>
 <style>
   .demo-box.demo-button {
     .el-row {
@@ -42,30 +18,6 @@
       }
     }
   }
-
-  .demo-box.demo-button .intro-block {
-    padding: 0;
-  }
-
-  .demo-button .intro-block .block {
-    padding: 30px 24px;
-    overflow: hidden;
-    border-bottom: solid 1px #EFF2F6;
-    &:last-child {
-      border-bottom: none;
-    }
-  }
-
-  .demo-button .intro-block .demonstration {
-    font-size: 14px;
-    color: #8492a6;
-    line-height: 44px;
-  }
-
-  .demo-button .intro-block .wrapper {
-    float: right;
-    margin-right: 20px;
-  }
 </style>
 
 ## Button 按钮
@@ -75,12 +27,35 @@
 
 基础的按钮用法。
 
-:::demo Button 组件默认提供7种主题,由`type`属性来定义,默认为`default`
+:::demo Button 组件默认提供7种主题,由`type`属性来定义。
 
 ```html
-<el-button>默认按钮</el-button>
-<el-button type="primary">主要按钮</el-button>
-<el-button type="text">文字按钮</el-button>
+<div>
+  <el-button>默认按钮</el-button>
+  <el-button type="primary">主要按钮</el-button>
+  <el-button type="success">成功按钮</el-button>
+  <el-button type="info">信息按钮</el-button>
+  <el-button type="warning">警告按钮</el-button>
+  <el-button type="danger">危险按钮</el-button>
+</div>
+
+<div style="margin: 20px 0">
+  <el-button plain>朴素按钮</el-button>
+  <el-button type="primary" plain>主要按钮</el-button>
+  <el-button type="success" plain>成功按钮</el-button>
+  <el-button type="info" plain>信息按钮</el-button>
+  <el-button type="warning" plain>警告按钮</el-button>
+  <el-button type="danger" plain>危险按钮</el-button>
+</div>
+
+<div>
+  <el-button round>圆形按钮</el-button>
+  <el-button type="primary" round>主要按钮</el-button>
+  <el-button type="success" round>成功按钮</el-button>
+  <el-button type="info" round>信息按钮</el-button>
+  <el-button type="warning" round>警告按钮</el-button>
+  <el-button type="danger" round>危险按钮</el-button>
+</div>
 ```
 :::
 
@@ -91,43 +66,40 @@
 :::demo 你可以使用`disabled`属性来定义按钮是否可用,它接受一个`Boolean`值。
 
 ```html
-<el-button :plain="true" :disabled="true">主要按钮</el-button>
-<el-button type="primary" :disabled="true">主要按钮</el-button>
-<el-button type="text" :disabled="true">文字按钮</el-button>
+<div>
+  <el-button disabled>默认按钮</el-button>
+  <el-button type="primary" disabled>主要按钮</el-button>
+  <el-button type="success" disabled>成功按钮</el-button>
+  <el-button type="info" disabled>信息按钮</el-button>
+  <el-button type="warning" disabled>警告按钮</el-button>
+  <el-button type="danger" disabled>危险按钮</el-button>
+</div>
+
+<div style="margin-top: 20px">
+  <el-button plain disabled>朴素按钮</el-button>
+  <el-button type="primary" plain disabled>主要按钮</el-button>
+  <el-button type="success" plain disabled>成功按钮</el-button>
+  <el-button type="info" plain disabled>信息按钮</el-button>
+  <el-button type="warning" plain disabled>警告按钮</el-button>
+  <el-button type="danger" plain disabled>危险按钮</el-button>
+</div>
 ```
 :::
 
-### 有颜色倾向
+### 文字按钮
 
-不同的颜色倾向代表不同的提示
-
-:::demo 朴素按钮同样设置了不同的`type`属性对应的样式(可选值同上),默认为`info`。设置`plain`属性,它接受一个`Boolean`。注意,在该情况下,`type`虽然可以为`text`,但是是没有意义的,会显示为`text button`的样式。
+没有边框和背景色的按钮。
 
+:::demo
 ```html
-<div class="block">
-  <span class="demonstration">默认显示颜色</span>
-  <span class="wrapper">
-    <el-button type="success">成功按钮</el-button>
-    <el-button type="warning">警告按钮</el-button>
-    <el-button type="danger">危险按钮</el-button>
-    <el-button type="info">信息按钮</el-button>
-  </span>
-</div>
-<div class="block">
-  <span class="demonstration">hover 显示颜色</span>
-  <span class="wrapper">
-    <el-button :plain="true" type="success">成功按钮</el-button>
-    <el-button :plain="true" type="warning">警告按钮</el-button>
-    <el-button :plain="true" type="danger">危险按钮</el-button>
-    <el-button :plain="true" type="info">信息按钮</el-button>
-  </span>
-</div>
+<el-button type="text">文字按钮</el-button>
+<el-button type="text" disabled>文字按钮</el-button>
 ```
 :::
 
 ### 图标按钮
 
-带图标的按钮可增强辨识度(有文字)或节省空间(无文字)
+带图标的按钮可增强辨识度(有文字)或节省空间(无文字)。
 
 :::demo 设置`icon`属性即可,icon 的列表可以参考 Element 的 icon 组件,也可以设置在文字右边的 icon ,只要使用`i`标签即可,可以使用自定义图标。
 
@@ -174,24 +146,33 @@
 
 Button 组件提供除了默认值以外的三种尺寸,可以在不同场景下选择合适的按钮尺寸。
 
-:::demo 额外的尺寸:`large`、`small`、`mini`,通过设置`size`属性来配置它们。
+:::demo 额外的尺寸:`medium`、`small`、`mini`,通过设置`size`属性来配置它们。
 
 ```html
-<el-button type="primary" size="large">大型按钮</el-button>
-<el-button type="primary">正常按钮</el-button>
-<el-button type="primary" size="small">小型按钮</el-button>
-<el-button type="primary" size="mini">超小按钮</el-button>
+<div>
+  <el-button>默认按钮</el-button>
+  <el-button size="medium">中等按钮</el-button>
+  <el-button size="small">小型按钮</el-button>
+  <el-button size="mini">超小按钮</el-button>
+</div>
+<div style="margin-top: 20px">
+  <el-button round>默认按钮</el-button>
+  <el-button size="medium" round>中等按钮</el-button>
+  <el-button size="small" round>小型按钮</el-button>
+  <el-button size="mini" round>超小按钮</el-button>
+</div>
 ```
 :::
 
 ### Attributes
 | 参数      | 说明    | 类型      | 可选值       | 默认值   |
 |---------- |-------- |---------- |-------------  |-------- |
-| size     | 尺寸   | string  |   large,small,mini            |    —     |
-| type     | 类型   | string    |   primary,success,warning,danger,info,text |     —    |
-| plain     | 是否朴素按钮   | Boolean    | — | false   |
-| loading     | 是否加载中状态   | Boolean    | — | false   |
+| size     | 尺寸   | string  |   medium / small / mini            |    —     |
+| type     | 类型   | string    |   primary / success / warning / danger / info / text |     —    |
+| plain     | 是否朴素按钮   | boolean    | — | false   |
+| round     | 是否圆形按钮   | boolean    | — | false   |
+| loading     | 是否加载中状态   | boolean    | — | false   |
 | disabled  | 是否禁用状态    | boolean   | —   | false   |
 | icon  | 图标,已有的图标库中的图标名 | string   |  —  |  —  |
 | autofocus  | 是否默认聚焦 | boolean   |  —  |  false  |
-| native-type | 原生 type 属性 | string | button,submit,reset | button |
+| native-type | 原生 type 属性 | string | button / submit / reset | button |

+ 1 - 1
examples/docs/zh-CN/dialog.md

@@ -140,7 +140,7 @@ Dialog 组件的内容可以是任意的,甚至可以是表格或表单,下
 <!-- Form -->
 <el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button>
 
-<el-dialog title="收货地址" :visible.sync="dialogFormVisible" fullscreen>
+<el-dialog title="收货地址" :visible.sync="dialogFormVisible">
   <el-form :model="form">
     <el-form-item label="活动名称" :label-width="formLabelWidth">
       <el-input v-model="form.name" auto-complete="off"></el-input>

+ 1 - 1
examples/entry.js

@@ -3,7 +3,7 @@ import entry from './app';
 import VueRouter from 'vue-router';
 import routes from './route.config';
 import Element from 'main/index.js';
-import 'packages/theme-default/src/index.css';
+import 'packages/theme-chalk/src/index.scss';
 import demoBlock from './components/demo-block.vue';
 import MainFooter from './components/footer.vue';
 import MainHeader from './components/header.vue';

+ 6 - 2
package.json

@@ -11,7 +11,7 @@
   "scripts": {
     "bootstrap": "yarn || npm i",
     "build:file": "node build/bin/iconInit.js & node build/bin/build-entry.js & node build/bin/i18n.js & node build/bin/version.js",
-    "build:theme": "node build/bin/gen-cssfile && gulp build --gulpfile packages/theme-default/gulpfile.js && cp-cli packages/theme-default/lib lib/theme-default",
+    "build:theme": "node build/bin/gen-cssfile && gulp build --gulpfile packages/theme-chalk/gulpfile.js && cp-cli packages/theme-chalk/lib lib/theme-chalk",
     "build:utils": "cross-env BABEL_ENV=utils babel src --out-dir lib --ignore src/index.js",
     "build:umd": "node build/bin/build-locale.js",
     "clean": "rimraf lib && rimraf packages/*/lib && rimraf test/**/coverage && lerna clean --yes",
@@ -43,7 +43,7 @@
     "url": "https://github.com/ElemeFE/element/issues"
   },
   "unpkg": "lib/index.js",
-  "style": "lib/theme-default/index.css",
+  "style": "lib/theme-chalk/index.css",
   "dependencies": {
     "async-validator": "1.6.9",
     "babel-helper-vue-jsx-merge-props": "^2.0.0",
@@ -79,8 +79,10 @@
     "file-save": "^0.2.0",
     "gh-pages": "^0.11.0",
     "gulp": "^3.9.1",
+    "gulp-autoprefixer": "^4.0.0",
     "gulp-cssmin": "^0.1.7",
     "gulp-postcss": "^6.1.1",
+    "gulp-sass": "^3.1.0",
     "highlight.js": "^9.3.0",
     "html-loader": "^0.4.3",
     "html-webpack-plugin": "^2.22.0",
@@ -102,11 +104,13 @@
     "markdown-it-anchor": "^2.5.0",
     "markdown-it-container": "^2.0.0",
     "mocha": "^3.1.1",
+    "node-sass": "^4.5.3",
     "phantomjs-prebuilt": "^2.1.13",
     "postcss": "^5.1.2",
     "postcss-loader": "^0.11.1",
     "postcss-salad": "^1.0.8",
     "rimraf": "^2.5.4",
+    "sass-loader": "^6.0.6",
     "sinon": "^1.17.6",
     "sinon-chai": "^2.8.0",
     "style-loader": "^0.13.1",

+ 1 - 1
packages/breadcrumb/src/breadcrumb-item.vue

@@ -1,6 +1,6 @@
 <template>
   <span class="el-breadcrumb__item">
-    <span class="el-breadcrumb__item__inner" ref="link" role="link"><slot></slot></span><span class="el-breadcrumb__separator" role="presentation">{{separator}}</span>
+    <span class="el-breadcrumb__inner" ref="link" role="link"><slot></slot></span><span class="el-breadcrumb__separator" role="presentation">{{separator}}</span>
   </span>
 </template>
 <script>

+ 0 - 6
packages/button/src/button-group.vue

@@ -4,12 +4,6 @@
   </div>
 </template>
 <script>
-  /**
-   * button
-   * @module components/basic/menu
-   * @desc 用于按钮组
-   * @param {string} label - 名称
-   */
   export default {
     name: 'ElButtonGroup'
   };

+ 4 - 2
packages/button/src/button.vue

@@ -10,7 +10,8 @@
       {
         'is-disabled': disabled,
         'is-loading': loading,
-        'is-plain': plain
+        'is-plain': plain,
+        'is-round': round
       }
     ]"
   >
@@ -40,7 +41,8 @@
       loading: Boolean,
       disabled: Boolean,
       plain: Boolean,
-      autofocus: Boolean
+      autofocus: Boolean,
+      round: Boolean
     },
 
     methods: {

+ 1 - 1
packages/collapse/src/collapse-item.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="el-collapse-item" :class="{'is-active': isActive}">
     <div class="el-collapse-item__header" @click="handleHeaderClick">
-      <i class="el-collapse-item__header__arrow el-icon-arrow-right"></i>
+      <i class="el-collapse-item__arrow el-icon-arrow-right"></i>
       <slot name="title">{{title}}</slot>
     </div>
     <el-collapse-transition>

+ 3 - 0
packages/theme-chalk/.gitignore

@@ -0,0 +1,3 @@
+node_modules
+lib
+npm-debug*

+ 33 - 0
packages/theme-chalk/README.md

@@ -0,0 +1,33 @@
+# element-theme-chalk
+> element component chalk theme.
+
+
+## Installation
+```shell
+npm i element-theme-chalk -S
+```
+
+## Usage
+
+Use Sass import
+```css
+@import 'element-theme-chalk';
+```
+
+Or Use webpack
+```javascript
+import 'element-theme-chalk';
+```
+
+Or
+```html
+<link rel="stylesheet" href="path/to/node_modules/element-theme-chalk/lib/index.css">
+```
+
+##  Import on demand
+```javascript
+import 'element-theme-chalk/lib/input.css';
+import 'element-theme-chalk/lib/select.css';
+
+// ...
+```

+ 25 - 0
packages/theme-chalk/gulpfile.js

@@ -0,0 +1,25 @@
+'use strict';
+
+var gulp = require('gulp');
+var sass = require('gulp-sass');
+var autoprefixer = require('gulp-autoprefixer');
+var cssmin = require('gulp-cssmin');
+
+gulp.task('compile', function() {
+  return gulp.src('./src/*.scss')
+    .pipe(sass.sync())
+    .pipe(autoprefixer({
+      browsers: ['ie > 9', 'last 2 versions'],
+      cascade: false
+    }))
+    .pipe(cssmin())
+    .pipe(gulp.dest('./lib'));
+});
+
+gulp.task('copyfont', function() {
+  return gulp.src('./src/fonts/**')
+    .pipe(cssmin())
+    .pipe(gulp.dest('./lib/fonts'));
+});
+
+gulp.task('build', ['compile', 'copyfont']);

+ 34 - 0
packages/theme-chalk/package.json

@@ -0,0 +1,34 @@
+{
+  "name": "element-theme-chalk",
+  "version": "1.4.2",
+  "description": "Element component chalk theme.",
+  "main": "lib/index.css",
+  "style": "lib/index.css",
+  "files": [
+    "lib",
+    "src"
+  ],
+  "scripts": {
+    "build": "gulp build"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/ElementUI/theme-chalk.git"
+  },
+  "keywords": [
+    "element",
+    "theme"
+  ],
+  "author": "yi.shyang@ele.me",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/ElementUI/theme-chalk/issues"
+  },
+  "homepage": "https://github.com/ElementUI/theme-chalk#readme",
+  "devDependencies": {
+    "gulp": "^3.9.1",
+    "gulp-cssmin": "^0.1.7",
+    "gulp-sass": "^3.1.0"
+  },
+  "dependencies": {}
+}

+ 85 - 0
packages/theme-chalk/src/alert.scss

@@ -0,0 +1,85 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(alert) {
+  width: 100%;
+  padding: $--alert-padding;
+  margin: 0;
+  box-sizing: border-box;
+  border-radius: $--alert-border-radius;
+  position: relative;
+  background-color: $--color-white;
+  overflow: hidden;
+  color: $--color-white;
+  opacity: 1;
+  display: table;
+  transition: opacity .2s;
+
+  @include m(success) {
+    background-color: $--alert-success-color;
+  }
+
+  @include m(info) {
+    background-color: $--alert-info-color;
+  }
+
+  @include m(warning) {
+    background-color: $--alert-warning-color;
+  }
+
+  @include m(error) {
+    background-color: $--alert-danger-color;
+  }
+
+  @include e(content) {
+    display: table-cell;
+    padding: 0 8px;
+  }
+
+  @include e(icon) {
+    font-size: $--alert-icon-size;
+    width: $--alert-icon-size;
+    display: table-cell;
+    color: $--color-white;
+    vertical-align: middle;
+    @include when(big) {
+      font-size: $--alert-icon-large-size;
+      width: $--alert-icon-large-size;
+    }
+  }
+
+  @include e(title) {
+    font-size: $--alert-title-font-size;
+    line-height: 18px;
+    @include when(bold) {
+      font-weight: bold;
+    }
+  }
+
+  & .el-alert__description {
+    color: $--color-white;
+    font-size: $--alert-description-font-size;
+    margin: 5px 0 0 0;
+  }
+
+  @include e(closebtn) {
+    font-size: $--alert-close-font-size;
+    color: $--color-white;
+    opacity: 1;
+    position: absolute;
+    top: 12px;
+    right: 15px;
+    cursor: pointer;
+
+    @include when(customed) {
+      font-style: normal;
+      font-size: $--alert-close-customed-font-size;
+      top: 9px;
+    }
+  }
+}
+
+.el-alert-fade-enter,
+.el-alert-fade-leave-active {
+  opacity: 0;
+}

+ 0 - 0
packages/theme-chalk/src/aside.scss


+ 80 - 0
packages/theme-chalk/src/autocomplete.scss

@@ -0,0 +1,80 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import "common/var";
+@import "./input.scss";
+@import "./scrollbar.scss";
+
+@include b(autocomplete) {
+  position: relative;
+  display: inline-block;
+}
+
+@include b(autocomplete-suggestion) {
+  margin: 5px 0;
+  box-shadow: 0 0 6px 0 rgba(0,0,0,0.04), 0 2px 4px 0 rgba(0,0,0,0.12);
+
+  @include e(wrap) {
+    max-height: 280px;
+    overflow: auto;
+    background-color: $--color-white;
+    border: 1px solid $--color-black;
+    padding: 6px 0;
+    border-radius: 2px;
+    box-sizing: border-box;
+  }
+
+  @include e(list) {
+    margin: 0;
+    padding: 0;
+  }
+
+  & li {
+    list-style: none;
+    line-height: 36px;
+    padding: 0 10px;
+    margin: 0;
+    cursor: pointer;
+    color: $--color-black;
+    font-size: 14px;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+
+    &:hover {
+      background-color: $--select-option-hover-background;
+    }
+    &.highlighted {
+      background-color: $--color-primary;
+      color: $--color-white;
+    }
+    &:active {
+      background-color: darken($--color-primary, 0.2);
+    }
+    &.divider {
+      margin-top: 6px;
+      border-top: 1px solid $--color-black;
+    }
+    &.divider:last-child {
+      margin-bottom: -6px;
+    }
+  }
+
+  @include when(loading) {
+    li {
+      text-align: center;
+      height: 100px;
+      line-height: 100px;
+      font-size: 20px;
+      color: #999;
+      @include utils-vertical-center;
+
+      &:hover {
+        background-color: $--color-white;
+      }
+    }
+
+    & .el-icon-loading {
+      vertical-align: middle;
+    }
+  }
+}

+ 41 - 0
packages/theme-chalk/src/badge.scss

@@ -0,0 +1,41 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(badge) {
+  position: relative;
+  vertical-align: middle;
+  display: inline-block;
+
+  @include e(content) {
+    background-color: $--badge-fill;
+    border-radius: $--badge-radius;
+    color: $--color-white;
+    display: inline-block;
+    font-size: $--badge-font-size;
+    height: $--badge-size;
+    line-height: $--badge-size;
+    padding: 0 $--badge-padding;
+    text-align: center;
+    white-space: nowrap;
+    border: 1px solid $--color-white;
+
+    @include when(fixed) {
+      position: absolute;
+      top: 0;
+      right: #{1 + $--badge-size / 2};
+      transform: translateY(-50%) translateX(100%);
+
+      @include when(dot) {
+        right: 5px;
+      }
+    }
+
+    @include when(dot) {
+      height: 8px;
+      width: 8px;
+      padding: 0;
+      right: 0;
+      border-radius: 50%;
+    }
+  }
+}

+ 2 - 0
packages/theme-chalk/src/base.scss

@@ -0,0 +1,2 @@
+@import "common/transition.scss";
+@import "icon.scss";

+ 0 - 0
packages/theme-chalk/src/breadcrumb-item.scss


+ 43 - 0
packages/theme-chalk/src/breadcrumb.scss

@@ -0,0 +1,43 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import "common/var";
+
+@include b(breadcrumb) {
+  font-size: 13px;
+  line-height: 1;
+  @include utils-clearfix;
+
+  @include e(separator) {
+    margin: 0 8px;
+    color: $--color-black;
+  }
+  @include e(item) {
+    float: left;
+
+    @include e(inner) {
+      &, & a {
+        transition: color .15s linear;
+        color: $--color-black;
+
+        &:hover {
+          color: $--color-primary;
+          cursor: pointer;
+        }
+      }
+    }
+
+    &:last-child {
+      .el-breadcrumb__inner,
+      .el-breadcrumb__inner a {
+        &, &:hover {
+          color: $--color-black;
+          cursor: text;
+        }
+      }
+
+      .el-breadcrumb__separator {
+        display: none;
+      }
+    }
+  }
+}

+ 0 - 0
packages/theme-chalk/src/button-group.scss


+ 216 - 0
packages/theme-chalk/src/button.scss

@@ -0,0 +1,216 @@
+@charset "UTF-8";
+@import "common/var";
+@import "mixins/button";
+@import "mixins/mixins";
+@import "mixins/utils";
+
+@include b(button) {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: $--button-default-fill;
+  border: $--border-base;
+  border-color: $--button-default-border;
+  color: $--button-default-color;
+  -webkit-appearance: none;
+  text-align: center;
+  box-sizing: border-box;
+  outline: none;
+  margin: 0;
+  transition: .1s;
+  font-weight: $--button-font-weight;
+  @include utils-user-select(none);
+  & + .el-button {
+    margin-left: 10px;
+  }
+
+  @include button-size($--button-padding-vertical, $--button-padding-horizontal, $--button-font-size, $--button-border-radius);
+
+  &:hover,
+  &:focus {
+    color: $--color-primary;
+    border-color: $--color-primary-light-7;
+    background-color: $--color-primary-light-9;
+  }
+
+  &:active {
+    color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+    border-color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+    outline: none;
+  }
+
+  &::-moz-focus-inner {
+    border: 0;
+  }
+
+  & [class*="el-icon-"] {
+    & + span {
+      margin-left: 5px;
+    }
+  }
+
+  @include when(plain) {
+    &:hover,
+    &:focus {
+      background: $--color-white;
+      border-color: $--color-primary;
+      color: $--color-primary;
+    }
+
+    &:active {
+      background: $--color-white;
+      border-color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+      color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+      outline: none;
+    }
+  }
+
+  @include when(active) {
+    color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+    border-color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+  }
+
+  @include when(disabled) {
+    &,
+    &:hover,
+    &:focus {
+      color: $--button-disabled-color;
+      cursor: not-allowed;
+      background-image: none;
+      background-color: $--button-disabled-fill;
+      border-color: $--button-disabled-border;
+    }
+
+    &.el-button--text {
+      background-color: transparent;
+    }
+
+    &.is-plain {
+      &,
+      &:hover,
+      &:focus {
+        background-color: $--color-white;
+        border-color: $--button-disabled-border;
+        color: $--button-disabled-color;
+      }
+    }
+  }
+
+  @include when(loading) {
+    position: relative;
+    pointer-events: none;
+
+    &:before {
+      pointer-events: none;
+      content: '';
+      position: absolute;
+      left: -1px;
+      top: -1px;
+      right: -1px;
+      bottom: -1px;
+      border-radius: inherit;
+      background-color: rgba(255,255,255,.35);
+    }
+  }
+  @include m(primary) {
+    @include button-variant($--button-primary-color, $--button-primary-fill, $--button-primary-border);
+  }
+  @include m(success) {
+    @include button-variant($--button-success-color, $--button-success-fill, $--button-success-border);
+  }
+  @include m(warning) {
+    @include button-variant($--button-warning-color, $--button-warning-fill, $--button-warning-border);
+  }
+  @include m(danger) {
+    @include button-variant($--button-danger-color, $--button-danger-fill, $--button-danger-border);
+  }
+  @include m(info) {
+    @include button-variant($--button-info-color, $--button-info-fill, $--button-info-border);
+  }
+  @include m(medium) {
+    @include button-size($--button-medium-padding-vertical, $--button-medium-padding-horizontal, $--button-medium-font-size, $--button-medium-border-radius);
+  }
+  @include m(small) {
+    @include button-size($--button-small-padding-vertical, $--button-small-padding-horizontal, $--button-small-font-size, $--button-small-border-radius);
+  }
+  @include m(mini) {
+    @include button-size($--button-mini-padding-vertical, $--button-mini-padding-horizontal, $--button-mini-font-size, $--button-mini-border-radius);
+  }
+  @include m(text) {
+    border: none;
+    color: $--color-primary;
+    background: transparent;
+    padding-left: 0;
+    padding-right: 0;
+
+    &:hover,
+    &:focus {
+      color: mix($--color-white, $--color-primary, $--button-hover-tint-percent);
+      border-color: transparent;
+      background-color: transparent;
+    }
+    &:active {
+      color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+      border-color: transparent;
+      background-color: transparent;
+    }
+  }
+  @include when(round) {
+    border-radius: 20px;
+  }
+}
+
+@include b(button-group) {
+  @include utils-clearfix;
+  display: inline-block;
+  vertical-align: middle;
+
+  & .el-button {
+    float: left;
+    position: relative;
+    & + .el-button {
+      margin-left: 0;
+    }
+
+    &:first-child {
+      border-top-right-radius: 0;
+      border-bottom-right-radius: 0;
+    }
+    &:last-child {
+      border-top-left-radius: 0;
+      border-bottom-left-radius: 0;
+    }
+    &:not(:first-child):not(:last-child) {
+      border-radius: 0;
+    }
+    &:not(:last-child) {
+      margin-right: -1px;
+    }
+
+    &:hover,
+    &:focus,
+    &:active {
+      z-index: 1;
+    }
+
+    @include when(active) {
+      z-index: 1;
+    }
+  }
+
+  @each $type in (primary, success, warning, danger, info) {
+    .el-button--#{$type} {
+      &:first-child {
+        border-right-color: rgba($--color-white, 0.5);
+      }
+      &:last-child {
+        border-left-color: rgba($--color-white, 0.5);
+      }
+      &:not(:first-child):not(:last-child) {
+        border-left-color: rgba($--color-white, 0.5);
+        border-right-color: rgba($--color-white, 0.5);
+      }
+    }
+  }
+}

+ 21 - 0
packages/theme-chalk/src/card.scss

@@ -0,0 +1,21 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(card) {
+  border: 1px solid $--card-border-color;
+  border-radius: $--card-border-radius;
+  background-color: $--color-white;
+  overflow: hidden;
+  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .12),
+              0 0 6px 0 rgba(0, 0, 0, .04);
+
+  @include e(header) {
+    padding: #{$--card-padding - 2 $--card-padding};
+    border-bottom: 1px solid $--card-border-color;
+    box-sizing: border-box;
+  }
+
+  @include e(body) {
+    padding: $--card-padding;
+  }
+}

+ 50 - 0
packages/theme-chalk/src/carousel-item.scss

@@ -0,0 +1,50 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(carousel) {
+  @include e(item) {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    display: inline-block;
+    overflow: hidden;
+    z-index: #{$--index-normal - 1};
+
+    @include when(active) {
+      z-index: #{$--index-normal + 1};
+    }
+
+    @include when(animating) {
+      transition: transform .4s ease-in-out;
+    }
+
+    @include m(card) {
+      width: 50%;
+      transition: transform .4s ease-in-out;
+      &.is-in-stage {
+        cursor: pointer;
+        z-index: $--index-normal;
+        &:hover .el-carousel__mask,
+        &.is-hover .el-carousel__mask {
+          opacity: 0.12;
+        }
+      }
+      &.is-active {
+        z-index: #{$--index-normal + 1};
+      }
+    }
+  }
+
+  @include e(mask) {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    background-color: $--color-white;
+    opacity: 0.24;
+    transition: .2s;
+  }
+}

+ 134 - 0
packages/theme-chalk/src/carousel.scss

@@ -0,0 +1,134 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(carousel) {
+  overflow-x: hidden;
+  position: relative;
+
+  @include e(container) {
+    position: relative;
+    height: 300px;
+  }
+
+  @include e(arrow) {
+    border: none;
+    outline: none;
+    padding: 0;
+    margin: 0;
+    height: $--carousel-arrow-size;
+    width: $--carousel-arrow-size;
+    cursor: pointer;
+    transition: .3s;
+    border-radius: 50%;
+    background-color: $--carousel-arrow-background;
+    color: $--color-white;
+    position: absolute;
+    top: 50%;
+    z-index: 10;
+    transform: translateY(-50%);
+    text-align: center;
+    font-size: $--carousel-arrow-font-size;
+
+    @include m(left) {
+      left: 16px;
+    }
+
+    @include m(right) {
+      right: 16px;
+    }
+
+    &:hover {
+      background-color: $--carousel-arrow-hover-background;
+    }
+
+    & i {
+      cursor: pointer;
+    }
+  }
+
+  @include e(indicators) {
+    position: absolute;
+    list-style: none;
+    bottom: 0;
+    left: 50%;
+    transform: translateX(-50%);
+    margin: 0;
+    padding: 0;
+    z-index: #{$--index-normal + 1};
+
+    @include m(outside) {
+      bottom: #{$--carousel-indicator-height + $--carousel-indicator-padding-vertical * 2};
+      text-align: center;
+      position: static;
+      transform: none;
+      .el-carousel__indicator:hover button {
+        opacity: 0.64;
+      }
+      button {
+        background-color: $--carousel-indicator-out-color;
+        opacity: 0.24;
+      }
+    }
+
+    @include m(labels) {
+      left: 0;
+      right: 0;
+      transform: none;
+      text-align: center;
+
+      .el-carousel__button {
+        height: auto;
+        width: auto;
+        padding: 2px 18px;
+        font-size: 12px;
+      }
+
+      .el-carousel__indicator {
+        padding: 6px 4px;
+      }
+    }
+  }
+
+  @include e(indicator) {
+    display: inline-block;
+    background-color: transparent;
+    padding: $--carousel-indicator-padding-vertical $--carousel-indicator-padding-horizontal;
+    cursor: pointer;
+
+    &:hover button {
+      opacity: 0.72;
+    }
+
+    @include when(active) {
+      button {
+        opacity: 1;
+      }
+    }
+  }
+
+  @include e(button) {
+    display: block;
+    opacity: 0.48;
+    width: $--carousel-indicator-width;
+    height: $--carousel-indicator-height;
+    background-color: $--color-white;
+    border: none;
+    outline: none;
+    padding: 0;
+    margin: 0;
+    cursor: pointer;
+    transition: .3s;
+  }
+}
+
+.carousel-arrow-left-enter,
+.carousel-arrow-left-leave-active {
+  transform: translateY(-50%) translateX(-10px);
+  opacity: 0;
+}
+
+.carousel-arrow-right-enter,
+.carousel-arrow-right-leave-active {
+  transform: translateY(-50%) translateX(10px);
+  opacity: 0;
+}

+ 172 - 0
packages/theme-chalk/src/cascader.scss

@@ -0,0 +1,172 @@
+@import "mixins/mixins";
+@import "./input.scss";
+@import "common/var";
+
+@include b(cascader) {
+  display: inline-block;
+  position: relative;
+
+  .el-input,
+  .el-input__inner {
+    cursor: pointer;
+  }
+
+  .el-input__icon {
+    transition: none;
+  }
+
+  .el-icon-caret-bottom {
+    transition: transform .3s;
+
+    @include when(reverse) {
+      transform: rotateZ(180deg);
+    }
+  }
+
+  .el-icon-circle-close {
+    z-index: #{$--index-normal + 1};
+  }
+
+  @include e(label) {
+    position: absolute;
+    left: 0;
+    top: 0;
+    height: 100%;
+    line-height: 36px;
+    padding: 0 25px 0 10px;
+    color: $--input-color;
+    width: 100%;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    box-sizing: border-box;
+    cursor: pointer;
+    font-size: 14px;
+    text-align: left;
+    span {
+      color: $--color-black;
+    }
+  }
+
+  @include m(large) {
+    font-size: $--input-large-font-size;
+
+    .el-cascader__label {
+      line-height: #{$--input-large-height - 2};
+    }
+  }
+  @include m(small) {
+    font-size: $--input-small-font-size;
+
+    .el-cascader__label {
+      line-height: #{$--input-small-height - 2};
+    }
+  }
+  @include when(disabled) {
+    .el-cascader__label {
+      z-index: #{$--index-normal + 1};
+      color: $--disabled-color-base;
+    }
+  }
+}
+
+@include b(cascader-menus) {
+  white-space: nowrap;
+  background: #fff;
+  position: absolute;
+  margin: 5px 0;
+  z-index: #{$--index-normal + 1};
+  border: $--select-dropdown-border;
+  border-radius: $--border-radius-small;
+  box-shadow: $--select-dropdown-shadow;
+}
+
+@include b(cascader-menu) {
+  display: inline-block;
+  vertical-align: top;
+  height: 204px;
+  overflow: auto;
+  border-right: $--select-dropdown-border;
+  background-color: $--select-dropdown-background;
+  box-sizing: border-box;
+  margin: 0;
+  padding: 6px 0;
+  min-width: 160px;
+
+  &:last-child {
+    border-right: 0;
+  }
+
+  @include e(item) {
+    font-size: $--select-font-size;
+    padding: 8px 30px 8px 10px;
+    position: relative;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    color: $--select-option-color;
+    height: $--select-option-height;
+    line-height: 1.5;
+    box-sizing: border-box;
+    cursor: pointer;
+
+    @include e(keyword) {
+      font-weight: bold;
+    }
+
+    @include m(extensible) {
+      &:after {
+        font-family: 'element-icons';
+        content: "\e606";
+        font-size: 12px;
+        transform: scale(0.8);
+        color: rgb(191, 203, 217);
+        position: absolute;
+        right: 10px;
+        margin-top: 1px;
+      }
+    }
+
+    @include when(disabled) {
+      color: $--select-option-disabled-color;
+      background-color: $--select-option-disabled-background;
+      cursor: not-allowed;
+
+      &:hover {
+        background-color: $--color-white;
+      }
+    }
+
+    @include when(active) {
+      color: $--color-white;
+      background-color: $--select-option-selected;
+
+      &:hover {
+        background-color: $--select-option-selected-hover;
+      }
+    }
+
+    &:hover {
+      background-color: $--select-option-hover-background;
+    }
+
+    &.selected {
+      color: $--color-white;
+      background-color: $--select-option-selected;
+
+      &.hover {
+        background-color: $--select-option-selected-hover;
+      }
+    }
+  }
+
+  @include m(flexible) {
+    height: auto;
+    max-height: 180px;
+    overflow: auto;
+
+    .el-cascader-menu__item {
+      overflow: visible;
+    }
+  }
+}

+ 0 - 0
packages/theme-chalk/src/checkbox-button.scss


+ 0 - 0
packages/theme-chalk/src/checkbox-group.scss


+ 256 - 0
packages/theme-chalk/src/checkbox.scss

@@ -0,0 +1,256 @@
+@import "common/var";
+@import "mixins/mixins";
+@import "mixins/_button";
+@import "mixins/utils";
+
+@include b(checkbox) {
+  color: $--checkbox-color;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  @include utils-user-select(none);
+
+  @include e(input) {
+    white-space: nowrap;
+    cursor: pointer;
+    outline: none;
+    display: inline-block;
+    line-height: 1;
+    position: relative;
+    vertical-align: middle;
+
+    @include when(disabled) {
+      .el-checkbox__inner {
+        background-color: $--checkbox-disabled-input-fill;
+        border-color: $--checkbox-disabled-input-border-color;
+        cursor: not-allowed;
+
+        &::after {
+          cursor: not-allowed;
+          border-color: $--checkbox-disabled-icon-color;
+        }
+
+        & + .el-checkbox__label {
+          cursor: not-allowed;
+        }
+      }
+      &.is-checked {
+        .el-checkbox__inner {
+          background-color: $--checkbox-disabled-checked-input-fill;
+          border-color: $--checkbox-disabled-checked-input-border-color;
+
+          &::after {
+            border-color: $--checkbox-disabled-checked-icon-color;
+          }
+        }
+      }
+      &.is-indeterminate {
+        .el-checkbox__inner {
+          background-color: $--checkbox-disabled-checked-input-fill;
+          border-color: $--checkbox-disabled-checked-input-border-color;
+
+          &::before {
+            border-color: $--checkbox-disabled-checked-icon-color;
+          }
+        }
+      }
+      & + .el-checkbox__label {
+        color: $--disabled-color-base;
+        cursor: not-allowed;
+      }
+    }
+    @include when(checked) {
+      .el-checkbox__inner {
+        background-color: $--checkbox-checked-input-fill;
+        border-color: $--checkbox-checked-input-border-color;
+
+        &::after {
+          transform: rotate(45deg) scaleY(1);
+        }
+      }
+    }
+    @include when(focus) { /*focus时 视觉上区分*/
+      .el-checkbox__inner {
+        border-color: $--checkbox-input-border-color-hover;
+        box-shadow: 0 0 1px 0 $--checkbox-input-border-color-hover;
+      }
+    }
+    @include when(indeterminate) {
+      .el-checkbox__inner {
+        background-color: $--checkbox-checked-input-fill;
+        border-color: $--checkbox-checked-input-border-color;
+
+        &::before {
+          content: '';
+          position: absolute;
+          display: block;
+          border: 1px solid $--checkbox-checked-icon-color;
+          margin-top: -1px;
+          left: 3px;
+          right: 3px;
+          top: 50%;
+        }
+
+        &::after {
+          display: none;
+        }
+      }
+    }
+  }
+  @include e(inner) {
+    display: inline-block;
+    position: relative;
+    border: $--checkbox-input-border;
+    border-radius: $--checkbox-input-border-radius;
+    box-sizing: border-box;
+    width: $--checkbox-input-width;
+    height: $--checkbox-input-height;
+    background-color: $--checkbox-input-fill;
+    z-index: $--index-normal;
+    transition: border-color .25s cubic-bezier(.71,-.46,.29,1.46),
+    background-color .25s cubic-bezier(.71,-.46,.29,1.46);
+
+    &:hover {
+      border-color: $--checkbox-input-border-color-hover;
+    }
+
+    &::after {
+      box-sizing: content-box;
+      content: "";
+      border: 2px solid $--checkbox-checked-icon-color;
+      border-left: 0;
+      border-top: 0;
+      height: 8px;
+      left: 5px;
+      position: absolute;
+      top: 1px;
+      transform: rotate(45deg) scaleY(0);
+      width: 4px;
+      transition: transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;
+      transform-origin: center;
+    }
+  }
+
+  @include e(original) {
+    opacity: 0;
+    outline: none;
+    position: absolute;
+    margin: 0;
+    width: 0;
+    height: 0;
+    left: -999px;
+  }
+
+  @include e(label) {
+    font-size: $--checkbox-font-size;
+    padding-left: 5px;
+  }
+
+  & + .el-checkbox {
+    margin-left: 15px;
+  }
+}
+
+@include b(checkbox-button) {
+  position: relative;
+  display: inline-block;
+
+  @include e(inner) {
+    display: inline-block;
+    line-height: 1;
+    white-space: nowrap;
+    vertical-align: middle;
+    cursor: pointer;
+    background: $--button-default-fill;
+    border: $--border-base;
+    border-left: 0;
+    color: $--button-default-color;
+    -webkit-appearance: none;
+    text-align: center;
+    box-sizing: border-box;
+    outline: none;
+    margin: 0;
+    position: relative;
+    transition: $--all-transition;
+    @include utils-user-select(none);
+
+    @include button-size($--button-padding-vertical, $--button-padding-horizontal, $--button-font-size, 0);
+
+    &:hover {
+      color: $--color-primary;
+    }
+
+    & [class*="el-icon-"] {
+      line-height: 0.9;
+
+      & + span {
+        margin-left: 5px;
+      }
+    }
+  }
+
+  @include e(original) {
+    opacity: 0;
+    outline: none;
+    position: absolute;
+    margin: 0;
+    left: -999px;
+  }
+
+  &.is-checked {
+    & .el-checkbox-button__inner {
+      color: $--checkbox-button-checked-color;
+      background-color: $--checkbox-button-checked-fill;
+      border-color: $--checkbox-button-checked-border-color;
+      box-shadow: -1px 0 0 0 $--checkbox-button-checked-border-color;
+    }
+  }
+
+  &.is-disabled {
+    & .el-checkbox-button__inner {
+      color: $--button-disabled-color;
+      cursor: not-allowed;
+      background-image: none;
+      background-color: $--button-disabled-fill;
+      border-color: $--button-disabled-border;
+      box-shadow: none;
+    }
+  }
+
+  &:first-child {
+    .el-checkbox-button__inner {
+      border-left: $--border-base;
+      border-radius: $--border-radius-base 0 0 $--border-radius-base;
+      box-shadow: none !important;
+    }
+  }
+
+  &.is-focus {
+    & .el-checkbox-button__inner {
+      border-color: $--checkbox-button-checked-border-color;
+      box-shadow: 0 0 1px 0 $--checkbox-button-checked-border-color !important;
+    }
+  }
+
+  &:last-child {
+    .el-checkbox-button__inner {
+      border-radius: 0 $--border-radius-base $--border-radius-base 0;
+    }
+  }
+  @include m(medium) {
+    & .el-checkbox-button__inner {
+      @include button-size($--button-medium-padding-vertical, $--button-medium-padding-horizontal, $--button-medium-font-size, 0);
+    }
+  }
+  @include m(small) {
+    & .el-checkbox-button__inner {
+      @include button-size($--button-small-padding-vertical, $--button-small-padding-horizontal, $--button-small-font-size, 0);
+    }
+  }
+  @include m(mini) {
+    & .el-checkbox-button__inner {
+      @include button-size($--button-mini-padding-vertical, $--button-mini-padding-horizontal, $--button-mini-font-size, 0);
+    }
+  }
+}

+ 100 - 0
packages/theme-chalk/src/col.scss

@@ -0,0 +1,100 @@
+@import "./common/var.scss";
+
+.el-col-1, .el-col-2, .el-col-3, .el-col-4, .el-col-5, .el-col-6, .el-col-7, .el-col-8, .el-col-9, .el-col-10, .el-col-11, .el-col-12, .el-col-13, .el-col-14, .el-col-15, .el-col-16, .el-col-17, .el-col-18, .el-col-19, .el-col-20, .el-col-21, .el-col-22, .el-col-23, .el-col-24 {
+  float: left;
+  box-sizing: border-box;
+}
+.el-col-0 {
+  width: 0;
+}
+
+@for $i from 0 through 24 {
+  .el-col-#{$i} {
+    width: (1 / 24 * $i * 100) * 1%;
+  }
+  .el-col-offset-#{$i} {
+    margin-left: (1 / 24 * $i * 100) * 1%;
+  }
+  .el-col-pull-#{$i} {
+    position: relative;
+    right: (1 / 24 * $i * 100) * 1%;
+  }
+  .el-col-push-#{$i} {
+    position: relative;
+    left: (1 / 24 * $i * 100) * 1%;
+  }
+}
+
+@media (max-width: 768px) {
+  @for $i from 0 through 24 {
+    .el-col-xs-#{$i} {
+      width: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-xs-offset-#{$i} {
+      margin-left: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-xs-pull-#{$i} {
+      position: relative;
+      right: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-xs-push-#{$i} {
+      position: relative;
+      left: (1 / 24 * $i * 100) * 1%;
+    }
+  }
+}
+
+@media (min-width: 768px) {
+  @for $i from 0 through 24 {
+    .el-col-sm-#{$i} {
+      width: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-sm-offset-#{$i} {
+      margin-left: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-sm-pull-#{$i} {
+      position: relative;
+      right: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-sm-push-#{$i} {
+      position: relative;
+      left: (1 / 24 * $i * 100) * 1%;
+    }
+  }
+}
+@media (min-width: 992px) {
+  @for $i from 0 through 24 {
+    .el-col-md-#{$i} {
+      width: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-md-offset-#{$i} {
+      margin-left: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-md-pull-#{$i} {
+      position: relative;
+      right: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-md-push-#{$i} {
+      position: relative;
+      left: (1 / 24 * $i * 100) * 1%;
+    }
+  }
+}
+@media (min-width: 1200px) {
+  @for $i from 0 through 24 {
+    .el-col-lg-#{$i} {
+      width: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-lg-offset-#{$i} {
+      margin-left: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-lg-pull-#{$i} {
+      position: relative;
+      right: (1 / 24 * $i * 100) * 1%;
+    }
+    .el-col-lg-push-#{$i} {
+      position: relative;
+      left: (1 / 24 * $i * 100) * 1%;
+    }
+  }
+}

+ 0 - 0
packages/theme-chalk/src/collapse-item.scss


+ 51 - 0
packages/theme-chalk/src/collapse.scss

@@ -0,0 +1,51 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(collapse) {
+  border: 1px solid $--collapse-border-color;
+  border-radius: $--collapse-border-radius;
+}
+@include b(collapse-item) {
+  @include e(header) {
+    height: $--collapse-header-height;
+    line-height: $--collapse-header-height;
+    padding-left: 15px;
+    background-color: $--collapse-header-fill;
+    color: $--collapse-header-color;
+    cursor: pointer;
+    border-bottom: 1px solid $--collapse-border-color;
+    font-size: $--collapse-header-size;
+
+    @include e(arrow) {
+      margin-right: 8px;
+      transition: transform .3s;
+    }
+  }
+
+  @include e(wrap) {
+    will-change: height;
+    background-color: $--collapse-content-fill;
+    overflow: hidden;
+    box-sizing: border-box;
+    border-bottom: 1px solid $--collapse-border-color;
+  }
+
+  @include e(content) {
+    padding: 10px 15px;
+    font-size: $--collapse-content-size;
+    color: $--collapse-content-color;
+    line-height: 1.769230769230769;
+  }
+
+  @include when(active) {
+    > .el-collapse-item__header {
+      .el-collapse-item__arrow {
+        transform: rotate(90deg);
+      }
+    }
+  }
+
+  &:last-child {
+    margin-bottom: -1px;
+  }
+}

+ 264 - 0
packages/theme-chalk/src/color-picker.scss

@@ -0,0 +1,264 @@
+@import "common/var";
+
+@include b(color-hue-slider) {
+  position: relative;
+  box-sizing: border-box;
+  width: 280px;
+  height: 12px;
+  background-color: #f00;
+  padding: 0 2px;
+
+  @include e(bar) {
+    position: relative;
+    background: linear-gradient(
+      to right, #f00 0%,
+      #ff0 17%, #0f0 33%,
+      #0ff 50%, #00f 67%,
+      #f0f 83%, #f00 100%);
+    height: 100%;
+  }
+
+  @include e(thumb) {
+    position: absolute;
+    cursor: pointer;
+    box-sizing: border-box;
+    left: 0;
+    top: 0;
+    width: 4px;
+    height: 100%;
+    border-radius: 1px;
+    background: #fff;
+    border: 1px solid #f0f0f0;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+    z-index: 1;
+  }
+
+  @include when(vertical) {
+    width: 12px;
+    height: 180px;
+    padding: 2px 0;
+
+    .el-color-hue-slider__bar {
+      background: linear-gradient(
+        to bottom, #f00 0%,
+        #ff0 17%, #0f0 33%,
+        #0ff 50%, #00f 67%,
+        #f0f 83%, #f00 100%);
+    }
+
+    .el-color-hue-slider__thumb {
+      left: 0;
+      top: 0;
+      width: 100%;
+      height: 4px;
+    }
+  }
+}
+
+@include b(color-svpanel) {
+  position: relative;
+  width: 280px;
+  height: 180px;
+
+  @include e((white, black)) {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+  }
+
+  @include e(white) {
+    background: linear-gradient(to right, #fff, rgba(255,255,255,0));
+  }
+
+  @include e(black) {
+    background: linear-gradient(to top, #000, rgba(0,0,0,0));
+  }
+
+  @include e(cursor) {
+    position: absolute;
+
+    > div {
+      cursor: head;
+      width: 4px;
+      height: 4px;
+      box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,0.3), 0 0 1px 2px rgba(0,0,0,0.4);
+      border-radius: 50%;
+      transform: translate(-2px, -2px);
+    }
+  }
+}
+
+@include b(color-alpha-slider) {
+  position: relative;
+  box-sizing: border-box;
+  width: 280px;
+  height: 12px;
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+
+  @include e(bar) {
+    position: relative;
+    background: linear-gradient(
+      to right, rgba(255, 255, 255, 0) 0%,
+      rgba(255, 255, 255, 1) 100%);
+    height: 100%;
+  }
+
+  @include e(thumb) {
+    position: absolute;
+    cursor: pointer;
+    box-sizing: border-box;
+    left: 0;
+    top: 0;
+    width: 4px;
+    height: 100%;
+    border-radius: 1px;
+    background: #fff;
+    border: 1px solid #f0f0f0;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+    z-index: 1;
+  }
+
+  @include when(vertical) {
+    width: 20px;
+    height: 180px;
+
+    .el-color-alpha-slider__bar {
+      background: linear-gradient(
+        to bottom, rgba(255, 255, 255, 0) 0%,
+        rgba(255, 255, 255, 1) 100%);
+    }
+
+    .el-color-alpha-slider__thumb {
+      left: 0;
+      top: 0;
+      width: 100%;
+      height: 4px;
+    }
+  }
+}
+
+@include b(color-dropdown) {
+  width: 300px;
+
+  @include e(main-wrapper) {
+    margin-bottom: 6px;
+
+    &::after {
+      content: "";
+      display: table;
+      clear: both;
+    }
+  }
+
+  @include e(btns) {
+    margin-top: 6px;
+    text-align: right;
+  }
+
+  @include e(value) {
+    float: left;
+    line-height: 26px;
+    font-size: 12px;
+    color: $--color-black;
+  }
+
+  @include e(btn) {
+    border: 1px solid #dcdcdc;
+    color: #333;
+    line-height: 24px;
+    border-radius: 2px;
+    padding: 0 20px;
+    cursor: pointer;
+    background-color: transparent;
+    outline: none;
+    font-size: 12px;
+
+    &[disabled] {
+      color: #cccccc;
+      cursor: not-allowed;
+    }
+    &:hover {
+      color: $--color-primary;
+      border-color: $--color-primary;
+    }
+  }
+
+  @include e(link-btn) {
+    cursor: pointer;
+    color: $--color-primary;
+    text-decoration: none;
+    padding: 15px;
+    font-size: 12px;
+    &:hover {
+      color: tint($--color-primary, $--button-hover-tint-percent);
+    }
+  }
+}
+
+@include b(color-picker) {
+  display: inline-block;
+  position: relative;
+  line-height: normal;
+
+  @include e(trigger) {
+    display: inline-block;
+    box-sizing: border-box;
+    height: 36px;
+    padding: 6px;
+    border: 1px solid #bfcbd9;
+    border-radius: 4px;
+    font-size: 0;
+  }
+
+  @include e(color) {
+    position: relative;
+    display: inline-block;
+    box-sizing: border-box;
+    border: 1px solid #666;
+    width: 22px;
+    height: 22px;
+    text-align: center;
+
+    @include when(alpha) {
+      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+    }
+  }
+
+  @include e(color-inner) {
+    position: absolute;
+    left: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+  }
+
+  @include e(empty) {
+    font-size: 12px;
+    vertical-align: middle;
+    color: #666;
+    position: absolute;
+    top: 4px;
+    left: 4px;
+  }
+
+  @include e(icon) {
+    display: inline-block;
+    position: relative;
+    top: -6px;
+    margin-left: 8px;
+    width: 12px;
+    color: #888;
+    font-size: 12px;
+  }
+
+  @include e(panel) {
+    position: absolute;
+    z-index: 10;
+    padding: 6px;
+    background-color: $--color-white;
+    border: 1px solid $--color-black;
+    box-shadow: $--dropdown-menu-box-shadow;
+  }
+}

+ 33 - 0
packages/theme-chalk/src/common/popup.scss

@@ -0,0 +1,33 @@
+.v-modal-enter {
+  animation: v-modal-in .2s ease;
+}
+
+.v-modal-leave {
+  animation: v-modal-out .2s ease forwards;
+}
+
+@keyframes v-modal-in {
+  0% {
+    opacity: 0;
+  }
+  100% {
+  }
+}
+
+@keyframes v-modal-out {
+  0% {
+  }
+  100% {
+    opacity: 0;
+  }
+}
+
+.v-modal {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  opacity: 0.5;
+  background: #000;
+}

+ 99 - 0
packages/theme-chalk/src/common/transition.scss

@@ -0,0 +1,99 @@
+@import "var";
+
+.fade-in-linear-enter-active,
+.fade-in-linear-leave-active {
+  transition: $--fade-linear-transition;
+}
+.fade-in-linear-enter,
+.fade-in-linear-leave,
+.fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.el-fade-in-linear-enter-active,
+.el-fade-in-linear-leave-active {
+  transition: $--fade-linear-transition;
+}
+.el-fade-in-linear-enter,
+.el-fade-in-linear-leave,
+.el-fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.el-fade-in-enter-active,
+.el-fade-in-leave-active {
+  transition: all .3s cubic-bezier(.55,0,.1,1);
+}
+.el-fade-in-enter,
+.el-fade-in-leave-active {
+  opacity: 0;
+}
+
+.el-zoom-in-center-enter-active,
+.el-zoom-in-center-leave-active {
+  transition: all .3s cubic-bezier(.55,0,.1,1);
+}
+.el-zoom-in-center-enter,
+.el-zoom-in-center-leave-active {
+  opacity: 0;
+  transform: scaleX(0);
+}
+
+.el-zoom-in-top-enter-active,
+.el-zoom-in-top-leave-active {
+  opacity: 1;
+  transform: scaleY(1);
+  transition: $--md-fade-transition;
+  transform-origin: center top;
+}
+.el-zoom-in-top-enter,
+.el-zoom-in-top-leave-active {
+  opacity: 0;
+  transform: scaleY(0);
+}
+
+.el-zoom-in-bottom-enter-active,
+.el-zoom-in-bottom-leave-active {
+  opacity: 1;
+  transform: scaleY(1);
+  transition: $--md-fade-transition;
+  transform-origin: center bottom;
+}
+.el-zoom-in-bottom-enter,
+.el-zoom-in-bottom-leave-active {
+  opacity: 0;
+  transform: scaleY(0);
+}
+
+.el-zoom-in-left-enter-active,
+.el-zoom-in-left-leave-active {
+  opacity: 1;
+  transform: scale(1, 1);
+  transition: $--md-fade-transition;
+  transform-origin: top left;
+}
+.el-zoom-in-left-enter,
+.el-zoom-in-left-leave-active {
+  opacity: 0;
+  transform: scale(.45, .45);
+}
+
+.collapse-transition {
+  transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+}
+.horizontal-collapse-transition {
+  transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+}
+
+.el-list-enter-active,
+.el-list-leave-active {
+  transition: all 1s;
+}
+.el-list-enter, .el-list-leave-active {
+  opacity: 0;
+  transform: translateY(-30px);
+}
+
+.el-opacity-transition {
+  transition: opacity .3s cubic-bezier(.55,0,.1,1);
+}

+ 624 - 0
packages/theme-chalk/src/common/var.scss

@@ -0,0 +1,624 @@
+/* Transition
+-------------------------- */
+$--all-transition: all .3s cubic-bezier(.645,.045,.355,1);
+$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1);
+$--fade-linear-transition: opacity 200ms linear;
+$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1) 100ms, opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) 100ms;
+$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1);
+$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1);
+
+/* Colors
+-------------------------- */
+$--color-white: #fff;
+$--color-black: #000;
+
+$--color-primary: #1989fa;
+$--color-primary-light-1: mix($--color-white, $--color-primary, 10%);
+$--color-primary-light-2: mix($--color-white, $--color-primary, 20%);
+$--color-primary-light-3: mix($--color-white, $--color-primary, 30%);
+$--color-primary-light-4: mix($--color-white, $--color-primary, 40%);
+$--color-primary-light-5: mix($--color-white, $--color-primary, 50%);
+$--color-primary-light-6: mix($--color-white, $--color-primary, 60%);
+$--color-primary-light-7: mix($--color-white, $--color-primary, 70%);
+$--color-primary-light-8: mix($--color-white, $--color-primary, 80%);
+$--color-primary-light-9: mix($--color-white, $--color-primary, 90%);
+
+$--color-success: #67c23a;
+$--color-warning: #eb9e05;
+$--color-danger: #fa5555;
+$--color-info: #878d99;
+
+$--color-success-light: mix($--color-white, $--color-success, 80%);
+$--color-warning-light: mix($--color-white, $--color-warning, 80%);
+$--color-danger-light: mix($--color-white, $--color-danger, 80%);
+$--color-info-light: mix($--color-white, $--color-info, 80%);
+
+$--color-success-lighter: mix($--color-white, $--color-success, 90%);
+$--color-warning-lighter: mix($--color-white, $--color-warning, 90%);
+$--color-danger-lighter: mix($--color-white, $--color-danger, 90%);
+$--color-info-lighter: mix($--color-white, $--color-info, 90%);
+
+$--color-text-primary: #2d2f33;
+$--color-text-regular: #5a5e66;
+$--color-text-secondary: #878d99;
+$--color-text-placeholder: #b4bccc;
+
+/* Link
+-------------------------- */
+$--link-color: $--color-primary-light-2;
+$--link-hover-color: $--color-primary;
+
+/* Border
+-------------------------- */
+$--border-width-base: 1px;
+$--border-style-base: solid;
+$--border-color-base: #d8dce6;
+$--border-color-light: #dfe4ed;
+$--border-color-lighter: #e6ebf5;
+$--border-color-extra-light: #edf2fc;
+$--border-color-hover: $--color-text-placeholder;
+$--border-base: $--border-width-base $--border-style-base $--border-color-base;
+$--border-radius-base: 4px;
+$--border-radius-small: 2px;
+$--border-radius-circle: 100%;
+
+/* Box-shadow
+-------------------------- */
+$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
+$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12);
+
+/* Fill
+-------------------------- */
+$--fill-base: $--color-white;
+
+/* Font
+-------------------------- */
+$--font-size-base: 14px;
+$--font-color-base: #5a5e66;
+$--font-color-disabled-base: #bbb;
+
+/* Size
+-------------------------- */
+$--size-base: 14px;
+
+/* z-index
+-------------------------- */
+$--index-normal: 1;
+$--index-top: 1000;
+$--index-popper: 2000;
+
+/* Disable base
+-------------------------- */
+$--disabled-fill-base: $--color-primary-light-9;
+$--disabled-color-base: #bbb;
+$--disabled-border-base: $--color-text-placeholder;
+
+/* Icon
+-------------------------- */
+$--icon-color: #666;
+
+/* Checkbox
+-------------------------- */
+$--checkbox-font-size: 14px;
+$--checkbox-color: $--color-text-regular;
+$--checkbox-input-height: 18px;
+$--checkbox-input-width: 18px;
+$--checkbox-input-border-radius: $--border-radius-base;
+$--checkbox-input-fill: $--color-white;
+$--checkbox-input-border: $--border-base;
+$--checkbox-input-border-color: $--border-color-base;
+$--checkbox-icon-color: $--color-white;
+
+$--checkbox-disabled-input-border-color: $--disabled-border-base;
+$--checkbox-disabled-input-fill: $--disabled-fill-base;
+$--checkbox-disabled-icon-color: $--disabled-fill-base;
+
+$--checkbox-disabled-checked-input-fill: $--disabled-border-base;
+$--checkbox-disabled-checked-input-border-color: $--disabled-border-base;
+$--checkbox-disabled-checked-icon-color: $--color-white;
+
+$--checkbox-checked-input-border-color: $--color-primary-light-2;
+$--checkbox-checked-input-fill: $--color-primary;
+$--checkbox-checked-icon-color: $--fill-base;
+
+$--checkbox-input-border-color-hover: $--color-primary;
+
+$--checkbox-button-font-size: $--font-size-base;
+$--checkbox-button-checked-fill: $--color-primary;
+$--checkbox-button-checked-color: $--color-white;
+$--checkbox-button-checked-border-color: $--color-primary;
+
+
+
+/* Radio
+-------------------------- */
+$--radio-font-size: 14px;
+$--radio-color: $--color-text-primary;
+$--radio-input-height: 18px;
+$--radio-input-width: 18px;
+$--radio-input-border-radius: $--border-radius-circle;
+$--radio-input-fill: $--color-white;
+$--radio-input-border: $--border-base;
+$--radio-input-border-color: $--border-color-base;
+$--radio-icon-color: $--color-white;
+
+$--radio-disabled-input-border-color: $--disabled-border-base;
+$--radio-disabled-input-fill: $--disabled-fill-base;
+$--radio-disabled-icon-color: $--disabled-fill-base;
+
+$--radio-disabled-checked-input-fill: $--disabled-border-base;
+$--radio-disabled-checked-input-border-color: $--disabled-border-base;
+$--radio-disabled-checked-icon-color: $--color-white;
+
+$--radio-checked-input-border-color: $--color-primary;
+$--radio-checked-input-fill: $--color-white;
+$--radio-checked-icon-color: $--color-primary;
+
+$--radio-input-border-color-hover: $--color-primary;
+
+$--radio-button-font-size: $--font-size-base;
+$--radio-button-checked-fill: $--color-primary;
+$--radio-button-checked-color: $--color-white;
+$--radio-button-checked-border-color: $--color-primary;
+
+/* Select
+-------------------------- */
+$--select-border-color-hover: $--border-color-hover;
+$--select-disabled-border: $--disabled-border-base;
+$--select-font-size: $--font-size-base;
+$--select-close-hover-color: $--color-text-placeholder;
+
+$--select-input-color: $--color-text-placeholder;
+$--select-multiple-input-color: #666;
+$--select-input-focus-background: $--color-primary;
+$--select-input-font-size: 12px;
+
+$--select-tag-height: 24px;
+$--select-tag-color: $--color-white;
+$--select-tag-background: $--color-primary;
+
+$--select-option-color: $--link-color;
+$--select-option-disabled-color: $--color-text-placeholder;
+$--select-option-disabled-background: $--color-white;
+$--select-option-height: 36px;
+$--select-option-hover-background: $--color-text-secondary;
+$--select-option-selected: $--color-primary;
+$--select-option-selected-hover: shade($--color-primary, 0.12);
+
+$--select-group-color: #999;
+$--select-group-height: 30px;
+$--select-group-font-size: 12px;
+
+$--select-dropdown-background: $--color-white;
+$--select-dropdown-shadow: $--box-shadow-base;
+$--select-dropdown-empty-color: #999;
+$--select-dropdown-max-height: 274px;
+$--select-dropdown-padding: 6px 0;
+$--select-dropdown-empty-padding: 10px 0;
+$--select-dropdown-border: solid 1px $--disabled-border-base;
+
+/* Alert
+-------------------------- */
+$--alert-padding: 8px 16px;
+$--alert-border-radius: $--border-radius-base;
+$--alert-title-font-size: 13px;
+$--alert-description-font-size: 12px;
+$--alert-close-font-size: 12px;
+$--alert-close-customed-font-size: 13px;
+
+$--alert-success-color: $--color-success;
+$--alert-info-color: $--color-info;
+$--alert-warning-color: $--color-warning;
+$--alert-danger-color: $--color-danger;
+
+$--alert-icon-size: 16px;
+$--alert-icon-large-size: 28px;
+
+/* Message Box
+-------------------------- */
+$--msgbox-width: 420px;
+$--msgbox-border-radius: 3px;
+$--msgbox-font-size: 16px;
+$--msgbox-content-font-size: 14px;
+$--msgbox-content-color: $--link-color;
+$--msgbox-error-font-size: 12px;
+
+$--msgbox-success-color: $--color-success;
+$--msgbox-info-color: $--color-info;
+$--msgbox-warning-color: $--color-warning;
+$--msgbox-danger-color: $--color-danger;
+
+/* Message
+-------------------------- */
+$--message-shadow: $--box-shadow-base;
+$--message-min-width: 300px;
+$--message-padding: 10px 12px;
+$--message-content-color: $--color-text-regular;
+$--message-close-color: $--color-text-placeholder;
+$--message-close-hover-color: $--color-text-secondary;
+
+$--message-success-color: $--color-success;
+$--message-info-color: $--color-info;
+$--message-warning-color: $--color-warning;
+$--message-danger-color: $--color-danger;
+
+/* Notification
+-------------------------- */
+$--notification-width: 330px;
+$--notification-padding: 20px;
+$--notification-shadow: $--box-shadow-base;
+$--notification-icon-size: 40px;
+$--notification-font-size: $--font-size-base;
+$--notification-color: $--border-color-hover;
+$--notification-title-font-size: 16px;
+$--notification-title-color: $--color-text-primary;
+
+$--notification-close-color: $--color-text-placeholder;
+$--notification-close-hover-color: $--color-text-secondary;
+
+$--notification-success-color: $--color-success;
+$--notification-info-color: $--color-info;
+$--notification-warning-color: $--color-warning;
+$--notification-danger-color: $--color-danger;
+
+/* Input
+-------------------------- */
+$--input-font-size: $--font-size-base;
+$--input-color: $--font-color-base;
+$--input-width: 140px;
+$--input-height: 36px;
+$--input-border: $--border-base;
+$--input-border-color: $--border-color-base;
+$--input-border-radius: $--border-radius-base;
+$--input-border-color-hover: $--border-color-hover;
+$--input-fill: $--color-white;
+$--input-fill-disabled: $--disabled-fill-base;
+$--input-color-disabled: $--font-color-disabled-base;
+$--input-icon-color: $--color-text-placeholder;
+$--input-placeholder-color: $--color-text-placeholder;
+$--input-max-width: 314px;
+
+$--input-hover-border: $--border-color-hover;
+
+$--input-focus-border: $--color-primary;
+$--input-focus-fill: $--color-white;
+
+$--input-disabled-fill: $--disabled-fill-base;
+$--input-disabled-border: $--disabled-border-base;
+$--input-disabled-color: $--disabled-color-base;
+$--input-disabled-placeholder-color: $--color-text-placeholder;
+
+$--input-large-font-size: 16px;
+$--input-large-height: 42px;
+
+$--input-small-font-size: 13px;
+$--input-small-height: 30px;
+
+$--input-mini-font-size: 12px;
+$--input-mini-height: 22px;
+
+/* Cascader
+-------------------------- */
+$--cascader-menu-fill: $--fill-base;
+$--cascader-menu-font-size: $--font-size-base;
+$--cascader-menu-radius: $--border-radius-base;
+$--cascader-menu-border: $--border-base;
+$--cascader-menu-border-color: $--border-color-base;
+$--cascader-menu-border-width: $--border-width-base;
+$--cascader-menu-color: $--font-color-base;
+$--cascader-menu-option-color-active: $--color-text-secondary;
+$--cascader-menu-option-fill-active: rgba($--color-text-secondary, 0.12);
+$--cascader-menu-option-color-hover: $--font-color-base;
+$--cascader-menu-option-fill-hover: rgba($--color-text-primary, 0.06);
+$--cascader-menu-option-color-disabled: #999;
+$--cascader-menu-option-fill-disabled: rgba($--color-black, 0.06);
+$--cascader-menu-option-empty-color: #666;
+$--cascader-menu-group-color: #999;
+$--cascader-menu-shadow: 0 1px 2px rgba($--color-black, 0.14), 0 0 3px rgba($--color-black, 0.14);
+$--cascader-menu-option-pinyin-color: #999;
+$--cascader-menu-submenu-shadow: 1px 1px 2px rgba($--color-black, 0.14), 1px 0 2px rgba($--color-black, 0.14);
+
+/* Group
+-------------------------- */
+$--group-option-flex: 0 0 (1/5) * 100%;
+$--group-option-offset-bottom: 12px;
+$--group-option-fill-hover: rgba($--color-black, 0.06);
+$--group-title-color: $--color-black;
+$--group-title-font-size: $--font-size-base;
+$--group-title-width: 66px;
+
+/* Tab
+-------------------------- */
+$--tab-font-size: $--font-size-base;
+$--tab-border-line: 1px solid #e4e4e4;
+$--tab-header-color-active: $--color-text-secondary;
+$--tab-header-color-hover: $--font-color-base;
+$--tab-header-color: $--font-color-base;
+$--tab-header-fill-active: rgba($--color-black, 0.06);
+$--tab-header-fill-hover: rgba($--color-black, 0.06);
+$--tab-vertical-header-width: 90px;
+$--tab-vertical-header-count-color: $--color-white;
+$--tab-vertical-header-count-fill: $--color-text-secondary;
+
+/* Button
+-------------------------- */
+$--button-font-size: 14px;
+$--button-font-weight: 500;
+$--button-border-radius: $--border-radius-base;
+$--button-padding-vertical: 12px;
+$--button-padding-horizontal: 18px;
+
+$--button-medium-font-size: 14px;
+$--button-medium-border-radius: $--border-radius-base;
+$--button-medium-padding-vertical: 10px;
+$--button-medium-padding-horizontal: 18px;
+
+$--button-small-font-size: 12px;
+$--button-small-border-radius: #{$--border-radius-base - 1};
+$--button-small-padding-vertical: 9px;
+$--button-small-padding-horizontal: 15px;
+
+$--button-mini-font-size: 12px;
+$--button-mini-border-radius: #{$--border-radius-base - 1};
+$--button-mini-padding-vertical: 7px;
+$--button-mini-padding-horizontal: 15px;
+
+$--button-default-color: $--color-text-primary;
+$--button-default-fill: $--color-white;
+$--button-default-border: $--border-color-base;
+
+$--button-disabled-color: $--color-text-secondary;
+$--button-disabled-fill: $--color-white;
+$--button-disabled-border: $--border-color-base;
+
+$--button-primary-border: $--color-primary;
+$--button-primary-color: $--color-white;
+$--button-primary-fill: $--color-primary;
+
+$--button-success-border: $--color-success;
+$--button-success-color: $--color-white;
+$--button-success-fill: $--color-success;
+
+$--button-warning-border: $--color-warning;
+$--button-warning-color: $--color-white;
+$--button-warning-fill: $--color-warning;
+
+$--button-danger-border: $--color-danger;
+$--button-danger-color: $--color-white;
+$--button-danger-fill: $--color-danger;
+
+$--button-info-border: $--color-info;
+$--button-info-color: $--color-white;
+$--button-info-fill: $--color-info;
+
+$--button-hover-tint-percent: 20%;
+$--button-active-shade-percent: 10%;
+
+
+/* cascader
+-------------------------- */
+$--cascader-height: 200px;
+
+/* Switch
+-------------------------- */
+$--switch-on-color: $--color-primary;
+$--switch-off-color: $--color-text-placeholder;
+$--switch-disabled-color: $--color-text-secondary;
+$--switch-disabled-text-color: $--color-text-placeholder;
+
+$--switch-font-size: $--font-size-base;
+$--switch-core-border-radius: 12px;
+$--switch-width: 46px;
+$--switch-height: 22px;
+$--switch-button-size: 16px;
+
+/* Dialog
+-------------------------- */
+$--dialog-background-color: $--color-primary-light-4;
+$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+$--dialog-close-color: $--color-text-placeholder;
+$--dialog-close-hover-color: $--color-primary;
+$--dialog-title-font-size: 16px;
+$--dialog-font-size: 14px;
+
+/* Table
+-------------------------- */
+$--table-border-color: $--border-color-base;
+$--table-text-color: $--color-text-regular;
+$--table-header-background: $--color-text-secondary;
+$--table-footer-background: $--color-text-placeholder;
+
+/* Pagination
+-------------------------- */
+$--pagination-font-size: 13px;
+$--pagination-fill: $--color-white;
+$--pagination-color: $--link-color;
+$--pagination-border-radius: 2px;
+$--pagination-button-color: $--color-text-secondary;
+$--pagination-button-size: 28px;
+$--pagination-button-disabled-color: #e4e4e4;
+$--pagination-button-disabled-fill: $--color-white;
+$--pagination-border-color: $--disabled-border-base;
+$--pagination-hover-fill: $--color-primary;
+$--pagination-hover-color: $--color-white;
+
+/* Popover
+-------------------------- */
+$--popover-fill: $--color-white;
+$--popover-font-size: 12px;
+$--popover-border-color: $--disabled-border-base;
+$--popover-arrow-size: 6px;
+$--popover-padding: 10px;
+$--popover-title-font-size: 13px;
+$--popover-title-color: $--color-text-primary;
+
+/* Tooltip
+-------------------------- */
+$--tooltip-fill: $--color-text-primary;
+$--tooltip-color: $--color-white;
+$--tooltip-font-size: 12px;
+$--tooltip-border-color: $--color-text-primary;
+$--tooltip-arrow-size: 6px;
+$--tooltip-padding: 10px;
+
+/* Tag
+-------------------------- */
+$--tag-padding: 0 5px;
+$--tag-fill: $--border-color-hover;
+$--tag-color: $--color-white;
+$--tag-close-color: #666;
+$--tag-font-size: 12px;
+$--tag-border-radius: 4px;
+
+$--tag-gray-fill: $--color-text-secondary;
+$--tag-gray-border: $--color-text-secondary;
+$--tag-gray-color: $--link-color;
+
+$--tag-primary-fill: rgba($--color-primary,0.10);
+$--tag-primary-border: rgba($--color-primary,0.20);
+$--tag-primary-color: $--color-primary;
+
+$--tag-success-fill: rgba(18,206,102,0.10);
+$--tag-success-border: rgba(18,206,102,0.20);
+$--tag-success-color: $--color-success;
+
+$--tag-warning-fill: rgba(247,186,41,0.10);
+$--tag-warning-border: rgba(247,186,41,0.20);
+$--tag-warning-color: $--color-warning;
+
+$--tag-danger-fill: rgba(255,73,73,0.10);
+$--tag-danger-border: rgba(255,73,73,0.20);
+$--tag-danger-color: $--color-danger;
+
+/* Dropdown
+-------------------------- */
+$--dropdown-menu-box-shadow: $--box-shadow-dark;
+$--dropdown-menuItem-hover-fill: $--color-text-secondary;
+$--dropdown-menuItem-hover-color: $--link-color;
+
+/* Badge
+-------------------------- */
+$--badge-fill: $--color-danger;
+$--badge-radius: 10px;
+$--badge-font-size: 12px;
+$--badge-padding: 6px;
+$--badge-size: 18px;
+
+/* Card
+--------------------------*/
+$--card-border-color: $--disabled-border-base;
+$--card-border-radius: 4px;
+$--card-padding: 20px;
+
+/* Slider
+--------------------------*/
+$--slider-main-background-color: $--color-primary;
+$--slider-runway-background-color: $--color-text-secondary;
+$--slider-button-hover-color: shade($--color-primary, 0.12);
+$--slider-stop-background-color: $--color-text-placeholder;
+$--slider-disable-color: $--color-text-placeholder;
+
+$--slider-margin: 16px 0;
+$--slider-border-radius: 3px;
+$--slider-height: 4px;
+$--slider-button-size: 12px;
+$--slider-button-wrapper-size: 36px;
+$--slider-button-wrapper-offset: -16px;
+
+/* Steps
+--------------------------*/
+$--steps-border-color: $--disabled-border-base;
+$--steps-border-radius: 4px;
+$--steps-padding: 20px;
+
+/* Menu
+--------------------------*/
+$--menu-item-color: $--link-color;
+$--menu-item-fill: $--color-text-placeholder;
+$--menu-item-hover-fill: $--disabled-border-base;
+
+$--dark-menu-item-color: $--link-color;
+$--dark-menu-item-fill: $--color-text-secondary;
+$--dark-menu-item-hover-fill: $--link-color;
+
+/* Rate
+--------------------------*/
+$--rate-height: 20px;
+$--rate-font-size: $--font-size-base;
+$--rate-icon-size: 18px;
+$--rate-icon-margin: 6px;
+$--rate-icon-color: $--color-text-placeholder;
+
+/* DatePicker
+--------------------------*/
+$--datepicker-color: $--link-color;
+$--datepicker-off-color: #ddd;
+$--datepicker-header-color: $--border-color-hover;
+$--datepicker-icon-color: $--color-text-secondary;
+$--datepicker-border-color: $--disabled-border-base;
+$--datepicker-inner-border-color: #e4e4e4;
+$--datepicker-cell-hover-color: $--color-text-secondary;
+$--datepicker-inrange-color: tint($--color-primary, 0.8);
+$--datepicker-inrange-hover-color: tint($--color-primary, 0.64);
+$--datepicker-active-color: $--color-primary;
+$--datepicker-text-hover-color: $--color-primary;
+
+/* Loading
+--------------------------*/
+$--loading-spinner-size: 42px;
+$--loading-fullscreen-spinner-size: 50px;
+
+/* Scrollbar
+--------------------------*/
+$--scrollbar-background-color: rgba($--color-text-secondary, .3);
+$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5);
+
+/* Carousel
+--------------------------*/
+$--carousel-arrow-font-size: 12px;
+$--carousel-arrow-size: 36px;
+$--carousel-arrow-background: rgba(31, 45, 61, 0.11);
+$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23);
+$--carousel-indicator-width: 30px;
+$--carousel-indicator-height: 2px;
+$--carousel-indicator-padding-horizontal: 4px;
+$--carousel-indicator-padding-vertical: 12px;
+$--carousel-indicator-out-color: $--border-color-hover;
+
+/* Collapse
+--------------------------*/
+$--collapse-border-color: $--border-color-base;
+$--collapse-header-height: 43px;
+$--collapse-border-radius: 0;
+$--collapse-header-padding: 20px;
+$--collapse-header-fill: $--color-white;
+$--collapse-header-color: $--color-text-placeholder;
+$--collapse-header-size: 13px;
+$--collapse-content-fill: $--color-text-secondary;
+$--collapse-content-size: 13px;
+$--collapse-content-color: $--color-text-primary;
+
+/* Transfer
+--------------------------*/
+$--transfer-border-color: $--color-text-regular;
+$--transfer-box-shadow: $--box-shadow-base;
+$--transfer-panel-width: 200px;
+$--transfer-panel-header-height: 36px;
+$--transfer-panel-header-background: $--color-text-primary;
+$--transfer-panel-footer-height: 36px;
+$--transfer-panel-body-height: 246px;
+$--transfer-item-height: 32px;
+$--transfer-item-hover-background: $--color-text-secondary;
+$--transfer-filter-height: 22px;
+
+/* Header
+  --------------------------*/
+$--header-padding: 0 20px;
+
+/* Footer
+--------------------------*/
+$--footer-padding: 0 20px;
+
+/* Main
+--------------------------*/
+$--main-padding: 20px;

+ 12 - 0
packages/theme-chalk/src/container.scss

@@ -0,0 +1,12 @@
+@import "mixins/mixins";
+
+@include b(container) {
+  display: flex;
+  flex-direction: row;
+  flex: 1;
+  box-sizing: border-box;
+
+  @include when(vertical) {
+    flex-direction: column;
+  }
+}

+ 11 - 0
packages/theme-chalk/src/date-picker.scss

@@ -0,0 +1,11 @@
+@import "./date-picker/date-table.scss";
+@import "./date-picker/month-table.scss";
+@import "./date-picker/year-table.scss";
+@import "./date-picker/time-spinner.scss";
+@import "./date-picker/picker.scss";
+@import "./date-picker/date-picker.scss";
+@import "./date-picker/date-range-picker.scss";
+@import "./date-picker/time-range-picker.scss";
+@import "./date-picker/time-picker.scss";
+@import "./input.scss";
+@import "./scrollbar.scss";

+ 85 - 0
packages/theme-chalk/src/date-picker/date-picker.scss

@@ -0,0 +1,85 @@
+@import "../common/var";
+@import "../mixins/mixins";
+@import "./picker-panel.scss";
+
+@include b(date-picker) {
+  min-width: 254px;
+
+  &.has-sidebar.has-time {
+    min-width: 434px;
+  }
+
+  &.has-sidebar {
+    min-width: 370px;
+  }
+
+  &.has-time {
+    min-width: 324px;
+  }
+
+  .el-picker-panel__content {
+    min-width: 224px;
+  }
+
+  table {
+    table-layout: fixed;
+    width: 100%;
+  }
+
+  @include e(editor-wrap) {
+    position: relative;
+    display: table-cell;
+    padding: 0 5px;
+  }
+
+  @include e(time-header) {
+    position: relative;
+    border-bottom: 1px solid $--datepicker-inner-border-color;
+    font-size: 12px;
+    padding: 8px 5px 5px 5px;
+    display: table;
+    width: 100%;
+    box-sizing: border-box;
+  }
+
+  @include e(header) {
+    margin: 12px;
+    text-align: center;
+  }
+
+  @include e(header-label) {
+    font-size: 14px;
+    padding: 0 5px;
+    line-height: 22px;
+    text-align: center;
+    cursor: pointer;
+
+    &:hover {
+      color: $--datepicker-text-hover-color;
+    }
+
+    &.active {
+      color: $--datepicker-active-color;
+    }
+  }
+
+  @include e(prev-btn) {
+    float: left;
+  }
+
+  @include e(next-btn) {
+    float: right;
+  }
+
+  @include e(time-wrap) {
+    padding: 10px;
+    text-align: center;
+  }
+
+  @include e(time-label) {
+    float: left;
+    cursor: pointer;
+    line-height: 30px;
+    margin-left: 10px;
+  }
+}

+ 110 - 0
packages/theme-chalk/src/date-picker/date-range-picker.scss

@@ -0,0 +1,110 @@
+@import "../common/var";
+
+@include b(date-range-picker) {
+  min-width: 520px;
+
+  &.has-sidebar.has-time {
+    min-width: 766px;
+  }
+
+  &.has-sidebar {
+    min-width: 620px;
+  }
+
+  &.has-time {
+    min-width: 660px;
+  }
+
+  table {
+    table-layout: fixed;
+    width: 100%;
+  }
+
+  .el-picker-panel__body {
+    min-width: 513px;
+  }
+
+  .el-picker-panel__content {
+    margin: 0;
+  }
+
+  @include e(header) {
+    position: relative;
+    text-align: center;
+    height: 28px;
+
+    button {
+      float: left;
+    }
+
+    div {
+      font-size: 14px;
+      margin-right: 50px;
+    }
+  }
+
+  @include e(content) {
+    float: left;
+    width: 50%;
+    box-sizing: border-box;
+    margin: 0;
+    padding: 16px;
+
+    @include when(left) {
+      border-right: 1px solid $--datepicker-inner-border-color;
+    }
+
+    @include when(right) {
+      .el-date-range-picker__header {
+        button {
+          float: right;
+        }
+
+        div {
+          margin-left: 50px;
+          margin-right: 50px;
+        }
+      }
+    }
+  }
+
+  @include e(editors-wrap) {
+    box-sizing: border-box;
+    display: table-cell;
+
+    @include when(right) {
+      text-align: right;
+    }
+  }
+
+  @include e(time-header) {
+    position: relative;
+    border-bottom: 1px solid $--datepicker-inner-border-color;
+    font-size: 12px;
+    padding: 8px 5px 5px 5px;
+    display: table;
+    width: 100%;
+    box-sizing: border-box;
+
+    > .el-icon-arrow-right {
+      font-size: 20px;
+      vertical-align: middle;
+      display: table-cell;
+      color: $--datepicker-icon-color;
+    }
+  }
+
+  @include e(time-picker-wrap) {
+    position: relative;
+    display: table-cell;
+    padding: 0 5px;
+
+    .el-picker-panel {
+      position: absolute;
+      top: 13px;
+      right: 0;
+      z-index: 1;
+      background: $--color-white;
+    }
+  }
+}

+ 83 - 0
packages/theme-chalk/src/date-picker/date-table.scss

@@ -0,0 +1,83 @@
+@import "../common/var";
+
+@include b(date-table) {
+  font-size: 12px;
+  min-width: 224px;
+  user-select: none;
+
+  @include when(week-mode) {
+    .el-date-table__row {
+      &:hover {
+        background-color: $--datepicker-cell-hover-color;
+      }
+
+      &.current {
+        background-color: $--datepicker-inrange-color;
+      }
+    }
+  }
+
+  td {
+    width: 32px;
+    height: 32px;
+    box-sizing: border-box;
+    text-align: center;
+    cursor: pointer;
+
+    &.next-month,
+    &.prev-month {
+      color: $--datepicker-off-color;
+    }
+
+    &.today {
+      color: $--datepicker-text-hover-color;
+      position: relative;
+      &:before {
+        content: " ";
+        position: absolute;
+        top: 0;
+        right: 0;
+        width: 0;
+        height: 0;
+        border-top: 0.5em solid $--datepicker-active-color;
+        border-left: .5em solid transparent;
+      }
+    }
+
+    &.available:hover {
+      background-color: $--datepicker-cell-hover-color;
+    }
+
+    &.in-range {
+      background-color: $--datepicker-inrange-color;
+      &:hover {
+        background-color: $--datepicker-inrange-hover-color;
+      }
+    }
+
+    &.current:not(.disabled),
+    &.start-date,
+    &.end-date {
+      background-color: $--datepicker-active-color !important;
+      color: $--color-white;
+    }
+
+    &.disabled {
+      background-color: #f4f4f4;
+      opacity: 1;
+      cursor: not-allowed;
+      color: #ccc;
+    }
+
+    &.week {
+      font-size: 80%;
+      color: $--datepicker-header-color;
+    }
+  }
+
+  th {
+    padding: 5px;
+    color: $--datepicker-header-color;
+    font-weight: 400;
+  }
+}

+ 36 - 0
packages/theme-chalk/src/date-picker/month-table.scss

@@ -0,0 +1,36 @@
+@import "../common/var";
+
+@include b(month-table) {
+  font-size: 12px;
+  margin: -1px;
+  border-collapse: collapse;
+
+  td {
+    text-align: center;
+    padding: 20px 3px;
+    cursor: pointer;
+
+    &.disabled .cell {
+      background-color: #f4f4f4;
+      cursor: not-allowed;
+      color: #ccc;
+    }
+
+    .cell {
+      width: 48px;
+      height: 32px;
+      display: block;
+      line-height: 32px;
+      color: $--datepicker-color;
+
+      &:hover {
+        background-color: $--datepicker-cell-hover-color;
+      }
+    }
+
+    &.current:not(.disabled) .cell {
+      background-color: $--datepicker-active-color !important;
+      color: $--color-white;
+    }
+  }
+}

+ 112 - 0
packages/theme-chalk/src/date-picker/picker-panel.scss

@@ -0,0 +1,112 @@
+@import "../common/var";
+
+@include b(picker-panel) {
+  color: $--datepicker-color;
+  border: 1px solid $--datepicker-border-color;
+  box-shadow: 0 2px 6px #ccc;
+  background: $--color-white;
+  border-radius: 2px;
+  line-height: 20px;
+  margin: 5px 0;
+
+  @include e((body, body-wrapper)) {
+    &::after {
+      content: "";
+      display: table;
+      clear: both;
+    }
+  }
+
+  @include e(content) {
+    position: relative;
+    margin: 15px;
+  }
+
+  @include e(footer) {
+    border-top: 1px solid $--datepicker-inner-border-color;
+    padding: 4px;
+    text-align: right;
+    background-color: $--color-white;
+    position: relative;
+  }
+
+  @include e(shortcut) {
+    display: block;
+    width: 100%;
+    border: 0;
+    background-color: transparent;
+    line-height: 28px;
+    font-size: 14px;
+    color: $--datepicker-color;
+    padding-left: 12px;
+    text-align: left;
+    outline: none;
+    cursor: pointer;
+
+    &:hover {
+      background-color: $--datepicker-cell-hover-color;
+    }
+
+    &.active {
+      background-color: #e6f1fe;
+      color: $--datepicker-active-color;
+    }
+  }
+
+  @include e(btn) {
+    border: 1px solid #dcdcdc;
+    color: #333;
+    line-height: 24px;
+    border-radius: 2px;
+    padding: 0 20px;
+    cursor: pointer;
+    background-color: transparent;
+    outline: none;
+    font-size: 12px;
+
+    &[disabled] {
+      color: #cccccc;
+      cursor: not-allowed;
+    }
+  }
+
+  @include e(icon-btn) {
+    font-size: 12px;
+    color: $--datepicker-icon-color;
+    border: 0;
+    background: transparent;
+    cursor: pointer;
+    outline: none;
+    margin-top: 3px;
+
+    &:hover {
+      color: $--datepicker-text-hover-color;
+    }
+  }
+
+  @include e(link-btn) {
+    cursor: pointer;
+    color: $--color-primary;
+    text-decoration: none;
+    padding: 15px;
+    font-size: 12px;
+  }
+}
+
+.el-picker-panel *[slot=sidebar],
+.el-picker-panel__sidebar {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 110px;
+  border-right: 1px solid $--datepicker-inner-border-color;
+  box-sizing: border-box;
+  padding-top: 6px;
+  background-color: $--color-black;
+  overflow: auto;
+}
+
+.el-picker-panel *[slot=sidebar] + .el-picker-panel__body,
+.el-picker-panel__sidebar + .el-picker-panel__body {
+  margin-left: 110px;
+}

+ 33 - 0
packages/theme-chalk/src/date-picker/picker.scss

@@ -0,0 +1,33 @@
+@import "../common/var";
+@import "../common/transition";
+
+@include b(date-editor) {
+  position: relative;
+  display: inline-block;
+
+  &.el-input {
+    width: 193px;
+  }
+
+  @include m(daterange) {
+    &.el-input {
+      width: 220px;
+    }
+  }
+
+  @include m(datetimerange) {
+    &.el-input {
+      width: 350px;
+    }
+  }
+
+  .el-picker-panel {
+    position: absolute;
+    min-width: 180px;
+    box-sizing: border-box;
+    box-shadow: 0 2px 6px #ccc;
+    background: $--color-white;
+    z-index: 10;
+    top: 41px;
+  }
+}

+ 84 - 0
packages/theme-chalk/src/date-picker/time-picker.scss

@@ -0,0 +1,84 @@
+@import "../common/var";
+
+@include b(time-panel) {
+  margin: 5px 0;
+  border: solid 1px $--datepicker-border-color;
+  background-color: $--color-white;
+  box-shadow: $--box-shadow-base;
+  border-radius: 2px;
+  position: absolute;
+  width: 180px;
+  left: 0;
+  z-index: $--index-top;
+  user-select: none;
+
+  @include e(content) {
+    font-size: 0;
+    position: relative;
+    overflow: hidden;
+
+    &::after, &::before {
+      content: ":";
+      top: 50%;
+      color: $--color-white;
+      position: absolute;
+      font-size: 14px;
+      margin-top: -15px;
+      line-height: 16px;
+      background-color: $--datepicker-active-color;
+      height: 32px;
+      z-index: -1;
+      left: 0;
+      right: 0;
+      box-sizing: border-box;
+      padding-top: 6px;
+      text-align: left;
+    }
+
+    &::after {
+      left: 50%;
+      margin-left: -2px;
+    }
+
+    &::before {
+      padding-left: 50%;
+      margin-right: -2px;
+    }
+
+    &.has-seconds {
+      &::after {
+        left: calc(100% / 3 * 2);
+      }
+
+      &::before {
+        padding-left: calc(100% / 3);
+      }
+    }
+  }
+
+  @include e(footer) {
+    border-top: 1px solid $--datepicker-inner-border-color;
+    padding: 4px;
+    height: 36px;
+    line-height: 25px;
+    text-align: right;
+    box-sizing: border-box;
+  }
+
+  @include e(btn) {
+    border: none;
+    line-height: 28px;
+    padding: 0 5px;
+    margin: 0 5px;
+    cursor: pointer;
+    background-color: transparent;
+    outline: none;
+    font-size: 12px;
+    color: $--color-black;
+
+    &.confirm {
+      font-weight: 800;
+      color: $--datepicker-active-color;
+    }
+  }
+}

+ 31 - 0
packages/theme-chalk/src/date-picker/time-range-picker.scss

@@ -0,0 +1,31 @@
+@import "../common/var";
+
+@include b(time-range-picker) {
+  min-width: 354px;
+  overflow: visible;
+
+  @include e(content) {
+    position: relative;
+    text-align: center;
+    padding: 10px;
+  }
+
+  @include e(cell) {
+    box-sizing: border-box;
+    margin: 0;
+    padding: 4px 7px 7px;
+    width: 50%;
+    display: inline-block;
+  }
+
+  @include e(header) {
+    margin-bottom: 5px;
+    text-align: center;
+    font-size: 14px;
+  }
+
+  @include e(body) {
+    border-radius:2px;
+    border: 1px solid $--datepicker-border-color;
+  }
+}

+ 61 - 0
packages/theme-chalk/src/date-picker/time-spinner.scss

@@ -0,0 +1,61 @@
+@import "../common/var";
+
+@include b(time-spinner) {
+  &.has-seconds {
+    .el-time-spinner__wrapper {
+      width: 33%;
+    }
+
+    .el-time-spinner__wrapper:nth-child(2) {
+      margin-left: 1%;
+    }
+  }
+
+  @include e(wrapper) {
+    max-height: 190px;
+    overflow: auto;
+    display: inline-block;
+    width: 50%;
+    vertical-align: top;
+    position: relative;
+
+    & .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) {
+      padding-bottom: 15px;
+    }
+  }
+
+  @include e(list) {
+    padding: 0;
+    margin: 0;
+    list-style: none;
+    text-align: center;
+
+    &::after,
+    &::before {
+      content: '';
+      display: block;
+      width: 100%;
+      height: 80px;
+    }
+  }
+
+  @include e(item) {
+    height: 32px;
+    line-height: 32px;
+    font-size: 12px;
+
+    &:hover:not(.disabled):not(.active) {
+      background: $--datepicker-cell-hover-color;
+      cursor: pointer;
+    }
+
+    &.active:not(.disabled) {
+      color: $--color-white;
+    }
+
+    &.disabled {
+      color: $--datepicker-border-color;
+      cursor: not-allowed;
+    }
+  }
+}

+ 40 - 0
packages/theme-chalk/src/date-picker/year-table.scss

@@ -0,0 +1,40 @@
+@import "../common/var";
+
+@include b(year-table) {
+  font-size: 12px;
+  margin: -1px;
+  border-collapse: collapse;
+
+  .el-icon {
+    color: $--datepicker-icon-color;
+  }
+
+  td {
+    text-align: center;
+    padding: 20px 3px;
+    cursor: pointer;
+
+    &.disabled .cell {
+      background-color: #f4f4f4;
+      cursor: not-allowed;
+      color: #ccc;
+    }
+
+    .cell {
+      width: 48px;
+      height: 32px;
+      display: block;
+      line-height: 32px;
+      color: $--datepicker-color;
+
+      &:hover {
+        background-color: $--datepicker-cell-hover-color;
+      }
+    }
+
+    &.current:not(.disabled) .cell {
+      background-color: $--datepicker-active-color !important;
+      color: $--color-white;
+    }
+  }
+}

+ 107 - 0
packages/theme-chalk/src/dialog.scss

@@ -0,0 +1,107 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import "common/var";
+@import "common/popup";
+
+
+@include b(dialog) {
+  position: relative;
+  margin: 0 auto 50px;
+  background: $--color-white;
+  border-radius: $--border-radius-small;
+  box-shadow: $--dialog-box-shadow;
+  box-sizing: border-box;
+  width: 50%;
+
+  @include when(fullscreen) {
+    width: 100%;
+    margin-top: 0;
+    margin-bottom: 0;
+    height: 100%;
+    overflow: auto;
+  }
+
+  @include e(wrapper) {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    overflow: auto;
+    margin: 0;
+  }
+
+  @include e(header) {
+    padding: 20px 20px 0;
+    @include utils-clearfix;
+  }
+
+  @include e(headerbtn) {
+    float: right;
+    background: transparent;
+    border: none;
+    outline: none;
+    padding: 0;
+    cursor: pointer;
+    font-size: 16px;
+
+    .el-dialog__close {
+      color: $--dialog-close-color;
+    }
+
+    &:focus, &:hover {
+      .el-dialog__close {
+        color: $--dialog-close-hover-color;
+      }
+    }
+  }
+
+  @include e(title) {
+    line-height: 1;
+    font-size: $--dialog-title-font-size;
+    font-weight: bold;
+    color: $--color-black;
+  }
+
+  @include e(body) {
+    padding: 30px 20px;
+    color: $--color-black;
+    font-size: $--dialog-font-size;
+  }
+
+  @include e(footer) {
+    padding: 10px 20px 15px;
+    text-align: right;
+    box-sizing: border-box;
+  }
+}
+
+.dialog-fade-enter-active {
+  animation: dialog-fade-in .3s;
+}
+
+.dialog-fade-leave-active {
+  animation: dialog-fade-out .3s;
+}
+
+@keyframes dialog-fade-in {
+  0% {
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+  100% {
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+@keyframes dialog-fade-out {
+  0% {
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+  100% {
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+}

+ 0 - 0
packages/theme-chalk/src/dropdown-item.scss


+ 0 - 0
packages/theme-chalk/src/dropdown-menu.scss


+ 73 - 0
packages/theme-chalk/src/dropdown.scss

@@ -0,0 +1,73 @@
+@import "mixins/mixins";
+@import "common/var";
+@import "button";
+
+@include b(dropdown) {
+  display: inline-block;
+  position: relative;
+  color: $--color-black;
+  font-size: $--font-size-base;
+
+  .el-button-group {
+    display: block;
+    .el-button {
+      float: none;
+    }
+  }
+
+  & .el-dropdown__caret-button {
+    padding-left: 5px;
+    padding-right: 5px;
+
+    & .el-dropdown__icon {
+      padding-left: 0;
+    }
+  }
+  @include e(icon) {
+    font-size: 12px;
+    margin: 0 3px;
+  }
+}
+@include b(dropdown-menu) {
+  margin: 5px 0;
+  background-color: $--color-white;
+  border: 1px solid $--color-black;
+  box-shadow: $--dropdown-menu-box-shadow;
+  padding: 6px 0;
+  z-index: 10;
+  position: absolute;
+  top: 0;
+  left: 0;
+  min-width: 100px;
+
+  @include e(item) {
+    list-style: none;
+    line-height: 36px;
+    padding: 0 10px;
+    margin: 0;
+    cursor: pointer;
+
+    &:not(.is-disabled):hover {
+      background-color: $--dropdown-menuItem-hover-fill;
+      color: $--dropdown-menuItem-hover-color;
+    }
+    @include m(divided) {
+      position: relative;
+      margin-top: 6px;
+      border-top: 1px solid $--color-black;
+
+      &:before {
+        content: '';
+        height: 6px;
+        display: block;
+        margin: 0 -10px;
+        background-color: $--color-white;
+      }
+    }
+    @include when(disabled) {
+      cursor: default;
+      color: $--color-black;
+      pointer-events: none;
+    }
+  }
+}

BIN
packages/theme-chalk/src/fonts/element-icons.ttf


BIN
packages/theme-chalk/src/fonts/element-icons.woff


+ 7 - 0
packages/theme-chalk/src/footer.scss

@@ -0,0 +1,7 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(footer) {
+  padding: $--footer-padding;
+  box-sizing: border-box;
+}

+ 0 - 0
packages/theme-chalk/src/form-item.scss


+ 91 - 0
packages/theme-chalk/src/form.scss

@@ -0,0 +1,91 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(form) {
+  @include m(label-left) {
+    & .el-form-item__label {
+      text-align: left;
+    }
+  }
+  @include m(label-top) {
+    & .el-form-item__label {
+      float: none;
+      display: inline-block;
+      text-align: left;
+      padding: 0 0 10px 0;
+    }
+  }
+  @include m(inline) {
+    & .el-form-item {
+      display: inline-block;
+      margin-right: 10px;
+      vertical-align: top;
+    }
+    & .el-form-item__label {
+      float: none;
+      display: inline-block;
+    }
+    & .el-form-item__content {
+      display: inline-block;
+      vertical-align: top;
+    }
+    &.el-form--label-top .el-form-item__content {
+      display: block;
+    }
+  }
+}
+@include b(form-item) {
+  margin-bottom: 22px;
+  @include utils-clearfix;
+
+  & .el-form-item {
+    margin-bottom: 0;
+  }
+
+  @include e(label) {
+    text-align: right;
+    vertical-align: middle;
+    float: left;
+    font-size: 14px;
+    color: $--color-black;
+    line-height: 1;
+    padding: 11px 12px 11px 0;
+    box-sizing: border-box;
+  }
+  @include e(content) {
+    line-height: 36px;
+    position: relative;
+    font-size: 14px;
+    @include utils-clearfix;
+  }
+  @include e(error) {
+    color: $--color-danger;
+    font-size: 12px;
+    line-height: 1;
+    padding-top: 4px;
+    position: absolute;
+    top: 100%;
+    left: 0;
+  }
+
+  @include when(required) {
+    .el-form-item__label:before {
+      content: '*';
+      color: $--color-danger;
+      margin-right: 4px;
+    }
+  }
+
+  @include when(error) {
+    & .el-input__inner,
+    & .el-textarea__inner {
+      border-color: $--color-danger;
+    }
+    & .el-input-group__append,
+    & .el-input-group__prepend {
+      & .el-input__inner {
+        border-color: transparent;
+      }
+    }
+  }
+}

+ 7 - 0
packages/theme-chalk/src/header.scss

@@ -0,0 +1,7 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(header) {
+  padding: $--header-padding;
+  box-sizing: border-box;
+}

+ 88 - 0
packages/theme-chalk/src/icon.scss

@@ -0,0 +1,88 @@
+@font-face {
+  font-family: 'element-icons';
+  src: url('fonts/element-icons.woff?t=1501582787037') format('woff'), /* chrome, firefox */
+       url('fonts/element-icons.ttf?t=1501582787037') format('truetype'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+  font-weight: normal;
+  font-style: normal;
+}
+
+[class^="el-icon-"], [class*=" el-icon-"] {
+  /* use !important to prevent issues with browser extensions that change fonts */
+  font-family: 'element-icons' !important;
+  speak: none;
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  vertical-align: baseline;
+  display: inline-block;
+
+  /* Better Font Rendering =========== */
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.el-icon-arrow-down:before { content: "\e600"; }
+.el-icon-arrow-left:before { content: "\e601"; }
+.el-icon-arrow-right:before { content: "\e602"; }
+.el-icon-arrow-up:before { content: "\e603"; }
+.el-icon-caret-bottom:before { content: "\e604"; }
+.el-icon-caret-left:before { content: "\e605"; }
+.el-icon-caret-right:before { content: "\e606"; }
+.el-icon-caret-top:before { content: "\e607"; }
+.el-icon-check:before { content: "\e608"; }
+.el-icon-circle-check:before { content: "\e609"; }
+.el-icon-circle-close:before { content: "\e60a"; }
+.el-icon-circle-cross:before { content: "\e60b"; }
+.el-icon-close:before { content: "\e60c"; }
+.el-icon-upload:before { content: "\e60d"; }
+.el-icon-d-arrow-left:before { content: "\e60e"; }
+.el-icon-d-arrow-right:before { content: "\e60f"; }
+.el-icon-d-caret:before { content: "\e610"; }
+.el-icon-date:before { content: "\e611"; }
+.el-icon-delete:before { content: "\e612"; }
+.el-icon-document:before { content: "\e613"; }
+.el-icon-edit:before { content: "\e614"; }
+.el-icon-information:before { content: "\e615"; }
+.el-icon-loading:before { content: "\e616"; }
+.el-icon-menu:before { content: "\e617"; }
+.el-icon-message:before { content: "\e618"; }
+.el-icon-minus:before { content: "\e619"; }
+.el-icon-more:before { content: "\e61a"; }
+.el-icon-picture:before { content: "\e61b"; }
+.el-icon-plus:before { content: "\e61c"; }
+.el-icon-search:before { content: "\e61d"; }
+.el-icon-setting:before { content: "\e61e"; }
+.el-icon-share:before { content: "\e61f"; }
+.el-icon-star-off:before { content: "\e620"; }
+.el-icon-star-on:before { content: "\e621"; }
+.el-icon-time:before { content: "\e622"; }
+.el-icon-warning:before { content: "\e623"; }
+.el-icon-delete2:before { content: "\e624"; }
+.el-icon-upload2:before { content: "\e627"; }
+.el-icon-view:before { content: "\e626"; }
+.el-icon-circle-check-plain:before { content: "\e625"; }
+.el-icon-circle-cross-plain:before { content: "\e628"; }
+.el-icon-information-plain:before { content: "\e629"; }
+.el-icon-warning-plain:before { content: "\e62a"; }
+
+.el-icon-loading {
+  animation: rotating 1s linear infinite;
+}
+
+.el-icon--right {
+  margin-left: 5px;
+}
+.el-icon--left {
+  margin-right: 5px;
+}
+
+@keyframes rotating {
+  0% {
+    transform: rotateZ(0deg);
+  }
+  100% {
+    transform: rotateZ(360deg);
+  }
+}

+ 67 - 0
packages/theme-chalk/src/index.scss

@@ -0,0 +1,67 @@
+@import "./base.scss";
+@import "./pagination.scss";
+@import "./dialog.scss";
+@import "./autocomplete.scss";
+@import "./dropdown.scss";
+@import "./dropdown-menu.scss";
+@import "./dropdown-item.scss";
+@import "./menu.scss";
+@import "./submenu.scss";
+@import "./menu-item.scss";
+@import "./menu-item-group.scss";
+@import "./input.scss";
+@import "./input-number.scss";
+@import "./radio.scss";
+@import "./radio-group.scss";
+@import "./radio-button.scss";
+@import "./checkbox.scss";
+@import "./checkbox-button.scss";
+@import "./checkbox-group.scss";
+@import "./switch.scss";
+@import "./select.scss";
+@import "./button.scss";
+@import "./button-group.scss";
+@import "./table.scss";
+@import "./table-column.scss";
+@import "./date-picker.scss";
+@import "./time-select.scss";
+@import "./time-picker.scss";
+@import "./popover.scss";
+@import "./tooltip.scss";
+@import "./message-box.scss";
+@import "./breadcrumb.scss";
+@import "./breadcrumb-item.scss";
+@import "./form.scss";
+@import "./form-item.scss";
+@import "./tabs.scss";
+@import "./tab-pane.scss";
+@import "./tag.scss";
+@import "./tree.scss";
+@import "./alert.scss";
+@import "./notification.scss";
+@import "./slider.scss";
+@import "./loading.scss";
+@import "./row.scss";
+@import "./col.scss";
+@import "./upload.scss";
+@import "./progress.scss";
+@import "./spinner.scss";
+@import "./message.scss";
+@import "./badge.scss";
+@import "./card.scss";
+@import "./rate.scss";
+@import "./steps.scss";
+@import "./step.scss";
+@import "./carousel.scss";
+@import "./scrollbar.scss";
+@import "./carousel-item.scss";
+@import "./collapse.scss";
+@import "./collapse-item.scss";
+@import "./cascader.scss";
+@import "./color-picker.scss";
+@import "./transfer.scss";
+@import "./container.scss";
+@import "./header.scss";
+@import "./aside.scss";
+@import "./main.scss";
+@import "./footer.scss";

+ 96 - 0
packages/theme-chalk/src/input-number.scss

@@ -0,0 +1,96 @@
+@import "mixins/mixins";
+@import "common/var";
+@import "input";
+
+@include b(input-number) {
+  display: inline-block;
+  width: 180px;
+  position: relative;
+
+  & .el-input {
+    display: block;
+  }
+  & .el-input__inner {
+    appearance: none;
+    padding-right: #{$--input-height * 2 + 10};
+  }
+  @include e((increase, decrease)) {
+    height: auto;
+    border-left: $--border-base;
+    width: $--input-height;
+    line-height: #{$--input-height - 2};
+    top: 1px;
+    text-align: center;
+    color: $--color-black;
+    cursor: pointer;
+    position: absolute;
+    z-index: 1;
+
+    &:hover {
+      color: $--color-primary;
+
+      &:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {
+        border-color: $--input-focus-border;
+      }
+    }
+
+    @include when(disabled) {
+      color: $--disabled-border-base;
+      cursor: not-allowed;
+    }
+  }
+
+  @include e(increase) {
+    right: 0;
+  }
+  @include e(decrease) {
+    right: #{$--input-height + 1};
+  }
+
+  @include when(disabled) {
+    & .el-input-number__increase, .el-input-number__decrease {
+      border-color: $--disabled-border-base;
+      color: $--disabled-border-base;
+
+      &:hover {
+        color: $--disabled-border-base;
+        cursor: not-allowed;
+      }
+    }
+  }
+  @include m(large) {
+    width: 200px;
+
+    & .el-input-number__increase, .el-input-number__decrease {
+      line-height: #{$--input-large-height - 2};
+      width: $--input-large-height;
+      font-size: $--input-large-font-size;
+    }
+    & .el-input-number__decrease {
+      right: #{$--input-large-height + 1};
+    }
+    & .el-input__inner {
+      padding-right: #{$--input-large-height * 2 + 10};
+    }
+  }
+  @include m(small) {
+    width: 130px;
+
+    & .el-input-number__increase, .el-input-number__decrease {
+      line-height: #{$--input-small-height - 2};
+      width: $--input-small-height;
+      font-size: $--input-small-font-size;
+    }
+    & .el-input-number__decrease {
+      right: #{$--input-small-height + 1};
+    }
+    & .el-input__inner {
+      padding-right: #{$--input-small-height * 2 + 10};
+    }
+  }
+  @include when(without-controls) {
+    & .el-input__inner {
+      padding-right: 10px;
+    }
+  }
+}

+ 234 - 0
packages/theme-chalk/src/input.scss

@@ -0,0 +1,234 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(input) {
+  position: relative;
+  font-size: $--font-size-base;
+  display: inline-block;
+  width: 100%;
+
+  @include e(inner) {
+    appearance: none;
+    background-color: $--input-fill;
+    background-image: none;
+    border-radius: $--input-border-radius;
+    border: $--input-border;
+    box-sizing: border-box;
+    color: $--input-color;
+    display: inline-block;
+    font-size: inherit;
+    height: $--input-height;
+    line-height: 1;
+    outline: none;
+    padding: 3px 10px;
+    transition: $--border-transition-base;
+    width: 100%;
+
+    &::placeholder {
+      color: $--input-placeholder-color;
+    }
+
+    &:hover {
+      border-color: $--input-hover-border;
+    }
+
+    &:focus {
+      outline: none;
+      border-color: $--input-focus-border;
+    }
+  }
+
+  @include e(icon) {
+    position: absolute;
+    width: 35px;
+    height: 100%;
+    right: 0;
+    top: 0;
+    text-align: center;
+    color: $--input-icon-color;
+    transition: all .3s;
+
+    &:after {
+      content: '';
+      height: 100%;
+      width: 0;
+      display: inline-block;
+      vertical-align: middle;
+    }
+
+    & + .el-input__inner {
+      padding-right: 35px;
+    }
+
+    @include when(clickable) {
+      &:hover {
+        cursor: pointer;
+        color: $--input-hover-border;
+
+        & + .el-input__inner {
+          border-color: $--input-hover-border;
+        }
+      }
+    }
+  }
+
+  @include when(active) {
+    .el-input__inner {
+      outline: none;
+      border-color: $--input-focus-border;
+    }
+  }
+
+  @include when(disabled) {
+    .el-input__inner {
+      background-color: $--input-disabled-fill;
+      border-color: $--input-disabled-border;
+      color: $--input-disabled-color;
+      cursor: not-allowed;
+
+      &::placeholder {
+        color: $--input-disabled-placeholder-color;
+      }
+    }
+
+    .el-input__icon {
+      cursor: not-allowed;
+    }
+  }
+  @include m(large) {
+    font-size: $--input-large-font-size;
+
+    & .el-input__inner {
+      height: $--input-large-height;
+    }
+  }
+  @include m(small) {
+    font-size: $--input-small-font-size;
+
+    & .el-input__inner {
+      height: $--input-small-height;
+    }
+  }
+  @include m(mini) {
+    font-size: $--input-mini-font-size;
+
+    & .el-input__inner {
+      height: $--input-mini-height;
+    }
+  }
+}
+
+@include b(input-group) {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+
+  & > .el-input__inner {
+    vertical-align: middle;
+    display: table-cell;
+  }
+  @include e((append, prepend)) {
+    background-color: $--color-black;
+    color: $--color-black;
+    vertical-align: middle;
+    display: table-cell;
+    position: relative;
+    border: $--border-base;
+    border-radius: $--input-border-radius;
+    padding: 0 10px;
+    width: 1px;
+    white-space: nowrap;
+
+    & .el-select,
+    & .el-button {
+      display: block;
+      margin: -10px;
+    }
+
+    & button.el-button,
+    & div.el-select .el-input__inner,
+    & div.el-select:hover .el-input__inner {
+      border-color: transparent;
+      background-color: transparent;
+      color: inherit;
+      border-top: 0;
+      border-bottom: 0;
+    }
+    & .el-button,
+    & .el-input {
+      font-size: inherit;
+    }
+  }
+  @include e(prepend) {
+    border-right: 0;
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+  }
+  @include e(append) {
+    border-left: 0;
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+  }
+
+  @include m(prepend) {
+    .el-input__inner {
+      border-top-left-radius: 0;
+      border-bottom-left-radius: 0;
+    }
+  }
+  @include m(append) {
+    .el-input__inner {
+      border-top-right-radius: 0;
+      border-bottom-right-radius: 0;
+    }
+  }
+}
+
+@include b(textarea) {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+
+  @include e(inner) {
+    display: block;
+    resize: vertical;
+    padding: 5px 7px;
+    line-height: 1.5;
+    box-sizing: border-box;
+    width: 100%;
+    font-size: $--font-size-base;
+    color: $--input-color;
+    background-color: $--input-fill;
+    background-image: none;
+    border: $--input-border;
+    border-radius: $--input-border-radius;
+    transition: $--border-transition-base;
+
+    &::placeholder {
+      color: $--input-placeholder-color;
+    }
+
+    &:hover {
+      border-color: $--input-hover-border;
+    }
+
+    &:focus {
+      outline: none;
+      border-color: $--input-focus-border;
+    }
+  }
+
+  @include when(disabled) {
+    .el-textarea__inner {
+      background-color: $--input-disabled-fill;
+      border-color: $--input-disabled-border;
+      color: $--input-disabled-color;
+      cursor: not-allowed;
+
+      &::placeholder {
+        color: $--input-disabled-placeholder-color;
+      }
+    }
+  }
+}

+ 82 - 0
packages/theme-chalk/src/loading.scss

@@ -0,0 +1,82 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(loading-mask) {
+  position: absolute;
+  z-index: 10000;
+  background-color: rgba(255, 255, 255, .9);
+  margin: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  transition: opacity 0.3s;
+
+  @include when(fullscreen) {
+    position: fixed;
+
+    .el-loading-spinner {
+      margin-top: #{- $--loading-fullscreen-spinner-size / 2};
+
+      .circular {
+        height: $--loading-fullscreen-spinner-size;
+        width: $--loading-fullscreen-spinner-size;
+      }
+    }
+  }
+}
+
+@include b(loading-spinner) {
+  top: 50%;
+  margin-top: #{- $--loading-spinner-size / 2};
+  width: 100%;
+  text-align: center;
+  position: absolute;
+
+  .el-loading-text {
+    color: $--color-primary;
+    margin: 3px 0;
+    font-size: 14px;
+  }
+
+  .circular {
+    height: $--loading-spinner-size;
+    width: $--loading-spinner-size;
+    animation: loading-rotate 2s linear infinite;
+  }
+
+  .path {
+    animation: loading-dash 1.5s ease-in-out infinite;
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: 0;
+    stroke-width: 2;
+    stroke: $--color-primary;
+    stroke-linecap: round;
+  }
+}
+
+.el-loading-fade-enter,
+.el-loading-fade-leave-active {
+  opacity: 0;
+}
+
+@keyframes loading-rotate {
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes loading-dash {
+  0% {
+    stroke-dasharray: 1, 200;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -40px;
+  }
+  100% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -120px;
+  }
+}

+ 9 - 0
packages/theme-chalk/src/main.scss

@@ -0,0 +1,9 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(main) {
+  flex: 1;
+  overflow: auto;
+  box-sizing: border-box;
+  padding: $--main-padding;
+}

+ 0 - 0
packages/theme-chalk/src/menu-item-group.scss


+ 0 - 0
packages/theme-chalk/src/menu-item.scss


+ 273 - 0
packages/theme-chalk/src/menu.scss

@@ -0,0 +1,273 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@mixin menu-item {
+  height: 56px;
+  line-height: 56px;
+  font-size: 14px;
+  color: $--menu-item-color;
+  padding: 0 20px;
+  cursor: pointer;
+  position: relative;
+  transition: border-color .3s, background-color .3s, color .3s;
+  box-sizing: border-box;
+  white-space: nowrap;
+}
+
+@include b(menu) {
+  border-radius: 2px;
+  list-style: none;
+  position: relative;
+  margin: 0;
+  padding-left: 0;
+  background-color: $--menu-item-fill;
+  @include utils-clearfix;
+
+  & li {
+    list-style: none;
+  }
+
+  @include m(dark) {
+    background-color: $--dark-menu-item-fill;
+
+    & .el-menu-item,
+    & .el-submenu__title {
+      color: $--color-black;
+
+      &:hover {
+        background-color: $--color-black;
+      }
+    }
+
+    & .el-submenu .el-menu {
+      background-color: $--color-black;
+
+      & .el-menu-item:hover {
+        background-color: $--color-black;
+      }
+    }
+  }
+  @include m(horizontal) {
+    & .el-menu-item {
+      float: left;
+      height: 60px;
+      line-height: 60px;
+      margin: 0;
+      cursor: pointer;
+      position: relative;
+      box-sizing: border-box;
+      border-bottom: 5px solid transparent;
+
+      a,
+      a:hover {
+        color: inherit;
+      }
+
+      &:hover {
+        background-color: $--menu-item-hover-fill;
+      }
+    }
+    & .el-submenu {
+      float: left;
+      position: relative;
+
+      > .el-menu {
+        position: absolute;
+        top: 65px;
+        left: 0;
+        border:1px solid $--color-black;
+        padding: 5px 0;
+        background-color: $--color-white;
+        z-index: 100;
+        min-width: 100%;
+        box-shadow: 0 2px 4px 0 rgba(0,0,0,0.12), 0 0 6px 0 rgba(0,0,0,0.04);
+      }
+
+      & .el-submenu__title {
+        height: 60px;
+        line-height: 60px;
+        border-bottom: 5px solid transparent;
+      }
+
+      & .el-menu-item {
+        background-color: $--color-white;
+        float: none;
+        height: 36px;
+        line-height: 36px;
+        padding: 0 10px;
+      }
+
+      & .el-submenu__icon-arrow {
+        position: static;
+        vertical-align: middle;
+        margin-left: 5px;
+        color: $--color-black;
+        margin-top: -3px;
+      }
+    }
+    & .el-menu-item:hover,
+    & .el-submenu__title:hover {
+      background-color: $--menu-item-fill;
+    }
+    & > .el-menu-item:hover,
+    & > .el-submenu:hover .el-submenu__title,
+    & > .el-submenu.is-active .el-submenu__title {
+      border-bottom: 5px solid $--color-primary;
+    }
+
+    &.el-menu--dark {
+      & .el-menu-item:hover,
+      & .el-submenu__title:hover {
+        background-color: $--dark-menu-item-fill;
+      }
+
+      & .el-submenu {
+        .el-menu-item,
+        .el-submenu-title {
+          color: $--color-black;
+
+          &:hover {
+            background-color: $--color-black;
+          }
+        }
+        .el-menu-item.is-active {
+          color: $--color-primary;
+        }
+      }
+    }
+  }
+  @include m(collapse) {
+    width: 64px;
+
+    > .el-menu-item,
+    > .el-submenu > .el-submenu__title {
+      [class^="el-icon-"] {
+        margin: 0;
+        vertical-align: middle;
+        width: 24px;
+        text-align: center;
+      }
+      .el-submenu__icon-arrow {
+        display: none;
+      }
+      span {
+        height: 0;
+        width: 0;
+        overflow: hidden;
+        visibility: hidden;
+        display: inline-block;
+      }
+    }
+
+    .el-submenu {
+      position: relative;
+      & .el-menu {
+        position: absolute;
+        margin-left: 5px;
+        top: 0;
+        left: 100%;
+        z-index: 10;
+      }
+
+      &.is-opened {
+        > .el-submenu__title .el-submenu__icon-arrow {
+          transform: none;
+        }
+      }
+    }
+  }
+}
+@include b(menu-item) {
+  @include menu-item;
+
+  & [class^="el-icon-"] {
+    margin-right: 5px;
+    width: 24px;
+    text-align: center;
+  }
+  & * {
+    vertical-align: middle;
+  }
+  &:first-child {
+    margin-left: 0;
+  }
+  &:last-child {
+    margin-right: 0;
+  }
+  &:hover {
+    background-color: $--color-black;
+  }
+  @include when(active) {
+    color: $--color-primary;
+  }
+}
+  
+@include b(submenu) {
+  @include e(title) {
+    position: relative;
+    @include menu-item;
+
+    &:hover {
+      background-color: $--color-black;
+    }
+
+    & * {
+      vertical-align: middle;
+    }
+  }
+  & .el-menu {
+    background-color: $--color-black;
+  }
+  & .el-menu-item {
+    height: 50px;
+    line-height: 50px;
+    padding: 0 45px;
+    min-width: 200px;
+
+    &:hover {
+      background-color: $--color-black;
+    }
+  }
+  @include e(icon-arrow) {
+    position: absolute;
+    top: 50%;
+    right: 20px;
+    margin-top: -7px;
+    transition: transform .3s;
+    font-size: 12px;
+  }
+  @include when(active) {
+    .el-submenu__title {
+      border-bottom-color: $--color-primary;
+    }
+  }
+  @include when(opened) {
+    > .el-submenu__title .el-submenu__icon-arrow {
+      transform: rotateZ(180deg);
+    }
+  }
+  [class^="el-icon-"] {
+    vertical-align: middle;
+    margin-right: 5px;
+    width: 24px;
+    text-align: center;
+  }
+}
+
+@include b(menu-item-group) {
+  > ul {
+    padding: 0;
+  }
+  @include e(title) {
+    padding-top: 15px;
+    line-height: normal;
+    font-size: 14px;
+    padding-left: 20px;
+    color: $--color-black;
+  }
+}
+
+.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow {
+  transition: .2s;
+  opacity: 0;
+}

+ 167 - 0
packages/theme-chalk/src/message-box.scss

@@ -0,0 +1,167 @@
+@import "mixins/mixins";
+@import "common/var";
+@import "common/popup";
+@import "button";
+@import "input";
+
+@include b(message-box) {
+  text-align: left;
+  display: inline-block;
+  vertical-align: middle;
+  background-color: $--color-white;
+  width: $--msgbox-width;
+  border-radius: $--msgbox-border-radius;
+  font-size: $--msgbox-font-size;
+  overflow: hidden;
+  backface-visibility: hidden;
+  @include e(wrapper) {
+    position: fixed;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+    &::after {
+      content: "";
+      display: inline-block;
+      height: 100%;
+      width: 0;
+      vertical-align: middle;
+    }
+  }
+
+  @include e(header) {
+    position: relative;
+    padding: 20px 20px 0;
+  }
+
+  @include e(headerbtn) {
+    position: absolute;
+    top: 19px;
+    right: 20px;
+    background: transparent;
+    border: none;
+    outline: none;
+    padding: 0;
+    cursor: pointer;
+
+    .el-message-box__close {
+      color: #999;
+    }
+
+    &:focus, &:hover {
+      .el-message-box__close {
+        color: $--color-primary;
+      }
+    }
+
+  }
+
+  @include e(content) {
+    padding: 30px 20px;
+    color: $--msgbox-content-color;
+    font-size: $--msgbox-content-font-size;
+    position: relative;
+  }
+
+  @include e(input) {
+    padding-top: 15px;
+    & input.invalid {
+      border-color: $--color-danger;
+      &:focus {
+        border-color: $--color-danger;
+      }
+    }
+  }
+
+  @include e(errormsg) {
+    color: $--color-danger;
+    font-size: $--msgbox-error-font-size;
+    min-height: 18px;
+    margin-top: 2px;
+  }
+
+  @include e(title) {
+    padding-left: 0;
+    margin-bottom: 0;
+    font-size: $--msgbox-font-size;
+    font-weight: bold;
+    height: 18px;
+    color: #333;
+  }
+
+  @include e(message) {
+    margin: 0;
+
+    & p {
+      margin: 0;
+      line-height: 1.4;
+    }
+  }
+
+  @include e(btns) {
+    padding: 10px 20px 15px;
+    text-align: right;
+
+    & button:nth-child(2) {
+      margin-left: 10px;
+    }
+  }
+
+  @include e(btns-reverse) {
+    flex-direction: row-reverse;
+  }
+
+  @include e(status) {
+    position: absolute;
+    top: 50%;
+    transform: translateY(-50%);
+    font-size: 36px !important;
+
+    &.el-icon-circle-check {
+      color: $--msgbox-success-color;
+    }
+
+    &.el-icon-information {
+      color: $--msgbox-info-color;
+    }
+
+    &.el-icon-warning {
+      color: $--msgbox-warning-color;
+    }
+
+    &.el-icon-circle-cross {
+      color: $--msgbox-danger-color;
+    }
+  }
+}
+
+.msgbox-fade-enter-active {
+  animation: msgbox-fade-in .3s;
+}
+
+.msgbox-fade-leave-active {
+  animation: msgbox-fade-out .3s;
+}
+
+@keyframes msgbox-fade-in {
+  0% {
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+  100% {
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+@keyframes msgbox-fade-out {
+  0% {
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+  100% {
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+}

+ 101 - 0
packages/theme-chalk/src/message.scss

@@ -0,0 +1,101 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(message) {
+  box-shadow: $--message-shadow;
+  min-width: $--message-min-width;
+  box-sizing: border-box;
+  border-radius: $--border-radius-small;
+  position: fixed;
+  left: 50%;
+  top: 20px;
+  transform: translateX(-50%);
+  background-color: $--color-white;
+  transition: opacity 0.3s, transform .4s;
+  overflow: hidden;
+
+  @include e(group) {
+    margin-left: 40px;
+    position: relative;
+    height: 20px;
+    line-height: 20px;
+    display: flex;
+    align-items: center;
+    padding: $--message-padding;
+
+    & p {
+      font-size: $--font-size-base;
+      margin: 0 34px 0 0;
+      white-space: nowrap;
+      color: $--message-content-color;
+      text-align: justify;
+    }
+  }
+
+  @include e(icon) {
+    height: 40px;
+    width: 40px;
+    display: inline-block;
+    float: left;
+    text-align: center;
+
+    i {
+      line-height: 40px;
+
+      &.el-message__type {
+        color: $--color-white;
+      }
+    }
+
+    @include m(info) {
+      background-color: $--color-info;
+    }
+
+    @include m(warning) {
+      background-color: $--color-warning;
+    }
+
+    @include m(error) {
+      background-color: $--color-danger;
+    }
+
+    @include m(success) {
+      background-color: $--color-success;
+    }
+  }
+
+  @include e(closeBtn) {
+    position: absolute;
+    top: 13px;
+    right: 12px;
+    cursor: pointer;
+    color: $--message-close-color;
+    font-size: $--font-size-base;
+
+    &:hover {
+      color: $--message-close-hover-color;
+    }
+  }
+
+  & .el-icon-circle-check {
+    color: $--message-success-color;
+  }
+
+  & .el-icon-circle-cross {
+    color: $--message-danger-color;
+  }
+
+  & .el-icon-information {
+    color: $--message-info-color;
+  }
+
+  & .el-icon-warning {
+    color: $--message-warning-color;
+  }
+}
+
+.el-message-fade-enter,
+.el-message-fade-leave-active {
+  opacity: 0;
+  transform: translate(-50%, -100%);
+}

+ 78 - 0
packages/theme-chalk/src/mixins/_button.scss

@@ -0,0 +1,78 @@
+@import "../common/var";
+@mixin button-plain($color) {
+  color: $color;
+  background: mix($--color-white, $color, 90%);
+  border-color: mix($--color-white, $color, 60%);
+
+  &:hover,
+  &:focus {
+    background: $color;
+    border-color: $color;
+    color: $--color-white;
+  }
+
+  &:active {
+    background: mix($--color-black, $color, $--button-active-shade-percent);
+    border-color: mix($--color-black, $color, $--button-active-shade-percent);
+    color: $--color-white;
+    outline: none;
+  }
+
+  &.is-disabled {
+    &,
+    &:hover,
+    &:focus,
+    &:active {
+      color: mix($--color-white, $color, 40%);
+      background-color: mix($--color-white, $color, 90%);
+      border-color: mix($--color-white, $color, 80%);
+    }
+  }
+}
+
+@mixin button-variant($color, $background-color, $border-color) {
+  color: $color;
+  background-color: $background-color;
+  border-color: $border-color;
+
+  &:hover,
+  &:focus {
+    background: mix($--color-white, $background-color, $--button-hover-tint-percent);
+    border-color: mix($--color-white, $border-color, $--button-hover-tint-percent);
+    color: $color;
+  }
+  
+  &:active {
+    background: mix($--color-black, $background-color, $--button-active-shade-percent);
+    border-color: mix($--color-black, $border-color, $--button-active-shade-percent);
+    color: $color;
+    outline: none;
+  }
+
+  &.is-active {
+    background: mix($--color-black, $background-color, $--button-active-shade-percent);
+    border-color: mix($--color-black, $border-color, $--button-active-shade-percent);
+    color: $color;
+  }
+
+  &.is-disabled {
+    &,
+    &:hover,
+    &:focus,
+    &:active {
+      color: $--color-white;
+      background-color: mix($background-color, $--color-white);
+      border-color: mix($border-color, $--color-white);
+    }
+  }
+
+  &.is-plain {
+    @include button-plain($background-color);
+  }
+}
+
+@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {
+  padding: $padding-vertical $padding-horizontal;
+  font-size: $font-size;
+  border-radius: $border-radius;
+}

+ 4 - 0
packages/theme-chalk/src/mixins/config.scss

@@ -0,0 +1,4 @@
+$namespace: 'el';
+$element-separator: '__';
+$modifier-separator: '--';
+$state-prefix: 'is-';

+ 44 - 0
packages/theme-chalk/src/mixins/function.scss

@@ -0,0 +1,44 @@
+@import "config";
+
+/* BEM support Func
+ -------------------------- */
+@function selectorToString($selector) {
+  $selector: inspect($selector);
+  $selector: str-slice($selector, 2, -2);
+  @return $selector;
+}
+
+@function containsModifier($selector) {
+  $selector: selectorToString($selector);
+
+  @if str-index($selector, $modifier-separator) {
+    @return true;
+  } @else {
+    @return false;
+  }
+}
+
+@function containWhenFlag($selector) {
+  $selector: selectorToString($selector);
+
+  @if str-index($selector, '.' + $state-prefix) {
+    @return true
+  } @else {
+    @return false
+  }
+}
+
+@function containPseudoClass($selector) {
+  $selector: selectorToString($selector);
+
+  @if str-index($selector, ':') {
+    @return true
+  } @else {
+    @return false
+  }
+}
+
+@function hitAllSpecialNestRule($selector) {
+
+  @return containsModifier($selector) or containWhenFlag($selector) or containPseudoClass($selector);
+}

+ 169 - 0
packages/theme-chalk/src/mixins/mixins.scss

@@ -0,0 +1,169 @@
+@import "function";
+@import "../common/var";
+
+/* Transition
+ -------------------------- */
+@mixin primary-transition {
+  transition: $t-primary;
+}
+
+@mixin specific-transition($attr) {
+  transition: $attr $t-primary;
+}
+
+@mixin specific-transition-with-time($attr, $time) {
+  transition: $attr $t-primary;
+}
+
+/* Flex
+ -------------------------- */
+@mixin flex-center {
+  justify-content: center;
+  align-items: center;
+}
+
+@mixin flex-left-center {
+  justify-content: flex-start;
+  align-items: center;
+}
+
+
+/* placeholder
+ -------------------------- */
+@mixin placeholder {
+  &::-webkit-input-placeholder {
+    @content
+  }
+  &::-moz-placeholder {
+    @content
+  }
+  &:-ms-input-placeholder {
+    @content
+  }
+}
+
+/* BEM
+ -------------------------- */
+@mixin b($block) {
+  $B: $namespace+'-'+$block !global;
+
+  .#{$B} {
+    @content;
+  }
+}
+
+@mixin e($element) {
+  $E: $element !global;
+  $selector: &;
+  $currentSelector: "";
+  @each $unit in $element {
+    $currentSelector: #{$currentSelector + "." + $B + $element-separator + $unit + ","};
+  }
+
+  @if hitAllSpecialNestRule($selector) {
+    @at-root {
+      #{$selector} {
+        #{$currentSelector} {
+          @content;
+        }
+      }
+    }
+  } @else {
+    @at-root {
+      #{$currentSelector} {
+        @content;
+      }
+    }
+  }
+}
+
+@mixin m($modifier) {
+  $selector: &;
+  $currentSelector: "";
+  @each $unit in $modifier {
+    $currentSelector: #{$currentSelector + & + $modifier-separator + $unit + ","};
+  }
+
+  @at-root {
+    #{$currentSelector} {
+      @content;
+    }
+  }
+}
+
+@mixin configurable-m($modifier, $E-flag: false) {
+  $selector: &;
+  $interpolation: '';
+
+  @if $E-flag {
+    $interpolation: $element-separator + $E-flag;
+  }
+
+  @at-root {
+    #{$selector} {
+      .#{$B+$interpolation+$modifier-separator+$modifier} {
+        @content;
+      }
+    }
+  }
+}
+
+@mixin spec-selector($specSelector: '', $element: $E, $modifier: false, $block: $B) {
+  $modifierCombo: '';
+
+  @if $modifier {
+    $modifierCombo: $modifier-separator + $modifier;
+  }
+
+  @at-root {
+    #{&}#{$specSelector}.#{$block+$element-separator+$element+$modifierCombo} {
+      @content
+    }
+  }
+}
+
+@mixin meb($modifier: false, $element: $E, $block: $B) {
+  $selector: &;
+  $modifierCombo: '';
+
+  @if $modifier {
+    $modifierCombo: $modifier-separator + $modifier;
+  }
+
+  @at-root {
+    #{$selector} {
+      .#{$block+$element-separator+$element+$modifierCombo} {
+        @content
+      }
+    }
+  }
+}
+
+@mixin when($state) {
+  $selector: &;
+
+  @at-root {
+    #{$selector}.#{$state-prefix + $state} {
+      @content;
+    }
+  }
+}
+
+@mixin extend-rule($name) {
+  @extend #{'%shared-'+$name};
+}
+
+@mixin share-rule($name) {
+  $rule-name: '%shared-'+$name;
+
+  @at-root #{$rule-name} {
+    @content
+  }
+}
+
+@mixin pseudo($pseudo) {
+  @at-root #{&}#{':#{$pseudo}'} {
+    @content
+  }
+}
+

+ 39 - 0
packages/theme-chalk/src/mixins/utils.scss

@@ -0,0 +1,39 @@
+@mixin utils-user-select($value) {
+  -moz-user-select: $value;
+  -webkit-user-select: $value;
+  -ms-user-select: $value;
+}
+
+@mixin utils-clearfix {
+  $selector: &;
+
+  @at-root {
+    #{$selector}::before,
+    #{$selector}::after {
+      display: table;
+      content: "";
+    }
+    #{$selector}::after {
+      clear: both
+    }
+  }
+}
+
+@mixin utils-vertical-center {
+  $selector: &;
+
+  @at-root {
+    #{$selector}::after {
+      display: inline-block;
+      content: "";
+      height: 100%;
+      vertical-align: middle
+    }
+  }
+}
+
+@mixin utils-ellipsis {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}

+ 102 - 0
packages/theme-chalk/src/notification.scss

@@ -0,0 +1,102 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(notification) {
+  width: $--notification-width;
+  padding: $--notification-padding;
+  box-sizing: border-box;
+  border-radius: $--border-radius-small;
+  position: fixed;
+  background-color: $--color-white;
+  box-shadow: $--notification-shadow;
+  transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s;
+  overflow: hidden;
+
+  &.right {
+    right: 16px;
+  }
+
+  &.left {
+    left: 16px;
+  }
+
+  @include e(group) {
+    margin-left: 0;
+    @include when(with-icon) {
+      margin-left: 55px;
+    }
+  }
+
+  @include e(title) {
+    font-weight: normal;
+    font-size: $--notification-title-font-size;
+    color: $--notification-title-color;
+    margin: 0;
+  }
+
+  @include e(content) {
+    font-size: $--notification-font-size;
+    line-height: 21px;
+    margin: 10px 0 0 0;
+    color: $--notification-color;
+    text-align: justify;
+
+    p {
+      margin: 0;
+    }
+  }
+
+  @include e(icon) {
+    height: $--notification-icon-size;
+    width: $--notification-icon-size;
+    font-size: $--notification-icon-size;
+    float: left;
+    position: relative;
+    top: 3px;
+  }
+
+  @include e(closeBtn) {
+    position: absolute;
+    top: 20px;
+    right: 20px;
+    cursor: pointer;
+    color: $--notification-close-color;
+    font-size: $--notification-font-size;
+
+    &:hover {
+      color: $--notification-close-hover-color;
+    }
+  }
+
+  & .el-icon-circle-check {
+    color: $--notification-success-color;
+  }
+
+  & .el-icon-circle-cross {
+    color: $--notification-danger-color;
+  }
+
+  & .el-icon-information {
+    color: $--notification-info-color;
+  }
+
+  & .el-icon-warning {
+    color: $--notification-warning-color;
+  }
+}
+
+.el-notification-fade-enter {
+  &.right {
+    right: 0;
+    transform: translateX(100%);
+  }
+
+  &.left {
+    left: 0;
+    transform: translateX(-100%);
+  }
+}
+
+.el-notification-fade-leave-active {
+  opacity: 0;
+}

+ 25 - 0
packages/theme-chalk/src/option-group.scss

@@ -0,0 +1,25 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(select-group) {
+  margin: 0;
+  padding: 0;
+
+  @include e(wrap) {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+  }
+
+  @include e(title) {
+    padding-left: 10px;
+    font-size: $--select-group-font-size;
+    color: $--select-group-color;
+    height: $--select-group-height;
+    line-height: $--select-group-height;
+  }
+
+  & .el-select-dropdown__item {
+    padding-left: 20px;
+  }
+}

+ 44 - 0
packages/theme-chalk/src/option.scss

@@ -0,0 +1,44 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(select-dropdown) {
+  @include e(item) {
+    font-size: $--select-font-size;
+    padding: 8px 10px;
+    position: relative;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    color: $--select-option-color;
+    height: $--select-option-height;
+    line-height: 1.5;
+    box-sizing: border-box;
+    cursor: pointer;
+
+    @include when(disabled) {
+      color: $--select-option-disabled-color;
+      cursor: not-allowed;
+
+      &:hover {
+        background-color: $--color-white;
+      }
+    }
+
+    &.hover, &:hover {
+      background-color: $--select-option-hover-background;
+    }
+
+    &.selected {
+      color: $--color-white;
+      background-color: $--select-option-selected;
+
+      &.hover {
+        background-color: $--select-option-selected-hover;
+      }
+    }
+
+    & span {
+      line-height: 1.5 !important;
+    }
+  }
+}

+ 208 - 0
packages/theme-chalk/src/pagination.scss

@@ -0,0 +1,208 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import "common/var";
+@import "select";
+
+@include b(pagination) {
+  white-space: nowrap;
+  padding: 2px 5px;
+  color: $--pagination-color;
+  @include utils-clearfix;
+
+  span,
+  button {
+    display: inline-block;
+    font-size: $--pagination-font-size;
+    min-width: $--pagination-button-size;
+    height: $--pagination-button-size;
+    line-height: $--pagination-button-size;
+    vertical-align: top;
+    box-sizing: border-box;
+  }
+
+  .el-select .el-input {
+    width: 110px;
+    input {
+      padding-right: 25px;
+      border-radius: $--border-radius-small;
+      height: 28px;
+    }
+  }
+
+  button {
+    border: none;
+    padding: 0 6px;
+    background: transparent;
+
+    &:focus {
+      outline: none;
+    }
+
+    &:hover {
+      color: $--pagination-hover-fill;
+    }
+
+    &.disabled {
+      color: $--pagination-button-disabled-color;
+      background-color: $--pagination-button-disabled-fill;
+      cursor: not-allowed;
+    }
+  }
+
+  .btn-prev,
+  .btn-next {
+    background: center center no-repeat;
+    background-size: 16px;
+    background-color: $--pagination-fill;
+    border: 1px solid $--pagination-border-color;
+    cursor: pointer;
+    margin: 0;
+    color: $--pagination-button-color;
+
+    .el-icon {
+      display: block;
+      font-size: 12px;
+    }
+  }
+
+  .btn-prev {
+    border-radius: $--pagination-border-radius 0 0 $--pagination-border-radius;
+    border-right: 0;
+  }
+
+  .btn-next {
+    border-radius: 0 $--pagination-border-radius $--pagination-border-radius 0;
+    border-left: 0;
+  }
+
+  @include m(small) {
+    .btn-prev,
+    .btn-next,
+    .el-pager li,
+    .el-pager li:last-child {
+      border-color: transparent;
+      font-size: 12px;
+      line-height: 22px;
+      height: 22px;
+      min-width: 22px;
+    }
+
+    .arrow.disabled {
+      visibility: hidden;
+    }
+
+    .el-pager li {
+      border-radius: $--pagination-border-radius;
+    }
+  }
+
+  @include e(sizes) {
+    margin: 0 10px 0 0;
+
+    .el-input .el-input__inner {
+      font-size: 13px;
+      border-color: $--pagination-border-color;
+
+      &:hover {
+        border-color: $--pagination-hover-fill;
+      }
+    }
+  }
+
+  @include e(jump) {
+    margin-left: 10px;
+  }
+
+  @include e(total) {
+    margin: 0 10px;
+  }
+
+  @include e(rightwrapper) {
+    float: right;
+  }
+
+  @include e(editor) {
+    border: 1px solid $--pagination-border-color;
+    border-radius: $--pagination-border-radius;
+    line-height: 18px;
+    padding: 4px 2px;
+    width: 30px;
+    text-align: center;
+    margin: 0 6px;
+    box-sizing: border-box;
+    transition: border .3s;
+    -moz-appearance: textfield;
+
+    &::-webkit-inner-spin-button,
+    &::-webkit-outer-spin-button {
+      -webkit-appearance: none;
+      margin: 0;
+    }
+
+    &:focus {
+      outline: none;
+      border-color: $--pagination-hover-fill;
+    };
+  }
+}
+
+@include b(pager) {
+  user-select: none;
+  list-style: none;
+  display: inline-block;
+  vertical-align: top;
+  font-size: 0;
+  padding: 0;
+  margin: 0;
+
+  li {
+    padding: 0 4px;
+    border: 1px solid $--pagination-border-color;
+    border-right: 0;
+    background: $--pagination-fill;
+    vertical-align: top;
+    display: inline-block;
+    font-size: $--pagination-font-size;
+    min-width: $--pagination-button-size;
+    height: $--pagination-button-size;
+    line-height: $--pagination-button-size;
+    cursor: pointer;
+    box-sizing: border-box;
+    text-align: center;
+    margin: 0;
+
+    &:last-child {
+      border-right: 1px solid $--pagination-border-color;
+    }
+
+    &.btn-quicknext,
+    &.btn-quickprev {
+      line-height: 28px;
+      color: $--pagination-button-color;
+    }
+
+    &.btn-quickprev:hover {
+      cursor: pointer;
+    }
+
+    &.btn-quicknext:hover {
+      cursor: pointer;
+    }
+
+    &.active + li {
+      border-left: 0;
+      padding-left: 5px;
+    }
+
+    &:hover {
+      color: $--pagination-hover-fill;
+    }
+
+    &.active {
+      border-color: $--pagination-hover-fill;
+      background-color: $--pagination-hover-fill;
+      color: $--pagination-hover-color;
+      cursor: default;
+    }
+  }
+}

+ 118 - 0
packages/theme-chalk/src/popover.scss

@@ -0,0 +1,118 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(popover) {
+  position: absolute;
+  background: $--popover-fill;
+  min-width: 150px;
+  border-radius: 2px;
+  border: 1px solid $--popover-border-color;
+  padding: $--popover-padding;
+  z-index: $--index-popper;
+  font-size: $--popover-font-size;
+  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .12),
+              0 0 6px 0 rgba(0, 0, 0, .04);
+
+  .popper__arrow,
+  .popper__arrow::after {
+    position: absolute;
+    display: block;
+    width: 0;
+    height: 0;
+    border-color: transparent;
+    border-style: solid;
+  }
+
+  .popper__arrow {
+    border-width: $--popover-arrow-size;
+  }
+
+  .popper__arrow::after {
+    content: " ";
+    border-width: $--popover-arrow-size;
+  }
+
+  &[x-placement^="top"] {
+    margin-bottom: #{$--popover-arrow-size + 6};
+  }
+
+  &[x-placement^="top"] .popper__arrow {
+    bottom: -$--popover-arrow-size;
+    left: 50%;
+    margin-right: #{$--tooltip-arrow-size / 2};
+    border-top-color: $--popover-border-color;
+    border-bottom-width: 0;
+
+    &::after {
+      bottom: 1px;
+      margin-left: -$--popover-arrow-size;
+      border-top-color: $--popover-fill;
+      border-bottom-width: 0;
+    }
+  }
+
+  &[x-placement^="bottom"] {
+    margin-top: #{$--popover-arrow-size + 6};
+  }
+
+  &[x-placement^="bottom"] .popper__arrow {
+    top: -$--popover-arrow-size;
+    left: 50%;
+    margin-right: #{$--tooltip-arrow-size / 2};
+    border-top-width: 0;
+    border-bottom-color: $--popover-border-color;
+
+    &::after {
+      top: 1px;
+      margin-left: -$--popover-arrow-size;
+      border-top-width: 0;
+      border-bottom-color: $--popover-fill;
+    }
+  }
+
+  &[x-placement^="right"] {
+    margin-left: #{$--popover-arrow-size + 6};
+  }
+
+  &[x-placement^="right"] .popper__arrow {
+    top: 50%;
+    left: -$--popover-arrow-size;
+    margin-bottom: #{$--tooltip-arrow-size / 2};
+    border-right-color: $--popover-border-color;
+    border-left-width: 0;
+
+    &::after {
+      bottom: -$--popover-arrow-size;
+      left: 1px;
+      border-right-color: $--popover-fill;
+      border-left-width: 0;
+    }
+  }
+
+  &[x-placement^="left"] {
+    margin-right: #{$--popover-arrow-size + 6};
+  }
+
+  &[x-placement^="left"] .popper__arrow {
+    top: 50%;
+    right: -$--popover-arrow-size;
+    margin-bottom: #{$--tooltip-arrow-size / 2};
+    border-right-width: 0;
+    border-left-color: $--popover-border-color;
+
+    &::after {
+      right: 1px;
+      bottom: -$--popover-arrow-size;
+      margin-left: -$--popover-arrow-size;
+      border-right-width: 0;
+      border-left-color: $--popover-fill;
+    }
+  }
+
+  @include e(title) {
+    color: $--popover-title-color;
+    font-size: $--popover-title-font-size;
+    line-height: 1;
+    margin-bottom: 9px;
+  }
+}

+ 119 - 0
packages/theme-chalk/src/progress.scss

@@ -0,0 +1,119 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import "common/var";
+
+@include b(progress) {
+  position: relative;
+  line-height: 1;
+
+  @include e(text) {
+    font-size:14px;
+    color: $--color-black;
+    display: inline-block;
+    vertical-align: middle;
+    margin-left: 10px;
+    line-height: 1;
+
+    i {
+      vertical-align: middle;
+      display: block;
+    }
+  }
+  @include m(circle) {
+    display: inline-block;
+
+    .el-progress__text {
+      position: absolute;
+      top: 50%;
+      left: 0;
+      width: 100%;
+      text-align: center;
+      margin: 0;
+      transform: translate(0, -50%);
+
+      i {
+        vertical-align: middle;
+        display: inline-block;
+      }
+    }
+  }
+  @include m(without-text) {
+    .el-progress__text {
+      display: none;
+    }
+    .el-progress-bar {
+      padding-right: 0;
+      margin-right: 0;
+      display: block;
+    }
+  }
+  @include m(text-inside) {
+    .el-progress-bar {
+      padding-right: 0;
+      margin-right: 0;
+    }
+  }
+  @include when(success) {
+    .el-progress-bar__inner {
+      background-color: $--color-success;
+    }
+    .el-progress__text {
+      color: $--color-success;
+    }
+  }
+  @include when(exception) {
+    .el-progress-bar__inner {
+      background-color: $--color-danger;
+    }
+    .el-progress__text {
+      color: $--color-danger;
+    }
+  }
+}
+
+@include b(progress-bar) {
+  padding-right: 50px;
+  display: inline-block;
+  vertical-align: middle;
+  width: 100%;
+  margin-right: -55px;
+  box-sizing: border-box;
+
+  @include e(outer) {
+    height: 6px;
+    border-radius: 100px;
+    background-color: $--color-black;
+    overflow: hidden;
+    position: relative;
+    vertical-align: middle;
+  }
+  @include e(inner) {
+    position: absolute;
+    left: 0;
+    top: 0;
+    height: 100%;
+    background-color: $--color-primary;
+    text-align: right;
+    border-radius: 100px;
+    line-height: 1;
+    white-space: nowrap;
+
+    @include utils-vertical-center;
+  }
+  @include e(innerText) {
+    display: inline-block;
+    vertical-align: middle;
+    color: $--color-white;
+    font-size: 12px;
+    margin: 0 5px;
+  }
+}
+
+@keyframes progress {
+  0% {
+    background-position: 0 0;
+  }
+  100% {
+    background-position: 32px 0;
+  }
+}

+ 110 - 0
packages/theme-chalk/src/radio-button.scss

@@ -0,0 +1,110 @@
+@import "mixins/mixins";
+@import "mixins/_button";
+@import "common/var";
+
+@include b(radio-button) {
+  position: relative;
+  display: inline-block;
+
+  @include e(inner) {
+    display: inline-block;
+    line-height: 1;
+    white-space: nowrap;
+    vertical-align: middle;
+    background: $--button-default-fill;
+    border: $--border-base;
+    border-left: 0;
+    color: $--button-default-color;
+    -webkit-appearance: none;
+    text-align: center;
+    box-sizing: border-box;
+    outline: none;
+    margin: 0;
+    position: relative;
+    cursor: pointer;
+    transition: $--all-transition;
+
+    @include button-size($--button-padding-vertical, $--button-padding-horizontal, $--button-font-size, 0);
+
+    &:hover {
+      color: $--color-primary;
+    }
+
+    & [class*="el-icon-"] {
+      line-height: 0.9;
+
+      & + span {
+        margin-left: 5px;
+      }
+    }
+  }
+
+  @include e(orig-radio) {
+    opacity: 0;
+    outline: none;
+    position: absolute;
+    z-index: -1;
+    left: -999px;
+
+    &:checked {
+      & + .el-radio-button__inner {
+        color: $--radio-button-checked-color;
+        background-color: $--radio-button-checked-fill;
+        border-color: $--radio-button-checked-border-color;
+        box-shadow: -1px 0 0 0 $--radio-button-checked-border-color;
+      }
+    }
+
+    &:disabled {
+      & + .el-radio-button__inner {
+        color: $--button-disabled-color;
+        cursor: not-allowed;
+        background-image: none;
+        background-color: $--button-disabled-fill;
+        border-color: $--button-disabled-border;
+        box-shadow: none;
+      }
+    }
+  }
+
+  &:first-child {
+    .el-radio-button__inner {
+      border-left: $--border-base;
+      border-radius: $--border-radius-base 0 0 $--border-radius-base;
+      box-shadow: none !important;
+    }
+  }
+  &:focus {
+    outline: none;
+    .el-radio-button__inner { /*获得焦点时 样式提醒*/
+      box-shadow: 0 0 1px 1px $--radio-button-checked-border-color !important;
+    }
+  }
+  &:last-child {
+    .el-radio-button__inner {
+      border-radius: 0 $--border-radius-base $--border-radius-base 0;
+    }
+  }
+
+  &:first-child:last-child {
+    .el-radio-button__inner {
+      border-radius: $--border-radius-base;
+    }
+  }
+
+  @include m(medium) {
+    & .el-radio-button__inner {
+      @include button-size($--button-medium-padding-vertical, $--button-medium-padding-horizontal, $--button-medium-font-size, 0);
+    }
+  }
+  @include m(small) {
+    & .el-radio-button__inner {
+      @include button-size($--button-small-padding-vertical, $--button-small-padding-horizontal, $--button-small-font-size, 0);
+    }
+  }
+  @include m(mini) {
+    & .el-radio-button__inner {
+      @include button-size($--button-mini-padding-vertical, $--button-mini-padding-horizontal, $--button-mini-font-size, 0);
+    }
+  }
+}

+ 13 - 0
packages/theme-chalk/src/radio-group.scss

@@ -0,0 +1,13 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(radio-group) {
+  display: inline-block;
+  font-size: 0;
+  line-height: 1;
+  vertical-align: middle;
+
+  & .el-radio {
+    font-size: $--radio-font-size;
+  }
+}

+ 127 - 0
packages/theme-chalk/src/radio.scss

@@ -0,0 +1,127 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import 'mixins/button';
+@import "common/var";
+
+@include b(radio) {
+  color: $--radio-color;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  @include utils-user-select(none);
+
+  &:focus { /*获得焦点时 样式提醒*/
+    outline: none;
+    .el-radio__inner {
+      box-shadow: 0 0 1px 1px $--radio-input-border-color-hover;
+    }
+  }
+
+  & + .el-radio {
+    margin-left: 15px;
+  }
+
+  @include e(input) {
+    white-space: nowrap;
+    cursor: pointer;
+    outline: none;
+    display: inline-block;
+    line-height: 1;
+    position: relative;
+    vertical-align: middle;
+
+    @include when(disabled) {
+      .el-radio__inner {
+        background-color: $--radio-disabled-input-fill;
+        border-color: $--radio-disabled-input-border-color;
+        cursor: not-allowed;
+
+        &::after {
+          cursor: not-allowed;
+          background-color: $--radio-disabled-icon-color;
+        }
+
+        & + .el-radio__label {
+          cursor: not-allowed;
+        }
+      }
+      &.is-checked {
+        .el-radio__inner {
+          background-color: $--radio-disabled-checked-input-fill;
+          border-color: $--radio-disabled-checked-input-border-color;
+
+          &::after {
+            background-color: $--radio-disabled-checked-icon-color;
+          }
+        }
+      }
+      & + .el-radio__label {
+        color: $--disabled-color-base;
+        cursor: not-allowed;
+      }
+    }
+
+    @include when(checked) {
+      .el-radio__inner {
+        border-color: $--radio-checked-input-border-color;
+        background: $--radio-checked-icon-color;
+
+        &::after {
+          transform: translate(-50%, -50%) scale(1);
+        }
+      }
+    }
+
+    @include when(focus) {
+      .el-radio__inner {
+        border-color: $--radio-input-border-color-hover;
+      }
+    }
+  }
+  @include e(inner) {
+    border: $--radio-input-border;
+    border-radius: $--radio-input-border-radius;
+    width: $--radio-input-width;
+    height: $--radio-input-width;
+    background-color: $--radio-input-fill;
+    position: relative;
+    cursor: pointer;
+    display: inline-block;
+    box-sizing: border-box;
+
+    &:hover {
+      border-color: $--radio-input-border-color-hover;
+    }
+
+    &::after {
+      width: 6px;
+      height: 6px;
+      border-radius: $--radio-input-border-radius;
+      background-color: $--color-white;
+      content: "";
+      position: absolute;
+      left: 50%;
+      top: 50%;
+      transform: translate(-50%, -50%) scale(0);
+      transition: transform .15s cubic-bezier(.71,-.46,.88,.6);
+    }
+  }
+
+  @include e(original) {
+    opacity: 0;
+    outline: none;
+    position: absolute;
+    z-index: -1;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    margin: 0;
+  }
+
+  @include e(label) {
+    font-size: $--radio-font-size;
+    padding-left: 5px;
+  }
+}

+ 45 - 0
packages/theme-chalk/src/rate.scss

@@ -0,0 +1,45 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(rate) {
+  height: $--rate-height;
+  line-height: 1;
+
+  @include e(item) {
+    display: inline-block;
+    position: relative;
+    font-size: 0;
+    vertical-align: middle;
+  }
+
+  @include e(icon) {
+    position: relative;
+    display: inline-block;
+    font-size: $--rate-icon-size;
+    margin-right: $--rate-icon-margin;
+    color: $--rate-icon-color;
+    transition: .3s;
+    &.hover {
+      transform: scale(1.15);
+    }
+
+    .path2 {
+      position: absolute;
+      left: 0;
+      top: 0;
+    }
+  }
+
+  @include e(decimal) {
+    position: absolute;
+    top: 0;
+    left: 0;
+    display: inline-block;
+    overflow: hidden;
+  }
+
+  @include e(text) {
+    font-size: $--rate-font-size;
+    vertical-align: middle;
+  }
+}

+ 79 - 0
packages/theme-chalk/src/reset.scss

@@ -0,0 +1,79 @@
+@import 'common/var';
+
+@reset-global pc;
+body {
+  font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
+  font-weight: 400;
+  font-size: $--font-size-base;
+  color: $--color-black;
+}
+
+a {
+  color: $--color-primary;
+  text-decoration: none;
+
+  &:hover,
+  &:focus {
+    color: mix($--color-white, $--color-primary, $--button-hover-tint-percent);
+  }
+
+  &:active {
+    color: mix($--color-black, $--color-primary, $--button-active-shade-percent);
+  }
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: $--font-color-base;
+  font-weight: inherit;
+
+  &:first-child {
+    margin-top: 0;
+  }
+
+  &:last-child {
+    margin-bottom: 0;
+  }
+}
+
+h1 {
+  font-size: #{$--font-size-base + 6px};
+}
+
+h2 {
+  font-size: #{$--font-size-base + 4px};
+}
+
+h3 {
+  font-size: #{$--font-size-base + 2px};
+}
+
+h4, h5, h6, p {
+  font-size: inherit;
+}
+
+p {
+  line-height: 1.8;
+
+  &:first-child {
+    margin-top: 0;
+  }
+
+  &:last-child {
+    margin-bottom: 0;
+  }
+}
+
+sup, sub {
+  font-size: #{$--font-size-base - 1px};
+}
+
+small {
+  font-size: #{$--font-size-base - 2px};
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+}

+ 39 - 0
packages/theme-chalk/src/row.scss

@@ -0,0 +1,39 @@
+@import "common/var";
+@import "mixins/mixins";
+@import "mixins/utils";
+
+@include b(row) {
+  position: relative;
+  box-sizing: border-box;
+  @include utils-clearfix;
+
+  @include m(flex) {
+    display: flex;
+    &:before,
+    &:after {
+      display: none;
+    }
+
+    @include when(justify-center) {
+      justify-content: center;
+    }
+    @include when(justify-end) {
+      justify-content: flex-end;
+    }
+    @include when(justify-space-between) {
+      justify-content: space-between;
+    }
+    @include when(justify-space-around) {
+      justify-content: space-around;
+    }
+
+    @include when(align-middle) {
+      align-items: center;
+    }
+    @include when(align-bottom) {
+      align-items: flex-end;
+    }
+  }
+
+}
+

+ 70 - 0
packages/theme-chalk/src/scrollbar.scss

@@ -0,0 +1,70 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(scrollbar) {
+  overflow: hidden;
+  position: relative;
+
+  &:hover,
+  &:active,
+  &:focus {
+    .el-scrollbar__bar {
+      opacity: 1;
+      transition: opacity 340ms ease-out;
+    }
+  }
+
+  @include e(wrap) {
+    overflow: scroll;
+
+    @include m(hidden-default) {
+      &::-webkit-scrollbar {
+        width: 0;
+        height: 0;
+      }
+    }
+  }
+
+  @include e(thumb) {
+    position: relative;
+    display: block;
+    width: 0;
+    height: 0;
+    cursor: pointer;
+    border-radius: inherit;
+    background-color: $--scrollbar-background-color;
+    transition: .3s background-color;
+
+    &:hover {
+      background-color: $--scrollbar-hover-background-color;
+    }
+  }
+
+  @include e(bar) {
+    position: absolute;
+    right: 2px;
+    bottom: 2px;
+    z-index: 1;
+    border-radius: 4px;
+    opacity: 0;
+    transition: opacity 120ms ease-out;
+
+    @include when(vertical) {
+      width: 6px;
+      top: 2px;
+
+      > div {
+        width: 100%;
+      }
+    }
+
+    @include when(horizontal) {
+      height: 6px;
+      left: 2px;
+
+      > div {
+        height: 100%;
+      }
+    }
+  }
+}

+ 57 - 0
packages/theme-chalk/src/select-dropdown.scss

@@ -0,0 +1,57 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(select-dropdown) {
+  position: absolute;
+  z-index: #{$--index-top + 1};
+  border: $--select-dropdown-border;
+  border-radius: $--border-radius-small;
+  background-color: $--select-dropdown-background;
+  box-shadow: $--select-dropdown-shadow;
+  box-sizing: border-box;
+  margin: 5px 0;
+
+  @include when(multiple) {
+    & .el-select-dropdown__item.selected {
+      color: $--select-option-selected;
+      background-color: $--select-dropdown-background;
+
+      &.hover {
+        background-color: $--select-option-hover-background;
+      }
+
+      &::after {
+        position: absolute;
+        right: 10px;
+        font-family: 'element-icons';
+        content: "\E608";
+        font-size: 11px;
+        -webkit-font-smoothing: antialiased;
+        -moz-osx-font-smoothing: grayscale;
+      }
+    }
+  }
+
+  .el-scrollbar.is-empty .el-select-dropdown__list{
+    padding: 0;
+  }
+}
+
+@include b(select-dropdown__empty) {
+  padding: $--select-dropdown-empty-padding;
+  margin: 0;
+  text-align: center;
+  color: $--select-dropdown-empty-color;
+  font-size: $--select-font-size;
+}
+
+@include b(select-dropdown__wrap) {
+  max-height: $--select-dropdown-max-height;
+}
+
+@include b(select-dropdown__list) {
+  list-style: none;
+  padding: $--select-dropdown-padding;
+  margin: 0;
+  box-sizing: border-box;
+}

+ 143 - 0
packages/theme-chalk/src/select.scss

@@ -0,0 +1,143 @@
+@import "mixins/mixins";
+@import "common/var";
+@import "select-dropdown";
+@import "input";
+@import "tag";
+@import "option";
+@import "option-group";
+@import "scrollbar";
+
+@include b(select) {
+  display: inline-block;
+  position: relative;
+
+  &:hover {
+    .el-input__inner {
+      border-color: $--select-border-color-hover;
+    }
+  }
+
+  & .el-input__inner {
+    cursor: pointer;
+    padding-right: 35px;
+
+    &:focus {
+      border-color: $--select-input-focus-background;
+    }
+  }
+
+  & .el-input {
+    & .el-input__icon {
+      color: $--select-input-color;
+      font-size: $--select-input-font-size;
+      transition: transform .3s;
+      transform: translateY(-50%) rotateZ(180deg);
+      line-height: 16px;
+      top: 50%;
+      cursor: pointer;
+
+      @include when(reverse) {
+        transform: translateY(-50%);
+      }
+
+      @include when(show-close) {
+        transition: 0s;
+        height: 16px;
+        width: 16px;
+        font-size: $--select-font-size;
+        right: 8px;
+        text-align: center;
+        transform: translateY(-50%) rotateZ(180deg);
+        border-radius: $--border-radius-circle;
+        color: $--select-input-color;
+
+        &:hover {
+          color: $--select-close-hover-color;
+        }
+      }
+    }
+
+    &.is-disabled {
+      & .el-input__inner {
+        cursor: not-allowed;
+
+        &:hover {
+          border-color: $--select-disabled-border;
+        }
+      }
+    }
+
+    &.is-focus .el-input__inner {
+      border-color: $--input-focus-border;
+    }
+  }
+
+  & > .el-input {
+    display: block;
+  }
+
+  @include e(input) {
+    border: none;
+    outline: none;
+    padding: 0;
+    margin-left: 10px;
+    color: $--select-multiple-input-color;
+    font-size: $--select-font-size;
+    vertical-align: baseline;
+    appearance: none;
+    height: 28px;
+    background-color: transparent;
+    @include when(mini) {
+      height: 14px;
+    }
+  }
+
+  @include e(close) {
+    cursor: pointer;
+    position: absolute;
+    top: 8px;
+    z-index: $--index-top;
+    right: 25px;
+    color: $--select-input-color;
+    line-height: 18px;
+    font-size: $--select-input-font-size;
+
+    &:hover {
+      color: $--select-close-hover-color;
+    }
+  }
+
+  @include e(tags) {
+    position: absolute;
+    line-height: normal;
+    white-space: normal;
+    z-index: $--index-normal;
+    top: 50%;
+    transform: translateY(-50%);
+  }
+
+  & .el-tag__close {
+    margin-top: -2px;
+  }
+
+  & .el-tag {
+    height: $--select-tag-height;
+    line-height: $--select-tag-height;
+    box-sizing: border-box;
+    margin: 3px 0 3px 6px;
+  }
+
+  @include e(tag) {
+    display: inline-block;
+    height: $--select-tag-height;
+    line-height: $--select-tag-height;
+    font-size: $--select-font-size;
+    border-radius: $--border-radius-base;
+    color: $--select-tag-color;
+    background-color: $--select-tag-background;
+
+    & .el-icon-close {
+      font-size: $--select-input-font-size;
+    }
+  }
+}

+ 209 - 0
packages/theme-chalk/src/slider.scss

@@ -0,0 +1,209 @@
+@import "mixins/mixins";
+@import "mixins/utils";
+@import "input-number";
+@import "tooltip";
+@import "common/var";
+
+@include b(slider) {
+  @include utils-clearfix;
+  @include e(runway) {
+    width: 100%;
+    height: $--slider-height;
+    margin: $--slider-margin;
+    background-color: $--slider-runway-background-color;
+    border-radius: $--slider-border-radius;
+    position: relative;
+    cursor: pointer;
+    vertical-align: middle;
+
+    &.show-input {
+      margin-right: 160px;
+      width: auto;
+    }
+
+    &.disabled {
+      cursor: default;
+
+      .el-slider__bar, .el-slider__button {
+        background-color: $--slider-disable-color;
+      }
+
+      .el-slider__button-wrapper {
+        &:hover,
+        &.hover {
+          cursor: not-allowed;
+        }
+
+        &.dragging {
+          cursor: not-allowed;
+        }
+      }
+
+      .el-slider__button {
+        &:hover,
+        &.hover,
+        &.dragging {
+          transform: scale(1);
+        }
+
+        &:hover,
+        &.hover {
+          cursor: not-allowed;
+        }
+
+        &.dragging {
+          cursor: not-allowed;
+        }
+      }
+    }
+  }
+
+  @include e(input) {
+    float: right;
+    margin-top: 3px;
+  }
+
+  @include e(bar) {
+    height: $--slider-height;
+    background-color: $--slider-main-background-color;
+    border-top-left-radius: $--slider-border-radius;
+    border-bottom-left-radius: $--slider-border-radius;
+    position: absolute;
+  }
+
+  @include e(button-wrapper) {
+    height: $--slider-button-wrapper-size;
+    width: $--slider-button-wrapper-size;
+    position: absolute;
+    z-index: 1001;
+    top: $--slider-button-wrapper-offset;
+    transform: translateX(-50%);
+    background-color: transparent;
+    text-align: center;
+    user-select: none;
+    @include utils-vertical-center;
+
+    .el-tooltip {
+      vertical-align: middle;
+      display: inline-block;
+    }
+
+    &:hover,
+    &.hover {
+      cursor: grab;
+    }
+
+    &.dragging {
+      cursor: grabbing;
+    }
+  }
+
+  @include e(button) {
+    width: $--slider-button-size;
+    height: $--slider-button-size;
+    background-color: $--slider-main-background-color;
+    border-radius: 50%;
+    transition: .2s;
+    user-select: none;
+
+    &:hover,
+    &.hover,
+    &.dragging {
+      transform: scale(1.5);
+      background-color: $--slider-button-hover-color;
+    }
+
+    &:hover,
+    &.hover {
+      cursor: grab;
+    }
+
+    &.dragging {
+      cursor: grabbing;
+    }
+  }
+
+  @include e(stop) {
+    position: absolute;
+    height: $--slider-height;
+    width: $--slider-height;
+    border-radius: $--border-radius-circle;
+    background-color: $--slider-stop-background-color;
+    transform: translateX(-50%);
+  }
+
+  @include when(vertical) {
+    position: relative;
+    .el-slider__runway {
+      width: 4px;
+      height: 100%;
+      margin: 0 16px;
+    }
+    .el-slider__bar {
+      width: 4px;
+      height: auto;
+      border-radius: 0 0 3px 3px;
+    }
+    .el-slider__button-wrapper {
+      top: auto;
+      left: $--slider-button-wrapper-offset;
+      transform: translateY(50%);
+    }
+    .el-slider__stop {
+      transform: translateY(50%);
+    }
+    &.el-slider--with-input {
+      padding-bottom: #{$--input-large-height + 22px};
+      .el-slider__input {
+        overflow: visible;
+        float: none;
+        position: absolute;
+        bottom: 22px;
+        width: 36px;
+        margin-top: 15px;
+        .el-input__inner {
+          text-align: center;
+          padding-left: 5px;
+          padding-right: 5px;
+        }
+        .el-input-number__decrease,
+        .el-input-number__increase
+        {
+          top: $--input-small-height;
+          margin-top: -1px;
+          border: $--input-border;
+          line-height: 20px;
+          box-sizing: border-box;
+          transition: $--border-transition-base;
+        }
+        .el-input-number__decrease {
+          width: 18px;
+          right: 18px;
+          border-bottom-left-radius: $--input-border-radius;
+        }
+        .el-input-number__increase {
+          width: 19px;
+          border-bottom-right-radius: $--input-border-radius;
+          & ~ .el-input .el-input__inner {
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
+          }
+        }
+        &:hover {
+          .el-input-number__decrease,
+          .el-input-number__increase
+          {
+            border-color: $--input-hover-border;
+          }
+        }
+        &:active {
+          .el-input-number__decrease,
+          .el-input-number__increase
+          {
+            border-color: $--input-focus-border;
+          }
+        }
+      }
+    }
+  }
+}

+ 44 - 0
packages/theme-chalk/src/spinner.scss

@@ -0,0 +1,44 @@
+@import "mixins/mixins";
+
+@include b(time-spinner) {
+  width: 100%;
+  white-space: nowrap;
+}
+
+@include b(spinner) {
+  display: inline-block;
+  vertical-align: middle;
+}
+@include b(spinner-inner) {
+  animation: rotate 2s linear infinite;
+  width: 50px;
+  height: 50px;
+
+  & .path {
+    stroke: #ececec;
+    stroke-linecap: round;
+    animation: dash 1.5s ease-in-out infinite;
+  }
+
+}
+
+@keyframes rotate {
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes dash {
+  0% {
+    stroke-dasharray: 1, 150;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -35;
+  }
+  100% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -124;
+  }
+}

+ 211 - 0
packages/theme-chalk/src/step.scss

@@ -0,0 +1,211 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(step) {
+  position: relative;
+  vertical-align: top;
+
+  &:last-child .el-step__main {
+    padding-right: 0;
+  }
+
+  @include when(horizontal) {
+    display: inline-block;
+  }
+
+  @include when(vertical) {
+    & .el-step__head,
+    & .el-step__main {
+      display: inline-block;
+    }
+
+    & .el-step__main {
+      padding-left: 10px;
+    }
+  }
+
+  @include e(line) {
+    display: inline-block;
+    position: absolute;
+    border-color: inherit;
+    background-color: $--color-black;
+
+    @include when(icon) {
+      @include when(horizontal) {
+        right: 4px;
+      }
+    }
+
+    @include when(horizontal) {
+      top: 15px;
+      height: 2px;
+      left: 32px;
+      right: 0;
+    }
+
+    @include when(vertical) {
+      width: 2px;
+      box-sizing: border-box;
+      top: 32px;
+      bottom: 0;
+      left: 15px;
+    }
+  }
+
+  @include e(line-inner) {
+    display: block;
+    border-width: 1px;
+    border-style: solid;
+    border-color: inherit;
+    transition: all 150ms;
+    box-sizing: border-box;
+    width: 0;
+    height: 0;
+  }
+
+  @include e(icon) {
+    display: block;
+    line-height: 28px;
+
+    > * {
+      line-height: inherit;
+      vertical-align: middle;
+    }
+  }
+
+  @include e(head) {
+    width: 28px;
+    height: 28px;
+    border-radius: 50%;
+    border-color: transparent;
+    text-align: center;
+    line-height: 28px;
+    font-size: 28px;
+    vertical-align: top;
+    transition: all 150ms;
+
+    @include when(text) {
+      font-size: 14px;
+      border-width: 2px;
+      border-style: solid;
+
+      @include when(process) {
+        color: $--color-white;
+        background-color: $--color-black;
+        border-color: $--color-black;
+      }
+
+      @include when(wait) {
+        color: $--color-black;
+        background-color: $--color-white;
+        border-color: $--color-black;
+      }
+
+      @include when(success) {
+        color: $--color-white;
+        background-color: $--color-success;
+        border-color: $--color-success;
+      }
+
+      @include when(error) {
+        color: $--color-white;
+        background-color: $--color-danger;
+        border-color: $--color-danger;
+      }
+
+      @include when(finish) {
+        color: $--color-white;
+        background-color: $--color-primary;
+        border-color: $--color-primary;
+      }
+    }
+
+    @include when(process) {
+      color: $--color-black;
+      border-color: $--color-black;
+    }
+
+    @include when(wait) {
+      color: $--color-black;
+      border-color: $--color-black;
+    }
+
+    @include when(success) {
+      color: $--color-success;
+      border-color: $--color-success;
+    }
+
+    @include when(error) {
+      color: $--color-danger;
+      border-color: $--color-danger;
+    }
+
+    @include when(finish) {
+      color: $--color-primary;
+      border-color: $--color-primary;
+    }
+  }
+
+  @include e(main) {
+    white-space: normal;
+    padding-right: 10px;
+    text-align: left;
+  }
+
+  @include e(title) {
+    font-size: 14px;
+    line-height: 32px;
+    display: inline-block;
+
+    @include when(process) {
+      font-weight: 700;
+      color: $--color-black;
+    }
+
+    @include when(wait) {
+      font-weight: normal;
+      color: $--color-black;
+    }
+
+    @include when(success) {
+      font-weight: 700;
+      color: $--color-success;
+    }
+
+    @include when(error) {
+      font-weight: 700;
+      color: $--color-danger;
+    }
+
+    @include when(finish) {
+      font-weight: 700;
+      color: $--color-primary;
+    }
+  }
+
+  @include e(description) {
+    font-size: 12px;
+    font-weight: normal;
+    line-height: 14px;
+
+    @include when(process) {
+      color: $--color-black;
+    }
+
+    @include when(wait) {
+      color: $--color-black;
+    }
+
+    @include when(success) {
+      color: $--color-success;
+    }
+
+    @include when(error) {
+      color: $--color-danger;
+    }
+
+    @include when(finish) {
+      color: $--color-primary;
+    }
+  }
+}

+ 17 - 0
packages/theme-chalk/src/steps.scss

@@ -0,0 +1,17 @@
+@import "mixins/mixins";
+
+@include b(steps) {
+  font-size: 0;
+
+  > :last-child .el-step__line {
+    display: none;
+  }
+
+  @include when(horizontal) {
+    white-space: nowrap;
+
+    @include when(center) {
+      text-align: center;
+    }
+  }
+}

+ 0 - 0
packages/theme-chalk/src/submenu.scss


+ 119 - 0
packages/theme-chalk/src/switch.scss

@@ -0,0 +1,119 @@
+@import "mixins/mixins";
+@import "common/var";
+
+@include b(switch) {
+  display: inline-block;
+  position: relative;
+  font-size: $--switch-font-size;
+  line-height: $--switch-height;
+  height: $--switch-height;
+  vertical-align: middle;
+  @include when(disabled) {
+    & .el-switch__core,
+    & .el-switch__label {
+      cursor: not-allowed;
+    }
+  }
+
+  @include e(label) {
+    transition: .2s;
+    position: absolute;
+    width: $--switch-width;
+    height: $--switch-height;
+    left: 0;
+    top: 0;
+    display: inline-block;
+    font-size: $--switch-font-size;
+    cursor: pointer;
+    @include m(left) {
+      i {
+        left: 6px;
+      }
+    }
+    @include m(right) {
+      i {
+        right: 6px;
+      }
+    }
+    & * {
+      line-height: 1;
+      top: 4px;
+      position: absolute;
+      font-size: $--switch-font-size;
+      display: inline-block;
+      color: $--color-white;
+    }
+  }
+
+  @include e(input) {
+    display: none;
+  }
+
+  @include e(core) {
+    margin: 0;
+    display: inline-block;
+    position: relative;
+    width: $--switch-width;
+    height: $--switch-height;
+    border: 1px solid $--switch-off-color;
+    outline: none;
+    border-radius: $--switch-core-border-radius;
+    box-sizing: border-box;
+    background: $--switch-off-color;
+    cursor: pointer;
+    transition: border-color .3s, background-color .3s;
+
+    & .el-switch__button {
+      position: absolute;
+      top: 0;
+      left: 0;
+      border-radius: $--border-radius-circle;
+      transition: transform .3s;
+      width: $--switch-button-size;
+      height: $--switch-button-size;
+      background-color: $--color-white;
+    }
+  }
+
+  @include when(checked) {
+    .el-switch__core {
+      border-color: $--switch-on-color;
+      background-color: $--switch-on-color;
+    }
+  }
+
+  @include when(disabled) {
+    .el-switch__core {
+      border-color: $--switch-disabled-color !important;
+      background: $--switch-disabled-color !important;
+
+      & span {
+        background-color: $--switch-disabled-text-color !important;
+      }
+
+      & ~ .el-switch__label * {
+        color: $--switch-disabled-text-color !important;
+      }
+    }
+  }
+
+  @include m(wide) {
+    .el-switch__label {
+      &.el-switch__label--left {
+        span {
+          left: 10px;
+        }
+      }
+      &.el-switch__label--right {
+        span {
+          right: 10px;
+        }
+      }
+    }
+  }
+
+  & .label-fade-enter,
+  & .label-fade-leave-active {
+    opacity: 0;
+  }
+}

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels