├── .appcast.xml ├── .babelrc ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .webpackrc.js ├── LICENSE ├── README.md ├── README_zh.md ├── SketchSelect.sketchplugin └── Contents │ ├── Resources │ ├── banner.png │ ├── icon.png │ ├── index.css │ ├── index.html │ └── index.js │ └── Sketch │ ├── index.js │ └── manifest.json ├── icon.png ├── img ├── rm-banner.png ├── rm-dialog.png ├── rm-option.png ├── rm-run.png └── rm-shortkey.png ├── package.json ├── panel ├── components │ ├── Copyright │ │ ├── index.js │ │ └── index.scss │ ├── Selection │ │ ├── index.js │ │ └── index.scss │ ├── Switchbox │ │ ├── index.js │ │ └── index.scss │ └── index.js ├── index.ejs ├── index.js ├── index.scss ├── models │ ├── config.js │ └── layers.js ├── router.js └── routes │ ├── Any │ └── index.js │ ├── Shape │ └── index.js │ ├── Symbol │ └── index.js │ ├── Tab │ ├── index.js │ └── test.json │ ├── Text │ └── index.js │ ├── _reset.scss │ ├── _scroll.scss │ ├── index.js │ ├── index.scss │ └── mapSelection.js ├── public ├── banner.png └── icon.png └── src ├── index.js ├── manifest.json └── utils ├── hex2NSColor.js ├── index.js ├── mapLayers.js ├── openURL.js └── selectLayers.js /.appcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "env", 4 | "stage-0" 5 | ], 6 | "plugins": [ 7 | "lodash" 8 | ] 9 | } -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/node_modules/** 2 | **/SketchSelect.sketchplugin/** 3 | **/dist/** 4 | **/test/** -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: 'babel-eslint', 3 | extends: [ 4 | 'standard', 5 | 'plugin:flowtype/recommended', 6 | 'plugin:react/recommended', 7 | 'prettier', 8 | 'prettier/flowtype', 9 | 'prettier/react', 10 | 'prettier/standard' 11 | ], 12 | plugins: [ 13 | 'flowtype', 14 | 'react', 15 | 'prettier', 16 | 'standard' 17 | ], 18 | parserOptions: { 19 | 'ecmaFeatures': { 20 | 'experimentalObjectRestSpread': true, 21 | 'jsx': true 22 | } 23 | }, 24 | globals: { 25 | 'window': true, 26 | 'document': true, 27 | 'navigator': true, 28 | 'NSWorkspace': true, 29 | 'NSColor': true, 30 | 'NSWorkspace': true, 31 | 'NSURL': true, 32 | 'localStorage': true, 33 | }, 34 | env: { 35 | 'es6': true, 36 | 'node': true 37 | }, 38 | rules: { 39 | 'prettier/prettier': [ 40 | 2, { 41 | 'printWidth': 100, 42 | 'singleQuote': true, 43 | 'trailingComma': 'es5', 44 | 'parser': 'flow', 45 | } 46 | ], 47 | 'react/react-in-jsx-scope': [0], 48 | 'react/prop-types': [0], 49 | 'react/display-name': [0], 50 | 'react/no-children-prop': [0], 51 | 'no-unused-vars': [1], 52 | } 53 | }; 54 | 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # npm 2 | node_modules 3 | .npm 4 | npm-debug.log 5 | 6 | # mac 7 | .DS_Store 8 | yarn.lock 9 | 10 | # other 11 | test 12 | dist -------------------------------------------------------------------------------- /.webpackrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | entry : './panel/index.js', 3 | disableCSSModules : false, 4 | hash : false, 5 | ignoreMomentLocale: true, 6 | sass : { 7 | includePaths: ['node_modules', 'panel/style'] 8 | }, 9 | theme : { 10 | '@primary-color': '#32d1ff' 11 | }, 12 | html : { 13 | 'template': './panel/index.ejs' 14 | }, 15 | define : { 16 | '$dirname': __dirname, 17 | '$isDev' : process.env.NODE_ENV === 'development' 18 | }, 19 | extraBabelPlugins : [ 20 | 'lodash', 21 | ['import', {libraryName: 'antd', libraryDirectory: 'es', style: true}] 22 | ], 23 | env : { 24 | development: { 25 | extraBabelPlugins: ['dva-hmr'] 26 | } 27 | } 28 | }; 29 | 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2018 CanisMinor 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sketch Select 2 | 3 | [![GitHub release](https://img.shields.io/github/release/canisminor1990/sketch-select.svg)](https://github.com/canisminor1990/sketch-select/releases) 4 | [![GitHub release](https://img.shields.io/badge/Works%20with-Sketch%20Runner-blue.svg?colorB=308ADF)](http://bit.ly/SketchRunnerWebsite) 5 | [![](https://img.shields.io/github/downloads/canisminor1990/sketch-select/total.svg)](https://github.com/canisminor1990/sketch-select/releases) 6 | 7 | 8 | 9 | Make it much more convenient to select layers with similar attributes 10 | 11 | * [中文说明](README_zh.md) 12 | 13 | ## Installing Plugins 14 | 15 | ### Direct download 16 | 17 | 1. [Download the ZIP file](https://github.com/canisminor1990/sketch-select/archive/master.zip) and unzip 18 | 2. Open the `SketchSelect.sketchplugin` 19 | 20 | ### Install with Sketchpacks 21 | 22 | 23 | 24 | ### Install with Runner 25 | 26 | 1. Press + ' open Runner window; 27 | 2. Switch to `install` tab; 28 | 3. Type `SketchSelect`; 29 | 4. Select `Sketch Select` item and press `Return`. 30 | 31 | 32 | 33 | ## Usage 34 | 35 | ### Select layers 36 | 37 | 38 | 39 | Select a layer and press Command + Shift + F on keyboard to callout the plugin dialog. 40 | 41 | 42 | 43 | ### Select layers in all artboards 44 | 45 | You can choose wether to select layers in all artboards or just in one artboard. 46 | 47 | 48 | 49 | ### Run with Runner 50 | 51 | 1. Press + ' open Runner window; 52 | 2. Type `Select`; 53 | 54 | 55 | 56 | ## Contact 57 | 58 | * Author [canisminor1990](https://github.com/canisminor1990) 59 | * Email 60 | 61 | ## Contributors 62 | 63 | * [sebastienwozny](https://github.com/sebastienwozny) 64 | * [wonderbit](https://github.com/wonderbit/sketch-select-similar-layers) 65 | -------------------------------------------------------------------------------- /README_zh.md: -------------------------------------------------------------------------------- 1 | # Sketch Select 2 | 3 | [![GitHub release](https://img.shields.io/github/release/canisminor1990/sketch-select.svg)](https://github.com/canisminor1990/sketch-select/releases) 4 | [![GitHub release](https://img.shields.io/badge/Works%20with-Sketch%20Runner-blue.svg?colorB=308ADF)](http://bit.ly/SketchRunnerWebsite) 5 | [![](https://img.shields.io/github/downloads/canisminor1990/sketch-select/total.svg)](https://github.com/canisminor1990/sketch-select/releases) 6 | 7 | 8 | 9 | 一键选择相同属性的图层 10 | 11 | ## 安装插件 12 | 13 | ### 直接下载 14 | 15 | 1. [下载 ZIP 包](https://github.com/canisminor1990/sketch-select/archive/master.zip) 并解压 16 | 2. 打开 `SketchSelect.sketchplugin` 即可安装 17 | 18 | ### 使用 Sketchpacks 安装 19 | 20 | Install sketch-select with Sketchpacks 21 | 22 | ### 使用 Runner 安装 23 | 24 | 1. + ' 打开 Runner; 25 | 2. 切换至 `install` 标签; 26 | 3. 输入 `SketchSelect`; 27 | 4. 选择  `Sketch Select` 并回车. 28 | 29 | Works with Sketch Runner 30 | 31 | ## 使用说明 32 | 33 | ### 在当前画板选择图层 34 | 35 | 36 | 37 | 选择一个图层并按下 Command + Shift + F 将开打插件对话框 38 | 39 | 40 | 41 | ### 全部画板选择图层 42 | 43 | 勾选 `select layers in all artboards` 开启全局模式 44 | 45 | 46 | 47 | ### Run with Runner 48 | 49 | 1. + ' 打开 Runner; 50 | 2. 输入 `Select`; 51 | 52 | 53 | 54 | ## 反馈方式 55 | 56 | * Author [canisminor1990](https://github.com/canisminor1990) 57 | * Email 58 | 59 | ## 贡献者 60 | 61 | * [sebastienwozny](https://github.com/sebastienwozny) 62 | * [wonderbit](https://github.com/wonderbit/sketch-select-similar-layers) 63 | -------------------------------------------------------------------------------- /SketchSelect.sketchplugin/Contents/Resources/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/SketchSelect.sketchplugin/Contents/Resources/banner.png -------------------------------------------------------------------------------- /SketchSelect.sketchplugin/Contents/Resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/SketchSelect.sketchplugin/Contents/Resources/icon.png -------------------------------------------------------------------------------- /SketchSelect.sketchplugin/Contents/Resources/index.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:Monospaced Number;src:local("Tahoma");unicode-range:u+30-39}@font-face{font-family:Chinese Quote;src:local("PingFang SC"),local("SimSun");unicode-range:u+2018,u+2019,u+201c,u+201d}body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@at-root{@-ms-viewport{width:device-width}}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);background-color:#fff}[tabindex="-1"]:focus{outline:none!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#32d1ff;background-color:transparent;text-decoration:none;outline:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}a:focus{text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip:ink}a:hover{color:#5ce1ff}a:active{color:#21abd9}a:active,a:hover{outline:0;text-decoration:none}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-family:Consolas,Menlo,Courier,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5em;font-size:1.5em;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{background:#32d1ff;color:#fff}::selection{background:#32d1ff;color:#fff}.clearfix{zoom:1}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both;visibility:hidden;font-size:0;height:0}@font-face{font-family:anticon;src:url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot");src:url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"),url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"),url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg")}.anticon{display:inline-block;font-style:normal;vertical-align:baseline;text-align:center;text-transform:none;line-height:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon:before{display:block;font-family:anticon!important}.anticon-step-forward:before{content:"\E600"}.anticon-step-backward:before{content:"\E601"}.anticon-forward:before{content:"\E602"}.anticon-backward:before{content:"\E603"}.anticon-caret-right:before{content:"\E604"}.anticon-caret-left:before{content:"\E605"}.anticon-caret-down:before{content:"\E606"}.anticon-caret-up:before{content:"\E607"}.anticon-caret-circle-right:before,.anticon-circle-right:before,.anticon-right-circle:before{content:"\E608"}.anticon-caret-circle-left:before,.anticon-circle-left:before,.anticon-left-circle:before{content:"\E609"}.anticon-caret-circle-up:before,.anticon-circle-up:before,.anticon-up-circle:before{content:"\E60A"}.anticon-caret-circle-down:before,.anticon-circle-down:before,.anticon-down-circle:before{content:"\E60B"}.anticon-right-circle-o:before{content:"\E60C"}.anticon-caret-circle-o-right:before,.anticon-circle-o-right:before{content:"\E60C"}.anticon-left-circle-o:before{content:"\E60D"}.anticon-caret-circle-o-left:before,.anticon-circle-o-left:before{content:"\E60D"}.anticon-up-circle-o:before{content:"\E60E"}.anticon-caret-circle-o-up:before,.anticon-circle-o-up:before{content:"\E60E"}.anticon-down-circle-o:before{content:"\E60F"}.anticon-caret-circle-o-down:before,.anticon-circle-o-down:before{content:"\E60F"}.anticon-verticle-left:before{content:"\E610"}.anticon-verticle-right:before{content:"\E611"}.anticon-rollback:before{content:"\E612"}.anticon-retweet:before{content:"\E613"}.anticon-shrink:before{content:"\E614"}.anticon-arrow-salt:before,.anticon-arrows-alt:before{content:"\E615"}.anticon-reload:before{content:"\E616"}.anticon-double-right:before{content:"\E617"}.anticon-double-left:before{content:"\E618"}.anticon-arrow-down:before{content:"\E619"}.anticon-arrow-up:before{content:"\E61A"}.anticon-arrow-right:before{content:"\E61B"}.anticon-arrow-left:before{content:"\E61C"}.anticon-down:before{content:"\E61D"}.anticon-up:before{content:"\E61E"}.anticon-right:before{content:"\E61F"}.anticon-left:before{content:"\E620"}.anticon-minus-square-o:before{content:"\E621"}.anticon-minus-circle:before{content:"\E622"}.anticon-minus-circle-o:before{content:"\E623"}.anticon-minus:before{content:"\E624"}.anticon-plus-circle-o:before{content:"\E625"}.anticon-plus-circle:before{content:"\E626"}.anticon-plus:before{content:"\E627"}.anticon-info-circle:before{content:"\E628"}.anticon-info-circle-o:before{content:"\E629"}.anticon-info:before{content:"\E62A"}.anticon-exclamation:before{content:"\E62B"}.anticon-exclamation-circle:before{content:"\E62C"}.anticon-exclamation-circle-o:before{content:"\E62D"}.anticon-close-circle:before,.anticon-cross-circle:before{content:"\E62E"}.anticon-close-circle-o:before,.anticon-cross-circle-o:before{content:"\E62F"}.anticon-check-circle:before{content:"\E630"}.anticon-check-circle-o:before{content:"\E631"}.anticon-check:before{content:"\E632"}.anticon-close:before,.anticon-cross:before{content:"\E633"}.anticon-customer-service:before,.anticon-customerservice:before{content:"\E634"}.anticon-credit-card:before{content:"\E635"}.anticon-code-o:before{content:"\E636"}.anticon-book:before{content:"\E637"}.anticon-bars:before{content:"\E639"}.anticon-question:before{content:"\E63A"}.anticon-question-circle:before{content:"\E63B"}.anticon-question-circle-o:before{content:"\E63C"}.anticon-pause:before{content:"\E63D"}.anticon-pause-circle:before{content:"\E63E"}.anticon-pause-circle-o:before{content:"\E63F"}.anticon-clock-circle:before{content:"\E640"}.anticon-clock-circle-o:before{content:"\E641"}.anticon-swap:before{content:"\E642"}.anticon-swap-left:before{content:"\E643"}.anticon-swap-right:before{content:"\E644"}.anticon-plus-square-o:before{content:"\E645"}.anticon-frown-circle:before,.anticon-frown:before{content:"\E646"}.anticon-ellipsis:before{content:"\E647"}.anticon-copy:before{content:"\E648"}.anticon-menu-fold:before{content:"\E9AC"}.anticon-mail:before{content:"\E659"}.anticon-logout:before{content:"\E65A"}.anticon-link:before{content:"\E65B"}.anticon-area-chart:before{content:"\E65C"}.anticon-line-chart:before{content:"\E65D"}.anticon-home:before{content:"\E65E"}.anticon-laptop:before{content:"\E65F"}.anticon-star:before{content:"\E660"}.anticon-star-o:before{content:"\E661"}.anticon-folder:before{content:"\E662"}.anticon-filter:before{content:"\E663"}.anticon-file:before{content:"\E664"}.anticon-exception:before{content:"\E665"}.anticon-meh-circle:before,.anticon-meh:before{content:"\E666"}.anticon-meh-o:before{content:"\E667"}.anticon-shopping-cart:before{content:"\E668"}.anticon-save:before{content:"\E669"}.anticon-user:before{content:"\E66A"}.anticon-video-camera:before{content:"\E66B"}.anticon-to-top:before{content:"\E66C"}.anticon-team:before{content:"\E66D"}.anticon-tablet:before{content:"\E66E"}.anticon-solution:before{content:"\E66F"}.anticon-search:before{content:"\E670"}.anticon-share-alt:before{content:"\E671"}.anticon-setting:before{content:"\E672"}.anticon-poweroff:before{content:"\E6D5"}.anticon-picture:before{content:"\E674"}.anticon-phone:before{content:"\E675"}.anticon-paper-clip:before{content:"\E676"}.anticon-notification:before{content:"\E677"}.anticon-mobile:before{content:"\E678"}.anticon-menu-unfold:before{content:"\E9AD"}.anticon-inbox:before{content:"\E67A"}.anticon-lock:before{content:"\E67B"}.anticon-qrcode:before{content:"\E67C"}.anticon-play-circle:before{content:"\E6D0"}.anticon-play-circle-o:before{content:"\E6D1"}.anticon-tag:before{content:"\E6D2"}.anticon-tag-o:before{content:"\E6D3"}.anticon-tags:before{content:"\E67D"}.anticon-tags-o:before{content:"\E67E"}.anticon-cloud-o:before{content:"\E67F"}.anticon-cloud:before{content:"\E680"}.anticon-cloud-upload:before{content:"\E681"}.anticon-cloud-download:before{content:"\E682"}.anticon-cloud-download-o:before{content:"\E683"}.anticon-cloud-upload-o:before{content:"\E684"}.anticon-environment:before{content:"\E685"}.anticon-environment-o:before{content:"\E686"}.anticon-eye:before{content:"\E687"}.anticon-eye-o:before{content:"\E688"}.anticon-camera:before{content:"\E689"}.anticon-camera-o:before{content:"\E68A"}.anticon-windows:before{content:"\E68B"}.anticon-apple:before{content:"\E68C"}.anticon-apple-o:before{content:"\E6D4"}.anticon-android:before{content:"\E938"}.anticon-android-o:before{content:"\E68D"}.anticon-aliwangwang:before{content:"\E68E"}.anticon-aliwangwang-o:before{content:"\E68F"}.anticon-export:before{content:"\E691"}.anticon-edit:before{content:"\E692"}.anticon-circle-down-o:before{content:"\E693"}.anticon-circle-down-:before{content:"\E694"}.anticon-appstore-o:before{content:"\E695"}.anticon-appstore:before{content:"\E696"}.anticon-scan:before{content:"\E697"}.anticon-file-text:before{content:"\E698"}.anticon-folder-open:before{content:"\E699"}.anticon-hdd:before{content:"\E69A"}.anticon-ie:before{content:"\E69B"}.anticon-file-jpg:before{content:"\E69C"}.anticon-like:before{content:"\E64C"}.anticon-like-o:before{content:"\E69D"}.anticon-dislike:before{content:"\E64B"}.anticon-dislike-o:before{content:"\E69E"}.anticon-delete:before{content:"\E69F"}.anticon-enter:before{content:"\E6A0"}.anticon-pushpin-o:before{content:"\E6A1"}.anticon-pushpin:before{content:"\E6A2"}.anticon-heart:before{content:"\E6A3"}.anticon-heart-o:before{content:"\E6A4"}.anticon-pay-circle:before{content:"\E6A5"}.anticon-pay-circle-o:before{content:"\E6A6"}.anticon-smile-circle:before,.anticon-smile:before{content:"\E6A7"}.anticon-smile-o:before{content:"\E6A8"}.anticon-frown-o:before{content:"\E6A9"}.anticon-calculator:before{content:"\E6AA"}.anticon-message:before{content:"\E6AB"}.anticon-chrome:before{content:"\E6AC"}.anticon-github:before{content:"\E6AD"}.anticon-file-unknown:before{content:"\E6AF"}.anticon-file-excel:before{content:"\E6B0"}.anticon-file-ppt:before{content:"\E6B1"}.anticon-file-word:before{content:"\E6B2"}.anticon-file-pdf:before{content:"\E6B3"}.anticon-desktop:before{content:"\E6B4"}.anticon-upload:before{content:"\E6B6"}.anticon-download:before{content:"\E6B7"}.anticon-pie-chart:before{content:"\E6B8"}.anticon-unlock:before{content:"\E6BA"}.anticon-calendar:before{content:"\E6BB"}.anticon-windows-o:before{content:"\E6BC"}.anticon-dot-chart:before{content:"\E6BD"}.anticon-bar-chart:before{content:"\E6BE"}.anticon-code:before{content:"\E6BF"}.anticon-api:before{content:"\E951"}.anticon-plus-square:before{content:"\E6C0"}.anticon-minus-square:before{content:"\E6C1"}.anticon-close-square:before{content:"\E6C2"}.anticon-close-square-o:before{content:"\E6C3"}.anticon-check-square:before{content:"\E6C4"}.anticon-check-square-o:before{content:"\E6C5"}.anticon-fast-backward:before{content:"\E6C6"}.anticon-fast-forward:before{content:"\E6C7"}.anticon-up-square:before{content:"\E6C8"}.anticon-down-square:before{content:"\E6C9"}.anticon-left-square:before{content:"\E6CA"}.anticon-right-square:before{content:"\E6CB"}.anticon-right-square-o:before{content:"\E6CC"}.anticon-left-square-o:before{content:"\E6CD"}.anticon-down-square-o:before{content:"\E6CE"}.anticon-up-square-o:before{content:"\E6CF"}.anticon-loading:before{content:"\E64D"}.anticon-loading-3-quarters:before{content:"\E6AE"}.anticon-bulb:before{content:"\E649"}.anticon-select:before{content:"\E64A"}.anticon-addfile:before,.anticon-file-add:before{content:"\E910"}.anticon-addfolder:before,.anticon-folder-add:before{content:"\E914"}.anticon-switcher:before{content:"\E913"}.anticon-rocket:before{content:"\E90F"}.anticon-dingding:before{content:"\E923"}.anticon-dingding-o:before{content:"\E925"}.anticon-bell:before{content:"\E64E"}.anticon-disconnect:before{content:"\E64F"}.anticon-database:before{content:"\E650"}.anticon-compass:before{content:"\E6DB"}.anticon-barcode:before{content:"\E652"}.anticon-hourglass:before{content:"\E653"}.anticon-key:before{content:"\E654"}.anticon-flag:before{content:"\E655"}.anticon-layout:before{content:"\E656"}.anticon-login:before{content:"\E657"}.anticon-printer:before{content:"\E673"}.anticon-sound:before{content:"\E6E9"}.anticon-usb:before{content:"\E6D7"}.anticon-skin:before{content:"\E6D8"}.anticon-tool:before{content:"\E6D9"}.anticon-sync:before{content:"\E6DA"}.anticon-wifi:before{content:"\E6D6"}.anticon-car:before{content:"\E6DC"}.anticon-copyright:before{content:"\E6DE"}.anticon-schedule:before{content:"\E6DF"}.anticon-user-add:before{content:"\E6ED"}.anticon-user-delete:before{content:"\E6E0"}.anticon-usergroup-add:before{content:"\E6DD"}.anticon-usergroup-delete:before{content:"\E6E1"}.anticon-man:before{content:"\E6E2"}.anticon-woman:before{content:"\E6EC"}.anticon-shop:before{content:"\E6E3"}.anticon-gift:before{content:"\E6E4"}.anticon-idcard:before{content:"\E6E5"}.anticon-medicine-box:before{content:"\E6E6"}.anticon-red-envelope:before{content:"\E6E7"}.anticon-coffee:before{content:"\E6E8"}.anticon-trademark:before{content:"\E651"}.anticon-safety:before{content:"\E6EA"}.anticon-wallet:before{content:"\E6EB"}.anticon-bank:before{content:"\E6EE"}.anticon-trophy:before{content:"\E6EF"}.anticon-contacts:before{content:"\E6F0"}.anticon-global:before{content:"\E6F1"}.anticon-shake:before{content:"\E94F"}.anticon-fork:before{content:"\E6F2"}.anticon-dashboard:before{content:"\E99A"}.anticon-profile:before{content:"\E999"}.anticon-table:before{content:"\E998"}.anticon-warning:before{content:"\E997"}.anticon-form:before{content:"\E996"}.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s infinite linear;animation:loadingCircle 1s infinite linear}.anticon-weibo-square:before{content:"\E6F5"}.anticon-weibo-circle:before{content:"\E6F4"}.anticon-taobao-circle:before{content:"\E6F3"}.anticon-html5:before{content:"\E9C7"}.anticon-weibo:before{content:"\E9C6"}.anticon-twitter:before{content:"\E9C5"}.anticon-wechat:before{content:"\E9C4"}.anticon-youtube:before{content:"\E9C3"}.anticon-alipay-circle:before{content:"\E9C2"}.anticon-taobao:before{content:"\E9C1"}.anticon-skype:before{content:"\E9C0"}.anticon-qq:before{content:"\E9BF"}.anticon-medium-workmark:before{content:"\E9BE"}.anticon-gitlab:before{content:"\E9BD"}.anticon-medium:before{content:"\E9BC"}.anticon-linkedin:before{content:"\E9BB"}.anticon-google-plus:before{content:"\E9BA"}.anticon-dropbox:before{content:"\E9B9"}.anticon-facebook:before{content:"\E9B8"}.anticon-codepen:before{content:"\E9B7"}.anticon-amazon:before{content:"\E9B6"}.anticon-google:before{content:"\E9B5"}.anticon-codepen-circle:before{content:"\E9B4"}.anticon-alipay:before{content:"\E9B3"}.anticon-ant-design:before{content:"\E9B2"}.anticon-aliyun:before{content:"\E9F4"}.anticon-zhihu:before{content:"\E703"}.anticon-file-markdown:before{content:"\E704"}.anticon-slack:before{content:"\E705"}.anticon-slack-square:before{content:"\E706"}.anticon-behance:before{content:"\E707"}.anticon-behance-square:before{content:"\E708"}.anticon-dribbble:before{content:"\E709"}.anticon-dribbble-square:before{content:"\E70A"}.anticon-instagram:before{content:"\E70B"}.anticon-yuque:before{content:"\E70C"}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@-webkit-keyframes antMoveRightIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes antMoveRightIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}}@-webkit-keyframes loadingCircle{0%{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingCircle{0%{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes antSlideUpIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes antSlideUpOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}to{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@keyframes antSlideUpOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}to{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@-webkit-keyframes antSlideDownIn{0%{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}to{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes antSlideDownIn{0%{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}to{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes antSlideDownOut{0%{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}to{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@keyframes antSlideDownOut{0%{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}to{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@-webkit-keyframes antSlideLeftIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes antSlideLeftIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes antSlideLeftOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}to{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}@keyframes antSlideLeftOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}to{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}@-webkit-keyframes antSlideRightIn{0%{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}to{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes antSlideRightIn{0%{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}to{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes antSlideRightOut{0%{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}to{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}@keyframes antSlideRightOut{0%{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}to{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{opacity:0;-webkit-transform:scale(.2);transform:scale(.2)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes antZoomIn{0%{opacity:0;-webkit-transform:scale(.2);transform:scale(.2)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(.2);transform:scale(.2)}}@keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(.2);transform:scale(.2)}}@-webkit-keyframes antZoomBigIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes antZoomBigIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes antZoomUpIn{0%{opacity:0;-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(1);transform:scale(1)}}@keyframes antZoomUpIn{0%{opacity:0;-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes antZoomUpOut{0%{-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes antZoomUpOut{0%{-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes antZoomLeftIn{0%{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(1);transform:scale(1)}}@keyframes antZoomLeftIn{0%{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes antZoomLeftOut{0%{-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes antZoomLeftOut{0%{-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes antZoomRightIn{0%{opacity:0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(1);transform:scale(1)}}@keyframes antZoomRightIn{0%{opacity:0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes antZoomRightOut{0%{-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes antZoomRightOut{0%{-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes antZoomDownIn{0%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}}@keyframes antZoomDownIn{0%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(.8);transform:scale(.8)}to{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes antZoomDownOut{0%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes antZoomDownOut{0%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(.8);transform:scale(.8)}}.ant-motion-collapse{overflow:hidden}.ant-motion-collapse-active{-webkit-transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important;transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-message{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;position:fixed;z-index:1010;width:100%;top:16px;left:0;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice:first-child{margin-top:-8px}.ant-message-notice-content{padding:10px 16px;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15);background:#fff;display:inline-block;pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#f5222d}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#1890ff}.ant-message .anticon{margin-right:8px;font-size:16px;top:1px;position:relative}.ant-message-notice.move-up-leave.move-up-leave-active{-webkit-animation-name:MessageMoveOut;animation-name:MessageMoveOut;overflow:hidden;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes MessageMoveOut{0%{opacity:1;max-height:150px;padding:8px}to{opacity:0;max-height:0;padding:0}}@keyframes MessageMoveOut{0%{opacity:1;max-height:150px;padding:8px}to{opacity:0;max-height:0;padding:0}}#root,body,html{height:100%;background:#fff;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:focus{outline:none}*{-webkit-font-smoothing:antialiased}div{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}h1{font-size:1rem;margin:.5rem 0 1rem}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-nav-container{height:40px}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-ink-bar{visibility:hidden}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab{margin:0;border:1px solid #e8e8e8;border-bottom:0;border-radius:4px 4px 0 0;background:#fafafa;margin-right:2px;padding:0 16px;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);line-height:38px}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab-active{background:#fff;border-color:#e8e8e8;color:#32d1ff;padding-bottom:1px}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab-inactive{padding:0}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab .anticon-close{color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s;font-size:12px;margin-left:3px;margin-right:-5px;overflow:hidden;vertical-align:middle;width:16px;height:16px;height:14px}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab .anticon-close:hover{color:rgba(0,0,0,.85)}.ant-tabs.ant-tabs-card .ant-tabs-content>.ant-tabs-tabpane,.ant-tabs.ant-tabs-editable-card .ant-tabs-content>.ant-tabs-tabpane{-webkit-transition:none!important;transition:none!important}.ant-tabs.ant-tabs-card .ant-tabs-content>.ant-tabs-tabpane-inactive,.ant-tabs.ant-tabs-editable-card .ant-tabs-content>.ant-tabs-tabpane-inactive{overflow:hidden}.ant-tabs.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab:hover .anticon-close{opacity:1}.ant-tabs-extra-content{line-height:40px}.ant-tabs-extra-content .ant-tabs-new-tab{width:20px;height:20px;line-height:20px;text-align:center;cursor:pointer;border-radius:2px;border:1px solid #e8e8e8;font-size:12px;color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s}.ant-tabs-extra-content .ant-tabs-new-tab:hover{color:#32d1ff;border-color:#32d1ff}.ant-tabs-vertical.ant-tabs-card>.ant-tabs-bar .ant-tabs-nav-container{height:auto}.ant-tabs-vertical.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab{border-bottom:1px solid #e8e8e8;margin-bottom:8px}.ant-tabs-vertical.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab-active{padding-bottom:4px}.ant-tabs-vertical.ant-tabs-card>.ant-tabs-bar .ant-tabs-tab:last-child{margin-bottom:8px}.ant-tabs-vertical.ant-tabs-card>.ant-tabs-bar .ant-tabs-new-tab{width:90%}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left>.ant-tabs-bar .ant-tabs-nav-wrap{margin-right:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left>.ant-tabs-bar .ant-tabs-tab{border-right:0;border-radius:4px 0 0 4px;margin-right:1px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left>.ant-tabs-bar .ant-tabs-tab-active{margin-right:-1px;padding-right:18px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right>.ant-tabs-bar .ant-tabs-nav-wrap{margin-left:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right>.ant-tabs-bar .ant-tabs-tab{border-left:0;border-radius:0 4px 4px 0;margin-left:1px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right>.ant-tabs-bar .ant-tabs-tab-active{margin-left:-1px;padding-left:18px}.ant-tabs.ant-tabs-card.ant-tabs-bottom>.ant-tabs-bar .ant-tabs-tab{border-bottom:1px solid #e8e8e8;border-top:0;border-radius:0 0 4px 4px}.ant-tabs.ant-tabs-card.ant-tabs-bottom>.ant-tabs-bar .ant-tabs-tab-active{color:#32d1ff;padding-bottom:0;padding-top:1px}.ant-tabs{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;position:relative;overflow:hidden;zoom:1}.ant-tabs:after,.ant-tabs:before{content:" ";display:table}.ant-tabs:after{clear:both;visibility:hidden;font-size:0;height:0}.ant-tabs-ink-bar{z-index:1;position:absolute;left:0;bottom:1px;-webkit-box-sizing:border-box;box-sizing:border-box;height:2px;background-color:#32d1ff;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-tabs-bar{border-bottom:1px solid #e8e8e8;margin:0 0 16px;outline:none}.ant-tabs-bar,.ant-tabs-nav-container{-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav-container{overflow:hidden;font-size:14px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;white-space:nowrap;margin-bottom:-1px;zoom:1}.ant-tabs-nav-container:after,.ant-tabs-nav-container:before{content:" ";display:table}.ant-tabs-nav-container:after{clear:both;visibility:hidden;font-size:0;height:0}.ant-tabs-nav-container-scrolling{padding-left:32px;padding-right:32px}.ant-tabs-bottom .ant-tabs-bar{border-bottom:none;border-top:1px solid #e8e8e8}.ant-tabs-bottom .ant-tabs-ink-bar{bottom:auto;top:1px}.ant-tabs-bottom .ant-tabs-nav-container{margin-bottom:0;margin-top:-1px}.ant-tabs-tab-next,.ant-tabs-tab-prev{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2;width:0;height:100%;cursor:pointer;border:0;background-color:transparent;position:absolute;text-align:center;color:rgba(0,0,0,.45);-webkit-transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);opacity:0;pointer-events:none}.ant-tabs-tab-next.ant-tabs-tab-arrow-show,.ant-tabs-tab-prev.ant-tabs-tab-arrow-show{opacity:1;width:32px;height:100%;pointer-events:auto}.ant-tabs-tab-next:hover,.ant-tabs-tab-prev:hover{color:rgba(0,0,0,.65)}.ant-tabs-tab-next-icon,.ant-tabs-tab-prev-icon{font-style:normal;font-weight:700;font-variant:normal;line-height:inherit;vertical-align:baseline;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;text-transform:none}.ant-tabs-tab-next-icon:before,.ant-tabs-tab-prev-icon:before{display:block;font-family:anticon!important;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-tabs-tab-next-icon:before,:root .ant-tabs-tab-prev-icon:before{font-size:12px}.ant-tabs-tab-btn-disabled{cursor:not-allowed}.ant-tabs-tab-btn-disabled,.ant-tabs-tab-btn-disabled:hover{color:rgba(0,0,0,.25)}.ant-tabs-tab-next{right:2px}.ant-tabs-tab-next-icon:before{content:"\E61F"}.ant-tabs-tab-prev{left:0}.ant-tabs-tab-prev-icon:before{content:"\E620"}:root .ant-tabs-tab-prev{-webkit-filter:none;filter:none}.ant-tabs-nav-wrap{overflow:hidden;margin-bottom:-1px}.ant-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.ant-tabs-nav{-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:0;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);position:relative;margin:0;list-style:none;display:inline-block}.ant-tabs-nav:after,.ant-tabs-nav:before{display:table;content:" "}.ant-tabs-nav:after{clear:both}.ant-tabs-nav .ant-tabs-tab-disabled{pointer-events:none;cursor:default;color:rgba(0,0,0,.25)}.ant-tabs-nav .ant-tabs-tab{display:inline-block;height:100%;margin:0 32px 0 0;padding:12px 16px;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1);cursor:pointer;text-decoration:none}.ant-tabs-nav .ant-tabs-tab:last-child{margin-right:0}.ant-tabs-nav .ant-tabs-tab:hover{color:#5ce1ff}.ant-tabs-nav .ant-tabs-tab:active{color:#21abd9}.ant-tabs-nav .ant-tabs-tab .anticon{margin-right:8px}.ant-tabs-nav .ant-tabs-tab-active{color:#32d1ff;font-weight:500}.ant-tabs-large .ant-tabs-nav-container{font-size:12px}.ant-tabs-large .ant-tabs-tab{padding:16px}.ant-tabs-small .ant-tabs-nav-container{font-size:14px}.ant-tabs-small .ant-tabs-tab{padding:8px 16px}.ant-tabs:not(.ant-tabs-vertical)>.ant-tabs-content{width:100%}.ant-tabs:not(.ant-tabs-vertical)>.ant-tabs-content>.ant-tabs-tabpane{-ms-flex-negative:0;flex-shrink:0;width:100%;-webkit-transition:opacity .45s;transition:opacity .45s;opacity:1}.ant-tabs:not(.ant-tabs-vertical)>.ant-tabs-content>.ant-tabs-tabpane-inactive{opacity:0;height:0;padding:0!important;pointer-events:none}.ant-tabs:not(.ant-tabs-vertical)>.ant-tabs-content-animated{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;will-change:margin-left;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-vertical>.ant-tabs-bar{border-bottom:0;height:100%}.ant-tabs-vertical>.ant-tabs-bar-tab-next,.ant-tabs-vertical>.ant-tabs-bar-tab-prev{width:32px;height:0;-webkit-transition:height .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);transition:height .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-vertical>.ant-tabs-bar-tab-next.ant-tabs-tab-arrow-show,.ant-tabs-vertical>.ant-tabs-bar-tab-prev.ant-tabs-tab-arrow-show{width:100%;height:32px}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-tab{float:none;margin:0 0 16px;padding:8px 24px;display:block}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-tab:last-child{margin-bottom:0}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-extra-content{text-align:center}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav-scroll{width:auto}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav-container,.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav-wrap{height:100%}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav-container{margin-bottom:0}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling{padding:32px 0}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-nav{width:100%}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-ink-bar{width:2px;left:auto;height:auto;top:0}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-tab-next{width:100%;bottom:0;height:32px}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-tab-next-icon:before{content:"\E61D"}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-tab-prev{top:0;width:100%;height:32px}.ant-tabs-vertical>.ant-tabs-bar .ant-tabs-tab-prev-icon:before{content:"\E61E"}.ant-tabs-vertical>.ant-tabs-content{overflow:hidden;width:auto;margin-top:0!important}.ant-tabs-vertical.ant-tabs-left>.ant-tabs-bar{float:left;border-right:1px solid #e8e8e8;margin-right:-1px;margin-bottom:0}.ant-tabs-vertical.ant-tabs-left>.ant-tabs-bar .ant-tabs-tab{text-align:right}.ant-tabs-vertical.ant-tabs-left>.ant-tabs-bar .ant-tabs-nav-container,.ant-tabs-vertical.ant-tabs-left>.ant-tabs-bar .ant-tabs-nav-wrap{margin-right:-1px}.ant-tabs-vertical.ant-tabs-left>.ant-tabs-bar .ant-tabs-ink-bar{right:1px}.ant-tabs-vertical.ant-tabs-left>.ant-tabs-content{padding-left:24px;border-left:1px solid #e8e8e8}.ant-tabs-vertical.ant-tabs-right>.ant-tabs-bar{float:right;border-left:1px solid #e8e8e8;margin-left:-1px;margin-bottom:0}.ant-tabs-vertical.ant-tabs-right>.ant-tabs-bar .ant-tabs-nav-container,.ant-tabs-vertical.ant-tabs-right>.ant-tabs-bar .ant-tabs-nav-wrap{margin-left:-1px}.ant-tabs-vertical.ant-tabs-right>.ant-tabs-bar .ant-tabs-ink-bar{left:1px}.ant-tabs-vertical.ant-tabs-right>.ant-tabs-content{padding-right:24px;border-right:1px solid #e8e8e8}.ant-tabs-bottom>.ant-tabs-bar{margin-bottom:0;margin-top:16px}.ant-tabs-bottom .ant-tabs-ink-bar-animated,.ant-tabs-top .ant-tabs-ink-bar-animated{-webkit-transition:width .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:width .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-left .ant-tabs-ink-bar-animated,.ant-tabs-right .ant-tabs-ink-bar-animated{-webkit-transition:height .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:height .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-no-animation>.ant-tabs-content-animated,.ant-tabs-vertical>.ant-tabs-content-animated,.no-flex>.ant-tabs-content-animated{-webkit-transform:none!important;transform:none!important;margin-left:0!important}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive,.ant-tabs-vertical>.ant-tabs-content>.ant-tabs-tabpane-inactive,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive{display:none}.ant-btn{line-height:1.5;display:inline-block;font-weight:400;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:0 15px;font-size:14px;border-radius:4px;height:32px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);position:relative;color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;-webkit-transition:none;transition:none}.ant-btn.disabled,.ant-btn[disabled]{cursor:not-allowed}.ant-btn.disabled>*,.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{padding:0 15px;font-size:16px;border-radius:4px;height:40px}.ant-btn-sm{padding:0 7px;font-size:14px;border-radius:4px;height:24px}.ant-btn>a:only-child{color:currentColor}.ant-btn>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn:focus,.ant-btn:hover{color:#5ce1ff;background-color:#fff;border-color:#5ce1ff}.ant-btn:focus>a:only-child,.ant-btn:hover>a:only-child{color:currentColor}.ant-btn:focus>a:only-child:after,.ant-btn:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn.active,.ant-btn:active{color:#21abd9;background-color:#fff;border-color:#21abd9}.ant-btn.active>a:only-child,.ant-btn:active>a:only-child{color:currentColor}.ant-btn.active>a:only-child:after,.ant-btn:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn.disabled,.ant-btn.disabled.active,.ant-btn.disabled:active,.ant-btn.disabled:focus,.ant-btn.disabled:hover,.ant-btn[disabled],.ant-btn[disabled].active,.ant-btn[disabled]:active,.ant-btn[disabled]:focus,.ant-btn[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn.disabled.active>a:only-child,.ant-btn.disabled:active>a:only-child,.ant-btn.disabled:focus>a:only-child,.ant-btn.disabled:hover>a:only-child,.ant-btn.disabled>a:only-child,.ant-btn[disabled].active>a:only-child,.ant-btn[disabled]:active>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]>a:only-child{color:currentColor}.ant-btn.disabled.active>a:only-child:after,.ant-btn.disabled:active>a:only-child:after,.ant-btn.disabled:focus>a:only-child:after,.ant-btn.disabled:hover>a:only-child:after,.ant-btn.disabled>a:only-child:after,.ant-btn[disabled].active>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn.active,.ant-btn:active,.ant-btn:focus,.ant-btn:hover{background:#fff}.ant-btn>i,.ant-btn>span{pointer-events:none}.ant-btn-primary{color:#fff;background-color:#32d1ff;border-color:#32d1ff}.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-primary>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-primary:focus,.ant-btn-primary:hover{color:#fff;background-color:#5ce1ff;border-color:#5ce1ff}.ant-btn-primary:focus>a:only-child,.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-primary:focus>a:only-child:after,.ant-btn-primary:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-primary.active,.ant-btn-primary:active{color:#fff;background-color:#21abd9;border-color:#21abd9}.ant-btn-primary.active>a:only-child,.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-primary.active>a:only-child:after,.ant-btn-primary:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-primary.disabled,.ant-btn-primary.disabled.active,.ant-btn-primary.disabled:active,.ant-btn-primary.disabled:focus,.ant-btn-primary.disabled:hover,.ant-btn-primary[disabled],.ant-btn-primary[disabled].active,.ant-btn-primary[disabled]:active,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-primary.disabled.active>a:only-child,.ant-btn-primary.disabled:active>a:only-child,.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-primary.disabled>a:only-child,.ant-btn-primary[disabled].active>a:only-child,.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-primary.disabled>a:only-child:after,.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#5ce1ff;border-left-color:#5ce1ff}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#5ce1ff}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-left-color:#5ce1ff}.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:rgba(0,0,0,.65);background-color:transparent;border-color:#d9d9d9}.ant-btn-ghost>a:only-child{color:currentColor}.ant-btn-ghost>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-ghost:focus,.ant-btn-ghost:hover{color:#5ce1ff;background-color:transparent;border-color:#5ce1ff}.ant-btn-ghost:focus>a:only-child,.ant-btn-ghost:hover>a:only-child{color:currentColor}.ant-btn-ghost:focus>a:only-child:after,.ant-btn-ghost:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-ghost.active,.ant-btn-ghost:active{color:#21abd9;background-color:transparent;border-color:#21abd9}.ant-btn-ghost.active>a:only-child,.ant-btn-ghost:active>a:only-child{color:currentColor}.ant-btn-ghost.active>a:only-child:after,.ant-btn-ghost:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-ghost.disabled,.ant-btn-ghost.disabled.active,.ant-btn-ghost.disabled:active,.ant-btn-ghost.disabled:focus,.ant-btn-ghost.disabled:hover,.ant-btn-ghost[disabled],.ant-btn-ghost[disabled].active,.ant-btn-ghost[disabled]:active,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-ghost.disabled.active>a:only-child,.ant-btn-ghost.disabled:active>a:only-child,.ant-btn-ghost.disabled:focus>a:only-child,.ant-btn-ghost.disabled:hover>a:only-child,.ant-btn-ghost.disabled>a:only-child,.ant-btn-ghost[disabled].active>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]>a:only-child{color:currentColor}.ant-btn-ghost.disabled.active>a:only-child:after,.ant-btn-ghost.disabled:active>a:only-child:after,.ant-btn-ghost.disabled:focus>a:only-child:after,.ant-btn-ghost.disabled:hover>a:only-child:after,.ant-btn-ghost.disabled>a:only-child:after,.ant-btn-ghost[disabled].active>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-dashed{color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentColor}.ant-btn-dashed>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-dashed:focus,.ant-btn-dashed:hover{color:#5ce1ff;background-color:#fff;border-color:#5ce1ff}.ant-btn-dashed:focus>a:only-child,.ant-btn-dashed:hover>a:only-child{color:currentColor}.ant-btn-dashed:focus>a:only-child:after,.ant-btn-dashed:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-dashed.active,.ant-btn-dashed:active{color:#21abd9;background-color:#fff;border-color:#21abd9}.ant-btn-dashed.active>a:only-child,.ant-btn-dashed:active>a:only-child{color:currentColor}.ant-btn-dashed.active>a:only-child:after,.ant-btn-dashed:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-dashed.disabled,.ant-btn-dashed.disabled.active,.ant-btn-dashed.disabled:active,.ant-btn-dashed.disabled:focus,.ant-btn-dashed.disabled:hover,.ant-btn-dashed[disabled],.ant-btn-dashed[disabled].active,.ant-btn-dashed[disabled]:active,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-dashed.disabled.active>a:only-child,.ant-btn-dashed.disabled:active>a:only-child,.ant-btn-dashed.disabled:focus>a:only-child,.ant-btn-dashed.disabled:hover>a:only-child,.ant-btn-dashed.disabled>a:only-child,.ant-btn-dashed[disabled].active>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]>a:only-child{color:currentColor}.ant-btn-dashed.disabled.active>a:only-child:after,.ant-btn-dashed.disabled:active>a:only-child:after,.ant-btn-dashed.disabled:focus>a:only-child:after,.ant-btn-dashed.disabled:hover>a:only-child:after,.ant-btn-dashed.disabled>a:only-child:after,.ant-btn-dashed[disabled].active>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-danger{color:#f5222d;background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-danger>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-danger:focus,.ant-btn-danger:hover{color:#fff;background-color:#ff4d4f;border-color:#ff4d4f}.ant-btn-danger:focus>a:only-child,.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-danger:focus>a:only-child:after,.ant-btn-danger:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-danger.active,.ant-btn-danger:active{color:#fff;background-color:#cf1322;border-color:#cf1322}.ant-btn-danger.active>a:only-child,.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-danger.active>a:only-child:after,.ant-btn-danger:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-danger.disabled,.ant-btn-danger.disabled.active,.ant-btn-danger.disabled:active,.ant-btn-danger.disabled:focus,.ant-btn-danger.disabled:hover,.ant-btn-danger[disabled],.ant-btn-danger[disabled].active,.ant-btn-danger[disabled]:active,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-danger.disabled.active>a:only-child,.ant-btn-danger.disabled:active>a:only-child,.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-danger.disabled>a:only-child,.ant-btn-danger[disabled].active>a:only-child,.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-danger.disabled>a:only-child:after,.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-circle,.ant-btn-circle-outline{width:32px;padding:0;font-size:16px;border-radius:50%;height:32px}.ant-btn-circle-outline.ant-btn-lg,.ant-btn-circle.ant-btn-lg{width:40px;padding:0;font-size:18px;border-radius:50%;height:40px}.ant-btn-circle-outline.ant-btn-sm,.ant-btn-circle.ant-btn-sm{width:24px;padding:0;font-size:14px;border-radius:50%;height:24px}.ant-btn:before{position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;background:#fff;opacity:.35;content:"";border-radius:inherit;z-index:1;-webkit-transition:opacity .2s;transition:opacity .2s;pointer-events:none;display:none}.ant-btn .anticon{-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn.ant-btn-loading:before{display:block}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:29px;pointer-events:none;position:relative}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon{margin-left:-14px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:24px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon{margin-left:-17px}.ant-btn-group{position:relative;display:inline-block}.ant-btn-group>.ant-btn{position:relative;line-height:30px}.ant-btn-group>.ant-btn.active,.ant-btn-group>.ant-btn:active,.ant-btn-group>.ant-btn:focus,.ant-btn-group>.ant-btn:hover{z-index:2}.ant-btn-group>.ant-btn:disabled{z-index:0}.ant-btn-group-lg>.ant-btn{padding:0 15px;font-size:16px;border-radius:4px;height:40px;line-height:38px}.ant-btn-group-sm>.ant-btn{padding:0 7px;font-size:14px;border-radius:4px;height:24px;line-height:22px}.ant-btn-group-sm>.ant-btn>.anticon{font-size:14px}.ant-btn+.ant-btn-group,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group,.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group span+.ant-btn{margin-left:-1px}.ant-btn-group .ant-btn:not(:first-child):not(:last-child){border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-bottom-right-radius:0;border-top-right-radius:0}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-bottom-left-radius:0;border-top-left-radius:0}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{border-bottom-right-radius:0;border-top-right-radius:0;padding-right:8px}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0;padding-left:8px}.ant-btn:not(.ant-btn-circle):not(.ant-btn-circle-outline).ant-btn-icon-only{padding-left:8px;padding-right:8px}.ant-btn:active>span,.ant-btn:focus>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn-clicked:after{content:"";position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;border-radius:inherit;border:0 solid #32d1ff;opacity:.4;-webkit-animation:buttonEffect .4s;animation:buttonEffect .4s;display:block}.ant-btn-danger.ant-btn-clicked:after{border-color:#f5222d}.ant-btn-background-ghost{background:transparent!important;border-color:#fff;color:#fff}.ant-btn-background-ghost.ant-btn-primary{color:#32d1ff;background-color:transparent;border-color:#32d1ff}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-primary:focus,.ant-btn-background-ghost.ant-btn-primary:hover{color:#5ce1ff;background-color:transparent;border-color:#5ce1ff}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-primary.active,.ant-btn-background-ghost.ant-btn-primary:active{color:#21abd9;background-color:transparent;border-color:#21abd9}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-primary.disabled,.ant-btn-background-ghost.ant-btn-primary.disabled.active,.ant-btn-background-ghost.ant-btn-primary.disabled:active,.ant-btn-background-ghost.ant-btn-primary.disabled:focus,.ant-btn-background-ghost.ant-btn-primary.disabled:hover,.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled].active,.ant-btn-background-ghost.ant-btn-primary[disabled]:active,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-danger{color:#f5222d;background-color:transparent;border-color:#f5222d}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-danger:focus,.ant-btn-background-ghost.ant-btn-danger:hover{color:#ff4d4f;background-color:transparent;border-color:#ff4d4f}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-danger.active,.ant-btn-background-ghost.ant-btn-danger:active{color:#cf1322;background-color:transparent;border-color:#cf1322}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-background-ghost.ant-btn-danger.disabled,.ant-btn-background-ghost.ant-btn-danger.disabled.active,.ant-btn-background-ghost.ant-btn-danger.disabled:active,.ant-btn-background-ghost.ant-btn-danger.disabled:focus,.ant-btn-background-ghost.ant-btn-danger.disabled:hover,.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled].active,.ant-btn-background-ghost.ant-btn-danger[disabled]:active,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>*{letter-spacing:.34em;margin-right:-.34em}@-webkit-keyframes buttonEffect{to{opacity:0;top:-6px;left:-6px;bottom:-6px;right:-6px;border-width:6px}}@keyframes buttonEffect{to{opacity:0;top:-6px;left:-6px;bottom:-6px;right:-6px;border-width:6px}}a.ant-btn{line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.footer___c5AQ8{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;border:none;color:#ccc;margin-top:12px;font-size:13px;cursor:pointer}.footer___c5AQ8>span{margin-left:8px}@-webkit-keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}.ant-checkbox{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle;top:-.09em}.ant-checkbox-input:focus+.ant-checkbox-inner,.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner{border-color:#32d1ff}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:2px;border:1px solid #32d1ff;content:"";-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;visibility:hidden}.ant-checkbox-wrapper:hover .ant-checkbox:after,.ant-checkbox:hover:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;border:1px solid #d9d9d9;border-radius:2px;background-color:#fff;-webkit-transition:all .3s;transition:all .3s}.ant-checkbox-inner:after{-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0);position:absolute;left:4.57142857px;top:1.14285714px;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;content:" ";-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6);transition:all .1s cubic-bezier(.71,-.46,.88,.6)}.ant-checkbox-input{position:absolute;left:0;z-index:1;cursor:pointer;opacity:0;top:0;bottom:0;right:0;width:100%;height:100%}.ant-checkbox-indeterminate .ant-checkbox-inner:after{content:" ";-webkit-transform:scale(1);transform:scale(1);position:absolute;left:2.42857143px;top:5.92857143px;width:9.14285714px;height:1.14285714px}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:rgba(0,0,0,.25)}.ant-checkbox-checked .ant-checkbox-inner:after{-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;content:" ";-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s}.ant-checkbox-checked .ant-checkbox-inner,.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#32d1ff;border-color:#32d1ff}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{-webkit-animation-name:none;animation-name:none;border-color:rgba(0,0,0,.25)}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed}.ant-checkbox-disabled .ant-checkbox-inner{border-color:#d9d9d9!important;background-color:#f5f5f5}.ant-checkbox-disabled .ant-checkbox-inner:after{-webkit-animation-name:none;animation-name:none;border-color:#f5f5f5}.ant-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-checkbox-wrapper{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;line-height:unset;cursor:pointer;display:inline-block}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span,.ant-checkbox-wrapper+span{padding-left:8px;padding-right:8px}.ant-checkbox-group{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;display:inline-block}.ant-checkbox-group-item{display:inline-block;margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-input{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;position:relative;display:inline-block;padding:4px 11px;width:100%;height:32px;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-input:-ms-input-placeholder{color:#bfbfbf}.ant-input::-webkit-input-placeholder{color:#bfbfbf}.ant-input:focus,.ant-input:hover{border-color:#5ce1ff}.ant-input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(50,209,255,.2);box-shadow:0 0 0 2px rgba(50,209,255,.2)}.ant-input-disabled{background-color:#f5f5f5;opacity:1;cursor:not-allowed;color:rgba(0,0,0,.25)}.ant-input-disabled:hover{border-color:#e6d8d8}textarea.ant-input{max-width:100%;height:auto;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s;min-height:32px}.ant-input-lg{padding:6px 11px;height:40px;font-size:16px}.ant-input-sm{padding:1px 7px;height:24px}.ant-input-group{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;position:relative;display:table;border-collapse:separate;border-spacing:0;width:100%}.ant-input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0}.ant-input-group .ant-input:focus{z-index:1}.ant-input-group-addon{padding:0 11px;font-size:14px;font-weight:400;line-height:1;color:rgba(0,0,0,.65);text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:4px;position:relative;-webkit-transition:all .3s;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select .ant-select-selection{background-color:inherit;margin:-1px;border:1px solid transparent;-webkit-box-shadow:none;box-shadow:none}.ant-input-group-addon .ant-select-focused .ant-select-selection,.ant-input-group-addon .ant-select-open .ant-select-selection{color:#32d1ff}.ant-input-group-addon>i:only-child:after{position:absolute;content:"";top:0;left:0;right:0;bottom:0}.ant-input-group-addon:first-child,.ant-input-group-addon:first-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:first-child,.ant-input-group>.ant-input:first-child .ant-select .ant-select-selection{border-bottom-right-radius:0;border-top-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-bottom-left-radius:0;border-top-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-bottom-right-radius:0;border-top-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group-addon:last-child,.ant-input-group-addon:last-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:last-child,.ant-input-group>.ant-input:last-child .ant-select .ant-select-selection{border-bottom-left-radius:0;border-top-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:6px 11px;height:40px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:1px 7px;height:24px}.ant-input-group-lg .ant-select-selection--single{height:40px}.ant-input-group-sm .ant-select-selection--single{height:24px}.ant-input-group .ant-input-affix-wrapper{display:table-cell;width:100%;float:left}.ant-input-group.ant-input-group-compact{display:block;zoom:1}.ant-input-group.ant-input-group-compact:after,.ant-input-group.ant-input-group-compact:before{content:" ";display:table}.ant-input-group.ant-input-group-compact:after{clear:both;visibility:hidden;font-size:0;height:0}.ant-input-group.ant-input-group-compact>*{border-radius:0;border-right-width:0;vertical-align:top;float:none;display:inline-block}.ant-input-group.ant-input-group-compact .ant-input{float:none;z-index:auto}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input{border-radius:0;border-right-width:0}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:first-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:first-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:last-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:last-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-right-width:1px}.ant-input-group-wrapper{display:inline-block;vertical-align:top;width:100%}.ant-input-affix-wrapper{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;position:relative;display:inline-block;width:100%}.ant-input-affix-wrapper .ant-input{z-index:1}.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#5ce1ff}.ant-input-affix-wrapper .ant-input-prefix,.ant-input-affix-wrapper .ant-input-suffix{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:2;line-height:0;color:rgba(0,0,0,.65)}.ant-input-affix-wrapper .ant-input-prefix{left:12px}.ant-input-affix-wrapper .ant-input-suffix{right:12px}.ant-input-affix-wrapper .ant-input:not(:first-child){padding-left:30px}.ant-input-affix-wrapper .ant-input:not(:last-child){padding-right:30px}.ant-input-affix-wrapper .ant-input{min-height:100%}.ant-input-search-icon{pointer-events:none;color:rgba(0,0,0,.45)}.ant-input-search:not(.ant-input-search-small)>.ant-input-suffix{right:12px}.ant-input-search>.ant-input-suffix>.ant-input-search-button{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-search>.ant-input-suffix>.ant-input-search-button>.anticon-search{font-size:16px}.ant-input-search.ant-input-search-enter-button>.ant-input{padding-right:46px}.ant-input-search.ant-input-search-enter-button>.ant-input-suffix{right:0}.selection___gr2Yj{display:block;margin-left:0!important;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-bottom:.5rem}.selection___gr2Yj>span:last-child{-ms-flex:1 1 0%;flex:1 1 0%}.ant-switch{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);margin:0;padding:0;list-style:none;position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:22px;min-width:44px;line-height:20px;vertical-align:middle;border-radius:100px;border:1px solid transparent;background-color:rgba(0,0,0,.25);cursor:pointer;-webkit-transition:all .36s;transition:all .36s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-switch-inner{color:#fff;font-size:12px;margin-left:24px;margin-right:6px;display:block}.ant-switch:after,.ant-switch:before{position:absolute;width:18px;height:18px;left:1px;top:1px;border-radius:18px;background-color:#fff;content:" ";cursor:pointer;-webkit-transition:all .36s cubic-bezier(.78,.14,.15,.86);transition:all .36s cubic-bezier(.78,.14,.15,.86)}.ant-switch:after{-webkit-box-shadow:0 2px 4px 0 rgba(0,35,11,.2);box-shadow:0 2px 4px 0 rgba(0,35,11,.2)}.ant-switch:active:after,.ant-switch:active:before{width:24px}.ant-switch:before{content:"\E64D";font-family:anticon;-webkit-animation:loadingCircle 1s infinite linear;animation:loadingCircle 1s infinite linear;text-align:center;background:transparent;z-index:1;display:none;font-size:12px}.ant-switch-loading:before{display:inline-block;color:rgba(0,0,0,.65)}.ant-switch-checked.ant-switch-loading:before{color:#32d1ff}.ant-switch:focus{-webkit-box-shadow:0 0 0 2px rgba(50,209,255,.2);box-shadow:0 0 0 2px rgba(50,209,255,.2);outline:0}.ant-switch:focus:hover{-webkit-box-shadow:none;box-shadow:none}.ant-switch-small{height:16px;min-width:28px;line-height:14px}.ant-switch-small .ant-switch-inner{margin-left:18px;margin-right:3px;font-size:12px}.ant-switch-small:after,.ant-switch-small:before{width:12px;height:12px}.ant-switch-small:active:after,.ant-switch-small:active:before{width:16px}.ant-switch-small.ant-switch-checked:after,.ant-switch-small.ant-switch-checked:before{left:100%;margin-left:-12.5px}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin-left:3px;margin-right:18px}.ant-switch-small:active.ant-switch-checked:after,.ant-switch-small:active.ant-switch-checked:before{margin-left:-16.5px}.ant-switch-small.ant-switch-loading:before{-webkit-animation:AntSwitchSmallLoadingCircle 1s infinite linear;animation:AntSwitchSmallLoadingCircle 1s infinite linear;font-weight:700}.ant-switch-checked{background-color:#32d1ff}.ant-switch-checked .ant-switch-inner{margin-left:6px;margin-right:24px}.ant-switch-checked:after,.ant-switch-checked:before{left:100%;margin-left:-19px}.ant-switch-checked:active:after,.ant-switch-checked:active:before{margin-left:-25px}.ant-switch-disabled,.ant-switch-loading{pointer-events:none;opacity:.4}@-webkit-keyframes AntSwitchSmallLoadingCircle{0%{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(0deg) scale(.66667);transform:rotate(0deg) scale(.66667)}to{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(1turn) scale(.66667);transform:rotate(1turn) scale(.66667)}}@keyframes AntSwitchSmallLoadingCircle{0%{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(0deg) scale(.66667);transform:rotate(0deg) scale(.66667)}to{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(1turn) scale(.66667);transform:rotate(1turn) scale(.66667)}}.globalSwitch___3G0vg{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.globalSwitch___3G0vg>span{margin-right:.5rem}.ant-collapse{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;background-color:#fafafa;border-radius:4px;border:1px solid #d9d9d9;border-bottom:0}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 4px 4px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{line-height:22px;padding:12px 0 12px 40px;color:rgba(0,0,0,.85);cursor:pointer;position:relative;-webkit-transition:all .3s;transition:all .3s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .arrow{font-style:normal;vertical-align:baseline;text-align:center;text-transform:none;line-height:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:rotate(0);transform:rotate(0);font-size:12px;position:absolute;display:inline-block;line-height:46px;vertical-align:top;-webkit-transition:-webkit-transform .24s;transition:-webkit-transform .24s;transition:transform .24s;transition:transform .24s,-webkit-transform .24s;top:0;left:16px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .arrow:before{display:block;font-family:anticon!important;content:"\E61F"}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-anim-active{-webkit-transition:height .2s cubic-bezier(.215,.61,.355,1);transition:height .2s cubic-bezier(.215,.61,.355,1)}.ant-collapse-content{overflow:hidden;color:rgba(0,0,0,.65);padding:0 16px;background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding-top:16px;padding-bottom:16px}.ant-collapse-content-inactive{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 4px 4px}.ant-collapse>.ant-collapse-item>.ant-collapse-header[aria-expanded=true] .arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ant-collapse-borderless{background-color:#fff;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{cursor:not-allowed;color:rgba(0,0,0,.25)}::-webkit-scrollbar,::-webkit-scrollbar-track{display:none}::-webkit-scrollbar-thumb{display:none}::-webkit-scrollbar-thumb:hover{background:#32d1ff}.ant-tabs-tab{margin:0 .5rem!important}.ant-checkbox-group{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.ant-checkbox-group-item{width:45%}.ant-collapse-header{padding-left:0!important;font-size:.95rem;color:#222;font-weight:600}.ant-collapse-header:after{content:"#";color:#e3e3e3;margin-left:.5rem}.ant-collapse-header>i{right:0;left:auto!important;color:#999}.ant-collapse-item{border:none!important}.ant-collapse-content{border:none!important;padding:0!important}.ant-checkbox-wrapper .ant-input{border-radius:2rem!important;border-color:#eee;width:60%!important}.ant-checkbox-wrapper .ant-input-group-addon{background:#fff;border:none}.ant-checkbox-wrapper .ant-input-wrapper{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.ant-tabs-bar{margin-bottom:0}.banner___VxQsw{width:100%;height:150px;background-repeat:no-repeat;background-size:auto 90%;background-position:top;background-color:#32d1ff;padding:1rem}.view___3XY2c .container___1cJM7{width:100vw;height:calc(100vh - 320px);padding:.5rem 1rem 1rem;overflow-x:hidden;overflow-y:auto;border:none!important;background:transparent}.btnGroup___1GEqp{display:-ms-flexbox;display:flex;margin-top:1rem}.getBtn___1PJ-8,.submitBtn___Yli8T{-ms-flex:1 1 0%;flex:1 1 0%;border-radius:3rem}.getBtn___1PJ-8{margin-right:1rem}.submitBtn___Yli8T{font-weight:600;border:none;background:linear-gradient(45deg,#32d1ff,#84e3ff)!important;-webkit-box-shadow:0 4px 24px rgba(50,209,255,.25);box-shadow:0 4px 24px rgba(50,209,255,.25)}.resetBtn___qomII{border-radius:2rem;margin:0 auto;float:right;font-size:.8rem;border:none;color:#fff!important;background:hsla(0,0%,100%,.2)!important}.footbar___1ioM9{position:fixed;bottom:0;left:0;width:100vw;padding:1rem;background:#fff;-webkit-box-shadow:0 -4px 16px rgba(0,0,0,.05);box-shadow:0 -4px 16px rgba(0,0,0,.05)}.split___2szsR{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:1px solid #eee} -------------------------------------------------------------------------------- /SketchSelect.sketchplugin/Contents/Resources/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | Sketch Select 8 | 9 | 10 |
11 | 12 | -------------------------------------------------------------------------------- /SketchSelect.sketchplugin/Contents/Sketch/index.js: -------------------------------------------------------------------------------- 1 | var that=this;function __skpm_run(key,context){that.context=context;var exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=21)}([function(e,t,n){(function(t){function n(e,n){var o=Array.prototype.slice.call(n);o.forEach(function(e){try{log(t._skpmPrefix+function(){for(var e="",t=0;t0&&(e+="| ");return e}()+e)}catch(t){log(e)}})}t._skpmPrefix="console> ";var r=0;var o=t.group;t.group=function(){o&&o.apply(this,arguments),r+=1};var i=t.groupCollapsed;t.groupCollapsed=function(){i&&i.apply(this,arguments),r+=1};var a=t.groupEnd;t.groupEnd=function(){a&&a.apply(this,arguments),(r-=1)<0&&(r=0)};var u={},c=t.count;t.count=function(e){return u[e=void 0!==e?e:"Global"]=(u[e]||0)+1,c&&c.apply(this,arguments),n(0,[e+": "+u[e]])};var l={},s=t.time;t.time=function(e){if(s&&s.apply(this,arguments),l[e=void 0!==e?e:"default"])return n(0,['Timer "'+e+'" already exists']);l[e]=Date.now()};var f=t.timeEnd;t.timeEnd=function(e){if(f&&f.apply(this,arguments),!l[e=void 0!==e?e:"default"])return n(0,['Timer "'+e+'" does not exist']);var t=Date.now()-l[e];return delete l[e],n(0,[e+": "+t/1e3+"ms"])};var p=t.log;t.log=function(){return p&&p.apply(this,arguments),n(0,arguments)};var d=t.warn;t.warn=function(){return d&&d.apply(this,arguments),n(0,arguments)};var v=t.error;t.error=function(){return v&&v.apply(this,arguments),n(0,arguments)};var g=t.assert;t.assert=function(e,t){if(g&&g.apply(this,arguments),!e)return n(0,[t])};var y=t.info;t.info=function(){return y&&y.apply(this,arguments),n(0,arguments)};var b=t.clear;t.clear=function(){b&&b()},t._skpmEnabled=!0,e.exports=t}).call(t,n(0))},function(e,t,n){var r=n(16),o=n(14);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},function(e,t,n){var r=n(9),o=n(39),i=n(40),a="[object Null]",u="[object Undefined]",c=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?u:a:c&&c in Object(e)?o(e):i(e)}},function(e,t,n){var r=n(10),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t){e.exports=function(e){return e}},function(e,t,n){var r=n(29),o=n(30),i=n(51),a=n(11);e.exports=function(e,t){return(a(e)?r:o)(e,i(t))}},function(e,t,n){var r=n(34),o=n(47),i=n(1);e.exports=function(e){return i(e)?r(e):o(e)}},function(e,t,n){var r=n(3).Symbol;e.exports=r},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(t,n(38))},function(e,t){var n=Array.isArray;e.exports=n},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var o=typeof e;return!!(t=null==t?n:t)&&("number"==o||"symbol"!=o&&r.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=n}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){var r=n(2),o=n(5),i="[object AsyncFunction]",a="[object Function]",u="[object GeneratorFunction]",c="[object Proxy]";e.exports=function(e){if(!o(e))return!1;var t=r(e);return t==a||t==u||t==i||t==c}},function(e,t,n){var r=n(18),o=n(20),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var a=e[t];i.call(e,t)&&o(a,n)&&(void 0!==n||t in e)||r(e,t,n)}},function(e,t,n){var r=n(19);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(53),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var r=u(n(22)),o=u(n(23)),i=u(n(24)),a=n(27);function u(e){return e&&e.__esModule?e:{default:e}}t.default=function(t){var n=r.default.getSelectedDocument(),u=new i.default(t,"index.html",{identifier:"sketch-select.panel",x:0,y:0,width:340,height:624,title:"Sketch Select",onlyShowCloseButton:!0,background:(0,a.hex2NSColor)("32d1ff"),hideTitleBar:!1,shouldKeepAround:!0,resizable:!1,handlers:{select:function(t){var r=JSON.parse(t),i=void 0;if(e.log(r),r.global)i=n.selectedPage;else if(!(i=function e(t){if(!t)return!1;if("Artboard"===t.type)return t;if(t.parent)return e(t.parent);return!1}(i=n.selectedLayers.layers[0])))return o.default.alert("🖱 Select","Select target-artboard first ~");var u=(0,a.mapLayers)(i,r);u.length>0?(n.selectedLayers.clear(),(0,a.selectLayers)(u),o.default.message("🖱 Selected "+u.length+" Layers!")):o.default.alert("🖱 Select","Nothing to select ...")},getSelection:function(){var t=n.selectedLayers.layers[0],r=JSON.stringify(t);o.default.message("🖱 Select: "+t.name+" ("+t.type+")"),e.log(r),u.eval("getSelection("+r+")")},openWeb:function(e){return(0,a.openURL)(e)}}})}}).call(t,n(0))},function(e,t){e.exports=require("sketch/dom")},function(e,t){e.exports=require("sketch/ui")},function(e,t,n){var r=n(25),o=n(26),i=COScript.currentCOScript(),a="webView:didChangeLocationWithinPageForFrame:";function u(e,t,n,r){n.addConstraint(NSLayoutConstraint.constraintWithItem_attribute_relatedBy_toItem_attribute_multiplier_constant(t,e,NSLayoutRelationEqual,n,e,1,r))}function c(e,t,n){e.setTranslatesAutoresizingMaskIntoConstraints(!1),u(NSLayoutAttributeLeft,e,t,n[0]),u(NSLayoutAttributeTop,e,t,n[1]),u(NSLayoutAttributeRight,e,t,n[2]),u(NSLayoutAttributeBottom,e,t,n[3])}function l(e,t,n){var u,l,s=(n=n||{}).identifier||NSUUID.UUID().UUIDString(),f=NSThread.mainThread().threadDictionary();if(f[s]){(u=f[s]).makeKeyAndOrderFront(null);for(var p=u.contentView().subviews(),d=0;d1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.default)({Artboard:!1,Page:!1,Group:!1,Text:!1,Shape:!1,Image:!1,SymbolInstance:!1,SymbolMaster:!1,SymbolOverride:!1},n.types),a=[],u=[],c=[];return function e(t){(0,r.default)(t,function(t){a.push(t),t.layers?e(t.layers):u.push(t)})}(t.layers),(0,r.default)(a,function(e){var t=!0;if(i[e.type]||(t=!1),t&&n.config.Name&&(0,r.default)(n.config.Name,function(n,r){e[r]!==n&&(t=!1)}),t&&n.config.Rect&&(0,r.default)(n.config.Rect,function(n,r){e.frame[r]!==n&&(t=!1)}),t&&n.config.Symbol&&(0,r.default)(n.config.Symbol,function(n,r){e[r]!==n&&(t=!1)}),t&&n.config.Prototyping&&(0,r.default)(n.config.Prototyping,function(r,o){"text"===o?n.config.Prototyping.textReg?new RegExp(r).test(e.text)||(t=!1):e.text!==r&&(t=!1):e[o]&&e[o]!==r&&(t=!1)}),t&&n.config.Style){var o=n.config.Style,a=e.style.fills[0],u=e.style.borders[0];t&&o.fillColor&&(a||(t=!1),t&&a.color!==o.fillColor&&(t=!1)),t&&o.fillType&&(a||(t=!1),t&&a.fill!==o.fillType&&(t=!1)),t&&o.borderColor&&(u||(t=!1),t&&u.color!==o.borderColor&&(t=!1)),t&&o.borderThickness&&(u||(t=!1),t&&u.thickness!==o.borderThickness&&(t=!1))}t&&c.push(e)}),e.log("Filter",JSON.stringify(c)),c}}).call(t,n(0))},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&o(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=n)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(20),o=n(1),i=n(13),a=n(5);e.exports=function(e,t,n){if(!a(n))return!1;var u=typeof t;return!!("number"==u?o(n)&&i(t,n.length):"string"==u&&t in n)&&r(n[t],e)}},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(7),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(t){try{(0,i.default)(t,function(e){return e.selected=!0})}catch(t){e.log(t)}}}).call(t,n(0))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=parseInt(e.substring(0,2),16)/255,n=parseInt(e.substring(2,4),16)/255,r=parseInt(e.substring(4,6),16)/255;return NSColor.colorWithRed_green_blue_alpha(t,n,r,1)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(e))}}]);"default"===key&&"function"==typeof exports?exports(context):exports[key](context)}that.onRun=__skpm_run.bind(this,"default"); -------------------------------------------------------------------------------- /SketchSelect.sketchplugin/Contents/Sketch/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Sketch Select", 3 | "identifier": "cm.sketch.select", 4 | "compatibleVersion": 3, 5 | "bundleVersion": 1, 6 | "icon": "icon.png", 7 | "commands": [ 8 | { 9 | "name": "🖱 Select", 10 | "script": "index.js", 11 | "identifier": "sketch-select", 12 | "shortcut": "command shift f" 13 | } 14 | ], 15 | "menu": { 16 | "title": "Select", 17 | "isRoot": true, 18 | "items": [ 19 | "sketch-select" 20 | ] 21 | }, 22 | "version": "3.0.0", 23 | "description": "Make it convenient to select layers with similar attributes.", 24 | "homepage": "https://github.com/canisminor1990/sketch-select", 25 | "disableCocoaScriptPreprocessor": true, 26 | "appcast": "https://raw.githubusercontent.com/canisminor1990/sketch-select/master/.appcast.xml", 27 | "author": "CanisMinor", 28 | "authorEmail": "i@canisminor.cc" 29 | } -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/icon.png -------------------------------------------------------------------------------- /img/rm-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/img/rm-banner.png -------------------------------------------------------------------------------- /img/rm-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/img/rm-dialog.png -------------------------------------------------------------------------------- /img/rm-option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/img/rm-option.png -------------------------------------------------------------------------------- /img/rm-run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/img/rm-run.png -------------------------------------------------------------------------------- /img/rm-shortkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/img/rm-shortkey.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sketch-select", 3 | "version": "3.0.1", 4 | "description": "Make it convenient to select layers with similar attributes.", 5 | "repository": { 6 | "type": "git", 7 | "url": "git+https://github.com/canisminor1990/sketch-select.git" 8 | }, 9 | "author": { 10 | "name": "CanisMinor", 11 | "email": "i@canisminor.cc", 12 | "url": "https://canisminor.cc/" 13 | }, 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/canisminor1990/sketch-select/issues" 17 | }, 18 | "homepage": "https://github.com/canisminor1990/sketch-select", 19 | "main": "SketchSelect.sketchplugin", 20 | "engines": { 21 | "sketch": ">=49.0" 22 | }, 23 | "skpm": { 24 | "name": "sketch-select", 25 | "manifest": "src/manifest.json", 26 | "main": "SketchSelect.sketchplugin", 27 | "assets": [ 28 | "dist/**/*" 29 | ] 30 | }, 31 | "appcast": "https://raw.githubusercontent.com/canisminor1990/sketch-select/master/.appcast.xml", 32 | "scripts": { 33 | "start": "concurrently \"yarn start:panel\" \"yarn start:plugin\"", 34 | "start:plugin": "cross-env NODE_ENV=development skpm-build --watch", 35 | "start:panel": "roadhog dev", 36 | "build": "yarn build:panel && yarn build:plugin", 37 | "build:plugin": "cross-env NODE_ENV=production skpm-build", 38 | "build:panel": "roadhog build", 39 | "publish": "skpm publish", 40 | "link": "skpm-link", 41 | "lint": "lint-staged", 42 | "lint:es": "eslint --fix --ext .js ./" 43 | }, 44 | "pre-commit": [ 45 | "lint" 46 | ], 47 | "lint-staged": { 48 | "*.md": [ 49 | "prettier --trailing-comma all --single-quote --write", 50 | "git add" 51 | ], 52 | "./package.json": [ 53 | "prettier --trailing-comma all --single-quote --write", 54 | "git add" 55 | ], 56 | "src/**/*.js": [ 57 | "eslint --fix", 58 | "git add" 59 | ], 60 | "panel/**/*.js": [ 61 | "eslint --fix", 62 | "git add" 63 | ], 64 | "panel/**/*.scss": [ 65 | "prettier --trailing-comma all --single-quote --write", 66 | "git add" 67 | ] 68 | }, 69 | "peerDependencies": { 70 | "skpm": "^1.0.14" 71 | }, 72 | "dependencies": { 73 | "@skpm/builder": "^0.4.0", 74 | "antd": "^3.2.3", 75 | "dva": "^2.1.0", 76 | "dva-loading": "^1.0.4", 77 | "lodash": "^4.17.4", 78 | "react": "^16.2.0", 79 | "react-dom": "^16.2.0", 80 | "sketch-module-web-view": "^0.2.6" 81 | }, 82 | "devDependencies": { 83 | "babel-core": "^6.26.0", 84 | "babel-plugin-dva-hmr": "^0.4.0", 85 | "babel-plugin-import": "^1.6.2", 86 | "babel-plugin-lodash": "^3.2.11", 87 | "babel-preset-env": "^1.6.1", 88 | "babel-preset-stage-0": "^6.24.1", 89 | "concurrently": "^3.5.1", 90 | "cross-env": "^5.1.3", 91 | "eslint": "^4.13.1", 92 | "eslint-config-prettier": "^2.9.0", 93 | "eslint-config-standard": "^10.2.1", 94 | "eslint-plugin-flowtype": "^2.37.0", 95 | "eslint-plugin-import": "^2.7.0", 96 | "eslint-plugin-node": "^5.2.0", 97 | "eslint-plugin-prettier": "^2.3.1", 98 | "eslint-plugin-promise": "^3.5.0", 99 | "eslint-plugin-react": "^7.4.0", 100 | "eslint-plugin-standard": "^3.0.1", 101 | "expect": "^21.2.1", 102 | "husky": "^0.14.3", 103 | "lint-staged": "^4.2.3", 104 | "node-sass": "^4.5.3", 105 | "pre-commit": "^1.2.2", 106 | "prettier": "^1.11.1", 107 | "redbox-react": "^1.3.2", 108 | "roadhog": "^2.2.0", 109 | "sass-loader": "^6.0.6" 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /panel/components/Copyright/index.js: -------------------------------------------------------------------------------- 1 | import { Component } from 'react'; 2 | import { Icon } from 'antd'; 3 | import pluginCall from 'sketch-module-web-view/client'; 4 | import style from './index.scss'; 5 | 6 | export default class extends Component { 7 | openWeb = () => { 8 | console.log(this.props); 9 | const { src } = this.props; 10 | pluginCall('openWeb', src); 11 | console.log('openWeb = ', src); 12 | }; 13 | 14 | render() { 15 | return ( 16 |
17 | 18 | canisminor1990 19 |
20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /panel/components/Copyright/index.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | width: 100%; 6 | border: none; 7 | color: #ccc; 8 | margin-top: 12px; 9 | font-size: 13px; 10 | cursor: pointer; 11 | > span { 12 | margin-left: 8px; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /panel/components/Selection/index.js: -------------------------------------------------------------------------------- 1 | import { Checkbox, Input } from 'antd'; 2 | import { connect } from 'dva'; 3 | import style from './index.scss'; 4 | 5 | const State = ({ config }) => ({ config }); 6 | 7 | const Selection = ({ dispatch, config, title, type }) => { 8 | const update = (data, type = 'config') => { 9 | dispatch({ type: `${type}/update`, payload: data }); 10 | }; 11 | const onCheck = (e, type) => { 12 | const checked = e.target.checked; 13 | update({ [`${type}Checked`]: checked }, 'config'); 14 | }; 15 | const onInputChange = (e, type) => { 16 | const value = e.target.value; 17 | update({ [type]: value }, 'config'); 18 | }; 19 | 20 | return ( 21 | onCheck(e, type)} 25 | > 26 | onInputChange(e, type)} /> 27 | 28 | ); 29 | }; 30 | 31 | export default connect(State)(Selection); 32 | -------------------------------------------------------------------------------- /panel/components/Selection/index.scss: -------------------------------------------------------------------------------- 1 | .selection { 2 | display: block; 3 | margin-left: 0 !important; 4 | display: flex; 5 | align-items: center; 6 | margin-bottom: 0.5rem; 7 | > span:last-child { 8 | flex: 1; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /panel/components/Switchbox/index.js: -------------------------------------------------------------------------------- 1 | import { Switch } from 'antd'; 2 | import { connect } from 'dva'; 3 | import style from './index.scss'; 4 | 5 | const State = ({ config }) => ({ config }); 6 | 7 | const Switchbox = ({ dispatch, config, title, type }) => { 8 | const update = (data, type = 'config') => { 9 | dispatch({ type: `${type}/update`, payload: data }); 10 | }; 11 | const onSwitch = (checked, type) => { 12 | update({ [`${type}Switch`]: checked }, 'config'); 13 | }; 14 | 15 | return ( 16 |
17 | onSwitch(e, type)} /> 18 | {title} 19 |
20 | ); 21 | }; 22 | 23 | export default connect(State)(Switchbox); 24 | -------------------------------------------------------------------------------- /panel/components/Switchbox/index.scss: -------------------------------------------------------------------------------- 1 | .globalSwitch { 2 | display: flex; 3 | align-items: center; 4 | > span { 5 | margin-right: 0.5rem; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /panel/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Copyright } from './Copyright'; 2 | export { default as Selection } from './Selection'; 3 | export { default as Switchbox } from './Switchbox'; 4 | -------------------------------------------------------------------------------- /panel/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | Sketch Select 8 | 9 | 10 |
11 | 12 | -------------------------------------------------------------------------------- /panel/index.js: -------------------------------------------------------------------------------- 1 | import { message } from 'antd'; 2 | import dva from 'dva'; 3 | import createLoading from 'dva-loading'; 4 | import './index.scss'; 5 | 6 | // 1. Initialize 7 | const app = dva({ 8 | onError(e) { 9 | message.error(e.message, 3); 10 | }, 11 | }); 12 | 13 | // 2. Models 14 | app.model(require('./models/config').default); 15 | app.model(require('./models/layers').default); 16 | 17 | // 2. Plugins 18 | app.use(createLoading()); 19 | 20 | // 3. Router 21 | app.router(require('./router').default); 22 | 23 | // 4. Start 24 | app.start('#root'); 25 | 26 | // 5. Sketch 27 | window.getSelection = json => localStorage.setItem('selection', JSON.stringify(json)); 28 | 29 | // Disable the context menu to have a more native feel 30 | document.addEventListener('contextmenu', e => e.preventDefault()); 31 | -------------------------------------------------------------------------------- /panel/index.scss: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | :global(#root) { 4 | height: 100%; 5 | background: #fff; 6 | overflow: hidden; 7 | user-select: none; 8 | } 9 | 10 | *:focus { 11 | outline: none; 12 | } 13 | 14 | * { 15 | -webkit-font-smoothing: antialiased; 16 | } 17 | 18 | div { 19 | box-sizing: border-box; 20 | position: relative; 21 | } 22 | 23 | h1 { 24 | font-size: 1rem; 25 | margin: 0.5rem 0 1rem; 26 | } 27 | -------------------------------------------------------------------------------- /panel/models/config.js: -------------------------------------------------------------------------------- 1 | const Checked = type => ({ 2 | [type]: '', 3 | [`${type}Checked`]: false, 4 | }); 5 | const Switch = type => ({ 6 | [`${type}Switch`]: false, 7 | }); 8 | 9 | const defaultConfig = { 10 | ...Switch('global'), 11 | ...Checked('type'), 12 | ...Checked('name'), 13 | ...Checked('id'), 14 | // rect 15 | ...Checked('x'), 16 | ...Checked('y'), 17 | ...Checked('width'), 18 | ...Checked('height'), 19 | // text 20 | ...Checked('text'), 21 | ...Switch('textReg'), 22 | ...Checked('alignment'), 23 | ...Checked('lineSpacing'), 24 | ...Checked('fixedWidth'), 25 | // shape 26 | ...Checked('fillColor'), 27 | ...Checked('fillType'), 28 | ...Checked('borderColor'), 29 | ...Checked('borderThickness'), 30 | // symbol 31 | ...Checked('symbolId'), 32 | // other 33 | ...Switch('exportable'), 34 | ...Switch('hide'), 35 | ...Switch('lock'), 36 | }; 37 | export default { 38 | namespace: 'config', 39 | 40 | state: { 41 | page: 'Any', 42 | ...defaultConfig, 43 | }, 44 | 45 | reducers: { 46 | updateSuccess(state, action) { 47 | const payload = action.payload; 48 | return { ...state, ...payload }; 49 | }, 50 | reset(state, action) { 51 | return { ...state, ...defaultConfig }; 52 | }, 53 | }, 54 | 55 | effects: { 56 | *update(action, { put }) { 57 | const payload = action.payload; 58 | console.log('update', payload); 59 | yield put({ type: 'updateSuccess', payload }); 60 | }, 61 | }, 62 | }; 63 | -------------------------------------------------------------------------------- /panel/models/layers.js: -------------------------------------------------------------------------------- 1 | const defaultConfig = { 2 | checkedList: [], 3 | indeterminate: false, 4 | checkAll: false, 5 | }; 6 | 7 | export default { 8 | namespace: 'layers', 9 | 10 | state: { 11 | options: [ 12 | 'Artboard', 13 | 'Page', 14 | 'Group', 15 | 'Text', 16 | 'Shape', 17 | 'Image', 18 | 'SymbolInstance', 19 | 'SymbolMaster', 20 | 'SymbolOverride', 21 | ], 22 | ...defaultConfig, 23 | }, 24 | 25 | reducers: { 26 | reset(state, action) { 27 | return { ...state, ...defaultConfig }; 28 | }, 29 | updateSuccess(state, action) { 30 | const payload = action.payload; 31 | return { ...state, ...payload }; 32 | }, 33 | }, 34 | 35 | effects: { 36 | *update(action, { put }) { 37 | const payload = action.payload; 38 | console.log('update', payload); 39 | yield put({ type: 'updateSuccess', payload }); 40 | }, 41 | }, 42 | }; 43 | -------------------------------------------------------------------------------- /panel/router.js: -------------------------------------------------------------------------------- 1 | import { Route, Router } from 'dva/router'; 2 | import Panel from './routes'; 3 | 4 | export default ({ app, history }) => { 5 | history.listen(() => window.scrollTo(0, 0)); 6 | return ( 7 | 8 | 9 | 10 | ); 11 | }; 12 | -------------------------------------------------------------------------------- /panel/routes/Any/index.js: -------------------------------------------------------------------------------- 1 | import Tab from '../Tab'; 2 | import { connect } from 'dva'; 3 | import { Collapse, Checkbox } from 'antd'; 4 | import style from '../index.scss'; 5 | const Panel = Collapse.Panel; 6 | 7 | const CheckboxGroup = Checkbox.Group; 8 | 9 | class Page extends Tab { 10 | // Components 11 | LayerTypes = () => { 12 | const layers = this.props.layers; 13 | return ( 14 |
15 |
16 | 21 | Check all 22 | 23 |
24 | 29 |
30 | ); 31 | }; 32 | 33 | render() { 34 | return ( 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | ); 47 | } 48 | 49 | // Func 50 | onLayersChange = list => { 51 | const optLength = this.props.layers.options.length; 52 | const length = list.length; 53 | const Layer = { 54 | checkedList: list, 55 | indeterminate: !!length && length < optLength, 56 | checkAll: length === optLength, 57 | }; 58 | this.props.update(Layer, 'layers'); 59 | }; 60 | onCheckAllLayers = e => { 61 | const checked = e.target.checked; 62 | const options = this.props.layers.options; 63 | const Layer = { 64 | checkedList: checked ? options : [], 65 | indeterminate: false, 66 | checkAll: checked, 67 | }; 68 | this.props.update(Layer, 'layers'); 69 | }; 70 | } 71 | 72 | export default connect(Tab.State, Tab.Func)(Page); 73 | -------------------------------------------------------------------------------- /panel/routes/Shape/index.js: -------------------------------------------------------------------------------- 1 | import Tab from '../Tab'; 2 | import { connect } from 'dva'; 3 | import { Collapse } from 'antd'; 4 | import style from '../index.scss'; 5 | const Panel = Collapse.Panel; 6 | 7 | class Page extends Tab { 8 | // Components 9 | 10 | render() { 11 | return ( 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | ); 24 | } 25 | } 26 | 27 | export default connect(Tab.State, Tab.Func)(Page); 28 | -------------------------------------------------------------------------------- /panel/routes/Symbol/index.js: -------------------------------------------------------------------------------- 1 | import Tab from '../Tab'; 2 | import { connect } from 'dva'; 3 | import { Collapse } from 'antd'; 4 | import { Selection } from '../../components'; 5 | import style from '../index.scss'; 6 | const Panel = Collapse.Panel; 7 | 8 | class Page extends Tab { 9 | // Components 10 | Symbol = () => ( 11 |
12 | 13 |
14 | ); 15 | 16 | render() { 17 | return ( 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | ); 30 | } 31 | } 32 | 33 | export default connect(Tab.State, Tab.Func)(Page); 34 | -------------------------------------------------------------------------------- /panel/routes/Tab/index.js: -------------------------------------------------------------------------------- 1 | import { Component } from 'react'; 2 | import { Switchbox, Selection } from '../../components'; 3 | 4 | class Tab extends Component { 5 | // Components 6 | 7 | Name = () => { 8 | return ( 9 |
10 | 11 | 12 |
13 | ); 14 | }; 15 | 16 | Rectangle = () => { 17 | return ( 18 |
19 | 20 | 21 | 22 | 23 |
24 | ); 25 | }; 26 | 27 | Style = () => { 28 | return ( 29 |
30 | 31 | 32 | 33 | 34 |
35 | ); 36 | }; 37 | 38 | Other = () => { 39 | return ( 40 |
41 | 42 | 43 | 44 |
45 | ); 46 | }; 47 | } 48 | 49 | Tab.State = state => ({ 50 | ...state, 51 | }); 52 | 53 | Tab.Func = dispatch => ({ 54 | update(data, type = 'config') { 55 | dispatch({ type: `${type}/update`, payload: data }); 56 | }, 57 | reset() { 58 | dispatch({ type: `config/reset` }); 59 | dispatch({ type: `layers/reset` }); 60 | }, 61 | }); 62 | 63 | export default Tab; 64 | -------------------------------------------------------------------------------- /panel/routes/Tab/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "type" : "Shape", 3 | "id" : "38D53BC0-823D-4376-A038-B24D82A274F3", 4 | "frame" : { 5 | "x" : 56, 6 | "y" : 41, 7 | "width" : 150, 8 | "height": 108 9 | }, 10 | "name" : "Rectangle", 11 | "selected": true, 12 | "flow" : null, 13 | "style" : { 14 | "type" : "Style", 15 | "id" : "826FDC94-2F8A-4151-A5A0-3A1237F2AF9F", 16 | "fills" : [ 17 | { 18 | "color": "#d8d8d8ff", 19 | "fill" : "color" 20 | } 21 | ], 22 | "borders": [ 23 | { 24 | "color" : "#979797ff", 25 | "fillType" : "color", 26 | "position" : "Inside", 27 | "thickness": 1 28 | } 29 | ] 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /panel/routes/Text/index.js: -------------------------------------------------------------------------------- 1 | import Tab from '../Tab'; 2 | import { connect } from 'dva'; 3 | import { Collapse } from 'antd'; 4 | import { Selection, Switchbox } from '../../components'; 5 | import style from '../index.scss'; 6 | const Panel = Collapse.Panel; 7 | 8 | class Page extends Tab { 9 | // Components 10 | 11 | Content = () => ( 12 |
13 | 14 | 15 |
16 | ); 17 | 18 | Prototyping = () => ( 19 |
20 | 21 | 22 | 23 |
24 | ); 25 | 26 | render() { 27 | return ( 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | } 45 | 46 | export default connect(Tab.State, Tab.Func)(Page); 47 | -------------------------------------------------------------------------------- /panel/routes/_reset.scss: -------------------------------------------------------------------------------- 1 | .ant-tabs-tab { 2 | margin: 0 0.5rem !important; 3 | } 4 | .ant-checkbox-group { 5 | display: flex; 6 | flex-wrap: wrap; 7 | } 8 | .ant-checkbox-group-item { 9 | width: 45%; 10 | } 11 | .ant-collapse-header { 12 | padding-left: 0 !important; 13 | font-size: 0.95rem; 14 | color: #222; 15 | font-weight: 600; 16 | &:after { 17 | content: '#'; 18 | color: #e3e3e3; 19 | margin-left: 0.5rem; 20 | } 21 | > i { 22 | right: 0; 23 | left: auto !important; 24 | color: #999; 25 | } 26 | } 27 | .ant-collapse-item { 28 | border: none !important; 29 | } 30 | .ant-collapse-content { 31 | border: none !important; 32 | padding: 0 !important; 33 | } 34 | .ant-checkbox-wrapper { 35 | .ant-input { 36 | border-radius: 2rem !important; 37 | border-color: #eee; 38 | 39 | width: 60% !important; 40 | } 41 | .ant-input-group-addon { 42 | background: #fff; 43 | border: none; 44 | } 45 | 46 | .ant-input-wrapper { 47 | display: flex; 48 | justify-content: space-between; 49 | align-items: center; 50 | } 51 | } 52 | .ant-tabs-bar { 53 | margin-bottom: 0; 54 | } 55 | -------------------------------------------------------------------------------- /panel/routes/_scroll.scss: -------------------------------------------------------------------------------- 1 | /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ 2 | ::-webkit-scrollbar { 3 | display: none; 4 | } 5 | 6 | /*定义滚动条轨道 内阴影+圆角*/ 7 | ::-webkit-scrollbar-track { 8 | display: none; 9 | } 10 | 11 | /*定义滑块 内阴影+圆角*/ 12 | ::-webkit-scrollbar-thumb { 13 | display: none; 14 | 15 | &:hover { 16 | background: $c-primary; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /panel/routes/index.js: -------------------------------------------------------------------------------- 1 | import pluginCall from 'sketch-module-web-view/client'; 2 | import _ from 'lodash'; 3 | import { connect } from 'dva'; 4 | import { Component } from 'react'; 5 | import { Tabs, Button, message } from 'antd'; 6 | import { Copyright, Switchbox } from '../components'; 7 | import MapSelection from './mapSelection'; 8 | import Tab from './Tab'; 9 | import Any from './Any'; 10 | import Text from './Text'; 11 | import Shape from './Shape'; 12 | import Symbol from './Symbol'; 13 | import style from './index.scss'; 14 | 15 | const TabPane = Tabs.TabPane; 16 | 17 | class WebView extends Component { 18 | FootBar = () => ( 19 |
20 | 21 |
22 | 25 | 28 |
29 | 30 |
31 | ); 32 | 33 | ResetBtn = () => ( 34 | 37 | ); 38 | 39 | render() { 40 | return ( 41 |
42 |
43 | 44 |
45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 |
61 | ); 62 | } 63 | 64 | onReset = () => { 65 | this.props.reset(); 66 | message.success(`Reset Success`); 67 | }; 68 | 69 | onTabsChange = activeKey => this.props.update({ page: activeKey }); 70 | 71 | onGetBtnClick = () => { 72 | pluginCall('getSelection'); 73 | const json = localStorage.getItem('selection'); 74 | const data = MapSelection(JSON.parse(json)); 75 | this.props.update(data); 76 | this.props.update({ checkAll: false, checkedList: [data.type] }, 'layers'); 77 | if (data.name) { 78 | message.success(`Select: ${data.name}`); 79 | } else { 80 | message.error(`Select a target first`); 81 | } 82 | }; 83 | 84 | onSelectBtnClick = () => { 85 | const page = this.props.config.page; 86 | const Props = { 87 | Name: ['name', 'id'], 88 | Rect: ['x', 'y', 'width', 'height'], 89 | Prototyping: ['text', 'alignment', 'lineSpacing', 'fixedWidth'], 90 | Style: ['fillColor', 'fillType', 'borderColor', 'borderThickness'], 91 | Symbol: ['symbolId'], 92 | }; 93 | const Page = { 94 | Any: { 95 | types: this.props.layers.checkedList, 96 | props: ['Name', 'Rect'], 97 | }, 98 | Text: { 99 | types: ['Text'], 100 | props: ['Name', 'Rect', 'Prototyping'], 101 | }, 102 | Shape: { 103 | types: ['Shape'], 104 | props: ['Name', 'Rect', 'Style'], 105 | }, 106 | Symbol: { 107 | types: ['SymbolInstance', 'SymbolInstance'], 108 | props: ['Name', 'Rect', 'Symbol'], 109 | }, 110 | }; 111 | 112 | // Map props 113 | const propsType = Page[page].props; 114 | const typesArray = _.compact(Page[this.props.config.page].types); 115 | let pagePropsType = {}; 116 | let pageProps = {}; 117 | let types = {}; 118 | let err = false; 119 | 120 | _.forEach(propsType, props => { 121 | pagePropsType[props] = Props[props]; 122 | }); 123 | 124 | _.forEach(pagePropsType, (props, key) => { 125 | _.forEach(props, type => { 126 | if (this.props.config[`${type}Checked`]) { 127 | if (this.props.config[type] !== '') { 128 | if (!pageProps[key]) pageProps[key] = {}; 129 | pageProps[key][type] = this.props.config[type]; 130 | if (type === 'text') pageProps.Prototyping.textReg = this.props.config.textRegSwitch; 131 | } else { 132 | err = type; 133 | } 134 | } 135 | }); 136 | }); 137 | 138 | if (err) return message.error(`${err} need to set`); 139 | 140 | _.forEach(typesArray, type => (types[type] = true)); 141 | 142 | const data = { 143 | types, 144 | page, 145 | global: this.props.config.globalSwitch, 146 | config: pageProps, 147 | }; 148 | 149 | console.log(data); 150 | 151 | if ( 152 | Object.keys(data.types).length === 0 || 153 | (page !== 'Any' && Object.keys(data.config).length === 0) 154 | ) { 155 | return message.error('Config is empty'); 156 | } 157 | 158 | pluginCall('select', JSON.stringify(data)); 159 | }; 160 | } 161 | 162 | export default connect(Tab.State, Tab.Func)(WebView); 163 | -------------------------------------------------------------------------------- /panel/routes/index.scss: -------------------------------------------------------------------------------- 1 | $c-primary: #32d1ff; 2 | @import 'scroll'; 3 | :global { 4 | @import 'reset'; 5 | } 6 | .banner { 7 | width: 100%; 8 | height: 150px; 9 | background-repeat: no-repeat; 10 | background-size: auto 90%; 11 | background-position: top center; 12 | background-color: $c-primary; 13 | padding: 1rem; 14 | } 15 | 16 | .view .container { 17 | width: 100vw; 18 | height: calc(100vh - 320px); 19 | padding: 0.5rem 1rem 1rem; 20 | overflow-x: hidden; 21 | overflow-y: auto; 22 | border: none !important; 23 | background: transparent; 24 | } 25 | .btnGroup { 26 | display: flex; 27 | margin-top: 1rem; 28 | } 29 | .getBtn, 30 | .submitBtn { 31 | flex: 1; 32 | 33 | border-radius: 3rem; 34 | } 35 | .getBtn { 36 | margin-right: 1rem; 37 | } 38 | .submitBtn { 39 | font-weight: 600; 40 | border: none; 41 | background: linear-gradient( 42 | 45deg, 43 | $c-primary, 44 | lighten($c-primary, 16%) 45 | ) !important; 46 | box-shadow: 0 4px 24px rgba($c-primary, 0.25); 47 | } 48 | .resetBtn { 49 | border-radius: 2rem; 50 | margin: 0 auto; 51 | float: right; 52 | font-size: 0.8rem; 53 | border: none; 54 | color: #fff !important; 55 | background: rgba(#fff, 0.2) !important; 56 | } 57 | .footbar { 58 | position: fixed; 59 | bottom: 0; 60 | left: 0; 61 | width: 100vw; 62 | padding: 1rem; 63 | background: #fff; 64 | box-shadow: 0 -4px 16px rgba(#000, 0.05); 65 | } 66 | .split { 67 | padding-bottom: 0.5rem; 68 | margin-bottom: 0.5rem; 69 | border-bottom: 1px solid #eee; 70 | } 71 | -------------------------------------------------------------------------------- /panel/routes/mapSelection.js: -------------------------------------------------------------------------------- 1 | export default data => { 2 | return { 3 | ...map(data, 'type'), 4 | ...map(data, 'name'), 5 | ...map(data, 'id'), 6 | ...mapFrame(data, 'x'), 7 | ...mapFrame(data, 'y'), 8 | ...mapFrame(data, 'width'), 9 | ...mapFrame(data, 'height'), 10 | ...map(data, 'text'), 11 | ...map(data, 'alignment'), 12 | ...map(data, 'lineSpacing'), 13 | ...map(data, 'fixedWidth'), 14 | ...mapStyle(data, 'fillColor', 'fills', 'color'), 15 | ...mapStyle(data, 'fillType', 'fills', 'fill'), 16 | ...mapStyle(data, 'borderColor', 'borders', 'color'), 17 | ...mapStyle(data, 'borderThickness', 'borders', 'thickness'), 18 | ...map(data, 'symbolId'), 19 | }; 20 | }; 21 | 22 | function map(data, key, dataKey) { 23 | try { 24 | return { 25 | [key]: data[dataKey || key], 26 | }; 27 | } catch (e) {} 28 | } 29 | 30 | function mapFrame(data, key) { 31 | try { 32 | return { 33 | [key]: data.frame[key], 34 | }; 35 | } catch (e) {} 36 | } 37 | 38 | function mapStyle(data, key, type, dataKey) { 39 | try { 40 | return { 41 | [key]: data.style[type][0][dataKey], 42 | }; 43 | } catch (e) {} 44 | } 45 | -------------------------------------------------------------------------------- /public/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/public/banner.png -------------------------------------------------------------------------------- /public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canisminor1990/sketch-select/7d00f48db0f235b48670e4b575a2db3379507c94/public/icon.png -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import sketch from 'sketch/dom'; 2 | import UI from 'sketch/ui'; 3 | import WebUI from 'sketch-module-web-view'; 4 | import { mapLayers, selectLayers, hex2NSColor, openURL } from './utils'; 5 | 6 | const isDev = process.env.NODE_ENV === 'development'; 7 | const Panel = isDev ? 'http://localhost:8000' : 'index.html'; 8 | 9 | export default context => { 10 | const document = sketch.getSelectedDocument(); 11 | const panelID = 'sketch-select.panel'; 12 | 13 | const panelUI = new WebUI(context, Panel, { 14 | identifier: panelID, 15 | x: 0, 16 | y: 0, 17 | width: 340, 18 | height: 624, 19 | title: 'Sketch Select', 20 | onlyShowCloseButton: true, 21 | background: hex2NSColor('32d1ff'), 22 | hideTitleBar: false, 23 | shouldKeepAround: true, 24 | resizable: false, 25 | handlers: { 26 | select: callback => { 27 | const config = JSON.parse(callback); 28 | let Target; 29 | console.log(config); 30 | if (config.global) { 31 | Target = document.selectedPage; 32 | } else { 33 | Target = document.selectedLayers.layers[0]; 34 | Target = searchArtboard(Target); 35 | if (!Target) return UI.alert('🖱 Select', `Select target-artboard first ~`); 36 | } 37 | const AllLayers = mapLayers(Target, config); 38 | if (AllLayers.length > 0) { 39 | document.selectedLayers.clear(); 40 | selectLayers(AllLayers); 41 | UI.message(`🖱 Selected ${AllLayers.length} Layers!`); 42 | } else { 43 | UI.alert('🖱 Select', `Nothing to select ...`); 44 | } 45 | }, 46 | getSelection() { 47 | const selection = document.selectedLayers.layers[0]; 48 | const data = JSON.stringify(selection); 49 | UI.message(`🖱 Select: ${selection.name} (${selection.type})`); 50 | console.log(data); 51 | panelUI.eval(`getSelection(${data})`); 52 | }, 53 | openWeb: url => openURL(url), 54 | }, 55 | }); 56 | }; 57 | function searchArtboard(target) { 58 | if (!target) return false; 59 | if (target.type === 'Artboard') return target; 60 | if (target.parent) return searchArtboard(target.parent); 61 | return false; 62 | } 63 | -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Sketch Select", 3 | "identifier": "cm.sketch.select", 4 | "compatibleVersion": 3, 5 | "bundleVersion": 1, 6 | "icon": "icon.png", 7 | "commands": [{ 8 | "name": "🖱 Select", 9 | "script": "index.js", 10 | "identifier": "sketch-select", 11 | "shortcut": "command shift f" 12 | }], 13 | "menu": { 14 | "title": "Select", 15 | "isRoot": true, 16 | "items": [ 17 | "sketch-select" 18 | ] 19 | } 20 | } -------------------------------------------------------------------------------- /src/utils/hex2NSColor.js: -------------------------------------------------------------------------------- 1 | export default hex => { 2 | const r = parseInt(hex.substring(0, 2), 16) / 255; 3 | const g = parseInt(hex.substring(2, 4), 16) / 255; 4 | const b = parseInt(hex.substring(4, 6), 16) / 255; 5 | const a = 1; 6 | return NSColor.colorWithRed_green_blue_alpha(r, g, b, a); 7 | }; 8 | -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | export { default as mapLayers } from './mapLayers'; 2 | export { default as selectLayers } from './selectLayers'; 3 | export { default as hex2NSColor } from './hex2NSColor'; 4 | export { default as openURL } from './openURL'; 5 | -------------------------------------------------------------------------------- /src/utils/mapLayers.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | export default (page, opt = {}) => { 4 | const configs = _.assign( 5 | { 6 | Artboard: false, 7 | Page: false, 8 | Group: false, 9 | Text: false, 10 | Shape: false, 11 | Image: false, 12 | SymbolInstance: false, 13 | SymbolMaster: false, 14 | SymbolOverride: false, 15 | }, 16 | opt.types 17 | ); 18 | const All = []; 19 | const Layers = []; 20 | let Filter = []; 21 | const mapLayers = layers => { 22 | _.forEach(layers, layer => { 23 | All.push(layer); 24 | if (!layer.layers) { 25 | Layers.push(layer); 26 | } else { 27 | mapLayers(layer.layers); 28 | } 29 | }); 30 | }; 31 | 32 | mapLayers(page.layers); 33 | 34 | /* 35 | const Props = { 36 | Name: ['name', 'id'], 37 | Rect: ['x', 'y', 'width', 'height'], 38 | Prototyping: ['text', 'alignment', 'lineSpacing', 'fixedWidth'], 39 | Style: ['fillColor', 'fillType', 'borderColor', 'borderThickness'], 40 | Symbol: ['symbolId'], 41 | }; 42 | */ 43 | 44 | _.forEach(All, layer => { 45 | let save = true; 46 | if (!configs[layer.type]) save = false; 47 | 48 | if (save && opt.config.Name) { 49 | _.forEach(opt.config.Name, (value, key) => { 50 | if (layer[key] !== value) save = false; 51 | }); 52 | } 53 | 54 | if (save && opt.config.Rect) { 55 | _.forEach(opt.config.Rect, (value, key) => { 56 | if (layer.frame[key] !== value) save = false; 57 | }); 58 | } 59 | 60 | if (save && opt.config.Symbol) { 61 | _.forEach(opt.config.Symbol, (value, key) => { 62 | if (layer[key] !== value) save = false; 63 | }); 64 | } 65 | 66 | if (save && opt.config.Prototyping) { 67 | _.forEach(opt.config.Prototyping, (value, key) => { 68 | if (key === 'text') { 69 | if (opt.config.Prototyping.textReg) { 70 | const reg = new RegExp(value); 71 | if (!reg.test(layer.text)) save = false; 72 | } else { 73 | if (layer.text !== value) save = false; 74 | } 75 | } else { 76 | if (layer[key] && layer[key] !== value) save = false; 77 | } 78 | }); 79 | } 80 | 81 | if (save && opt.config.Style) { 82 | const Style = opt.config.Style; 83 | const fill = layer.style.fills[0]; 84 | const border = layer.style.borders[0]; 85 | if (save && Style.fillColor) { 86 | if (!fill) save = false; 87 | if (save && fill.color !== Style.fillColor) save = false; 88 | } 89 | if (save && Style.fillType) { 90 | if (!fill) save = false; 91 | if (save && fill.fill !== Style.fillType) save = false; 92 | } 93 | if (save && Style.borderColor) { 94 | if (!border) save = false; 95 | if (save && border.color !== Style.borderColor) save = false; 96 | } 97 | if (save && Style.borderThickness) { 98 | if (!border) save = false; 99 | if (save && border.thickness !== Style.borderThickness) save = false; 100 | } 101 | } 102 | 103 | if (save) Filter.push(layer); 104 | }); 105 | 106 | console.log('Filter', JSON.stringify(Filter)); 107 | 108 | return Filter; 109 | }; 110 | -------------------------------------------------------------------------------- /src/utils/openURL.js: -------------------------------------------------------------------------------- 1 | export default url => NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(url)); 2 | -------------------------------------------------------------------------------- /src/utils/selectLayers.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | export default layers => { 4 | try { 5 | _.forEach(layers, layer => (layer.selected = true)); 6 | } catch (e) { 7 | console.log(e); 8 | } 9 | }; 10 | --------------------------------------------------------------------------------