[
  {
    "path": ".babelrc",
    "content": "{\n  \"env\": {\n    \"normal\": {\n      \"presets\": [\n        \"env\",\n        \"stage-2\"\n      ],\n      \"plugins\": [\n        \"transform-vue-jsx\"\n      ],\n      \"comments\": false\n    },\n    \"production\": {\n      \"presets\": [\n        \"env\",\n        \"stage-2\"\n      ],\n      \"plugins\": [\n        \"transform-vue-jsx\"\n      ],\n      \"comments\": false\n    },\n    \"test\": {\n      \"presets\": [\"env\", \"stage-2\"],\n      \"plugins\": [ \"istanbul\", \"transform-runtime\", \"transform-vue-jsx\"]\n    },\n    \"es5\": {\n      \"presets\": [\n        [\n          \"env\",\n          {\n            \"modules\": false\n          }\n        ],\n        \"stage-2\"\n      ],\n      \"plugins\": [\n        \"transform-vue-jsx\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".eslintignore",
    "content": ""
  },
  {
    "path": ".eslintrc",
    "content": "{\n  root: true,\n  parser: \"babel-eslint\",\n  parserOptions: {\n    ecmaVersion: 7,\n    sourceType: \"module\",\n    allowImportExportEverywhere: false,\n    ecmaFeatures: {\n      jsx: true,\n      modules: true\n    }\n  },\n  env: {\n    es6: true,\n    node: true,\n    browser: true\n  },\n  extends: \"vue\",\n  globals: {\n    expect: true,\n    describe: true,\n    it: true,\n    jest: true\n  },\n  rules: {\n    quotes: [2, \"single\", { \"allowTemplateLiterals\": true }],\n    linebreak-style: [2, \"unix\"],\n    semi: [2, \"always\"],\n    eqeqeq: [2, \"always\"],\n    strict: [2, \"global\"],\n    key-spacing: [2, { \"afterColon\": true }]\n  }\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.html linguist-language=Vue\n*.js linguist-language=Vue\n"
  },
  {
    "path": ".gitignore",
    "content": "# Created by .ignore support plugin (hsz.mobi)\n### Node template\n# Logs\nlogs\n*.log\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules\njspm_packages\n\n# Optional npm cache directory\n.npm\n\n# Optional REPL history\n.node_repl_history\n\n/lib\n/es5\n.idea\ndist\n.DS_Store\n.cache\nconverage\n.vscode\nreports\n.cache\n"
  },
  {
    "path": ".postcssrc.js",
    "content": "module.exports = {\n  plugins: [\n    require('autoprefixer')({\n      browsers: [\n        '> 1%',\n        'last 5 versions',\n        'ios >= 7',\n        'android > 4.4',\n        'not ie < 10'\n      ]\n    }),\n    require('cssnano')({\n      safe: true\n    })\n  ]\n};\n"
  },
  {
    "path": ".travis.yml",
    "content": "---\nlanguage: node_js\nnode_js:\n  - \"8.11.2\"\n\nbefore_script:\n  - yarn global add codecov\n\nscript:\n  - yarn\n  - yarn run lint\n  - yarn run test:coverage && codecov\n  - yarn run build\n\ncache:\n  yarn: true\n"
  },
  {
    "path": "README.md",
    "content": "\n<p align=\"center\">\n  <a href=\"https://muse-ui.org\" target=\"_blank\">\n    <img width=\"120\" src=\"./demo/icon_logo.png\">\n  </a>\n</p>\n\n<h1 align=\"center\">Muse-UI [不再维护]</h1>\n\n<p align=\"center\">\n  <a href=\"https://material.io/\">Material Design</a>\n  UI library for <a href=\"https://vuejs.org/\">Vuejs 2.0</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.org/museui/muse-ui\">\n    <img src=\"https://img.shields.io/travis/museui/muse-ui.svg\" alt=\"travis ci badge\">\n  </a>\n  <a href=\"https://www.npmjs.org/package/muse-ui\">\n    <img src=\"https://img.shields.io/npm/v/muse-ui.svg\" alt=\"Downloads\">\n  </a>\n  <a href=\"https://npmjs.org/package/muse-ui\">\n    <img src=\"https://img.shields.io/npm/dm/muse-ui.svg\" alt=\"Downloads\">\n  </a>\n  <a href=\"https://gitter.im/muse-ui/muse-ui?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\">\n    <img src=\"https://badges.gitter.im/muse-ui/muse-ui.svg\" alt=\"Downloads\">\n  </a>\n</p>\n\n## Installation\n\nMuse-UI is available as an [npm package](https://www.npmjs.com/package/muse-ui)\n\n```bash\nnpm install muse-ui -S\nyarn add muse-ui\n```\n\n## Usage\n\n```javascript\nimport Vue from 'vue'\nimport MuseUI from 'muse-ui'\nimport 'muse-ui/dist/muse-ui.css'\nVue.use(MuseUI)\n```\n\nFor more information, please refer to [Usage](https://muse-ui.org/#/zh-CN/usage) in our documentation.\n\n## Browser Support\n\nModern browsers and Internet Explorer 10+.\n\n## Contributing\n\nPlease make sure to read the contributing guide ([中文](https://muse-ui.org/#/zh-CN/contributing) | [English](https://muse-ui.org/#/en-US/contributing)) before making a pull request.\n\n## Changelog\n\nDetailed changes for each release are documented in the [release notes](https://muse-ui.org/#/zh-CN/changelog).\n\n## Licence\n\nmuse-ui is open source and released under the MIT Licence.\n\nCopyright (c) 2016 myron\n"
  },
  {
    "path": "commitlint.config.js",
    "content": "module.exports = {\n  extends: ['@commitlint/config-conventional'],\n  rules: {\n    'subject-case': [0]\n  }\n};\n"
  },
  {
    "path": "demo/App.vue",
    "content": "<template>\n<div style=\"padding: 32px;\">\n  <mu-date-input type=\"dateTime\">\n    <template slot=\"day\" slot-scope=\"{ selected, date, disabled, now}\">\n      <div class=\"mu-day-button-bg\"></div>\n      <div class=\"mu-day-button-content\">\n        <span class=\"mu-day-button-text\">{{date.getDate()}}日</span>\n        <span class=\"day-dot\" v-if=\"date.getDate() % 3 === 0\"></span>\n      </div>\n    </template>\n  </mu-date-input>\n\n  <br/>\n  <mu-button @click=\"handleClick\">\n    CLICK\n  </mu-button>\n  <bug-popup />\n\n\n  <mu-text-field ref=\"textField\" v-model=\"value1\" multi-line :rows=\"4\" icon=\"comment\"  placeholder=\"输入信息\"/>\n  <mu-button @click=\"handelFocusTextField\">\n    FOCUS\n  </mu-button>\n</div>\n</template>\n<script>\nimport BugPopup from \"./bug-popup\";\nimport BugDateInput from \"./bug-date-input\";\nexport default {\n  data() {\n    return {\n      page: 3,\n      open: false,\n      alert: true,\n      checkbox1: [],\n      selects: [],\n      slider: 10,\n      checkbox2: true,\n      switch1: true,\n      radio1: \"\",\n      ripple: \"click ripple\",\n      date: new Date(),\n      time: new Date(),\n      value: undefined,\n      value1:\n        \"I farI fare well without computere well without I fare well without computercomputerI fare well without computer.\\r\\n没电脑我也过得很好。\\r\\nHow did you fare?\\r\\n你过得怎样?\\r\\nA single fare is 170 dollars.\\r\\n单程票价为170美元。\",\n      alertMsg: \"every thing is disabled\",\n      columns: [\n        {\n          name: \"xxx1\",\n          title: \"嘻嘻嘻1\",\n          width: 300,\n          sortable: true\n        },\n        {\n          name: \"xxx2\",\n          title: \"嘻嘻嘻2\",\n          align: \"center\",\n          width: 300,\n          sortable: true\n        },\n        {\n          name: \"xxx3\",\n          title: \"嘻嘻嘻3\",\n          width: 300,\n          sortable: true\n        },\n        {\n          name: \"xxx4\",\n          title: \"嘻嘻嘻4\",\n          width: 300,\n          sortable: true\n        },\n        {\n          name: \"xxx5\",\n          title: \"嘻嘻嘻5\",\n          width: 300,\n          sortable: true\n        },\n        {\n          name: \"xxx6\",\n          title: \"嘻嘻嘻6\",\n          width: 300,\n          sortable: true\n        }\n      ],\n      list: [\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        },\n        {\n          xxx1: \"啊哈哈哈哈哈哈\",\n          xxx2: 10,\n          xxx3: 11,\n          xxx4: 12,\n          xxx5: 24,\n          xxx6: 26\n        }\n      ],\n      selects: [],\n      sort: {\n        name: \"xxx1\",\n        order: \"asc\"\n      },\n      loading: true\n    };\n  },\n  created() {\n    setTimeout(() => (this.loading = false), 2000);\n  },\n  methods: {\n    handleClick() {\n      console.log(\"click\");\n    },\n    closeAlert() {\n      this.alert = false;\n    },\n    handelFocusTextField() {\n      // console.log(this.$refs.textField);\n      this.$refs.textField.focus();\n    }\n  },\n  components: {\n    BugPopup,\n    BugDateInput\n  }\n};\n</script>\n<style>\n.demo-ripple {\n  width: 300px;\n  height: 300px;\n  background-color: aqua;\n  position: relative;\n}\n.mu-day-button-content {\n  display: flex;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n}\n.day-dot {\n  width: 8px;\n  height: 8px;\n  border-radius: 100%;\n  background-color: #009688;\n  position: absolute;\n  bottom: 2px;\n  left: 50%;\n  margin-left: -4px;\n}\n</style>\n"
  },
  {
    "path": "demo/bug-date-input.vue",
    "content": "<template>\n<mu-container>\n  <mu-form ref=\"form\" :model=\"validateForm\" class=\"mu-demo-form\">\n    <mu-form-item label=\"日期\" help-text=\"帮助文字\" prop=\"username\" :rules=\"usernameRules\">\n      <mu-date-input v-model=\"validateForm.username\" prop=\"username\"></mu-date-input>\n    </mu-form-item>\n    <mu-form-item label=\"密码\" prop=\"password\" :rules=\"passwordRules\">\n        <mu-text-field type=\"password\" v-model=\"validateForm.password\" prop=\"password\"></mu-text-field>\n    </mu-form-item>\n    <mu-form-item prop=\"isAgree\" :rules=\"argeeRules\">\n      <mu-checkbox label=\"同意用户协议\" v-model=\"validateForm.isAgree\"></mu-checkbox>\n    </mu-form-item>\n    <mu-form-item>\n      <mu-button color=\"primary\" @click=\"submit\">提交</mu-button>\n      <mu-button @click=\"clear\">重置</mu-button>\n    </mu-form-item>\n  </mu-form>\n</mu-container>\n</template>\n<script>\nexport default {\n  data () {\n    return {\n      usernameRules: [\n        { validate: (val) => !!val, message: '必须填写日期'}\n      ],\n      passwordRules: [\n        { validate: (val) => !!val, message: '必须填写密码'},\n        { validate: (val) => val.length >= 3 && val.length <= 10, message: '密码长度大于3小于10'}\n      ],\n      argeeRules: [{ validate: (val) => !!val, message: '必须同意用户协议'}],\n      validateForm: {\n        username: '',\n        password: '',\n        isAgree: false\n      }\n    }\n  },\n  methods: {\n    submit () {\n      this.$refs.form.validate().then((result) => {\n        console.log('form valid: ', result)\n      });\n    },\n    clear () {\n      this.$refs.form.clear();\n      this.validateForm = {\n        username: '',\n        password: '',\n        isAgree: false\n      };\n    }\n  }\n}\n</script>\n<style>\n.mu-demo-form {\n  width: 100%;\n  max-width: 460px;\n}\n</style>\n"
  },
  {
    "path": "demo/bug-popup.vue",
    "content": "<template>\n<div>\n  <mu-container>\n    <mu-flex justify-content=\"center\" align-items=\"center\">\n      <mu-button @click=\"open=true\">OPEN Bottom Sheet</mu-button>\n    </mu-flex>\n      <!-- <mu-bottom-sheet :open.sync=\"open\">\n          <mu-list @item-click=\"openScroll=true\">\n            <mu-sub-header>Select One</mu-sub-header>\n            <mu-list-item button>\n              <mu-list-item-action>\n                <mu-icon value=\"grade\" color=\"orange\"></mu-icon>\n              </mu-list-item-action>\n              <mu-list-item-title>Star</mu-list-item-title>\n            </mu-list-item>\n          </mu-list>\n        </mu-bottom-sheet> -->\n          <mu-dialog title=\"Phone Ringtone\" width=\"360\" :open.sync=\"open\">\n      this is simple Dialog\n          <mu-button slot=\"actions\" flat color=\"primary\" @click=\"opensnakbar\">ok</mu-button>\n        </mu-dialog>\n        </mu-container>\n        <mu-snackbar color=\"error\" :open.sync=\"opens\" position=\"top\">\n                  <mu-icon left :value=\"icon\"></mu-icon>\n                  err\n                  <mu-button flat slot=\"action\" color=\"#fff\" @click=\"opens=false\">Close</mu-button>\n              </mu-snackbar>\n      </div>\n</template>\n<script>\nexport default {\n  data () {\n    return {\n      opens: false,\n      open: false,\n      timer: null,\n      openScroll: false\n    }\n  },\n  methods: {\n\t\topensnakbar () {\n      this.openScroll = false\n      if (this.timer) clearTimeout(this.timer)\n      this.opens = true\n      this.timer = setTimeout(() => {\n        this.opens = false\n      }, 1000)\n    }\n  }\n}\n</script>\n"
  },
  {
    "path": "demo/components/Sidebar.js",
    "content": "export default {\n\n};\n"
  },
  {
    "path": "demo/index.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n        <!-- ignore user setting for uc browser -->\n        <meta name=\"layoutmode\" content=\"standard\"/>\n        <meta name=\"renderer\" content=\"webkit\">\n        <meta name=\"force-rendering\" content=\"webkit\">\n        <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic\">\n        <link rel=\"stylesheet\" href=\"https://cdn.bootcss.com/material-design-icons/3.0.1/iconfont/material-icons.css\">\n        <title>MuseUI DEV</title>\n    </head>\n    <body>\n        <div id=\"app\"></div>\n        <script src=\"./main.js\"></script>\n    </body>\n</html>\n\n"
  },
  {
    "path": "demo/main.js",
    "content": "import Vue from 'vue';\nimport MuseUI from '../src';\nimport App from './App';\nVue.use(MuseUI);\n\nconst app = new Vue({\n  ...App\n});\n\napp.$mount('#app');\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  verbose: false,\n  testURL: 'http://localhost/',\n  roots: [\n    '<rootDir>/src'\n  ],\n  moduleFileExtensions: [\n    'js',\n    'vue'\n  ],\n  moduleDirectories: [\n    'node_modules'\n  ],\n  transform: {\n    '.*\\\\.(vue)$': '<rootDir>/node_modules/vue-jest',\n    '\\\\.(less)$': '<rootDir>/node_modules/jest-css-modules',\n    '\\\\.(css)$': '<rootDir>/node_modules/jest-css-modules',\n    '.*\\\\.(vue|js)$': '<rootDir>/node_modules/babel-jest'\n  },\n  transformIgnorePatterns: [\n    'node_modules/(?!vue-router)'\n  ],\n  snapshotSerializers: [\n    'jest-serializer-html'\n  ]\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"muse-ui\",\n  \"version\": \"3.0.2\",\n  \"description\": \"material design ui for vue2\",\n  \"author\": \"myronliu347 <myronliu347@gmail.com>\",\n  \"repository\": \"https://github.com/museui/muse-ui.git\",\n  \"main\": \"dist/muse-ui.common.js\",\n  \"module\": \"dist/muse-ui.esm.js\",\n  \"unpkg\": \"dist/muse-ui.js\",\n  \"jsdelivr\": \"dist/muse-ui.js\",\n  \"typings\": \"types/index.d.ts\",\n  \"files\": [\n    \"dist\",\n    \"lib\",\n    \"es5\",\n    \"src\",\n    \"types\"\n  ],\n  \"scripts\": {\n    \"dev\": \"NODE_ENV=normal parcel demo/index.html\",\n    \"build\": \"npm run build:dist && npm run build:lib && npm run build:es5\",\n    \"build:dist\": \"rimraf dist && rollup --config rollup.config.js\",\n    \"build:lib\": \"rimraf lib && NODE_ENV=normal babel src -d lib --ignore *.spec.js && mkdir lib/styles && cp -rf src/styles/* lib/styles\",\n    \"build:es5\": \"rimraf es5 && NODE_ENV=es5 babel src -d es5 --ignore *.spec.js && mkdir es5/styles && cp -rf src/styles/* es5/styles\",\n    \"lint\": \"NODE_ENV=normal eslint --ext .js,.vue src\",\n    \"test\": \"NODE_ENV=test jest -i\",\n    \"test:coverage\": \"NODE_ENV=test jest -i --coverage\",\n    \"prepush\": \"yarn run lint\",\n    \"commit\": \"npx git-cz\",\n    \"commitmsg\": \"commitlint -E GIT_PARAMS\"\n  },\n  \"peerDependencies\": {\n    \"vue\": \"^2.5.0\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^7.0.0\",\n    \"@commitlint/config-conventional\": \"^7.0.1\",\n    \"autoprefixer\": \"^8.0.0\",\n    \"avoriaz\": \"^6.3.0\",\n    \"babel-cli\": \"^6.26.0\",\n    \"babel-core\": \"^6.26.0\",\n    \"babel-eslint\": \"^8.2.2\",\n    \"babel-helper-vue-jsx-merge-props\": \"^2.0.3\",\n    \"babel-jest\": \"^22.4.3\",\n    \"babel-plugin-syntax-jsx\": \"^6.18.0\",\n    \"babel-plugin-transform-runtime\": \"^6.23.0\",\n    \"babel-plugin-transform-vue-jsx\": \"^3.5.1\",\n    \"babel-preset-env\": \"^1.6.1\",\n    \"babel-preset-es2015-rollup\": \"^3.0.0\",\n    \"babel-preset-stage-2\": \"^6.24.1\",\n    \"cssnano\": \"^3.10.0\",\n    \"eslint\": \"^4.18.1\",\n    \"eslint-config-vue\": \"^2.0.2\",\n    \"eslint-plugin-vue\": \"^4.3.0\",\n    \"husky\": \"^0.14.3\",\n    \"jest\": \"^22.4.3\",\n    \"jest-cli\": \"^22.4.3\",\n    \"jest-css-modules\": \"^1.1.0\",\n    \"jest-serializer-html\": \"^5.0.0\",\n    \"less\": \"^3.0.1\",\n    \"parcel-bundler\": \"^1.9.7\",\n    \"parcel-plugin-vue\": \"^1.5.0\",\n    \"postcss-import\": \"^11.0.0\",\n    \"postcss-modules\": \"^1.1.0\",\n    \"postcss-url\": \"^7.2.1\",\n    \"rimraf\": \"^2.6.0\",\n    \"rollup\": \"^0.57.1\",\n    \"rollup-plugin-babel\": \"^3.0.3\",\n    \"rollup-plugin-commonjs\": \"^9.1.0\",\n    \"rollup-plugin-node-resolve\": \"^3.3.0\",\n    \"rollup-plugin-postcss\": \"^1.4.0\",\n    \"rollup-plugin-replace\": \"^2.0.0\",\n    \"rollup-plugin-uglify\": \"^3.0.0\",\n    \"typeface-roboto\": \"^0.0.54\",\n    \"vue\": \"^2.5.13\",\n    \"vue-jest\": \"^2.3.0\",\n    \"vue-router\": \"^3.0.1\",\n    \"vue-template-compiler\": \"^2.5.13\"\n  },\n  \"dependencies\": {\n    \"body-scroll-lock\": \"^2.6.1\",\n    \"dayjs\": \"^1.8.2\",\n    \"keycode\": \"^2.1.9\",\n    \"normalize-wheel\": \"^1.0.1\",\n    \"resize-observer-polyfill\": \"^1.5.0\"\n  }\n}\n"
  },
  {
    "path": "rollup.config.js",
    "content": "import babel from 'rollup-plugin-babel';\nimport resolve from 'rollup-plugin-node-resolve';\nimport commonjs from 'rollup-plugin-commonjs';\nimport uglify from 'rollup-plugin-uglify';\nimport postcss from 'rollup-plugin-postcss';\nimport replace from 'rollup-plugin-replace';\nimport packageJson from './package.json';\n\nconst { name, version } = packageJson;\nconst banner = `/* ${name} myron.liu version ${version} */`;\nconst plugins = [\n  postcss({ extensions: ['.less'], extract: `dist/${name}.css` }),\n  resolve({ jsnext: true, main: true, browser: true }),\n  commonjs({\n    include: 'node_modules/**',\n    namedExports: {\n      'node_modules/body-scroll-lock/lib/bodyScrollLock.min.js': ['disableBodyScroll', 'enableBodyScroll', 'clearAllBodyScrollLocks']\n    }\n  }),\n  babel({\n    babelrc: false,\n    include: 'src/**/*.js',\n    runtimeHelpers: true,\n    presets: [\n      [\n        'env',\n        {\n          modules: false\n        }\n      ],\n      'stage-2',\n      'es2015-rollup'\n    ]\n  }),\n  replace({\n    __VERSION__: version\n  })\n];\n\nexport default [{\n  input: 'src/index.js',\n  output: [{\n    banner,\n    file: `dist/${name}.common.js`,\n    format: 'cjs'\n  }, {\n    banner,\n    file: `dist/${name}.esm.js`,\n    format: 'es'\n  }],\n  plugins: plugins,\n  external: ['vue']\n}, {\n  input: 'src/index.js',\n  output: {\n    file: `dist/${name}.js`,\n    format: 'umd',\n    name: 'MuseUI',\n    globals: {\n      vue: 'Vue'\n    }\n  },\n  plugins: [\n    ...plugins,\n    uglify()\n  ],\n  external: ['vue']\n}];\n"
  },
  {
    "path": "src/Alert/Alert.js",
    "content": "import color from '../internal/mixins/color';\nimport Button from '../Button';\n\nexport default {\n  name: 'mu-alert',\n  mixins: [color],\n  props: {\n    delete: Boolean,\n    transition: String,\n    mode: String\n  },\n  methods: {\n    handleDelete (e) {\n      e.stopPropagation();\n      this.$emit('delete');\n    }\n  },\n  render (h) {\n    const deleteIcon = h(Button, {\n      staticClass: 'mu-alert-delete-btn',\n      props: {\n        icon: true\n      },\n      on: {\n        click: this.handleDelete\n      }\n    }, [\n      h('svg', {\n        staticClass: 'mu-alert-delete-icon',\n        attrs: {\n          viewBox: '0 0 24 24'\n        }\n      }, [\n        h('path', {\n          attrs: {\n            d: 'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'\n          }\n        }),\n        h('path', {\n          attrs: {\n            d: 'M0 0h24v24H0z',\n            fill: 'none'\n          }\n        })\n      ])\n    ]);\n    const alert = h('div', {\n      staticClass: `mu-alert ${this.getColorClass()}`,\n      style: {\n        'background-color': this.getColor(this.color)\n      },\n      on: this.$listeners\n    }, [this.$slots.default, this.delete ? deleteIcon : undefined]);\n    return this.transition ? h('transition', {\n      props: {\n        mode: this.mode,\n        name: this.transition\n      }\n    }, [alert]) : alert;\n  }\n};\n"
  },
  {
    "path": "src/Alert/Alert.spec.js",
    "content": "import test from '../utils/testing';\nimport Alert from './Alert';\n\ntest('Alert', ({ mount }) => {\n  it('should be show by default', async () => {\n    const wrapper = mount(Alert, {});\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n  it('should be delete', async () => {\n    const wrapper = mount(Alert, { propsData: { delete: true }});\n    const deleteBtn = wrapper.find('.mu-alert-delete-btn')[0];\n    const handleDelete = jest.fn();\n    wrapper.vm.$on('delete', handleDelete);\n    deleteBtn.trigger('click');\n    expect(handleDelete).toBeCalledWith();\n  });\n  it('should be set color', async () => {\n    const wrapper = mount(Alert, {\n      propsData: {\n        color: 'primary'\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({ color: 'error' });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({ color: '#fff' });\n    expect(wrapper.hasStyle('background-color', '#fff')).toEqual(true);\n  });\n});\n"
  },
  {
    "path": "src/Alert/__snapshots__/Alert.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Alert should be set color 1`] = `\n\n<div class=\"mu-alert mu-primary-color mu-inverse\">\n</div>\n\n`;\n\nexports[`Alert should be set color 2`] = `\n\n<div class=\"mu-alert mu-error-color mu-inverse\">\n</div>\n\n`;\n\nexports[`Alert should be show by default 1`] = `\n\n<div class=\"mu-alert \">\n</div>\n\n`;\n"
  },
  {
    "path": "src/Alert/index.js",
    "content": "import '../styles/components/alert.less';\nimport Alert from './Alert';\n\nAlert.install = function (Vue) {\n  Vue.component(Alert.name, Alert);\n};\n\nexport default Alert;\n"
  },
  {
    "path": "src/AppBar/AppBar.js",
    "content": "import color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-appbar',\n  mixins: [color],\n  props: {\n    zDepth: {\n      type: [Number, String],\n      default: 4,\n      validator: (val) => val >= 0 && val <= 24\n    },\n    title: {\n      type: String,\n      default: ''\n    },\n    textColor: String\n  },\n  render (h) {\n    const slots = this.$slots;\n    const left = slots.left && slots.left.length > 0 ? h('div', { staticClass: 'mu-appbar-left' }, slots.left) : undefined;\n    const right = slots.right && slots.right.length > 0 ? h('div', { staticClass: 'mu-appbar-right' }, slots.right) : undefined;\n    const center = h('div', { staticClass: 'mu-appbar-title' }, slots.default && slots.default.length > 0 ? slots.default : this.title);\n\n    return h('header', {\n      staticClass: `mu-appbar ${this.getColorClass()} ${this.getTextColorClass()} mu-elevation-${this.zDepth}`,\n      style: {\n        'background-color': this.getColor(this.color),\n        color: this.getColor(this.textColor)\n      }\n    }, [left, center, right]);\n  }\n};\n"
  },
  {
    "path": "src/AppBar/AppBar.spec.js",
    "content": "import Vue from 'vue';\nimport * as colors from '../theme/colors';\nimport test from '../utils/testing';\nimport AppBar from './AppBar';\nimport Icon from '../Icon';\ntest('AppBar', ({ mount }) => {\n  it('should be default', async () => {\n    const wrapper = mount(AppBar, {});\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should be set title', async () => {\n    const wrapper = mount(AppBar, {\n      propsData: {\n        title: 'Muse-UI'\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should be slots', async () => {\n    const menuIcon = Vue.component('test', {\n      components: {\n        'mu-icon': Icon\n      },\n      render (h) {\n        return h('mu-icon', {\n          value: 'menu'\n        });\n      }\n    });\n    let wrapper = mount(AppBar, { slots: { left: [menuIcon] }});\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper = mount(AppBar, { slots: { right: [menuIcon] }});\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should be set color and text color', async () => {\n    const wrapper = mount(AppBar, {\n      propsData: {\n        color: 'primary',\n        textColor: 'secondary'\n      }\n    });\n    expect(wrapper.hasClass('mu-primary-color')).toBe(true);\n    expect(wrapper.hasClass('mu-inverse')).toBe(true);\n    expect(wrapper.hasClass('mu-secondary-text-color')).toBe(true);\n    wrapper.setProps({\n      color: 'teal',\n      textColor: 'green'\n    });\n    expect(wrapper.hasStyle('background-color', colors.teal)).toBe(true);\n    expect(wrapper.hasStyle('color', colors.green)).toBe(true);\n    wrapper.setProps({\n      color: '#000',\n      textColor: '#fff'\n    });\n    expect(wrapper.hasStyle('background-color', '#000')).toBe(true);\n    expect(wrapper.hasStyle('color', '#fff')).toBe(true);\n  });\n\n  it('should set zDepth', async () => {\n    const wrapper = mount(AppBar, {});\n    expect(wrapper.hasClass('mu-elevation-4')).toBe(true);\n    wrapper.setProps({\n      zDepth: 1\n    });\n    expect(wrapper.hasClass('mu-elevation-1')).toBe(true);\n  });\n});\n"
  },
  {
    "path": "src/AppBar/__snapshots__/AppBar.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`AppBar should be default 1`] = `\n\n<header class=\"mu-appbar   mu-elevation-4\">\n  <div class=\"mu-appbar-title\">\n  </div>\n</header>\n\n`;\n\nexports[`AppBar should be set title 1`] = `\n\n<header class=\"mu-appbar   mu-elevation-4\">\n  <div class=\"mu-appbar-title\">\n    Muse-UI\n  </div>\n</header>\n\n`;\n\nexports[`AppBar should be slots 1`] = `\n\n<header class=\"mu-appbar   mu-elevation-4\">\n  <div class=\"mu-appbar-left\">\n  </div>\n  <div class=\"mu-appbar-title\">\n  </div>\n</header>\n\n`;\n\nexports[`AppBar should be slots 2`] = `\n\n<header class=\"mu-appbar   mu-elevation-4\">\n  <div class=\"mu-appbar-title\">\n  </div>\n  <div class=\"mu-appbar-right\">\n  </div>\n</header>\n\n`;\n"
  },
  {
    "path": "src/AppBar/index.js",
    "content": "import '../styles/components/elevation.less';\nimport '../styles/components/appbar.less';\nimport theme from '../theme';\nimport AppBarTheme from './theme';\nimport AppBar from './AppBar';\n\nAppBar.install = function (Vue) {\n  Vue.component(AppBar.name, AppBar);\n};\n\ntheme.addCreateTheme(AppBarTheme);\nexport default AppBar;\n"
  },
  {
    "path": "src/AppBar/theme.js",
    "content": "export default (theme, type) => {\n  return `\n    .mu-appbar {\n      background-color: ${type === 'light' ? '#f5f5f5' : '#212121'};\n      color: ${theme.text.primary};\n    }\n  `;\n};\n"
  },
  {
    "path": "src/AutoComplete/AutoComplete.js",
    "content": "import input from '../internal/mixins/input';\nimport clickOutSide from '../internal/directives/click-outside';\nimport Popover from '../Popover';\nimport { List, ListItem } from '../List';\nimport keycode from 'keycode';\nimport caseSensitiveFilter from './filter';\nimport { isPromise } from '../utils';\n\nexport default {\n  name: 'mu-auto-complete',\n  mixins: [input],\n  directives: {\n    'click-outside': clickOutSide\n  },\n  props: {\n    data: {\n      type: Array,\n      default: () => []\n    },\n    maxHeight: {\n      type: [String, Number],\n      default: 300\n    },\n    debounce: {\n      type: Number,\n      default: 200,\n      validator (val) {\n        return val > 0;\n      }\n    },\n    filter: {\n      type: Function,\n      default: caseSensitiveFilter\n    },\n    maxSearchResults: {\n      type: Number,\n      default: 0\n    },\n    openOnFocus: Boolean,\n    dense: {\n      type: Boolean,\n      default: true\n    },\n    textline: List.props.textline,\n    popoverClass: String,\n    placement: {\n      type: String,\n      default: 'bottom-start'\n    },\n    space: Number,\n    avatar: Boolean\n  },\n  data () {\n    return {\n      open: false,\n      enableData: [],\n      focusIndex: -1\n    };\n  },\n  methods: {\n    setValue (value, item, e) {\n      this.open = false;\n      this.focusIndex = -1;\n      if (!item) return;\n      this.$emit('input', value, e);\n      this.$emit('select', value, item, e);\n      this.$emit('change', value, e);\n    },\n    onKeydown (e) {\n      if (this.disabled || this.$attrs.readonly) return;\n      const code = keycode(e);\n      const maxIndex = this.enableData.length - 1;\n      const minIndex = 0;\n      switch (code) {\n        case 'enter':\n          if (this.focusIndex === -1) return;\n          const { value, item } = this.enableData[this.focusIndex];\n          this.setValue(value, item, e);\n          break;\n        case 'up':\n          event.preventDefault();\n          if (!this.open) return;\n          this.focusIndex--;\n          if (this.focusIndex < minIndex) this.focusIndex = maxIndex;\n          break;\n        case 'down':\n          event.preventDefault();\n          if (!this.open) return;\n          this.focusIndex++;\n          if (this.focusIndex > maxIndex) this.focusIndex = minIndex;\n          break;\n        case 'tab':\n          this.blur(e);\n          break;\n        default:\n          this.focusIndex = -1;\n          break;\n      }\n      this.$emit('keydown', e);\n    },\n    onInput (e) {\n      const value = e.target.value;\n      if (this.timer) clearTimeout(this.timer);\n      this.timer = setTimeout(() => {\n        this.filterData(value);\n      }, this.debounce);\n      this.$emit('input', value, e);\n    },\n    focus (e) {\n      this.isFocused = true;\n      if (this.openOnFocus) this.filterData(this.value);\n      this.$emit('focus', e);\n    },\n    filterData (val) {\n      this.open = true;\n      const results = this.filter(val, this.data, this.maxSearchResults);\n      switch (true) {\n        case Array.isArray(results):\n          this.enableData = results;\n          return;\n        case isPromise(results):\n          results.then((results) => {\n            this.enableData = Array.isArray(results) ? results : [];\n          });\n          return;\n      }\n      this.enableData = [];\n    },\n    blur (e) {\n      this.isFocused = false;\n      this.focusIndex = -1;\n      this.open = false;\n      this.$emit('blur', e);\n    },\n    setScollPosition (index) {\n      if (!this.open) return;\n      this.$nextTick(() => {\n        const popoverEl = this.$refs.list.$el;\n        const optionEl = popoverEl.querySelector('.is-focused');\n        if (!optionEl) return;\n        const optionHeight = optionEl.offsetHeight;\n        let scrollTop = optionEl.offsetTop - optionHeight;\n        if (scrollTop < optionHeight) scrollTop = 0;\n        popoverEl.scrollTop = scrollTop;\n      });\n    },\n    createTextField (h) {\n      const listeners = {\n        ...this.$listeners,\n        input: this.onInput,\n        change: (e) => this.$emit('change', e.target.value, e),\n        keydown: this.onKeydown,\n        focus: this.focus\n      };\n      const placeholder = !this.labelFloat ? this.$attrs.placeholder : '';\n      return [\n        h('input', {\n          staticClass: 'mu-text-field-input',\n          ref: 'input',\n          attrs: {\n            tabindex: 0,\n            ...this.$attrs,\n            disabled: this.disabled,\n            placeholder\n          },\n          domProps: {\n            value: this.value\n          },\n          on: listeners\n        })\n      ];\n    },\n    createContentList (h) {\n      return h(List, {\n        staticClass: 'mu-option-list',\n        ref: 'list',\n        props: {\n          dense: this.dense,\n          textline: this.textline\n        },\n        style: {\n          'maxHeight': this.maxHeight + 'px'\n        }\n      }, this.enableData.map((item, index) => {\n        return h(ListItem, {\n          staticClass: 'mu-option',\n          class: {\n            'is-focused': this.focusIndex === index\n          },\n          props: {\n            button: true,\n            avatar: this.avatar\n          },\n          on: {\n            click: (e) => this.setValue(item.value, item.item, e)\n          }\n        }, this.$scopedSlots.default ? this.$scopedSlots.default({\n          ...item,\n          index\n        }) : [\n          h('span', {\n            domProps: {\n              innerHTML: item.highlight\n            }\n          })\n        ]);\n      }));\n    }\n  },\n  render (h) {\n    const trigger = this.$refs.input;\n    return this.createInput(h, {\n      staticClass: 'mu-text-field',\n      ref: 'content',\n      directives: [{\n        name: 'click-outside',\n        value: (e) => {\n          if (this.$refs.popover.$el.contains(e.target)) return;\n          this.blur(e);\n        }\n      }]\n    }, [\n      this.createTextField(h),\n      this.$slots.default,\n      h(Popover, {\n        staticClass: [this.popoverClass || ''].join(' '),\n        props: {\n          trigger: trigger,\n          placement: this.placement,\n          space: this.space,\n          open: this.open\n        },\n        on: {\n          close: () => (this.open = false)\n        },\n        ref: 'popover',\n        style: {\n          'visibility': this.enableData.length === 0 ? 'hidden' : '',\n          'min-width': trigger ? trigger.offsetWidth + 'px' : ''\n        }\n      }, [\n        this.createContentList(h),\n        this.$slots.popover\n      ])\n    ]);\n  },\n  watch: {\n    focusIndex () {\n      this.setScollPosition();\n    }\n  }\n};\n"
  },
  {
    "path": "src/AutoComplete/AutoComplete.spec.js",
    "content": "import test from '../utils/testing';\nimport AutoComplete from './AutoComplete';\ntest('AutoComplete', ({ mount }) => {\n  const data = [\n    'Apple', 'Apricot', 'Avocado',\n    'Banana', 'Bilberry', 'Blackberry', 'Blackcurrant', 'Blueberry',\n    'Boysenberry', 'Blood Orange',\n    'Cantaloupe', 'Currant', 'Cherry', 'Cherimoya', 'Cloudberry',\n    'Coconut', 'Cranberry', 'Clementine',\n    'Damson', 'Date', 'Dragonfruit', 'Durian',\n    'Elderberry',\n    'Feijoa', 'Fig',\n    'Goji berry', 'Gooseberry', 'Grape', 'Grapefruit', 'Guava',\n    'Honeydew', 'Huckleberry',\n    'Jabouticaba', 'Jackfruit', 'Jambul', 'Jujube', 'Juniper berry',\n    'Kiwi fruit', 'Kumquat',\n    'Lemon', 'Lime', 'Loquat', 'Lychee',\n    'Nectarine',\n    'Mango', 'Marion berry', 'Melon', 'Miracle fruit', 'Mulberry', 'Mandarine',\n    'Olive', 'Orange',\n    'Papaya', 'Passionfruit', 'Peach', 'Pear', 'Persimmon', 'Physalis', 'Plum', 'Pineapple',\n    'Pumpkin', 'Pomegranate', 'Pomelo', 'Purple Mangosteen',\n    'Quince',\n    'Raspberry', 'Raisin', 'Rambutan', 'Redcurrant',\n    'Salal berry', 'Satsuma', 'Star fruit', 'Strawberry', 'Squash', 'Salmonberry',\n    'Tamarillo', 'Tamarind', 'Tomato', 'Tangerine',\n    'Ugli fruit',\n    'Watermelon'\n  ];\n\n  it('should default view', async () => {\n    const wrapper = mount(AutoComplete, {});\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should set maxHeight', async () => {\n    const wrapper = mount(AutoComplete, {\n      propsData: {\n        maxHeight: 600\n      }\n    });\n    expect(wrapper.find('.mu-option-list')[0].hasStyle('max-height', '600px')).toBe(true);\n  });\n\n  it('should has data list', async () => {\n    const wrapper = mount(AutoComplete, {\n      propsData: {\n        data: data\n      }\n    });\n    const input = jest.fn(value => wrapper.setProps({ value }));\n    const event = { target: { value: 'ta' }};\n    wrapper.vm.$on('input', input);\n    wrapper.vm.onInput(event);\n    expect(input).toBeCalledWith('ta', event);\n    return new Promise((reslove) => {\n      setTimeout(() => {\n        expect(wrapper.vm.open).toBe(true);\n        reslove();\n      }, wrapper.vm.debounce);\n    });\n  });\n\n  it('should max search result six and open on focus', async () => {\n    const wrapper = mount(AutoComplete, {\n      propsData: {\n        data: data,\n        openOnFocus: true,\n        maxSearchResults: 6\n      }\n    });\n\n    wrapper.find('input')[0].trigger('focus');\n    expect(wrapper.vm.open).toBe(true);\n    expect(wrapper.vm.enableData.length).toBe(6);\n  });\n});\n"
  },
  {
    "path": "src/AutoComplete/__snapshots__/AutoComplete.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`AutoComplete should default view 1`] = `\n\n<div class=\"mu-input \">\n  <div class=\"mu-text-field mu-input-content\">\n    <input tabindex=\"0\"\n           class=\"mu-text-field-input\"\n    >\n    <div class=\"mu-popover transition-bottom\"\n         style=\"z-index: 20141224; visibility: hidden; display: none;\"\n    >\n      <ul class=\"mu-list mu-option-list mu-list-dense\"\n          style=\"max-height: 300px;\"\n      >\n      </ul>\n    </div>\n    <div>\n      <div class=\"mu-input-line\">\n      </div>\n      <div class=\"mu-input-focus-line \">\n      </div>\n    </div>\n  </div>\n</div>\n\n`;\n"
  },
  {
    "path": "src/AutoComplete/filter.js",
    "content": "export default (query = '', data = [], maxSearchResults = 0) => {\n  const results = [];\n  for (let i = 0; i < data.length; i++) {\n    const value = getValueByItem(data[i]);\n    const index = value.toLowerCase().indexOf(query.toLowerCase());\n    if (index === -1) continue;\n    const before = value.substring(0, index);\n    const highlight = value.substring(index, index + query.length);\n    const after = value.substring(index + query.length);\n    results.push({\n      value,\n      item: data[i],\n      highlight: [\n        before,\n        `<span class=\"mu-secondary-text-color\">${highlight}</span>`,\n        after\n      ].join('')\n    });\n    if (maxSearchResults > 0 && maxSearchResults === results.length) break;\n  }\n  return results;\n};\n\nfunction getValueByItem (item) {\n  if (!item) return '';\n  return typeof item === 'string' ? item : item.value;\n}\n"
  },
  {
    "path": "src/AutoComplete/index.js",
    "content": "import '../styles/components/text-field.less';\nimport '../styles/components/select.less';\nimport AutoComplete from './AutoComplete';\n\nAutoComplete.install = function (Vue) {\n  Vue.component(AutoComplete.name, AutoComplete);\n};\n\nexport default AutoComplete;\n"
  },
  {
    "path": "src/Avatar/Avatar.js",
    "content": "import { getWidth } from '../utils';\nimport color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-avatar',\n  mixins: [color],\n  props: {\n    textColor: String,\n    size: {\n      type: [Number, String],\n      default: 40\n    }\n  },\n  render (h) {\n    const size = getWidth(this.size);\n    return h('div', {\n      staticClass: `mu-avatar ${this.getColorClass()} ${this.getTextColorClass()}`,\n      style: {\n        width: size,\n        height: size,\n        'font-size': this.size / 2 + 'px',\n        'background-color': this.getColor(this.color),\n        'color': this.getColor(this.textColor)\n      },\n      on: this.$listeners\n    }, [h('div', { class: 'mu-avatar-inner' }, this.$slots.default)]);\n  }\n};\n"
  },
  {
    "path": "src/Avatar/Avatar.spec.js",
    "content": "import * as colors from '../theme/colors';\nimport test from '../utils/testing';\nimport Avatar from './Avatar';\n\ntest('Avatar', ({ mount }) => {\n  it('should have an mu-avatar class', () => {\n    const wrapper = mount(Avatar, {});\n    expect(wrapper.hasClass('mu-avatar')).toBe(true);\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should can set color and text-color', () => {\n    const wrapper = mount(Avatar, {\n      propsData: {\n        color: 'primary',\n        textColor: 'secondary'\n      }\n    });\n    expect(wrapper.hasClass('mu-primary-color')).toBe(true);\n    expect(wrapper.hasClass('mu-inverse')).toBe(true);\n    expect(wrapper.hasClass('mu-secondary-text-color')).toBe(true);\n    wrapper.setProps({\n      color: 'teal',\n      textColor: 'green'\n    });\n    expect(wrapper.hasStyle('background-color', colors.teal)).toBe(true);\n    expect(wrapper.hasStyle('color', colors.green)).toBe(true);\n    wrapper.setProps({\n      color: '#000',\n      textColor: '#fff'\n    });\n    expect(wrapper.hasStyle('background-color', '#000')).toBe(true);\n    expect(wrapper.hasStyle('color', '#fff')).toBe(true);\n  });\n\n  it('should be change size', () => {\n    const wrapper = mount(Avatar, {\n      propsData: {\n        size: 56\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n});\n"
  },
  {
    "path": "src/Avatar/__snapshots__/Avatar.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Avatar should be change size 1`] = `\n\n<div class=\"mu-avatar  \"\n     style=\"width: 56px; height: 56px; font-size: 28px;\"\n>\n  <div class=\"mu-avatar-inner\">\n  </div>\n</div>\n\n`;\n\nexports[`Avatar should have an mu-avatar class 1`] = `\n\n<div class=\"mu-avatar  \"\n     style=\"width: 40px; height: 40px; font-size: 20px;\"\n>\n  <div class=\"mu-avatar-inner\">\n  </div>\n</div>\n\n`;\n"
  },
  {
    "path": "src/Avatar/index.js",
    "content": "import '../styles/components/avatar.less';\nimport theme from '../theme';\nimport AvatarTheme from './theme';\nimport Avatar from './Avatar';\n\nAvatar.install = function (Vue) {\n  Vue.component(Avatar.name, Avatar);\n};\n\ntheme.addCreateTheme(AvatarTheme);\nexport default Avatar;\n"
  },
  {
    "path": "src/Avatar/theme.js",
    "content": "export default (theme) => {\n  return `\n    .mu-avatar {\n      background-color: ${theme.track};\n      color: ${theme.text.alternate};\n    }\n  `;\n};\n\n"
  },
  {
    "path": "src/Badge/Badge.js",
    "content": "import { convertClass } from '../utils';\nimport color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-badge',\n  mixins: [color],\n  props: {\n    content: {\n      type: String,\n      default: ''\n    },\n    circle: Boolean,\n    badgeClass: [String, Object, Array]\n  },\n  render (h) {\n    const slots = this.$slots;\n    const isFloat = slots.default && slots.default.length > 0;\n    const badge = h('em', {\n      staticClass: `mu-badge ${convertClass(this.badgeClass).join(' ')} ${this.getColorClass()}`,\n      style: {\n        'background-color': this.getColor(this.color)\n      },\n      class: {\n        'mu-badge-circle': this.circle,\n        'mu-badge-float': isFloat\n      }\n    }, slots.content && slots.content.length > 0 ? slots.content : this.content);\n\n    return h('div', {\n      staticClass: 'mu-badge-container',\n      on: this.$listeners\n    }, [slots.default, badge]);\n  }\n};\n"
  },
  {
    "path": "src/Badge/Badge.spec.js",
    "content": "import test from '../utils/testing';\nimport Badge from './Badge';\nimport * as colors from '../theme/colors';\ntest('Badge', ({ mount }) => {\n  it('should default view', async () => {\n    const wrapper = mount(Badge, {});\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should custom class', async () => {\n    const wrapper = mount(Badge, {\n      propsData: {\n        circle: true\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({\n      badgeClass: 'custom-badge'\n    });\n    expect(wrapper.find('.custom-badge').length).toBe(1);\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should custom color', async () => {\n    const wrapper = mount(Badge, {\n      propsData: {\n        color: 'primary'\n      }\n    });\n    const badge = wrapper.find('.mu-badge')[0];\n    expect(badge.hasClass('mu-primary-color')).toBe(true);\n    expect(badge.hasClass('mu-inverse')).toBe(true);\n    wrapper.setProps({ color: 'teal' });\n    expect(badge.hasStyle('background-color', colors.teal)).toBe(true);\n    wrapper.setProps({ color: '#000' });\n    expect(badge.hasStyle('background-color', '#000')).toBe(true);\n  });\n});\n"
  },
  {
    "path": "src/Badge/__snapshots__/Badge.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Badge should custom class 1`] = `\n\n<div class=\"mu-badge-container\">\n  <em class=\"mu-badge   mu-badge-circle\">\n  </em>\n</div>\n\n`;\n\nexports[`Badge should custom class 2`] = `\n\n<div class=\"mu-badge-container\">\n  <em class=\"mu-badge custom-badge  mu-badge-circle\">\n  </em>\n</div>\n\n`;\n\nexports[`Badge should default view 1`] = `\n\n<div class=\"mu-badge-container\">\n  <em class=\"mu-badge  \">\n  </em>\n</div>\n\n`;\n"
  },
  {
    "path": "src/Badge/index.js",
    "content": "import '../styles/components/badge.less';\nimport theme from '../theme';\nimport BadgeTheme from './theme';\nimport Badge from './Badge';\n\nBadge.install = function (Vue) {\n  Vue.component(Badge.name, Badge);\n};\n\ntheme.addCreateTheme(BadgeTheme);\nexport default Badge;\n"
  },
  {
    "path": "src/Badge/theme.js",
    "content": "export default (theme) => {\n  return `\n    .mu-badge{\n      background-color: ${theme.track};\n      color: ${theme.text.alternate};\n    }\n  `;\n};\n"
  },
  {
    "path": "src/BottomNav/BottomNav.js",
    "content": "import color from '../internal/mixins/color';\nimport AbstractButton from '../internal/AbstractButton';\n\nexport default {\n  name: 'mu-bottom-nav',\n  mixins: [color],\n  provide () {\n    return {\n      getBottomNavValue: this.getBottomNavValue,\n      getBottomNavShift: this.getBottomNavShift,\n      bottomNavItemClick: this.bottomNavItemClick,\n      getDefaultVal: this.getDefaultVal,\n      getActiveColor: this.getActiveColor\n    };\n  },\n  props: {\n    shift: Boolean,\n    value: {}\n  },\n  data () {\n    return {\n      activeValue: this.value || 0\n    };\n  },\n  methods: {\n    getBottomNavValue () {\n      return this.activeValue;\n    },\n    getBottomNavShift () {\n      return this.shift;\n    },\n    getDefaultVal () {\n      if (!this.index) this.index = 0;\n      return this.index++;\n    },\n    getActiveColor () {\n      return {\n        className: this.getNormalColorClass(this.color, true),\n        color: this.getColor(this.color)\n      };\n    },\n    bottomNavItemClick (value) {\n      this.activeValue = value;\n    }\n  },\n  watch: {\n    value (val) {\n      this.activeValue = val;\n    },\n    activeValue (val) {\n      if (val === this.value) return;\n      this.$emit('update:value', val);\n      this.$emit('change', val);\n    }\n  },\n  render (h) {\n    return h(AbstractButton, {\n      class: {\n        'mu-bottom-nav': true,\n        'mu-bottom-nav-shift': this.shift,\n        [this.getColorClass(false)]: this.shift\n      },\n      style: {\n        'background-color': this.shift ? this.getColor(this.color) : ''\n      },\n      props: {\n        ripple: this.shift,\n        wrapperClass: 'mu-bottom-nav-shift-wrapper',\n        containerElement: 'div',\n        rippleOpacity: 0.3\n      }\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/BottomNav/BottomNav.spec.js",
    "content": "import Vue from 'vue';\nimport test from '../utils/testing';\nimport BottomNav from './BottomNav';\nimport BottomNavItem from './BottomNavItem';\ntest('Bottom Navigation', ({ mount }) => {\n  function createNavItem (icon, text, value) {\n    return Vue.component('nav-item', {\n      component: {\n        'mu-bottom-nav-item': BottomNavItem\n      },\n      render (h) {\n        return h('mu-bottom-nav-item', {\n          props: {\n            icon: icon,\n            title: text,\n            value: value\n          }\n        });\n      }\n    });\n  }\n  it('should default view', async () => {\n    const wrapper = mount(BottomNav, {\n      slots: {\n        default: [\n          createNavItem('restore', 'Recents'),\n          createNavItem('favorite', 'Favorites'),\n          createNavItem('location_on', 'Nearby')\n        ]\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should shift mode', async () => {\n    const wrapper = mount(BottomNav, {\n      propsData: {\n        shift: true\n      },\n      slots: {\n        default: [\n          createNavItem('restore', 'Recents'),\n          createNavItem('favorite', 'Favorites'),\n          createNavItem('location_on', 'Nearby')\n        ]\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n  it('should change value', async () => {\n    const wrapper = mount(BottomNav, {\n      propsData: {\n        value: 'Recents'\n      },\n      slots: {\n        default: [\n          createNavItem('restore', 'Recents', 'Recents'),\n          createNavItem('favorite', 'Favorites', 'Favorites'),\n          createNavItem('location_on', 'Nearby', 'Nearby')\n        ]\n      }\n    });\n    expect(wrapper.find('.mu-bottom-item')[0].hasClass('mu-bottom-item-active')).toBe(true);\n    wrapper.setProps({\n      value: 'Nearby'\n    });\n    expect(wrapper.vm.activeValue).toBe('Nearby');\n  });\n});\n"
  },
  {
    "path": "src/BottomNav/BottomNavItem.js",
    "content": "import AbstractButton from '../internal/AbstractButton';\nimport Icon from '../Icon';\nimport route from '../internal/mixins/route';\nimport ripple from '../internal/mixins/ripple';\nimport { isNotNull } from '../utils';\nexport default {\n  name: 'mu-bottom-nav-item',\n  mixins: [route, ripple],\n  inject: [\n    'getBottomNavValue',\n    'getBottomNavShift',\n    'getDefaultVal',\n    'bottomNavItemClick',\n    'getActiveColor'\n  ],\n  props: {\n    icon: String,\n    title: String,\n    value: {}\n  },\n  data () {\n    return {\n      itemVal: null\n    };\n  },\n  created () {\n    this.itemVal = isNotNull(this.value) ? this.value : this.getDefaultVal();\n  },\n  computed: {\n    active () {\n      return this.getBottomNavValue() === this.itemVal;\n    },\n    activeClassName () {\n      return this.getActiveColor().className;\n    },\n    activeColor () {\n      return this.getActiveColor().color;\n    },\n    shift () {\n      return this.getBottomNavShift();\n    }\n  },\n  methods: {\n    handleClick () {\n      this.bottomNavItemClick(this.itemVal);\n    }\n  },\n  watch: {\n    value (val) {\n      this.itemVal = val;\n    }\n  },\n  render (h) {\n    const icon = this.icon ? h(Icon, { class: 'mu-bottom-item-icon', props: { value: this.icon }}) : undefined;\n    const title = this.title ? h('span', { staticClass: 'mu-bottom-item-text' }, this.title) : undefined;\n    return h(AbstractButton, {\n      staticClass: 'mu-bottom-item',\n      class: {\n        'mu-bottom-item-active': this.active,\n        'is-shift': this.active && this.shift,\n        [this.activeClassName]: !this.shift && this.active\n      },\n      style: {\n        color: !this.shift && this.active ? this.activeColor : ''\n      },\n      props: {\n        ripple: !this.shift && this.ripple,\n        containerElement: 'div',\n        wrapperClass: 'mu-bottom-item-wrapper',\n        ...this.generateRouteProps()\n      },\n      on: {\n        click: this.handleClick\n      }\n    }, [icon, title]);\n  }\n};\n"
  },
  {
    "path": "src/BottomNav/__snapshots__/BottomNav.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Bottom Navigation should default view 1`] = `\n\n<div tabindex=\"0\"\n     class=\"mu-bottom-nav\"\n>\n  <div class=\"mu-bottom-nav-shift-wrapper\">\n    <div tabindex=\"0\"\n         class=\"mu-bottom-item mu-bottom-item-active \"\n    >\n      <div class=\"mu-bottom-item-wrapper\">\n        <div class=\"mu-ripple-wrapper\">\n        </div>\n        <i class=\" mu-icon  material-icons   mu-bottom-item-icon\"\n           style=\"font-size: undefinedpx;\"\n        >\n          restore\n        </i>\n        <span class=\"mu-bottom-item-text\">\n          Recents\n        </span>\n      </div>\n    </div>\n    <div tabindex=\"0\"\n         class=\"mu-bottom-item\"\n    >\n      <div class=\"mu-bottom-item-wrapper\">\n        <div class=\"mu-ripple-wrapper\">\n        </div>\n        <i class=\" mu-icon  material-icons   mu-bottom-item-icon\"\n           style=\"font-size: undefinedpx;\"\n        >\n          favorite\n        </i>\n        <span class=\"mu-bottom-item-text\">\n          Favorites\n        </span>\n      </div>\n    </div>\n    <div tabindex=\"0\"\n         class=\"mu-bottom-item\"\n    >\n      <div class=\"mu-bottom-item-wrapper\">\n        <div class=\"mu-ripple-wrapper\">\n        </div>\n        <i class=\" mu-icon  material-icons   mu-bottom-item-icon\"\n           style=\"font-size: undefinedpx;\"\n        >\n          location_on\n        </i>\n        <span class=\"mu-bottom-item-text\">\n          Nearby\n        </span>\n      </div>\n    </div>\n  </div>\n</div>\n\n`;\n\nexports[`Bottom Navigation should shift mode 1`] = `\n\n<div tabindex=\"0\"\n     class=\"mu-bottom-nav mu-bottom-nav-shift \"\n>\n  <div class=\"mu-bottom-nav-shift-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n    <div tabindex=\"0\"\n         class=\"mu-bottom-item mu-bottom-item-active is-shift\"\n    >\n      <div class=\"mu-bottom-item-wrapper\">\n        <i class=\" mu-icon  material-icons   mu-bottom-item-icon\"\n           style=\"font-size: undefinedpx;\"\n        >\n          restore\n        </i>\n        <span class=\"mu-bottom-item-text\">\n          Recents\n        </span>\n      </div>\n    </div>\n    <div tabindex=\"0\"\n         class=\"mu-bottom-item\"\n    >\n      <div class=\"mu-bottom-item-wrapper\">\n        <i class=\" mu-icon  material-icons   mu-bottom-item-icon\"\n           style=\"font-size: undefinedpx;\"\n        >\n          favorite\n        </i>\n        <span class=\"mu-bottom-item-text\">\n          Favorites\n        </span>\n      </div>\n    </div>\n    <div tabindex=\"0\"\n         class=\"mu-bottom-item\"\n    >\n      <div class=\"mu-bottom-item-wrapper\">\n        <i class=\" mu-icon  material-icons   mu-bottom-item-icon\"\n           style=\"font-size: undefinedpx;\"\n        >\n          location_on\n        </i>\n        <span class=\"mu-bottom-item-text\">\n          Nearby\n        </span>\n      </div>\n    </div>\n  </div>\n</div>\n\n`;\n"
  },
  {
    "path": "src/BottomNav/index.js",
    "content": "import '../styles/components/bottom-nav.less';\nimport theme from '../theme';\nimport BottomNavTheme from './theme';\nimport BottomNav from './BottomNav';\nimport BottomNavItem from './BottomNavItem';\n\nBottomNav.install = function (Vue) {\n  Vue.component(BottomNav.name, BottomNav);\n  Vue.component(BottomNavItem.name, BottomNavItem);\n};\n\ntheme.addCreateTheme(BottomNavTheme);\nexport { BottomNav, BottomNavItem };\nexport default BottomNav;\n"
  },
  {
    "path": "src/BottomNav/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\n\nexport default (theme) => {\n  return `\n  .mu-bottom-nav{\n    background-color: ${theme.background.paper};\n  }\n\n  .mu-bottom-nav-shift{\n    background-color: ${theme.primary};\n  }\n  .mu-bottom-item {\n    color: ${theme.text.secondary};\n  }\n  .mu-bottom-nav-shift .mu-bottom-item {\n    color: ${fade(theme.text.alternate, 0.7)};\n  }\n  .mu-bottom-item-active .mu-bottom-item-icon,\n  .mu-bottom-item-active .mu-bottom-item-text {\n    color: ${theme.primary};\n  }\n  .mu-bottom-nav-shift .mu-bottom-item-active .mu-bottom-item-icon,\n  .mu-bottom-nav-shift .mu-bottom-item-active .mu-bottom-item-text {\n    color: ${theme.text.alternate};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/BottomSheet/BottomSheet.js",
    "content": "import popup from '../internal/mixins/popup';\nimport { BottomSheetTransition } from '../internal/transitions';\n\nexport default {\n  name: 'mu-bottom-sheet',\n  mixins: [popup],\n  props: {\n    lockScroll: {\n      type: Boolean,\n      default: true\n    }\n  },\n  render (h) {\n    return h(BottomSheetTransition, [\n      this.open ? h('div', {\n        staticClass: 'mu-bottom-sheet',\n        style: {\n          'z-index': this.zIndex\n        }\n      }, this.$slots.default) : undefined\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/BottomSheet/BottomSheet.spec.js",
    "content": "import test from '../utils/testing';\nimport BottomSheet from './BottomSheet';\n\ntest('Bottom Sheet', ({ mount }) => {\n  it('should default view', async () => {\n    const wrapper = mount(BottomSheet, {\n      propsData: {\n        open: true\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n});\n"
  },
  {
    "path": "src/BottomSheet/__snapshots__/BottomSheet.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Bottom Sheet should default view 1`] = `\n\n<div class=\"mu-bottom-sheet\"\n     style=\"z-index: 20141224;\"\n>\n</div>\n\n`;\n"
  },
  {
    "path": "src/BottomSheet/index.js",
    "content": "import '../styles/components/bottom-sheet.less';\nimport theme from '../theme';\nimport BottomSheetTheme from './theme';\nimport BottomSheet from './BottomSheet';\n\nBottomSheet.install = function (Vue) {\n  Vue.component(BottomSheet.name, BottomSheet);\n};\n\ntheme.addCreateTheme(BottomSheetTheme);\nexport default BottomSheet;\n"
  },
  {
    "path": "src/BottomSheet/theme.js",
    "content": "export default (theme) => {\n  return `\n    .mu-bottom-sheet {\n      background-color: ${theme.background.paper};\n    }\n  `;\n};\n"
  },
  {
    "path": "src/Breadcrumbs/Breadcrumbs.js",
    "content": "export default {\n  name: 'mu-breadcrumbs',\n  props: {\n    divider: {\n      type: String,\n      default: '/'\n    }\n  },\n  methods: {\n    createChildren (h) {\n      if (!this.$slots.default) return;\n      const divider = this.$slots.divider ? this.$slots.divider : this.divider;\n      const children = [];\n      const length = this.$slots.default.length;\n      const dividerData = { staticClass: 'mu-breadcrumbs-divider' };\n\n      this.$slots.default.forEach((el, i) => {\n        children.push(el);\n        if (!el.componentOptions || el.componentOptions.tag !== 'mu-breadcrumbs-item' || i === length - 1) return;\n\n        children.push(this.$createElement('li', dividerData, divider));\n      });\n      return children;\n    }\n  },\n  render (h) {\n    return h('ul', {\n      staticClass: 'mu-breadcrumbs',\n      on: this.$listeners\n    }, this.createChildren(h));\n  }\n};\n"
  },
  {
    "path": "src/Breadcrumbs/Breadcrumbs.spec.js",
    "content": "import Vue from 'vue';\nimport test from '../utils/testing';\nimport Breadcrumbs from './Breadcrumbs';\nimport BreadcrumbsItem from './BreadcrumbsItem';\n\ntest('Breadcrumbs Items', ({ mount }) => {\n  function createBreadcrumbsItem (text) {\n    return Vue.component('breadcrumbs-item', {\n      components: {\n        'mu-breadcrumbs-item': BreadcrumbsItem\n      },\n      render (h) {\n        return h('mu-breadcrumbs-item', {\n          slots: {\n            default: [\n              text\n            ]\n          }\n        });\n      }\n    });\n  }\n\n  it('should default view', async () => {\n    const wrapper = mount(Breadcrumbs, {\n      slots: {\n        default: [\n          createBreadcrumbsItem('home'),\n          createBreadcrumbsItem('dashboard')\n        ]\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n});\n"
  },
  {
    "path": "src/Breadcrumbs/BreadcrumbsItem.js",
    "content": "import route from '../internal/mixins/route';\n\nexport default {\n  name: 'mu-breadcrumbs-item',\n  mixins: [route],\n  props: {\n    disabled: Boolean\n  },\n  render (h) {\n    const props = this.to ? this.generateRouteProps() : {\n      href: this.href\n    };\n    return h('li', {\n      staticClass: 'mu-breadcrumbs-item',\n      class: this.disabled ? 'is-disabled' : ''\n    }, [\n      h(this.to ? 'router-link' : 'a', {\n        props\n      }, this.$slots.default)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Breadcrumbs/__snapshots__/Breadcrumbs.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Breadcrumbs Items should default view 1`] = `\n\n<ul class=\"mu-breadcrumbs\">\n  <li class=\"mu-breadcrumbs-item\">\n    <a>\n    </a>\n  </li>\n  <li class=\"mu-breadcrumbs-item\">\n    <a>\n    </a>\n  </li>\n</ul>\n\n`;\n"
  },
  {
    "path": "src/Breadcrumbs/index.js",
    "content": "import '../styles/components/breadcrumbs.less';\nimport theme from '../theme';\nimport BreadcrumbsTheme from './theme';\nimport Breadcrumbs from './Breadcrumbs';\nimport BreadcrumbsItem from './BreadcrumbsItem';\n\nBreadcrumbs.install = function (Vue) {\n  Vue.component(Breadcrumbs.name, Breadcrumbs);\n  Vue.component(BreadcrumbsItem.name, BreadcrumbsItem);\n};\n\ntheme.addCreateTheme(BreadcrumbsTheme);\nexport { Breadcrumbs, BreadcrumbsItem };\nexport default Breadcrumbs;\n"
  },
  {
    "path": "src/Breadcrumbs/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-breadcrumbs-item {\n    color: ${theme.primary};\n  }\n  .mu-breadcrumbs-item.is-disabled {\n    color: ${theme.text.disabled};\n  }\n  .mu-breadcrumbs-divider {\n    color: ${theme.text.disabled};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Button/Button.js",
    "content": "import route from '../internal/mixins/route';\nimport ripple from '../internal/mixins/ripple';\nimport button from '../internal/mixins/button';\nimport color from '../internal/mixins/color';\nimport AbstractButton from '../internal/AbstractButton';\n\nexport default {\n  name: 'mu-button',\n  mixins: [route, ripple, button, color],\n  props: {\n    fab: Boolean,\n    flat: Boolean,\n    icon: Boolean,\n    small: Boolean,\n    large: Boolean,\n    round: Boolean,\n    textColor: String,\n    fullWidth: Boolean\n  },\n  computed: {\n    buttonClass () {\n      const colorClass = this.getNormalColorClass(this.color, this.icon || this.flat);\n      const textColorClass = this.getTextColorClass();\n      return {\n        'mu-fab-button': this.fab,\n        'mu-flat-button': this.flat,\n        'mu-icon-button': this.icon,\n        'mu-raised-button': !this.icon && !this.flat && !this.fab,\n        'mu-button-small': this.small,\n        'mu-button-large': this.large,\n        'mu-button-full-width': !this.fab && !this.icon && this.fullWidth,\n        [colorClass]: true,\n        [textColorClass]: true,\n        'mu-button-round': this.round,\n        'is-focus': this.focus\n      };\n    }\n  },\n  render (h) {\n    const flat = this.flat || this.icon;\n    let color = this.getColor(this.textColor);\n    if (!color && flat) color = this.getColor(this.color);\n    return h(AbstractButton, {\n      staticClass: 'mu-button',\n      class: this.buttonClass,\n      style: {\n        'background-color': !flat ? this.getColor(this.color) : '',\n        color\n      },\n      props: {\n        wrapperClass: 'mu-button-wrapper',\n        disabled: this.disabled,\n        keyboardFocused: this.keyboardFocused,\n        type: this.type,\n        centerRipple: this.icon,\n        ripple: this.ripple,\n        rippleOpacity: this.rippleOpacity,\n        rippleColor: this.rippleColor,\n        ...this.generateRouteProps()\n      },\n      on: this.getListener()\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/Button/Button.spec.js",
    "content": "import test from '../utils/testing';\nimport Button from './Button';\nimport * as colors from '../theme/colors';\n\ntest('Button', ({ mount }) => {\n  it('should default view', async () => {\n    const wrapper = mount(Button, {});\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should variant style', async () => {\n    const wrapper = mount(Button, {\n      propsData: {\n        fab: true\n      }\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({\n      fab: false,\n      flat: true\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({\n      flat: false,\n      icon: true\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({\n      icon: false,\n      small: true\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({\n      small: false,\n      large: true\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n    wrapper.setProps({\n      large: false,\n      round: true\n    });\n    expect(wrapper.html()).toMatchSnapshot();\n  });\n\n  it('should custom color', async () => {\n    const wrapper = mount(Button, {\n      propsData: {\n        color: 'primary',\n        textColor: 'secondary'\n      }\n    });\n    expect(wrapper.hasClass('mu-primary-color')).toBe(true);\n    expect(wrapper.hasClass('mu-inverse')).toBe(true);\n    expect(wrapper.hasClass('mu-secondary-text-color')).toBe(true);\n    wrapper.setProps({\n      color: 'teal',\n      textColor: 'green'\n    });\n    expect(wrapper.hasStyle('background-color', colors.teal)).toBe(true);\n    expect(wrapper.hasStyle('color', colors.green)).toBe(true);\n    wrapper.setProps({\n      color: '#000',\n      textColor: '#fff'\n    });\n    expect(wrapper.hasStyle('background-color', '#000')).toBe(true);\n    expect(wrapper.hasStyle('color', '#fff')).toBe(true);\n  });\n});\n"
  },
  {
    "path": "src/Button/__snapshots__/Button.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Button should default view 1`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-raised-button \"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n\nexports[`Button should variant style 1`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-fab-button \"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n\nexports[`Button should variant style 2`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-flat-button \"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n\nexports[`Button should variant style 3`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-icon-button \"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n\nexports[`Button should variant style 4`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-raised-button mu-button-small \"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n\nexports[`Button should variant style 5`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-raised-button mu-button-large \"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n\nexports[`Button should variant style 6`] = `\n\n<button tabindex=\"0\"\n        type=\"button\"\n        class=\"mu-button mu-raised-button  mu-button-round\"\n        style=\"outline: none;\"\n>\n  <div class=\"mu-button-wrapper\">\n    <div class=\"mu-ripple-wrapper\">\n    </div>\n  </div>\n</button>\n\n`;\n"
  },
  {
    "path": "src/Button/index.js",
    "content": "import '../styles/components/button.less';\nimport theme from '../theme';\nimport ButtonTheme from './theme';\nimport Button from './Button';\n\nButton.install = function (Vue) {\n  Vue.component(Button.name, Button);\n};\n\ntheme.addCreateTheme(ButtonTheme);\nexport default Button;\n"
  },
  {
    "path": "src/Button/theme.js",
    "content": "import { fade, darken } from '../utils/colorManipulator';\n\nexport default (theme) => {\n  return `\n  .mu-raised-button {\n    background-color: ${theme.background.paper};\n    color: ${theme.text.primary};\n  }\n  .mu-raised-button.disabled{\n    color: ${fade(theme.text.primary, 0.3)};\n    background-color: ${darken(theme.text.alternate, 0.1)};\n  }\n  .mu-flat-button {\n    color: ${theme.text.primary};\n  }\n  .mu-flat-button.disabled {\n    color: ${theme.text.disabled};\n  }\n  .mu-icon-button {\n    color: ${theme.text.primary};\n  }\n  .mu-icon-button.disabled {\n    color: ${theme.text.disabled};\n  }\n  .mu-fab-button {\n    background-color: ${theme.primary};\n    color: ${theme.text.alternate};\n  }\n  .mu-fab-button.disabled {\n    color: ${fade(theme.text.primary, 0.3)};\n    background-color: ${darken(theme.text.alternate, 0.1)};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Card/Card.js",
    "content": "export default {\n  name: 'mu-card',\n  props: {\n    raised: Boolean\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-card',\n      class: {\n        'mu-card__raised': this.raised\n      },\n      on: this.$listeners\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/Card/CardHeader.js",
    "content": "export default {\n  name: 'mu-card-header',\n  functional: true,\n  props: {\n    title: String,\n    subTitle: String\n  },\n  render (h, { data, props, slots }) {\n    slots = slots();\n    const title = props.title || props.subTitle ? h('div', {\n      staticClass: 'mu-card-header-title'\n    }, [\n      h('div', { staticClass: 'mu-card-title' }, props.title),\n      h('div', { staticClass: 'mu-card-sub-title' }, props.subTitle)\n    ]) : undefined;\n\n    data.staticClass = `${data.staticClass || ''} mu-card-header`;\n    return h('div', data, [slots.avatar, title, slots.default]);\n  }\n};\n"
  },
  {
    "path": "src/Card/CardMedia.js",
    "content": "export default {\n  name: 'mu-card-media',\n  functional: true,\n  props: {\n    title: String,\n    subTitle: String\n  },\n  render (h, { data, props, children }) {\n    const title = props.title || props.subTitle ? h('div', {\n      staticClass: 'mu-card-media-title'\n    }, [\n      h('div', { staticClass: 'mu-card-title' }, props.title),\n      h('div', { staticClass: 'mu-card-sub-title' }, props.subTitle)\n    ]) : undefined;\n\n    data.staticClass = `${data.staticClass || ''} mu-card-media`;\n    return h('div', data, [children, title]);\n  }\n};\n"
  },
  {
    "path": "src/Card/CardTitle.js",
    "content": "export default {\n  name: 'mu-card-title',\n  functional: true,\n  props: {\n    title: String,\n    subTitle: String\n  },\n  render (h, { data, props }) {\n    data.staticClass = `${data.staticClass || ''} mu-card-title-container`;\n    return h('div', data, [\n      h('div', { staticClass: 'mu-card-title' }, props.title),\n      h('div', { staticClass: 'mu-card-sub-title' }, props.subTitle)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Card/index.js",
    "content": "import '../styles/components/card.less';\nimport theme from '../theme';\nimport CardTheme from './theme';\nimport Card from './Card';\nimport CardHeader from './CardHeader';\nimport CardMedia from './CardMedia';\nimport CardTitle from './CardTitle';\nimport { createSimpleFunctional } from '../utils';\n\nexport { Card, CardHeader, CardMedia, CardTitle };\nexport const CardActions = createSimpleFunctional('mu-card-actions', 'div', 'mu-card-actions');\nexport const CardText = createSimpleFunctional('mu-card-text', 'div', 'mu-card-text');\n\nCard.install = function (Vue) {\n  Vue.component(Card.name, Card);\n  Vue.component(CardHeader.name, CardHeader);\n  Vue.component(CardMedia.name, CardMedia);\n  Vue.component(CardTitle.name, CardTitle);\n  Vue.component(CardActions.name, CardActions);\n  Vue.component(CardText.name, CardText);\n};\n\ntheme.addCreateTheme(CardTheme);\nexport default Card;\n"
  },
  {
    "path": "src/Card/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\n\nexport default (theme) => {\n  return `\n    .mu-card {\n      background-color: ${theme.background.paper};\n    }\n    .mu-card-header-title .mu-card-title{\n      color: ${fade(theme.text.primary, 0.87)};\n    }\n    .mu-card-header-title .mu-card-sub-title{\n      color: ${fade(theme.text.primary, 0.57)};\n    }\n    .mu-card-text{\n      color: ${theme.text.primary};\n    }\n    .mu-card-title-container .mu-card-title{\n      color: ${theme.text.primary};\n    }\n    .mu-card-title-container .mu-card-sub-title {\n      color: ${theme.text.secondary};\n    }\n  `;\n};\n"
  },
  {
    "path": "src/Carousel/Carousel.js",
    "content": "import Button from '../Button';\nimport swipe from '../internal/directives/swipe';\n\nexport default {\n  name: 'mu-carousel',\n  directives: {\n    swipe\n  },\n  provide () {\n    return {\n      addCarouselItem: this.addCarouselItem,\n      removeCarouselItem: this.removeCarouselItem,\n      isCarouselActive: this.isCarouselActive,\n      getCarouselTransition: this.getTransition\n    };\n  },\n  props: {\n    active: {\n      type: Number,\n      default: 0\n    },\n    cycle: {\n      type: Boolean,\n      default: true\n    },\n    interval: {\n      type: [Number, String],\n      default: 6000,\n      validator: value => value > 0\n    },\n    transition: {\n      type: String,\n      default: 'slide',\n      validator: (val) => ['slide', 'fade'].indexOf(val) !== -1\n    },\n    hideIndicators: Boolean,\n    hideControls: Boolean\n  },\n  data () {\n    return {\n      items: [],\n      inverse: false,\n      activeIndex: this.active\n    };\n  },\n  mounted () {\n    this.startAutoNext();\n  },\n  beforeDestroy () {\n    if (this.timer) clearInterval(this.timer);\n  },\n  methods: {\n    getTransition () {\n      return this.transition;\n    },\n    addCarouselItem (item) {\n      const index = this.$children.indexOf(item);\n      return index === -1 ? this.items.push(item) : this.items.splice(index, 0, item);\n    },\n    removeCarouselItem (item) {\n      const index = this.items.indexOf(item);\n      if (index === -1) return;\n      this.items.splice(index, 1);\n    },\n    isCarouselActive (item) {\n      return this.items.indexOf(item) === this.activeIndex;\n    },\n    startAutoNext () {\n      if (this.timer) clearInterval(this.timer);\n      if (!this.cycle) return;\n      this.timer = setInterval(() => this.next(), this.interval > 0 ? this.interval : 6000);\n    },\n    next () {\n      const maxIndex = this.items.length - 1;\n      let index = this.activeIndex + 1;\n      if (index > maxIndex) index = 0;\n      this.activeIndex = index;\n      this.inverse = false;\n    },\n    prev () {\n      let index = this.activeIndex - 1;\n      if (index < 0) index = this.items.length - 1;\n      this.activeIndex = index;\n      this.inverse = true;\n    },\n    changeActiveIndex (index) {\n      if (index !== this.activeIndex) {\n        this.inverse = this.activeIndex > index;\n        this.activeIndex = index;\n      }\n    },\n    createControls (h) {\n      if (this.hideControls) return [];\n      return [\n        h(Button, {\n          class: 'mu-carousel-button mu-carousel-button__left',\n          props: {\n            icon: true\n          },\n          on: {\n            click: this.prev\n          }\n        }, [\n          this.$slots.left && this.$slots.left.length > 0\n            ? this.$slots.left\n            : h('svg', {\n              staticClass: 'mu-carousel-svg-icon',\n              attrs: {\n                viewBox: '0 0 24 24'\n              }\n            }, [\n              h('path', {\n                attrs: {\n                  d: 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z'\n                }\n              }),\n              h('path', {\n                attrs: {\n                  d: 'M0 0h24v24H0z',\n                  fill: 'none'\n                }\n              })\n            ])\n        ]),\n        h(Button, {\n          class: 'mu-carousel-button mu-carousel-button__right',\n          props: {\n            icon: true\n          },\n          on: {\n            click: this.next\n          }\n        }, [\n          this.$slots.right && this.$slots.right.length > 0\n            ? this.$slots.right\n            : h('svg', {\n              staticClass: 'mu-carousel-svg-icon',\n              attrs: {\n                viewBox: '0 0 24 24'\n              }\n            }, [\n              h('path', {\n                attrs: {\n                  d: 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z'\n                }\n              }),\n              h('path', {\n                attrs: {\n                  d: 'M0 0h24v24H0z',\n                  fill: 'none'\n                }\n              })\n            ])\n        ])\n      ];\n    },\n    createIndicators (h) {\n      if (this.hideIndicators) return;\n      return h('div', {\n        staticClass: 'mu-carousel-indicators'\n      }, this.items.map((item, index) => {\n        const active = index === this.activeIndex;\n        return this.$scopedSlots.indicator\n          ? this.$scopedSlots.indicator({ index, active })\n          : h(Button, {\n            staticClass: 'mu-carousel-indicator-button',\n            class: {\n              'mu-carousel-indicator-button__active': active\n            },\n            props: {\n              icon: true\n            },\n            on: {\n              click: () => this.changeActiveIndex(index)\n            }\n          }, [\n            h('span', {\n              staticClass: 'mu-carousel-indicator-icon'\n            })\n          ]);\n      }));\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-carousel',\n      class: {\n        'mu-carousel__transition_inverse': this.inverse\n      },\n      directives: [{\n        name: 'swipe',\n        value: {\n          left: this.next,\n          right: this.prev\n        },\n        modifiers: {\n          touch: true\n        }\n      }]\n    }, [\n      ...this.createControls(h),\n      this.createIndicators(h),\n      this.$slots.default\n    ]);\n  },\n  watch: {\n    activeIndex (val) {\n      this.startAutoNext();\n      this.$emit('change', val);\n      this.$emit('update:active', val);\n    },\n    active (val) {\n      this.changeActiveIndex(val);\n    },\n    cycle () {\n      this.startAutoNext();\n    },\n    interval () {\n      this.startAutoNext();\n    }\n  }\n};\n"
  },
  {
    "path": "src/Carousel/CarouselItem.js",
    "content": "export default {\n  name: 'mu-carousel-item',\n  inject: [\n    'addCarouselItem',\n    'removeCarouselItem',\n    'isCarouselActive',\n    'getCarouselTransition'\n  ],\n  data () {\n    return {\n      classes: []\n    };\n  },\n  computed: {\n    active () {\n      return this.isCarouselActive(this);\n    },\n    transition () {\n      return this.getCarouselTransition();\n    }\n  },\n  created () {\n    this.addCarouselItem(this);\n  },\n  beforeDestroy () {\n    this.removeCarouselItem(this);\n  },\n  render (h) {\n    return h('transition', {\n      props: {\n        name: 'mu-carousel-' + this.transition\n      }\n    }, [\n      h('div', {\n        staticClass: 'mu-carousel-item',\n        class: [...this.classes],\n        directives: [{\n          name: 'show',\n          value: this.active\n        }]\n      }, this.$slots.default)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Carousel/index.js",
    "content": "import '../styles/components/carousel.less';\nimport Carousel from './Carousel';\nimport CarouselItem from './CarouselItem';\n\nCarousel.install = function (Vue) {\n  Vue.component(Carousel.name, Carousel);\n  Vue.component(CarouselItem.name, CarouselItem);\n};\n\nexport { Carousel, CarouselItem };\nexport default Carousel;\n"
  },
  {
    "path": "src/Checkbox/Checkbox.js",
    "content": "import select from '../internal/mixins/select';\nimport Icon from '../Icon';\n\nexport default {\n  name: 'mu-checkbox',\n  mixins: [select('checkbox')],\n  props: {\n    inputValue: [Boolean, Array]\n  },\n  computed: {\n    checked () {\n      if (!this.inputValue) return false;\n      const inputValue = this.inputValue;\n      const value = this.$attrs.value;\n      if (inputValue instanceof Array) return inputValue.indexOf(value) !== -1;\n      return inputValue;\n    }\n  },\n  methods: {\n    toggle () {\n      const inputValue = this.inputValue;\n      const value = this.$attrs.value;\n      if (!inputValue || typeof inputValue === 'boolean') {\n        this.$emit('change', !inputValue);\n        return;\n      }\n      if (this.checked) {\n        inputValue.splice(inputValue.indexOf(value), 1);\n        this.$emit('change', inputValue);\n      } else {\n        this.$emit('change', [...inputValue, value]);\n      }\n    }\n  },\n  render (h) {\n    const defaultSvgUnCheckIcon = h('svg', {\n      staticClass: `mu-checkbox-icon-uncheck mu-checkbox-svg-icon`,\n      attrs: {\n        viewBox: '0 0 24 24'\n      }\n    }, [\n      h('path', {\n        attrs: {\n          d: 'M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z'\n        }\n      })\n    ]);\n    const defaultSvgCheckedIcon = h('svg', {\n      staticClass: `mu-checkbox-icon-checked mu-checkbox-svg-icon`,\n      attrs: {\n        viewBox: '0 0 24 24'\n      }\n    }, [\n      h('path', {\n        attrs: {\n          d: 'M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'\n        }\n      })\n    ]);\n    const view = this.createRipple(h, 'mu-checkbox-icon', [\n      this.uncheckIcon ? h(Icon, {\n        staticClass: `mu-checkbox-icon-uncheck`,\n        props: {\n          value: this.uncheckIcon\n        }\n      }) : defaultSvgUnCheckIcon,\n      this.checkedIcon ? h(Icon, {\n        staticClass: `mu-checkbox-icon-checked`,\n        props: {\n          value: this.checkedIcon\n        }\n      }) : defaultSvgCheckedIcon\n    ]);\n    return this.createSelect(h, view);\n  }\n};\n"
  },
  {
    "path": "src/Checkbox/index.js",
    "content": "import '../styles/components/checkbox.less';\nimport theme from '../theme';\nimport CheckboxTheme from './theme';\nimport Checkbox from './Checkbox';\n\nCheckbox.install = function (Vue) {\n  Vue.component(Checkbox.name, Checkbox);\n};\n\ntheme.addCreateTheme(CheckboxTheme);\nexport default Checkbox;\n"
  },
  {
    "path": "src/Checkbox/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-checkbox {\n    color: ${theme.text.secondary};\n  }\n  .mu-checkbox.disabled {\n    color: ${theme.text.disabled};\n  }\n  .mu-checkbox-checked {\n    color: ${theme.primary};\n  }\n  .mu-checkbox.disabled .mu-checkbox-label {\n    color: ${theme.text.disabled};\n  }\n  .mu-checkbox-label {\n    color: ${theme.text.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Chip/Chip.js",
    "content": "import color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-chip',\n  mixins: [color],\n  props: {\n    delete: Boolean,\n    selected: Boolean,\n    textColor: String\n  },\n  methods: {\n    handleDelete (e) {\n      e.stopPropagation();\n      this.$emit('delete');\n    }\n  },\n  render (h) {\n    const svgDeleteIcon = h('svg', {\n      staticClass: 'mu-chip-delete-icon',\n      attrs: {\n        viewBox: '0 0 24 24'\n      },\n      on: {\n        click: this.handleDelete\n      }\n    }, [\n      h('path', {\n        attrs: {\n          d: 'M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z'\n        }\n      })\n    ]);\n\n    return h('span', {\n      staticClass: `mu-chip ${this.getColorClass()} ${this.getTextColorClass()}`,\n      class: {\n        'is-deletable': this.selected\n      },\n      attrs: {\n        tabindex: 0\n      },\n      style: {\n        color: this.getColor(this.textColor),\n        backgroundColor: this.getColor(this.color)\n      },\n      on: this.$listeners\n    }, [this.$slots.default, this.delete ? svgDeleteIcon : undefined]);\n  }\n};\n"
  },
  {
    "path": "src/Chip/index.js",
    "content": "import '../styles/components/chip.less';\nimport theme from '../theme';\nimport ChipTheme from './theme';\nimport Chip from './Chip';\n\nChip.install = function (Vue) {\n  Vue.component(Chip.name, Chip);\n};\n\ntheme.addCreateTheme(ChipTheme);\nexport default Chip;\n"
  },
  {
    "path": "src/Chip/theme.js",
    "content": "import { fade, emphasize } from '../utils/colorManipulator';\nexport default (theme) => {\n  return `\n  .mu-chip {\n    background-color: ${theme.background.chip};\n    color: ${theme.text.primary};\n  }\n  .mu-chip:hover .mu-chip-delete-icon{\n    color: ${fade(fade(theme.text.primary, 0.26), 0.4)};\n  }\n  .mu-chip-delete-icon{\n    color: ${fade(theme.text.primary, 0.26)};\n  }\n  .mu-chip:active,\n  .mu-chip:focus,\n  .mu-chip.is-deletable {\n    background-color: ${emphasize(theme.background.chip, 0.08)};\n  }\n  .mu-chip:hover{\n    background-color: ${emphasize(theme.background.chip, 0.08)};\n  }\n  .mu-chip.mu-primary-color {\n    background-color: ${theme.primary};\n  }\n  .mu-chip.mu-secondary-color {\n    background-color: ${theme.secondary};\n  }\n  .mu-chip.mu-success-color {\n    background-color: ${theme.success};\n  }\n  .mu-chip.mu-warning-color {\n    background-color: ${theme.warning};\n  }\n  .mu-chip.mu-info-color {\n    background-color: ${theme.info};\n  }\n  .mu-chip.mu-error-color {\n    background-color: ${theme.error};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/DataTable/DataTable.js",
    "content": "import header from './mixins/header';\nimport body from './mixins/body';\nimport footer from './mixins/footer';\nimport colgroup from './mixins/colgroup';\nimport progress from './mixins/progress';\nimport mousewheel from '../internal/directives/mousewheel';\nimport { addResizeListener, removeResizeListener } from '../utils/resize-event';\nimport { getWidth } from '../utils';\n\nexport default {\n  name: 'mu-data-table',\n  mixins: [header, body, footer, colgroup, progress],\n  props: {\n    data: Array,\n    columns: Array,\n    noDataText: {\n      type: String,\n      default: '暂无数据'\n    },\n    height: [String, Number],\n    maxHeight: [String, Number],\n    selectAll: Boolean,\n    selectable: Boolean,\n    selects: {\n      type: Array,\n      default: () => []\n    },\n    sort: {\n      type: Object\n    },\n    checkbox: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    loading: Boolean,\n    hideHeader: Boolean,\n    rowClassName: [String, Function],\n    rowStyle: [Object, Function],\n    rowKey: {\n      type: String,\n      default: 'id'\n    },\n    fit: {\n      type: Boolean,\n      default: true\n    },\n    hover: {\n      type: Boolean,\n      default: true\n    }\n  },\n  methods: {\n    handleHeaderFooterMousewheel (event, data) {\n      const { pixelX, pixelY } = data;\n      if (Math.abs(pixelX) >= Math.abs(pixelY)) {\n        event.preventDefault();\n        if (!this.$refs.body) return;\n        this.$refs.body.scrollLeft += data.pixelX / 5;\n      }\n    },\n    resizeListener () {\n      this.setCols();\n    }\n  },\n  mounted () {\n    if (this.fit) {\n      addResizeListener(this.$el, this.resizeListener);\n    }\n  },\n  beforeDestroy () {\n    if (this.resizeListener) removeResizeListener(this.$el, this.resizeListener);\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-table',\n      class: {\n        'mu-table-border': this.border,\n        'mu-table-flex': this.maxHeight || this.height\n      },\n      style: {\n        'max-height': getWidth(this.maxHeight),\n        'height': getWidth(this.height)\n      }\n    }, [\n      !this.hideHeader ? this.createHeader(h) : undefined,\n      this.createProgress(h),\n      this.createBody(h),\n      this.createFooter(h)\n    ]);\n  },\n  directives: {\n    mousewheel\n  }\n};\n"
  },
  {
    "path": "src/DataTable/index.js",
    "content": "import '../styles/components/data-table.less';\nimport theme from '../theme';\nimport DataTableTheme from './theme';\nimport DataTable from './DataTable';\n\nDataTable.install = function (Vue) {\n  Vue.component(DataTable.name, DataTable);\n};\n\ntheme.addCreateTheme(DataTableTheme);\nexport default DataTable;\n"
  },
  {
    "path": "src/DataTable/mixins/body.js",
    "content": "import Checkbox from '../../Checkbox';\nimport { ExpandTransition } from '../../internal/transitions';\n\nexport default {\n  props: {\n    expandRowIndex: {\n      type: Number,\n      default: -1\n    },\n    autoExpand: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      hoverIndex: -1,\n      expandIndex: this.expandRowIndex,\n      isSelectAll: false\n    };\n  },\n  methods: {\n    handleScroll (e) {\n      const scrollLeft = e.target.scrollLeft;\n      const theader = this.$refs.header;\n      const tfooter = this.$refs.tfooter;\n      if (theader) theader.scrollLeft = scrollLeft;\n      if (tfooter) tfooter.scrollLeft = scrollLeft;\n    },\n    isSelected (index) {\n      return this.selects.indexOf(index) !== -1;\n    },\n    toggleSelect (index) {\n      if (!this.selectable) return;\n      const selects = [...this.selects];\n      const selectIndex = selects.indexOf(index);\n      if (selectIndex !== -1) {\n        selects.splice(selectIndex, 1);\n      } else {\n        selects.push(index);\n      }\n      selects.sort((a, b) => a - b);\n      this.$emit('update:selects', selects);\n      this.$emit('select-change', index, selects);\n    },\n    toggleExpand (index) {\n      this.expandIndex = this.expandIndex === index ? -1 : index;\n    },\n    createEmpty (h) {\n      return [\n        this.$slots.empty\n          ? this.$slots.empty\n          : h('div', { staticClass: 'mu-table-empty' }, this.noDataText)\n      ];\n    },\n    createSlotContent (row, index) {\n      return this.$scopedSlots.default({\n        row,\n        $index: index\n      });\n    },\n    createCheckboxTd (h, index) {\n      return h('td', {\n        staticClass: 'mu-checkbox-col'\n      }, [\n        h(Checkbox, {\n          props: {\n            inputValue: this.isSelected(index),\n            disabled: !this.selectable\n          },\n          on: {\n            change: () => this.toggleSelect(index),\n            click: (e) => {\n              e.stopPropagation();\n            }\n          }\n        })\n      ]);\n    },\n    createContent (h) {\n      const contents = [];\n      for (let index = 0; index < this.data.length; index++) {\n        const row = this.data[index];\n        const arr = this.$scopedSlots.default\n          ? this.createSlotContent(row, index)\n          : this.columns.map((column) => {\n            const text = column.formatter && typeof column.formatter === 'function'\n              ? column.formatter(row[column.name], row)\n              : row[column.name];\n            return h('td', {\n              class: [\n                column.align || column.cellAlign ? `is-${column.cellAlign || column.align}` : ''\n              ]\n            }, text);\n          }) || [];\n        if (this.checkbox) arr.unshift(this.createCheckboxTd(h, index));\n\n        const rowClassName = typeof this.rowClassName === 'function' ? this.rowClassName(index, row) : this.rowClassName;\n        contents.push(\n          h('tr', {\n            staticClass: rowClassName,\n            class: {\n              'is-hover': this.hover && this.hoverIndex === index,\n              'is-stripe': this.stripe && index % 2 !== 0,\n              'is-selected': this.isSelected(index)\n            },\n            style: typeof this.rowStyle === 'function' ? this.rowStyle(index, row) : this.rowStyle,\n            on: {\n              mouseenter: (e) => {\n                this.hoverIndex = index;\n                this.$emit('row-mouseenter', index, row, e);\n              },\n              mouseleave: (e) => {\n                this.hoverIndex = -1;\n                this.$emit('row-mouseleave', index, row, e);\n              },\n              contextmenu: (e) => {\n                this.$emit('row-contextmenu', index, row, e);\n              },\n              click: (e) => {\n                if (!this.checkbox) this.toggleSelect(index);\n                if (this.autoExpand) this.toggleExpand(index);\n                this.$emit('row-click', index, row, e);\n              },\n              dblclick: (e) => this.$emit('row-dblclick', index, row, e)\n            },\n            key: row[this.rowKey]\n          }, arr)\n        );\n\n        if (this.$scopedSlots.expand) {\n          contents.push(\n            h('tr', {\n              staticClass: 'mu-table-expand-row'\n            }, [\n              h('td', {\n                attrs: {\n                  colspan: this.columns.length + (this.checkbox ? 1 : 0)\n                },\n                class: {\n                  'is-expand': this.expandIndex === index\n                }\n              }, this.expandIndex === index ? [\n                h(ExpandTransition, {}, this.$scopedSlots.expand({\n                  row,\n                  $index: index\n                }))\n              ] : undefined)\n            ])\n          );\n        }\n      }\n      return contents;\n    },\n    createBody (h) {\n      return this.data && this.data.length > 0 ? h('div', {\n        staticClass: 'mu-table-body-wrapper',\n        on: {\n          scroll: this.handleScroll\n        },\n        ref: 'body'\n      }, [\n        h('table', {\n          staticClass: 'mu-table-body',\n          style: {\n            width: this.tableWidth\n          }\n        }, [\n          this.createColGroup(h),\n          h('tbody', {}, this.createContent(h))\n        ])\n      ]) : this.createEmpty(h);\n    }\n  },\n  watch: {\n    selects (val) {\n      this.isSelectAll = val && val.length >= this.data.length;\n    },\n    expandRowIndex (val) {\n      if (this.expandIndex === val) return;\n      this.expandIndex = val;\n    },\n    expandIndex (val) {\n      this.$emit('update:expandRowIndex', val);\n      this.$emit('change-expand', val);\n    }\n  }\n};\n"
  },
  {
    "path": "src/DataTable/mixins/colgroup.js",
    "content": "import resize from '../../internal/directives/resize';\nexport default {\n  props: {\n    minColWidth: {\n      type: Number,\n      default: 128\n    },\n    checkboxColWidth: {\n      type: Number,\n      default: 75\n    }\n  },\n  data () {\n    return {\n      cols: [],\n      tableWidth: ''\n    };\n  },\n  mounted () {\n    this.setCols();\n  },\n  methods: {\n    setCols () {\n      let tableElWidth = this.$el.offsetWidth;\n      const widthArr = this.columns.filter((column) => column.width).map((column) => Number(column.width));\n      widthArr.forEach((width) => (tableElWidth -= width));\n      if (this.checkbox) tableElWidth -= this.checkboxColWidth;\n\n      let otherWidth = Math.floor(tableElWidth / (this.columns.length - widthArr.length));\n\n      if (otherWidth < this.minColWidth) otherWidth = this.minColWidth;\n      this.cols = this.columns.map((column) => {\n        return column.width ? column.width : this.fit ? otherWidth : this.minColWidth;\n      });\n      if (this.checkbox) this.cols.unshift(this.checkboxColWidth);\n      let tableWidth = 0;\n      this.cols.forEach((width) => (tableWidth += Number(width)));\n      this.tableWidth = tableWidth + 'px';\n    },\n    createColGroup (h) {\n      return h('colgroup', {\n      }, this.cols.map((width) => {\n        return h('col', {\n          attrs: {\n            width\n          }\n        });\n      }));\n    }\n  },\n  watch: {\n    columns () {\n      this.setCols();\n    }\n  },\n  directives: {\n    resize\n  }\n};\n"
  },
  {
    "path": "src/DataTable/mixins/footer.js",
    "content": "export default {\n  methods: {\n    createFooter (h) {\n      return this.$scopedSlots.footer ? h('div', {\n        staticClass: 'mu-table-footer-wrapper',\n        ref: 'footer'\n      }, [\n        h('table', {\n          staticClass: 'mu-table-footer',\n          style: {\n            width: this.tableWidth\n          }\n        }, [\n          this.createColGroup(h),\n          h('tbody', {}, this.$scopedSlots.footer({\n            columns: this.columns\n          }))\n        ])\n      ]) : undefined;\n    }\n  }\n};\n"
  },
  {
    "path": "src/DataTable/mixins/header.js",
    "content": "import Checkbox from '../../Checkbox';\nimport Tooltip from '../../Tooltip';\n\nexport default {\n  methods: {\n    toggleSelectAll (val) {\n      this.isSelectAll = val;\n      const selects = [];\n      if (this.isSelectAll) {\n        let i = 0;\n        while (i < this.data.length) {\n          selects.push(i++);\n        }\n      }\n      this.$emit('update:selects', selects);\n    },\n    handleSortChange (column) {\n      const sort = {\n        ...this.sort\n      };\n\n      if (this.sort && this.sort.name === column.name) {\n        sort.order = sort.order === 'desc' ? 'asc' : 'desc';\n      } else {\n        sort.name = column.name;\n        sort.order = 'desc';\n      }\n\n      this.$emit('update:sort', sort);\n      this.$emit('sort-change', sort);\n    },\n    createSlotHeader () {\n      return this.$scopedSlots.header({\n        columns: this.columns\n      });\n    },\n    createSlotTh (column) {\n      return this.$scopedSlots.th({\n        ...column\n      });\n    },\n    createDefaultTh (h, column) {\n      return [\n        column.sortable ? h('svg', {\n          staticClass: 'mu-table-sort-icon',\n          attrs: {\n            viewBox: '0 0 24 24'\n          }\n        }, [\n          h('path', {\n            attrs: {\n              d: 'M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z'\n            }\n          })\n        ]) : undefined,\n        column.title\n      ];\n    },\n    createTh (h, column) {\n      return this.$scopedSlots.th ? this.createSlotTh(column) : this.createDefaultTh(h, column);\n    },\n    createCheckboxTh (h) {\n      const isEnable = this.selectable && this.selectAll;\n      return h('th', {\n        staticClass: 'mu-checkbox-col'\n      }, [\n        h(Checkbox, {\n          props: {\n            inputValue: this.isSelectAll,\n            disabled: !isEnable\n          },\n          on: {\n            change: this.toggleSelectAll\n          }\n        })\n      ]);\n    },\n    createTHeader (h) {\n      const arr = this.columns.map((column) => {\n        const th = h('th', {\n          class: [\n            column.align ? `is-${column.align}` : '',\n            column.class || '',\n            column.sortable ? 'is-sortable' : '',\n            column.sortable && this.sort && this.sort.name === column.name ? 'is-sorting' : '',\n            column.sortable && this.sort && this.sort.name === column.name && this.sort.order === 'asc' ? 'sort-asc' : ''\n          ],\n          on: {\n            click: () => column.sortable && this.handleSortChange(column)\n          }\n        }, this.createTh(h, column));\n\n        return column.tooltip ? h(Tooltip, {\n          props: {\n            content: column.tooltip\n          }\n        }, [th]) : th;\n      });\n\n      if (this.checkbox) arr.unshift(this.createCheckboxTh(h));\n      return h('tr', {}, arr);\n    },\n    createHeader (h) {\n      return h('div', {\n        staticClass: 'mu-table-header-wrapper',\n        ref: 'header',\n        directives: [{\n          name: 'mousewheel',\n          value: this.handleHeaderFooterMousewheel\n        }]\n      }, [\n        h('table', {\n          staticClass: 'mu-table-header',\n          style: {\n            width: this.tableWidth\n          }\n        }, [\n          this.createColGroup(h),\n          h('thead', {}, [\n            this.$scopedSlots.header ? this.createSlotHeader() : this.createTHeader(h)\n          ])\n        ])\n      ]);\n    }\n  }\n};\n"
  },
  {
    "path": "src/DataTable/mixins/progress.js",
    "content": "import { LinearProgress } from '../../Progress';\nimport { FadeTransition } from '../../internal/transitions';\n\nexport default {\n  mounted () {\n  },\n  methods: {\n    createProgress (h) {\n      const headerHeight = this.$refs.header ? this.$refs.header.offsetHeight + 'px' : '';\n      return h(FadeTransition, {}, [\n        this.loading ? h(LinearProgress, {\n          staticClass: 'mu-table-progress',\n          style: {\n            top: headerHeight\n          }\n        }) : undefined\n      ]);\n    }\n  }\n};\n"
  },
  {
    "path": "src/DataTable/theme.js",
    "content": "import * as colors from '../theme/colors';\nexport default (theme, type) => {\n  return `\n  .mu-table {\n    background-color: ${theme.text.alternate};\n  }\n  .mu-table tr {\n    color: ${theme.text.primary};\n  }\n  .mu-table tr.is-stripe {\n    background-color: ${type === 'dark' ? colors.grey800 : colors.grey50};\n  }\n  .mu-table tr.is-hover {\n    background-color: ${type === 'dark' ? 'rgba(0, 0, 0, .14)' : colors.grey200};\n  }\n  .mu-table tr.is-selected {\n    background-color: ${type === 'dark' ? colors.grey700 : colors.grey100};\n  }\n  .mu-table td {\n    border-bottom-color: ${theme.divider};\n  }\n  .mu-table th {\n    color: ${theme.text.secondary};\n    border-bottom-color: ${theme.divider};\n  }\n  .mu-table th.is-sortable:hover {\n    color: ${theme.text.primary};\n  }\n  .mu-table th.is-sorting {\n    color: ${theme.text.primary};\n  }\n  .mu-table-border {\n    border-color: ${theme.divider};\n  }\n  .mu-table-border th,\n  .mu-table-border td {\n    border-right-color: ${theme.divider};\n  }\n  .mu-table-empty {\n    color: ${theme.text.secondary};\n  }\n  .mu-table-expand-row td.is-expand {\n    border-bottom-color: ${theme.divider};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/DateInput/Container.js",
    "content": "import BottomSheet from '../BottomSheet';\nimport Dialog from '../Dialog';\nimport Popover from '../Popover';\n\nexport default {\n  props: {\n    container: {\n      type: String,\n      default: 'popover', // dialog popover bottomSheet\n      validator (val) {\n        return val && ['dialog', 'popover', 'bottomSheet'].indexOf(val) !== -1;\n      }\n    },\n    trigger: {},\n    open: Boolean\n  },\n  methods: {\n    createWrap (h, children) {\n      switch (this.container) {\n        case 'popover':\n          return h(Popover, {\n            props: {\n              open: this.open,\n              cover: true,\n              lazy: true,\n              trigger: this.trigger\n            },\n            on: this.$listeners\n          }, children);\n        case 'dialog':\n          return h(Dialog, {\n            props: {\n              open: this.open,\n              dialogClass: 'mu-picker-dialog',\n              transition: 'slide-top'\n            },\n            on: this.$listeners\n          }, children);\n        case 'bottomSheet':\n          return h(BottomSheet, {\n            props: {\n              open: this.open\n            },\n            on: this.$listeners\n          }, children);\n      }\n    }\n  },\n  render (h) {\n    return this.createWrap(h, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/DateInput/DateInput.js",
    "content": "import input from '../internal/mixins/input';\nimport keyboardFocus from '../internal/directives/keyboard-focus';\nimport { DatePicker, TimePicker, DateTimePicker } from '../Picker';\nimport PickerMixin from '../Picker/mixins/props';\nimport Container from './Container';\nimport dayjs from 'dayjs';\nimport Button from '../Button/Button';\nimport keycode from 'keycode';\n\nconst DEFAULT_FORMAT = {\n  date: 'YYYY-MM-DD',\n  time: 'HH:mm',\n  year: 'YYYY',\n  month: 'YYYY-MM',\n  dateTime: 'YYYY-MM-DD HH:mm'\n};\n\nconst PickerProps = {\n  ...TimePicker.props,\n  ...DatePicker.props,\n  ...PickerMixin.props\n};\n\ndelete PickerProps.date;\ndelete PickerProps.time;\ndelete PickerProps.type;\ndelete PickerProps.format;\n\nexport default {\n  name: 'mu-date-input',\n  mixins: [{\n    ...input\n  }],\n  directives: {\n    keyboardFocus\n  },\n  model: {\n    prop: 'value',\n    event: 'input'\n  },\n  props: {\n    container: {\n      type: String,\n      default: 'popover', // dialog popover bottomSheet\n      validator (val) {\n        return val && ['dialog', 'popover', 'bottomSheet'].indexOf(val) !== -1;\n      }\n    },\n    type: {\n      type: String,\n      default: 'date' // date, time, year, month, dateTime, dateRange\n    },\n    format: {\n      type: String\n    },\n    rangeSeparator: {\n      type: String,\n      default: '—'\n    },\n    actions: Boolean,\n    clockType: TimePicker.props.format,\n    okLabel: {\n      type: String,\n      default: '确定'\n    },\n    cancelLabel: {\n      type: String,\n      default: '取消'\n    },\n    value: {},\n    valueFormat: String,\n    ...PickerProps\n  },\n  data () {\n    return {\n      open: false,\n      date: this.value ? dayjs(this.value).toDate() : new Date()\n    };\n  },\n  methods: {\n    changeValue () {\n      this.closePicker();\n      const value = this.valueFormat ? dayjs(this.date).format(this.valueFormat) : this.date;\n      this.$emit('input', value);\n      this.$emit('change', value);\n      if (this.muFormItem) this.muFormItem.onBlur();\n    },\n    focus (e) {\n      this.isFocused = true;\n      this.$emit('focus', e);\n    },\n    blur (e) {\n      this.isFocused = false;\n      this.$emit('blur', e);\n    },\n    closePicker () {\n      this.open = false;\n    },\n    handleDateChange (date) {\n      this.date = date;\n      if (!this.actions) this.changeValue();\n    },\n    handleTimeChange (date, mode, finished) {\n      this.date = date;\n      if (!finished || mode !== 'minute') return;\n      if (!this.actions) this.changeValue();\n    },\n    generateTextFieldProps () {\n      return this.generateProps(input.props);\n    },\n    generatePickerProps () {\n      return this.generateProps(PickerMixin.props);\n    },\n    generateDatePickerProps () {\n      return this.generateProps(DatePicker.props);\n    },\n    generateTimePickerProps () {\n      return this.generateProps(TimePicker.props);\n    },\n    generateProps (props) {\n      const obj = {};\n      Object.keys(props).forEach(key => {\n        obj[key] = this[key];\n      });\n      return obj;\n    },\n    createTextField (h) {\n      const dateStr = this.value ? dayjs(this.value).format(this.format ? this.format : DEFAULT_FORMAT[this.type]) : '';\n      const listeners = {\n        ...this.$listeners,\n        keydown: (e) => {\n          if (keycode(e) === 'tab') {\n            this.blur(e);\n            this.open = false;\n          }\n        },\n        click: () => (this.open = true),\n        focus: this.focus,\n        blur: this.blur\n      };\n      delete listeners.input;\n      delete listeners.change;\n      const placeholder = !this.labelFloat ? this.$attrs.placeholder : '';\n      return [\n        h('input', {\n          staticClass: 'mu-text-field-input',\n          ref: 'input',\n          attrs: {\n            tabindex: 0,\n            ...this.$attrs,\n            disabled: this.disabled,\n            placeholder,\n            readonly: true\n          },\n          domProps: {\n            value: dateStr\n          },\n          directives: [{\n            name: 'keyboard-focus',\n            value: () => (this.open = true)\n          }],\n          on: listeners\n        })\n      ];\n    },\n    createActions (h) {\n      if (!this.actions) return;\n      return h('div', {\n        staticClass: `mu-picker-actions`\n      }, [\n        h(Button, {\n          props: {\n            flat: true,\n            color: 'primary'\n          },\n          on: {\n            click: this.closePicker\n          }\n        }, this.cancelLabel),\n        h(Button, {\n          props: {\n            flat: true,\n            color: 'primary'\n          },\n          on: {\n            click: this.changeValue\n          }\n        }, this.okLabel)\n      ]);\n    },\n    createPicker (h) {\n      switch (this.type) {\n        case 'date':\n        case 'year':\n        case 'month':\n          return h(DatePicker, {\n            props: {\n              ...this.generateDatePickerProps(),\n              ...this.generatePickerProps(),\n              type: this.type === 'month' ? 'month' : this.type === 'year' ? 'year' : 'date',\n              date: this.date\n            },\n            on: {\n              change: this.handleDateChange\n            },\n            style: {\n              width: this.container === 'bottomSheet' ? 'auto' : ''\n            },\n            scopedSlots: {\n              day: this.$scopedSlots.day\n            }\n          }, [this.createActions(h)]);\n        case 'dateTime':\n          return h(DateTimePicker, {\n            props: {\n              ...this.generateDatePickerProps(),\n              ...this.generateTimePickerProps(),\n              ...this.generatePickerProps(),\n              format: this.clockType,\n              date: this.date\n            },\n            scopedSlots: {\n              day: this.$scopedSlots.day\n            },\n            on: {\n              change: this.handleTimeChange\n            },\n            style: {\n              width: this.container === 'bottomSheet' ? 'auto' : ''\n            }\n          }, [this.createActions(h)]);\n        case 'time':\n          return h(TimePicker, {\n            props: {\n              ...this.generateTimePickerProps(),\n              ...this.generatePickerProps(),\n              time: this.date,\n              format: this.clockType\n            },\n            on: {\n              change: this.handleTimeChange\n            },\n            style: {\n              width: this.container === 'bottomSheet' ? 'auto' : ''\n            }\n          }, [this.createActions(h)]);\n      }\n    }\n  },\n  render (h) {\n    return this.createInput(h, {\n      staticClass: 'mu-text-field',\n      ref: 'content'\n    }, [\n      this.createTextField(h),\n      this.$slots.default,\n      h(Container, {\n        props: {\n          container: this.container,\n          open: this.open,\n          trigger: this.$el ? this.$el.querySelector('.mu-text-field') : undefined\n        },\n        ref: 'popover',\n        on: {\n          close: this.closePicker\n        }\n      }, [this.createPicker(h)])\n    ]);\n  },\n  beforeDestroy () {\n    this.closePicker();\n  },\n  watch: {\n    value (val) {\n      this.date = val ? dayjs(val).toDate() : undefined;\n    }\n  }\n};\n"
  },
  {
    "path": "src/DateInput/index.js",
    "content": "import DateInput from './DateInput';\nimport '../styles/components/date-input.less';\n\nDateInput.install = function (Vue) {\n  Vue.component(DateInput.name, DateInput);\n};\n\nexport default DateInput;\n"
  },
  {
    "path": "src/Dialog/Dialog.js",
    "content": "import popup from '../internal/mixins/popup';\nimport resize from '../internal/directives/resize';\nimport { convertClass, getWidth } from '../utils';\n\nexport default {\n  name: 'mu-dialog',\n  mixins: [popup],\n  directives: {\n    resize\n  },\n  props: {\n    dialogClass: [String, Array, Object],\n    title: String,\n    scrollable: Boolean,\n    padding: { // 设置scrollable 之后dailog 框距离顶部和底部的值\n      type: Number,\n      default: 64\n    },\n    fullscreen: Boolean,\n    width: [String, Number],\n    maxWidth: [String, Number],\n    lockScroll: {\n      type: Boolean,\n      default: true\n    },\n    transition: {\n      type: String,\n      default: 'scale',\n      validator (val) {\n        return ['slide-top', 'slide-bottom', 'slide-left', 'slide-right', 'fade', 'scale'];\n      }\n    }\n  },\n  mounted () {\n    this.setMaxDialogContentHeight();\n  },\n  updated () {\n    this.$nextTick(() => {\n      this.setMaxDialogContentHeight();\n    });\n  },\n  methods: {\n    handleWrapperClick (e) {\n      if (this.$el !== e.target) return;\n      this.overlayClick(e);\n    },\n    setMaxDialogContentHeight () {\n      const dialogEl = this.$refs.dialog;\n      if (!dialogEl) return;\n      if (!this.scrollable) {\n        dialogEl.style.maxHeight = '';\n        return;\n      }\n      const maxDialogContentHeight = window.innerHeight - 2 * this.padding;\n      const { footer, title, elBody } = this.$refs;\n      if (elBody) {\n        let maxBodyHeight = maxDialogContentHeight;\n        if (footer) maxBodyHeight -= footer.offsetHeight;\n        if (title) maxBodyHeight -= title.offsetHeight;\n        elBody.style.maxHeight = maxBodyHeight + 'px';\n      }\n      dialogEl.style.maxHeight = maxDialogContentHeight + 'px';\n    }\n  },\n  watch: {\n    open (newValue) {\n      if (!newValue) return;\n      this.$nextTick(() => {\n        this.setMaxDialogContentHeight();\n        const dialogEl = this.$refs.dialog;\n        if (!dialogEl) return;\n        dialogEl.focus();\n      });\n    }\n  },\n  render (h) {\n    const hasTitleSlots = this.$slots.title && this.$slots.title.length > 0;\n    const isShowTitle = this.title || hasTitleSlots;\n    const dialogTitle = isShowTitle ? h('div', {\n      staticClass: 'mu-dialog-title',\n      ref: 'title'\n    }, hasTitleSlots ? this.$slots.title : this.title) : undefined;\n\n    const dialogBody = h('div', {\n      staticClass: 'mu-dialog-body',\n      ref: 'elBody'\n    }, this.$slots.default);\n\n    const dialogActions = this.$slots.actions && this.$slots.actions.length > 0 ? h('div', {\n      staticClass: 'mu-dialog-actions',\n      ref: 'footer'\n    }, this.$slots.actions) : undefined;\n\n    const data = {\n      staticClass: 'mu-dialog ' + convertClass(this.dialogClass).join(' '),\n      attrs: {\n        tabindex: -1\n      },\n      class: {\n        'mu-dialog-fullscreen': this.fullscreen,\n        'mu-dialog-scrollable': this.scrollable,\n        [`mu-${this.transition}`]: true\n      },\n      ref: 'dialog'\n    };\n\n    if (!this.fullscreen) {\n      data.style = {\n        'max-width': this.maxWidth === 'auto' ? undefined : getWidth(this.maxWidth),\n        'width': this.width === 'auto' ? undefined : getWidth(this.width)\n      };\n    }\n    const dialog = h('div', data, [dialogTitle, dialogBody, dialogActions]);\n\n    return this.open ? h('transition', {\n      props: {\n        name: `mu-dialog-transition`\n      }\n    }, [\n      h('div', {\n        staticClass: 'mu-dialog-wrapper',\n        directives: [{\n          name: 'resize',\n          value: () => this.setMaxDialogContentHeight()\n        }],\n        style: {\n          'z-index': this.zIndex\n        },\n        on: {\n          click: this.handleWrapperClick\n        }\n      }, [dialog])\n    ]) : null;\n  }\n};\n"
  },
  {
    "path": "src/Dialog/index.js",
    "content": "import '../styles/components/dialog.less';\nimport theme from '../theme';\nimport DialogTheme from './theme';\nimport Dialog from './Dialog';\n\nDialog.install = function (Vue) {\n  Vue.component(Dialog.name, Dialog);\n};\n\ntheme.addCreateTheme(DialogTheme);\nexport default Dialog;\n"
  },
  {
    "path": "src/Dialog/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\n\nexport default (theme) => {\n  return `\n  .mu-dialog {\n    background-color: ${theme.background.paper};\n  }\n  .mu-dialog-scrollable .mu-dialog-title {\n    border-bottom-color: ${theme.divider};\n  }\n  .mu-dialog-scrollable .mu-dialog-actions {\n    border-top-color: ${theme.divider};\n  }\n  .mu-dialog-title {\n    color: ${theme.text.primary};\n  }\n  .mu-dialog-body {\n    color: ${fade(theme.text.primary, 0.6)};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Divider/Divider.js",
    "content": "export default {\n  name: 'mu-divider',\n  functional: true,\n  props: {\n    inset: Boolean,\n    shallowInset: Boolean\n  },\n  render (h, { data, props }) {\n    data.staticClass = `${data.staticClass || ''} mu-divider ${props.inset ? 'inset' : ''} ${props.shallowInset ? 'shallow-inset' : ''}`;\n\n    return h('hr', data);\n  }\n};\n"
  },
  {
    "path": "src/Divider/index.js",
    "content": "import '../styles/components/divider.less';\nimport theme from '../theme';\nimport DividerTheme from './theme';\nimport Divider from './Divider';\n\nDivider.install = function (Vue) {\n  Vue.component(Divider.name, Divider);\n};\n\ntheme.addCreateTheme(DividerTheme);\nexport default Divider;\n"
  },
  {
    "path": "src/Divider/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-divider {\n    background-color: ${theme.divider};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Drawer/Drawer.js",
    "content": "import Paper from '../Paper';\nimport PopupManager from '../internal/mixins/popup/manager';\nimport { getZIndex } from '../internal/mixins/popup/utils';\nimport { getWidth } from '../utils';\n\nconst transitionEvents = ['msTransitionEnd', 'mozTransitionEnd', 'oTransitionEnd', 'webkitTransitionEnd', 'transitionend'];\nexport default {\n  name: 'mu-drawer',\n  props: {\n    right: Boolean,\n    open: Boolean,\n    docked: {\n      type: Boolean,\n      default: true\n    },\n    lockScroll: {\n      type: Boolean,\n      default: true\n    },\n    width: [Number, String],\n    zDepth: {\n      type: Number,\n      default: 16\n    }\n  },\n  data () {\n    return {\n      overlayZIndex: getZIndex(),\n      zIndex: getZIndex()\n    };\n  },\n  computed: {\n    drawerStyle () {\n      return {\n        width: getWidth(this.width),\n        'z-index': this.docked ? '' : this.zIndex\n      };\n    },\n    overlay () {\n      return !this.docked;\n    }\n  },\n  mounted () {\n    if (this.open && !this.docked) PopupManager.open(this);\n    this.bindTransition();\n  },\n  methods: {\n    overlayClick () {\n      this.close('overlay');\n    },\n    escPress (e) {\n      if (this.docked) return;\n      this.close('esc');\n    },\n    close (reason) {\n      this.$emit('update:open', false);\n      this.$emit('close', reason);\n    },\n    bindTransition () {\n      this.handleTransition = (e) => {\n        if (e.propertyName !== 'transform') return;\n        this.$emit(this.open ? 'show' : 'hide');\n      };\n      transitionEvents.forEach((eventName) => {\n        this.$el.addEventListener(eventName, this.handleTransition);\n      });\n    },\n    unBindTransition () {\n      if (!this.handleTransition) return;\n      transitionEvents.forEach((eventName) => {\n        this.$el.removeEventListener(eventName, this.handleTransition);\n      });\n    },\n    resetZIndex () {\n      this.overlayZIndex = getZIndex();\n      this.zIndex = getZIndex();\n    }\n  },\n  beforeDestroy () {\n    PopupManager.close(this);\n    this.unBindTransition();\n  },\n  watch: {\n    open (val) {\n      if (val && !this.docked) {\n        PopupManager.open(this);\n      } else {\n        PopupManager.close(this);\n      }\n    },\n    docked (val, oldVal) {\n      if (val && !oldVal) {\n        PopupManager.close(this);\n      }\n    }\n  },\n  render (h) {\n    return h(Paper, {\n      class: {\n        'mu-drawer': true,\n        'is-open': this.open,\n        'is-right': this.right\n      },\n      style: this.drawerStyle,\n      props: {\n        zDepth: this.zDepth\n      }\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/Drawer/index.js",
    "content": "import '../styles/components/drawer.less';\nimport theme from '../theme';\nimport DrawerTheme from './theme';\nimport Drawer from './Drawer';\n\nDrawer.install = function (Vue) {\n  Vue.component(Drawer.name, Drawer);\n};\n\ntheme.addCreateTheme(DrawerTheme);\nexport default Drawer;\n"
  },
  {
    "path": "src/Drawer/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-drawer {\n    background-color: ${theme.background.paper};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/ExpansionPanel/ExpansionPanel.js",
    "content": "import Paper from '../Paper';\nimport Button from '../Button';\nimport { ExpandTransition } from '../internal/transitions';\n\nexport default {\n  name: 'mu-expansion-panel',\n  props: {\n    expand: Boolean,\n    zDepth: {\n      type: Number,\n      default: 2\n    }\n  },\n  data () {\n    return {\n      show: this.expand\n    };\n  },\n  methods: {\n    createToggleIcon (h) {\n      return h('svg', {\n        staticClass: '',\n        attrs: {\n          viewBox: '0 0 24 24'\n        }\n      }, [\n        h('g', {}, [\n          h('path', {\n            attrs: {\n              d: 'M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'\n            }\n          })\n        ])\n      ]);\n    },\n    createHeader (h) {\n      return h('div', {\n        staticClass: 'mu-expansion-panel-header',\n        on: {\n          click: () => {\n            this.show = !this.show;\n            this.$emit('update:expand', this.show);\n            this.$emit('change', this.show);\n          }\n        }\n      }, [\n        this.$slots.header,\n        h(Button, {\n          staticClass: 'mu-expansion-toggle-btn',\n          props: {\n            icon: true\n          },\n          attrs: {\n            tabindex: -1\n          }\n        }, [this.createToggleIcon(h)])\n      ]);\n    },\n    createContainer (h) {\n      return h(ExpandTransition, {}, [\n        h('div', {\n          staticClass: 'mu-expansion-panel-container',\n          directives: [{\n            name: 'show',\n            value: this.show\n          }]\n        }, [\n          this.createContent(h),\n          this.createActions(h)\n        ])\n      ]);\n    },\n    createContent (h) {\n      return h('div', {\n        staticClass: 'mu-expansion-panel-content'\n      }, this.$slots.default);\n    },\n    createActions (h) {\n      return this.$slots.action && this.$slots.action.length > 0\n        ? h('div', {\n          staticClass: 'mu-expansion-panel-actions'\n        }, this.$slots.action)\n        : undefined;\n    }\n  },\n  render (h) {\n    return h(Paper, {\n      staticClass: 'mu-expansion-panel',\n      class: {\n        'mu-expansion-panel__expand': this.show\n      },\n      props: {\n        zDepth: this.zDepth,\n        rounded: false\n      }\n    }, [\n      this.createHeader(h),\n      this.createContainer(h)\n    ]);\n  },\n  watch: {\n    expand (val) {\n      this.show = val;\n    }\n  }\n};\n"
  },
  {
    "path": "src/ExpansionPanel/index.js",
    "content": "import '../styles/components/expansion-panel.less';\nimport theme from '../theme';\nimport ExpansionPanelTheme from './theme';\nimport ExpansionPanel from './ExpansionPanel';\n\nExpansionPanel.install = function (Vue) {\n  Vue.component(ExpansionPanel.name, ExpansionPanel);\n};\n\ntheme.addCreateTheme(ExpansionPanelTheme);\nexport default ExpansionPanel;\n"
  },
  {
    "path": "src/ExpansionPanel/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-expansion-panel {\n    color: ${theme.text.primary};\n    border-top-color: ${theme.divider};\n  }\n  .mu-expansion-toggle-btn {\n    color: ${theme.text.secondary};\n  }\n  .mu-expansion-panel-actions {\n    border-top-color: ${theme.divider};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Form/Form.js",
    "content": "import { isPromise, getObjAttr } from '../utils';\nexport default {\n  name: 'mu-form',\n  provide () {\n    return {\n      muForm: this\n    };\n  },\n  props: {\n    model: {\n      type: Object,\n      required: true\n    },\n    inline: Boolean,\n    labelWidth: [String, Number],\n    labelPosition: {\n      type: String,\n      default: 'top',\n      validator (val) {\n        return ['left', 'right', 'top'].indexOf(val) !== -1;\n      }\n    },\n    autoValidate: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      items: []\n    };\n  },\n  methods: {\n    getValue (prop) {\n      return getObjAttr(this.model, prop);\n    },\n    addItem (item) {\n      this.items.push(item);\n    },\n    removeItem (item) {\n      const index = this.items.indexOf(item);\n      if (index === -1) return;\n      this.items.splice(index, 1);\n    },\n    validate () {\n      let valid = true;\n      const promises = [];\n      for (let i = 0; i < this.items.length; i++) {\n        const item = this.items[i];\n        const result = item.validate();\n        if (isPromise(result)) {\n          promises.push(result);\n          continue;\n        }\n        if (!result) {\n          valid = false;\n        }\n      }\n      if (promises.length > 0 && typeof Promise !== 'undefined') {\n        return Promise.all([\n          valid ? Promise.resolve(valid) : Promise.reject(valid),\n          ...promises\n        ]).then(\n          () => true,\n          () => false\n        );\n      }\n      return typeof Promise !== 'undefined' ? Promise.resolve(valid) : valid;\n    },\n    clear () {\n      this.items.forEach((item) => (item.errorMessage = ''));\n    }\n  },\n  render (h) {\n    return h('form', {\n      staticClass: 'mu-form',\n      class: {\n        'mu-form__inline': this.inline\n      },\n      on: this.$listeners\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/Form/FormItem.js",
    "content": "import Form from './Form';\nimport Icon from '../Icon';\nimport { getWidth, isPromise, isObject } from '../utils';\nimport { SlideTopTransition } from '../internal/transitions';\n\nexport default {\n  name: 'mu-form-item',\n  inject: ['muForm'],\n  provide () {\n    return {\n      muFormItem: this\n    };\n  },\n  props: {\n    label: String,\n    labelFloat: Boolean,\n    icon: String,\n    prop: String,\n    labelWidth: Form.props.labelWidth,\n    rules: Array,\n    helpText: String,\n    errorText: String,\n    labelPosition: String\n  },\n  data () {\n    return {\n      focus: false,\n      errorMessage: this.errorText\n    };\n  },\n  mounted () {\n    this.setHelpLeft();\n    this.muForm.addItem(this);\n  },\n  updated () {\n    setTimeout(() => this.setHelpLeft(), 0);\n  },\n  beforeDestroy () {\n    this.muForm.removeItem(this);\n  },\n  methods: {\n    validate () {\n      if (!this.rules || this.rules.length === 0) return true;\n      const promises = [];\n      const promiseMessages = [];\n      for (let i = 0; i < this.rules.length; i++) {\n        const rule = this.rules[i];\n        const result = rule.validate(this.muForm.getValue(this.prop), this.muForm.model);\n        if (isPromise(result)) {\n          promises.push(result);\n          promiseMessages.push(rule.message);\n          continue;\n        }\n        if (!this.validateResult(result, rule.message)) return false;\n      }\n\n      // promise 处理\n      if (promises.length > 0 && typeof Promise !== 'undefined') {\n        return Promise.all(promises).then((results) => {\n          for (let i = 0; i < results.length; i++) {\n            const valid = this.validateResult(results[i], promiseMessages[i]);\n            if (!valid) return Promise.reject(false);\n          }\n          this.errorMessage = '';\n          return true;\n        });\n      }\n\n      this.errorMessage = '';\n      return true;\n    },\n    validateResult (result, message) {\n      switch (true) {\n        case isObject(result) && !result.valid:\n          this.errorMessage = result.message || message;\n          return false;\n        case !result:\n          this.errorMessage = message;\n          return false;\n      }\n      return true;\n    },\n    onFocus () {\n      this.focus = true;\n    },\n    onBlur () {\n      this.focus = false;\n      if (this.muForm.autoValidate) this.validate();\n    },\n    createIcon (h) {\n      if (!this.icon) return;\n      return h(Icon, {\n        staticClass: 'mu-form-item-icon',\n        props: {\n          value: this.icon\n        }\n      });\n    },\n    createContent (h) {\n      return h('div', {\n        staticClass: 'mu-form-item-content',\n        ref: 'content'\n      }, this.$slots.default);\n    },\n    createLabel (h) {\n      const labelWidth = getWidth(this.labelWidth || this.muForm.labelWidth);\n      const value = this.muForm.model && this.prop && this.muForm.model[this.prop];\n      return h('div', {\n        staticClass: 'mu-form-item-label',\n        class: {\n          'is-float': this.labelFloat && !this.focus && !value && value !== 0\n        },\n        style: {\n          width: labelWidth\n        }\n      }, this.$slots.label || this.label);\n    },\n    createHelpText (h) {\n      if (!this.helpText && !this.errorMessage) return;\n      return h('div', {\n        staticClass: 'mu-form-item-help',\n        ref: 'help'\n      }, this.errorMessage || this.helpText);\n    },\n    setHelpLeft () {\n      if (!this.$refs.help || !this.$refs.content) return;\n      this.$refs.help.style.left = this.$refs.content.offsetLeft + 'px';\n    }\n  },\n  render (h) {\n    const labelPosition = this.labelPosition || this.muForm.labelPosition;\n    return h('div', {\n      staticClass: 'mu-form-item',\n      class: {\n        'mu-form-item__float-label': this.labelFloat,\n        'mu-form-item__label-left': labelPosition === 'left',\n        'mu-form-item__label-right': labelPosition === 'right',\n        'mu-form-item__has-icon': !!this.icon && labelPosition === 'top',\n        'mu-form-item__has-label': !!this.label || (this.$slots.label && this.$slots.label.length > 0),\n        'mu-form-item__focus': this.focus,\n        'mu-form-item__error': !!this.errorMessage\n      }\n    }, [\n      this.createLabel(h),\n      labelPosition === 'top' ? this.createIcon(h) : undefined,\n      h(SlideTopTransition, {}, [this.createHelpText(h)]),\n      this.createContent(h)\n    ]);\n  },\n  watch: {\n    errorText (val) {\n      this.errorMessage = val;\n    },\n    rules () {\n      if (this.errorMessage) this.validate();\n    }\n  }\n};\n"
  },
  {
    "path": "src/Form/index.js",
    "content": "import '../styles/components/form.less';\nimport theme from '../theme';\nimport FormTheme from './theme';\nimport Form from './Form';\nimport FormItem from './FormItem';\n\nForm.install = function (Vue) {\n  Vue.component(Form.name, Form);\n  Vue.component(FormItem.name, FormItem);\n};\n\ntheme.addCreateTheme(FormTheme);\nexport { Form, FormItem };\nexport default Form;\n"
  },
  {
    "path": "src/Form/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-form-item {\n    color: ${theme.text.secondary};\n  }\n\n  .mu-form-item__focus {\n    color: ${theme.primary};\n  }\n\n  .mu-form-item__error {\n    color: ${theme.error};\n  }\n  .mu-form-item-help {\n    color: ${theme.text.secondary};\n  }\n  .mu-form-item__error .mu-form-item-help {\n    color: ${theme.error};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Grid/Col.js",
    "content": "import { props, generatePropsClass } from './utils';\n\nfunction createColClass (props) {\n  const classNames = [];\n  if (props.span) classNames.push('col-' + props.span);\n  if (props.sm) classNames.push('col-sm-' + props.sm);\n  if (props.md) classNames.push('col-md-' + props.md);\n  if (props.lg) classNames.push('col-lg-' + props.lg);\n  if (props.xl) classNames.push('col-xl-' + props.xl);\n  if (props.order) classNames.push('order-' + props.order);\n  if (props.offset) classNames.push('offset-' + props.offset);\n  return classNames.join(' ');\n}\n\nexport default {\n  name: 'mu-col',\n  functional: true,\n  props: {\n    tag: String,\n    alignSelf: props.alignSelf,\n    fill: Boolean,\n    span: [String, Number], // auto 1-12\n    sm: [String, Number], // auto 1-12\n    md: [String, Number], // auto 1-12\n    lg: [String, Number], // auto 1-12\n    xl: [String, Number], // auto 1-12\n    order: [String, Number], // first last 0-12\n    offset: [String, Number] // 1-11\n  },\n  render (h, { data, props, children }) {\n    const flex = generatePropsClass(props);\n    const col = createColClass(props);\n    data.staticClass = ['col', col, flex, data.staticClass || ''].join(' ');\n    return h(props.tag || 'div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/Grid/Container.js",
    "content": "export default {\n  name: 'mu-container',\n  functional: true,\n  props: {\n    fluid: Boolean\n  },\n  render (h, { data, props, children }) {\n    data.staticClass = `${data.staticClass || ''} ${props.fluid ? 'container-fluid' : 'container'}`;\n    return h('div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/Grid/Flex.js",
    "content": "import { props, generatePropsClass } from './utils';\nexport default {\n  name: 'mu-flex',\n  functional: true,\n  props: {\n    tag: String,\n    inline: Boolean,\n    ...props\n  },\n  render (h, { data, props, children }) {\n    const flexClass = generatePropsClass(props);\n    data.staticClass = `${props.inline ? 'd-inline-flex' : 'd-flex'} ${flexClass} ${data.staticClass || ''}`;\n    return h(props.tag || 'div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/Grid/Row.js",
    "content": "import { props, generatePropsClass } from './utils';\n\nexport default {\n  name: 'mu-row',\n  functional: true,\n  props: {\n    ...props,\n    tag: String,\n    gutter: Boolean\n  },\n  render (h, { data, props, children }) {\n    const gutter = !props.gutter ? 'no-gutters' : '';\n    const flex = generatePropsClass(props);\n\n    data.staticClass = ['row', gutter, flex, data.staticClass || ''].join(' ');\n    return h(props.tag || 'div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/Grid/index.js",
    "content": "import '../styles/components/bootstrap-grid.less';\nimport Container from './Container';\nimport Row from './Row';\nimport Col from './Col';\nimport Flex from './Flex';\n\nexport { Container, Row, Col };\nexport default {\n  install (Vue) {\n    Vue.component(Container.name, Container);\n    Vue.component(Row.name, Row);\n    Vue.component(Col.name, Col);\n    Vue.component(Flex.name, Flex);\n  }\n};\n"
  },
  {
    "path": "src/Grid/utils.js",
    "content": "function createEnumProps (type, def, enums) {\n  return {\n    type,\n    default: def,\n    validator (val) {\n      return enums.indexOf(val) !== -1;\n    }\n  };\n}\n\nexport const props = {\n  direction: createEnumProps(String, 'row', ['row', 'column', 'row-reverse', 'column-reverse']),\n  wrap: createEnumProps(String, '', ['', 'wrap', 'nowrap', 'wrap-reverse']),\n  fill: Boolean,\n  justifyContent: createEnumProps(String, 'start', ['start', 'center', 'end', 'between', 'around']),\n  alignItems: createEnumProps(String, 'start', ['start', 'center', 'end', 'baseline', 'stretch']),\n  alignContent: createEnumProps(String, '', ['', 'start', 'center', 'end', 'between', 'around', 'stretch']),\n  alignSelf: createEnumProps(String, '', ['', 'auto', 'start', 'center', 'end', 'baseline', 'stretch'])\n};\n\nexport function generatePropsClass (props) {\n  const classNames = [];\n  if (props.direction) classNames.push('flex-' + props.direction);\n  if (props.wrap) classNames.push('flex-' + props.wrap);\n  if (props.fill) classNames.push('flex-fill');\n  if (props.justifyContent) classNames.push('justify-content-' + props.justifyContent);\n  if (props.alignItems) classNames.push('align-items-' + props.alignItems);\n  if (props.alignContent) classNames.push('align-content-' + props.alignContent);\n  if (props.alignSelf) classNames.push('align-self-' + props.alignSelf);\n  return classNames.join(' ');\n}\n"
  },
  {
    "path": "src/GridList/GridList.js",
    "content": "export default {\n  name: 'mu-grid-list',\n  provide () {\n    return {\n      getGridListCellHeight: this.getGridListCellHeight,\n      getGridListCols: this.getGridListCols,\n      getGridListPadding: this.getGridListPadding\n    };\n  },\n  props: {\n    cellHeight: {\n      type: Number,\n      default: 180\n    },\n    cols: {\n      type: Number,\n      default: 2\n    },\n    padding: {\n      type: Number,\n      default: 4\n    }\n  },\n  methods: {\n    getGridListCellHeight () {\n      return this.cellHeight;\n    },\n    getGridListCols () {\n      return this.cols;\n    },\n    getGridListPadding () {\n      return this.padding;\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-grid-list',\n      style: {\n        margin: -this.padding / this.cols + 'px'\n      },\n      on: this.$listeners\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/GridList/GridTile.js",
    "content": "export default {\n  name: 'mu-grid-tile',\n  inject: ['getGridListCellHeight', 'getGridListCols', 'getGridListPadding'],\n  props: {\n    actionPosition: {\n      type: String,\n      default: 'right',\n      validator (val) {\n        return ['left', 'right'].indexOf(val) !== -1;\n      }\n    },\n    cols: {\n      type: Number,\n      default: 1\n    },\n    rows: {\n      type: Number,\n      default: 1\n    },\n    title: {\n      type: String\n    },\n    subTitle: {\n      type: String\n    },\n    titlePosition: {\n      type: String,\n      default: 'bottom',\n      validator (val) {\n        return ['top', 'bottom'].indexOf(val) !== -1;\n      }\n    }\n  },\n  computed: {\n    tileClass () {\n      return {\n        'is-top': this.titlePosition === 'top',\n        'action-left': this.actionPosition === 'left',\n        'multiline': this.$slots.title && this.$slots.subTitle && this.$slots.title.length > 0 && this.$slots.subTitle.length > 0\n      };\n    },\n    style () {\n      return {\n        width: (this.cols / this.getGridListCols() * 100) + '%',\n        padding: (this.getGridListPadding() / 2) + 'px',\n        height: (this.getGridListCellHeight() * this.rows) + 'px'\n      };\n    }\n  },\n  render (h) {\n    const title = h('div', {\n      staticClass: 'mu-grid-tile-title'\n    }, this.$slots.title && this.$slots.title.length > 0 ? this.$slots.title : this.title);\n\n    const subTitle = h('div', {\n      staticClass: 'mu-grid-tile-subtitle'\n    }, this.$slots.subTitle && this.$slots.subTitle.length > 0 ? this.$slots.subTitle : this.subTitle);\n\n    return h('div', {\n      staticClass: 'mu-grid-tile-wrapper',\n      style: this.style,\n      on: this.$listeners\n    }, [\n      h('div', {\n        staticClass: 'mu-grid-tile',\n        class: this.tileClass\n      }, [\n        this.$slots.default,\n        h('div', { staticClass: 'mu-grid-tile-titlebar' }, [\n          h('div', { staticClass: 'mu-grid-tile-title-container' }, [title, subTitle]),\n          h('div', { staticClass: 'mu-grid-tile-action' }, this.$slots.action)\n        ])\n      ])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/GridList/index.js",
    "content": "import '../styles/components/grid-list.less';\nimport theme from '../theme';\nimport GridListTheme from './theme';\nimport GridList from './GridList';\nimport GridTile from './GridTile';\n\nGridList.install = function (Vue) {\n  Vue.component(GridList.name, GridList);\n  Vue.component(GridTile.name, GridTile);\n};\n\ntheme.addCreateTheme(GridListTheme);\nexport { GridList, GridTile };\nexport default GridList;\n"
  },
  {
    "path": "src/GridList/theme.js",
    "content": "export default (theme) => {\n  return ``;\n};\n"
  },
  {
    "path": "src/Helpers/index.js",
    "content": "import TouchRipple from '../internal/TouchRipple';\nimport {\n  ExpandTransition,\n  FadeTransition,\n  SlideTopTransition,\n  SlideBottomTransition,\n  SlideLeftTransition,\n  SlideRightTransition,\n  ScaleTransition\n} from '../internal/transitions';\nimport clickOutside from '../internal/directives/click-outside';\nimport resize from '../internal/directives/resize';\nimport scroll from '../internal/directives/scroll';\nimport elevation from '../internal/directives/elevation';\n\nexport default {\n  install (Vue) {\n    Vue.component('mu-ripple', TouchRipple);\n    [\n      ExpandTransition,\n      FadeTransition,\n      SlideTopTransition,\n      SlideBottomTransition,\n      SlideLeftTransition,\n      SlideRightTransition,\n      ScaleTransition\n    ].forEach(transition => Vue.component(transition.name, transition));\n    Vue.directive(clickOutside.name, clickOutside);\n    Vue.directive(resize.name, resize);\n    Vue.directive(scroll.name, scroll);\n    Vue.directive(elevation.name, elevation);\n  }\n};\n"
  },
  {
    "path": "src/Icon/Icon.js",
    "content": "import color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-icon',\n  functional: true,\n  props: {\n    value: String,\n    left: Boolean,\n    right: Boolean,\n    size: [Number, String],\n    color: String\n  },\n  render (h, { data, props }) {\n    if (!props.value) return null;\n    data.style = data.style || {};\n    data.style = {\n      ...data.style,\n      'user-select': 'none',\n      'font-size': props.size + 'px',\n      'width': props.size + 'px',\n      'height': props.size + 'px',\n      'color': color.methods.getColor(props.color)\n    };\n    const isMaterial = props.value.indexOf(':') !== 0;\n    const text = isMaterial ? props.value : '';\n\n    data.staticClass = `${data.staticClass || ''} mu-icon ${color.methods.getNormalColorClass(props.color, true)} ${isMaterial ? 'material-icons' : props.value.substring(1)} ${props.left ? 'mu-icon-left' : ''} ${props.right ? 'mu-icon-right' : ''}`;\n    return h('i', data, text);\n  }\n};\n"
  },
  {
    "path": "src/Icon/index.js",
    "content": "import Icon from './Icon';\n\nIcon.install = function (Vue) {\n  Vue.component(Icon.name, Icon);\n};\n\nexport default Icon;\n"
  },
  {
    "path": "src/List/List.js",
    "content": "export default {\n  name: 'mu-list',\n  provide () {\n    return {\n      listItemClick: this.listItemClick,\n      getNestedLevel: this.getNestedLevel,\n      getToggleNested: this.getToggleNested,\n      getToggleNestedType: this.getToggleNestedType,\n      getListValue: this.getListValue,\n      getNestedIndent: this.getNestedIndent\n    };\n  },\n  props: {\n    nestedLevel: {\n      type: Number,\n      default: 0\n    },\n    textline: {\n      type: String,\n      default: '',\n      validator (val) {\n        return ['', 'two-line', 'three-line'].indexOf(val) !== -1;\n      }\n    },\n    nestedIndent: {\n      type: Boolean,\n      default: true\n    },\n    toggleNested: Boolean,\n    toggleNestedType: {\n      type: String,\n      default: 'expand',\n      validator (val) {\n        return ['expand', 'popover'].indexOf !== -1;\n      }\n    },\n    dense: Boolean,\n    value: {}\n  },\n  methods: {\n    listItemClick (item) {\n      this.$emit('change', item.value);\n      this.$emit('item-click', item);\n    },\n    getListValue () {\n      return this.value;\n    },\n    getNestedLevel () {\n      return this.nestedLevel;\n    },\n    getNestedIndent () {\n      return this.nestedIndent;\n    },\n    getToggleNested () {\n      return this.toggleNested;\n    },\n    getToggleNestedType () {\n      return this.toggleNestedType;\n    }\n  },\n  render (h) {\n    return h('ul', {\n      staticClass: 'mu-list',\n      class: {\n        ['mu-list-' + this.textline]: this.textline,\n        'mu-list-dense': this.dense\n      },\n      on: this.$listeners\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/List/ListAction.js",
    "content": "export default {\n  name: 'mu-list-item-action',\n  functional: true,\n  render (h, { data, props, children }) {\n    data.staticClass = `mu-item-action ${children && children.length > 1 ? 'is-more' : ''} ${data.staticClass || ''}`;\n    return h('div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/List/ListItem.js",
    "content": "import AbstractButton from '../internal/AbstractButton';\nimport route from '../internal/mixins/route';\nimport ripple from '../internal/mixins/ripple';\nimport ExpandTransition from '../internal/ExpandTransition';\nimport List from './List';\nimport Popover from '../Popover';\nimport { isNotNull } from '../utils';\n\nexport default {\n  name: 'mu-list-item',\n  mixins: [route, ripple],\n  inject: [\n    'listItemClick',\n    'getNestedLevel',\n    'getNestedIndent',\n    'getListValue',\n    'getToggleNested',\n    'getToggleNestedType'\n  ],\n  props: {\n    button: Boolean,\n    nestedListClass: [String, Object, Array],\n    open: {\n      type: Boolean,\n      default: true\n    },\n    avatar: Boolean,\n    nested: Boolean, // 是否允许嵌套\n    tabIndex: [String, Number],\n    value: {}\n  },\n  data () {\n    return {\n      nestedOpen: this.open\n    };\n  },\n  computed: {\n    nestedLevel () {\n      return this.getNestedLevel();\n    },\n    nestedIndent () {\n      return this.getNestedIndent();\n    },\n    toggleNested () {\n      return this.getToggleNested();\n    },\n    toggleNestedType () {\n      return this.getToggleNestedType();\n    }\n  },\n  created () {\n    if (this.toggleNestedType === 'popover' && this.nestedOpen) {\n      this.nestedOpen = false;\n    }\n  },\n  methods: {\n    handleClick (e) {\n      this.$emit('click', e);\n      this.listItemClick(this);\n      if (this.toggleNested) this.handleToggleNested();\n    },\n    handleKeyboardFocus (isFocus) {\n      this.$emit('keyboard-focus', isFocus);\n    },\n    handleHover (event) {\n      this.$emit('hover', event);\n    },\n    handleHoverExit (event) {\n      this.$emit('hover-exit', event);\n    },\n    handleToggleNested () {\n      this.nestedOpen = !this.nestedOpen;\n      this.$emit('toggle-nested', this.nestedOpen);\n    },\n    handleNestedClick (item) {\n      this.listItemClick(item);\n    },\n    createItem (h) {\n      const listValue = this.getListValue();\n      const nestedPadding = this.nestedIndent && this.toggleNestedType === 'expand' ? 18 * this.nestedLevel : 0;\n      const itemClass = [\n        'mu-item',\n        this.nestedOpen && this.nested ? 'mu-item__open' : '',\n        this.avatar ? 'has-avatar' : '',\n        this.textline,\n        isNotNull(listValue) && isNotNull(this.value) && listValue === this.value ? 'is-selected' : ''\n      ].join(' ');\n\n      return h(AbstractButton, {\n        class: 'mu-item-wrapper',\n        ref: 'button',\n        attrs: {\n          tabindex: this.tabIndex\n        },\n        props: {\n          containerElement: this.button ? 'a' : 'div',\n          wrapperClass: itemClass,\n          wrapperStyle: {\n            'margin-left': nestedPadding ? nestedPadding + 'px' : ''\n          },\n          disabled: !this.button,\n          ripple: this.button && this.ripple,\n          rippleColor: this.rippleColor,\n          rippleOpacity: this.rippleOpacity,\n          centerRipple: false,\n          ...this.generateRouteProps()\n        },\n        on: {\n          click: this.handleClick,\n          keyboardFocus: this.handleKeyboardFocus,\n          hover: this.handleHover,\n          hoverExit: this.handleHoverExit\n        }\n      }, this.$slots.default);\n    },\n    createNestedList (h) {\n      if (!this.nested) return null;\n      const list = h(List, {\n        class: this.nestedListClass,\n        props: {\n          nestedIndent: this.nestedIndent,\n          toggleNested: this.toggleNested,\n          toggleNestedType: this.toggleNestedType,\n          nestedLevel: this.nestedLevel + 1,\n          value: this.getListValue()\n        },\n        on: {\n          'item-click': this.handleNestedClick\n        }\n      }, this.$slots.nested);\n\n      switch (this.toggleNestedType) {\n        case 'expand':\n          return h(ExpandTransition, {}, [this.nestedOpen ? list : undefined]);\n        case 'popover':\n          return h(Popover, {\n            props: {\n              open: this.nestedOpen,\n              trigger: this.$el,\n              appendBody: false,\n              placement: 'right-start'\n            },\n            on: {\n              close: this.handleToggleNested\n            }\n          }, [list]);\n      }\n      return null;\n    }\n  },\n  render (h) {\n    return h('li', [this.createItem(h), this.createNestedList(h)]);\n  },\n  watch: {\n    open (val) {\n      this.nestedOpen = val;\n    },\n    nestedOpen (val) {\n      this.$emit('update:open', val);\n    }\n  }\n};\n"
  },
  {
    "path": "src/List/index.js",
    "content": "import '../styles/components/list.less';\nimport theme from '../theme';\nimport ListTheme from './theme';\nimport { createSimpleFunctional } from '../utils';\nimport List from './List';\nimport ListItem from './ListItem';\nimport ListAction from './ListAction';\n\nexport { List, ListItem, ListAction };\nexport const ListItemContent = createSimpleFunctional('mu-item-content', 'div', 'mu-list-item-content');\nexport const ListItemTitle = createSimpleFunctional('mu-item-title', 'div', 'mu-list-item-title');\nexport const ListItemSubTitle = createSimpleFunctional('mu-item-sub-title', 'div', 'mu-list-item-sub-title');\nexport const ListItemAfterText = createSimpleFunctional('mu-item-after-text', 'span', 'mu-list-item-after-text');\n\nList.install = function (Vue) {\n  Vue.component(List.name, List);\n  Vue.component(ListItem.name, ListItem);\n  Vue.component(ListAction.name, ListAction);\n  Vue.component(ListItemContent.name, ListItemContent);\n  Vue.component(ListItemTitle.name, ListItemTitle);\n  Vue.component(ListItemSubTitle.name, ListItemSubTitle);\n  Vue.component(ListItemAfterText.name, ListItemAfterText);\n};\n\ntheme.addCreateTheme(ListTheme);\nexport default List;\n"
  },
  {
    "path": "src/List/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\n\nexport default (theme) => {\n  return `\n  .mu-item-wrapper.hover {\n    background-color: ${fade(theme.text.primary, 0.1)};\n  }\n  .mu-item {\n    color: ${theme.text.primary};\n  }\n  .mu-item-action {\n    color: ${theme.text.secondary};\n  }\n  .mu-item.is-selected {\n    color: ${theme.primary};\n  }\n  .mu-item-sub-title {\n    color: ${theme.text.secondary};\n  }\n  .mu-item-after-text {\n   color: ${theme.text.secondary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/LoadMore/InfiniteScroll.js",
    "content": "import Circular from '../Progress/Circular';\nimport scroll from '../internal/directives/scroll';\nimport { getScrollTop } from '../utils/dom';\n\nexport default {\n  name: 'mu-infinite-scroll',\n  directives: {\n    scroll\n  },\n  props: {\n    loading: {\n      type: Boolean,\n      default: false\n    },\n    loadingText: {\n      type: String,\n      default: '正在加载...'\n    }\n  },\n  data () {\n    return {\n      target: null\n    };\n  },\n  mounted () {\n    this.target = this.$el;\n  },\n  methods: {\n    onScroll (scroller) {\n      if (this.loading) return;\n      const isWindow = scroller === window;\n      const scrollTop = getScrollTop(scroller);\n      const scrollHeight = isWindow ? document.documentElement.scrollHeight || document.body.scrollHeight : scroller.scrollHeight;\n      const h = scrollHeight - scrollTop - 5;\n      const sh = isWindow ? window.innerHeight : scroller.offsetHeight;\n      if (h <= sh) {\n        this.$emit('load');\n      }\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-infinite-scroll',\n      directives: [{\n        name: 'scroll',\n        value: {\n          callback: this.onScroll,\n          target: this.target\n        }\n      }]\n    }, [\n      h(Circular, {\n        props: {\n          size: 24\n        },\n        directives: [{\n          name: 'show',\n          value: this.loading\n        }]\n      }),\n      h('span', {\n        staticClass: 'mu-infinite-scroll-text',\n        directives: [{\n          name: 'show',\n          value: this.loading\n        }]\n      }, this.loadingText)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/LoadMore/LoadMore.js",
    "content": "import RefreshControl from './RefreshControl';\nimport InfiniteScroll from './InfiniteScroll';\nimport { isNotNull } from '../utils';\n\nexport default {\n  name: 'mu-load-more',\n  props: {\n    refreshing: Boolean,\n    ...InfiniteScroll.props,\n    loadedAll: Boolean\n  },\n  data () {\n    return {\n      trigger: null\n    };\n  },\n  mounted () {\n    this.trigger = this.$el;\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-load-more'\n    }, [\n      isNotNull(this.$listeners.refresh) ? h(RefreshControl, {\n        props: {\n          refreshing: this.refreshing,\n          trigger: this.trigger\n        },\n        on: {\n          refresh: () => this.$emit('refresh')\n        }\n      }) : undefined,\n      this.$slots.default,\n      isNotNull(this.$listeners.load) && !this.loadedAll ? h(InfiniteScroll, {\n        props: {\n          loading: this.loading,\n          loadingText: this.loadingText\n        },\n        on: {\n          load: () => this.$emit('load')\n        }\n      }) : undefined\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/LoadMore/RefreshControl.js",
    "content": "import Circular from '../Progress/Circular';\nimport { transitionEnd, getScrollEventTarget } from '../utils/dom';\nimport Drag from '../utils/drag';\n\nconst LENGTH = 130; // 下拉最大长度\nconst INITY = -68; // 初始化Y轴位置\n\nexport default {\n  name: 'mu-refresh-control',\n  props: {\n    refreshing: Boolean,\n    trigger: {}\n  },\n  data () {\n    return {\n      y: 0,\n      draging: false,\n      state: 'ready'\n    };\n  },\n  computed: {\n    refreshStyle () {\n      const style = {};\n      if (!this.refreshing && this.draging) {\n        const translate3d = 'translate3d(0, ' + (this.y + INITY) + 'px, 0) ';\n        style['-webkit-transform'] = style['transform'] = translate3d;\n      }\n      return style;\n    },\n    circularStyle () {\n      const style = {};\n      if (!this.refreshing && this.draging) {\n        const percentage = this.y / LENGTH;\n        const rotate = 'rotate(' + (360 * percentage) + 'deg)';\n        const opacity = this.y / Math.abs(INITY);\n        style['-webkit-transform'] = style['transform'] = rotate;\n        style['opacity'] = opacity;\n      }\n      return style;\n    },\n    refreshClass () {\n      const classNames = [];\n      switch (this.state) {\n        case 'ready':\n          classNames.push('mu-refresh-control-noshow');\n          break;\n        case 'dragStart':\n          classNames.push('mu-refresh-control-hide');\n          break;\n        case 'dragAnimate':\n          classNames.push('mu-refresh-control-animate');\n          classNames.push('mu-refresh-control-hide');\n          break;\n        case 'refreshAnimate':\n          classNames.push('mu-refresh-control-animate');\n          classNames.push('mu-refresh-control-noshow');\n          break;\n      }\n      if (this.refreshing) classNames.push('mu-refresh-control-refreshing');\n      return classNames;\n    }\n  },\n  mounted () {\n    this.bindDrag();\n  },\n  beforeDestory () {\n    this.unbindDrag();\n  },\n  methods: {\n    clearState () {\n      this.state = 'ready';\n      this.draging = false;\n      this.y = 0;\n    },\n    getScrollTop () {\n      const scroller = getScrollEventTarget(this.$el);\n      if (scroller === window) {\n        return Math.max(window.pageYOffset || 0, document.documentElement.scrollTop);\n      } else {\n        return scroller.scrollTop;\n      }\n    },\n    bindDrag () {\n      if (!this.trigger) return;\n      const drager = this.drager = new Drag(this.trigger);\n      this.state = 'ready';\n      drager.start(() => {\n        if (this.refreshing) return;\n        this.state = 'dragStart';\n        const scrollTop = this.getScrollTop();\n        if (scrollTop === 0) this.draging = true;\n      }).drag((pos, event) => {\n        const scrollTop = this.getScrollTop();\n        if (pos.y < 5 || this.refreshing || scrollTop !== 0) return; // 消除误差\n        if (scrollTop === 0 && !this.draging) {\n          this.draging = true;\n          drager.reset(event);\n        }\n        this.y = pos.y / 2;\n        if (this.y < 0) this.y = 1;\n        if (this.y > LENGTH) this.y = LENGTH;\n      }).end((pos, event) => {\n        if (!pos.y || pos.y < 5) {\n          this.clearState();\n          return; // 消除误差\n        }\n        const canRefresh = this.y + INITY > 0 && this.draging;\n        this.state = 'dragAnimate';\n        if (canRefresh) {\n          this.draging = false;\n          this.$emit('refresh');\n        } else {\n          this.y = 0;\n          transitionEnd(this.$el, this.clearState.bind(this));\n        }\n      });\n\n      // fix ios\n      this.handlePrevent = event => {\n        if (this.draging && this.y > 0) event.preventDefault();\n      };\n      this.handleTouchEnd = () => true;\n      this.trigger.addEventListener('touchmove', this.handlePrevent, { passive: false });\n      this.trigger.addEventListener('touchend', this.handleTouchEnd, { passive: false });\n    },\n    unbindDrag () {\n      if (!this.drager) return;\n      if (this.handlePrevent) {\n        this.trigger.removeEventListener('touchmove', this.handlePrevent);\n        this.trigger.removeEventListener('touchend', this.handleTouchEnd);\n      }\n      this.drager.destory();\n      this.drager = null;\n    },\n    createRefreshIcon (h) {\n      return this.refreshing\n        ? h(Circular, {\n          props: {\n            size: 24,\n            borderWidth: 2\n          }\n        })\n        : this.draging\n          ? h('svg', {\n            staticClass: 'mu-refresh-svg-icon',\n            style: this.circularStyle,\n            attrs: {\n              viewBox: '0 0 24 24'\n            }\n          }, [\n            h('path', {\n              attrs: {\n                d: 'M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z'\n              }\n            })\n          ]) : undefined;\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-refresh-control',\n      style: this.refreshStyle,\n      class: this.refreshClass\n    }, [\n      this.createRefreshIcon(h)\n    ]);\n  },\n  watch: {\n    refreshing (val) {\n      if (!val) {\n        transitionEnd(this.$el, this.clearState.bind(this));\n      } else {\n        this.state = 'refreshAnimate';\n      }\n    },\n    trigger (trigger, oldTrigger) {\n      if (trigger === oldTrigger) return;\n      this.unbindDrag();\n      this.bindDrag();\n    }\n  }\n};\n"
  },
  {
    "path": "src/LoadMore/index.js",
    "content": "import '../styles/components/progress.less';\nimport '../styles/components/load-more.less';\nimport theme from '../theme';\nimport LoadMoreTheme from './theme';\nimport InfiniteScroll from './InfiniteScroll';\nimport RefreshControl from './RefreshControl';\nimport LoadMore from './LoadMore';\n\nLoadMore.install = function (Vue) {\n  Vue.component(LoadMore.name, LoadMore);\n  Vue.component(RefreshControl.name, RefreshControl);\n  Vue.component(InfiniteScroll.name, InfiniteScroll);\n};\n\ntheme.addCreateTheme(LoadMoreTheme);\nexport { LoadMore, InfiniteScroll, RefreshControl };\nexport default LoadMore;\n"
  },
  {
    "path": "src/LoadMore/theme.js",
    "content": "export default theme => {\n  return `\n  .mu-refresh-control{\n    color: ${theme.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Menu/Menu.js",
    "content": "import Popover from '../Popover';\n\nexport default {\n  name: 'mu-menu',\n  props: {\n    popoverClass: [String, Object, Array],\n    cover: Popover.props.cover,\n    placement: Popover.props.placement,\n    space: Popover.props.space,\n    open: Boolean,\n    openOnHover: Boolean\n  },\n  data () {\n    return {\n      active: this.open,\n      trigger: null\n    };\n  },\n  mounted () {\n    this.trigger = this.$el;\n  },\n  methods: {\n    handleMouseEnter () {\n      if (!this.openOnHover) return;\n      if (this.timer) clearTimeout(this.timer);\n      this.timer = setTimeout(() => this.show(), 100);\n    },\n    handleMouseLeave () {\n      if (!this.openOnHover) return;\n      if (this.timer) clearTimeout(this.timer);\n      this.timer = setTimeout(() => this.hide(), 100);\n    },\n    show () {\n      this.active = true;\n      this.$emit('open');\n    },\n    hide () {\n      this.active = false;\n      this.$emit('close');\n    },\n    createPopover (h) {\n      return h(Popover, {\n        class: this.popoverClass,\n        style: {\n          'min-width': this.trigger ? this.trigger.offsetWidth + 'px' : ''\n        },\n        props: {\n          cover: this.cover,\n          placement: this.placement,\n          open: this.active,\n          space: this.space,\n          trigger: this.trigger\n        },\n        on: {\n          close: this.hide,\n          mouseenter: this.handleMouseEnter,\n          mouseleave: this.handleMouseLeave\n        }\n      }, this.$slots.content);\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-menu',\n      class: {\n        'mu-menu__open': this.active\n      }\n    }, [\n      h('div', {\n        staticClass: 'mu-menu-activator',\n        on: {\n          click: () => this.openOnHover ? null : this.active ? this.hide() : this.show(),\n          mouseenter: this.handleMouseEnter,\n          mouseleave: this.handleMouseLeave\n        }\n      }, this.$slots.default),\n      this.createPopover(h)\n    ]);\n  },\n  beforeDestroy () {\n    this.hide();\n  },\n  watch: {\n    active (val) {\n      this.$emit('update:open', val);\n    },\n    open (val) {\n      this.active = val;\n    }\n  }\n};\n"
  },
  {
    "path": "src/Menu/index.js",
    "content": "import '../styles/components/menu.less';\nimport Menu from './Menu';\n\nMenu.install = function (Vue) {\n  Vue.component(Menu.name, Menu);\n};\n\nexport default Menu;\n"
  },
  {
    "path": "src/Pagination/Pagination.js",
    "content": "import Button from '../Button';\n\nexport default {\n  name: 'mu-pagination',\n  props: {\n    total: {\n      type: Number,\n      default: 0,\n      validator: (val) => val >= 0\n    },\n    current: {\n      type: Number,\n      default: 1,\n      validator: (val) => val >= 1\n    },\n    pageCount: {\n      type: Number,\n      default: 7,\n      validator (val) {\n        return val >= 5 && val <= 21 && val % 2 !== 0;\n      }\n    },\n    pageSize: {\n      type: Number,\n      default: 10\n    },\n    raised: Boolean,\n    circle: Boolean\n  },\n  computed: {\n    showPageCount () {\n      return this.pageCount - 2;\n    },\n    totalPage () {\n      return Math.ceil(this.total / this.pageSize);\n    },\n    items () {\n      if (this.total === 0) return [];\n      const showPageCount = this.showPageCount;\n      const arr = [];\n      const start = 1;\n      const end = this.totalPage;\n\n      if (end <= showPageCount + 2) {\n        for (let i = start; i <= end; i++) {\n          arr.push({ text: i, value: i });\n        }\n        return arr;\n      }\n      arr.push({ text: start, value: start });\n      if (this.current - start >= showPageCount - 1) {\n        const go = this.current - showPageCount;\n        arr.push({\n          text: '...',\n          value: go < 1 ? 1 : go\n        });\n      }\n\n      let listStart = this.current - Math.floor(showPageCount / 2);\n      if (listStart <= 1) listStart = 2;\n      let listEnd = listStart + showPageCount - 1;\n      if (listEnd >= end) listEnd = end - 1;\n      listStart = listEnd - showPageCount + 1;\n\n      for (let i = listStart; i <= listEnd; i++) {\n        arr.push({ text: i, value: i });\n      }\n\n      if (end - this.current >= showPageCount - 1) {\n        const go = this.current + showPageCount;\n        arr.push({\n          text: '...',\n          value: go > end ? end : go\n        });\n      }\n      arr.push({ text: end, value: end });\n      return arr;\n    }\n  },\n  methods: {\n    changePage (page) {\n      this.$emit('update:current', page);\n      this.$emit('change', page);\n    },\n    createPrevBtn (h) {\n      return h(Button, {\n        staticClass: 'mu-pagination-btn',\n        props: {\n          flat: true,\n          disabled: this.current <= 1\n        },\n        on: {\n          click: () => this.changePage(this.current - 1)\n        }\n      }, [\n        h('svg', {\n          staticClass: 'mu-pagination-svg-icon',\n          attrs: {\n            viewBox: '0 0 24 24'\n          }\n        }, [\n          h('path', {\n            attrs: {\n              d: 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z'\n            }\n          })\n        ])\n      ]);\n    },\n    creatNextBtn (h) {\n      return h(Button, {\n        staticClass: 'mu-pagination-btn',\n        props: {\n          flat: true,\n          disabled: this.current >= this.totalPage\n        },\n        on: {\n          click: () => this.changePage(this.current + 1)\n        }\n      }, [\n        h('svg', {\n          staticClass: 'mu-pagination-svg-icon',\n          attrs: {\n            viewBox: '0 0 24 24'\n          }\n        }, [\n          h('path', {\n            attrs: {\n              d: 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z'\n            }\n          })\n        ])\n      ]);\n    },\n    createPageList (h) {\n      return h('ul', {}, this.items.map(item => {\n        const btn = h(Button, {\n          staticClass: 'mu-pagination-item',\n          class: {\n            'is-current': this.current === item.value\n          },\n          props: {\n            flat: true\n          },\n          on: {\n            click: () => this.changePage(item.value)\n          }\n        }, [\n          item.text === '...'\n            ? h('svg', {\n              staticClass: 'mu-pagination-svg-icon',\n              attrs: {\n                viewBox: '0 0 24 24'\n              }\n            }, [\n              h('path', {\n                attrs: {\n                  d: 'M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z'\n                }\n              })\n            ])\n            : item.text\n        ]);\n        return h('li', {}, [btn]);\n      }));\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-pagination',\n      class: {\n        'mu-pagination__raised': this.raised,\n        'mu-pagination__circle': this.circle\n      }\n    }, [\n      this.createPrevBtn(h),\n      this.createPageList(h),\n      this.creatNextBtn(h)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Pagination/index.js",
    "content": "import '../styles/components/pagination.less';\nimport theme from '../theme';\nimport PaginationTheme from './theme';\nimport Pagination from './Pagination';\n\nPagination.install = function (Vue) {\n  Vue.component(Pagination.name, Pagination);\n};\n\ntheme.addCreateTheme(PaginationTheme);\nexport default Pagination;\n"
  },
  {
    "path": "src/Pagination/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-pagination {\n    color: ${theme.text.primary};\n    font-size: 14px;\n  }\n  .mu-pagination__raised .mu-pagination-item.mu-button,\n  .mu-pagination__raised .mu-pagination-btn.mu-button{\n    background-color: ${theme.text.alternate};\n  }\n  .mu-pagination-item.mu-button.is-current {\n    background-color: ${theme.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Paper/Paper.js",
    "content": "import { convertClass } from '../utils';\n\nexport default {\n  name: 'mu-paper',\n  functional: true,\n  props: {\n    circle: Boolean,\n    rounded: {\n      type: Boolean,\n      default: true\n    },\n    zDepth: {\n      type: Number,\n      default: 0,\n      validator (val) {\n        return val >= 0 && val < 25;\n      }\n    }\n  },\n  render (h, { data, props, children }) {\n    const classObj = {\n      'mu-paper-circle': props.circle,\n      'mu-paper-round': props.rounded,\n      ['mu-elevation-' + props.zDepth]: !!props.zDepth\n    };\n    data.staticClass = `mu-paper ${data.staticClass || ''} ${convertClass(classObj).join(' ')}`;\n    return h('div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/Paper/index.js",
    "content": "import '../styles/components/paper.less';\nimport '../styles/components/elevation.less';\nimport theme from '../theme';\nimport PaperTheme from './theme';\nimport Paper from './Paper';\n\nPaper.install = function (Vue) {\n  Vue.component(Paper.name, Paper);\n};\n\ntheme.addCreateTheme(PaperTheme);\nexport default Paper;\n"
  },
  {
    "path": "src/Paper/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-paper {\n    color: ${theme.text.primary};\n    background-color: ${theme.background.paper};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/DateDisplay.js",
    "content": "import color from '../../internal/mixins/color';\n\nexport default {\n  mixins: [color],\n  props: {\n    type: String,\n    dateTimeFormat: Object,\n    monthDaySelected: {\n      type: Boolean,\n      default: true\n    },\n    displayDate: Date\n  },\n  data () {\n    return {\n      displayDates: [this.displayDate],\n      slideType: 'next'\n    };\n  },\n  methods: {\n    replaceSelected (date) {\n      const oldDate = this.displayDates[0];\n      this.slideType = date.getTime() > oldDate.getTime() ? 'next' : 'prev';\n      this.displayDates.push(date);\n      this.displayDates.splice(0, 1);\n    },\n    createYearSlide (h) {\n      return this.displayDates.map((displayDate, index) => {\n        const fullYear = displayDate.getFullYear();\n        return h('transition', {\n          props: {\n            name: `mu-date-display-${this.slideType}`\n          },\n          key: index\n        }, [\n          h('div', {\n            staticClass: 'mu-date-display-slideIn-wrapper',\n            key: fullYear\n          }, [\n            h('div', { staticClass: 'mu-date-display-year-title' }, fullYear)\n          ])\n        ]);\n      });\n    },\n    createMonthSlide (h) {\n      return this.displayDates.map((displayDate, index) => {\n        const displayMonthDay = this.type === 'date' ? this.dateTimeFormat.formatDisplay(displayDate) : this.dateTimeFormat.getMonthList()[displayDate.getMonth()];\n        return h('transition', {\n          props: {\n            name: `mu-date-display-${this.slideType}`\n          },\n          key: index\n        }, [\n          h('div', {\n            staticClass: 'mu-date-display-slideIn-wrapper',\n            key: displayMonthDay\n          }, [\n            h('div', { staticClass: 'mu-date-display-monthday-title' }, displayMonthDay)\n          ])\n        ]);\n      });\n    }\n  },\n  render (h) {\n    const displayYear = h('div', {\n      staticClass: 'mu-date-display-year',\n      on: {\n        click: () => this.$emit('changeView', 'year')\n      }\n    }, this.createYearSlide(h));\n    const displayMonthDay = this.type !== 'year' ? h('div', {\n      staticClass: 'mu-date-display-monthday',\n      on: {\n        click: () => this.$emit('changeView', this.type === 'date' ? 'monthDay' : 'month')\n      }\n    }, this.createMonthSlide(h)) : undefined;\n\n    return h('div', {\n      staticClass: 'mu-picker-display mu-date-display ' + this.getColorClass(false),\n      style: {\n        'background-color': this.getColor(this.color)\n      },\n      class: {\n        'selected-year': !this.monthDaySelected\n      }\n    }, [displayYear, displayMonthDay]);\n  },\n  watch: {\n    displayDate (val) {\n      this.replaceSelected(val);\n    }\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/DatePicker.js",
    "content": "import color from '../../internal/mixins/color';\nimport pickerProps from '../mixins/props';\nimport DateDisplay from './DateDisplay';\nimport MonthDayView from './MonthDayView';\nimport YearView from './YearView';\nimport MonthView from './MonthView';\nimport * as dateUtils from './dateUtils';\n\nexport default {\n  name: 'mu-date-picker',\n  mixins: [color, pickerProps],\n  provide () {\n    return {\n      getDayButtonSlots: this.getDayButtonSlots,\n      getMonthButtonSlots: this.getMonthButtonSlots,\n      getYearButtonSlots: this.getYearButtonSlots\n    };\n  },\n  props: {\n    dateTimeFormat: {\n      type: Object,\n      default () {\n        return dateUtils.dateTimeFormat;\n      }\n    },\n    firstDayOfWeek: {\n      type: Number,\n      default: 0\n    },\n    date: {\n      type: Date,\n      default () {\n        return new Date();\n      }\n    },\n    type: {\n      type: String,\n      default: 'date' // date, year, month\n    },\n    maxDate: {\n      type: Date,\n      default () {\n        return dateUtils.addYears(new Date(), 100);\n      }\n    },\n    minDate: {\n      type: Date,\n      default () {\n        return dateUtils.addYears(new Date(), -100);\n      }\n    },\n    shouldDisableDate: Function\n  },\n  data () {\n    return {\n      displayDate: this.date,\n      view: this.type === 'date' ? 'monthDay' : this.type === 'year' ? 'year' : 'month'\n    };\n  },\n  methods: {\n    getDayButtonSlots () {\n      return this.$scopedSlots.day;\n    },\n    getMonthButtonSlots () {\n      return this.$scopedSlots.month;\n    },\n    getYearButtonSlots () {\n      return this.$scopedSlots.year;\n    },\n    handleYearChange (year) {\n      const date = dateUtils.cloneAsDate(this.displayDate);\n      date.setDate(1);\n      date.setFullYear(year);\n      this.changeDisplayDate(date);\n      if (this.type === 'year') return this.changeDate(date);\n      this.changeView(this.type === 'month' ? 'month' : 'monthDay');\n    },\n    handleMonthChange (date) {\n      this.changeDisplayDate(date);\n      if (this.type === 'month') return this.changeDate(date);\n      this.changeView('monthDay');\n    },\n    handleSelect (date) {\n      if (date.getTime() > this.maxDate.getTime()) date = new Date(this.maxDate.getTime());\n      if (date.getTime() < this.minDate.getTime()) date = new Date(this.minDate.getTime());\n      this.changeDisplayDate(date);\n      this.changeDate(date);\n    },\n    changeDate (date) {\n      this.$emit('change', date);\n      this.$emit('update:date', date);\n    },\n    changeDisplayDate (date) {\n      this.displayDate = date;\n    },\n    changeView (view) {\n      this.view = view;\n    }\n  },\n  render (h) {\n    const colorClass = this.getNormalColorClass(this.color, true);\n    const color = this.getColor(this.color);\n    const monthdayView = h(MonthDayView, {\n      props: {\n        dateTimeFormat: this.dateTimeFormat,\n        firstDayOfWeek: this.firstDayOfWeek,\n        maxDate: this.maxDate,\n        minDate: this.minDate,\n        displayDate: this.displayDate,\n        selectedDate: this.date,\n        shouldDisableDate: this.shouldDisableDate\n      },\n      on: {\n        changeView: this.changeView,\n        select: this.handleSelect\n      }\n    });\n    const yearView = h(YearView, {\n      props: {\n        displayDate: this.displayDate,\n        maxDate: this.maxDate,\n        minDate: this.minDate\n      },\n      on: {\n        change: this.handleYearChange\n      }\n    });\n    const monthView = h(MonthView, {\n      props: {\n        dateTimeFormat: this.dateTimeFormat,\n        maxDate: this.maxDate,\n        minDate: this.minDate,\n        displayDate: this.displayDate\n      },\n      on: {\n        changeView: this.changeView,\n        change: this.handleMonthChange\n      }\n    });\n    return h(\n      'div',\n      {\n        staticClass: `mu-picker mu-datepicker ${colorClass}`,\n        class: {\n          'mu-picker-landspace': this.landscape\n        },\n        style: {\n          color\n        }\n      },\n      [\n        !this.noDisplay ? h(DateDisplay, {\n          props: {\n            type: this.type,\n            monthDaySelected: this.view !== 'year',\n            color: this.displayColor,\n            displayDate: this.displayDate,\n            dateTimeFormat: this.dateTimeFormat\n          },\n          on: {\n            changeView: this.changeView\n          }\n        }) : undefined,\n        h(\n          'div',\n          {\n            staticClass: 'mu-picker-container'\n          },\n          [\n            this.view === 'monthDay'\n              ? monthdayView\n              : this.view === 'month' ? monthView : yearView,\n            this.$slots.default\n          ]\n        )\n      ]\n    );\n  },\n  watch: {\n    date (val) {\n      this.displayDate = val;\n    }\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/DayButton.js",
    "content": "export default {\n  inject: [\n    'getDayButtonSlots'\n  ],\n  props: {\n    selected: Boolean,\n    date: Date,\n    disabled: Boolean\n  },\n  data () {\n    return {\n      hover: false\n    };\n  },\n  computed: {\n    isNow () {\n      const now = new Date();\n      return this.date && this.date.getYear() === now.getYear() && this.date.getMonth() === now.getMonth() && this.date.getDate() === now.getDate();\n    },\n    dayButtonClass () {\n      return {\n        selected: this.selected,\n        disabled: this.disabled,\n        now: this.isNow\n      };\n    }\n  },\n  render (h) {\n    const scopedSlot = this.getDayButtonSlots();\n    return this.date ? h('button', {\n      staticClass: 'mu-day-button',\n      class: this.dayButtonClass,\n      on: this.$listeners,\n      domProps: {\n        disabled: this.disabled\n      }\n    }, scopedSlot ? scopedSlot({\n      selected: this.selected,\n      date: this.date,\n      disabled: this.disabled,\n      now: this.isNow\n    }) : [\n      h('div', { class: 'mu-day-button-bg' }),\n      h('span', {\n        class: 'mu-day-button-text',\n        domProps: {\n          innerHTML: this.date.getDate()\n        }\n      })\n    ]) : h('span', { class: 'mu-day-empty' });\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/MonthDayView.js",
    "content": "import DayButton from './DayButton';\nimport Toolbar from './Toolbar';\nimport * as dateUtils from './dateUtils';\n\nexport default {\n  props: {\n    dateTimeFormat: Object,\n    firstDayOfWeek: {\n      type: Number,\n      default: 1\n    },\n    maxDate: Date,\n    minDate: Date,\n    displayDate: Date,\n    selectedDate: Date,\n    shouldDisableDate: Function\n  },\n  data () {\n    const displayDate = dateUtils.cloneDate(this.displayDate);\n    displayDate.setDate(1);\n    return {\n      weekTexts: this.dateTimeFormat.getWeekDayArray(this.firstDayOfWeek),\n      displayDates: [displayDate],\n      slideType: 'next'\n    };\n  },\n  computed: {\n    prevMonth () {\n      return this.displayDates && dateUtils.monthDiff(this.displayDates[0], this.minDate) > 0;\n    },\n    nextMonth () {\n      return this.displayDates && dateUtils.monthDiff(this.displayDates[0], this.maxDate) < 0;\n    }\n  },\n  methods: {\n    equalsDate (date) {\n      return dateUtils.isEqualDate(date, this.selectedDate);\n    },\n    isDisableDate (day) {\n      if (day === null) return false;\n      let disabled = false;\n      if (this.maxDate && this.minDate) disabled = !dateUtils.isBetweenDates(day, this.minDate, this.maxDate);\n      if (!disabled && this.shouldDisableDate) disabled = this.shouldDisableDate(day);\n      return disabled;\n    },\n    handleClick (date) {\n      if (date) this.$emit('select', date);\n    },\n    handleChange (val) {\n      const displayDate = dateUtils.addMonths(this.displayDates[0], val);\n      this.changeDisplayDate(displayDate);\n    },\n    changeDisplayDate (date) {\n      const oldDate = this.displayDates[0];\n      if (date.getFullYear() === oldDate.getFullYear() && date.getMonth() === oldDate.getMonth()) return;\n      this.slideType = date.getTime() > oldDate.getTime() ? 'next' : 'prev';\n      const displayDate = dateUtils.cloneDate(date);\n      displayDate.setDate(1);\n      this.displayDates.push(displayDate);\n      this.displayDates.splice(0, 1);\n    },\n    createWeek (h) {\n      return h('div', {\n        staticClass: 'mu-datepicker-week'\n      }, this.weekTexts.map((weekText, index) => {\n        return h('span', {\n          staticClass: 'mu-datepicker-week-day',\n          key: index\n        }, weekText);\n      }));\n    },\n    createMonthDay (h) {\n      return h('div', {\n        staticClass: 'mu-datepicker-monthday'\n      }, this.displayDates.map((displayDate, index) => {\n        return h('transition', {\n          props: {\n            name: `mu-datepicker-slide-${this.slideType}`\n          },\n          key: index\n        }, [\n          h('div', {\n            staticClass: 'mu-datepicker-monthday-slide',\n            key: displayDate.getTime()\n          }, [this.createContent(h, displayDate)])\n        ]);\n      }));\n    },\n    createContent (h, displayDate) {\n      const weeksArray = dateUtils.getWeekArray(displayDate || new Date(), this.firstDayOfWeek);\n      return h('div', {\n        staticClass: 'mu-datepicker-monthday-content'\n      }, weeksArray.map((week, i) => {\n        return h('div', {\n          staticClass: 'mu-datepicker-monthday-row',\n          key: i\n        }, week.map((date, j) => {\n          return h(DayButton, {\n            props: {\n              disabled: this.isDisableDate(date),\n              selected: this.equalsDate(date),\n              date: date\n            },\n            on: {\n              click: () => this.handleClick(date)\n            },\n            key: `dayButton${i}${j}`\n          });\n        }));\n      }));\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-datepicker-monthday-container'\n    }, [\n      h(Toolbar, {\n        props: {\n          slideType: this.slideType,\n          nextMonth: this.nextMonth,\n          prevMonth: this.prevMonth,\n          displayDates: this.displayDates,\n          dateTimeFormat: this.dateTimeFormat\n        },\n        on: {\n          click: () => this.$emit('changeView', 'month'),\n          change: this.handleChange\n        }\n      }),\n      this.createWeek(h),\n      this.createMonthDay(h)\n    ]);\n  },\n  watch: {\n    displayDate (val) {\n      this.changeDisplayDate(val);\n    }\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/MonthView.js",
    "content": "import Toolbar from './Toolbar';\nimport * as dateUtils from './dateUtils';\n\nexport default {\n  props: {\n    dateTimeFormat: Object,\n    maxDate: Date,\n    minDate: Date,\n    displayDate: Date\n  },\n  data () {\n    const displayDate = dateUtils.cloneDate(this.displayDate);\n    displayDate.setDate(1);\n    return {\n      displayDates: [displayDate],\n      slideType: 'next'\n    };\n  },\n  methods: {\n    changeDisplayDate (date) {\n      const oldDate = this.displayDates[0];\n      if (date.getFullYear() === oldDate.getFullYear() && date.getMonth() === oldDate.getMonth()) return;\n      this.slideType = date.getTime() > oldDate.getTime() ? 'next' : 'prev';\n      const displayDate = dateUtils.cloneDate(date);\n      displayDate.setDate(1);\n      this.displayDates.push(displayDate);\n      this.displayDates.splice(0, 1);\n    },\n    handleChange (val) {\n      const displayDate = dateUtils.cloneDate(this.displayDates[0]);\n      displayDate.setFullYear(displayDate.getFullYear() + val);\n      this.changeDisplayDate(displayDate);\n    },\n    createMonth (h) {\n      return h('div', {\n        staticClass: 'mu-datepicker-month'\n      }, this.displayDates.map((displayDate, index) => {\n        return h('transition', {\n          props: {\n            name: `mu-datepicker-slide-${this.slideType}`\n          },\n          key: index\n        }, [\n          h('div', {\n            staticClass: 'mu-datepicker-month-slide',\n            key: displayDate.getTime()\n          }, [this.createContent(h, displayDate)])\n        ]);\n      }));\n    },\n    createContent (h, displayDate) {\n      const monthArray = dateUtils.getMonthArray(displayDate);\n      return h('div', {\n        staticClass: 'mu-datepicker-month-content'\n      }, monthArray.map((month, i) => {\n        return h('div', {\n          staticClass: 'mu-datepicker-month-row',\n          key: i\n        }, month.map((date) => this.createMonthButton(h, date)));\n      }));\n    },\n    createMonthButton (h, date) {\n      const monthText = this.dateTimeFormat.getMonthList()[date.getMonth()];\n      const maxDate = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\n      const minDate = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\n      const disabled = date.getTime() > maxDate.getTime() || date.getTime() < minDate.getTime();\n      return h(\n        'button',\n        {\n          staticClass: 'mu-month-button',\n          attrs: {\n            disabled\n          },\n          class: {\n            selected:\n              date.getFullYear() === this.displayDate.getFullYear() &&\n              date.getMonth() === this.displayDate.getMonth()\n          },\n          on: {\n            click: () => !disabled && this.$emit('change', date)\n          }\n        },\n        [\n          h('div', { staticClass: 'mu-month-button-bg' }),\n          h('span', { staticClass: 'mu-month-button-text' }, monthText)\n        ]\n      );\n    }\n  },\n  render (h) {\n    return h(\n      'div',\n      {\n        staticClass: 'mu-datepicker-month-container'\n      },\n      [\n        h(Toolbar, {\n          props: {\n            slideType: this.slideType,\n            type: 'year',\n            displayDates: this.displayDates,\n            dateTimeFormat: this.dateTimeFormat\n          },\n          on: {\n            click: () => this.$emit('changeView', 'year'),\n            change: this.handleChange\n          }\n        }),\n        this.createMonth(h)\n      ]\n    );\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/Toolbar.js",
    "content": "import Button from '../../Button';\nexport default {\n  props: {\n    dateTimeFormat: Object,\n    displayDates: Array,\n    type: {\n      type: String,\n      default: 'month'\n    }, // month, year\n    nextMonth: {\n      type: Boolean,\n      default: true\n    },\n    prevMonth: {\n      type: Boolean,\n      default: true\n    },\n    slideType: String\n  },\n  methods: {\n    createTitleSlide (h) {\n      return this.displayDates.map((displayDate, index) => {\n        const title = this.type === 'month' ? this.dateTimeFormat.formatMonth(displayDate) : displayDate.getFullYear();\n        return h('transition', {\n          props: {\n            name: `mu-datepicker-slide-${this.slideType}`\n          },\n          key: index\n        }, [\n          h('div', {\n            staticClass: 'mu-datepicker-toolbar-title',\n            class: {\n              'clickable': true\n            },\n            key: title,\n            on: {\n              click: (e) => this.$emit('click', e)\n            }\n          }, title)\n        ]);\n      });\n    },\n    createPrevIcon (h) {\n      return h('svg', {\n        staticClass: 'mu-datepicker-svg-icon',\n        attrs: {\n          viewBox: '0 0 24 24'\n        }\n      }, [\n        h('path', {\n          attrs: {\n            d: 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z'\n          }\n        })\n      ]);\n    },\n    createNextIcon (h) {\n      return h('svg', {\n        staticClass: 'mu-datepicker-svg-icon',\n        attrs: {\n          viewBox: '0 0 24 24'\n        }\n      }, [\n        h('path', {\n          attrs: {\n            d: 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z'\n          }\n        })\n      ]);\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-datepicker-toolbar'\n    }, [\n      h(Button, {\n        staticClass: 'mu-datepicker-tool-btn',\n        props: {\n          icon: true,\n          disabled: !this.prevMonth\n        },\n        on: {\n          click: () => this.$emit('change', -1)\n        }\n      }, [this.createPrevIcon(h)]),\n      h('div', {\n        staticClass: 'mu-datepicker-toolbar-title-wrapper',\n        on: {\n          click: () => this.$emit('changeView', 'month')\n        }\n      }, [this.createTitleSlide(h)]),\n      h(Button, {\n        staticClass: 'mu-datepicker-tool-btn',\n        props: {\n          icon: true,\n          disabled: !this.nextMonth\n        },\n        on: {\n          click: () => this.$emit('change', 1)\n        }\n      }, [this.createNextIcon(h)])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/YearButton.js",
    "content": "export default {\n  props: {\n    year: [String, Number],\n    selected: Boolean\n  },\n  mounted () {\n    if (this.selected) this.$parent.scrollToSelectedYear(this.$el);\n  },\n  render (h) {\n    return h('button', {\n      staticClass: 'mu-year-button',\n      class: {\n        selected: this.selected\n      },\n      on: this.$listeners\n    }, [\n      h('span', {\n        staticClass: 'mu-year-button-text'\n      }, this.year)\n    ]);\n  },\n  watch: {\n    selected (val) {\n      if (val) this.$parent.scrollToSelectedYear(this.$el);\n    }\n  }\n\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/YearView.js",
    "content": "import YearButton from './YearButton';\n\nexport default {\n  props: {\n    maxDate: Date,\n    minDate: Date,\n    displayDate: Date\n  },\n  computed: {\n    years () {\n      const minYear = this.minDate.getFullYear();\n      const maxYear = this.maxDate.getFullYear();\n      const years = [];\n      for (let year = minYear; year <= maxYear; year++) {\n        years.push(year);\n      }\n      return years;\n    }\n  },\n  methods: {\n    scrollToSelectedYear (yearButtonNode) {\n      const container = this.$refs.container;\n      const containerHeight = container.clientHeight;\n      const yearButtonNodeHeight = yearButtonNode.clientHeight || 32;\n      const scrollYOffset = (yearButtonNode.offsetTop + yearButtonNodeHeight / 2) - containerHeight / 2;\n      setTimeout(() => (container.scrollTop = scrollYOffset), 0);\n    },\n    createYearButtons (h) {\n      return this.years.map((year) => {\n        return h(YearButton, {\n          props: {\n            year,\n            selected: year === this.displayDate.getFullYear()\n          },\n          on: {\n            click: (e) => {\n              this.$emit('change', year);\n            }\n          }\n        });\n      });\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-datepicker-year-container'\n    }, [\n      h('div', {\n        staticClass: 'mu-datepicker-year',\n        ref: 'container'\n      }, [\n        h('div', {\n          staticClass: 'mu-datepicker-year-list'\n        }, this.createYearButtons(h))\n      ])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/DatePicker/dateUtils.js",
    "content": "/**\n * material-ui dateUtils.js\n * https://github.com/callemall/material-ui/blob/master/src/DatePicker/dateUtils.js\n */\nconst localConfig = {\n  dayAbbreviation: ['日', '一', '二', '三', '四', '五', '六'],\n  dayList: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n  monthList: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n  monthLongList: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\n\nexport const dateTimeFormat = {\n  formatDisplay (date) {\n    var day = date.getDate();\n    return `${localConfig.monthList[date.getMonth()]}-${day > 9 ? day : '0' + day} ${localConfig.dayList[date.getDay()]}`;\n  },\n  formatDateDisplay (date) {\n    var day = date.getDate();\n    return `${localConfig.monthList[date.getMonth()]}-${day > 9 ? day : '0' + day}`;\n  },\n  formatMonth (date) {\n    return `${date.getFullYear()} ${localConfig.monthLongList[date.getMonth()]}`;\n  },\n  getWeekDayArray (firstDayOfWeek) {\n    const beforeArray = [];\n    const afterArray = [];\n    const dayAbbreviation = localConfig.dayAbbreviation;\n    for (let i = 0; i < dayAbbreviation.length; i++) {\n      if (i < firstDayOfWeek) {\n        afterArray.push(dayAbbreviation[i]);\n      } else {\n        beforeArray.push(dayAbbreviation[i]);\n      }\n    }\n    return beforeArray.concat(afterArray);\n  },\n  getMonthList () {\n    return localConfig.monthLongList;\n  }\n};\n\nexport function getDaysInMonth (d) {\n  const resultDate = getFirstDayOfMonth(d);\n\n  resultDate.setMonth(resultDate.getMonth() + 1);\n  resultDate.setDate(resultDate.getDate() - 1);\n\n  return resultDate.getDate();\n}\n\nexport function getFirstDayOfMonth (d) {\n  return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function getMonthArray (d) {\n  const length = 3;\n  const months = [];\n  let month = [];\n  for (let i = 0; i < 12; i++) {\n    month.push(new Date(d.getFullYear(), i, 1, d.getHours(), d.getMinutes()));\n    if (month.length === length) {\n      months.push(month);\n      month = [];\n    }\n  }\n\n  return months;\n}\n\nexport function getWeekArray (d, firstDayOfWeek) {\n  const dayArray = [];\n  const daysInMonth = getDaysInMonth(d);\n  const weekArray = [];\n  let week = [];\n\n  for (let i = 1; i <= daysInMonth; i++) {\n    dayArray.push(new Date(d.getFullYear(), d.getMonth(), i, d.getHours(), d.getMinutes()));\n  }\n\n  const addWeek = (week) => {\n    const emptyDays = 7 - week.length;\n    for (let i = 0; i < emptyDays; ++i) {\n      week[weekArray.length ? 'push' : 'unshift'](null);\n    }\n    weekArray.push(week);\n  };\n\n  dayArray.forEach((day) => {\n    if (week.length > 0 && day.getDay() === firstDayOfWeek) {\n      addWeek(week);\n      week = [];\n    }\n    week.push(day);\n    if (dayArray.indexOf(day) === dayArray.length - 1) {\n      addWeek(week);\n    }\n  });\n\n  return weekArray;\n}\n\nexport function addDays (d, days) {\n  const newDate = cloneDate(d);\n  newDate.setDate(d.getDate() + days);\n  return newDate;\n}\n\nexport function addMonths (d, months) {\n  const newDate = cloneDate(d);\n  newDate.setMonth(d.getMonth() + months);\n  return newDate;\n}\n\nexport function addYears (d, years) {\n  const newDate = cloneDate(d);\n  newDate.setFullYear(d.getFullYear() + years);\n  return newDate;\n}\n\nexport function cloneDate (d) {\n  return new Date(d.getTime());\n}\n\nexport function cloneAsDate (d) {\n  const clonedDate = cloneDate(d);\n  clonedDate.setHours(0, 0, 0, 0);\n  return clonedDate;\n}\n\nexport function isBeforeDate (d1, d2) {\n  const date1 = cloneAsDate(d1);\n  const date2 = cloneAsDate(d2);\n\n  return (date1.getTime() < date2.getTime());\n}\n\nexport function isAfterDate (d1, d2) {\n  const date1 = cloneAsDate(d1);\n  const date2 = cloneAsDate(d2);\n\n  return (date1.getTime() > date2.getTime());\n}\n\nexport function isBetweenDates (dateToCheck, startDate, endDate) {\n  return (!(isBeforeDate(dateToCheck, startDate)) &&\n    !(isAfterDate(dateToCheck, endDate)));\n}\n\nexport function isEqualDate (d1, d2) {\n  return d1 && d2 &&\n    (d1.getFullYear() === d2.getFullYear()) &&\n    (d1.getMonth() === d2.getMonth()) &&\n    (d1.getDate() === d2.getDate());\n}\n\nexport function monthDiff (d1, d2) {\n  let m;\n  m = (d1.getFullYear() - d2.getFullYear()) * 12;\n  m += d1.getMonth();\n  m -= d2.getMonth();\n  return m;\n}\n\nexport function yearDiff (d1, d2) {\n  return ~~(monthDiff(d1, d2) / 12);\n}\n\n"
  },
  {
    "path": "src/Picker/DatePicker/index.js",
    "content": "export { default } from './DatePicker';\n"
  },
  {
    "path": "src/Picker/DateTimePicker/DateTimeDisplay.js",
    "content": "import color from '../../internal/mixins/color';\nexport default {\n  mixins: [color],\n  props: {\n    affix: String,\n    dateTimeFormat: Object,\n    view: String,\n    format: String,\n    viewType: String,\n    displayDate: Date\n  },\n  computed: {\n    sanitizeTime () {\n      let hour = this.displayDate.getHours();\n      let min = this.displayDate.getMinutes().toString();\n      if (this.format === 'ampm') {\n        hour %= 12;\n        hour = hour || 12;\n      }\n      hour = hour.toString();\n      if (hour.length < 2) hour = `0${hour}`;\n      if (min.length < 2) min = `0${min}`;\n      return [hour, min];\n    }\n  },\n  methods: {\n    createDateDisplay (h) {\n      const fullYear = this.displayDate.getFullYear();\n      const displayMonthDay = this.dateTimeFormat.formatDateDisplay(this.displayDate);\n      return h('div', {\n        staticClass: 'mu-date-display'\n      }, [\n        h('div', {\n          staticClass: 'mu-date-display-year',\n          class: {\n            active: this.view === 'year'\n          },\n          on: {\n            click: () => this.$emit('changeView', 'year')\n          }\n        }, [\n          h('div', {\n            staticClass: 'mu-date-display-year-title'\n          }, fullYear)\n        ]),\n        h('div', {\n          staticClass: 'mu-date-display-monthday',\n          class: {\n            active: this.view === 'monthDay' || this.view === 'month'\n          },\n          on: {\n            click: () => this.$emit('changeView', 'monthDay')\n          }\n        }, [\n          h('div', {\n            staticClass: 'mu-date-display-monthday-title'\n          }, displayMonthDay)\n        ])\n      ]);\n    },\n    createTimeDisplay (h) {\n      const displayTime = h('div', {\n        staticClass: 'mu-time-display-time'\n      }, [\n        h('span', {\n          staticClass: 'mu-time-display-clickable',\n          class: {\n            'active': this.view === 'hour' || (this.view === 'minute' && this.viewType === 'list')\n          },\n          on: {\n            click: this.viewType === 'list' ? () => {} : () => this.$emit('changeView', 'hour')\n          }\n        }, this.sanitizeTime[0]),\n        h('span', {}, ':'),\n        h('span', {\n          staticClass: 'mu-time-display-clickable',\n          class: {\n            'active': this.view === 'minute' || (this.view === 'hour' && this.viewType === 'list')\n          },\n          on: {\n            click: this.viewType === 'list' ? () => {} : () => this.$emit('changeView', 'minute')\n          }\n        }, this.sanitizeTime[1])\n      ]);\n\n      const displayAffix = this.format === 'ampm' ? h('div', {\n        staticClass: 'mu-time-display-affix'\n      }, [\n        h('div', {\n          staticClass: 'mu-time-display-clickable',\n          class: {\n            'active': this.affix === 'pm'\n          },\n          on: {\n            click: () => this.$emit('selectAffix', 'pm')\n          }\n        }, 'PM'),\n        h('div', {\n          staticClass: 'mu-time-display-clickable',\n          class: {\n            'active': this.affix === 'am'\n          },\n          on: {\n            click: () => this.$emit('selectAffix', 'am')\n          }\n        }, 'AM')\n      ]) : undefined;\n      return h('div', {\n        staticClass: ' mu-time-display'\n      }, [\n        h('div', {\n          staticClass: 'mu-time-display-text'\n        }, [\n          this.format === 'ampm' ? h('div', {\n            staticClass: 'mu-time-display-affix'\n          }) : undefined,\n          displayTime,\n          displayAffix\n        ])\n      ]);\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-picker-display mu-date-time-display ' + this.getColorClass(false),\n      style: {\n        'background-color': this.getColor(this.color)\n      }\n    }, [\n      this.createDateDisplay(h),\n      this.createTimeDisplay(h)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/DateTimePicker/DateTimePicker.js",
    "content": "import pickerProps from '../mixins/props';\nimport color from '../../internal/mixins/color';\nimport DatePicker from '../DatePicker';\nimport TimePicker from '../TimePicker';\nimport DateTimeDisplay from './DateTimeDisplay';\nimport MonthDayView from '../DatePicker/MonthDayView';\nimport YearView from '../DatePicker/YearView';\nimport MonthView from '../DatePicker/MonthView';\nimport ClockHours from '../TimePicker/Hours';\nimport ClockMinutes from '../TimePicker/Minutes';\nimport ListView from '../TimePicker/ListView';\nimport { Tabs, Tab } from '../../Tabs';\nimport { FadeTransition } from '../../internal/transitions';\nimport * as dateUtils from '../DatePicker/dateUtils';\n\nconst props = {\n  ...DatePicker.props,\n  ...TimePicker.props\n};\n\ndelete props.time;\ndelete props.type;\ndelete props.landscape;\nexport default {\n  name: 'mu-date-time-picker',\n  provide () {\n    return {\n      getColorObject: this.getColorObject,\n      getDayButtonSlots: this.getDayButtonSlots,\n      getMonthButtonSlots: this.getMonthButtonSlots,\n      getYearButtonSlots: this.getYearButtonSlots\n    };\n  },\n  mixins: [pickerProps, color],\n  props,\n  data () {\n    return {\n      displayDate: this.date,\n      view: 'monthDay',\n      type: 'date' // date, time\n    };\n  },\n  methods: {\n    getDayButtonSlots () {\n      return this.$scopedSlots.day;\n    },\n    getMonthButtonSlots () {\n      return this.$scopedSlots.month;\n    },\n    getYearButtonSlots () {\n      return this.$scopedSlots.year;\n    },\n    getColorObject () {\n      return {\n        color: this.getColor(this.color),\n        colorClass: this.getNormalColorClass(this.color, true),\n        bgColorClass: this.getNormalColorClass(this.color)\n      };\n    },\n    getAffix () {\n      if (this.format !== 'ampm') return '';\n      const hours = this.date.getHours();\n      if (hours < 12) {\n        return 'am';\n      }\n      return 'pm';\n    },\n    handleYearChange (year) {\n      const date = dateUtils.cloneAsDate(this.displayDate);\n      date.setDate(1);\n      date.setFullYear(year);\n      this.changeDisplayDate(date);\n      this.changeView('monthDay');\n    },\n    handleMonthChange (date) {\n      this.changeDisplayDate(date);\n      this.changeView('monthDay');\n    },\n    handleSelect (date) {\n      if (date.getTime() > this.maxDate.getTime()) date = new Date(this.maxDate.getTime());\n      if (date.getTime() < this.minDate.getTime()) date = new Date(this.minDate.getTime());\n      this.changeDisplayDate(date);\n      this.changeTime(date, 'monthDay', false);\n      this.changeType('time');\n    },\n    changeDisplayDate (date) {\n      this.displayDate = date;\n    },\n    changeType (type) {\n      this.type = type;\n      if (type === 'date' && ['hour', 'minute'].indexOf(this.view) !== -1) {\n        this.changeView('monthDay');\n      } else if (type === 'time' && ['monthDay', 'month', 'year'].indexOf(this.view) !== -1) {\n        this.changeView('hour');\n      }\n    },\n    changeView (view) {\n      this.view = view;\n      if (['hour', 'minute'].indexOf(view) !== -1 && this.type === 'date') {\n        this.changeType('time');\n      } else if (['monthDay', 'month', 'year'].indexOf(view) !== -1 && this.type === 'time') {\n        this.changeType('date');\n      }\n    },\n    handleSelectAffix (affix) {\n      if (affix === this.getAffix()) return;\n      const hours = this.date.getHours();\n      if (affix === 'am') {\n        this.handleChangeHours(hours - 12, affix);\n        return;\n      }\n      this.handleChangeHours(hours + 12, affix);\n    },\n    handleChangeHours (hours, finished) {\n      const time = new Date(this.date);\n      let affix;\n      if (typeof finished === 'string') {\n        affix = finished;\n        finished = undefined;\n      }\n      if (!affix) {\n        affix = this.getAffix();\n      }\n      if (affix === 'pm' && hours < 12) {\n        hours += 12;\n      }\n      time.setHours(hours);\n      this.changeTime(time, 'hour', finished);\n      if (finished) this.view = 'minute';\n    },\n    handleChangeMinutes (minutes, finished) {\n      const time = new Date(this.date);\n      time.setMinutes(minutes);\n      this.changeTime(time, 'minute', finished);\n    },\n    changeTime (time, view, finished) {\n      this.$emit('change', time, view, finished);\n      this.$emit('update:date', time);\n    },\n    createDisplay (h) {\n      if (this.noDisplay) return;\n      return h(DateTimeDisplay, {\n        props: {\n          affix: this.getAffix(),\n          dateTimeFormat: this.dateTimeFormat,\n          view: this.view,\n          format: this.format,\n          viewType: this.viewType,\n          color: this.displayColor,\n          displayDate: this.displayDate\n        },\n        on: {\n          changeView: this.changeView,\n          selectAffix: this.handleSelectAffix\n        }\n      });\n    },\n    createClock (h) {\n      return h('div', {\n        staticClass: 'mu-timepicker-clock'\n      }, [\n        h('div', { staticClass: 'mu-timepicker-circle' }),\n        this.view === 'hour' ? h(ClockHours, {\n          props: {\n            format: this.format,\n            initialHours: this.date.getHours()\n          },\n          on: {\n            change: this.handleChangeHours\n          }\n        }) : undefined,\n        this.view === 'minute' ? h(ClockMinutes, {\n          props: {\n            initialMinutes: this.date.getMinutes()\n          },\n          on: {\n            change: this.handleChangeMinutes\n          }\n        }) : undefined\n      ]);\n    },\n    createList (h) {\n      return h(ListView, {\n        props: {\n          format: this.format,\n          time: this.date\n        },\n        on: {\n          changeHours: (val) => this.handleChangeHours(val, true),\n          changeMinutes: (val) => this.handleChangeMinutes(val, true)\n        }\n      });\n    },\n    createTabs (h) {\n      return h(Tabs, {\n        props: {\n          value: this.type,\n          color: this.displayColor || this.color,\n          fullWidth: true\n        },\n        on: {\n          'update:value': this.changeType\n        }\n      }, [\n        h(Tab, {\n          props: {\n            value: 'date'\n          }\n        }, [\n          h('svg', {\n            staticClass: 'mu-datetime-picker-svg',\n            attrs: {\n              viewBox: '0 0 24 24'\n            }\n          }, [\n            h('path', {\n              attrs: {\n                d: 'M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z'\n              }\n            }),\n            h('path', {\n              attrs: {\n                d: 'M0 0h24v24H0z',\n                fill: 'none'\n              }\n            })\n          ])\n        ]),\n        h(Tab, {\n          props: {\n            value: 'time'\n          }\n        }, [\n          h('svg', {\n            staticClass: 'mu-datetime-picker-svg',\n            attrs: {\n              viewBox: '0 0 24 24'\n            }\n          }, [\n            h('path', {\n              attrs: {\n                d: 'M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z'\n              }\n            }),\n            h('path', {\n              attrs: {\n                d: 'M0 0h24v24H0z',\n                fill: 'none'\n              }\n            }),\n            h('path', {\n              attrs: {\n                d: 'M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z'\n              }\n            })\n          ])\n        ])\n      ]);\n    },\n    createContent (h) {\n      switch (this.view) {\n        case 'monthDay':\n          return h(MonthDayView, {\n            props: {\n              dateTimeFormat: this.dateTimeFormat,\n              firstDayOfWeek: this.firstDayOfWeek,\n              maxDate: this.maxDate,\n              minDate: this.minDate,\n              displayDate: this.displayDate,\n              selectedDate: this.date,\n              shouldDisableDate: this.shouldDisableDate\n            },\n            on: {\n              changeView: this.changeView,\n              select: this.handleSelect\n            }\n          });\n        case 'month':\n          return h(MonthView, {\n            props: {\n              dateTimeFormat: this.dateTimeFormat,\n              maxDate: this.maxDate,\n              minDate: this.minDate,\n              displayDate: this.displayDate\n            },\n            on: {\n              changeView: this.changeView,\n              change: this.handleMonthChange\n            }\n          });\n        case 'year':\n          return h(YearView, {\n            props: {\n              displayDate: this.displayDate,\n              maxDate: this.maxDate,\n              minDate: this.minDate\n            },\n            on: {\n              change: this.handleYearChange\n            }\n          });\n      }\n      return this.viewType === 'clock' ? this.createClock(h) : this.createList(h);\n    }\n  },\n  render (h) {\n    const { color, colorClass } = this.getColorObject();\n\n    return h('div', {\n      staticClass: `mu-picker mu-datetime-picker ${colorClass}`,\n      style: {\n        color\n      }\n    }, [\n      this.createDisplay(h),\n      h('div', {\n        staticClass: 'mu-picker-container'\n      }, [\n        this.createTabs(h),\n        h(FadeTransition, [this.createContent(h)]),\n        this.$slots.default\n      ])\n    ]);\n  },\n  watch: {\n    date (val) {\n      this.displayDate = val;\n    }\n  }\n};\n"
  },
  {
    "path": "src/Picker/DateTimePicker/index.js",
    "content": "export { default } from './DateTimePicker';\n"
  },
  {
    "path": "src/Picker/TimePicker/Hours.js",
    "content": "import ClockNumber from './Number';\nimport ClockPointer from './Pointer';\nimport { getTouchEventOffsetValues, rad2deg } from './timeUtils';\nexport default {\n  props: {\n    format: {\n      type: String,\n      default: 'ampm',\n      validator (val) {\n        return ['ampm', '24hr'].indexOf(val) !== -1;\n      }\n    },\n    initialHours: {\n      type: Number,\n      default: new Date().getHours()\n    }\n  },\n  computed: {\n    hours () {\n      const hourSize = this.format === 'ampm' ? 12 : 24;\n      const hours = [];\n      for (let i = 1; i <= hourSize; i++) {\n        hours.push(i % 24);\n      }\n      return hours;\n    }\n  },\n  mounted () {\n    const clockElement = this.$refs.mask;\n    this.center = {\n      x: clockElement.offsetWidth / 2,\n      y: clockElement.offsetHeight / 2\n    };\n    this.basePoint = {\n      x: this.center.x,\n      y: 0\n    };\n  },\n  methods: {\n    getSelected () {\n      let hour = this.initialHours;\n      if (this.format === 'ampm') {\n        hour %= 12;\n        hour = hour || 12;\n      }\n      return hour;\n    },\n    isMousePressed (event) {\n      if (typeof event.buttons === 'undefined') {\n        return event.nativeEvent.which;\n      }\n      return event.buttons;\n    },\n    handleDown (event) {\n      this.isMouseDown = true;\n    },\n    handleUp (event) {\n      if (!this.isMouseDown) return;\n      event.preventDefault();\n      this.isMouseDown = false;\n      this.setClock(event, true);\n    },\n    handleMove (event) {\n      event.preventDefault();\n      if (this.isMousePressed(event) !== 1) return;\n      this.setClock(event, false);\n    },\n    handleTouchMove (event) {\n      event.preventDefault();\n      this.setClock(event.changedTouches[0], false);\n    },\n    handleTouchEnd (event) {\n      event.preventDefault();\n      this.setClock(event.changedTouches[0], true);\n    },\n    setClock (event, finish) {\n      if (typeof event.offsetX === 'undefined') {\n        const offset = getTouchEventOffsetValues(event);\n        event.offsetX = offset.offsetX;\n        event.offsetY = offset.offsetY;\n      }\n      const hours = this.getHours(event.offsetX, event.offsetY);\n      this.$emit('change', hours, finish);\n    },\n    getHours (offsetX, offsetY) {\n      const step = 30;\n      const x = offsetX - this.center.x;\n      const y = offsetY - this.center.y;\n      const cx = this.basePoint.x - this.center.x;\n      const cy = this.basePoint.y - this.center.y;\n      const atan = Math.atan2(cx, cy) - Math.atan2(x, y);\n      let deg = rad2deg(atan);\n      deg = Math.round(deg / step) * step;\n      deg %= 360;\n      let value = Math.floor(deg / step) || 0;\n      const delta = Math.pow(x, 2) + Math.pow(y, 2);\n      const distance = Math.sqrt(delta);\n      value = value || 12;\n      if (this.format === '24hr') {\n        if (distance < 90) {\n          value += 12;\n          value %= 24;\n        }\n      } else {\n        value %= 12;\n      }\n      return value;\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-timepicker-hours'\n    }, [\n      h(ClockPointer, {\n        props: {\n          type: 'hour',\n          hasSelected: true,\n          value: this.getSelected()\n        }\n      }),\n      this.hours.map((hour) => {\n        return h(ClockNumber, {\n          props: {\n            selected: this.getSelected() === hour,\n            type: 'hour',\n            value: hour\n          },\n          key: hour\n        });\n      }),\n      h('div', {\n        staticClass: 'mu-timepicker-hours-mask',\n        on: {\n          mousedown: this.handleDown,\n          mouseup: this.handleUp,\n          mousemove: this.handleMove,\n          touchmove: this.handleTouchMove,\n          touchend: this.handleTouchEnd\n        },\n        ref: 'mask'\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/ListView.js",
    "content": "export default {\n  props: {\n    format: {\n      type: String,\n      default: 'ampm',\n      validator (val) {\n        return ['ampm', '24hr'].indexOf(val) !== -1;\n      }\n    },\n    time: {\n      type: Date,\n      default () {\n        return new Date();\n      }\n    }\n  },\n  computed: {\n    hours () {\n      const hourSize = this.format === 'ampm' ? 12 : 24;\n      const hours = [];\n      for (let i = 1; i <= hourSize; i++) {\n        const num = i % 24;\n        num === 0 ? hours.unshift('00') : hours.push(num > 9 ? num : '0' + num);\n      }\n      return hours;\n    },\n    minutes () {\n      const minutes = [];\n      for (let i = 1; i <= 60; i++) {\n        const num = i % 60;\n        num === 0 ? minutes.unshift('00') : minutes.push(num > 9 ? num : '0' + num);\n      }\n      return minutes;\n    }\n  },\n  mounted () {\n    this.scrollToSelected(this.$refs.hours);\n    this.scrollToSelected(this.$refs.minutes);\n  },\n  methods: {\n    scrollToSelected (container) {\n      const buttonNode = container.querySelector('.is-active');\n      const btnTop = buttonNode.offsetTop;\n      const btnHeight = buttonNode.offsetHeight;\n      const containerTop = container.offsetTop;\n      const containerHeight = container.offsetHeight;\n      const top = containerTop + containerHeight / 2;\n      const maxScrollTop = container.scrollHeight - containerHeight;\n      let scrollTop = btnTop + btnHeight / 2 - top;\n      scrollTop = Math.min(maxScrollTop, scrollTop);\n      scrollTop = Math.max(0, scrollTop);\n      setTimeout(() => (container.scrollTop = scrollTop), 0);\n    },\n    createHoursList (h) {\n      const buttons = this.hours.map((hour) => {\n        const val = Number(hour);\n        let curHour = this.time.getHours();\n        if (this.format === 'ampm') {\n          curHour %= 12;\n          curHour = curHour || 12;\n        }\n        const isActive = curHour === val;\n        return h('button', {\n          staticClass: 'mu-timepicker-hour-button',\n          class: {\n            'is-active': isActive\n          },\n          on: {\n            click: () => this.$emit('changeHours', val)\n          }\n        }, hour);\n      });\n      return h('div', {\n        staticClass: 'mu-timepicker-list-hours',\n        ref: 'hours'\n      }, buttons);\n    },\n    createMinutesList (h) {\n      const buttons = this.minutes.map((minute) => {\n        const val = Number(minute);\n        return h('button', {\n          staticClass: 'mu-timepicker-minute-button',\n          class: {\n            'is-active': this.time.getMinutes() === val\n          },\n          on: {\n            click: () => this.$emit('changeMinutes', val)\n          }\n        }, minute);\n      });\n      return h('div', {\n        staticClass: 'mu-timepicker-list-minutes',\n        ref: 'minutes'\n      }, buttons);\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-timepicker-list'\n    }, [\n      this.createHoursList(h),\n      this.createMinutesList(h)\n    ]);\n  },\n  watch: {\n    time () {\n      if (this.$isServer) return;\n      this.$nextTick(() => {\n        this.scrollToSelected(this.$refs.hours);\n        this.scrollToSelected(this.$refs.minutes);\n      });\n    }\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/Minutes.js",
    "content": "import ClockNumber from './Number';\nimport ClockPointer from './Pointer';\nimport { getTouchEventOffsetValues, rad2deg } from './timeUtils';\n\nexport default {\n  props: {\n    initialMinutes: {\n      type: Number,\n      default () {\n        return new Date().getMinutes();\n      }\n    }\n  },\n  mounted () {\n    const clockElement = this.$refs.mask;\n    this.center = {\n      x: clockElement.offsetWidth / 2,\n      y: clockElement.offsetHeight / 2\n    };\n    this.basePoint = {\n      x: this.center.x,\n      y: 0\n    };\n  },\n  data () {\n    return {\n      minutes: null\n    };\n  },\n  created () {\n    this.minutes = this.getMinuteNumbers();\n  },\n  methods: {\n    getMinuteNumbers () {\n      const minutes = [];\n      for (let i = 0; i < 12; i++) {\n        minutes.push(i * 5);\n      }\n      const selectedMinutes = this.initialMinutes;\n      let hasSelected = false;\n      const numbers = minutes.map((minute) => {\n        const isSelected = selectedMinutes === minute;\n        if (isSelected) {\n          hasSelected = true;\n        }\n        return {\n          minute,\n          isSelected\n        };\n      });\n      return {\n        numbers: numbers,\n        hasSelected: hasSelected,\n        selected: selectedMinutes\n      };\n    },\n    isMousePressed (event) {\n      if (typeof event.buttons === 'undefined') {\n        return event.nativeEvent.which;\n      }\n      return event.buttons;\n    },\n    handleDown (event) {\n      this.isMouseDown = true;\n    },\n    handleUp (event) {\n      if (!this.isMouseDown) return;\n      event.preventDefault();\n      this.isMouseDown = false;\n      this.setClock(event, true);\n    },\n    handleMove (event) {\n      event.preventDefault();\n      if (this.isMousePressed(event) !== 1) {\n        return;\n      }\n      this.setClock(event, false);\n    },\n    handleTouch (event) {\n      event.preventDefault();\n      this.setClock(event.changedTouches[0], event.type.toLowerCase() === 'touchend');\n    },\n    setClock (event, finish) {\n      if (typeof event.offsetX === 'undefined') {\n        const offset = getTouchEventOffsetValues(event);\n        event.offsetX = offset.offsetX;\n        event.offsetY = offset.offsetY;\n      }\n      const minutes = this.getMinutes(event.offsetX, event.offsetY);\n      this.$emit('change', minutes, finish);\n    },\n    getMinutes (offsetX, offsetY) {\n      const step = 6;\n      const x = offsetX - this.center.x;\n      const y = offsetY - this.center.y;\n      const cx = this.basePoint.x - this.center.x;\n      const cy = this.basePoint.y - this.center.y;\n      const atan = Math.atan2(cx, cy) - Math.atan2(x, y);\n      let deg = rad2deg(atan);\n      deg = Math.round(deg / step) * step;\n      deg %= 360;\n      const value = Math.floor(deg / step) || 0;\n      return value;\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-timepicker-minutes'\n    }, [\n      h(ClockPointer, {\n        props: {\n          hasSelected: this.minutes.hasSelected,\n          value: this.minutes.selected,\n          type: 'minute'\n        }\n      }),\n      this.minutes.numbers.map((minute) => {\n        return h(ClockNumber, {\n          props: {\n            selected: minute.isSelected,\n            type: 'minute',\n            value: minute.minute\n          },\n          key: minute.minute\n        });\n      }),\n      h('div', {\n        staticClass: 'mu-timepicker-minutes-mask',\n        on: {\n          mousedown: this.handleDown,\n          mouseup: this.handleUp,\n          mousemove: this.handleMove,\n          touchmove: this.handleTouch,\n          touchend: this.handleTouch\n        },\n        ref: 'mask'\n      })\n    ]);\n  },\n  watch: {\n    initialMinutes (val) {\n      this.minutes = this.getMinuteNumbers();\n    }\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/Number.js",
    "content": "import { isInner } from './timeUtils';\nconst positions = [\n  [0, 5],\n  [54.5, 16.6],\n  [94.4, 59.5],\n  [109, 114],\n  [94.4, 168.5],\n  [54.5, 208.4],\n  [0, 223],\n  [-54.5, 208.4],\n  [-94.4, 168.5],\n  [-109, 114],\n  [-94.4, 59.5],\n  [-54.5, 19.6]\n];\nconst innerPositions = [\n  [0, 40],\n  [36.9, 49.9],\n  [64, 77],\n  [74, 114],\n  [64, 151],\n  [37, 178],\n  [0, 188],\n  [-37, 178],\n  [-64, 151],\n  [-74, 114],\n  [-64, 77],\n  [-37, 50]\n];\nexport default {\n  inject: ['getColorObject'],\n  props: {\n    value: {\n      type: Number,\n      default: 0\n    },\n    type: {\n      type: String,\n      default: 'minute',\n      validator (val) {\n        return ['hour', 'minute'].indexOf(val) !== -1;\n      }\n    },\n    selected: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    isInner () {\n      return isInner(this);\n    },\n    numberClass () {\n      return {\n        'mu-timepicker-number__selected': this.selected,\n        'mu-timepicker-number__inner': this.isInner\n      };\n    },\n    numberStyle () {\n      let pos = this.value;\n      if (this.type === 'hour') {\n        pos %= 12;\n      } else {\n        pos = pos / 5;\n      }\n      let transformPos = positions[pos];\n      if (this.isInner) transformPos = innerPositions[pos];\n      const [x, y] = transformPos;\n      return {\n        transform: `translate(${x}px, ${y}px)`,\n        left: this.isInner ? 'calc(50% - 14px)' : 'calc(50% - 16px)'\n      };\n    }\n  },\n  render (h) {\n    const { color, bgColorClass } = this.getColorObject();\n    return h('span', {\n      staticClass: 'mu-timepicker-number ' + (this.selected ? bgColorClass : ''),\n      class: this.numberClass,\n      style: {\n        'background-color': this.selected ? color : '',\n        ...this.numberStyle\n      }\n    }, this.value === 0 ? '00' : this.value);\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/Pointer.js",
    "content": "import { isInner } from './timeUtils';\n\nexport default {\n  props: {\n    hasSelected: {\n      type: Boolean,\n      default: false\n    },\n    type: {\n      type: String,\n      default: 'minute',\n      validator (val) {\n        return ['hour', 'minute'].indexOf(val) !== -1;\n      }\n    },\n    value: {\n      type: Number\n    }\n  },\n  computed: {\n    isInner () {\n      return isInner(this);\n    },\n    pointerStyle () {\n      const { type, value, calcAngle } = this;\n      const angle = type === 'hour' ? calcAngle(value, 12) : calcAngle(value, 60);\n      return {\n        transform: `rotateZ(${angle}deg)`\n      };\n    }\n  },\n  methods: {\n    calcAngle (value, base) {\n      value %= base;\n      const angle = 360 / base * value;\n      return angle;\n    }\n  },\n  render (h) {\n    if (this.value === undefined || this.value === null) return h('span', {});\n    return h('div', {\n      staticClass: 'mu-timepicker-pointer',\n      class: {\n        'inner': this.isInner\n      },\n      style: this.pointerStyle\n    }, [\n      h('div', {\n        staticClass: 'mu-timepicker-pointer-mark',\n        class: {\n          'has-selected': this.hasSelected\n        }\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/TimeDisplay.js",
    "content": "import color from '../../internal/mixins/color';\n\nexport default {\n  mixins: [color],\n  props: {\n    affix: {\n      type: String,\n      default: '',\n      validator (val) {\n        return ['', 'pm', 'am'].indexOf(val) !== -1;\n      }\n    },\n    format: {\n      type: String,\n      validator (val) {\n        return val && ['ampm', '24hr'].indexOf(val) !== -1;\n      }\n    },\n    mode: {\n      type: String,\n      default: 'hour',\n      validator (val) {\n        return ['hour', 'minute'].indexOf(val) !== -1;\n      }\n    },\n    selectedTime: {\n      type: Date,\n      default () {\n        return new Date();\n      },\n      required: true\n    },\n    viewType: String\n  },\n  computed: {\n    sanitizeTime () {\n      let hour = this.selectedTime.getHours();\n      let min = this.selectedTime.getMinutes().toString();\n      if (this.format === 'ampm') {\n        hour %= 12;\n        hour = hour || 12;\n      }\n      hour = hour.toString();\n      if (hour.length < 2) hour = `0${hour}`;\n      if (min.length < 2) min = `0${min}`;\n      return [hour, min];\n    }\n  },\n  methods: {\n    handleSelectAffix (affix) {\n      this.$emit('selectAffix', affix);\n    },\n    handleSelectHour () {\n      this.$emit('changeView', 'hour');\n    },\n    handleSelectMin () {\n      this.$emit('changeView', 'minute');\n    }\n  },\n  render (h) {\n    const displayTime = h('div', {\n      staticClass: 'mu-time-display-time'\n    }, [\n      h('span', {\n        staticClass: 'mu-time-display-clickable',\n        class: {\n          'inactive': this.viewType === 'clock' && this.mode === 'minute'\n        },\n        on: {\n          click: this.viewType === 'list' ? () => {} : this.handleSelectHour\n        }\n      }, this.sanitizeTime[0]),\n      h('span', {}, ':'),\n      h('span', {\n        staticClass: 'mu-time-display-clickable',\n        class: {\n          'inactive': this.viewType === 'clock' && this.mode === 'hour'\n        },\n        on: {\n          click: this.viewType === 'list' ? () => {} : this.handleSelectMin\n        }\n      }, this.sanitizeTime[1])\n    ]);\n\n    const displayAffix = this.format === 'ampm' ? h('div', {\n      staticClass: 'mu-time-display-affix'\n    }, [\n      h('div', {\n        staticClass: 'mu-time-display-clickable',\n        class: {\n          'inactive': this.affix === 'am'\n        },\n        on: {\n          click: () => this.handleSelectAffix('pm')\n        }\n      }, 'PM'),\n      h('div', {\n        staticClass: 'mu-time-display-clickable',\n        class: {\n          'inactive': this.affix === 'pm'\n        },\n        on: {\n          click: () => this.handleSelectAffix('am')\n        }\n      }, 'AM')\n    ]) : undefined;\n    return h('div', {\n      staticClass: 'mu-picker-display mu-time-display ' + this.getColorClass(false),\n      style: {\n        'background-color': this.getColor(this.color)\n      }\n    }, [\n      h('div', {\n        staticClass: 'mu-time-display-text'\n      }, [\n        this.format === 'ampm' ? h('div', {\n          staticClass: 'mu-time-display-affix'\n        }) : undefined,\n        displayTime,\n        displayAffix\n      ])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/TimePicker.js",
    "content": "import TimeDisplay from './TimeDisplay';\nimport ClockHours from './Hours';\nimport ClockMinutes from './Minutes';\nimport ListView from './ListView';\nimport color from '../../internal/mixins/color';\nimport pickerProps from '../mixins/props';\n\nexport default {\n  name: 'mu-time-picker',\n  provide () {\n    return {\n      getColorObject: this.getColorObject\n    };\n  },\n  mixins: [color, pickerProps],\n  props: {\n    viewType: {\n      type: String,\n      default: 'clock',\n      validator (val) {\n        return ['clock', 'list'].indexOf(val) !== -1;\n      }\n    },\n    format: {\n      type: String,\n      default: 'ampm',\n      validator (val) {\n        return ['ampm', '24hr'].indexOf(val) !== -1;\n      }\n    },\n    time: {\n      type: Date,\n      default () {\n        return new Date();\n      }\n    }\n  },\n  data () {\n    return {\n      view: 'hour'\n    };\n  },\n  methods: {\n    getColorObject () {\n      return {\n        color: this.getColor(this.color),\n        colorClass: this.getNormalColorClass(this.color, true),\n        bgColorClass: this.getNormalColorClass(this.color)\n      };\n    },\n    getAffix () {\n      if (this.format !== 'ampm') return '';\n      const hours = this.time.getHours();\n      if (hours < 12) {\n        return 'am';\n      }\n      return 'pm';\n    },\n    handleSelectAffix (affix) {\n      if (affix === this.getAffix()) return;\n      const hours = this.time.getHours();\n      if (affix === 'am') {\n        this.handleChangeHours(hours - 12, affix);\n        return;\n      }\n      this.handleChangeHours(hours + 12, affix);\n    },\n    handleChangeHours (hours, finished) {\n      const time = new Date(this.time);\n      let affix;\n      if (typeof finished === 'string') {\n        affix = finished;\n        finished = undefined;\n      }\n      if (!affix) {\n        affix = this.getAffix();\n      }\n      if (affix === 'pm' && hours < 12) {\n        hours += 12;\n      }\n      time.setHours(hours);\n      this.changeTime(time, 'hour', finished);\n      if (finished) this.view = 'minute';\n    },\n    handleChangeMinutes (minutes, finished) {\n      const time = new Date(this.time);\n      time.setMinutes(minutes);\n      this.changeTime(time, 'minute', finished);\n      if (finished) this.view = 'hour';\n    },\n    changeTime (time, view, finished) {\n      this.$emit('change', time, view, finished);\n      this.$emit('update:time', time);\n    },\n    changeView (view) {\n      this.view = view;\n    },\n    createTimeDisplay (h) {\n      if (this.noDisplay) return;\n      return h(TimeDisplay, {\n        props: {\n          selectedTime: this.time,\n          format: this.format,\n          mode: this.view,\n          color: this.displayColor,\n          viewType: this.viewType,\n          affix: this.getAffix()\n        },\n        on: {\n          changeView: this.changeView,\n          selectAffix: this.handleSelectAffix\n        }\n      });\n    },\n    createClock (h) {\n      return h('div', {\n        staticClass: 'mu-timepicker-clock'\n      }, [\n        h('div', { staticClass: 'mu-timepicker-circle' }),\n        this.view === 'hour' ? h(ClockHours, {\n          props: {\n            format: this.format,\n            initialHours: this.time.getHours()\n          },\n          on: {\n            change: this.handleChangeHours\n          }\n        }) : undefined,\n        this.view === 'minute' ? h(ClockMinutes, {\n          props: {\n            initialMinutes: this.time.getMinutes()\n          },\n          on: {\n            change: this.handleChangeMinutes\n          }\n        }) : undefined\n      ]);\n    },\n    createList (h) {\n      return h(ListView, {\n        props: {\n          format: this.format,\n          time: this.time\n        },\n        on: {\n          changeHours: (val) => this.handleChangeHours(val, true),\n          changeMinutes: (val) => this.handleChangeMinutes(val, true)\n        }\n      });\n    }\n  },\n  render (h) {\n    const { color, colorClass } = this.getColorObject();\n    return h('div', {\n      staticClass: 'mu-picker mu-timepicker ' + colorClass,\n      style: {\n        color\n      },\n      class: {\n        'mu-picker-landspace': this.landscape\n      }\n    }, [\n      this.createTimeDisplay(h),\n      h('div', {\n        staticClass: 'mu-picker-container'\n      }, [\n        this.viewType === 'list' ? this.createList(h) : this.createClock(h),\n        this.$slots.default\n      ])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Picker/TimePicker/index.js",
    "content": "export { default } from './TimePicker';\n"
  },
  {
    "path": "src/Picker/TimePicker/timeUtils.js",
    "content": "/**\n * material-ui timeUtils.js\n * https://github.com/callemall/material-ui/blob/master/src/TimePicker/timeUtils.js\n */\nexport function addHours (d, hours) {\n  const newDate = clone(d);\n  newDate.setHours(d.getHours() + hours);\n  return newDate;\n}\n\nexport function addMinutes (d, minutes) {\n  const newDate = clone(d);\n  newDate.setMinutes(d.getMinutes() + minutes);\n  return newDate;\n}\n\nexport function addSeconds (d, seconds) {\n  const newDate = clone(d);\n  newDate.setSeconds(d.getMinutes() + seconds);\n  return newDate;\n}\n\nfunction clone (d) {\n  return new Date(d.getTime());\n}\n\n/**\n * @param date [Date] A Date object.\n * @param format [String] One of 'ampm', '24hr', defaults to 'ampm'.\n * @param pedantic [Boolean] Check time-picker/time-picker.jsx file.\n *\n * @return String A string representing the formatted time.\n */\nexport function formatTime (date, format = 'ampm', pedantic = false) {\n  if (!date) return '';\n  let hours = date.getHours();\n  let mins = date.getMinutes().toString();\n\n  if (format === 'ampm') {\n    const isAM = hours < 12;\n    hours = hours % 12;\n    const additional = isAM ? ' am' : ' pm';\n    hours = (hours || 12).toString();\n\n    if (mins.length < 2) mins = `0${mins}`;\n\n    if (pedantic) {\n      // Treat midday/midnight specially http://www.nist.gov/pml/div688/times.cfm\n      if (hours === '12' && mins === '00') {\n        return additional === ' pm' ? '12 noon' : '12 midnight';\n      }\n    }\n\n    return hours + (mins === '00' ? '' : `:${mins}`) + additional;\n  }\n\n  hours = hours.toString();\n\n  if (hours.length < 2) hours = `0${hours}`;\n  if (mins.length < 2) mins = `0${mins}`;\n\n  return `${hours}:${mins}`;\n}\n\nexport function strToTime (str, format = 'ampm', pedantic = false) {\n  const date = new Date();\n  if (!str) return date;\n  let mtype = '';\n  let index = -1;\n  if (format === 'ampm') {\n    index = str.indexOf('am');\n    if (index === -1) index = str.indexOf('midnight');\n    if (index !== -1) {\n      mtype = 'am';\n    } else {\n      mtype = 'pm';\n      index = str.indexOf('pm');\n      if (index === -1) index = str.indexOf('noon');\n    }\n  }\n\n  if (index !== -1) str = str.substring(0, index).trim();\n\n  const times = str.split(':');\n  let hour = Number(times[0].trim());\n  if (mtype === 'pm') {\n    hour += 12;\n  }\n  if (hour >= 24) hour = 0;\n  const minute = times.length > 1 ? Number(times[1]) : 0;\n  date.setMinutes(minute);\n  date.setHours(hour);\n  return date;\n}\n\nexport function rad2deg (rad) {\n  return rad * 57.29577951308232;\n}\n\nexport function getTouchEventOffsetValues (event) {\n  const el = event.target;\n  const boundingRect = el.getBoundingClientRect();\n\n  return {\n    offsetX: event.clientX - boundingRect.left,\n    offsetY: event.clientY - boundingRect.top\n  };\n}\n\nexport function isInner (props) {\n  if (props.type !== 'hour') {\n    return false;\n  }\n  return props.value < 1 || props.value > 12;\n}\n"
  },
  {
    "path": "src/Picker/index.js",
    "content": "import '../styles/components/picker.less';\nimport theme from '../theme';\nimport PickerTheme from './theme';\nimport DatePicker from './DatePicker';\nimport TimePicker from './TimePicker';\nimport DateTimePicker from './DateTimePicker';\n\ntheme.addCreateTheme(PickerTheme);\nexport { DatePicker, TimePicker, DateTimePicker };\nexport default {\n  install (Vue) {\n    Vue.component(DatePicker.name, DatePicker);\n    Vue.component(TimePicker.name, TimePicker);\n    Vue.component(DateTimePicker.name, DateTimePicker);\n  }\n};\n"
  },
  {
    "path": "src/Picker/mixins/props.js",
    "content": "export default {\n  props: {\n    landscape: Boolean,\n    noDisplay: Boolean,\n    displayColor: String\n  }\n};\n"
  },
  {
    "path": "src/Picker/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\nexport default (theme, type) => {\n  return `\n  .mu-picker {\n    color: ${theme.primary};\n    background-color: ${theme.background.paper};\n  }\n  .mu-picker-display {\n    background-color: ${type === 'dark' ? '#555555' : 'currentColor'};\n  }\n  .mu-datepicker-week,\n  .mu-datepicker-toolbar-title,\n  .mu-datepicker-tool-btn,\n  .mu-datepicker-svg-icon,\n  .mu-day-button-text,\n  .mu-month-button-text,\n  .mu-year-button-text,\n  .mu-timepicker-number {\n    color: ${theme.text.primary};\n  }\n\n  .mu-day-button:hover:not(:disabled) .mu-day-button-text,\n  .mu-day-button.selected .mu-day-button-text{\n    color: ${theme.text.alternate};\n  }\n\n  .mu-month-button:hover .mu-month-button-text,\n  .mu-month-button.selected .mu-month-button-text {\n    color: ${theme.text.alternate};\n  }\n  .mu-month-button:disabled .mu-month-button-text {\n    color: ${theme.text.disabled};\n  }\n\n  .mu-timepicker-number__selected {\n    background-color: ${theme.primary};\n    color: ${theme.text.alternate};\n  }\n\n  .mu-timepicker-pointer-mark {\n     background-color: ${theme.text.alternate};\n  }\n  .mu-timepicker-list-hours {\n    border-right-color: ${theme.divider};\n  }\n  .mu-timepicker-hour-button,\n  .mu-timepicker-minute-button {\n    color: ${theme.text.primary};\n  }\n  .mu-timepicker-hour-button:hover,\n  .mu-timepicker-minute-button:hover,\n  .mu-year-button:hover {\n    background-color: ${fade(theme.text.primary, 0.1)};\n  }\n  .mu-datetime-picker .mu-tabs {\n    background-color: ${type === 'dark' ? '#555555' : ''};\n    color: ${type === 'dark' ? theme.text.secondary : ''}\n  }\n  .mu-datetime-picker .mu-tab-active {\n    color: ${type === 'dark' ? theme.text.primary : ''}\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Popover/Popover.js",
    "content": "import popup from '../internal/mixins/popup';\nimport scroll from '../internal/directives/scroll';\nimport resize from '../internal/directives/resize';\nimport clickOutSide from '../internal/directives/click-outside';\nimport { PopoverTransiton } from '../internal/transitions';\n\nconst SPACE = 8;\nexport default {\n  name: 'mu-popover',\n  mixins: [popup],\n  directives: {\n    scroll,\n    resize,\n    'click-outside': clickOutSide\n  },\n  props: {\n    overlay: {\n      default: false\n    },\n    lazy: Boolean,\n    cover: Boolean,\n    space: {\n      type: Number,\n      default: 0\n    }, // 距离trigger 的间隔, 在cover false的情况下完成\n    trigger: {},\n    placement: {\n      type: String,\n      default: 'bottom-start',\n      validator (val) {\n        return [\n          'top', 'top-start', 'top-end',\n          'bottom', 'bottom-start', 'bottom-end',\n          'left', 'left-start', 'left-end',\n          'right', 'right-start', 'right-end'\n        ].indexOf(val) !== -1;\n      }\n    }\n  },\n  methods: {\n    getLeftPosition (width, react) {\n      let left = 0;\n      const maxLeft = window.innerWidth - SPACE - width;\n      const minLeft = SPACE;\n      switch (this.placement) {\n        case 'left':\n        case 'left-start':\n        case 'left-end':\n          left = react.left - width - this.space;\n          if (this.cover) {\n            left += react.width;\n          } else if (left < minLeft) {\n            left = react.left + react.width + this.space;\n          };\n          break;\n        case 'right':\n        case 'right-start':\n        case 'right-end':\n          left = this.cover\n            ? react.left\n            : react.left + react.width > maxLeft\n              ? react.left - width - this.space\n              : react.left + react.width + this.space;\n          break;\n        case 'top':\n        case 'bottom':\n          left = react.left + react.width / 2 - width / 2;\n          break;\n        case 'bottom-start':\n        case 'top-start':\n          left = react.left;\n          break;\n        case 'bottom-end':\n        case 'top-end':\n          left = react.left + react.width - width;\n          break;\n      }\n      left = Math.min(maxLeft, left);\n      left = Math.max(minLeft, left);\n      return left;\n    },\n    getTopPosition (height, react) {\n      let top = 0;\n      const maxTop = window.innerHeight - SPACE - height;\n      const minTop = SPACE;\n      switch (this.placement) {\n        case 'top':\n        case 'top-start':\n        case 'top-end':\n          top = react.top - height;\n          if (!this.cover) {\n            top += this.space;\n            if (top < minTop) top = react.top + react.height + this.space;\n          } else {\n            top += react.height;\n          }\n          break;\n        case 'bottom':\n        case 'bottom-start':\n        case 'bottom-end':\n          top = this.cover ? react.top\n            : react.top + react.height + this.space > maxTop\n              ? react.top - height - this.space\n              : react.top + react.height + this.space;\n          break;\n        case 'left':\n        case 'right':\n          top = react.top + react.height / 2 - height / 2;\n          break;\n        case 'left-start':\n        case 'right-start':\n          top = react.top;\n          break;\n        case 'left-end':\n        case 'right-end':\n          top = react.top + react.height - height;\n          break;\n      }\n      top = Math.min(maxTop, top);\n      top = Math.max(minTop, top);\n      return top;\n    },\n    setStyle () {\n      if (!this.open) return;\n      const el = this.$el;\n      const triggerEl = this.trigger;\n      if (!el || !triggerEl) return;\n      const react = triggerEl.getBoundingClientRect();\n      if (react.top < -react.height || react.top > window.innerHeight) this.close('overflow');\n      el.style.top = this.getTopPosition(el.offsetHeight, react) + 'px';\n      el.style.left = this.getLeftPosition(el.offsetWidth, react) + 'px';\n    },\n    close (reason) {\n      if (!this.open) return;\n      this.$emit('update:open', false);\n      this.$emit('close', reason);\n    },\n    clickOutSide (e) {\n      if (this.trigger && this.trigger.contains(e.target)) return;\n      this.close('clickOutSide');\n    },\n    getTransitionName () {\n      if (this.cover) return `transition-${this.placement}`;\n      return this.placement.indexOf('top') !== -1 ||\n        ['left-end', 'right-end'].indexOf(this.placement) !== -1\n        ? 'transition-top' : 'transition-bottom';\n    }\n  },\n  mounted () {\n    this.setStyle();\n  },\n  updated () {\n    setTimeout(() => {\n      this.setStyle();\n    }, 0);\n  },\n  render (h) {\n    const directives = [{\n      name: 'resize',\n      value: this.setStyle\n    }, {\n      name: 'scroll',\n      value: {\n        target: this.trigger,\n        callback: this.setStyle\n      }\n    }, {\n      name: 'click-outside',\n      value: this.clickOutSide\n    }];\n    if (!this.lazy) {\n      directives.push({\n        name: 'show',\n        value: this.open\n      });\n    }\n\n    const transition = this.getTransitionName();\n    return h(PopoverTransiton, [\n      !this.lazy || this.open ? h('div', {\n        staticClass: `mu-popover ${transition}`,\n        style: {\n          'z-index': this.zIndex\n        },\n        on: this.$listeners,\n        directives\n      }, this.$slots.default) : undefined\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Popover/index.js",
    "content": "import '../styles/components/popover.less';\nimport theme from '../theme';\nimport PopoverTheme from './theme';\nimport Popover from './Popover';\n\nPopover.install = function (Vue) {\n  Vue.component(Popover.name, Popover);\n};\n\ntheme.addCreateTheme(PopoverTheme);\nexport default Popover;\n"
  },
  {
    "path": "src/Popover/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-popover{\n    background: ${theme.background.paper};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Progress/Circular.js",
    "content": "import color from '../internal/mixins/color';\n\nexport default {\n  mixins: [color],\n  props: {\n    size: {\n      type: Number,\n      default: 24\n    },\n    color: {\n      type: String,\n      default: ''\n    },\n    borderWidth: {\n      type: Number,\n      default: 3\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-circle-wrapper active',\n      style: {\n        width: this.size + 'px',\n        height: this.size + 'px'\n      }\n    }, [\n      h('div', {\n        staticClass: `mu-circle-spinner active ${this.getColorClass()}`,\n        style: {\n          'border-color': this.getColor(this.color)\n        }\n      }, [\n        h('div', { staticClass: 'mu-circle-clipper left' }, [\n          h('div', { staticClass: 'mu-circle', style: { 'border-width': this.borderWidth + 'px' }})\n        ]),\n        h('div', { staticClass: 'mu-circle-gap-patch' }, [\n          h('div', { staticClass: 'mu-circle' })\n        ]),\n        h('div', { staticClass: 'mu-circle-clipper right' }, [\n          h('div', { staticClass: 'mu-circle', style: { 'border-width': this.borderWidth + 'px' }})\n        ])\n      ])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Progress/CircularProgress.js",
    "content": "import Circular from './Circular';\nimport color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-circular-progress',\n  mixins: [color],\n  props: {\n    max: {\n      type: Number,\n      default: 100\n    },\n    min: {\n      type: Number,\n      default: 0\n    },\n    mode: {\n      type: String,\n      default: 'indeterminate',\n      validator (val) {\n        return ['indeterminate', 'determinate'].indexOf(val) !== -1;\n      }\n    },\n    value: {\n      type: Number,\n      default: 0\n    },\n    size: {\n      type: Number,\n      default: 24\n    },\n    strokeWidth: {\n      type: Number,\n      default: 3\n    }\n  },\n  computed: {\n    radius () {\n      return (this.size - this.strokeWidth) / 2;\n    },\n    circularSvgStyle () {\n      return {\n        width: this.size,\n        height: this.size\n      };\n    },\n    circularPathStyle () {\n      const relVal = this.getRelativeValue();\n      return {\n        stroke: this.getColor(this.color),\n        'stroke-dasharray': `${this.getArcLength(relVal)}, ${this.getArcLength(1)}`\n      };\n    }\n  },\n  methods: {\n    getArcLength (fraction) {\n      return fraction * Math.PI * (this.size - this.strokeWidth);\n    },\n    getRelativeValue () {\n      const { value, min, max } = this;\n      const clampedValue = Math.min(Math.max(min, value), max);\n      return clampedValue / (max - min);\n    },\n    createDeterminateCircular (h) {\n      if (this.mode !== 'determinate') return;\n      return h('svg', {\n        staticClass: 'mu-circular-progress-determinate',\n        style: this.circularSvgStyle,\n        attrs: {\n          viewBox: '0 0 ' + this.size + ' ' + this.size\n        }\n      }, [\n        h('circle', {\n          staticClass: 'mu-circular-progress-determinate-path',\n          style: this.circularPathStyle,\n          attrs: {\n            r: this.radius,\n            cx: this.size / 2,\n            cy: this.size / 2,\n            fill: 'none',\n            'stroke-miterlimit': '20',\n            'stroke-width': this.strokeWidth\n          }\n        })\n      ]);\n    }\n  },\n  render (h) {\n    const circular = this.mode === 'indeterminate'\n      ? h(Circular, {\n        props: {\n          size: this.size,\n          color: this.color,\n          borderWidth: this.strokeWidth\n        }\n      }) : undefined;\n    return h('div', {\n      staticClass: `mu-circular-progress ${this.getColorClass()}`,\n      style: {\n        width: this.size + 'px',\n        height: this.size + 'px'\n      }\n    }, [\n      circular,\n      this.createDeterminateCircular(h)\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Progress/LinearProgress.js",
    "content": "import color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-linear-progress',\n  mixins: [color],\n  props: {\n    max: {\n      type: Number,\n      default: 100\n    },\n    min: {\n      type: Number,\n      default: 0\n    },\n    mode: {\n      type: String,\n      default: 'indeterminate',\n      validator (val) {\n        return ['indeterminate', 'determinate'].indexOf(val) !== -1;\n      }\n    },\n    value: {\n      type: Number,\n      default: 0\n    },\n    size: [Number, String]\n  },\n  computed: {\n    percent () {\n      return (this.value - this.min) / (this.max - this.min) * 100;\n    },\n    linearStyle () {\n      const { color, mode, percent } = this;\n      return {\n        'background-color': this.getColor(color),\n        width: mode === 'determinate' ? percent + '%' : ''\n      };\n    },\n    linearClass () {\n      return 'mu-linear-progress-' + this.mode;\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: `mu-linear-progress ${this.getColorClass()}`,\n      style: {\n        height: this.size + 'px'\n      }\n    }, [\n      h('div', {\n        staticClass: 'mu-linear-progress-background',\n        style: {\n          'background-color': this.getColor(this.color)\n        }\n      }),\n      h('div', {\n        style: this.linearStyle,\n        class: this.linearClass\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Progress/index.js",
    "content": "import '../styles/components/progress.less';\nimport theme from '../theme';\nimport ProgressTheme from './theme';\nimport LinearProgress from './LinearProgress';\nimport CircularProgress from './CircularProgress';\n\ntheme.addCreateTheme(ProgressTheme);\nexport { LinearProgress, CircularProgress };\nexport default {\n  install (Vue) {\n    Vue.component(LinearProgress.name, LinearProgress);\n    Vue.component(CircularProgress.name, CircularProgress);\n  }\n};\n"
  },
  {
    "path": "src/Progress/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-linear-progress.mu-secondary-color .mu-linear-progress-background,\n  .mu-linear-progress.mu-secondary-color .mu-linear-progress-indeterminate,\n  .mu-linear-progress.mu-secondary-color .mu-linear-progress-determinate {\n    background-color: ${theme.secondary};\n  }\n  .mu-linear-progress.mu-success-color .mu-linear-progress-background,\n  .mu-linear-progress.mu-success-color .mu-linear-progress-indeterminate,\n  .mu-linear-progress.mu-success-color .mu-linear-progress-determinate {\n    background-color: ${theme.success};\n  }\n  .mu-linear-progress.mu-warning-color .mu-linear-progress-background,\n  .mu-linear-progress.mu-warning-color .mu-linear-progress-indeterminate,\n  .mu-linear-progress.mu-warning-color .mu-linear-progress-determinate {\n    background-color: ${theme.warning};\n  }\n  .mu-linear-progress.mu-info-color .mu-linear-progress-background,\n  .mu-linear-progress.mu-info-color .mu-linear-progress-indeterminate,\n  .mu-linear-progress.mu-info-color .mu-linear-progress-determinate {\n    background-color: ${theme.info};\n  }\n  .mu-linear-progress.mu-error-color .mu-linear-progress-background,\n  .mu-linear-progress.mu-error-color .mu-linear-progress-indeterminate,\n  .mu-linear-progress.mu-error-color .mu-linear-progress-determinate {\n    background-color: ${theme.error};\n  }\n  .mu-linear-progress-background {\n    background-color: ${theme.primary};\n  }\n  .mu-linear-progress-indeterminate{\n    background-color: ${theme.primary};\n  }\n  .mu-linear-progress-determinate{\n    background-color: ${theme.primary};\n  }\n  .mu-circle-spinner {\n    border-color: ${theme.primary};\n  }\n  .mu-circle-spinner.mu-secondary-color {\n    border-color: ${theme.secondary};\n  }\n  .mu-circular-progress.mu-secondary-color .mu-circular-progress-determinate-path {\n    stroke: ${theme.secondary};\n  }\n  .mu-circle-spinner.mu-success-color {\n    border-color: ${theme.success};\n  }\n  .mu-circular-progress.mu-success-color .mu-circular-progress-determinate-path {\n    stroke: ${theme.success};\n  }\n  .mu-circle-spinner.mu-warning-color {\n    border-color: ${theme.warning};\n  }\n  .mu-circular-progress.mu-warning-color .mu-circular-progress-determinate-path {\n    stroke: ${theme.warning};\n  }\n  .mu-circle-spinner.mu-info-color {\n    border-color: ${theme.info};\n  }\n  .mu-circular-progress.mu-info-color .mu-circular-progress-determinate-path {\n    stroke: ${theme.info};\n  }\n  .mu-circle-spinner.mu-error-color {\n    border-color: ${theme.error};\n  }\n  .mu-circular-progress.mu-error-color .mu-circular-progress-determinate-path {\n    stroke: ${theme.error};\n  }\n  .mu-circular-progress-determinate-path{\n    stroke: ${theme.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Radio/Radio.js",
    "content": "import select from '../internal/mixins/select';\nimport Icon from '../Icon';\nimport { isNull } from '../utils';\nexport default {\n  name: 'mu-radio',\n  mixins: [select('radio')],\n  props: {\n    inputValue: {}\n  },\n  computed: {\n    checked () {\n      const inputValue = this.inputValue;\n      const value = this.$attrs.value;\n      if (isNull(inputValue)) return false;\n      return inputValue === value;\n    }\n  },\n  methods: {\n    toggle () {\n      this.$emit('change', this.$attrs.value);\n    }\n  },\n  render (h) {\n    const defaultSvgUnCheckIcon = h('svg', {\n      staticClass: 'mu-radio-icon-uncheck mu-radio-svg-icon',\n      attrs: {\n        viewBox: '0 0 24 24'\n      }\n    }, [\n      h('path', {\n        attrs: {\n          d: 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z'\n        }\n      })\n    ]);\n    const defaultSvgCheckedIcon = h('svg', {\n      staticClass: 'mu-radio-icon-checked mu-radio-svg-icon',\n      attrs: {\n        viewBox: '0 0 24 24'\n      }\n    }, [\n      h('path', {\n        attrs: {\n          d: 'M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z'\n        }\n      })\n    ]);\n    const view = this.createRipple(h, 'mu-radio-icon', [\n      this.uncheckIcon ? h(Icon, {\n        staticClass: 'mu-radio-icon-uncheck',\n        props: {\n          value: this.uncheckIcon\n        }\n      }) : defaultSvgUnCheckIcon,\n      this.checkedIcon ? h(Icon, {\n        staticClass: 'mu-radio-icon-checked',\n        props: {\n          value: this.checkedIcon\n        }\n      }) : defaultSvgCheckedIcon\n    ]);\n    return this.createSelect(h, view);\n  }\n};\n"
  },
  {
    "path": "src/Radio/index.js",
    "content": "import '../styles/components/radio.less';\nimport theme from '../theme';\nimport RadioTheme from './theme';\nimport Radio from './Radio';\n\nRadio.install = function (Vue) {\n  Vue.component(Radio.name, Radio);\n};\n\ntheme.addCreateTheme(RadioTheme);\nexport default Radio;\n"
  },
  {
    "path": "src/Radio/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-radio.disabled  {\n    color: ${theme.text.disabled};\n  }\n  .mu-radio-checked {\n    color: ${theme.primary};\n  }\n  .mu-radio-label {\n    color: ${theme.text.primary};\n  }\n  .mu-radio.disabled .mu-radio-label {\n    color: ${theme.text.disabled};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Select/Option.js",
    "content": "import { ListItem, ListItemContent, ListItemTitle, ListAction } from '../List';\nimport Checkbox from '../Checkbox';\n\nexport default {\n  name: 'mu-option',\n  inject: ['addOption', 'removeOption', 'optionClick', 'isOptionSelected', 'isMultiple'],\n  props: {\n    label: {\n      required: true,\n      type: String\n    },\n    value: {\n      required: true\n    },\n    disabled: Boolean,\n    ripple: {\n      type: Boolean,\n      default: true\n    },\n    searchText: String, // 用户搜索的文本，如果设置此值，会根据这个字段来搜搜，否则使用label属性\n    avatar: Boolean\n  },\n  data () {\n    return {\n      visible: true,\n      focused: false\n    };\n  },\n  computed: {\n    selected () {\n      return this.isOptionSelected(this.value);\n    }\n  },\n  created () {\n    this.addOption(this);\n  },\n  destroyed () {\n    this.removeOption(this);\n  },\n  render (h) {\n    const defaultItem = [\n      this.isMultiple() ? h(ListAction, [\n        h(Checkbox, {\n          props: {\n            inputValue: this.selected,\n            color: 'secondary',\n            disabled: this.disabled,\n            tabIndex: -1\n          }\n        })\n      ]) : undefined,\n      h(ListItemContent, [\n        h(ListItemTitle, {}, this.label)\n      ])\n    ];\n    return h(ListItem, {\n      staticClass: 'mu-option',\n      ref: 'listItem',\n      class: {\n        'is-selected': this.selected,\n        'is-disabled': this.disabled,\n        'is-focused': this.focused\n      },\n      props: {\n        ripple: this.ripple,\n        open: this.open,\n        avatar: this.avatar,\n        button: !this.disabled,\n        tabIndex: -1\n      },\n      directives: [{\n        name: 'show',\n        value: this.visible\n      }],\n      on: {\n        click: (e) => this.optionClick(this.value)\n      }\n    }, this.$slots.default && this.$slots.default.length > 0 ? this.$slots.default : defaultItem);\n  }\n};\n"
  },
  {
    "path": "src/Select/Select.js",
    "content": "import input from '../internal/mixins/input.js';\nimport menu from './mixins/menu';\nimport selection from './mixins/selection';\nimport events from './mixins/events';\nimport keyboard from './mixins/keyboard';\n\nexport default {\n  name: 'mu-select',\n  mixins: [input, menu, selection, events, keyboard],\n  props: {\n    popoverClass: [String, Object, Array],\n    multiple: Boolean,\n    maxHeight: {\n      type: [String, Number],\n      default: 300\n    },\n    readonly: Boolean,\n    chips: Boolean,\n    tags: Boolean, // 可创建条目\n    placeholder: String,\n    separator: {\n      type: String,\n      default: ','\n    },\n    filterable: Boolean // enable search option\n  },\n  computed: {\n    autoComplete () {\n      return this.filterable || this.tags;\n    }\n  },\n  render (h) {\n    const { data, children, defaultActionIcon } = this.createSelection(h);\n    return this.createInput(h, data, [\n      ...children,\n      this.createMenu(h)\n    ], defaultActionIcon);\n  }\n};\n"
  },
  {
    "path": "src/Select/index.js",
    "content": "import '../styles/components/select.less';\nimport theme from '../theme';\nimport SelectTheme from './theme';\nimport Select from './Select';\nimport Option from './Option';\n\nSelect.install = function (Vue) {\n  Vue.component(Select.name, Select);\n  Vue.component(Option.name, Option);\n};\n\ntheme.addCreateTheme(SelectTheme);\nexport { Select, Option };\nexport default Select;\n"
  },
  {
    "path": "src/Select/mixins/events.js",
    "content": "export default {\n  methods: {\n    blur () {\n      this.deactivateInput();\n      this.closeMenu();\n      this.$emit('blur');\n    },\n    focus () {\n      this.activateInput();\n      this.openMenu();\n      this.$emit('focus');\n    },\n    focusInput () {\n      this.$refs.input.focus();\n    },\n    createListeners () {\n      const listeners = Object.assign({}, this.$listeners);\n      delete listeners.input;\n      delete listeners.change;\n      return {\n        ...listeners,\n        click: (e) => {\n          if (this.disabled || this.readonly || !this.autoComplete) return;\n          if (this.isFocused && !this.open) {\n            this.openMenu();\n            return;\n          }\n          this.focus();\n        },\n        focus: (e) => {\n          if (this.disabled || this.readonly || this.isFocused) {\n            return;\n          }\n\n          this.activateInput();\n          this.$nextTick(this.focusInput);\n        },\n        keydown: this.onKeydown //  mixins/keyboard.js\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "src/Select/mixins/keyboard.js",
    "content": "import keycode from 'keycode';\n\nexport default {\n  data () {\n    return {\n      focusIndex: -1\n    };\n  },\n  computed: {\n    enableOptions () {\n      return this.options.filter((option) => {\n        return option.visible && !option.disabled;\n      });\n    }\n  },\n  methods: {\n    onKeydown (e) {\n      if (this.disabled || this.readonly) return;\n      const code = keycode(e);\n      if (!this.open && ['enter', 'space', 'up', 'down'].indexOf(code) !== -1) {\n        e.preventDefault();\n        return this.openMenu();\n      }\n      const options = this.enableOptions;\n      switch (code) {\n        case 'enter':\n          const option = options[this.focusIndex];\n          if (option) {\n            this.optionClick(option.value);\n          } else if (this.tags && this.multiple && this.searchValue) {\n            this.optionClick(this.searchValue, true);\n          }\n          break;\n        case 'up':\n        case 'down':\n          e.preventDefault();\n          this.resetSelectedIndex();\n          code === 'up' ? this.decrementFocusIndex() : this.incrementFocusIndex();\n          break;\n        case 'tab':\n          this.blur();\n          if (this.multiple) this.searchValue = '';\n          break;\n        case 'left':\n        case 'right':\n        case 'delete':\n        case 'backspace':\n          if (!this.searchValue && this.autoComplete && this.multiple) this.changeSelectedIndex(code);\n          break;\n        default:\n          this.resetSelectedIndex();\n          break;\n      }\n    },\n    decrementFocusIndex () {\n      let index = this.focusIndex;\n      const maxIndex = this.getOptionCount() - 1;\n      index--;\n      if (index < 0) index = maxIndex;\n      this.setFocusIndex(index);\n    },\n    incrementFocusIndex () {\n      let index = this.focusIndex;\n      const maxIndex = this.getOptionCount() - 1;\n      index++;\n      if (index > maxIndex) index = 0;\n      this.setFocusIndex(index);\n    },\n    getOptionCount () {\n      return this.enableOptions.length;\n    },\n    resetFocusIndex () {\n      this.focusIndex = -1;\n    },\n    setFocusIndex (index) {\n      this.focusIndex = index;\n    },\n    getSelectedIndex () {\n      for (let i = 0; i < this.enableOptions.length; i++) {\n        if (this.enableOptions[i].selected) return i;\n      }\n      return -1;\n    },\n    setScollPosition (index) {\n      if (index === -1 || !this.open) return;\n      this.$nextTick(() => {\n        const option = this.enableOptions[index];\n        if (!option) return;\n        const optionEl = option.$el;\n        const optionHeight = optionEl.offsetHeight;\n        let scrollTop = optionEl.offsetTop - optionHeight;\n        if (scrollTop < optionHeight) scrollTop = 0;\n        this.$refs.popover.$el.scrollTop = scrollTop;\n      });\n    }\n  },\n  watch: {\n    focusIndex (val) {\n      this.enableOptions.forEach((option, index) => {\n        option.focused = index === val;\n      });\n      this.setScollPosition(val);\n    }\n  }\n};\n"
  },
  {
    "path": "src/Select/mixins/menu.js",
    "content": "import List from '../../List';\nimport Popover from '../../Popover';\n\nexport default {\n  provide () {\n    return {\n      optionClick: this.optionClick,\n      addOption: this.addOption,\n      removeOption: this.removeOption,\n      isOptionSelected: this.isOptionSelected,\n      isMultiple: this.isMultiple\n    };\n  },\n  props: {\n    textline: List.props.textline,\n    space: Popover.props.space,\n    placement: Popover.props.placement,\n    dense: {\n      ...List.props.dense,\n      default: true\n    },\n    noDataText: {\n      type: String,\n      default: '暂无数据显示'\n    }\n  },\n  data () {\n    return {\n      options: [],\n      open: false\n    };\n  },\n  computed: {\n    selects () {\n      if (!this.multiple) {\n        const option = this.getOption(this.value);\n        return option ? [{\n          label: option.label,\n          value: this.value,\n          index: 0\n        }] : [];\n      }\n      const selects = Array.isArray(this.value) ? this.value : [];\n      const selectItems = [];\n      for (let i = 0; i < selects.length; i++) {\n        const value = selects[i];\n        const option = this.getOption(value);\n        if (option) {\n          selectItems.push({\n            label: option.label,\n            value: option.value,\n            index: selectItems.length\n          });\n          continue;\n        }\n\n        if (this.tags) {\n          selectItems.push({\n            label: value,\n            value,\n            index: selectItems.length\n          });\n        }\n      }\n      return selectItems;\n    }\n  },\n  beforeDestroy () {\n    this.closeMenu();\n  },\n  methods: {\n    activateInput () {\n      this.isFocused = true;\n    },\n    deactivateInput () {\n      this.isFocused = false;\n      this.selectedIndex = -1;\n      this.setSeachValue();\n    },\n    openMenu () {\n      this.open = true;\n      this.resetOptionVisable();\n      const selectedIndex = this.getSelectedIndex();\n      this.setFocusIndex(selectedIndex);\n      setTimeout(() => this.setScollPosition(selectedIndex), 0);\n      if (this.autoComplete) {\n        this.$nextTick(() => {\n          this.$refs.input.select();\n        });\n      }\n    },\n    closeMenu () {\n      this.open = false;\n      this.resetFocusIndex();\n    },\n    toggleMenu () {\n      if (this.open) return this.closeMenu();\n      this.openMenu();\n      this.focusInput();\n    },\n    resetOptionVisable () {\n      this.options.forEach((option) => (option.visible = true));\n    },\n    isMultiple () {\n      return this.multiple;\n    },\n    isOptionSelected (value) {\n      return value === this.value || (\n        this.multiple &&\n        this.value &&\n        this.value.indexOf(value) !== -1\n      );\n    },\n    addOption (option) {\n      this.options.push(option);\n    },\n    removeOption (option) {\n      const index = this.options.indexOf(option);\n      if (index !== -1) this.options.splice(index, 1);\n    },\n    getOption (value) {\n      const option = this.options.filter((option) => option.value === value)[0];\n      if (option) return option;\n      return {\n        label: value,\n        value\n      };\n    },\n    insertValue (selectedValue, value) {\n      let index = 0;\n      for (let i = 0; i < this.options.length; i++) {\n        const item = this.options[i];\n        if (item.selected) {\n          index = selectedValue.indexOf(item.value) + 1;\n          continue;\n        }\n        if (item.value === value) {\n          return selectedValue.splice(index, 0, value);\n        }\n      }\n      return selectedValue.push(value);\n    },\n    optionClick (value, notRemove = false) {\n      let selectedValue = this.multiple ? this.value ? [...this.value] : [] : this.value;\n      if (this.multiple) {\n        const index = selectedValue.indexOf(value);\n        if (index === -1) {\n          this.insertValue(selectedValue, value);\n        } else {\n          if (!notRemove) selectedValue.splice(index, 1);\n        }\n      } else {\n        selectedValue = value;\n      }\n      this.$emit('input', selectedValue);\n      this.$emit('change', selectedValue);\n      if (this.multiple && this.autoComplete) this.searchValue = '';\n      this.$nextTick(() => {\n        this.focusInput();\n        if (!this.multiple) this.closeMenu();\n      });\n    },\n    createMenu (h) {\n      const trigger = this.$refs.select;\n      return h(Popover, {\n        staticClass: 'mu-option-list',\n        class: this.popoverClass,\n        style: {\n          'maxHeight': this.maxHeight + 'px',\n          'visibility': this.tags && this.enableOptions.length === 0 ? 'hidden' : '',\n          'min-width': trigger ? trigger.offsetWidth + 'px' : ''\n        },\n        ref: 'popover',\n        props: {\n          trigger: trigger,\n          open: this.open,\n          space: this.space,\n          cover: !this.autoComplete,\n          placement: this.placement\n        },\n        on: {\n          close: () => this.closeMenu()\n        }\n      }, [\n        h(List, {\n          props: {\n            textline: this.textline,\n            dense: this.dense\n          }\n        }, [\n          !this.tags && this.filterable && this.enableOptions.length === 0 ? h('div', { staticClass: 'mu-select-no-data' }, this.noDataText) : null,\n          this.$slots.default\n        ])\n      ]);\n    }\n  }\n};\n"
  },
  {
    "path": "src/Select/mixins/selection.js",
    "content": "import Chip from '../../Chip';\nimport clickOutSide from '../../internal/directives/click-outside';\nexport default {\n  directives: {\n    'click-outside': clickOutSide\n  },\n  data () {\n    return {\n      searchValue: '',\n      shouldBreak: false,\n      selectedIndex: -1\n    };\n  },\n  created () {\n    this.setSeachValue();\n  },\n  methods: {\n    setSeachValue () {\n      if (!this.multiple) this.searchValue = this.selects.map(item => item.label).join(',');\n    },\n    changeSelectedIndex (keycode) {\n      const maxIndex = this.selects.length - 1;\n      if (keycode === 'left') {\n        this.selectedIndex = this.selectedIndex === -1 ? maxIndex : this.selectedIndex - 1;\n      } else if (keycode === 'right') {\n        this.selectedIndex = this.selectedIndex >= maxIndex ? -1 : this.selectedIndex + 1;\n      } else if (this.selectedIndex === -1) {\n        this.selectedIndex = maxIndex;\n        return;\n      }\n\n      if (['backspace', 'delete'].indexOf(keycode) !== -1) {\n        const newIndex = this.selectedIndex === maxIndex\n          ? this.selectedIndex - 1\n          : this.selects[this.selectedIndex + 1] ? this.selectedIndex : -1;\n        if (this.selectedIndex !== -1) this.removeSelection(this.selectedIndex);\n        this.selectedIndex = newIndex;\n      }\n    },\n    resetSelectedIndex () {\n      this.selectedIndex = -1;\n    },\n    removeSelection (index) {\n      const value = [...this.value];\n      value.splice(index, 1);\n      this.$emit('input', value);\n      this.$emit('change', value);\n    },\n    createSlotSelection (item) {\n      return this.$scopedSlots.selection({\n        ...item,\n        disabled: this.disabled || this.readonly\n      });\n    },\n    createChipSelection (h, { selected, index, label }) {\n      return h(Chip, {\n        attrs: {\n          tabindex: -1\n        },\n        props: {\n          delete: true,\n          selected\n        },\n        on: {\n          delete: () => {\n            if (this.disabled || this.readonly) return;\n            this.removeSelection(index);\n          }\n        }\n      }, label);\n    },\n    createTextSelection (h, { selected, label }, isLast) {\n      return h('span', {\n        staticClass: 'mu-selection-text',\n        class: {\n          'is-active': selected\n        }\n      }, isLast ? label : label + this.separator);\n    },\n    createSelectedItems (h) {\n      return this.selects.map((item, index) => {\n        const selected = this.selectedIndex === index;\n\n        switch (true) {\n          case !!this.$scopedSlots.selection:\n            return this.createSlotSelection({ ...item, selected });\n          case this.chips:\n            return this.createChipSelection(h, { ...item, selected });\n          default:\n            return this.createTextSelection(h, { ...item, selected }, index === this.selects.length - 1);\n        }\n      });\n    },\n    createInputElement (h) {\n      const enable = this.autoComplete && !this.readonly;\n      return [\n        h('input', {\n          staticClass: 'mu-select-input',\n          ref: 'input',\n          class: {\n            'is-enable': enable,\n            'is-break': this.shouldBreak\n          },\n          attrs: {\n            tabindex: 0,\n            readonly: !enable,\n            disabled: this.disabled,\n            placeholder: !this.value && this.value !== 0 ? this.placeholder : ''\n          },\n          domProps: {\n            value: this.searchValue\n          },\n          on: {\n            ...this.createListeners(),\n            input: (e) => { this.searchValue = e.target.value; }\n          }\n        }),\n        h('input', {\n          attrs: {\n            ...this.$attrs,\n            type: 'hidden'\n          },\n          domProps: {\n            value: this.value\n          }\n        })\n      ];\n    },\n    createSelection (h) {\n      const content = h('div', {\n        staticClass: 'mu-select-content'\n      }, this.multiple ? [\n        ...this.createSelectedItems(h),\n        ...this.createInputElement(h)\n      ] : this.createInputElement(h));\n      return {\n        data: {\n          staticClass: 'mu-select',\n          class: {\n            'is-open': this.open,\n            'is-multi': this.multiple,\n            'is-filterable': this.autoComplete,\n            'is-readonly': this.readonly,\n            'is-disabled': this.disabled\n          },\n          on: {\n            click: (e) => {\n              if (this.disabled || this.readonly || (this.autoComplete && e.target === this.$refs.input)) return;\n              this.toggleMenu();\n            }\n          },\n          directives: [{\n            name: 'click-outside',\n            value: (e) => {\n              if (this.open && this.$refs.popover.$el.contains(e.target)) return;\n              this.blur();\n            }\n          }],\n          ref: 'select'\n        },\n        children: [\n          content\n        ],\n        defaultActionIcon: h('div', {\n          staticClass: 'mu-select-action'\n        }, [\n          h('svg', {\n            staticClass: 'mu-select-icon',\n            attrs: {\n              viewBox: '0 0 24 24'\n            }\n          }, [\n            h('path', {\n              attrs: {\n                d: 'M7 10l5 5 5-5z'\n              }\n            })\n          ])\n        ])\n      };\n    }\n  },\n  watch: {\n    searchValue (val) {\n      if (this.$refs.input) {\n        if (this.$refs.input.scrollWidth > this.$refs.input.clientWidth) {\n          this.shouldBreak = true;\n        } else if (val === '') {\n          this.shouldBreak = false;\n        }\n      }\n\n      this.options.forEach(option => {\n        const searchText = option.searchText || option.label;\n        option.visible = !this.autoComplete || !val || searchText.toLowerCase().indexOf(val.toLowerCase()) !== -1;\n      });\n      this.resetFocusIndex();\n      if (this.isFocused && !this.open) this.open = true;\n    },\n    selects () {\n      this.setSeachValue();\n    }\n  }\n};\n"
  },
  {
    "path": "src/Select/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\n\nexport default (theme) => {\n  return `\n  .mu-select-content {\n    color: ${theme.text.primary};\n  }\n  .mu-select-input {\n    color: ${theme.text.primary};\n  }\n  .mu-selection-text.is-active {\n    color: ${theme.primary};\n  }\n  .mu-select-no-data {\n    color: ${theme.text.disabled};\n  }\n  .mu-option.is-selected .mu-item {\n    color: ${theme.secondary};\n  }\n  .mu-option.is-focused {\n    color: ${theme.secondary};\n    background-color: ${fade(theme.text.primary, 0.1)};\n  }\n  .mu-option.is-disabled .mu-item {\n    color: ${theme.text.disabled};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/SlidePicker/Picker.js",
    "content": "import PickerSlot from './PickerSlot';\n\nexport default {\n  name: 'mu-slide-picker',\n  props: {\n    visibleItemCount: {\n      type: Number,\n      default: 5\n    },\n    values: {\n      type: Array,\n      default () {\n        return [];\n      }\n    },\n    slots: {\n      type: Array,\n      default () {\n        return [];\n      }\n    }\n  },\n  methods: {\n    change (index, value) {\n      this.$emit('change', value, index);\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-slide-picker'\n    }, [\n      ...this.slots.map((slot, index) => {\n        return h(PickerSlot, {\n          props: {\n            divider: slot.divider,\n            content: slot.content,\n            textAlign: slot.textAlign,\n            width: slot.width,\n            value: this.values[index],\n            values: slot.values,\n            visibleItemCount: this.visibleItemCount\n          },\n          key: 'picker-slot-item-' + index,\n          on: {\n            change: (value) => {\n              this.change(index, value);\n            }\n          }\n        });\n      }),\n      h('div', {\n        staticClass: 'mu-slide-picker-center-highlight'\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/SlidePicker/PickerSlot.js",
    "content": "import swipe from '../internal/directives/swipe';\nimport translateUtil from '../utils/translate';\nimport { transitionEnd } from '../utils/dom';\n\nexport default {\n  name: 'mu-slide-picker-slot',\n  directives: {\n    swipe\n  },\n  props: {\n    divider: {\n      type: Boolean,\n      default: false\n    },\n    content: {\n      type: String,\n      default: ''\n    },\n    values: {\n      type: Array,\n      default () {\n        return [];\n      }\n    },\n    itemHeight: {\n      type: Number,\n      default: 36\n    },\n    value: {},\n    textAlign: {\n      type: String,\n      default: ''\n    },\n    width: {\n      type: String,\n      default: ''\n    },\n    visibleItemCount: {\n      type: Number,\n      default: 5\n    }\n  },\n  data () {\n    return {\n      animate: false,\n      startTop: 0,\n      velocityTranslate: 0,\n      prevTranslate: 0\n    };\n  },\n  computed: {\n    contentHeight () {\n      return this.itemHeight * this.visibleItemCount;\n    },\n    valueIndex () {\n      return this.values.indexOf(this.value);\n    },\n    dragRange () {\n      const values = this.values;\n      const visibleItemCount = this.visibleItemCount;\n      return [-this.itemHeight * (values.length - Math.ceil(visibleItemCount / 2)), this.itemHeight * Math.floor(visibleItemCount / 2)];\n    }\n  },\n  mounted () {\n    if (!this.divider) {\n      this.doOnValueChange();\n    }\n  },\n  methods: {\n    value2Translate (value) {\n      const values = this.values;\n      const valueIndex = values.indexOf(value);\n      const offset = Math.floor(this.visibleItemCount / 2);\n      if (valueIndex !== -1) {\n        return (valueIndex - offset) * -this.itemHeight;\n      }\n    },\n    translate2Value (translate) {\n      translate = Math.round(translate / this.itemHeight) * this.itemHeight;\n      const index = -(translate - Math.floor(this.visibleItemCount / 2) * this.itemHeight) / this.itemHeight;\n      return this.values[index];\n    },\n    doOnValueChange () {\n      const value = this.value;\n      const wrapper = this.$refs.wrapper;\n      translateUtil.translateElement(wrapper, null, this.value2Translate(value));\n    },\n    doOnValuesChange () {\n      const el = this.$el;\n      const items = el.querySelectorAll('.mu-slide-picker-item');\n      Array.prototype.forEach.call(items, (item, index) => {\n        translateUtil.translateElement(item, null, this.itemHeight * index);\n      });\n    },\n    handleStart () {\n      this.startTop = translateUtil.getElementTranslate(this.$refs.wrapper).top;\n    },\n    handleMove (pos, drag, event) {\n      const el = this.$refs.wrapper;\n      const translate = this.startTop + pos.y;\n      translateUtil.translateElement(el, 0, translate);\n      this.velocityTranslate = translate - this.prevTranslate || translate;\n      this.prevTranslate = translate;\n    },\n    handleEnd (pos, drag, event) {\n      const el = this.$refs.wrapper;\n      const momentumRatio = 7;\n      const currentTranslate = translateUtil.getElementTranslate(el).top;\n      let momentumTranslate;\n      if (pos.time < 300) {\n        momentumTranslate = currentTranslate + this.velocityTranslate * momentumRatio;\n      }\n      const dragRange = this.dragRange;\n      this.animate = true;\n      transitionEnd(el, () => {\n        this.animate = false;\n      });\n      this.$nextTick(() => {\n        let translate;\n        if (momentumTranslate) {\n          translate = Math.round(momentumTranslate / this.itemHeight) * this.itemHeight;\n        } else {\n          translate = Math.round(currentTranslate / this.itemHeight) * this.itemHeight;\n        }\n        translate = Math.max(Math.min(translate, dragRange[1]), dragRange[0]);\n        translateUtil.translateElement(el, null, translate);\n        this.$emit('change', this.translate2Value(translate));\n      });\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-slide-picker-slot',\n      class: {\n        'mu-slide-picker-slot-divider': this.divider\n      },\n      style: {\n        width: this.width\n      },\n      on: {\n        touchmove: (e) => {\n          e.preventDefault();\n        }\n      },\n      directives: this.divider ? [] : [{\n        name: 'swipe',\n        value: {\n          start: this.handleStart,\n          move: this.handleMove,\n          end: this.handleEnd\n        }\n      }]\n    }, [\n      this.divider\n        ? h('div', {}, this.content)\n        : h('div', {\n          staticClass: 'mu-slide-picker-slot-wrapper',\n          class: {\n            animate: this.animate\n          },\n          style: {\n            height: this.contentHeight + 'px'\n          },\n          ref: 'wrapper'\n        }, this.values.map((item, index) => {\n          return h('div', {\n            staticClass: 'mu-slide-picker-item',\n            style: {\n              'text-align': this.textAlign\n            },\n            class: {\n              selected: item === this.value\n            },\n            key: 'pick-slot-' + index\n          }, item.text || item);\n        }))\n    ]);\n  },\n  watch: {\n    values (newVal) {\n      if (this.valueIndex === -1) {\n        this.value = (newVal || [])[0];\n      }\n    },\n    value () {\n      this.doOnValueChange();\n    }\n  }\n};\n"
  },
  {
    "path": "src/SlidePicker/index.js",
    "content": "import '../styles/components/slide-picker.less';\nimport theme from '../theme';\nimport PickerTheme from './theme';\nimport Picker from './Picker';\n\nPicker.install = function (Vue) {\n  Vue.component(Picker.name, Picker);\n};\n\ntheme.addCreateTheme(PickerTheme);\nexport default Picker;\n"
  },
  {
    "path": "src/SlidePicker/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-slide-picker{\n    background: ${theme.background.paper};\n  }\n  .mu-slide-picker-center-highlight {\n    border-top-color: ${theme.divider};\n    border-bottom-color: ${theme.divider};\n  }\n  .mu-slide-picker-slot.mu-slide-picker-slot-divider{\n    color: ${theme.text.primary};\n  }\n  .mu-slide-picker-item{\n    color: ${theme.text.secondary};\n  }\n  .mu-slide-picker-item.selected {\n    color: ${theme.text.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Slider/Slider.js",
    "content": "import keycode from 'keycode';\nimport FocusRipple from '../internal/FocusRipple';\nimport color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-slider',\n  mixins: [color],\n  model: {\n    prop: 'value',\n    event: 'change'\n  },\n  props: {\n    value: {\n      type: Number,\n      default: 0\n    },\n    max: {\n      type: Number,\n      default: 100\n    },\n    min: {\n      type: Number,\n      default: 0\n    },\n    step: {\n      type: Number,\n      default: 0.1\n    },\n    thumbColor: String,\n    trackColor: String,\n    disabled: Boolean,\n    displayValue: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      active: false,\n      hover: false,\n      focused: false,\n      dragging: false\n    };\n  },\n  computed: {\n    percent () {\n      const percentNum = (this.value - this.min) / (this.max - this.min) * 100;\n      return percentNum > 100 ? 100 : percentNum < 0 ? 0 : percentNum;\n    }\n  },\n  created () {\n    this.handleDragMouseMove = this.handleDragMouseMove.bind(this);\n    this.handleMouseEnd = this.handleMouseEnd.bind(this);\n    this.handleTouchMove = this.handleTouchMove.bind(this);\n    this.handleTouchEnd = this.handleTouchEnd.bind(this);\n  },\n  methods: {\n    handleKeydown (e) {\n      const { min, max, step } = this;\n      let action;\n      switch (keycode(e)) {\n        case 'page down':\n        case 'down':\n          action = 'decrease';\n          break;\n        case 'left':\n          action = 'decrease';\n          break;\n        case 'page up':\n        case 'up':\n          action = 'increase';\n          break;\n        case 'right':\n          action = 'increase';\n          break;\n        case 'home':\n          action = 'min';\n          break;\n        case 'end':\n          action = 'max';\n          break;\n      }\n      let value = this.value;\n      if (action) {\n        e.preventDefault();\n        switch (action) {\n          case 'decrease':\n            value -= step;\n            break;\n          case 'increase':\n            value += step;\n            break;\n          case 'min':\n            value = min;\n            break;\n          case 'max':\n            value = max;\n            break;\n        }\n\n        value = parseFloat(value.toFixed(5));\n\n        if (value > max) {\n          value = max;\n        } else if (value < min) {\n          value = min;\n        }\n      }\n      this.$emit('change', value);\n    },\n    handleMouseDown (e) {\n      if (this.disabled) return;\n      this.setValue(e);\n      e.preventDefault();\n      document.addEventListener('mousemove', this.handleDragMouseMove);\n      document.addEventListener('mouseup', this.handleMouseEnd);\n      this.$el.focus();\n      this.onDragStart(e);\n    },\n    handleMouseUp () {\n      if (this.disabled) return;\n      this.active = false;\n    },\n    handleTouchStart (e) {\n      if (this.disabled) return;\n      this.setValue(e.touches[0]);\n\n      document.addEventListener('touchmove', this.handleTouchMove);\n      document.addEventListener('touchup', this.handleTouchEnd);\n      document.addEventListener('touchend', this.handleTouchEnd);\n      document.addEventListener('touchcancel', this.handleTouchEnd);\n\n      e.preventDefault();\n      this.onDragStart(e);\n    },\n    handleTouchEnd (e) {\n      if (this.disabled) return;\n      document.removeEventListener('touchmove', this.handleTouchMove);\n      document.removeEventListener('touchup', this.handleTouchEnd);\n      document.removeEventListener('touchend', this.handleTouchEnd);\n      document.removeEventListener('touchcancel', this.handleTouchEnd);\n      this.onDragStop(e);\n    },\n    handleFocus () {\n      if (this.disabled) return;\n      this.focused = true;\n    },\n    handleBlur () {\n      if (this.disabled) return;\n      this.focused = false;\n    },\n    handleMouseEnter () {\n      if (this.disabled) return;\n      this.hover = true;\n    },\n    handleMouseLeave () {\n      if (this.disabled) return;\n      this.hover = false;\n    },\n    // 从点击位置更新 value\n    setValue (e) {\n      const { $el, max, min, step } = this;\n      let value = (e.clientX - $el.getBoundingClientRect().left) / $el.offsetWidth * (max - min);\n      value = Math.round(value / step) * step + min;\n      value = parseFloat(value.toFixed(5));\n\n      if (value > max) {\n        value = max;\n      } else if (value < min) {\n        value = min;\n      }\n      this.$emit('change', value);\n    },\n    // 拖拽控制\n    onDragStart (e) {\n      this.dragging = true;\n      this.active = true;\n      this.$emit('drag-start', e);\n    },\n    onDragUpdate (e) {\n      if (this.dragRunning) return;\n      this.dragRunning = true;\n      window.requestAnimationFrame(() => {\n        this.dragRunning = false;\n        if (!this.disabled) this.setValue(e);\n      });\n    },\n    onDragStop (e) {\n      this.dragging = false;\n      this.active = false;\n      this.$emit('drag-stop', e);\n    },\n    handleDragMouseMove (e) {\n      this.onDragUpdate(e);\n    },\n    handleTouchMove (e) {\n      this.onDragUpdate(e.touches[0]);\n    },\n    handleMouseEnd (e) {\n      document.removeEventListener('mousemove', this.handleDragMouseMove);\n      document.removeEventListener('mouseup', this.handleMouseEnd);\n      this.onDragStop(e);\n    }\n  },\n  render (h) {\n    const colorClass = this.getNormalColorClass(this.color, true);\n    const color = this.getColor(this.color);\n    const thumbColorClass = this.getNormalColorClass(this.thumbColor);\n    const thumbColor = this.getColor(this.thumbColor);\n    const thumbTextColorClass = this.getNormalColorClass(this.thumbColor, true);\n    const trackColorClass = this.getNormalColorClass(this.trackColor);\n    const trackColor = this.getColor(this.trackColor);\n\n    const percent = this.percent + '%';\n\n    const input = h('input', {\n      attrs: {\n        ...this.$attrs,\n        type: 'hidden',\n        value: this.value\n      }\n    });\n\n    const displayValue = this.displayValue ? h('div', {\n      staticClass: 'mu-slider-display-value ' + thumbColorClass,\n      style: {\n        left: percent,\n        'background-color': thumbColor\n      }\n    }, [\n      h('span', {\n        staticClass: 'display-value-text'\n      }, this.value)\n    ]) : undefined;\n\n    const thumb = h('div', {\n      staticClass: ['mu-slider-thumb', thumbColorClass, thumbTextColorClass].join(' '),\n      style: {\n        left: this.percent + '%',\n        color: thumbColor,\n        'background-color': thumbColor\n      }\n    }, [\n      (this.focused || this.hover) && !this.active ? h(FocusRipple) : undefined\n    ]);\n\n    return h('div', {\n      staticClass: 'mu-slider ' + colorClass,\n      class: {\n        zero: this.value <= this.min,\n        active: this.active,\n        'display-value': this.displayValue && this.active,\n        disabled: this.disabled\n      },\n      style: { color },\n      attrs: {\n        tabindex: this.disabled ? -1 : 0\n      },\n      on: {\n        ...this.$listeners,\n        focus: this.handleFocus,\n        blur: this.handleBlur,\n        keydown: this.handleKeydown,\n        touchstart: this.handleTouchStart,\n        touchend: this.handleTouchEnd,\n        touchcancel: this.handleTouchEnd,\n        mousedown: this.handleMouseDown,\n        mouseup: this.handleMouseUp,\n        mouseenter: this.handleMouseEnter,\n        mouseleave: this.handleMouseLeave\n      }\n    }, [\n      input,\n      displayValue,\n      h('div', {\n        staticClass: `mu-slider-track ${trackColorClass}`,\n        style: {\n          'background-color': trackColor\n        }\n      }),\n      h('div', { staticClass: 'mu-slider-fill', style: { width: percent }}),\n      thumb\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Slider/index.js",
    "content": "import '../styles/components/slider.less';\nimport theme from '../theme';\nimport SliderTheme from './theme';\nimport Slider from './Slider';\n\nSlider.install = function (Vue) {\n  Vue.component(Slider.name, Slider);\n};\n\ntheme.addCreateTheme(SliderTheme);\nexport default Slider;\n"
  },
  {
    "path": "src/Slider/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-slider {\n    color: ${theme.primary};\n  }\n  .mu-slider-track{\n    background-color: ${theme.track};\n  }\n  .mu-slider.disabled .mu-slider-fill{\n    background-color: ${theme.track};\n  }\n  .mu-slider.zero .mu-slider-thumb,\n  .mu-slider.disabled .mu-slider-thumb{\n    border-color: ${theme.track};\n    color: ${theme.track};\n    background-color: ${theme.text.alternate};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Snackbar/Snackbar.js",
    "content": "import popup from '../internal/mixins/popup';\nimport { SlideTopTransition, SlideBottomTransition } from '../internal/transitions';\nimport color from '../internal/mixins/color';\n\nexport default {\n  name: 'mu-snackbar',\n  mixins: [popup, color],\n  props: {\n    overlay: {\n      default: false\n    },\n    escPressClose: {\n      default: false\n    },\n    textColor: String,\n    message: String,\n    position: {\n      type: String,\n      default: 'bottom',\n      validator (val) {\n        return ['top-start', 'top', 'top-end', 'bottom-start', 'bottom', 'bottom-end'].indexOf(val) !== -1;\n      }\n    }\n  },\n  render (h) {\n    const message = h('div', {\n      staticClass: 'mu-snackbar-message'\n    }, this.$slots.default && this.$slots.default.length > 0 ? this.$slots.default : this.message);\n    const action = this.$slots.action ? h('div', {\n      staticClass: 'mu-snackbar-action'\n    }, this.$slots.action) : undefined;\n\n    return h(this.position.indexOf('top') !== -1 ? SlideTopTransition : SlideBottomTransition, [\n      this.open ? h('div', {\n        staticClass: `mu-snackbar ${this.getColorClass()} ${this.getTextColorClass()}`,\n        style: {\n          'z-index': this.zIndex,\n          'background-color': this.getColor(this.color),\n          'color': this.getColor(this.textColor)\n        },\n        class: {\n          ['mu-snackbar-' + this.position]: !!this.position\n        },\n        on: this.$listeners\n      }, [message, action]) : undefined\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Snackbar/index.js",
    "content": "import '../styles/components/snackbar.less';\nimport theme from '../theme';\nimport SnackbarTheme from './theme';\nimport Snackbar from './Snackbar';\n\nSnackbar.install = function (Vue) {\n  Vue.component(Snackbar.name, Snackbar);\n};\n\ntheme.addCreateTheme(SnackbarTheme);\nexport default Snackbar;\n"
  },
  {
    "path": "src/Snackbar/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-snackbar {\n    color: ${theme.text.alternate};\n    background-color: ${theme.text.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Stepper/Step.js",
    "content": "export default {\n  name: 'mu-step',\n  props: {\n    active: {\n      type: Boolean,\n      default: false\n    },\n    completed: {\n      type: Boolean,\n      default: false\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    index: {\n      type: Number\n    },\n    last: {\n      type: Boolean,\n      default: false\n    }\n  },\n  render (h) {\n    const { active, completed, disabled, index, last } = this;\n    const children = [];\n    const slots = this.$slots;\n\n    if (slots.default && slots.default.length > 0) {\n      slots.default.forEach((vNode) => {\n        if (!vNode.componentOptions || !vNode.componentOptions.propsData) return;\n        const num = index + 1;\n        vNode.componentOptions.propsData = { active, completed, disabled, last, num, ...vNode.componentOptions.propsData };\n        children.push(vNode);\n      });\n    }\n\n    return h('div', { staticClass: 'mu-step', on: this.$listeners }, children);\n  }\n};\n"
  },
  {
    "path": "src/Stepper/StepButton.js",
    "content": "import AbstractButton from '../internal/AbstractButton';\nimport StepLabel from './StepLabel';\n\nexport default {\n  name: 'mu-step-button',\n  props: {\n    active: Boolean,\n    completed: Boolean,\n    disabled: Boolean,\n    ripple: {\n      type: Boolean,\n      default: true\n    },\n    num: [String, Number],\n    last: Boolean,\n    childrenInLabel: {\n      type: Boolean,\n      default: true\n    }\n  },\n  render (h) {\n    const slots = this.$slots;\n\n    const stepLabel = h(StepLabel, {\n      props: {\n        active: this.active,\n        completed: this.completed,\n        num: this.num,\n        disabled: this.disabled\n      }\n    }, [\n      slots.default,\n      slots.icon && slots.icon.map(vNode => {\n        if (!vNode.tag) return vNode;\n        vNode.data = vNode.data || {};\n        vNode.data.slot = 'icon';\n      })\n    ]);\n\n    return h(AbstractButton, {\n      staticClass: 'mu-step-button',\n      props: {\n        disabled: this.disabled,\n        ripple: this.ripple\n      },\n      on: this.$listeners\n    }, [this.childrenInLabel ? stepLabel : slots.default]);\n  }\n};\n"
  },
  {
    "path": "src/Stepper/StepConnector.js",
    "content": "export default {\n  name: 'mu-step-connector',\n  functional: true,\n  render (h, { data, children }) {\n    data.staticClass = `mu-step-connector ${data.staticClass || ''}`;\n    return h('div', data, [h('span', { staticClass: 'mu-step-connector-line' })]);\n  }\n};\n"
  },
  {
    "path": "src/Stepper/StepContent.js",
    "content": "import ExpandTransition from '../internal/ExpandTransition';\n\nexport default {\n  name: 'mu-step-content',\n  props: {\n    active: Boolean,\n    last: Boolean\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-step-content',\n      class: {\n        last: this.last\n      },\n      on: this.$listeners\n    }, [\n      h('div', {\n        style: {\n          position: 'relative',\n          overflow: 'hidden',\n          height: '100%'\n        }\n      }, [\n        h(ExpandTransition, [\n          this.active ? h('div', { staticClass: 'mu-step-content-inner', ref: 'inner' }, this.$slots.default) : undefined\n        ])\n      ])\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Stepper/StepLabel.js",
    "content": "export default {\n  name: 'mu-step-label',\n  props: {\n    active: Boolean,\n    completed: Boolean,\n    disabled: Boolean,\n    num: [String, Number]\n  },\n  render (h) {\n    const slots = this.$slots;\n    const isSlotsIcon = slots.icon && slots.icon.length > 0;\n    const icon = this.completed ? h('svg', {\n      staticClass: 'mu-step-label-icon',\n      attrs: {\n        viewBox: '0 0 24 24'\n      }\n    }, [\n      h('path', {\n        attrs: {\n          d: 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'\n        }\n      })\n    ]) : h('div', { staticClass: 'mu-step-label-circle' }, this.num);\n\n    return h('span', {\n      staticClass: 'mu-step-label',\n      class: {\n        active: this.active,\n        completed: this.completed,\n        disabled: this.disabled\n      },\n      on: this.$listeners\n    }, [\n      this.num || isSlotsIcon\n        ? h('span', { staticClass: 'mu-step-label-icon-container' }, [isSlotsIcon ? slots.icon : icon]) : undefined,\n      slots.default\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Stepper/Stepper.js",
    "content": "import StepConnector from './StepConnector';\n\nexport default {\n  name: 'mu-stepper',\n  props: {\n    activeStep: {\n      type: Number,\n      default: 0\n    },\n    linear: {\n      type: Boolean,\n      default: true\n    },\n    orientation: {\n      type: String,\n      default: 'horizontal',\n      validator (val) {\n        return ['horizontal', 'vertical'].indexOf(val) !== -1;\n      }\n    }\n  },\n  render (h) {\n    const { activeStep, linear, orientation } = this;\n    const children = [];\n    const slots = this.$slots;\n\n    if (slots.default && slots.default.length > 0) {\n      let index = 0;\n      slots.default.forEach((vNode) => {\n        if (!vNode.componentOptions) return;\n        if (index > 0) {\n          children.push(h(StepConnector, {}));\n        }\n        const propsData = vNode.componentOptions.propsData;\n\n        if (activeStep === index) {\n          propsData.active = true;\n        } else if (linear && activeStep > index) {\n          propsData.completed = true;\n        } else if (linear && activeStep < index) {\n          propsData.disabled = true;\n        }\n\n        propsData.index = index++;\n        children.push(vNode);\n      });\n      if (children.length > 0) children[children.length - 1].componentOptions.propsData.last = true;\n    }\n\n    return h('div', {\n      staticClass: `mu-stepper ${orientation === 'vertical' ? 'mu-stepper-vertical' : ''}`\n    }, children);\n  }\n};\n"
  },
  {
    "path": "src/Stepper/index.js",
    "content": "import '../styles/components/stepper.less';\nimport theme from '../theme';\nimport StepperTheme from './theme';\nimport Stepper from './Stepper';\nimport Step from './Step';\nimport StepLabel from './StepLabel';\nimport StepButton from './StepButton';\nimport StepConnector from './StepConnector';\nimport StepContent from './StepContent';\n\nStepper.install = function (Vue) {\n  Vue.component(Stepper.name, Stepper);\n  Vue.component(Step.name, Step);\n  Vue.component(StepLabel.name, StepLabel);\n  Vue.component(StepButton.name, StepButton);\n  Vue.component(StepConnector.name, StepConnector);\n  Vue.component(StepContent.name, StepContent);\n};\n\ntheme.addCreateTheme(StepperTheme);\nexport { Stepper, Step, StepLabel, StepButton, StepConnector, StepContent };\nexport default Stepper;\n"
  },
  {
    "path": "src/Stepper/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-step-label {\n    color: ${theme.text.primary};\n  }\n  .mu-step-label.disabled {\n    color: ${theme.text.disabled};\n  }\n  .mu-step-label.completed .mu-step-label-icon,\n  .mu-step-label.active .mu-step-label-icon {\n    color: ${theme.primary};\n  }\n  .mu-step-label-circle {\n    color: ${theme.text.alternate};\n  }\n  .mu-step-label.completed .mu-step-label-circle,\n  .mu-step-label.active .mu-step-label-circle {\n    background-color: ${theme.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/SubHeader/SubHeader.js",
    "content": "export default {\n  name: 'mu-sub-header',\n  functional: true,\n  props: {\n    inset: Boolean\n  },\n  render (h, { data, props, children }) {\n    data.staticClass = `${data.staticClass || ''} mu-sub-header ${props.inset ? 'inset' : ''}`;\n    return h('div', data, children);\n  }\n};\n"
  },
  {
    "path": "src/SubHeader/index.js",
    "content": "import '../styles/components/subheader.less';\nimport theme from '../theme';\nimport SubHeaderTheme from './theme';\nimport SubHeader from './SubHeader';\n\nSubHeader.install = function (Vue) {\n  Vue.component(SubHeader.name, SubHeader);\n};\n\ntheme.addCreateTheme(SubHeaderTheme);\nexport default SubHeader;\n"
  },
  {
    "path": "src/SubHeader/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-sub-header {\n    color: ${theme.text.secondary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Switch/Switch.js",
    "content": "import select from '../internal/mixins/select';\n\nexport default {\n  name: 'mu-switch',\n  mixins: [select('switch')],\n  props: {\n    inputValue: Boolean\n  },\n  computed: {\n    checked () {\n      return this.inputValue;\n    }\n  },\n  methods: {\n    toggle () {\n      this.$emit('change', !this.inputValue);\n    }\n  },\n  render (h) {\n    const view = h('div', {\n      staticClass: 'mu-switch-container'\n    }, [\n      h('div', { staticClass: 'mu-switch-track' }),\n      this.createRipple(h, 'mu-switch-thumb')\n    ]);\n\n    return this.createSelect(h, view);\n  }\n};\n"
  },
  {
    "path": "src/Switch/index.js",
    "content": "import '../styles/components/switch.less';\nimport theme from '../theme';\nimport SwitchTheme from './theme';\nimport Switch from './Switch';\n\nSwitch.install = function (Vue) {\n  Vue.component(Switch.name, Switch);\n};\n\ntheme.addCreateTheme(SwitchTheme);\nexport default Switch;\n\n"
  },
  {
    "path": "src/Switch/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-switch.disabled input[type=\"checkbox\"]:checked+.mu-switch-wrapper .mu-switch-track{\n    background-color: ${theme.track};\n  }\n  .mu-switch-checked {\n    color: ${theme.primary};\n  }\n  .mu-switch.disabled .mu-switch-label {\n    color: ${theme.text.disabled};\n  }\n  .mu-switch-label {\n    color: ${theme.text.primary};\n  }\n  .mu-switch.disabled .mu-switch-track {\n    background-color: ${theme.track};\n  }\n  .mu-switch-track {\n    background-color: ${theme.track};\n  }\n  .mu-switch-thumb {\n    background-color: ${theme.background.paper};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Tabs/Tab.js",
    "content": "import route from '../internal/mixins/route';\nimport ripple from '../internal/mixins/ripple';\nimport { isNotNull } from '../utils';\nimport AbstractButton from '../internal/AbstractButton';\n\nexport default {\n  name: 'mu-tab',\n  mixins: [route, ripple],\n  inject: [\n    'tabClick',\n    'getActiveValue',\n    'getDefaultVal',\n    'addTab',\n    'removeTab',\n    'setTabHighLineStyle',\n    'getActiveColor',\n    'getTabsInverse'\n  ],\n  props: {\n    disabled: Boolean,\n    value: {}\n  },\n  data () {\n    return {\n      tabVal: 0\n    };\n  },\n  computed: {\n    active () {\n      return !this.disabled && this.getActiveValue() === this.tabVal;\n    },\n    activeColor () {\n      return this.getActiveColor();\n    }\n  },\n  created () {\n    this.tabVal = isNotNull(this.value) ? this.value : this.getDefaultVal();\n    this.addTab(this);\n  },\n  methods: {\n    handleClick (e) {\n      this.tabClick(this.tabVal, this);\n      this.$emit('click', e);\n    }\n  },\n  beforeDestory () {\n    this.removeTab(this);\n  },\n  watch: {\n    active (val, oldVal) {\n      if (val) this.$emit('active');\n    },\n    value (val) {\n      this.tabVal = val;\n      this.setTabHighLineStyle();\n    }\n  },\n  render (h) {\n    return h(AbstractButton, {\n      staticClass: 'mu-tab',\n      props: {\n        ...this.generateRouteProps(),\n        containerElement: 'div',\n        wrapperClass: 'mu-tab-wrapper',\n        disabled: this.disabled,\n        ripple: this.ripple,\n        rippleOpacity: this.rippleOpacity,\n        rippleColor: this.rippleColor\n      },\n      style: {\n        color: this.active ? this.activeColor.color : ''\n      },\n      class: {\n        'mu-tab-active': this.active,\n        'is-inverse': this.active &&\n                    this.getTabsInverse() &&\n                    !this.activeColor.className &&\n                    !this.activeColor.color,\n        [this.activeColor.className]: this.active\n      },\n      on: {\n        click: this.handleClick\n      }\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/Tabs/Tabs.js",
    "content": "import { isNotNull } from '../utils';\nimport resize from '../internal/directives/resize';\nimport color from '../internal/mixins/color';\nimport translateUtils from '../utils/translate';\n\nexport default {\n  name: 'mu-tabs',\n  mixins: [color],\n  provide () {\n    return {\n      tabClick: this.handleTabClick,\n      getDefaultVal: this.getDefaultVal,\n      addTab: this.addTab,\n      removeTab: this.removeTab,\n      setTabHighLineStyle: this.setTabHighLineStyle,\n      getActiveValue: this.getActiveValue,\n      getActiveColor: this.getActiveColor,\n      getTabsInverse: this.getInverse\n    };\n  },\n  props: {\n    inverse: Boolean,\n    indicatorColor: String,\n    fullWidth: Boolean,\n    center: Boolean,\n    value: {}\n  },\n  data () {\n    return {\n      tabs: [],\n      activeValue: isNotNull(this.value) ? this.value : 0\n    };\n  },\n  created () {\n    this.tabIndex = 0;\n  },\n  mounted () {\n    this.setTabHighLineStyle();\n  },\n  updated () {\n    this.setTabHighLineStyle();\n  },\n  methods: {\n    handleTabClick (value, tab) {\n      if (this.activeValue !== value) {\n        this.activeValue = value;\n        this.$emit('update:value', value);\n        this.$emit('change', value);\n      }\n    },\n    getActiveValue () {\n      return this.activeValue;\n    },\n    getDefaultVal () {\n      return this.tabIndex++;\n    },\n    getActiveColor () {\n      return this.inverse ? {\n        className: this.getNormalColorClass(this.color, true),\n        color: this.getColor(this.color)\n      } : { className: '', color: '' };\n    },\n    getInverse () {\n      return this.inverse;\n    },\n    addTab (tab) {\n      const index = this.$children.indexOf(tab);\n      return index === -1 ? this.tabs.push(tab) : this.tabs.splice(index, 0, tab);\n    },\n    removeTab (tab) {\n      const index = this.tabs.indexOf(tab);\n      if (index === -1) return;\n      this.tabs.splice(index, 1);\n    },\n    getActiveTab () {\n      return this.tabs.filter((tab) => tab.active)[0];\n    },\n    setTabHighLineStyle () {\n      const activeTab = this.getActiveTab();\n      if (!activeTab || !this.$refs.line || !activeTab.$el) return;\n      const el = activeTab.$el;\n      const lineEl = this.$refs.line;\n      const rect = el.getBoundingClientRect();\n      const tabsRect = this.$el.getBoundingClientRect();\n      lineEl.style.width = rect.width + 'px';\n      translateUtils.translateElement(lineEl, rect.left - tabsRect.left, 0);\n    }\n  },\n  watch: {\n    value (val) {\n      this.activeValue = val;\n    },\n    activeValue () {\n      this.setTabHighLineStyle();\n    }\n  },\n  directives: {\n    resize\n  },\n  render (h) {\n    return h('div', {\n      staticClass: `mu-tabs ${!this.inverse ? this.getColorClass(false) : ''}`,\n      class: {\n        'mu-tabs-full-width': this.fullWidth,\n        'mu-tabs-center': this.center,\n        'mu-tabs-inverse': this.inverse\n      },\n      style: {\n        'background-color': !this.inverse ? this.getColor(this.color) : ''\n      },\n      directives: [{\n        name: 'resize',\n        value: this.setTabHighLineStyle\n      }]\n    }, [\n      this.$slots.default,\n      h('span', {\n        staticClass: `mu-tab-link-highlight ${this.getNormalColorClass(this.indicatorColor, false, false)}`,\n        style: {\n          'background-color': this.getColor(this.indicatorColor)\n        },\n        ref: 'line'\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Tabs/index.js",
    "content": "import '../styles/components/tabs.less';\nimport theme from '../theme';\nimport TabsTheme from './theme';\nimport Tabs from './Tabs';\nimport Tab from './Tab';\n\nTabs.install = function (Vue) {\n  Vue.component(Tabs.name, Tabs);\n  Vue.component(Tab.name, Tab);\n};\n\ntheme.addCreateTheme(TabsTheme);\nexport { Tabs, Tab };\nexport default Tabs;\n"
  },
  {
    "path": "src/Tabs/theme.js",
    "content": "import { fade } from '../utils/colorManipulator';\nexport default (theme) => {\n  return `\n  .mu-tabs{\n    background-color: ${theme.primary};\n    color: ${fade(theme.text.alternate, 0.7)};\n  }\n\n  .mu-tabs-inverse {\n    background-color: ${theme.background.default};\n    color: ${theme.text.secondary};\n  }\n\n  .mu-tab-link-highlight{\n    background-color: ${theme.secondary};\n  }\n  .mu-tab-active {\n    color: ${theme.text.alternate};\n  }\n  .mu-tab-active.is-inverse {\n    color: ${theme.text.primary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/TextField/TextField.js",
    "content": "import input from '../internal/mixins/input';\nimport Textarea from './Textarea';\n\nexport default {\n  name: 'mu-text-field',\n  mixins: [input],\n  props: {\n    rows: {\n      type: Number,\n      default: 1\n    },\n    rowsMax: {\n      type: Number\n    },\n    multiLine: Boolean,\n    maxLength: [String, Number]\n  },\n  methods: {\n    handleFocus (e) {\n      this.isFocused = true;\n      this.$emit('focus', e);\n    },\n    handleBlur (e) {\n      this.isFocused = false;\n      this.$emit('blur', e);\n    },\n    focus () {\n      if (this.disabled) return;\n      if (this.$refs.input) {\n        this.$refs.input.focus();\n      } else if (this.$refs.textarea) {\n        this.$refs.textarea.$refs.textarea.focus();\n      }\n    },\n    createTextField (h) {\n      const listeners = {\n        ...this.$listeners,\n        input: (e) => this.$emit('input', e.target.value, e),\n        change: (e) => this.$emit('change', e.target.value, e),\n        focus: this.handleFocus,\n        blur: this.handleBlur\n      };\n      const placeholder = !this.labelFloat ? this.$attrs.placeholder : '';\n      return [\n        this.multiLine ? h(Textarea, {\n          attrs: {\n            ...this.$attrs,\n            maxlength: this.maxLength,\n            placeholder\n          },\n          props: {\n            disabled: this.disabled,\n            rows: this.rows,\n            rowsMax: this.rowsMax,\n            value: String(this.value || '')\n          },\n          ref: 'textarea',\n          on: listeners\n        }) : h('input', {\n          staticClass: 'mu-text-field-input',\n          attrs: {\n            tabindex: 0,\n            ...this.$attrs,\n            maxlength: this.maxLength,\n            disabled: this.disabled,\n            placeholder\n          },\n          domProps: {\n            value: this.value\n          },\n          ref: 'input',\n          on: listeners\n        })\n      ];\n    }\n  },\n  render (h) {\n    return this.createInput(h, {\n      staticClass: 'mu-text-field'\n    }, [\n      this.createTextField(h),\n      this.$slots.default\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/TextField/Textarea.js",
    "content": "export default {\n  inheritAttrs: false,\n  props: {\n    disabled: Boolean,\n    rows: {\n      type: Number,\n      default: 1\n    },\n    rowsMax: {\n      type: Number\n    },\n    value: {\n      type: String,\n      default: ''\n    }\n  },\n  mounted () {\n    this.resizeTextarea();\n  },\n  watch: {\n    value (val, oldVal) {\n      this.$nextTick(() => {\n        this.resizeTextarea();\n      });\n    }\n  },\n  methods: {\n    resizeTextarea () {\n      const element = this.$refs.textarea;\n      if (!element) return;\n      const hiddenEl = this.$refs.textareaHidden;\n      let lineHeight = window.getComputedStyle(element, null).getPropertyValue('line-height');\n      lineHeight = Number(lineHeight.substring(0, lineHeight.indexOf('px')));\n      let pt = window.getComputedStyle(element, null).getPropertyValue('padding-top');\n      pt = Number(pt.substring(0, pt.indexOf('px')));\n      let pd = window.getComputedStyle(element, null).getPropertyValue('padding-bottom');\n      pd = Number(pd.substring(0, pd.indexOf('px')));\n      const minHeight = pd + pt + lineHeight * this.rows;\n      const maxHeight = pd + pt + lineHeight * (this.rowsMax || this.rows);\n      const height = hiddenEl.scrollHeight;\n      element.style.height = (height < minHeight ? minHeight : height > maxHeight && maxHeight > 0 ? maxHeight : height) + 'px';\n    }\n  },\n  render (h) {\n    return h('div', {\n      staticClass: 'mu-text-field-multiline'\n    }, [\n      h('textarea', {\n        staticClass: 'mu-text-field-textarea-hide mu-text-field-input',\n        ref: 'textareaHidden',\n        attrs: {\n          rows: 1\n        },\n        domProps: {\n          value: this.value || ' '\n        }\n      }),\n      h('textarea', {\n        staticClass: 'mu-text-field-input mu-text-field-textarea',\n        ref: 'textarea',\n        attrs: {\n          tabindex: 0,\n          ...this.$attrs,\n          disabled: this.disabled\n        },\n        domProps: {\n          value: this.value || ''\n        },\n        on: this.$listeners\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/TextField/index.js",
    "content": "import '../styles/components/text-field.less';\nimport theme from '../theme';\nimport TextFieldTheme from './theme';\nimport TextField from './TextField';\n\nTextField.install = function (Vue) {\n  Vue.component(TextField.name, TextField);\n};\n\ntheme.addCreateTheme(TextFieldTheme);\nexport default TextField;\n"
  },
  {
    "path": "src/TextField/theme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-input {\n    color: ${theme.text.secondary};\n  }\n  .mu-input__focus {\n    color: ${theme.primary};\n  }\n  .mu-input__error {\n    color: ${theme.error};\n  }\n  .mu-input.disabled .mu-input-content {\n    color: ${theme.text.disabled};\n  }\n  .mu-input-help {\n    color: ${theme.text.secondary};\n  }\n  .mu-input__error .mu-input-help {\n    color: ${theme.error};\n  }\n  .mu-input.has-label .mu-input-label.float {\n    color: ${theme.text.disabled};\n  }\n  .mu-input-line {\n    background-color: ${theme.divider};\n  }\n  .mu-input-line.disabled{\n    border-bottom-color: ${theme.text.disabled};\n  }\n  .mu-input-suffix-text,\n  .mu-input-prefix-text {\n    color: ${theme.text.secondary};\n  }\n  .mu-text-field-input {\n    color: ${theme.text.primary};\n  }\n  .mu-text-field-suffix {\n    color: ${theme.text.secondary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/Tooltip/Tooltip.js",
    "content": "import Vue from 'vue';\nimport TooltipContent from './TooltipContent';\nimport { getFirstComponentChild } from '../utils';\n\nexport default {\n  name: 'mu-tooltip',\n  props: {\n    content: String,\n    placement: TooltipContent.props.placement,\n    open: Boolean,\n    tooltipClass: [String, Object, Array]\n  },\n  data () {\n    return {\n      active: this.open,\n      trigger: null\n    };\n  },\n  beforeCreate () {\n    if (this.$isServer) return;\n\n    this.tooltipVM = new Vue({\n      data: { node: '' },\n      render (h) {\n        return this.node;\n      }\n    }).$mount();\n  },\n  mounted () {\n    this.trigger = this.$el;\n  },\n  methods: {\n    addEventHandle (old, fn) {\n      if (!old) {\n        return fn;\n      } else if (Array.isArray(old)) {\n        return old.indexOf(fn) > -1 ? old : old.concat(fn);\n      } else {\n        return old === fn ? old : [old, fn];\n      }\n    },\n    show () {\n      if (this.timer) clearTimeout(this.timer);\n      this.active = true;\n    },\n    hide () {\n      if (this.timer) clearTimeout(this.timer);\n      this.timer = setTimeout(() => {\n        this.active = false;\n      }, 200);\n    }\n  },\n  watch: {\n    active (val) {\n      this.$emit('update:open', val);\n    },\n    open (val) {\n      this.active = val;\n    }\n  },\n  render (h) {\n    const content = (this.$slots.content && this.$slots.content.length > 0 ? this.$slots.content : this.content) || '';\n    if (this.tooltipVM) {\n      this.tooltipVM.node = h(TooltipContent, {\n        class: this.tooltipClass,\n        props: {\n          placement: this.placement,\n          open: this.active,\n          trigger: this.trigger\n        },\n        nativeOn: {\n          mouseenter: () => this.show(),\n          mouseleave: () => this.hide()\n        }\n      }, content);\n    }\n\n    const vnode = getFirstComponentChild(this.$slots.default);\n    if (!vnode) return vnode;\n    vnode.data = vnode.data || {};\n    const on = vnode.data.on = vnode.data.on || {};\n    const nativeOn = vnode.data.nativeOn = vnode.data.nativeOn || {};\n    nativeOn.mouseenter = on.mouseenter = this.addEventHandle(on.mouseenter, this.show);\n    nativeOn.mouseleave = on.mouseleave = this.addEventHandle(on.mouseleave, this.hide);\n    return vnode;\n  }\n};\n"
  },
  {
    "path": "src/Tooltip/TooltipContent.js",
    "content": "import popup from '../internal/mixins/popup';\nimport resize from '../internal/directives/resize';\nimport scroll from '../internal/directives/scroll';\n\nconst SPACE = 8;\nexport default {\n  name: 'mu-tooltip-content',\n  mixins: [popup],\n  directives: {\n    resize,\n    scroll\n  },\n  props: {\n    overlay: {\n      default: false\n    },\n    escPressClose: {\n      default: false\n    },\n    placement: {\n      type: String,\n      default: 'bottom',\n      validator (val) {\n        return [\n          'top', 'top-start', 'top-end',\n          'bottom', 'bottom-start', 'bottom-end',\n          'left', 'left-start', 'left-end',\n          'right', 'right-start', 'right-end'\n        ].indexOf(val) !== -1;\n      }\n    },\n    trigger: {}\n  },\n  mounted () {\n    this.setStyle();\n  },\n  updated () {\n    setTimeout(() => this.setStyle(), 0);\n  },\n  methods: {\n    getLeftPosition (width, react) {\n      switch (this.placement) {\n        case 'left':\n        case 'left-start':\n        case 'left-end':\n          return react.left - width - SPACE;\n        case 'right':\n        case 'right-start':\n        case 'right-end':\n          return react.left + react.width + SPACE;\n        case 'top':\n        case 'bottom':\n          return react.left + react.width / 2 - width / 2;\n        case 'bottom-start':\n        case 'top-start':\n          return react.left;\n        case 'bottom-end':\n        case 'top-end':\n          return react.left + react.width - width;\n      }\n    },\n    getTopPosition (height, react) {\n      switch (this.placement) {\n        case 'top':\n        case 'top-start':\n        case 'top-end':\n          return react.top - height - SPACE;\n        case 'bottom':\n        case 'bottom-start':\n        case 'bottom-end':\n          return react.top + react.height + SPACE;\n        case 'left':\n        case 'right':\n          return react.top + react.height / 2 - height / 2;\n        case 'left-start':\n        case 'right-start':\n          return react.top;\n        case 'left-end':\n        case 'right-end':\n          return react.top + react.height - height;\n      }\n    },\n    setStyle () {\n      if (!this.open) return;\n      const el = this.$el;\n      const triggerEl = this.trigger;\n      if (!el || !triggerEl) return;\n      const elReact = el.getBoundingClientRect();\n      const react = triggerEl.getBoundingClientRect();\n      el.style.top = this.getTopPosition(elReact.height, react) + 'px';\n      el.style.left = this.getLeftPosition(elReact.width, react) + 'px';\n    }\n  },\n  render (h) {\n    return h('transition', {\n      props: {\n        name: 'mu-tooltip-' + this.placement.split('-')[0]\n      }\n    }, [\n      this.open ? h('div', {\n        staticClass: 'mu-tooltip',\n        style: {\n          'z-index': this.zIndex\n        },\n        directives: [{\n          name: 'resize',\n          value: this.setStyle\n        }, {\n          name: 'scroll',\n          value: this.setStyle\n        }]\n      }, this.$slots.default) : undefined\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/Tooltip/index.js",
    "content": "import '../styles/components/tooltip.less';\nimport Tooltip from './Tooltip';\n\nTooltip.install = function (Vue) {\n  Vue.component(Tooltip.name, Tooltip);\n};\n\nexport default Tooltip;\n"
  },
  {
    "path": "src/index.js",
    "content": "import './styles/base.less';\nimport Alert from './Alert';\nimport AppBar from './AppBar';\nimport AutoComplete from './AutoComplete';\nimport Avatar from './Avatar';\nimport Badge from './Badge';\nimport BottomNav from './BottomNav';\nimport BottomSheet from './BottomSheet';\nimport Breadcrumbs from './Breadcrumbs';\nimport Button from './Button';\nimport Card from './Card';\nimport Carousel from './Carousel';\nimport Checkbox from './Checkbox';\nimport Chip from './Chip';\nimport DateInput from './DateInput';\nimport DataTable from './DataTable';\nimport Dialog from './Dialog';\nimport Divider from './Divider';\nimport Drawer from './Drawer';\nimport ExpansionPanel from './ExpansionPanel';\nimport Form from './Form';\nimport Grid from './Grid';\nimport GridList from './GridList';\nimport Helpers from './Helpers';\nimport Icon from './Icon';\nimport List from './List';\nimport LoadMore from './LoadMore';\nimport Menu from './Menu';\nimport Pagination from './Pagination';\nimport Paper from './Paper';\nimport Picker from './Picker';\nimport Popover from './Popover';\nimport Progress from './Progress';\nimport Radio from './Radio';\nimport Select from './Select';\nimport SlidePicker from './SlidePicker';\nimport Slider from './Slider';\nimport Snackbar from './Snackbar';\nimport Stepper from './Stepper';\nimport SubHeader from './SubHeader';\nimport Switch from './Switch';\nimport Tabs from './Tabs';\nimport TextField from './TextField';\nimport Tooltip from './Tooltip';\nimport './styles/theme.less';\nimport theme from './theme';\nimport * as Colors from './theme/colors';\n\nconst version = '__VERSION__';\nconst components = {\n  Alert, AppBar, AutoComplete, Avatar,\n  Badge, BottomNav, BottomSheet, Breadcrumbs, Button,\n  Card, Carousel, Checkbox, Chip,\n  DataTable, DateInput, Dialog, Divider, Drawer,\n  ExpansionPanel, Form, Grid, GridList, Helpers, Icon,\n  LoadMore, List, Menu,\n  Pagination, Paper, Picker, Popover, Progress, Radio,\n  Select, SlidePicker, Slider, Snackbar, Stepper, SubHeader, Switch,\n  Tabs, TextField, Tooltip\n};\n\nfunction install (Vue) {\n  Object.keys(components).forEach((key) => {\n    Vue.use(components[key]);\n  });\n}\n\nif (typeof window !== 'undefined' && window.Vue) install(window.Vue);\n\nexport {\n  version,\n  Colors,\n  Alert,\n  AppBar,\n  AutoComplete,\n  Avatar,\n  Badge,\n  BottomNav,\n  BottomSheet,\n  Breadcrumbs,\n  Button,\n  Card,\n  Carousel,\n  Checkbox,\n  Chip,\n  DateInput,\n  DataTable,\n  Dialog,\n  Divider,\n  Drawer,\n  ExpansionPanel,\n  Form,\n  Grid,\n  GridList,\n  Helpers,\n  Icon,\n  List,\n  LoadMore,\n  Menu,\n  Pagination,\n  Paper,\n  Picker,\n  Popover,\n  Progress,\n  Radio,\n  Select,\n  SlidePicker,\n  Slider,\n  Snackbar,\n  Stepper,\n  SubHeader,\n  Switch,\n  Tabs,\n  TextField,\n  Tooltip,\n  theme,\n  install\n};\nexport default {\n  version,\n  install,\n  theme,\n  Colors,\n  ...components\n};\n"
  },
  {
    "path": "src/internal/AbstractButton.js",
    "content": "import TouchRipple from './TouchRipple';\nimport FocusRipple from './FocusRipple';\nimport route from './mixins/route';\nimport ripple from './mixins/ripple';\nimport keycode from 'keycode';\nimport { isPc } from '../utils';\n\nlet tabPressed = false;\nlet listening = false;\n\nfunction listenForTabPresses () {\n  if (!listening) {\n    typeof window !== 'undefined' && window.addEventListener('keydown', (event) => {\n      tabPressed = keycode(event) === 'tab';\n    });\n    listening = true;\n  }\n}\n\nexport default {\n  mixins: [route, ripple],\n  props: {\n    disabled: Boolean,\n    centerRipple: Boolean,\n    containerElement: String,\n    disableKeyboardFocus: Boolean,\n    wrapperClass: String,\n    wrapperStyle: [String, Object],\n    type: {\n      type: String,\n      default: 'button'\n    },\n    keyboardFocused: Boolean\n  },\n  data () {\n    return {\n      hover: false,\n      isKeyboardFocused: false\n    };\n  },\n  computed: {\n    buttonClass () {\n      const classNames = [];\n      if (this.disabled) classNames.push('disabled');\n      if (!this.disabled && (this.hover || this.isKeyboardFocused)) classNames.push('hover');\n      return classNames.join(' ');\n    }\n  },\n  beforeMount () {\n    const { disabled, disableKeyboardFocus, keyboardFocused } = this;\n    if (!disabled && keyboardFocused && !disableKeyboardFocus) {\n      this.isKeyboardFocused = true;\n    }\n  },\n  mounted () {\n    listenForTabPresses();\n    if (this.isKeyboardFocused) {\n      this.$el.focus();\n      this.$emit('keyboardFocus', true);\n    }\n  },\n  beforeUpdate () {\n    if ((this.disabled || this.disableKeyboardFocus) && this.isKeyboardFocused) {\n      this.isKeyboardFocused = false;\n      this.$emit('keyboardFocus', false);\n    }\n  },\n  beforeDestory () {\n    this.cancelFocusTimeout();\n  },\n  methods: {\n    handleHover (event) {\n      if (!this.disabled && isPc()) {\n        this.hover = true;\n        this.$emit('hover', event);\n        this.$emit('mouseenter', event);\n      }\n    },\n    handleOut (event) {\n      if (!this.disabled && isPc()) {\n        this.hover = false;\n        this.$emit('hoverExit', event);\n        this.$emit(event.type, event);\n      }\n    },\n    removeKeyboardFocus (event) {\n      if (this.isKeyboardFocused) {\n        this.isKeyboardFocused = false;\n        this.$emit('KeyboardFocus', false);\n      }\n    },\n    setKeyboardFocus (event) {\n      if (!this.isKeyboardFocused) {\n        this.isKeyboardFocused = true;\n        this.$emit('KeyboardFocus', true);\n      }\n    },\n    cancelFocusTimeout () {\n      if (this.focusTimeout) {\n        clearTimeout(this.focusTimeout);\n        this.focusTimeout = null;\n      }\n    },\n    handleKeydown (event) {\n      if (!this.disabled && !this.disableKeyboardFocus) {\n        if (keycode(event) === 'enter' && this.isKeyboardFocused) {\n          this.$el.click();\n          event.preventDefault();\n        }\n        if (keycode(event) === 'esc' && this.isKeyboardFocused) {\n          this.removeKeyboardFocus(event);\n        }\n      }\n      this.$emit('keydown', event);\n    },\n    handleFocus (event) {\n      if (!this.disabled && !this.disableKeyboardFocus) {\n        this.focusTimeout = setTimeout(() => {\n          if (tabPressed) {\n            this.setKeyboardFocus(event);\n            tabPressed = false;\n          }\n        }, 150);\n        this.$emit('focus', event);\n      }\n    },\n    handleBlur (event) {\n      this.cancelFocusTimeout();\n      this.removeKeyboardFocus(event);\n      this.$emit('blur', event);\n    },\n    handleClick (event) {\n      if (!this.disabled) {\n        tabPressed = false;\n        // this.$el.blur(); // 点击之后失去焦点\n        this.removeKeyboardFocus(event);\n        this.$emit('click', event);\n      }\n    },\n    getTagName () {\n      const defaultTag = 'button';\n      switch (true) {\n        case !!this.to:\n          return 'router-link';\n        case !!this.href:\n          return 'a';\n        case !!this.containerElement:\n          return this.containerElement;\n        default:\n          return defaultTag;\n      }\n    },\n    createButtonChildren (h) {\n      const {\n        isKeyboardFocused,\n        disabled,\n        ripple,\n        disableKeyboardFocus,\n        rippleColor,\n        rippleOpacity\n      } = this;\n      let children = [];\n      children = children.concat(this.$slots.default);\n      const FocusRippleEL = isKeyboardFocused && !disableKeyboardFocus && !disabled && ripple\n        ? h(FocusRipple, {\n          color: rippleColor,\n          opacity: rippleOpacity\n        }) : undefined;\n\n      if (!disabled && ripple) {\n        children = [h(TouchRipple, {\n          class: this.wrapperClass,\n          style: this.wrapperStyle,\n          ref: 'ripple',\n          props: {\n            autoBind: false,\n            color: this.rippleColor,\n            centerRipple: this.centerRipple,\n            opacity: this.rippleOpacity\n          }\n        }, this.$slots.default)];\n      } else {\n        children = [h('div', {\n          class: this.wrapperClass,\n          style: this.wrapperStyle\n        }, this.$slots.default)];\n      }\n      children.unshift(FocusRippleEL);\n      return children;\n    }\n  },\n  watch: {\n    disabled (val) {\n      if (!val) this.hover = false;\n    }\n  },\n  render (h) {\n    const tagName = this.getTagName();\n    const attrs = {\n      target: this.target,\n      tabindex: !this.disabled ? (this.$attrs.tabindex || 0) : -1\n    };\n\n    if (tagName === 'button') {\n      attrs.disabled = this.disabled;\n      attrs.type = this.type;\n    }\n\n    if (this.href && !this.disabled) {\n      attrs.href = this.href;\n    }\n\n    const props = this.to ? {\n      to: this.to,\n      tag: this.tag,\n      activeClass: this.activeClass,\n      event: this.event,\n      exact: this.exact,\n      append: this.append,\n      replace: this.replace,\n      exactActiveClass: this.exactActiveClass\n    } : {};\n\n    return h(tagName, {\n      class: this.buttonClass,\n      attrs,\n      props,\n      style: tagName === 'button' ? {\n        'user-select': this.disabled ? '' : 'none',\n        '-webkit-user-select': this.disabled ? '' : 'none',\n        'outline': 'none',\n        'appearance': 'none'\n      } : {},\n      [tagName === 'router-link' ? 'nativeOn' : 'on']: {\n        ...this.$listeners,\n        mouseup: (e) => {\n          this.$refs.ripple && this.$refs.ripple.end(e);\n          this.$emit('mouseup', e);\n        },\n        mousedown: (e) => {\n          this.$refs.ripple && this.$refs.ripple.handleMouseDown(e);\n          this.$emit('mousedown', e);\n        },\n        mouseenter: this.handleHover,\n        mouseleave: (e) => {\n          this.$refs.ripple && this.$refs.ripple.end(e);\n          this.handleOut(e);\n        },\n        touchstart: (e) => {\n          this.$refs.ripple && this.$refs.ripple.handleTouchStart(e);\n          this.$emit('touchstart', e);\n        },\n        touchend: (e) => {\n          this.$refs.ripple && this.$refs.ripple.end(e);\n          this.handleOut(e);\n        },\n        touchcancel: (e) => {\n          this.$refs.ripple && this.$refs.ripple.end(e);\n          this.handleOut(e);\n        },\n        click: this.handleClick,\n        focus: this.handleFocus,\n        blur: this.handleBlur,\n        keydown: this.handleKeydown\n      }\n    }, this.createButtonChildren(h));\n  }\n};\n"
  },
  {
    "path": "src/internal/CircleRipple.js",
    "content": "import '../styles/components/circle-ripple.less';\n\nexport default {\n  props: {\n    mergeStyle: {\n      type: Object,\n      default () {\n        return {};\n      }\n    },\n    color: {\n      type: String,\n      default: ''\n    },\n    opacity: {\n      type: Number\n    }\n  },\n  computed: {\n    styles () {\n      return {\n        color: this.color,\n        opacity: this.opacity,\n        ...this.mergeStyle\n      };\n    }\n  },\n  render (h) {\n    return h('transition', {\n      props: {\n        name: 'mu-ripple',\n        appear: true\n      }\n    }, [\n      h('div', {\n        class: 'mu-circle-ripple',\n        style: this.styles\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/internal/ExpandTransition.js",
    "content": "import '../styles/components/expand-transition.less';\n\nfunction getSize (size) {\n  if (!size) return 0;\n  const index = size.indexOf('px');\n  if (index === -1) return 0;\n  return Number(size.substring(0, index));\n}\nexport default {\n  name: 'mu-expand-transition',\n  methods: {\n    beforeEnter (el) {\n      el.dataset.oldPaddingTop = el.style.paddingTop;\n      el.dataset.oldPaddingBottom = el.style.paddingBottom;\n      el.dataset.oldOverflow = el.style.overflow;\n      el.style.paddingTop = '0';\n      el.style.paddingBottom = '0';\n      el.style.height = '0';\n    },\n    enter (el) {\n      el.style.display = 'block';\n      el.style.overflow = 'hidden';\n      el.style.height = el.scrollHeight + getSize(el.dataset.oldPaddingTop) + getSize(el.dataset.oldPaddingBottom) + 'px';\n      el.style.paddingTop = el.dataset.oldPaddingTop;\n      el.style.paddingBottom = el.dataset.oldPaddingBottom;\n    },\n    afterEnter (el) {\n      el.style.display = '';\n      // uc浏览器上设置height会闪屏\n      el.style.height = '';\n      el.style.overflow = el.dataset.oldOverflow;\n      el.style.paddingTop = el.dataset.oldPaddingTop;\n      el.style.paddingBottom = el.dataset.oldPaddingBottom;\n    },\n    beforeLeave (el) {\n      el.dataset.oldPaddingTop = el.style.paddingTop;\n      el.dataset.oldPaddingBottom = el.style.paddingBottom;\n      el.dataset.oldOverflow = el.style.overflow;\n\n      el.style.display = 'block';\n      if (el.scrollHeight !== 0) {\n        el.style.height = el.scrollHeight + 'px';\n      }\n      el.style.overflow = 'hidden';\n    },\n    leave (el) {\n      if (el.scrollHeight !== 0) {\n        setTimeout(() => {\n          el.style.height = 0;\n          el.style.paddingTop = 0;\n          el.style.paddingBottom = 0;\n        });\n      }\n    },\n    afterLeave (el) {\n      el.style.display = 'none';\n      el.style.height = '';\n      el.style.overflow = el.dataset.oldOverflow;\n      el.style.paddingTop = el.dataset.oldPaddingTop;\n      el.style.paddingBottom = el.dataset.oldPaddingBottom;\n    }\n  },\n  render (h) {\n    return h('transition', {\n      props: {\n        name: 'mu-expand'\n      },\n      on: {\n        'before-enter': this.beforeEnter,\n        enter: this.enter,\n        'after-enter': this.afterEnter,\n        'before-leave': this.beforeLeave,\n        leave: this.leave,\n        'after-leave': this.afterLeave\n      }\n    }, this.$slots.default);\n  }\n};\n"
  },
  {
    "path": "src/internal/FocusRipple.js",
    "content": "import '../styles/components/focus-ripple.less';\n\nexport default {\n  props: {\n    color: {\n      type: String,\n      default: ''\n    },\n    opacity: {\n      type: Number\n    }\n  },\n  computed: {\n    style () {\n      return {\n        color: this.color,\n        opacity: this.opacity\n      };\n    }\n  },\n  methods: {\n    setRippleSize () {\n      const el = this.$refs.innerCircle;\n      const height = el.offsetHeight;\n      const width = el.offsetWidth;\n      const size = Math.max(height, width);\n\n      let oldTop = 0;\n\n      if (el.style.top.indexOf('px', el.style.top.length - 2) !== -1) {\n        oldTop = parseInt(el.style.top);\n      }\n\n      el.style.height = `${size}px`;\n      el.style.top = `${(height / 2) - (size / 2) + oldTop}px`;\n    }\n  },\n  mounted () {\n    this.setRippleSize();\n  },\n  updated () {\n    this.setRippleSize();\n  },\n  render (h) {\n    return h('div', {\n      class: 'mu-focus-ripple-wrapper'\n    }, [h('div', {\n      ref: 'innerCircle',\n      style: this.style,\n      class: 'mu-focus-ripple'\n    })]);\n  }\n};\n"
  },
  {
    "path": "src/internal/TouchRipple.js",
    "content": "import '../styles/components/touch-ripple.less';\nimport CircleRipple from './CircleRipple';\nimport { getOffset } from '../utils/dom';\n\nexport default {\n  props: {\n    centerRipple: {\n      type: Boolean,\n      default: false\n    },\n    rippleWrapperClass: {},\n    tag: {\n      type: String,\n      default: 'div'\n    },\n    autoBind: {\n      type: Boolean,\n      default: true\n    },\n    color: {\n      type: String,\n      default: ''\n    },\n    opacity: Number\n  },\n  data () {\n    return {\n      nextKey: 0,\n      ripples: []\n    };\n  },\n  methods: {\n    start (event, isRippleTouchGenerated) {\n      if (this.ignoreNextMouseDown && !isRippleTouchGenerated) {\n        this.ignoreNextMouseDown = false;\n        return;\n      }\n      this.ripples.push({\n        key: this.nextKey++,\n        color: this.color,\n        opacity: this.opacity,\n        style: this.centerRipple ? {} : this.getRippleStyle(event)\n      });\n      this.ignoreNextMouseDown = isRippleTouchGenerated;\n    },\n    end () {\n      if (this.ripples.length === 0) return;\n      this.ripples.splice(0, 1);\n      this.stopListeningForScrollAbort();\n    },\n    stopListeningForScrollAbort () {\n      if (!this.handleMove) this.handleMove = this.handleTouchMove.bind(this);\n      document.body.removeEventListener('touchmove', this.handleMove, false);\n    },\n    startListeningForScrollAbort (event) {\n      this.firstTouchY = event.touches[0].clientY;\n      this.firstTouchX = event.touches[0].clientX;\n      document.body.addEventListener('touchmove', this.handleMove, false);\n    },\n    handleMouseDown (event) {\n      if (event.button === 0) {\n        this.start(event, false);\n      }\n    },\n    handleTouchStart (event) {\n      if (event.touches) {\n        this.startListeningForScrollAbort(event);\n        this.startTime = Date.now();\n      }\n      this.start(event.touches[0], true);\n    },\n    handleTouchMove (event) {\n      const deltaY = Math.abs(event.touches[0].clientY - this.firstTouchY);\n      const deltaX = Math.abs(event.touches[0].clientX - this.firstTouchX);\n      // 判断滚动 6px\n      if (deltaY > 6 || deltaX > 6) this.end();\n      // const timeSinceStart = Math.abs(Date.now() - this.startTime)\n      // if (timeSinceStart > 300) {\n      //   this.stopListeningForScrollAbort()\n      //   return\n      // }\n    },\n    getRippleStyle (event) {\n      const el = this.$refs.holder;\n      if (!el) return;\n      const offset = getOffset(el);\n      const elHeight = el.offsetHeight;\n      const elWidth = el.offsetWidth;\n      const isTouchEvent = event.touches && event.touches.length;\n      const pageX = isTouchEvent ? event.touches[0].pageX : event.pageX;\n      const pageY = isTouchEvent ? event.touches[0].pageY : event.pageY;\n      const pointerX = pageX - offset.left;\n      const pointerY = pageY - offset.top;\n      const topLeftDiag = this.calcDiag(pointerX, pointerY);\n      const topRightDiag = this.calcDiag(elWidth - pointerX, pointerY);\n      const botRightDiag = this.calcDiag(elWidth - pointerX, elHeight - pointerY);\n      const botLeftDiag = this.calcDiag(pointerX, elHeight - pointerY);\n      const rippleRadius = Math.max(\n        topLeftDiag, topRightDiag, botRightDiag, botLeftDiag\n      );\n      const rippleSize = rippleRadius * 2;\n      const left = pointerX - rippleRadius;\n      const top = pointerY - rippleRadius;\n\n      return {\n        directionInvariant: true,\n        height: rippleSize + 'px',\n        width: rippleSize + 'px',\n        top: top + 'px',\n        left: left + 'px'\n      };\n    },\n    calcDiag (a, b) {\n      return Math.sqrt((a * a) + (b * b));\n    },\n    createCircleRipple (h) {\n      return this.ripples.map((ripple) => {\n        return h(CircleRipple, {\n          props: {\n            color: ripple.color,\n            opacity: ripple.opacity,\n            mergeStyle: ripple.style\n          },\n          key: ripple.key\n        });\n      });\n    }\n  },\n  render (h) {\n    const listeners = this.autoBind ? {\n      ...this.$listeners,\n      mousedown: this.handleMouseDown,\n      mouseup: this.end,\n      mouseleave: this.end,\n      touchstart: this.handleTouchStart,\n      touchend: this.end,\n      touchcancel: this.end\n    } : {\n      ...this.$listeners\n    };\n    return h(this.tag, {\n      on: listeners\n    }, [h('div', {\n      class: this.rippleWrapperClass,\n      attrs: {\n        class: 'mu-ripple-wrapper'\n      },\n      ref: 'holder'\n    }, this.createCircleRipple(h)), this.$slots.default]);\n  }\n};\n"
  },
  {
    "path": "src/internal/directives/click-outside.js",
    "content": "const clickoutsideContext = '@@clickoutsideContext';\n\nexport default {\n  name: 'click-outside',\n  bind (el, binding, vnode) {\n    const documentHandler = function (e) {\n      if (!vnode.context || el.contains(e.target)) return;\n      if (binding.expression) {\n        vnode.context[el[clickoutsideContext].methodName](e);\n      } else {\n        el[clickoutsideContext].bindingFn(e);\n      }\n    };\n    el[clickoutsideContext] = {\n      documentHandler,\n      methodName: binding.expression,\n      bindingFn: binding.value\n    };\n    setTimeout(() => {\n      document.addEventListener('click', documentHandler);\n    }, 0);\n  },\n\n  update (el, binding) {\n    el[clickoutsideContext].methodName = binding.expression;\n    el[clickoutsideContext].bindingFn = binding.value;\n  },\n\n  unbind (el) {\n    document.removeEventListener('click', el[clickoutsideContext].documentHandler);\n  }\n};\n"
  },
  {
    "path": "src/internal/directives/elevation.js",
    "content": "import '../../styles/components/elevation.less';\nimport { hasClass, addClass, removeClass } from '../../utils/dom';\n\nfunction getElevationClass (depth) {\n  return 'mu-elevation-' + depth;\n}\nexport default {\n  name: 'elevation',\n  inserted (el, { value }, vnode) {\n    addClass(el, getElevationClass(value));\n  },\n  update (el, { value, oldValue }) {\n    if (value === oldValue && hasClass(el, getElevationClass(oldValue))) return;\n    removeClass(el, getElevationClass(oldValue));\n    addClass(el, getElevationClass(value));\n  },\n  unbind (el, { value }) {\n    removeClass(el, getElevationClass(value));\n  }\n};\n"
  },
  {
    "path": "src/internal/directives/keyboard-focus.js",
    "content": "import keycode from 'keycode';\nlet tabPressed = false;\nlet listening = false;\n\nfunction listenForTabPresses () {\n  if (!listening) {\n    typeof window !== 'undefined' && window.addEventListener('keydown', (event) => {\n      tabPressed = keycode(event) === 'tab';\n    });\n    listening = true;\n  }\n}\n\nconst keyboardcontext = '@@keyboardcontext';\nexport default {\n  name: 'keyboard-focus',\n  bind (el, binding, vnode) {\n    listenForTabPresses();\n    let timer;\n    const handleFocus = (e) => {\n      if (timer) clearTimeout(timer);\n      timer = setTimeout(() => {\n        if (tabPressed) {\n          if (binding.expression) {\n            vnode.context[el[keyboardcontext].methodName](e);\n          } else {\n            el[keyboardcontext].bindingFn(e);\n          }\n          tabPressed = false;\n        }\n      }, 150);\n    };\n\n    el[keyboardcontext] = {\n      handleFocus,\n      methodName: binding.expression,\n      bindingFn: binding.value\n    };\n    el.addEventListener('focus', handleFocus);\n    el.addEventListener('blur', () => {\n      if (timer) clearTimeout(timer);\n    });\n  },\n  update (el, binding) {\n    el[keyboardcontext].methodName = binding.expression;\n    el[keyboardcontext].bindingFn = binding.value;\n  },\n  unbind (el) {\n    el.removeEventListener('focus', el[keyboardcontext].handleFocus);\n  }\n};\n"
  },
  {
    "path": "src/internal/directives/mousewheel.js",
    "content": "import normalizeWheel from 'normalize-wheel';\n\nconst isFirefox =\n  typeof navigator !== 'undefined' &&\n  navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nconst mousewheel = function (element, callback) {\n  if (element && element.addEventListener) {\n    element.addEventListener(\n      isFirefox ? 'DOMMouseScroll' : 'mousewheel',\n      function (event) {\n        const normalized = normalizeWheel(event);\n        callback && callback.apply(this, [event, normalized]);\n      }\n    );\n  }\n};\n\nexport default {\n  bind (el, binding) {\n    mousewheel(el, binding.value);\n  }\n};\n"
  },
  {
    "path": "src/internal/directives/resize.js",
    "content": "export default {\n  name: 'resize',\n  inserted (el, binding) {\n    let cb = binding.value;\n    let debounce = 200;\n    let callOnLoad = true;\n\n    if (typeof binding.value !== 'function') {\n      cb = binding.value.value;\n      debounce = binding.value.debounce || debounce;\n      callOnLoad = binding.value.quiet !== null ? false : callOnLoad;\n    }\n\n    let debounceTimeout = null;\n    const onResize = () => {\n      clearTimeout(debounceTimeout);\n      debounceTimeout = setTimeout(cb, debounce);\n    };\n\n    window.addEventListener('resize', onResize, { passive: true });\n    el._onResize = onResize;\n\n    callOnLoad && onResize();\n  },\n  unbind (el, binding) {\n    window.removeEventListener('resize', el._onResize);\n  }\n};\n"
  },
  {
    "path": "src/internal/directives/scroll.js",
    "content": "import { getScrollEventTarget } from '../../utils/dom';\n\nfunction bindScroll (el, binding) {\n  const callback = typeof binding.value === 'function'\n    ? binding.value\n    : binding.value.callback;\n  const options = binding.value.options || { passive: true };\n  let target = binding.value.target || window;\n  if (target === 'undefined') return;\n  if (target instanceof Element) {\n    target = getScrollEventTarget(target);\n  } else if (target !== window) {\n    target = document.querySelector(target);\n  }\n\n  const handleScroll = function (e) {\n    callback(target, e);\n  };\n  if (el._onScroll && target !== el._onScroll.target) unbind(el, binding);\n\n  target.addEventListener('scroll', handleScroll, options);\n\n  el._onScroll = {\n    callback: handleScroll,\n    options,\n    target\n  };\n}\n\nfunction unbind (el, binding) {\n  const { callback, options, target } = el._onScroll;\n  if (!target) return;\n  target.removeEventListener('scroll', callback, options);\n}\nexport default {\n  name: 'scroll',\n  inserted: bindScroll,\n  update: bindScroll,\n  unbind: unbind\n};\n"
  },
  {
    "path": "src/internal/directives/swipe.js",
    "content": "import Drag from '../../utils/drag';\n\nfunction inserted (el, { value, modifiers }) {\n  const drag = new Drag(el, modifiers.touch);\n  el._drag = drag;\n  drag.start((pos, e) => {\n    value.start && value.start(pos, drag, e);\n  });\n  drag.drag((pos, e) => {\n    value.move && value.move(pos, drag, e);\n  });\n  drag.end((pos, e) => {\n    value.end && value.end(pos, drag, e);\n    const dirRatio = 0.5;\n    const minDistance = 16;\n    if (Math.abs(pos.y) < dirRatio * Math.abs(pos.x)) {\n      value.left && pos.x < -minDistance && value.left(pos, drag, e);\n      value.right && pos.x > minDistance && value.right(pos, e);\n    }\n\n    if (Math.abs(pos.x) < dirRatio * Math.abs(pos.y)) {\n      value.up && pos.y < -minDistance && value.up(pos, drag, e);\n      value.down && pos.y > minDistance && value.down(pos, drag, e);\n    }\n  });\n}\nfunction unbind (el) {\n  if (el._drag) el._drag.destory();\n  el._drag = null;\n}\n\nexport default {\n  name: 'swipe',\n  inserted,\n  unbind\n};\n"
  },
  {
    "path": "src/internal/mixins/button.js",
    "content": "export default {\n  props: {\n    disabled: Boolean,\n    type: {\n      type: String,\n      default: 'button'\n    },\n    keyboardFocused: Boolean\n  },\n  data () {\n    return {\n      focus: this.focus\n    };\n  },\n  methods: {\n    handleClick (e) {\n      this.$emit('click', e);\n    },\n    handleKeyboardFocus (isFocus) {\n      this.focus = isFocus;\n      this.$emit('keyboard-focus', isFocus);\n    },\n    handleHover (e) {\n      this.$emit('hover', e);\n    },\n    handleHoverExit (e) {\n      this.$emit('hover-exit', e);\n    },\n    getListener () {\n      return {\n        ...this.$listeners,\n        click: this.handleClick,\n        keyboardFocus: this.handleKeyboardFocus,\n        hover: this.handleHover,\n        hoverExit: this.handleHoverExit\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/color.js",
    "content": "import { convertClass, getColor } from '../../utils';\n\nexport default {\n  props: {\n    color: String\n  },\n  methods: {\n    getColorClass (addInverse = true) {\n      return this.getNormalColorClass(this.color, false, addInverse);\n    },\n    getTextColorClass () {\n      return this.getNormalColorClass(this.textColor, true, true);\n    },\n    getColor (color, disabled) {\n      if (disabled || this.disabled) return;\n      return getColor(color);\n    },\n    getNormalColorClass (color, text = false, addInverse = true) {\n      const classObj = {};\n      const themes = ['primary', 'secondary', 'success', 'warning', 'info', 'error'];\n\n      themes.forEach((theme) => {\n        classObj[`mu-${theme}${text ? '-text' : ''}-color`] = color === theme;\n      });\n      if (!text && addInverse) classObj['mu-inverse'] = !!color;\n\n      return convertClass(classObj).join(' ');\n    }\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/input.js",
    "content": "import '../../styles/components/input.less';\nimport Icon from '../../Icon';\nimport color from './color';\nexport default {\n  inheritAttrs: false,\n  mixins: [color],\n  model: {\n    prop: 'value',\n    event: 'input'\n  },\n  inject: {\n    muFormItem: {\n      default: ''\n    }\n  },\n  props: {\n    icon: String,\n    label: String,\n    labelFloat: Boolean,\n    actionIcon: String,\n    actionClick: Function,\n    suffix: String,\n    prefix: String,\n    errorText: String,\n    helpText: String,\n    fullWidth: Boolean,\n    disabled: Boolean,\n    solo: Boolean,\n    underlineColor: String,\n    value: {}\n  },\n  data () {\n    return {\n      isFocused: false\n    };\n  },\n  computed: {\n    error () {\n      return !!this.errorText || (this.muFormItem && this.muFormItem.errorMessage);\n    },\n    inputClass () {\n      return {\n        'mu-input__focus': this.isFocused,\n        'has-label': this.label,\n        'no-empty-state': this.value,\n        'has-icon': this.icon,\n        'mu-input__error': this.error,\n        'multi-line': this.multiLine,\n        'disabled': this.disabled,\n        'full-width': this.fullWidth,\n        'is-solo': this.solo\n      };\n    },\n    float () {\n      return this.labelFloat && !this.isFocused && !this.value && this.value !== 0;\n    }\n  },\n  methods: {\n    createIcon (h) {\n      if (!this.icon) return;\n      return h(Icon, {\n        staticClass: 'mu-input-icon',\n        props: {\n          value: this.icon\n        }\n      });\n    },\n    createLabel (h) {\n      return !this.solo && this.label ? h('div', {\n        staticClass: 'mu-input-label',\n        class: {\n          float: this.float\n        }\n      }, this.label) : undefined;\n    },\n    createUnderline (h) {\n      if (this.solo) return;\n      return h('div', [\n        h('div', {\n          staticClass: 'mu-input-line',\n          class: {\n            disabled: this.disabled\n          }\n        }),\n        this.disabled ? undefined : h('div', {\n          staticClass: [\n            'mu-input-focus-line',\n            this.getNormalColorClass(this.underlineColor, false, false)\n          ].join(' '),\n          class: {\n            focus: this.isFocused\n          },\n          style: {\n            'background-color': this.getColor(this.underlineColor)\n          }\n        })\n      ]);\n    },\n    createHelpText (h) {\n      if (!this.errorText && !this.helpText && !this.maxLength) return;\n      return h('div', {\n        staticClass: 'mu-input-help'\n      }, [\n        h('div', {}, (this.errorText ? this.errorText : this.helpText) || ''),\n        this.maxLength ? h('div', {}, `${this.value ? String(this.value).length : 0} / ${this.maxLength}`) : undefined\n      ]);\n    },\n    createActionIcon (h) {\n      return this.actionIcon ? h(Icon, {\n        staticClass: 'mu-input-action-icon',\n        props: {\n          value: this.actionIcon\n        },\n        on: {\n          click: () => !this.disabled && this.actionClick && this.actionClick()\n        }\n      }) : undefined;\n    },\n    createInput (h, data, children, defaultAction) {\n      data.staticClass = `${data.staticClass || ''} mu-input-content`;\n      const isFocus = !this.disabled && !this.errorText && this.isFocused;\n      const colorClass = isFocus ? this.getNormalColorClass(this.color, true) : '';\n      const color = isFocus ? this.getColor(this.color) : '';\n      return h('div', {\n        staticClass: `mu-input ${colorClass}`,\n        class: this.inputClass,\n        style: {\n          color\n        }\n      }, [\n        this.createIcon(h),\n        this.createLabel(h),\n        h('div', data, [\n          this.$slots.prepend,\n          this.prefix && !this.float ? h('span', { staticClass: 'mu-input-prefix-text' }, this.prefix) : undefined,\n          ...children,\n          this.suffix && !this.float ? h('span', { staticClass: 'mu-input-suffix-text' }, this.suffix) : undefined,\n          defaultAction || this.createActionIcon(h),\n          this.$slots.append,\n          this.createUnderline(h),\n          this.createHelpText(h)\n        ])\n      ]);\n    }\n  },\n  watch: {\n    isFocused (val) {\n      if (!this.muFormItem) return;\n      val ? this.muFormItem.onFocus() : this.muFormItem.onBlur();\n    }\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/popup/Overlay.js",
    "content": "import '../../../styles/components/overlay.less';\nimport { FadeTransition } from '../../transitions';\n\nexport default {\n  name: 'mu-overlay',\n  props: {\n    show: Boolean,\n    fixed: Boolean,\n    onClick: Function,\n    opacity: {\n      type: Number,\n      default: 0.4\n    },\n    color: String,\n    zIndex: Number\n  },\n  computed: {\n    overlayStyle () {\n      return {\n        'opacity': this.opacity,\n        'background-color': this.color,\n        'position': this.fixed ? 'fixed' : '',\n        'z-index': this.zIndex\n      };\n    }\n  },\n  methods: {\n    prevent (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    },\n    handleClick () {\n      if (this.onClick) {\n        this.onClick();\n      }\n    }\n  },\n  render (h) {\n    return h(FadeTransition, [\n      h('div', {\n        staticClass: 'mu-overlay',\n        style: this.overlayStyle,\n        directives: [{\n          name: 'show',\n          value: this.show\n        }],\n        on: {\n          click: this.handleClick,\n          touchmove: this.prevent\n        }\n      })\n    ]);\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/popup/index.js",
    "content": "import PopupManager from './manager';\nimport { getZIndex } from './utils';\n\nexport default {\n  props: {\n    open: Boolean,\n    overlay: {\n      type: Boolean,\n      default: true\n    },\n    overlayClose: {\n      type: Boolean,\n      default: true\n    },\n    overlayOpacity: {\n      type: Number,\n      default: 0.4\n    },\n    overlayColor: {\n      type: String,\n      default: '#000'\n    },\n    escPressClose: { // 按退出键是否触发关闭事件\n      type: Boolean,\n      default: true\n    },\n    lockScroll: { // 是否锁定全局滚动\n      type: Boolean,\n      default: false\n    },\n    appendBody: { // 是否添加到 body 元素后, 内部使用\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      overlayZIndex: getZIndex(),\n      zIndex: getZIndex()\n    };\n  },\n  methods: {\n    overlayClick (e) {\n      if (!this.overlay || !this.overlayClose || !this.open) return;\n      this.$emit('update:open', false);\n      this.$emit('close', 'overlay');\n    },\n    escPress (e) {\n      if (!this.escPressClose || !this.open) return;\n      this.$emit('update:open', false);\n      this.$emit('close', 'esc');\n    },\n    resetZIndex () {\n      this.overlayZIndex = getZIndex();\n      this.zIndex = getZIndex();\n    },\n    popupEl () {\n      return this.$el;\n    },\n    appendPopupElToBody () {\n      if (!this.appendBody || this.appened) return;\n      this.$nextTick(() => {\n        document.body.appendChild(this.$el);\n        this.appened = true;\n      });\n    }\n  },\n  mounted () {\n    if (this.open) {\n      PopupManager.open(this);\n      this.appendPopupElToBody();\n    }\n  },\n  beforeDestroy () {\n    PopupManager.close(this);\n    if (this.appendBody) {\n      if (!this.$el) return;\n      if (this.$el.parentNode) this.$el.parentNode.removeChild(this.$el);\n    }\n  },\n  watch: {\n    open (val, oldVal) {\n      if (val) {\n        this.resetZIndex();\n        PopupManager.open(this);\n        this.appendPopupElToBody();\n      } else {\n        PopupManager.close(this);\n      }\n    }\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/popup/manager.js",
    "content": "import Vue from 'vue';\nimport keycode from 'keycode';\nimport { disableBodyScroll, enableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport overlayOpt from './Overlay';\nconst Overlay = Vue.extend(overlayOpt);\n\nconst PopupManager = {\n  instances: [],\n  overlay: false,\n\n  open (instance) {\n    if (!instance || this.instances.indexOf(instance) !== -1) return;\n    if (!this.overlay && instance.overlay) {\n      this.showOverlay(instance);\n    }\n    this.instances.push(instance);\n    this.changeOverlayStyle();\n  },\n  close (instance) {\n    const index = this.instances.indexOf(instance);\n    if (index === -1) return;\n    this.instances.splice(index, 1);\n    this.changeOverlayStyle();\n  },\n\n  showOverlay (instance) {\n    const overlay = this.overlay = new Overlay({\n      el: document.createElement('div')\n    });\n    overlay.fixed = true;\n    overlay.color = instance.overlayColor;\n    overlay.opacity = instance.overlayOpacity;\n    overlay.zIndex = instance.overlayZIndex;\n    overlay.onClick = this.handleOverlayClick.bind(this);\n    document.body.appendChild(overlay.$el);\n    if (instance.lockScroll) this.preventScrolling();\n    Vue.nextTick(() => {\n      overlay.show = true;\n    });\n  },\n  // 禁止滚动\n  preventScrolling () {\n    if (this.locked) return;\n    // body 操作\n    const body = document.getElementsByTagName('body')[0];\n    disableBodyScroll(body, {\n      reserveScrollBarGap: true,\n      allowTouchMove: (el) => {\n        for (let i = 0; i < this.instances.length; i++) {\n          if (\n            this.instances[i] &&\n            this.instances[i].$el &&\n            this.instances[i].$el.contains(el)\n          ) {\n            return true;\n          }\n        }\n        return false;\n      }\n    });\n    this.locked = true;\n  },\n\n  // 还原滚动设置\n  allowScrolling () {\n    const body = document.getElementsByTagName('body')[0];\n    enableBodyScroll(body, {\n      reserveScrollBarGap: true\n    });\n    clearAllBodyScrollLocks();\n    this.locked = false;\n  },\n  closeOverlay () {\n    if (!this.overlay) return;\n    this.allowScrolling();\n    const overlay = this.overlay;\n    overlay.show = false;\n    this.overlay = null;\n    setTimeout(() => {\n      document.body.removeChild(overlay.$el);\n      overlay.$destroy();\n    }, 450);\n  },\n\n  changeOverlayStyle () {\n    if (!this.overlay) return;\n    let instance;\n    for (let i = 1; i <= this.instances.length; i++) {\n      instance = this.instances[this.instances.length - i];\n      if (instance && instance.overlay) {\n        break;\n      }\n      instance = null;\n    }\n\n    if (!instance) return this.closeOverlay();\n\n    if (instance && instance.overlay) {\n      this.overlay.color = instance.overlayColor;\n      this.overlay.opacity = instance.overlayOpacity;\n      this.overlay.zIndex = instance.overlayZIndex;\n    }\n  },\n\n  handleOverlayClick () {\n    if (this.instances.length === 0) return;\n    const instance = this.instances[this.instances.length - 1];\n    if (instance.overlayClick) {\n      instance.overlayClick();\n    }\n  }\n};\n\ntypeof window !== 'undefined' && window.addEventListener('keydown', (e) => {\n  if (PopupManager.instances.length === 0 || keycode(e) !== 'esc') return;\n  const instance = PopupManager.instances[PopupManager.instances.length - 1];\n  if (instance.escPress) {\n    instance.escPress();\n  }\n});\n\nexport default PopupManager;\n"
  },
  {
    "path": "src/internal/mixins/popup/utils.js",
    "content": "let zIndex = 20141223;\n\nexport const getZIndex = () => zIndex++;\n\nexport const getDOM = function (dom) {\n  if (dom.nodeType === 3) {\n    dom = dom.nextElementSibling || dom.nextSibling;\n    getDOM(dom);\n  }\n  return dom;\n};\n"
  },
  {
    "path": "src/internal/mixins/ripple.js",
    "content": "export default {\n  props: {\n    ripple: {\n      type: Boolean,\n      default: true\n    },\n    rippleColor: {\n      type: String,\n      default: ''\n    },\n    rippleOpacity: {\n      type: Number\n    }\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/route.js",
    "content": "export default {\n  props: {\n    href: String,\n    target: String,\n    to: {\n      type: [String, Object]\n    },\n    tag: {\n      type: String,\n      default: 'a'\n    },\n    activeClass: String,\n    event: {\n      type: [String, Array],\n      default: 'click'\n    },\n    exact: Boolean,\n    exactActiveClass: String,\n    append: Boolean,\n    replace: Boolean\n  },\n  methods: {\n    generateRouteProps () {\n      return {\n        href: this.href,\n        target: this.target,\n        to: this.to,\n        tag: this.tag,\n        activeClass: this.activeClass,\n        event: this.event,\n        exact: this.exact,\n        exactActiveClass: this.exactActiveClass,\n        append: this.append,\n        replace: this.replace\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "src/internal/mixins/select.js",
    "content": "import TouchRipple from '../TouchRipple';\nimport keycode from 'keycode';\nimport color from './color';\nimport ripple from './ripple';\n\nexport default function (type = 'checkbox') { // checkbox\n  const iconProps = type === 'switch' ? {} : { uncheckIcon: String, checkedIcon: String };\n  return {\n    mixins: [color, ripple],\n    inheritAttrs: false,\n    inject: {\n      muFormItem: {\n        default: ''\n      }\n    },\n    model: {\n      prop: 'inputValue',\n      event: 'change'\n    },\n    props: {\n      label: String,\n      labelLeft: Boolean,\n      readonly: Boolean,\n      ...iconProps,\n      disabled: Boolean,\n      tabIndex: [Number, String]\n    },\n    methods: {\n      start (event) {\n        if (this.disabled) return;\n        if (this.ripple && (event.type !== 'mousedown' || event.button === 0)) {\n          this.$refs.ripple.start(event);\n        }\n        this.$emit(event.type, event);\n      },\n      end (event) {\n        if (this.disabled) return;\n        if (this.ripple) this.$refs.ripple.end();\n        if (event) this.$emit(event.type, event);\n      },\n      handleClick (e) {\n        if (this.disabled || this.readonly) return;\n        this.end();\n        this.toggle();\n        if (!this) return; // #1136\n        this.muFormItem && this.muFormItem.onBlur();\n        this.$emit('click', e);\n      },\n      handleKeydown (e) {\n        if (this.disabled) return;\n        this.end(e);\n        if (keycode(e) === 'enter' && !this.readonly) this.handleClick(e);\n      },\n      createRipple (h, staticClass, children) {\n        return this.disabled || !this.ripple ? h('div', {\n          staticClass\n        }, children) : h(TouchRipple, {\n          staticClass,\n          props: {\n            rippleWrapperClass: `mu-${type}-ripple-wrapper`,\n            centerRipple: true,\n            color: this.rippleColor,\n            opacity: this.rippleOpacity\n          },\n          ref: 'ripple'\n        }, children);\n      },\n      createInputElement (h) {\n        return h('input', {\n          attrs: {\n            ...this.$attrs,\n            type: type === 'switch' ? 'checkbox' : type,\n            disabled: this.disabled,\n            checked: this.checked,\n            readonly: this.readonly,\n            tabindex: -1\n          }\n        });\n      },\n      createSelect (h, view) {\n        const colorClass = this.getNormalColorClass(this.color, true);\n        const label = this.label ? h('div', { staticClass: `mu-${type}-label` }, this.label) : undefined;\n        const wrapper = h('div', {\n          staticClass: `mu-${type}-wrapper`\n        }, this.labelLeft ? [label, view] : [view, label]);\n\n        return h('div', {\n          staticClass: `mu-${type} ${this.checked ? colorClass : ''}`,\n          attrs: {\n            tabindex: this.disabled ? -1 : this.tabIndex ? this.tabIndex : 0\n          },\n          style: {\n            color: this.checked && !this.disabled ? this.getColor(this.color) : ''\n          },\n          class: {\n            'label-left': this.labelLeft,\n            'disabled': this.disabled,\n            [`mu-${type}-checked`]: this.checked,\n            'no-label': !this.label\n          },\n          on: {\n            ...this.$listeners,\n            click: this.handleClick,\n            keydown: this.handleKeydown,\n            mousedown: this.start,\n            mouseleave: this.end,\n            mouseup: this.end,\n            touchstart: this.start,\n            touchend: this.end,\n            touchcancel: this.end,\n            focus: this.start,\n            blur: this.end\n          }\n        }, [\n          this.createInputElement(h),\n          wrapper\n        ]);\n      }\n    }\n  };\n}\n"
  },
  {
    "path": "src/internal/transitions.js",
    "content": "import '../styles/transitions.less';\nexport { default as ExpandTransition } from './ExpandTransition';\n\nfunction createTransition (name, mode) {\n  return {\n    name,\n    functional: true,\n    render (h, context) {\n      context.data = context.data || {};\n      context.data.props = { name };\n      context.data.on = context.data.on || {};\n      if (!Object.isExtensible(context.data.on)) {\n        context.data.on = { ...context.data.on };\n      }\n\n      if (mode) context.data.props.mode = mode;\n\n      return h('transition', context.data, context.children);\n    }\n  };\n}\n\nexport const FadeTransition = createTransition('mu-fade-transition');\nexport const SlideTopTransition = createTransition('mu-slide-top-transition');\nexport const SlideBottomTransition = createTransition('mu-slide-bottom-transition');\nexport const SlideLeftTransition = createTransition('mu-slide-left-transition');\nexport const SlideRightTransition = createTransition('mu-slide-right-transition');\nexport const PopoverTransiton = createTransition('mu-popover-transition');\nexport const BottomSheetTransition = createTransition('mu-bottom-sheet-transition');\nexport const ScaleTransition = createTransition('mu-scale-transition');\n"
  },
  {
    "path": "src/styles/base.less",
    "content": "@import \"./normalize.less\";\n@import \"./vars.less\";\n*,\n*:before,\n*:after {\n  box-sizing: border-box;\n}\n// html{\n//   font-size: 62.5%;\n// }\n\nbody{\n  font-family: @fontFamily;\n  line-height: 1.5;\n  font-size: 14px;\n  font-weight: 400;\n  width: 100%;\n  -webkit-tap-highlight-color:rgba(0, 0, 0, 0);\n  background-color: @backgroundColor;\n  color: @textColor;\n}\n\npre{\n  white-space: pre-wrap;\n  word-break: break-all;\n  margin: 0;\n}\n\na{\n  text-decoration: none;\n  color: @secondaryColor;\n  user-select: none;\n  -webkit-user-select: none;\n}\n"
  },
  {
    "path": "src/styles/colors.less",
    "content": "@red50: #ffebee;\n@red100: #ffcdd2;\n@red200: #ef9a9a;\n@red300: #e57373;\n@red400: #ef5350;\n@red500: #f44336;\n@red600: #e53935;\n@red700: #d32f2f;\n@red800: #c62828;\n@red900: #b71c1c;\n@redA100: #ff8a80;\n@redA200: #ff5252;\n@redA400: #ff1744;\n@redA700: #d50000;\n@red: @red500;\n\n@pink50: #fce4ec;\n@pink100: #f8bbd0;\n@pink200: #f48fb1;\n@pink300: #f06292;\n@pink400: #ec407a;\n@pink500: #e91e63;\n@pink600: #d81b60;\n@pink700: #c2185b;\n@pink800: #ad1457;\n@pink900: #880e4f;\n@pinkA100: #ff80ab;\n@pinkA200: #ff4081;\n@pinkA400: #f50057;\n@pinkA700: #c51162;\n@pink: @pink500;\n\n@purple50: #f3e5f5;\n@purple100: #e1bee7;\n@purple200: #ce93d8;\n@purple300: #ba68c8;\n@purple400: #ab47bc;\n@purple500: #9c27b0;\n@purple600: #8e24aa;\n@purple700: #7b1fa2;\n@purple800: #6a1b9a;\n@purple900: #4a148c;\n@purpleA100: #ea80fc;\n@purpleA200: #e040fb;\n@purpleA400: #d500f9;\n@purpleA700: #aa00ff;\n@purple: @purple500;\n\n@deepPurple50: #ede7f6;\n@deepPurple100: #d1c4e9;\n@deepPurple200: #b39ddb;\n@deepPurple300: #9575cd;\n@deepPurple400: #7e57c2;\n@deepPurple500: #673ab7;\n@deepPurple600: #5e35b1;\n@deepPurple700: #512da8;\n@deepPurple800: #4527a0;\n@deepPurple900: #311b92;\n@deepPurpleA100: #b388ff;\n@deepPurpleA200: #7c4dff;\n@deepPurpleA400: #651fff;\n@deepPurpleA700: #6200ea;\n@deepPurple: @deepPurple500;\n\n@indigo50: #e8eaf6;\n@indigo100: #c5cae9;\n@indigo200: #9fa8da;\n@indigo300: #7986cb;\n@indigo400: #5c6bc0;\n@indigo500: #3f51b5;\n@indigo600: #3949ab;\n@indigo700: #303f9f;\n@indigo800: #283593;\n@indigo900: #1a237e;\n@indigoA100: #8c9eff;\n@indigoA200: #536dfe;\n@indigoA400: #3d5afe;\n@indigoA700: #304ffe;\n@indigo: @indigo500;\n\n@blue50: #e3f2fd;\n@blue100: #bbdefb;\n@blue200: #90caf9;\n@blue300: #64b5f6;\n@blue400: #42a5f5;\n@blue500: #2196f3;\n@blue600: #1e88e5;\n@blue700: #1976d2;\n@blue800: #1565c0;\n@blue900: #0d47a1;\n@blueA100: #82b1ff;\n@blueA200: #448aff;\n@blueA400: #2979ff;\n@blueA700: #2962ff;\n@blue: @blue500;\n\n@lightBlue50: #e1f5fe;\n@lightBlue100: #b3e5fc;\n@lightBlue200: #81d4fa;\n@lightBlue300: #4fc3f7;\n@lightBlue400: #29b6f6;\n@lightBlue500: #03a9f4;\n@lightBlue600: #039be5;\n@lightBlue700: #0288d1;\n@lightBlue800: #0277bd;\n@lightBlue900: #01579b;\n@lightBlueA100: #80d8ff;\n@lightBlueA200: #40c4ff;\n@lightBlueA400: #00b0ff;\n@lightBlueA700: #0091ea;\n@lightBlue: @lightBlue500;\n\n@cyan50: #e0f7fa;\n@cyan100: #b2ebf2;\n@cyan200: #80deea;\n@cyan300: #4dd0e1;\n@cyan400: #26c6da;\n@cyan500: #00bcd4;\n@cyan600: #00acc1;\n@cyan700: #0097a7;\n@cyan800: #00838f;\n@cyan900: #006064;\n@cyanA100: #84ffff;\n@cyanA200: #18ffff;\n@cyanA400: #00e5ff;\n@cyanA700: #00b8d4;\n@cyan: @cyan500;\n\n@teal50: #e0f2f1;\n@teal100: #b2dfdb;\n@teal200: #80cbc4;\n@teal300: #4db6ac;\n@teal400: #26a69a;\n@teal500: #009688;\n@teal600: #00897b;\n@teal700: #00796b;\n@teal800: #00695c;\n@teal900: #004d40;\n@tealA100: #a7ffeb;\n@tealA200: #64ffda;\n@tealA400: #1de9b6;\n@tealA700: #00bfa5;\n@teal: @teal500;\n\n@green50: #e8f5e9;\n@green100: #c8e6c9;\n@green200: #a5d6a7;\n@green300: #81c784;\n@green400: #66bb6a;\n@green500: #4caf50;\n@green600: #43a047;\n@green700: #388e3c;\n@green800: #2e7d32;\n@green900: #1b5e20;\n@greenA100: #b9f6ca;\n@greenA200: #69f0ae;\n@greenA400: #00e676;\n@greenA700: #00c853;\n@green: @green500;\n\n@lightGreen50: #f1f8e9;\n@lightGreen100: #dcedc8;\n@lightGreen200: #c5e1a5;\n@lightGreen300: #aed581;\n@lightGreen400: #9ccc65;\n@lightGreen500: #8bc34a;\n@lightGreen600: #7cb342;\n@lightGreen700: #689f38;\n@lightGreen800: #558b2f;\n@lightGreen900: #33691e;\n@lightGreenA100: #ccff90;\n@lightGreenA200: #b2ff59;\n@lightGreenA400: #76ff03;\n@lightGreenA700: #64dd17;\n@lightGreen: @lightGreen500;\n\n@lime50: #f9fbe7;\n@lime100: #f0f4c3;\n@lime200: #e6ee9c;\n@lime300: #dce775;\n@lime400: #d4e157;\n@lime500: #cddc39;\n@lime600: #c0ca33;\n@lime700: #afb42b;\n@lime800: #9e9d24;\n@lime900: #827717;\n@limeA100: #f4ff81;\n@limeA200: #eeff41;\n@limeA400: #c6ff00;\n@limeA700: #aeea00;\n@lime: @lime500;\n\n@yellow50: #fffde7;\n@yellow100: #fff9c4;\n@yellow200: #fff59d;\n@yellow300: #fff176;\n@yellow400: #ffee58;\n@yellow500: #ffeb3b;\n@yellow600: #fdd835;\n@yellow700: #fbc02d;\n@yellow800: #f9a825;\n@yellow900: #f57f17;\n@yellowA100: #ffff8d;\n@yellowA200: #ffff00;\n@yellowA400: #ffea00;\n@yellowA700: #ffd600;\n@yellow: @yellow500;\n\n@amber50: #fff8e1;\n@amber100: #ffecb3;\n@amber200: #ffe082;\n@amber300: #ffd54f;\n@amber400: #ffca28;\n@amber500: #ffc107;\n@amber600: #ffb300;\n@amber700: #ffa000;\n@amber800: #ff8f00;\n@amber900: #ff6f00;\n@amberA100: #ffe57f;\n@amberA200: #ffd740;\n@amberA400: #ffc400;\n@amberA700: #ffab00;\n@amber: @amber500;\n\n@orange50: #fff3e0;\n@orange100: #ffe0b2;\n@orange200: #ffcc80;\n@orange300: #ffb74d;\n@orange400: #ffa726;\n@orange500: #ff9800;\n@orange600: #fb8c00;\n@orange700: #f57c00;\n@orange800: #ef6c00;\n@orange900: #e65100;\n@orangeA100: #ffd180;\n@orangeA200: #ffab40;\n@orangeA400: #ff9100;\n@orangeA700: #ff6d00;\n@orange: @orange500;\n\n@deepOrange50: #fbe9e7;\n@deepOrange100: #ffccbc;\n@deepOrange200: #ffab91;\n@deepOrange300: #ff8a65;\n@deepOrange400: #ff7043;\n@deepOrange500: #ff5722;\n@deepOrange600: #f4511e;\n@deepOrange700: #e64a19;\n@deepOrange800: #d84315;\n@deepOrange900: #bf360c;\n@deepOrangeA100: #ff9e80;\n@deepOrangeA200: #ff6e40;\n@deepOrangeA400: #ff3d00;\n@deepOrangeA700: #dd2c00;\n@deepOrange: @deepOrange500;\n\n@brown50: #efebe9;\n@brown100: #d7ccc8;\n@brown200: #bcaaa4;\n@brown300: #a1887f;\n@brown400: #8d6e63;\n@brown500: #795548;\n@brown600: #6d4c41;\n@brown700: #5d4037;\n@brown800: #4e342e;\n@brown900: #3e2723;\n@brown: @brown500;\n\n@blueGrey50: #eceff1;\n@blueGrey100: #cfd8dc;\n@blueGrey200: #b0bec5;\n@blueGrey300: #90a4ae;\n@blueGrey400: #78909c;\n@blueGrey500: #607d8b;\n@blueGrey600: #546e7a;\n@blueGrey700: #455a64;\n@blueGrey800: #37474f;\n@blueGrey900: #263238;\n@blueGrey: @blueGrey500;\n\n@grey50: #fafafa;\n@grey100: #f5f5f5;\n@grey200: #eeeeee;\n@grey300: #e0e0e0;\n@grey400: #bdbdbd;\n@grey500: #9e9e9e;\n@grey600: #757575;\n@grey700: #616161;\n@grey800: #424242;\n@grey900: #212121;\n@grey: @grey500;\n\n@black: #000000;\n@white: #ffffff;\n\n@transparent: rgba(0, 0, 0, 0);\n@fullBlack: rgba(0, 0, 0, 1);\n@darkBlack: rgba(0, 0, 0, 0.87);\n@lightBlack: rgba(0, 0, 0, 0.54);\n@minBlack: rgba(0, 0, 0, 0.26);\n@faintBlack: rgba(0, 0, 0, 0.12);\n@fullWhite: rgba(255, 255, 255, 1);\n@darkWhite: rgba(255, 255, 255, 0.87);\n@lightWhite: rgba(255, 255, 255, 0.54);\n"
  },
  {
    "path": "src/styles/components/alert.less",
    "content": "@import '../import.less';\n.mu-alert {\n  min-height: 56px;\n  padding: 24px 16px;\n  display: flex;\n  width: 100%;\n  align-items: center;\n  justify-content: flex;\n  font-size: 14px;\n  line-height: 16px;\n  color: @alternateTextColor;\n  border-radius: 4px;\n  .mu-icon-left {\n    color: fade(@textColor, 26%);\n    margin-right: 16px;\n    .flex-shrink(0);\n  }\n  .mu-alert-delete-btn {\n    margin-left: auto;\n    transition: all 450ms @easeOutFunction;\n    cursor: pointer;\n    width: 24px;\n    height: 24px;\n    padding: 0;\n    color: @alternateTextColor;\n    .mu-circle-ripple{\n      opacity: .3;\n    }\n  }\n}\n\n.mu-alert-delete-icon{\n  display: inline-block;\n  fill: currentColor;\n  height: 14px;\n  width: 14px;\n}\n"
  },
  {
    "path": "src/styles/components/appbar.less",
    "content": "@import '../import.less';\n\n.mu-appbar {\n  display: flex;\n  align-self: flex-start;\n  justify-content: flex-start;\n  align-items: center;\n  color: @textColor;\n  background-color: @grey100;\n  height: 56px;\n  padding: 0 4px;\n  z-index: 100;\n  .mu-icon-button {\n    color: inherit;\n  }\n  .mu-flat-button {\n    color: inherit;\n    height: 100%;\n    line-height: 100%;\n    min-width: auto;\n  }\n  .mu-menu {\n    height: 100%;\n    line-height: 100%;\n    min-width: auto;\n  }\n}\n.mu-appbar-left,\n.mu-appbar-right {\n  .flex-shrink(0);\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  height: 100%;\n}\n.mu-appbar-left {\n  padding-right: 8px;\n}\n.mu-appbar-title {\n  flex: 1;\n  padding-left: 12px;\n  padding-right: 12px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  font-size: 20px;\n  font-weight: 400;\n  line-height: 56px;\n}\n\n@media only screen and (min-width: 600px) {\n  .mu-appbar-title {\n    line-height: 64px;\n  }\n  .mu-appbar {\n    height: 64px;\n  }\n  .mu-appbar-title {\n    font-size: 24px;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/avatar.less",
    "content": "@import \"../import.less\";\n\n.mu-avatar{\n  display: inline-block;\n  height: 40px;\n  width: 40px;\n  font-size: 20px;\n  color: @alternateTextColor;\n  background-color: @trackColor;\n  text-align: center;\n  border-radius: 50%;\n  img {\n    border-radius: 50%;\n    width: 100%;\n    height: 100%;\n    display: block;\n  }\n}\n\n\n.mu-avatar-inner{\n  display: flex;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n}\n"
  },
  {
    "path": "src/styles/components/badge.less",
    "content": "@import \"../import.less\";\n\n.mu-badge-container{\n  display: inline-block;\n  position: relative;\n}\n.mu-badge{\n  font-size: 10px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 0 6px;\n  line-height: 1.5;\n  font-size: 12px;\n  font-style: normal;\n  background-color: @trackColor;\n  color: @alternateTextColor;\n  border-radius: 3px;\n  overflow: hidden;\n}\n\n.mu-badge-float {\n  position: absolute;\n  top: -12px;\n  right: -12px;\n}\n\n.mu-badge-circle {\n  border-radius: 50%;\n  padding: 0;\n  width: 24px;\n  height: 24px;\n  overflow: hidden;\n}\n"
  },
  {
    "path": "src/styles/components/bootstrap-grid.less",
    "content": "/*https://github.com/twbs/bootstrap/blob/v4-dev/dist/css/bootstrap-grid.css*/\n.container {\n  width: 100%;\n  padding-right: 8px;\n  padding-left: 8px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 8px;\n  padding-left: 8px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -8px;\n  margin-left: -8px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  min-height: 1px;\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: none;\n}\n\n.col-1 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -webkit-box-ordinal-group: 0;\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -webkit-box-ordinal-group: 14;\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -webkit-box-ordinal-group: 1;\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -webkit-box-ordinal-group: 2;\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -webkit-box-ordinal-group: 3;\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -webkit-box-ordinal-group: 4;\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -webkit-box-ordinal-group: 5;\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -webkit-box-ordinal-group: 6;\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -webkit-box-ordinal-group: 7;\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -webkit-box-ordinal-group: 8;\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -webkit-box-ordinal-group: 9;\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -webkit-box-ordinal-group: 10;\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -webkit-box-ordinal-group: 11;\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -webkit-box-ordinal-group: 12;\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -webkit-box-ordinal-group: 13;\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -webkit-box-flex: 1;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-sm-1 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -webkit-box-ordinal-group: 0;\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -webkit-box-ordinal-group: 14;\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -webkit-box-ordinal-group: 1;\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -webkit-box-ordinal-group: 2;\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -webkit-box-ordinal-group: 3;\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -webkit-box-ordinal-group: 4;\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -webkit-box-ordinal-group: 5;\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -webkit-box-ordinal-group: 6;\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -webkit-box-ordinal-group: 7;\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -webkit-box-ordinal-group: 8;\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -webkit-box-ordinal-group: 9;\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -webkit-box-ordinal-group: 10;\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -webkit-box-ordinal-group: 11;\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -webkit-box-ordinal-group: 12;\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -webkit-box-ordinal-group: 13;\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -webkit-box-flex: 1;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-md-1 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -webkit-box-ordinal-group: 0;\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -webkit-box-ordinal-group: 14;\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -webkit-box-ordinal-group: 1;\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -webkit-box-ordinal-group: 2;\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -webkit-box-ordinal-group: 3;\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -webkit-box-ordinal-group: 4;\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -webkit-box-ordinal-group: 5;\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -webkit-box-ordinal-group: 6;\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -webkit-box-ordinal-group: 7;\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -webkit-box-ordinal-group: 8;\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -webkit-box-ordinal-group: 9;\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -webkit-box-ordinal-group: 10;\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -webkit-box-ordinal-group: 11;\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -webkit-box-ordinal-group: 12;\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -webkit-box-ordinal-group: 13;\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -webkit-box-flex: 1;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-lg-1 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -webkit-box-ordinal-group: 0;\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -webkit-box-ordinal-group: 14;\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -webkit-box-ordinal-group: 1;\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -webkit-box-ordinal-group: 2;\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -webkit-box-ordinal-group: 3;\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -webkit-box-ordinal-group: 4;\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -webkit-box-ordinal-group: 5;\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -webkit-box-ordinal-group: 6;\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -webkit-box-ordinal-group: 7;\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -webkit-box-ordinal-group: 8;\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -webkit-box-ordinal-group: 9;\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -webkit-box-ordinal-group: 10;\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -webkit-box-ordinal-group: 11;\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -webkit-box-ordinal-group: 12;\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -webkit-box-ordinal-group: 13;\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -webkit-box-flex: 1;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-xl-1 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -webkit-box-ordinal-group: 0;\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -webkit-box-ordinal-group: 14;\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -webkit-box-ordinal-group: 1;\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -webkit-box-ordinal-group: 2;\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -webkit-box-ordinal-group: 3;\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -webkit-box-ordinal-group: 4;\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -webkit-box-ordinal-group: 5;\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -webkit-box-ordinal-group: 6;\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -webkit-box-ordinal-group: 7;\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -webkit-box-ordinal-group: 8;\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -webkit-box-ordinal-group: 9;\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -webkit-box-ordinal-group: 10;\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -webkit-box-ordinal-group: 11;\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -webkit-box-ordinal-group: 12;\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -webkit-box-ordinal-group: 13;\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.d-flex {\n  display: -webkit-box !important;\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -webkit-inline-box !important;\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.flex-row {\n  -webkit-box-orient: horizontal !important;\n  -webkit-box-direction: normal !important;\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -webkit-box-orient: horizontal !important;\n  -webkit-box-direction: reverse !important;\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: reverse !important;\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -webkit-box-flex: 1 !important;\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.justify-content-start {\n  -webkit-box-pack: start !important;\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -webkit-box-pack: end !important;\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -webkit-box-pack: center !important;\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -webkit-box-pack: justify !important;\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -webkit-box-align: start !important;\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -webkit-box-align: end !important;\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -webkit-box-align: center !important;\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -webkit-box-align: baseline !important;\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -webkit-box-align: stretch !important;\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n"
  },
  {
    "path": "src/styles/components/bottom-nav.less",
    "content": "@import '../import.less';\n.mu-bottom-nav{\n  height: 56px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  background-color: @dialogBackgroundColor;\n  text-align: center;\n  outline: none;\n  position: relative;\n  color: @secondaryTextColor;\n}\n\n.mu-bottom-nav-shift{\n  background-color: @primaryColor;\n  color: fade(@alternateTextColor, 70%);\n}\n\n.mu-bottom-nav-shift-wrapper{\n  height: 100%;\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  text-align: center;\n}\n\n.mu-bottom-item {\n  flex: 1;\n  min-width: 80px;\n  max-width: 168px;\n  position: relative;\n  height: 100%;\n  padding: 0;\n  background: none;\n  appearance: none;\n  text-decoration: none;\n  border: none;\n  outline: none;\n  transition: all .4s @easeInOutFunction;\n  user-select: none;\n  padding: 6px;\n  cursor: pointer;\n  color: inherit;\n  .mu-bottom-nav-shift & {\n    padding: 8px 12px 10px;\n    min-width: 56px;\n    max-width: 96px;\n  }\n}\n.mu-bottom-item-wrapper {\n  display: block;\n  height: 100%;\n}\n\n.mu-bottom-item-active {\n  padding-top: 6px;\n  padding-bottom: 5px;\n  color: @primaryColor;\n  &.is-shift {\n    color: @alternateTextColor;\n  }\n  .mu-bottom-item-text{\n    font-size: 14px;\n  }\n  .mu-bottom-nav-shift & {\n    flex: 1.7;\n    min-width: 96px;\n    max-width: 168px;\n    padding-top: 6px;\n    padding-bottom: 5px;\n  }\n}\n\n.mu-bottom-item-text{\n  display: block;\n  text-align: center;\n  font-size: 12px;\n  transition: transform .4s @easeOutFunction, opacity .4s @easeOutFunction, font-size 0.3s @easeOutFunction;\n  backface-visibility: hidden;\n  .mu-bottom-nav-shift & {\n    opacity: 0;\n    transform: scale(1) translate3d(0, 6px, 0);\n  }\n  .mu-bottom-nav-shift .mu-bottom-item-active & {\n    transform: scale(1) translate3d(0, 2px, 0);\n    opacity: 1;\n  }\n}\n.mu-bottom-item-icon {\n  display: block;\n  margin: auto;\n  transition: transform .45s @easeOutFunction;\n  backface-visibility: hidden;\n  width: 24px;\n  .mu-bottom-nav-shift & {\n    transform: translate3d(0, 8px, 0);\n  }\n  .mu-bottom-nav-shift .mu-bottom-item-active & {\n    transform: scale(1) translateZ(0);\n  }\n}\n"
  },
  {
    "path": "src/styles/components/bottom-sheet.less",
    "content": "@import '../import.less';\n\n.mu-bottom-sheet {\n  background-color: @dialogBackgroundColor;\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n"
  },
  {
    "path": "src/styles/components/breadcrumbs.less",
    "content": "@import '../import.less';\n\n.mu-breadcrumbs {\n  display: flex;\n  padding: 18px 12px;\n  margin: 0;\n  align-items: center;\n  > li {\n    font-size: 14px;\n    line-height: 1;\n    display: flex;\n    align-items: center;\n    .mu-icon {\n      font-size: 16px;\n    }\n  }\n}\n\n.mu-breadcrumbs-item {\n  display: flex;\n  align-items: center;\n  color: @primaryColor;\n  display: block;\n  transition: .3s @easeOutFunction;\n  > a {\n    display: block;\n    text-decoration: none;\n    cursor: pointer;\n    color: inherit;\n  }\n  &.is-disabled {\n    color: @disabledColor;\n    > a {\n      cursor: default;\n    }\n  }\n}\n\n.mu-breadcrumbs-divider {\n  padding: 0 12px;\n  color: @disabledColor;\n}\n\n"
  },
  {
    "path": "src/styles/components/button.less",
    "content": "@import \"../import.less\";\n.mu-button {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  transition-duration: 300ms;\n  transition-timing-function: @easeOutFunction;\n  text-decoration: none;\n  text-align: center;\n  border: none;\n  appearance: none;\n  outline: none;\n  text-transform: uppercase;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  .flex-shrink(0);\n  .mu-icon-left {\n    margin-right: 8px;\n  }\n  .mu-icon-right {\n    margin-left: 8px;\n  }\n  &.hover::before{\n    content: '';\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    background-color: currentColor;\n    opacity: .12;\n  }\n}\n\n.mu-button-wrapper {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n}\n\n.mu-raised-button {\n  font-size: 14px;\n  min-width: 88px;\n  height: 36px;\n  line-height: 36px;\n  border-radius: 2px;\n  background-color: @dialogBackgroundColor;\n  color: @textColor;\n  .depth(2);\n  &.mu-inverse {\n    .mu-circle-ripple {\n      opacity: 0.3;\n    }\n  }\n  &.disabled{\n    color: fade(@textColor, 30%);\n    cursor: not-allowed;\n    background-color: darken(@alternateTextColor, 10%);\n    .depth(0);\n    &.hover,\n    &:active,\n    &:hover {\n      box-shadow: none;\n    }\n  }\n  &.focus {\n    .depth(6);\n  }\n  &:active {\n    .depth(8);\n  }\n\n  .mu-button-wrapper {\n    padding: 0 16px;\n  }\n\n  &.mu-button-round {\n    border-radius: 36px;\n  }\n  &.mu-button-full-width {\n    width: 100%;\n  }\n  &.mu-button-small {\n    font-size: 13px;\n    height: 28px;\n    &.mu-button-round {\n      border-radius: 28px;\n    }\n    .mu-button-wrapper {\n      padding: 0 8px;\n    }\n    .mu-icon {\n      font-size: 20px;\n    }\n  }\n  &.mu-button-large {\n    font-size: 15px;\n    height: 44px;\n    &.mu-button-round {\n      border-radius: 44px;\n    }\n    .mu-button-wrapper {\n      padding: 0 32px;\n    }\n    .mu-icon {\n      font-size: 28px;\n    }\n  }\n}\n\n.mu-flat-button {\n  border-radius: 2px;\n  height: 36px;\n  line-height: 36px;\n  min-width: 88px;\n  font-size: 14px;\n  color: @textColor;\n  background: transparent;\n  &.disabled{\n    color: @disabledColor;\n    cursor: not-allowed;\n    background: none;\n  }\n  .mu-button-wrapper {\n    padding: 0 16px;\n  }\n\n  &.mu-button-small {\n    font-size: 13px;\n    height: 28px;\n    .mu-button-wrapper {\n      padding: 0 8px;\n    }\n    .mu-icon {\n      font-size: 20px;\n    }\n  }\n  &.mu-button-large {\n    font-size: 15px;\n    height: 44px;\n    .mu-button-wrapper {\n      padding: 0 32px;\n    }\n    .mu-icon {\n      font-size: 28px;\n    }\n  }\n}\n\n.mu-icon-button {\n  line-height: 1;\n  width: 48px;\n  height: 48px;\n  border-radius: 50%;\n  font-size: 24px;\n  padding: 12px;\n  border: none;\n  appearance: none;\n  background: none;\n  color: inherit;\n  background-color: transparent;\n  &.disabled{\n    color: @disabledColor;\n    cursor: not-allowed;\n  }\n  &.mu-button-small {\n    width: 32px;\n    height: 32px;\n    .mu-icon {\n      font-size: 20px;\n    }\n  }\n  &.mu-button-large {\n    width: 56px;\n    height: 56px;\n    .mu-icon {\n      font-size: 28px;\n    }\n  }\n}\n\n.mu-fab-button {\n  line-height: 1;\n  width: 56px;\n  height: 56px;\n  border-radius: 50%;\n  border: none;\n  appearance: none;\n  background-color: @primaryColor;\n  color: @alternateTextColor;\n  .depth(6);\n  &.hover,\n  &:active{\n    .depth(12);\n  }\n\n  &.disabled{\n    color: fade(@textColor, 30%);\n    cursor: not-allowed;\n    background-color: darken(@alternateTextColor, 10%);\n    box-shadow: none;\n    &.hover,\n    &:active,\n    &:hover {\n      box-shadow: none;\n    }\n  }\n  .mu-circle-ripple{\n    opacity: .3;\n  }\n\n  &.mu-button-small {\n    width: 40px;\n    height: 40px;\n    .mu-icon {\n      font-size: 18px;\n    }\n  }\n  &.mu-button-large {\n    width: 72px;\n    height: 72px;\n    .mu-icon {\n      font-size: 30px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/styles/components/card.less",
    "content": "@import \"../import.less\";\n\n.mu-card {\n  background-color: @dialogBackgroundColor;\n  position: relative;\n  border-radius: 2px;\n  .depth(1);\n}\n\n.mu-card__raised {\n  .depth(8);\n}\n\n.mu-card-actions {\n  padding: 8px;\n  position: relative;\n}\n\n.mu-card-header {\n  padding: 16px;\n  font-weight: 500;\n  position: relative;\n  white-space: nowrap;\n  .mu-avatar {\n    margin-right: 16px;\n  }\n}\n\n.mu-card-header-title{\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  padding-right: 90px;\n  .mu-card-title{\n    font-size: 15px;\n    color: fade(@textColor, 87%);\n  }\n  .mu-card-sub-title{\n    font-size: 14px;\n    color: fade(@textColor, 57%);\n  }\n}\n\n.mu-card-media {\n  position: relative;\n  > img {\n    width: 100%;\n    max-width: 100%;\n    min-width: 100%;\n    display: block;\n    vertical-align: top;\n  }\n}\n\n.mu-card-media-title {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  padding: 16px;\n  background-color: @lightBlack;\n  .mu-card-title {\n    font-size: 24px;\n    color: @darkWhite;\n    line-height: 36px;\n  }\n  .mu-card-sub-title {\n    color: @lightWhite;\n    font-size: 14px;\n  }\n}\n\n.mu-card-text{\n  padding: 16px;\n  font-size: 14px;\n  color: @textColor;\n}\n\n.mu-card-title-container{\n  padding: 16px;\n  position: relative;\n  .mu-card-title{\n    font-size: 24px;\n    color: @textColor;\n    line-height: 36px;\n  }\n  .mu-card-sub-title{\n    font-size: 14px;\n    color: @secondaryTextColor;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/carousel.less",
    "content": "@import '../import.less';\n\n.mu-carousel {\n  height: 500px;\n  width: 100%;\n  position: relative;\n  overflow: hidden;\n}\n\n.mu-carousel-button.mu-icon-button {\n  color: @alternateTextColor;\n  width: 48px;\n  height: 48px;\n  z-index: 3;\n  position: absolute;\n  top: 50%;\n  margin-top: -24px;\n  font-size: 36px;\n  padding: 0;\n  .mu-circle-ripple {\n    opacity: .2;\n  }\n}\n\n.mu-carousel-button__left {\n  left: 8px;\n}\n\n.mu-carousel-button__right {\n  right: 8px;\n}\n\n\n.mu-carousel-svg-icon {\n  width: 1em;\n  height: 1em;\n  fill: currentColor;\n  display: inline-block;\n}\n\n.mu-carousel-indicators {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 48px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 3;\n}\n\n.mu-carousel-indicator-button {\n  width: 28px;\n  height: 28px;\n  padding: 0;\n  margin: 0 8px;\n}\n\n.mu-carousel-indicator-icon {\n  display: inline-block;\n  width: 12px;\n  height: 12px;\n  background-color: @alternateTextColor;\n  border-radius: 50%;\n  opacity: .5;\n  transition: opacity .3s @easeOutFunction;\n  .mu-carousel-indicator-button__active & {\n    opacity: 1;\n  }\n}\n\n.mu-carousel-item {\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  flex-shrink: 0;\n  position: absolute;\n  left: 0;\n  right: 0;\n  transition: .4s cubic-bezier(.25,.8,.5,1);\n  > img {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%,-50%);\n    min-width: 100%;\n    transition: inherit;\n    will-change: transform;\n    max-width: none;\n  }\n}\n\n.mu-carousel-slide-enter {\n  transform: translate3d(100%, 0, 0);\n  .mu-carousel__transition_inverse & {\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.mu-carousel-slide-leave-active {\n  transform: translate3d(-100%, 0, 0);\n  .mu-carousel__transition_inverse & {\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n.mu-carousel-fade-enter,\n.mu-carousel-fade-leave-active {\n  opacity: 0;\n}\n"
  },
  {
    "path": "src/styles/components/checkbox.less",
    "content": "@import \"../import.less\";\n.mu-checkbox {\n  position: relative;\n  display: inline-block;\n  height: 24px;\n  line-height: 24px;\n  cursor: pointer;\n  user-select: none;\n  outline: none;\n  color: @secondaryTextColor;\n  input[type=\"checkbox\"] {\n    display: none;\n  }\n  &.disabled {\n    cursor: not-allowed;\n    color: @disabledColor;\n  }\n}\n\n.mu-checkbox-checked {\n  color: @primaryColor;\n  .mu-checkbox-icon-uncheck {\n    opacity: 0;\n    transition: opacity 650ms @easeOutFunction 150ms;\n  }\n  .mu-checkbox-icon-checked {\n    opacity: 1;\n    transform: scale(1);\n    transition: opacity 0ms @easeOutFunction, transform 800ms @easeOutFunction;\n  }\n}\n\n.mu-checkbox-wrapper {\n  display: flex;\n  width: 100%;\n  height: 24px;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.mu-checkbox-icon {\n  width: 24px;\n  height: 24px;\n  vertical-align: middle;\n  position: relative;\n  margin-right: 8px;\n  .mu-checkbox.label-left & {\n    margin-right: 0;\n    margin-left: 8px;\n  }\n  .mu-checkbox.no-label & {\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n\n.mu-checkbox-label {\n  color: @textColor;\n  .mu-checkbox.disabled & {\n    color: @disabledColor;\n  }\n}\n\n.mu-checkbox-svg-icon {\n  display: inline-block;\n  fill: currentColor;\n  height: 24px;\n  width: 24px;\n  user-select: none;\n}\n\n.mu-checkbox-icon-uncheck {\n  position: absolute;\n  left: 0;\n  top: 0;\n  opacity: 1;\n  transition: opacity 1s @easeOutFunction .2s;\n}\n\n.mu-checkbox-icon-checked {\n  position: absolute;\n  left: 0;\n  top: 0;\n  opacity: 0;\n  transform: scale(0);\n  transition: opacity 450ms @easeOutFunction, transform 0ms @easeOutFunction 450ms;\n}\n\n.mu-checkbox-ripple-wrapper {\n  width: 48px;\n  height: 48px;\n  top: -12px;\n  left: -12px;\n  position: absolute;\n  .mu-checkbox.label-left & {\n    right: -12px;\n    left: auto;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/chip.less",
    "content": "@import '../import.less';\n.mu-chip {\n  border-radius: 16px;\n  line-height: 32px;\n  white-space: nowrap;\n  display: inline-flex;\n  align-items: center;\n  background-color: @chipBackgroundColor;\n  color: @textColor;\n  font-size: 13px;\n  padding: 0 12px;\n  outline: none;\n  cursor: default;\n  .mu-avatar:first-child{\n    margin-left: -12px;\n    margin-right: 4px;\n  }\n  &:active,\n  &:focus,\n  &.is-deletable {\n    background-color: darken(@chipBackgroundColor, 8%);\n    .depth(1);\n  }\n  &:hover{\n    .mu-chip-delete-icon{\n      color: fade(fade(@textColor, 26%), 40%);\n    }\n    background-color: darken(@chipBackgroundColor, 8%);\n    cursor: pointer;\n  }\n  &.mu-primary-color {\n    background-color: @primaryColor;\n  }\n  &.mu-secondary-color {\n    background-color: @secondaryColor;\n  }\n  &.mu-success-color {\n    background-color: @successColor;\n  }\n  &.mu-warning-color {\n    background-color: @warningColor;\n  }\n  &.mu-info-color {\n    background-color: @infoColor;\n  }\n  &.mu-error-color {\n    background-color: @errorColor;\n  }\n\n}\n.mu-chip-delete-icon{\n  display: inline-block;\n  margin-right: -8px;\n  margin-left: 4px;\n  color: fade(@textColor, 26%);\n  fill: currentColor;\n  height: 24px;\n  width: 24px;\n  user-select: none;\n  transition: all 450ms @easeOutFunction;\n}\n"
  },
  {
    "path": "src/styles/components/circle-ripple.less",
    "content": "@import \"../import.less\";\n.mu-circle-ripple{\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  user-select: none;\n  border-radius: 50%;\n  background-color: currentColor;\n  background-clip: padding-box;\n  opacity: 0.1;\n}\n\n.mu-ripple-enter-active, .mu-ripple-leave-active{\n  transition: opacity 2s @easeOutFunction, transform .45s @easeOutFunction;\n}\n\n.mu-ripple-enter {\n  transform: scale(0);\n}\n\n.mu-ripple-leave-active{\n  opacity: 0 !important;\n}\n"
  },
  {
    "path": "src/styles/components/data-table.less",
    "content": "@import \"../import.less\";\n.mu-table {\n  background-color: @alternateTextColor;\n  position: relative;\n  overflow: hidden;\n  table {\n    border-collapse: collapse;\n    border-spacing: 0;\n    table-layout: fixed;\n  }\n  tr {\n    color: @textColor;\n    height: 48px;\n    &.is-stripe {\n      background-color:  @grey50;\n    }\n    &.is-hover {\n      background-color: @grey200;\n    }\n    &.is-selected {\n      background-color: @grey100;\n    }\n  }\n  td {\n    padding-left: 24px;\n    padding-right: 24px;\n    min-height: 48px;\n    text-align: left;\n    font-size: 13px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    word-break: break-all;\n    border-bottom: 1px solid @borderColor;\n    &.is-left {\n      text-align: left;\n    }\n    &.is-center {\n      text-align: center;\n    }\n    &.is-right {\n      text-align: right;\n    }\n  }\n  th {\n    font-weight: normal;\n    font-size: 12px;\n    padding-left: 24px;\n    padding-right: 24px;\n    height: 56px;\n    text-align: left;\n    color: @secondaryTextColor;\n    position: relative;\n    border-bottom: 1px solid @borderColor;\n    white-space: nowrap;\n    &.is-left {\n      text-align: left;\n    }\n    &.is-center {\n      text-align: center;\n    }\n    &.is-right {\n      text-align: right;\n    }\n    &.is-sortable {\n      cursor: pointer;\n      user-select: none;\n      &:hover {\n        color: @textColor;\n        .mu-table-sort-icon {\n          opacity: .6;\n        }\n      }\n    }\n    &.is-sorting {\n      color: @textColor;\n      .mu-table-sort-icon,\n      &:hover .mu-table-sort-icon {\n        opacity: 1;\n      }\n    }\n    &.sort-asc {\n      .mu-table-sort-icon {\n        transform: rotate(180deg);\n      }\n    }\n  }\n}\n.mu-table-flex {\n  display: flex;\n  flex-direction: column;\n}\n.mu-table-border {\n  border: 1px solid @borderColor;\n  th, td {\n    border-right: 1px solid @borderColor;\n    &:last-child {\n      border-right: none;\n    }\n  }\n}\n.mu-table-header-wrapper,\n.mu-table-footer-wrapper {\n  overflow: hidden;\n}\n\n.mu-table-empty {\n  height: 300px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: @secondaryTextColor;\n  font-size: 14px;\n}\n\n.mu-table-progress.mu-linear-progress {\n  position: absolute;\n  left: 0;\n  right: 0;\n  z-index: 10;\n}\n\n.mu-table-body-wrapper {\n  flex: 1;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.mu-table-sort-icon {\n  display: inline-block;\n  vertical-align: sub;\n  width: 16px;\n  height: 16px;\n  font-size: 16px;\n  fill: currentColor;\n  opacity: 0;\n  transition: .3s @easeOutFunction;\n}\n\n.mu-checkbox-col {\n  .mu-checkbox {\n    vertical-align: middle;\n  }\n}\n\n.mu-table-expand-row {\n  tr& {\n    height: 0;\n  }\n  td {\n    padding: 0;\n    height: 0;\n    border: none;\n    min-height: 0;\n    &.is-expand {\n      border-bottom: 1px solid @borderColor;\n    }\n  }\n}\n"
  },
  {
    "path": "src/styles/components/date-input.less",
    "content": "@import \"../import.less\";\n\n.mu-picker-dialog {\n  max-width: 100%;\n  .mu-dialog-body {\n    padding: 0;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/dialog.less",
    "content": "@import \"../import.less\";\n.mu-dialog-wrapper {\n  position: fixed;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.mu-dialog {\n  padding: 0;\n  max-width: 75%;\n  background-color: @dialogBackgroundColor;\n  border-radius: 2px;\n  font-size: 16px;\n  outline: none;\n  .depth(8);\n}\n\n.mu-dialog-scrollable {\n  .mu-dialog-body {\n    overflow-x: hidden;\n    overflow-y: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.mu-dialog-fullscreen {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  max-width: 100% !important;\n  width: 100% !important;\n  height: 100% !important;\n  max-height: 100% !important;\n  border-radius: 0;\n  .mu-dialog-body {\n    padding: 0;\n  }\n}\n\n.mu-dialog-title {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 24px 24px 20px;\n  margin: 0;\n  font-size: 22px;\n  font-weight: normal;\n  line-height: 32px;\n  color: @textColor;\n  + .mu-dialog-body{\n    padding-top: 0;\n  }\n}\n.mu-dialog-body {\n  padding: 24px 24px 20px;\n  color: fade(@textColor, 60%);\n}\n\n.mu-dialog-actions {\n  min-height: 48px;\n  padding: 8px;\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  .mu-raised-button + .mu-raised-button{\n    margin-left: 10px;\n  }\n}\n\n.mu-dialog-transition-enter-active,\n.mu-dialog-transition-leave-active {\n  transition: opacity .45s @easeOutFunction;\n  .mu-dialog {\n    &.mu-slide-top,\n    &.mu-slide-bottom,\n    &.mu-slide-left,\n    &.mu-slide-right,\n    &.mu-scale{\n      transition: transform .45s @easeOutFunction\n    }\n  }\n}\n\n.mu-dialog-transition-enter,\n.mu-dialog-transition-leave-active {\n  opacity: 0;\n}\n\n.mu-dialog-transition-enter,\n.mu-dialog-transition-leave-active {\n  .mu-dialog {\n    backface-visibility: hidden;\n    &.mu-slide-top {\n      transform: translate3d(0, -100%, 0);\n    }\n    &.mu-slide-bottom {\n      transform: translate3d(0, 100%, 0);\n    }\n    &.mu-slide-right {\n      transform: translate3d(100%, 0, 0);\n    }\n    &.mu-slide-left {\n      transform: translate3d(-100%, 0, 0);\n    }\n    &.mu-scale {\n      transform: scale(0.6);\n    }\n  }\n}\n"
  },
  {
    "path": "src/styles/components/divider.less",
    "content": "@import \"../import.less\";\n.mu-divider {\n  margin: 0;\n  height: 1px;\n  border: none;\n  background-color: @borderColor;\n  width: 100%;\n  &.inset{\n    margin-left: 72px;\n  }\n  &.shallow-inset{\n    margin-left: 16px;\n  }\n  html.pixel-ratio-2 & {\n    .transform(scaleY(0.5));\n  }\n  html.pixel-ratio-3 & {\n    .transform(scaleY(0.33));\n  }\n}\n"
  },
  {
    "path": "src/styles/components/drawer.less",
    "content": "@import \"../import.less\";\n.mu-drawer {\n  width: 256px;\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  background-color: @dialogBackgroundColor;\n  .scrollable();\n  .no-scrollbar();\n  transition-property: transform, visibility;\n  transition-duration: 0.45s;\n  transform: translate3d(-100%, 0, 0);\n  border-radius: 0;\n  left: 0;\n  visibility: hidden;\n  z-index: 200;\n  &.is-right {\n    right: 0;\n    left: auto;\n    transform: translate3d(100%, 0, 0);\n  }\n  &.is-open {\n    transform: translate3d(0, 0, 0);\n    visibility: visible;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/elevation.less",
    "content": "@import '../import.less';\n.mu-elevation-0 {\n  .depth(0);\n}\n.mu-elevation-1 {\n  .depth(1);\n}\n.mu-elevation-2 {\n  .depth(2);\n}\n.mu-elevation-3 {\n  .depth(3);\n}\n.mu-elevation-4 {\n  .depth(4);\n}\n.mu-elevation-5 {\n  .depth(5);\n}\n.mu-elevation-6 {\n  .depth(6);\n}\n.mu-elevation-7 {\n  .depth(7);\n}\n.mu-elevation-8 {\n  .depth(8);\n}\n.mu-elevation-9 {\n  .depth(9);\n}\n.mu-elevation-10 {\n  .depth(10);\n}\n.mu-elevation-11 {\n  .depth(11);\n}\n.mu-elevation-12 {\n  .depth(12);\n}\n.mu-elevation-13 {\n  .depth(13);\n}\n.mu-elevation-14 {\n  .depth(14);\n}\n.mu-elevation-15 {\n  .depth(15);\n}\n.mu-elevation-16 {\n  .depth(16);\n}\n.mu-elevation-17 {\n  .depth(17);\n}\n.mu-elevation-18 {\n  .depth(18);\n}\n.mu-elevation-19 {\n  .depth(19);\n}\n.mu-elevation-20 {\n  .depth(20);\n}\n.mu-elevation-21 {\n  .depth(21);\n}\n.mu-elevation-22 {\n  .depth(22);\n}\n.mu-elevation-23 {\n  .depth(23);\n}\n.mu-elevation-24 {\n  .depth(24);\n}\n"
  },
  {
    "path": "src/styles/components/expand-transition.less",
    "content": "@import '../import.less';\n.mu-expand-enter-active,\n.mu-expand-leave-active {\n  transition: all .45s @easeOutFunction;\n  backface-visibility: hidden;\n  transform: translate3d(0, 0, 0);\n}\n"
  },
  {
    "path": "src/styles/components/expansion-panel.less",
    "content": "@import \"../import.less\";\n\n.mu-expansion-panel {\n  color: @textColor;\n  &:first-child {\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px;\n  }\n  &:last-child {\n    border-bottom-left-radius: 2px;\n    border-bottom-right-radius: 2px;\n  }\n  border-top: 1px solid @borderColor;\n  &:first-child {\n    border-top: none;\n  }\n}\n\n.mu-expansion-panel__expand {\n  margin: 16px 0;\n  border-top: none;\n  + .mu-expansion-panel  {\n    border-top: none;\n  }\n  &:first-child {\n    margin-top: 0;\n  }\n  &:last-child {\n    margin-bottom: 0;\n  }\n}\n\n.mu-expansion-panel-header {\n  display: flex;\n  align-items: center;\n  min-height: 48px;\n  padding: 0 24px;\n  font-size: 15px;\n  cursor: pointer;\n  transition: min-height 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n  .mu-expansion-panel__expand & {\n    min-height: 64px;\n  }\n}\n\n.mu-expansion-toggle-btn.mu-button {\n  margin-left: auto;\n  margin-right: -12px;\n  color: @secondaryTextColor;\n  transform: transform 150ms cubic-bezier(0.4, 0, 0.2, 1);\n  svg {\n    width: 24px;\n    height: 24px;\n    fill: currentColor;\n    flex-shrink: 0;\n  }\n  .mu-expansion-panel__expand & {\n    transform: rotate(180deg);\n  }\n}\n\n.mu-expansion-panel-content {\n  padding: 8px 24px 24px;\n}\n\n.mu-expansion-panel-actions {\n  display: flex;\n  justify-content: flex-end;\n  padding: 16px 8px;\n  border-top: 1px solid @borderColor;\n  .mu-button + .mu-button{\n    margin-left: 8px;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/focus-ripple.less",
    "content": "@import \"../import.less\";\n.mu-focus-ripple-wrapper{\n  height: 100%;\n  width: 100%;\n  position: absolute;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n}\n\n.mu-focus-ripple{\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  border-radius: 50%;\n  opacity: 0.16;\n  background-color: currentColor;\n  animation: mu-pulsate 750ms @easeInOutFunction;\n  animation-iteration-count: infinite;\n  animation-direction: alternate;\n}\n\n@keyframes mu-pulsate {\n  0% {\n    transform: scale(0.72);\n  }\n  100% {\n    transform: scale(0.85);\n  }\n}\n"
  },
  {
    "path": "src/styles/components/form.less",
    "content": "@import \"../import.less\";\n.mu-form {\n  width: 100%;\n}\n\n.mu-form__inline {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  .mu-form-item {\n    min-width: 256px;\n    margin-right: 16px;\n  }\n}\n\n.mu-form-item {\n  display: flex;\n  flex-direction: column;\n  min-height: 48px;\n  position: relative;\n  color: @secondaryTextColor;\n  margin-bottom: 16px;\n  padding-bottom: 12px;\n  position: relative;\n  .mu-input {\n    padding: 0;\n    margin-bottom: 0;\n    width: 100%;\n  }\n  .mu-input-content {\n    padding-top: 0;\n  }\n  .mu-input {\n    min-height: auto;\n  }\n  .mu-slider {\n    margin-bottom: 0;\n  }\n  .mu-checkbox,\n  .mu-radio,\n  .mu-switch {\n    margin-right: 16px;\n    &:last-child {\n      margin-right: 0;\n    }\n  }\n  .mu-button {\n    margin: 6px 8px;\n  }\n}\n\n.mu-form-item__focus {\n  color: @primaryColor;\n}\n\n.mu-form-item__error {\n  color: @errorColor;\n}\n\n.mu-form-item__has-label {\n  min-height: 72px;\n}\n\n.mu-form-item__has-icon {\n  padding-left: 56px;\n}\n\n.mu-form-item__float-label {\n  padding-top: 28px;\n  .mu-form-item-label {\n    transition: all .45s @easeOutFunction;\n    position: absolute;\n    top: 2px;\n    transform: translate3d(0, 0, 0);\n    &.is-float {\n      transform: translate3d(0, 28px,0);\n      font-size: 16px;\n    }\n  }\n}\n\n.mu-form-item__label-left,\n.mu-form-item__label-right {\n  flex-direction: row;\n  min-height: 48px;\n  padding-top: 4px;\n  .mu-form-item-label {\n    line-height: 32px;\n    padding-right: 16px;\n    flex-shrink: 0;\n  }\n  .mu-form-item-content {\n    flex: 1;\n    align-items: flex-start;\n    > *:not(.mu-input) {\n      margin-top: 4px;\n    }\n  }\n}\n.mu-form-item__label-right .mu-form-item-label {\n  text-align: right;\n}\n\n.mu-form-item-label {\n  font-size: 14px;\n  line-height: 28px;\n}\n\n.mu-form-item-icon {\n  position: absolute;\n  left: 16px;\n  top: 8px;\n  .mu-form-item__has-label & {\n    top: 32px;\n  }\n}\n.mu-form-item-content {\n  min-height: 32px;\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.mu-form-item-help {\n  position: absolute;\n  font-size: 12px;\n  line-height: 12px;\n  bottom: -4px;\n  left: 0;\n  color: @secondaryTextColor;\n  .mu-form-item__error & {\n    color: @errorColor;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/grid-list.less",
    "content": "@import '../import.less';\n\n.mu-grid-list {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.mu-grid-tile-wrapper {\n  flex-shrink: 0;\n}\n.mu-grid-tile {\n  position: relative;\n  display: block;\n  height: 100%;\n  overflow: hidden;\n  > img {\n    height: 100%;\n    transform: translateX(-50%);\n    position: relative;\n    left: 50%;\n  }\n}\n\n.mu-grid-tile-titlebar{\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 48px;\n  background-color: rgba(0, 0, 0, 0.4);\n  display: flex;\n  align-items: center;\n\n  .mu-grid-tile.multiline & {\n    height: 68px;\n  }\n\n  .mu-grid-tile.is-top & {\n    bottom: auto;\n    top: 0;\n  }\n\n}\n\n.mu-grid-tile-title-container{\n  margin-left: 16px;\n  margin-right: 0;\n  color: @alternateTextColor;\n  flex: 1;\n  overflow: hidden;\n  .mu-grid-tile.action-left & {\n    margin-right: 16px;\n    margin-left: 0;\n  }\n}\n\n.mu-grid-tile-action {\n  order: 1;\n  .mu-grid-tile.action-left & {\n    order: -1;\n  }\n  .mu-icon {\n    color: @alternateTextColor;\n  }\n}\n\n.mu-grid-tile-title {\n  font-size: 16px;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  word-wrap: break-word;\n}\n\n.mu-grid-tile-subtitle {\n  font-size: 12px;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  word-wrap: break-word;\n}\n"
  },
  {
    "path": "src/styles/components/grid.less",
    "content": ".row {\n  display: flex;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  > [class*='col-'] {\n    box-sizing: border-box;\n  }\n}\n@cols: 5, 10, 15, 20, 25, 30, 100/3, 35, 40, 45, 50, 55, 60, 65, 100 * (2/3), 70,\n  75, 80, 85, 90, 95, 100;\n\n@media all and (max-width: 600px) {\n  .row {\n    .col-auto {\n      width: 100%;\n    }\n    .-(@i: length(@cols)) when (@i > 0) {\n      @divider: e(extract(@cols, @i));\n      @className: `Math.floor(@{divider}) `;\n      @n: `100/parseFloat(@{divider}) `;\n      @n-1: @n - 1;\n      .col-@{className} {\n        width: ~'@{divider}%';\n        width: ~'-webkit-calc((100% - 16px*@{n-1}) / @{n})';\n        width: ~'calc((100% - 16px*@{n-1}) / @{n})';\n      }\n      &.no-gutter {\n        .col-@{className} {\n          width: ~'@{divider}%';\n        }\n      }\n      .-((@i - 1));\n    }\n    .-;\n    .--(@j: 1) when (@j < length(@cols)) {\n      @divider: e(extract(@cols, @j));\n      @className: `Math.floor(@{divider}) `;\n      .col-auto:nth-last-child(@{j}),\n      .col-auto:nth-last-child(@{j}) ~ .col-auto {\n        @j-1: @j - 1;\n        width: 100% / @j;\n        width: ~'-webkit-calc((100% - 16px*@{j-1}) / @{j})';\n        width: ~'calc((100% - 16px*@{j-1}) / @{j})';\n      }\n      &.no-gutter {\n        .col-auto:nth-last-child(@{j}),\n        .col-auto:nth-last-child(@{j}) ~ .col-auto {\n          width: 100% / @j;\n        }\n      }\n      .--((@j + 1));\n    }\n    .--;\n  }\n}\n\n@media all and (max-width: 992px) and (min-width: 601px) {\n  .row {\n    .-(@i: length(@cols)) when (@i > 0) {\n      @divider: e(extract(@cols, @i));\n      @className: `Math.floor(@{divider}) `;\n      @n: `100/parseFloat(@{divider}) `;\n      @n-1: @n - 1;\n      .tablet-@{className} {\n        width: ~'@{divider}%';\n        width: ~'-webkit-calc((100% - 16px*@{n-1}) / @{n})';\n        width: ~'calc((100% - 16px*@{n-1}) / @{n})';\n      }\n      &.no-gutter {\n        .tablet-@{className} {\n          width: ~'@{divider}%';\n        }\n      }\n      .-((@i - 1));\n    }\n    .-;\n    .--(@j: 1) when (@j < length(@cols)) {\n      .tablet-auto:nth-last-child(@{j}),\n      .tablet-auto:nth-last-child(@{j}) ~ .col-auto {\n        @j-1: @j - 1;\n        width: 100% / @j;\n        width: ~'-webkit-calc((100% - 16px*@{j-1}) / @{j})';\n        width: ~'calc((100% - 16px*@{j-1}) / @{j})';\n      }\n      &.no-gutter {\n        .tablet-auto:nth-last-child(@{j}),\n        .tablet-auto:nth-last-child(@{j}) ~ .tablet-auto {\n          width: 100% / @j;\n        }\n      }\n      .--((@j + 1));\n    }\n    .--;\n  }\n}\n\n@media all and (min-width: 993px) {\n  .row {\n    .-(@i: length(@cols)) when (@i > 0) {\n      @divider: e(extract(@cols, @i));\n      @className: `Math.floor(@{divider}) `;\n      @n: `100/parseFloat(@{divider}) `;\n      @n-1: @n - 1;\n      .desktop-@{className} {\n        width: ~'@{divider}%';\n        width: ~'-webkit-calc((100% - 16px*@{n-1}) / @{n})';\n        width: ~'calc((100% - 16px*@{n-1}) / @{n})';\n      }\n      &.no-gutter {\n        .desktop-@{className} {\n          width: ~'@{divider}%';\n        }\n      }\n      .-((@i - 1));\n    }\n    .-;\n    .--(@j: 1) when (@j < length(@cols)) {\n      .desktop-auto:nth-last-child(@{j}),\n      .desktop-auto:nth-last-child(@{j}) ~ .col-auto {\n        @j-1: @j - 1;\n        width: 100% / @j;\n        width: ~'-webkit-calc((100% - 16px*@{j-1}) / @{j})';\n        width: ~'calc((100% - 16px*@{j-1}) / @{j})';\n      }\n      &.no-gutter {\n        .desktop-auto:nth-last-child(@{j}),\n        .desktop-auto:nth-last-child(@{j}) ~ .desktop-auto {\n          width: 100% / @j;\n        }\n      }\n      .--((@j + 1));\n    }\n    .--;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/input.less",
    "content": "@import \"../import.less\";\n.mu-input {\n  font-size: 16px;\n  width: 256px;\n  min-height: 48px;\n  display: inline-block;\n  position: relative;\n  color: @secondaryTextColor;\n  margin-bottom: 16px;\n  padding-bottom: 12px;\n  padding-top: 4px;\n  &.has-label {\n    padding-top: 28px;\n    padding-bottom: 12px;\n  }\n  &.is-solo {\n    padding-top: 8px;\n    padding-bottom: 8px;\n  }\n  &.full-width {\n    width: 100%;\n  }\n  &.has-icon {\n    padding-left: 56px;\n  }\n  &.has-label{\n    min-height: 72px;\n  }\n  &.is-solo {\n    margin-bottom: 0;\n  }\n}\n\n.mu-input__focus {\n  color: @primaryColor;\n}\n\n.mu-input__error {\n  color: @errorColor;\n}\n\n.mu-input-icon {\n  position: absolute;\n  left: 16px;\n  top: 8px;\n  .mu-input.has-label & {\n    top: 32px;\n  }\n  .mu-input.is-solo & {\n    top: 12px;\n  }\n}\n\n.mu-input-content{\n  height: 100%;\n  position: relative;\n  .mu-input.disabled &{\n    color: @disabledColor;\n    cursor: not-allowed;\n  }\n}\n\n.mu-input-help {\n  position: absolute;\n  font-size: 12px;\n  line-height: 12px;\n  bottom: -16px;\n  color: @secondaryTextColor;\n  display: flex;\n  justify-content: space-between;\n  left: 0;\n  right: 0;\n  .mu-input__error & {\n    color: @errorColor;\n  }\n  .mu-input.disabled &{\n    color: inherit;\n  }\n}\n\n.mu-input-action-icon {\n  .flex-shrink(0);\n  padding: 0 6px;\n  cursor: pointer;\n}\n.mu-input-suffix-text {\n  padding-left: 4px;\n}\n.mu-input-prefix-text {\n  padding-right: 4px;\n}\n.mu-input-suffix-text,\n.mu-input-prefix-text {\n  color: @secondaryTextColor;\n  white-space: nowrap;\n  .flex-shrink(0);\n}\n\n.mu-input-label {\n  line-height: 20px;\n  transition: all .45s @easeOutFunction;\n  z-index: 1;\n  cursor: text;\n  transform: translate3d(0, 0, 0) scale(0.75);\n  transform-origin: left top;\n  user-select: none;\n  pointer-events: none;\n  backface-visibility: hidden;\n  .mu-input.has-label & {\n    top: 8px;\n    position: absolute;\n  }\n  .mu-input.has-label &.float {\n    transform: translate3d(0, 28px, 0) scale(1);\n    color: @disabledColor;\n  }\n}\n\n.mu-input-line {\n  margin: 0;\n  height: 1px;\n  border: none;\n  background-color: @borderColor;\n  left: 0;\n  right: 0;\n  bottom: -1px;\n  position: absolute;\n  &.disabled {\n    height: auto;\n    background-color: transparent;\n    border-bottom: 2px dotted @disabledColor;\n  }\n  .mu-input__error & {\n    background-color: currentColor;\n  }\n}\n\n.mu-input-focus-line{\n  margin: 0;\n  height: 2px;\n  border: none;\n  background-color: currentColor;\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: -1px;\n  transform: scaleX(0);\n  transition: transform .45s @easeOutFunction;\n  &.focus {\n    transform: scaleX(1);\n  }\n}\n"
  },
  {
    "path": "src/styles/components/list.less",
    "content": "@import '../import.less';\n\n.mu-list {\n  padding: 8px 0;\n  width: 100%;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: visible;\n  margin: 0;\n  display: block;\n  > li {\n    display: block;\n  }\n  .mu-sub-header:first-child{\n    margin-top: -8px;\n  }\n  .mu-list {\n    padding: 0;\n  }\n}\n\n.mu-item-wrapper {\n  display: block;\n  color: inherit;\n  position: relative;\n  outline: none;\n  cursor: pointer;\n  &.hover {\n    background-color: fade(@textColor, 10%);\n  }\n  &.disabled{\n    cursor: default;\n  }\n}\n.mu-list-dense {\n  .mu-item {\n    height: 36px;\n  }\n  .mu-icon {\n    font-size: 22px;\n  }\n  .mu-item-title {\n    font-size: 14px;\n  }\n}\n.mu-item {\n  height: 48px;\n  display: flex;\n  align-items: center;\n  padding: 0 16px;\n  color: @textColor;\n  &.has-avatar {\n    height: 56px;\n  }\n  .mu-list-two-line & {\n    height: 72px;\n  }\n  .mu-list-three-line & {\n    height: 88px;\n  }\n  &.is-selected {\n    color: @primaryColor;\n  }\n  &.mu-icon-left {\n    margin-right: 16px;\n  }\n}\n.mu-item-action {\n  min-width: 56px;\n  display: flex;\n  height: 100%;\n  align-items: center;\n  color: @secondaryTextColor;\n  &:first-child .mu-icon-button {\n    margin-left: -12px;\n  }\n  &:last-child .mu-icon-button {\n    margin-right: -12px;\n  }\n  &.is-more {\n    flex-direction: column;\n    justify-content: space-between;\n    align-items: flex-end;\n    padding-top: 8px;\n    padding-bottom: 8px;\n  }\n}\n.mu-list-three-line .mu-item-action .mu-avatar {\n  margin-top: -18px;\n}\n\n.mu-item-title,\n.mu-item-content {\n  flex: 1 1 auto;\n  text-align: left;\n  min-width: 1px;\n  + .mu-item-action:not(.is-more) {\n    justify-content: flex-end;\n  }\n}\n\n.mu-item-title {\n  font-size: 16px;\n  height: 24px;\n  line-height: 24px;\n  width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  word-wrap: break-word;\n}\n\n.mu-item-sub-title {\n  width: 100%;\n  font-size: 14px;\n  line-height: 1.5;\n  color: @secondaryTextColor;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  word-wrap: break-word;\n  .mu-list.mu-list-three-line & {\n    white-space: normal;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    display: -webkit-box;\n  }\n}\n\n.mu-item-after-text {\n  color: @secondaryTextColor;\n  font-size: 12px;\n}\n"
  },
  {
    "path": "src/styles/components/load-more.less",
    "content": "@import '../import.less';\n.mu-load-more {\n  position: relative;\n  overflow: hidden;\n  user-select: none;\n}\n.mu-refresh-control{\n  display: flex;\n  margin: 0 auto;\n  width: 40px;\n  height: 40px;\n  color: @primaryColor;\n  align-items: center;\n  justify-content: center;\n  background-color: #FFF;\n  border-radius: 50%;\n  .depth(2);\n  position: absolute;\n  left: 50%;\n  margin-left: -18px;\n  margin-top: 24px;\n  z-index: 90;\n  .mu-icon {\n    display: inline-block;\n    vertical-align: middle;\n  }\n}\n\n.mu-refresh-svg-icon {\n  display: inline-block;\n  width: 28px;\n  height: 28px;\n  fill: currentColor;\n  user-select: none;\n}\n.mu-refresh-control-animate{\n   transition: all 0.45s ease;\n}\n.mu-refresh-control-hide{\n  opacity: 1;\n  transform: translate3d(0, -68px, 0);\n}\n.mu-refresh-control-noshow{\n  opacity: 0;\n  transform: scale(0.01);\n}\n.mu-refresh-control-refreshing {\n  transform: scale(1);\n  opacity: 1;\n}\n\n.mu-infinite-scroll{\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  height: 48px;\n  width: 100%;\n}\n.mu-infinite-scroll-text{\n  margin-left: 16px;\n  font-size: 16px;\n}\n"
  },
  {
    "path": "src/styles/components/menu.less",
    "content": "@import \"../import.less\";\n.mu-menu {\n  display: inline-block;\n  position: relative;\n  vertical-align: middle;\n}\n\n.mu-menu-toggle-icon {\n  transition: transform .3s cubic-bezier(.23,1,.32,1);\n  .mu-menu__open & {\n    transform: rotate(180deg);\n  }\n}\n\n.mu-menu-activator {\n  align-items: center;\n  cursor: pointer;\n  height: 100%;\n  position: relative;\n  input[readonly] {\n    cursor: pointer;\n  }\n  .mu-menu.is-disabled & {\n    cursor: default;\n    pointer-events: none;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/overlay.less",
    "content": ".mu-overlay {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  background-color: #000;\n  opacity: .4;\n  z-index: 1000;\n}\n"
  },
  {
    "path": "src/styles/components/pagination.less",
    "content": "@import \"../import.less\";\n.mu-pagination {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  color: @textColor;\n  font-size: 14px;\n  > ul {\n    display: flex;\n    list-style: 0;\n    margin: 0;\n    padding: 0;\n    li {\n      display: inline-block;\n      margin: 0 4px;\n    }\n  }\n}\n\n.mu-pagination-svg-icon {\n  width: 20px;\n  height: 20px;\n  fill: currentColor;\n}\n\n.mu-pagination-btn.mu-button {\n  height: 28px;\n  padding: 0;\n  width: 28px;\n  min-width: auto;\n  .mu-pagination__raised & {\n    background-color: @alternateTextColor;\n    .depth(2);\n  }\n  .mu-pagination__circle & {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n  }\n  &:first-child {\n    margin-right: 4px;\n  }\n  &:last-child {\n    margin-left: 4px;\n  }\n  .mu-button-wrapper {\n    padding: 0;\n  }\n}\n\n.mu-pagination-item.mu-button {\n  min-width: 32px;\n  height: 32px;\n  padding: 0 8px;\n  .mu-pagination__raised & {\n    background-color: @alternateTextColor;\n    .depth(2);\n  }\n  .mu-pagination__circle & {\n    width: 32px;\n    border-radius: 50%;\n  }\n  .mu-button-wrapper {\n    padding: 0;\n  }\n  &.is-current {\n    background-color: @primaryColor;\n    color: @alternateTextColor;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/paper.less",
    "content": "@import '../import.less';\n\n.mu-paper {\n  transition: all .45s @easeOutFunction;\n  color: @textColor;\n  background-color: @dialogBackgroundColor;\n}\n.mu-paper-round {\n  border-radius: 2px;\n}\n.mu-paper-circle {\n  border-radius: 50%;\n}\n"
  },
  {
    "path": "src/styles/components/picker.less",
    "content": "@import \"../import.less\";\n.mu-picker {\n  color: @primaryColor;\n  background-color: @dialogBackgroundColor;\n  user-select: none;\n  width: 310px;\n}\n\n.mu-timepicker {\n  width: 280px;\n}\n\n.mu-datetime-picker {\n  .mu-tabs {\n    .depth(1);\n  }\n  .mu-picker-container {\n    position: relative;\n  }\n  .mu-fade-transition-leave-active {\n    position: absolute;\n    left: 0;\n    right: 0;\n  }\n}\n\n.mu-picker-landspace {\n  width: 479px;\n  display: flex;\n  justify-content: space-between;\n}\n\n.mu-picker-container {\n  padding-bottom: 8px;\n  flex: 1;\n}\n\n.mu-picker-display {\n  display: flex;\n  align-items: flex-start;\n  flex-direction: column;\n  justify-content: center;\n  height: 100px;\n  background-color: currentColor;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px;\n  border-bottom-left-radius: 0;\n  padding-left: 16px;\n  padding-right: 16px;\n  .mu-picker-landspace & {\n    width: 165px;\n    height: auto;\n    padding-top: 16px;\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 2px;\n    position: relative;\n  }\n}\n\n.mu-date-display {\n  font-weight: 700;\n}\n@media (min-width: 600px){\n  .mu-picker-display {\n    padding-left: 24px;\n    padding-right: 24px;\n  }\n  .mu-picker-landspace .mu-picker-display {\n    padding-top: 24px;\n  }\n}\n.mu-time-display {\n  align-items: center;\n}\n\n.mu-date-time-display {\n  flex-direction: row;\n  justify-content: space-around;\n  align-items: center;\n  .mu-time-display-text {\n    font-size: 45px;\n    line-height: 45px;\n  }\n  .mu-date-display-monthday {\n    font-size: 34px;\n    line-height: 41px;\n    height: 41px;\n  }\n  .mu-time-display-time {\n    margin: 0 8px;\n  }\n  .mu-date-display,\n  .mu-time-display {\n    height: 65px;\n  }\n  .mu-time-display-text {\n    height: 100%;\n    align-items: flex-end;\n    margin: 0;\n  }\n  .mu-time-display-affix {\n    height: 45px;\n    padding-top: 7px;\n  }\n  .mu-date-display-year,\n  .mu-date-display-monthday,\n  .mu-time-display-clickable {\n    opacity: .7;\n    &.active {\n      opacity: 1;\n    }\n  }\n}\n.mu-date-display-year {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  width: 100%;\n  font-size: 16px;\n  font-weight: 500;\n  line-height: 16px;\n  height: 16px;\n  opacity: 0.7;\n  transition: all .45s @easeOutFunction;\n  margin-bottom: 10px;\n  color: @alternateTextColor;\n  .mu-date-display.selected-year & {\n    opacity: 1;\n  }\n}\n\n.mu-date-display-year-title {\n  cursor: pointer;\n  .mu-date-display-year.disabled & {\n    cursor: not-allowed;\n  }\n  .mu-date-display.selected-year {\n    cursor: default;\n  }\n}\n\n.mu-date-display-monthday {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  font-size: 36px;\n  line-height: 36px;\n  height: 38px;\n  transition: all .45s @easeOutFunction;\n  width: 100%;\n  font-weight: 500;\n  color: @alternateTextColor;\n  .mu-date-display.selected-year & {\n    opacity: 0.7;\n  }\n  .mu-picker-landspace & {\n    height: 100%;\n  }\n}\n\n.mu-date-display-slideIn-wrapper {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  top: 0px;\n  left: 0px;\n}\n\n.mu-date-display-monthday-title {\n  cursor: default;\n  width: 100%;\n  display: block;\n  .mu-date-display.selected-year & {\n    cursor: pointer;\n  }\n}\n\n.mu-date-display-next-enter-active,\n.mu-date-display-next-leave-active,\n.mu-date-display-prev-enter-active,\n.mu-date-display-prev-leave-active {\n  transition: transform 450ms @easeOutFunction, opacity 450ms @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-date-display-next-enter {\n  transform: translate3d(0, -100%, 0);\n  opacity: 0;\n}\n\n.mu-date-display-next-leave-active {\n  transform: translate3d(0, 100%, 0);\n  opacity: 0;\n}\n\n.mu-date-display-prev-enter {\n  transform: translate3d(0, 100%, 0);\n  opacity: 0;\n}\n\n.mu-date-display-prev-leave-active {\n  transform: translate3d(0, -100%, 0);\n  opacity: 0;\n}\n\n.mu-time-display-text {\n  color: @alternateTextColor;\n  margin: 6px 0px;\n  line-height: 58px;\n  height: 58px;\n  font-size: 58px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  .mu-picker-landspace & {\n    margin: 0;\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    height: auto;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    font-size: 48px;\n  }\n}\n\n.mu-time-display-affix {\n  flex: 1 1;\n  position: relative;\n  line-height: 17px;\n  height: 17px;\n  font-size: 17px;\n  .mu-picker-landspace & {\n    flex: none;\n    height: auto;\n    display: flex;\n    flex-direction: column;\n  }\n}\n\n.mu-time-display-time {\n  margin: 0px 10px;\n  .mu-picker-landspace & {\n    margin-top: -28px;\n  }\n}\n\n.mu-time-display-clickable {\n  cursor: pointer;\n  &.inactive,\n  + span {\n    opacity: 0.7\n  }\n  .mu-picker-landspace & {\n    margin-top: 8px;\n  }\n}\n\n.mu-time-display-affix-top {\n  position: absolute;\n  top: -20px;\n  left: 0px;\n  .mu-picker-landspace & {\n    position: static;\n    order: -1;\n  }\n}\n\n.mu-datepicker-monthday-container {\n  display: flex;\n  align-content: space-between;\n  justify-content: space-between;\n  flex-direction: column;\n  font-size: 12px;\n  font-weight: 400;\n  padding: 0px 8px;\n  transition: all .45s @easeOutFunction;\n}\n\n.mu-datepicker-week {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  font-weight: 500;\n  height: 20px;\n  line-height: 15px;\n  opacity: 0.5;\n  text-align: center;\n  color: @textColor;\n}\n\n.mu-datepicker-week-day {\n  width: 42px;\n}\n\n.mu-datepicker-monthday {\n  position: relative;\n  overflow: hidden;\n  height: 214px;\n}\n\n.mu-datepicker-monthday-slide {\n  height: 100%;\n  width: 100%;\n}\n\n.mu-datepicker-slide-next-enter-active,\n.mu-datepicker-slide-next-leave-active,\n.mu-datepicker-slide-prev-enter-active,\n.mu-datepicker-slide-prev-leave-active {\n  transition: transform 450ms @easeOutFunction, opacity 450ms @easeOutFunction;\n  backface-visibility: hidden;\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n}\n\n.mu-datepicker-slide-next-enter {\n  transform: translate3d(100%, 0, 0);\n}\n\n.mu-datepicker-slide-next-leave-active {\n  transform: translate3d(-100%, 0, 0);\n  opacity: 0;\n}\n\n.mu-datepicker-slide-prev-enter {\n  transform: translate3d(-100%, 0, 0);\n}\n\n.mu-datepicker-slide-prev-leave-active {\n  transform: translate3d(100%, 0, 0);\n  opacity: 0;\n}\n\n.mu-datepicker-monthday-content {\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  font-weight: 400;\n  line-height: 2;\n  position: relative;\n  text-align: center;\n}\n\n.mu-datepicker-monthday-row {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-around;\n  height: 34px;\n  margin-bottom: 2px;\n}\n\n.mu-datepicker-month-container {\n  display: flex;\n  align-content: space-between;\n  justify-content: space-between;\n  flex-direction: column;\n  font-size: 12px;\n  font-weight: 400;\n  padding: 0px 8px;\n  transition: all .45s @easeOutFunction;\n}\n\n.mu-datepicker-month {\n  position: relative;\n  overflow: hidden;\n  height: 234px;\n}\n\n.mu-datepicker-month-content {\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  font-weight: 400;\n  line-height: 2;\n  position: relative;\n  text-align: center;\n}\n\n.mu-datepicker-month-row {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-around;\n  margin-bottom: 2px;\n}\n\n.mu-datepicker-toolbar {\n  display: flex;\n  justify-content: space-between;\n  height: 48px;\n}\n\n.mu-datepicker-tool-btn {\n  color: @textColor;\n}\n\n.mu-datepicker-toolbar-title-wrapper {\n  position: relative;\n  overflow: hidden;\n  height: 100%;\n  font-size: 14px;\n  font-weight: 500;\n  text-align: center;\n  width: 100%;\n}\n\n.mu-datepicker-toolbar-title {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  top: 0px;\n  left: 0px;\n  line-height: 48px;\n  color: @textColor;\n  &.clickable {\n    cursor: pointer;\n    &:hover {\n      color: currentColor;\n    }\n  }\n}\n\n.mu-datetime-picker-svg {\n  display: block;\n  fill: currentColor;\n  height: 24px;\n  width: 24px;\n  user-select: none;\n}\n\n.mu-datepicker-svg-icon {\n  display: block;\n  fill: currentColor;\n  height: 24px;\n  width: 24px;\n  user-select: none;\n  color: @textColor;\n}\n\n.mu-datepicker-year-container {\n  display: flex;\n  justify-content: space-between;\n  flex-direction: column;\n  margin-top: 10px;\n  width: 310px;\n  height: 272px;\n  overflow: hidden;\n}\n\n.mu-datepicker-year {\n  height: inherit;\n  line-height: 35px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  position: relative;\n}\n\n.mu-datepicker-year-list {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  min-height: 100%;\n}\n\n.mu-day-button {\n  display: inline-block;\n  background: none;\n  user-select: none;\n  outline: none;\n  text-decoration: none;\n  cursor: pointer;\n  margin: 0px;\n  padding: 4px 0px;\n  font-size: inherit;\n  font-weight: 400;\n  position: relative;\n  border: 10px;\n  width: 42px;\n  color: inherit;\n  &.disabled {\n    opacity: .4;\n    cursor: not-allowed;\n  }\n}\n\n.mu-day-empty {\n  font-weight: 400;\n  padding: 4px 0px;\n  position: relative;\n  width: 42px;\n}\n\n.mu-day-button-bg {\n  position: absolute;\n  top: 0;\n  left: 4px;\n  height: 34px;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  transform: scale(0);\n  transition: all .45s @easeOutFunction;\n  width: 34px;\n  .mu-day-button:hover:not(:disabled) &,\n  .mu-day-button.selected & {\n    transform: scale(1);\n  }\n  .mu-day-button:hover:not(:disabled) & {\n    opacity: 0.6;\n  }\n  .mu-day-button.selected & {\n    opacity: 1;\n  }\n}\n\n.mu-day-button-text {\n  font-weight: 400;\n  position: relative;\n  color: @textColor;\n  .mu-day-button.now & {\n    color: currentColor;\n  }\n  .mu-day-button:hover:not(:disabled) &,\n  .mu-day-button.selected & {\n    color: @alternateTextColor;\n  }\n}\n\n.mu-month-button {\n  display: inline-block;\n  background: none;\n  user-select: none;\n  outline: none;\n  text-decoration: none;\n  cursor: pointer;\n  margin: 0px;\n  font-size: inherit;\n  font-weight: 400;\n  position: relative;\n  border: 10px;\n  width: 84px;\n  height: 56px;\n  padding: 10px 0;\n  color: inherit;\n  &:disabled {\n    cursor: not-allowed;\n  }\n}\n.mu-month-button-bg {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 10px;\n  bottom: 10px;\n  background-color: currentColor;\n  border-radius: 2px;\n  opacity: 0;\n\n  .mu-month-button:hover & {\n    opacity: 0.6;\n  }\n  .mu-month-button.selected & {\n    opacity: 1;\n  }\n  .mu-month-button:disabled & {\n    opacity: 0;\n  }\n}\n.mu-month-button-text {\n  color: @textColor;\n  position: relative;\n  .mu-month-button:hover &,\n  .mu-month-button.selected & {\n    color: @alternateTextColor;\n  }\n  .mu-month-button:disabled & {\n    color: @disabledColor;\n  }\n}\n\n.mu-year-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  background: none;\n  cursor: pointer;\n  outline: none;\n  text-decoration: none;\n  margin: 0px auto;\n  padding: 0px;\n  font-size: 14px;\n  font-weight: inherit;\n  text-align: center;\n  line-height: inherit;\n  color: currentColor;\n  border: none;\n  height: 36px;\n  &:hover {\n    background-color: fade(@textColor, 10%);\n  }\n  &.selected {\n    height: 40px;\n    margin: 10px 0;\n  }\n}\n\n.mu-year-button-text {\n  align-self: center;\n  color: @textColor;\n  font-size: 16px;\n  line-height: 1.1;\n  font-weight: 400;\n  position: relative;\n  .mu-year-button.selected & {\n    color: currentColor;\n    font-size: 26px;\n    font-weight: 500;\n  }\n  .mu-year-button:hover & {\n    color: currentColor;\n  }\n}\n\n.mu-timepicker-clock {\n   height: 282px;\n   padding-left: 10px;\n   padding-right: 10px;\n   position: relative;\n}\n\n.mu-timepicker-circle {\n  position: absolute;\n  top: 12px;\n  width: 260px;\n  height: 260px;\n  border-radius: 100%;\n  background-color: fade(@darkBlack, 7%);\n  left: 50%;\n  margin-left: -130px;\n  .mu-picker-landspace & {\n    left: 50%;\n    margin-left: -130px;\n  }\n}\n\n.mu-timepicker-hours {\n  height: 100%;\n  width: 100%;\n  border-radius: 100%;\n  position: relative;\n  pointer-events: none;\n  box-sizing: border-box;\n}\n\n.mu-timepicker-hours-mask {\n  height: 100%;\n  width: 100%;\n  pointer-events: auto;\n}\n.mu-timepicker-minutes {\n  height: 100%;\n  width: 100%;\n  border-radius: 100%;\n  position: relative;\n  pointer-events: none;\n  box-sizing: border-box;\n}\n\n.mu-timepicker-minutes-mask {\n  height: 100%;\n  width: 100%;\n  pointer-events: auto;\n}\n\n.mu-timepicker-number {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  position: absolute;\n  top: 10px;\n  text-align: center;\n  font-size: 1.1em;\n  pointer-events: none;\n  border-radius: 100%;\n  box-sizing: border-box;\n  transform: translate(0px, 5px);\n  user-select: none;\n  color: @textColor;\n}\n.mu-timepicker-number__inner {\n  width: 28px;\n  height: 28px;\n  line-height: 28px;\n}\n.mu-timepicker-number__selected {\n  background-color: @primaryColor;\n  color: @alternateTextColor;\n}\n\n.mu-timepicker-pointer {\n  height: 40%;\n  background-color: currentColor;\n  width: 2px;\n  left: calc(50% - 1px);\n  position: absolute;\n  bottom: 50%;\n  transform-origin: center bottom 0px;\n  pointer-events: none;\n  &.inner {\n    height: 30%;\n  }\n}\n\n.mu-timepicker-pointer-mark {\n  box-sizing: content-box;\n  background-color: @alternateTextColor;\n  border: 4px solid currentColor;\n  width: 7px;\n  height: 7px;\n  position: absolute;\n  top: -5px;\n  left: -6px;\n  border-radius: 100%;\n  &.has-selected {\n    display: none;\n  }\n}\n\n.mu-timepicker-list {\n  display: flex;\n  justify-content: space-between;\n  margin-top: 10px;\n  height: 272px;\n  overflow: hidden;\n}\n\n.mu-timepicker-list-hours {\n  border-right: 1px solid @borderColor;\n}\n.mu-timepicker-list-hours,\n.mu-timepicker-list-minutes {\n  width: 50%;\n  flex-shrink: 0;\n  height: inherit;\n  line-height: 35px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  &:hover::-webkit-scrollbar {\n    display: block;\n  }\n  &::-webkit-scrollbar {\n      width: 2px;\n      display: none;\n  }\n  &::-webkit-scrollbar-track {\n      background: #E3E3E3;\n  }\n  &::-webkit-scrollbar-thumb {\n      background: #C1C1C1;\n      border-radius: 2px;\n  }\n}\n\n.mu-timepicker-hour-button,\n.mu-timepicker-minute-button {\n  position: relative;\n  display: block;\n  width: 100%;\n  background: none;\n  cursor: pointer;\n  outline: none;\n  text-decoration: none;\n  margin: 0px auto;\n  padding: 0px;\n  font-size: 14px;\n  font-weight: inherit;\n  text-align: center;\n  line-height: inherit;\n  color: @textColor;\n  border: none;\n  text-align: center;\n  height: 40px;\n  &:hover {\n    background-color: fade(@textColor, 10%);\n  }\n  &.is-active {\n    color: currentColor;\n    font-size: 26px;\n  }\n}\n\n.mu-picker-actions {\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n  margin: 0px;\n  max-height: 48px;\n  padding: 0px;\n  .mu-flat-button {\n    min-width: 64px;\n    margin: 4px 8px 0px 0px;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/popover.less",
    "content": "@import '../import.less';\n\n.mu-popover{\n  position: fixed;\n  background: @dialogBackgroundColor;\n  border-radius: 2px;\n  max-height: 100%;\n  max-width: 80%;\n  .scrollable();\n  .depth(8);\n  &.transition-bottom-start {\n    transform-origin: left top;\n  }\n  &.transition-bottom {\n    transform-origin: center top;\n    &.mu-popover-transition-enter,\n    &.mu-popover-transition-leave-active {\n      transform: scaleY(.5);\n    }\n  }\n  &.transition-bottom-end {\n    transform-origin: right top;\n  }\n  &.transition-top-start {\n    transform-origin: left bottom;\n  }\n  &.transition-top {\n    transform-origin: center bottom;\n    &.mu-popover-transition-enter,\n    &.mu-popover-transition-leave-active {\n      transform: scaleY(.5);\n    }\n  }\n  &.transition-top-end {\n    transform-origin: right bottom;\n  }\n  &.transition-left-start {\n    transform-origin: right top;\n  }\n  &.transition-left {\n    transform-origin: right center;\n  }\n  &.transition-left-end {\n    transform-origin: right bottom;\n  }\n  &.transition-right-start {\n    transform-origin: left top;\n  }\n  &.transition-right {\n    transform-origin: left center;\n  }\n  &.transition-right-end {\n    transform-origin: left bottom;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/progress.less",
    "content": "@import \"../import.less\";\n.mu-linear-progress{\n  position: relative;\n  height: 4px;\n  display: block;\n  width: 100%;\n  margin: 0px;\n  overflow: hidden;\n  &.mu-secondary-color {\n    background-color: transparent;\n    .mu-linear-progress-background,\n    .mu-linear-progress-indeterminate,\n    .mu-linear-progress-determinate {\n      background-color: @secondaryColor;\n    }\n  }\n  &.mu-success-color {\n    background-color: transparent;\n    .mu-linear-progress-background,\n    .mu-linear-progress-indeterminate,\n    .mu-linear-progress-determinate {\n      background-color: @successColor;\n    }\n  }\n  &.mu-warning-color {\n    background-color: transparent;\n    .mu-linear-progress-background,\n    .mu-linear-progress-indeterminate,\n    .mu-linear-progress-determinate {\n      background-color: @warningColor;\n    }\n  }\n  &.mu-info-color {\n    background-color: transparent;\n    .mu-linear-progress-background,\n    .mu-linear-progress-indeterminate,\n    .mu-linear-progress-determinate {\n      background-color: @infoColor;\n    }\n  }\n  &.mu-error-color {\n    background-color: transparent;\n    .mu-linear-progress-background,\n    .mu-linear-progress-indeterminate,\n    .mu-linear-progress-determinate {\n      background-color: @errorColor;\n    }\n  }\n  &.mu-primary-color {\n    background-color: transparent;\n  }\n}\n.mu-linear-progress-background {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: @primaryColor;\n  opacity: 0.3;\n}\n\n.mu-linear-progress-indeterminate{\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 40%;\n  background-color: @primaryColor;\n  animation: mu-linear-progress-animate 840ms @easeInOutFunction;\n  animation-iteration-count: infinite;\n}\n\n.mu-linear-progress-determinate{\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  background-color: @primaryColor;\n  transition: width .3s linear;\n}\n\n@keyframes mu-linear-progress-animate {\n  0% {\n    left: -40%;\n  }\n  100% {\n    left: 100%;\n  }\n}\n\n\n.mu-focus-ripple{\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  border-radius: 50%;\n  opacity: 0.16;\n  background-color: currentColor;\n  animation: mu-pulsate 750ms @easeInOutFunction;\n  animation-iteration-count: infinite;\n  animation-direction: alternate;\n}\n\n@keyframes mu-pulsate {\n  0% {\n    transform: scale(0.72);\n  }\n  100% {\n    transform: scale(0.85);\n  }\n}\n\n\n.mu-circle-wrapper {\n  display: inline-block;\n  position: relative;\n  width: 48px;\n  height: 48px;\n\n  &.active{\n    -webkit-animation: container-rotate 1568ms linear infinite;\n    animation: container-rotate 1568ms linear infinite;\n  }\n  .mu-circle {\n    border-radius: 50%;\n  }\n\n  .left {\n    float: left !important;\n  }\n\n  .right {\n    float: right !important;\n  }\n\n}\n\n.mu-circle-spinner {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  border-color: @primaryColor;\n  opacity: 1;\n  -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n  animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n  &.mu-secondary-color {\n    border-color: @secondaryColor;\n    background-color: transparent;\n  }\n  &.mu-success-color {\n    border-color: @successColor;\n    background-color: transparent;\n  }\n  &.mu-warning-color {\n    border-color: @warningColor;\n    background-color: transparent;\n  }\n  &.mu-info-color {\n    border-color: @infoColor;\n    background-color: transparent;\n  }\n  &.mu-error-color {\n    border-color: @errorColor;\n    background-color: transparent;\n  }\n  &.mu-primary-color {\n    background-color: transparent;\n  }\n  &.mu-inverse {\n    color: inherit;\n  }\n}\n\n.mu-circle-clipper {\n  display: inline-block;\n  position: relative;\n  width: 50%;\n  height: 100%;\n  overflow: hidden;\n  border-color: inherit;\n}\n\n.mu-circle-gap-patch {\n  position: absolute;\n  top: 0;\n  left: 45%;\n  width: 10%;\n  height: 100%;\n  overflow: hidden;\n  border-color: inherit;\n}\n\n.mu-circle-gap-patch .mu-circle {\n  width: 1000%;\n  left: -450%;\n}\n\n.mu-circle-clipper .mu-circle {\n  width: 200%;\n  height: 100%;\n  border-width: 3px;\n  border-style: solid;\n  border-color: inherit;\n  border-bottom-color: transparent !important;\n  border-radius: 50%;\n  -webkit-animation: none;\n  animation: none;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.mu-circle-spinner.active .mu-circle-clipper.left .mu-circle {\n  -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n  animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.mu-circle-spinner.active .mu-circle-clipper.right .mu-circle {\n    -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n    animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.mu-circle-clipper.left .mu-circle {\n  left: 0;\n  border-right-color: transparent !important;\n  -webkit-transform: rotate(129deg);\n  transform: rotate(129deg);\n}\n\n.mu-circle-clipper.right .mu-circle {\n    left: -100%;\n    border-left-color: transparent !important;\n    -webkit-transform: rotate(-129deg);\n    transform: rotate(-129deg);\n}\n\n\n@-webkit-keyframes fill-unfill-rotate {\n  12.5% {\n    -webkit-transform: rotate(135deg);\n  }\n  25% {\n    -webkit-transform: rotate(270deg);\n  }\n  37.5% {\n    -webkit-transform: rotate(405deg);\n  }\n  50% {\n    -webkit-transform: rotate(540deg);\n  }\n  62.5% {\n    -webkit-transform: rotate(675deg);\n  }\n  75% {\n    -webkit-transform: rotate(810deg);\n  }\n  87.5% {\n    -webkit-transform: rotate(945deg);\n  }\n  to {\n    -webkit-transform: rotate(1080deg);\n  }\n}\n@keyframes fill-unfill-rotate {\n  12.5% {\n    transform: rotate(135deg);\n  }\n  25% {\n    transform: rotate(270deg);\n  }\n  37.5% {\n    transform: rotate(405deg);\n  }\n  50% {\n    transform: rotate(540deg);\n  }\n  62.5% {\n    transform: rotate(675deg);\n  }\n  75% {\n    transform: rotate(810deg);\n  }\n  87.5% {\n    transform: rotate(945deg);\n  }\n  to {\n    transform: rotate(1080deg);\n  }\n}\n@-webkit-keyframes left-spin {\n  from {\n    -webkit-transform: rotate(130deg);\n  }\n  50% {\n    -webkit-transform: rotate(-5deg);\n  }\n  to {\n    -webkit-transform: rotate(130deg);\n  }\n}\n@keyframes left-spin {\n  from {\n    transform: rotate(130deg);\n  }\n  50% {\n    transform: rotate(-5deg);\n  }\n  to {\n    transform: rotate(130deg);\n  }\n}\n\n@-webkit-keyframes right-spin {\n    from {\n        -webkit-transform: rotate(-130deg)\n    }\n    50% {\n        -webkit-transform: rotate(5deg)\n    }\n    to {\n        -webkit-transform: rotate(-130deg)\n    }\n}\n\n@keyframes right-spin {\n    from {\n        transform: rotate(-130deg)\n    }\n    50% {\n        transform: rotate(5deg)\n    }\n    to {\n        transform: rotate(-130deg)\n    }\n}\n\n\n@-webkit-keyframes container-rotate {\n  to {\n    -webkit-transform: rotate(360deg);\n  }\n}\n@keyframes container-rotate {\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.mu-circular-progress {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  &.mu-secondary-color {\n    background: transparent;\n    .mu-circular-progress-determinate-path {\n      stroke: @secondaryColor;\n    }\n  }\n  &.mu-success-color {\n    background: transparent;\n    .mu-circular-progress-determinate-path {\n      stroke: @successColor;\n    }\n  }\n  &.mu-warning-color {\n    background: transparent;\n    .mu-circular-progress-determinate-path {\n      stroke: @warningColor;\n    }\n  }\n  &.mu-info-color {\n    background: transparent;\n    .mu-circular-progress-determinate-path {\n      stroke: @infoColor;\n    }\n  }\n  &.mu-error-color {\n    background: transparent;\n    .mu-circular-progress-determinate-path {\n      stroke: @errorColor;\n    }\n  }\n  &.mu-primary-color {\n    background: transparent;\n  }\n  &.mu-inverse {\n    color: inherit;\n  }\n}\n\n.mu-circular-progress-determinate{\n  position: relative;\n}\n\n.mu-circular-progress-determinate-path{\n  stroke: @primaryColor;\n  stroke-linecap: round;\n  transition: all 0.3s linear;\n}\n\n"
  },
  {
    "path": "src/styles/components/radio.less",
    "content": "@import \"../import.less\";\n.mu-radio {\n  position: relative;\n  display: inline-block;\n  height: 24px;\n  line-height: 24px;\n  cursor: pointer;\n  user-select: none;\n  outline: none;\n  input[type=\"radio\"] {\n    display: none;\n  }\n  &.disabled  {\n    cursor: not-allowed;\n    color: @disabledColor;\n  }\n}\n\n\n.mu-radio-checked {\n  color: @primaryColor;\n  .mu-radio-icon-uncheck {\n    opacity: 0;\n    transform: scale(0);\n  }\n  .mu-radio-icon-checked {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n.mu-radio-wrapper{\n  display: flex;\n  width: 100%;\n  height: 24px;\n  align-items: center;\n  justify-content: space-between;\n}\n.mu-radio-icon{\n  width: 24px;\n  height: 24px;\n  vertical-align: middle;\n  position: relative;\n  margin-right: 8px;\n  .mu-radio.label-left &{\n    margin-right: 0;\n    margin-left: 8px;\n  }\n  .mu-radio.no-label &{\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n\n.mu-radio-label {\n  color: @textColor;\n  white-space: nowrap;\n  font-size: 16px;\n  .mu-radio.disabled & {\n    color: @disabledColor;\n  }\n}\n\n.mu-radio-svg-icon{\n  display: inline-block;\n  fill: currentColor;\n  height: 24px;\n  width: 24px;\n  user-select: none;\n}\n\n.mu-radio-icon-uncheck {\n  position: absolute;\n  left: 0;\n  top: 0;\n  opacity: 1;\n  transition: all 450ms @easeOutFunction;\n}\n\n.mu-radio-icon-checked {\n  position: absolute;\n  left: 0;\n  top: 0;\n  opacity: 0;\n  transform: scale(0);\n  transition: all 450ms @easeOutFunction;\n}\n\n.mu-radio-ripple-wrapper {\n  width: 48px;\n  height: 48px;\n  top: -12px;\n  left: -12px;\n  position: absolute;\n  .mu-radio.label-left & {\n    right: -12px;\n    left: auto;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/select.less",
    "content": "@import \"../import.less\";\n.mu-select {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  width: 100%;\n  outline: none;\n  cursor: pointer;\n  &.is-readonly,\n  &.is-disabled {\n    cursor: default;\n  }\n}\n\n.mu-select-content {\n  flex: 1;\n  color: @textColor;\n  width: 100%;\n  min-height: 32px;\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  .mu-chip {\n    margin: 4px 4px 4px 0;\n  }\n}\n\n.mu-select-input {\n  appearance: none;\n  outline: none;\n  border: none;\n  background: none;\n  border-radius: 0 0 0 0;\n  box-shadow: none;\n  display: block;\n  padding: 0;\n  margin: 0;\n  width: 100%;\n  height: 32px;\n  font-style: inherit;\n  font-variant: inherit;\n  font-weight: inherit;\n  font-stretch: inherit;\n  font-size: inherit;\n  font-family: inherit;\n  color: @textColor;\n  font-family: inherit;\n  position: relative;\n  flex: 1;\n  cursor: inherit;\n  &.is-enable {\n    cursor: text;\n  }\n  &.is-break {\n    min-width: 100%;\n  }\n}\n\n.mu-select-action {\n  .flex-shrink(0);\n  padding: 0 6px;\n  cursor: pointer;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.mu-select-icon {\n  fill: currentColor;\n  width: 24px;\n  height: 24px;\n  user-select: none;\n  transition: .3s @easeOutFunction;\n  .mu-select.is-open & {\n    transform: rotate(180deg);\n  }\n}\n\n.mu-selection-text {\n  &.is-active {\n    color: @primaryColor;\n  }\n}\n\n.mu-select-no-data {\n  height: 36px;\n  padding: 0 16px;\n  line-height: 36px;\n  color: @disabledColor;\n}\n\n.mu-option-list.mu-list {\n  outline: none;\n  .scrollable();\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.mu-option {\n  &.is-selected {\n    .mu-item {\n      color: @secondaryColor;\n    }\n  }\n  &.is-focused {\n    background-color: fade(@textColor, 10%);\n  }\n  &.is-disabled {\n    .mu-item {\n      color: @disabledColor;\n    }\n  }\n}\n"
  },
  {
    "path": "src/styles/components/slide-picker.less",
    "content": "@import '../import.less';\n.mu-slide-picker{\n  background: @dialogBackgroundColor;\n  overflow: hidden;\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);\n  -webkit-mask-box-image: linear-gradient(to top, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);\n}\n.mu-slide-picker-center-highlight {\n  height: 36px;\n  box-sizing: border-box;\n  position: absolute;\n  left: 0;\n  width: 100%;\n  top: 50%;\n  margin-top: -18px;\n  pointer-events: none;\n  border-top: 1px solid @borderColor;\n  border-bottom: 1px solid @borderColor;\n}\n.mu-slide-picker-center-highlight:before {\n  left: 0;\n  top: 0;\n  bottom: auto;\n  right: auto;\n}\n.mu-slide-picker-center-highlight:after {\n  left: 0;\n  bottom: 0;\n  right: auto;\n  top: auto;\n}\n\n.mu-slide-picker-slot{\n  font-size: 18px;\n  overflow: hidden;\n  position: relative;\n  max-height: 100%;\n  text-align: center;\n  &.mu-slide-picker-slot-divider{\n    color: @textColor;\n    display: flex;\n    align-items: center;\n    line-height: 36px;\n  }\n}\n.mu-slide-picker-slot-wrapper.animate{\n  transition: transform .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n.mu-slide-picker-item{\n  height: 36px;\n  line-height: 36px;\n  padding: 0 10px;\n  font-size: 20px;\n  white-space: nowrap;\n  position: relative;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  color: @secondaryTextColor;\n  left: 0;\n  top: 0;\n  width: 100%;\n  box-sizing: border-box;\n  transition-duration: .3s;\n  backface-visibility: hidden;\n  &.selected {\n    color: @textColor;\n    transform: translate3d(0, 0, 0) rotateX(0);\n  }\n}\n"
  },
  {
    "path": "src/styles/components/slider.less",
    "content": "@import \"../import.less\";\n.mu-slider {\n  width: 100%;\n  position: relative;\n  height: 24px;\n  margin-bottom: 16px;\n  display: flex;\n  align-items: center;\n  cursor: default;\n  user-select:none;\n  outline: none;\n  color: @primaryColor;\n}\n\n.mu-slider-display-value {\n  position: absolute;\n  top: -30px;\n  display: none;\n  width: 26px;\n  height: 26px;\n  text-align: center;\n  line-height: 26px;\n  font-size: 10px;\n  background: currentColor;\n  border-radius: 50% 50% 50% 0;\n  transform: scale(1) rotate(-45deg) translate(-11px, -8px);\n  .mu-slider.active &{\n    display: block;\n  }\n  .display-value-text {\n    display: inline-block;\n    color: @alternateTextColor;\n    transform: rotate(45deg);\n  }\n}\n\n.mu-slider-track{\n  position: absolute;\n  height: 2px;\n  left: 0;\n  right: 0;\n  top: 50%;\n  margin-top: -1px;\n  background-color: @trackColor;\n}\n\n.mu-slider-fill{\n  position: absolute;\n  height: 2px;\n  width: 100%;\n  background-color: currentColor;\n  left: 0;\n  top: 50%;\n  margin-top: -1px;\n  .mu-slider.disabled & {\n    background-color: @trackColor;\n  }\n}\n\n.mu-slider-thumb {\n  position: absolute;\n  top: 50%;\n  width: 12px;\n  height: 12px;\n  background-color: currentColor;\n  color: currentColor;\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  transition: background 450ms @easeOutFunction, border-color 450ms @easeOutFunction, width 450ms @easeOutFunction, height 450ms @easeOutFunction;\n  cursor: pointer;\n  .mu-slider.active & {\n    width: 20px;\n    height: 20px;\n  }\n  .mu-slider.display-value & {\n    width: 0;\n    height: 0;\n  }\n  .mu-slider.zero &,\n  .mu-slider.disabled &{\n    border: 2px solid @trackColor;\n    color: @trackColor;\n    background-color: @alternateTextColor;\n    .mu-focus-ripple-wrapper {\n      top: -14px;\n      left: -14px;\n    }\n  }\n\n  .mu-slider.disabled & {\n    cursor: default;\n  }\n\n  .mu-focus-ripple-wrapper {\n    width: 36px;\n    height: 36px;\n    top: -12px;\n    left: -12px;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/snackbar.less",
    "content": "@import \"../import.less\";\n.mu-snackbar {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  color: @alternateTextColor;\n  background-color: @textColor;\n  border-radius: 2px;\n  padding: 6px 16px;\n  line-height: 20px;\n  font-size: 14px;\n  min-height: 48px;\n  min-width: 288px;\n  max-width: 568px;\n  position: fixed;\n  flex-wrap: wrap;\n  .depth(1);\n  .mu-icon {\n    margin-right: 16px;\n    font-size: 20px;\n  }\n}\n\n.mu-snackbar-action {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  flex-shrink: 0;\n  margin-right: -16px;\n  padding: 0 8px;\n  margin-left: auto;\n  .mu-circle-ripple {\n    opacity: .2;\n  }\n}\n\n.mu-snackbar-message {\n  padding: 8px 0;\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n}\n.mu-snackbar-top {\n  left: 50%;\n  transform: translate3d(-50%, 0, 0);\n  top: 0;\n  &.mu-slide-bottom-transition-enter,\n  &.mu-slide-bottom-transition-leave-active {\n    transform: translate3d(-50%, 100%, 0);\n  }\n  &.mu-slide-top-transition-enter,\n  &.mu-slide-top-transition-leave-active {\n    transform: translate3d(-50%, -100%, 0);\n  }\n}\n\n.mu-snackbar-top-start {\n  left: 8px;\n  top: 8px;\n}\n\n.mu-snackbar-top-end {\n  right: 8px;\n  top: 8px;\n}\n\n.mu-snackbar-bottom {\n  left: 50%;\n  transform: translate3d(-50%, 0, 0);\n  bottom: 0;\n  &.mu-slide-bottom-transition-enter,\n  &.mu-slide-bottom-transition-leave-active {\n    transform: translate3d(-50%, 100%, 0);\n  }\n  &.mu-slide-top-transition-enter,\n  &.mu-slide-top-transition-leave-active {\n    transform: translate3d(-50%, -100%, 0);\n  }\n}\n\n.mu-snackbar-bottom-start {\n  left: 8px;\n  bottom: 8px;\n}\n\n.mu-snackbar-bottom-end {\n  right: 8px;\n  bottom: 8px;\n}\n\n@media only screen and (max-width: 600px) {\n  .mu-snackbar {\n    width: 100%;\n    max-width: 100%;\n    left: 0;\n    right: 0;\n    transform: translate3d(0, 0, 0);\n    &.mu-slide-bottom-transition-enter,\n    &.mu-slide-bottom-transition-leave-active {\n      transform: translate3d(0, 100%, 0);\n    }\n    &.mu-slide-top-transition-enter,\n    &.mu-slide-top-transition-leave-active {\n      transform: translate3d(0, -100%, 0);\n    }\n  }\n\n  .mu-snackbar-top-start,\n  .mu-snackbar-top-end {\n    top: 0;\n  }\n  .mu-snackbar-bottom-start,\n  .mu-snackbar-bottom-end {\n    bottom: 0;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/stepper.less",
    "content": "@import \"../import.less\";\n.mu-stepper{\n  display: flex;\n  flex-direction: row;\n  align-content: center;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.mu-stepper-vertical{\n  flex-direction: column;\n  align-items: stretch;\n}\n\n.mu-step{\n  flex: 0 0 auto;\n  margin-left: -6px;\n  .mu-stepper-vertical & {\n    margin-top: -14px;\n    margin-left: 0;\n  }\n  &:first-child {\n    margin-left: 0;\n  }\n}\n\n.mu-step-button {\n  border: 10px;\n  display: inline-block;\n  cursor: pointer;\n  text-decoration: none;\n  margin: 0px;\n  padding: 0px;\n  outline: none;\n  font-size: inherit;\n  font-weight: inherit;\n  transform: translate(0px, 0px);\n  background-color: transparent;\n  transition: all 450ms @easeOutFunction 0ms;\n  .mu-stepper-vertical & {\n    width: 100%;\n  }\n  &.hover {\n    background-color: fade(@black, 6%);\n  }\n}\n\n.mu-step-connector{\n  flex: 1 1 auto;\n  .mu-stepper-vertical &{\n    margin-left: 25px;\n  }\n}\n\n.mu-step-connector-line{\n  display: block;\n  border-color: @grey400;\n  margin-left: -6px;\n  border-top-style: solid;\n  border-top-width: 1px;\n  .mu-stepper-vertical & {\n    border-top: none;\n    border-left-style: solid;\n    border-left-width: 1px;\n    min-height: 28px;\n    margin-left: 0;\n  }\n}\n\n.mu-step-content{\n  margin-top: -14px;\n  margin-left: 25px;\n  padding-left: 21px;\n  padding-right: 16px;\n  overflow: hidden;\n  .mu-stepper-vertical & {\n    border-left: 1px solid @grey400;\n  }\n  &.last {\n    border-left: none;\n  }\n}\n\n.mu-step-content-inner {\n  position: relative;\n  width: 100%;\n  top: 0px;\n  left: 0px;\n  overflow: hidden;\n}\n\n.mu-step-label{\n  height: 72px;\n  color: @textColor;\n  display: flex;\n  align-items: center;\n  font-size: 14px;\n  padding-left: 14px;\n  padding-right: 14px;\n  .mu-stepper-vertical & {\n    height: 64px;\n  }\n  &.disabled {\n    color: @disabledColor;\n    cursor: not-allowed;\n  }\n  &.active {\n    font-weight: 500;\n  }\n}\n\n.mu-step-label-icon-container{\n  display: flex;\n  align-items: center;\n  margin-right: 8px;\n  width: 24px;\n}\n\n.mu-step-label-icon {\n  display: block;\n  font-size: 24px;\n  width: 24px;\n  height: 24px;\n  color: @grey500;\n  fill: currentColor;\n  .mu-step-label.disabled &{\n    color: @grey500;\n  }\n  .mu-step-label.completed &,\n  .mu-step-label.active & {\n    color: @primaryColor;\n  }\n}\n\n.mu-step-label-circle{\n  width: 20px;\n  height: 20px;\n  font-size: 12px;\n  line-height: 20px;\n  text-align: center;\n  overflow: hidden;\n  border-radius: 100%;\n  background-color: @grey500;\n  color: @alternateTextColor;\n  .mu-step-label.disabled &{\n    background-color: @grey500;\n  }\n  .mu-step-label.completed &,\n  .mu-step-label.active & {\n    background-color: @primaryColor;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/subheader.less",
    "content": "@import \"../import.less\";\n\n.mu-sub-header {\n  color: @secondaryTextColor;\n  font-size: 14px;\n  line-height: 48px;\n  padding-left: 16px;\n  width: 100%;\n  &.inset{\n    padding-left: 72px;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/switch.less",
    "content": "@import \"../import.less\";\n.mu-switch {\n  position: relative;\n  display: inline-block;\n  height: 24px;\n  line-height: 24px;\n  cursor: pointer;\n  user-select: none;\n  outline: none;\n  input[type=\"checkbox\"] {\n    display: none;\n  }\n  &.disabled {\n    input[type=\"checkbox\"]:checked{\n      + .mu-switch-wrapper {\n        .mu-switch-track{\n          background-color: @trackColor;\n        }\n        .mu-switch-thumb{\n          background-color: @grey300;\n        }\n      }\n    }\n  }\n\n  * {\n    pointer-events: none;\n  }\n  &.disabled  {\n    cursor: not-allowed;\n  }\n}\n\n.mu-switch-checked {\n  color: @primaryColor;\n  .mu-switch-track{\n    background-color: currentColor;\n    opacity: 0.5;\n  }\n  .mu-switch-thumb{\n    background-color: currentColor;\n    transform: translate3d(18px, 0, 0);\n  }\n}\n\n.mu-switch-wrapper{\n  display: flex;\n  width: 100%;\n  height: 24px;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.mu-switch-container{\n  width: 38px;\n  padding: 4px 0px 4px 2px;\n  position: relative;\n  margin-right: 8px;\n  .mu-switch.label-left &{\n    margin-right: 0;\n    margin-left: 8px;\n  }\n  .mu-switch.no-label &{\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n\n.mu-switch-label {\n  color: @textColor;\n  .mu-switch.disabled & {\n    color: @disabledColor;\n  }\n}\n\n.mu-switch-track {\n  width: 100%;\n  height: 14px;\n  border-radius: 30px;\n  background-color: @trackColor;\n  transition: all 450ms @easeOutFunction;\n  .mu-switch.disabled & {\n    background-color: @trackColor;\n  }\n}\n\n.mu-switch-thumb {\n  position: absolute;\n  top: 1px;\n  left: 0px;\n  width: 20px;\n  height: 20px;\n  line-height: 24px;\n  background-color: @backgroundColor;\n  border-radius: 50%;\n  .depth(1);\n  transition: all 450ms @easeOutFunction;\n  backface-visibility: hidden;\n  .mu-switch.disabled & {\n    background-color: @grey300;\n  }\n}\n\n.mu-switch-ripple-wrapper {\n  height: 200%;\n  width: 200%;\n  top: -10px;\n  left: -10px;\n  position: absolute;\n}\n"
  },
  {
    "path": "src/styles/components/tabs.less",
    "content": "@import '../import.less';\n.mu-tabs{\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  background-color: @primaryColor;\n  color: fade(@alternateTextColor, 70%);\n  position: relative;\n  z-index: 100;\n  width: 100%;\n  overflow: hidden;\n}\n\n.mu-tabs-inverse {\n  background-color: @backgroundColor;\n  color: @secondaryTextColor;\n}\n\n.mu-tabs-center {\n  justify-content: center;\n}\n\n.mu-tab-link-highlight{\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  height: 2px;\n  background-color: @secondaryColor;\n  transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n  will-change: width transform;\n  backface-visibility: hidden;\n}\n\n.mu-tab{\n  font-size: 14px;\n  min-width: 72px;\n  max-width: 264px;\n  background: none;\n  appearance: none;\n  text-decoration: none;\n  border: none;\n  outline: none;\n  color: inherit;\n  position: relative;\n  line-height: normal;\n  transition: all .45s @easeInOutFunction;\n  cursor: pointer;\n  .mu-tabs-full-width & {\n    flex: 1;\n    max-width: 100%;\n  }\n  .mu-icon {\n    margin-bottom: 8px;\n  }\n}\n\n.mu-tab-wrapper {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  min-height: 48px;\n  padding: 12px;\n}\n\n.mu-tab-active {\n  color: @alternateTextColor;\n  &.is-inverse {\n    color: @textColor;\n  }\n}\n\n@media (min-width: 960px) {\n  .mu-tab {\n    min-width: 160px;\n  }\n}\n"
  },
  {
    "path": "src/styles/components/text-field.less",
    "content": "@import \"../import.less\";\n.mu-text-field {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  width: 100%;\n}\n\n.mu-text-field-input {\n  appearance: none;\n  outline: none;\n  border: none;\n  background: none;\n  border-radius: 0 0 0 0;\n  box-shadow: none;\n  display: block;\n  padding: 0;\n  margin: 0;\n  width: 100%;\n  height: 32px;\n  font-style: inherit;\n  font-variant: inherit;\n  font-weight: inherit;\n  font-stretch: inherit;\n  font-size: inherit;\n  font-family: inherit;\n  color: @textColor;\n  font-family: inherit;\n  position: relative;\n  flex: 1;\n}\n\n.mu-text-field-action {\n  .flex-shrink(0);\n  padding: 0 6px;\n  cursor: pointer;\n}\n\n.mu-text-field-suffix {\n  color: @secondaryTextColor;\n  white-space: nowrap;\n  .flex-shrink(0);\n}\n\n.mu-text-field-textarea{\n  resize: vertical;\n  line-height: 1.5;\n  position: relative;\n  height: 100%;\n  resize: none;\n}\n\n.mu-text-field-multiline{\n  width: 100%;\n  position: relative;\n}\n\n.mu-text-field-textarea-hide{\n  width: 100%;\n  height: initial;\n  resize: none;\n  position: absolute;\n  padding: 0;\n  overflow: auto;\n  visibility: hidden;\n}\n"
  },
  {
    "path": "src/styles/components/tooltip.less",
    "content": "@import \"../import.less\";\n.mu-tooltip {\n  position: fixed;\n  font-size: 10px;\n  line-height: 22px;\n  padding: 4px 8px;\n  color: @fullWhite;\n  border-radius: 2px;\n  background-color: @grey700;\n  opacity: 0.9;\n  left: 300px;\n  top: 400px;\n}\n\n.mu-tooltip-top-enter-active,\n.mu-tooltip-top-leave-active {\n  transition: transform .3s @easeOutFunction, opacity .3s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-tooltip-top-enter,\n.mu-tooltip-top-leave-active {\n  transform: translate3d(0, 60%, 0);\n  opacity: 0;\n}\n\n.mu-tooltip-bottom-enter-active,\n.mu-tooltip-bottom-leave-active {\n  transition: transform .3s @easeOutFunction, opacity .3s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-tooltip-bottom-enter,\n.mu-tooltip-bottom-leave-active {\n  transform: translate3d(0, -60%, 0);\n  opacity: 0;\n}\n\n.mu-tooltip-left-enter-active,\n.mu-tooltip-left-leave-active {\n  transition: transform .3s @easeOutFunction, opacity .3s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-tooltip-left-enter,\n.mu-tooltip-left-leave-active {\n  transform: translate3d(24px, 0, 0);\n  opacity: 0;\n}\n\n.mu-tooltip-right-enter-active,\n.mu-tooltip-right-leave-active {\n  transition: transform .3s @easeOutFunction, opacity .3s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-tooltip-right-enter,\n.mu-tooltip-right-leave-active {\n  transform: translate3d(-24px, 0, 0);\n  opacity: 0;\n}\n"
  },
  {
    "path": "src/styles/components/touch-ripple.less",
    "content": ".mu-ripple-wrapper {\n  height: 100%;\n  width: 100%;\n  position: absolute;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n}\n"
  },
  {
    "path": "src/styles/import.less",
    "content": "@import \"./vars.less\";\n@import \"./mixins.less\";\n"
  },
  {
    "path": "src/styles/index.less",
    "content": ""
  },
  {
    "path": "src/styles/mixins.less",
    "content": ".transition(@d) {\n  -webkit-transition-duration: @d;\n  transition-duration: @d;\n}\n.delay(@d) {\n  -webkit-transition-delay: @d;\n  transition-delay: @d;\n}\n.transform(@t) {\n  -webkit-transform: @t;\n  transform: @t;\n}\n.transform-origin(@to) {\n  -webkit-transform-origin: @to;\n  transform-origin: @to;\n}\n.translate3d(@x:0, @y:0, @z:0) {\n  -webkit-transform: translate3d(@x,@y,@z);\n  transform: translate3d(@x,@y,@z);\n}\n.animation (@a) {\n  -webkit-animation: @a;\n  animation: @a;\n}\n.scrollable() {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.flex-shrink(@fs) {\n  -webkit-box-flex: @fs;\n  -webkit-flex-shrink: @fs;\n  -ms-flex: 0 @fs auto;\n  flex-shrink: @fs;\n}\n.clearfix() {\n  &:after,\n  &:before {\n    content: \" \";\n    display: table;\n  }\n  &:after {\n    clear: both;\n  }\n}\n.hairline(@position, @color) when (@position = top) {\n  &:before {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 0;\n    bottom: auto;\n    right: auto;\n    height: 1px;\n    width: 100%;\n    background-color: @color;\n    display: block;\n    z-index: 15;\n    // .transform-origin(50% 0%);\n    html.pixel-ratio-2 & {\n      .transform(scaleY(0.5));\n    }\n    html.pixel-ratio-3 & {\n      .transform(scaleY(0.33));\n    }\n  }\n}\n.hairline(@position, @color) when (@position = left) {\n  &:before {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 0;\n    bottom: auto;\n    right: auto;\n    width: 1px;\n    height: 100%;\n    background-color: @color;\n    display: block;\n    z-index: 15;\n    // .transform-origin(0% 50%);\n    html.pixel-ratio-2 & {\n      .transform(scaleX(0.5));\n    }\n    html.pixel-ratio-3 & {\n      .transform(scaleX(0.33));\n    }\n  }\n\n}\n.hairline(@position, @color) when (@position = bottom) {\n  &:after {\n    content: '';\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    right: auto;\n    top: auto;\n    height: 1px;\n    width: 100%;\n    background-color: @color;\n    display: block;\n    z-index: 15;\n    html.pixel-ratio-2 & {\n      .transform(scaleY(0.5));\n    }\n    html.pixel-ratio-3 & {\n      .transform(scaleY(0.33));\n    }\n  }\n}\n.hairline(@position, @color) when (@position = right) {\n  &:after {\n    content: '';\n    position: absolute;\n    right: 0;\n    top: 0;\n    left: auto;\n    bottom: auto;\n    width: 1px;\n    height: 100%;\n    background-color: @color;\n    display: block;\n    z-index: 15;\n    // .transform-origin(100% 50%);\n    html.pixel-ratio-2 & {\n      .transform(scaleX(0.5));\n    }\n    html.pixel-ratio-3 & {\n      .transform(scaleX(0.33));\n    }\n  }\n}\n// For right and bottom\n.hairline-remove(@position) when not (@position = left) and not (@position = top) {\n  &:after {\n    display: none;\n  }\n}\n// For left and top\n.hairline-remove(@position) when not (@position = right) and not (@position = bottom) {\n  &:before {\n    display: none;\n  }\n}\n// For right and bottom\n.hairline-color(@position, @color) when not (@position = left) and not (@position = top) {\n  &:after {\n    background-color: @color;\n  }\n}\n// For left and top\n.hairline-color(@position, @color) when not (@position = right) and not (@position = bottom) {\n  &:before {\n    background-color: @color;\n  }\n}\n// Encoded SVG Background\n.encoded-svg-background(@svg) {\n  @url: `encodeURIComponent(@{svg})`;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,@{url}\");\n}\n// Preserve3D\n.preserve3d() {\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n// Shadow\n.depth(@level:1) {\n  & when (@level = 0) {\n    box-shadow: none;\n  }\n  & when (@level = 1) {\n    box-shadow: 0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);\n  }\n  & when (@level = 2) {\n    box-shadow: 0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);\n  }\n  & when (@level = 3) {\n    box-shadow: 0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12);\n  }\n  & when (@level = 4) {\n    box-shadow: 0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);\n  }\n  & when (@level = 5) {\n    box-shadow: 0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12);\n  }\n  & when (@level = 6) {\n    box-shadow: 0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);\n  }\n  & when (@level = 7) {\n    box-shadow: 0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12);\n  }\n  & when (@level = 8) {\n    box-shadow: 0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);\n  }\n  & when (@level = 9) {\n    box-shadow: 0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12);\n  }\n  & when (@level = 10) {\n    box-shadow: 0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);\n  }\n  & when (@level = 11) {\n    box-shadow: 0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12);\n  }\n  & when (@level = 12) {\n    box-shadow: 0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12);\n  }\n  & when (@level = 13) {\n    box-shadow: 0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12);\n  }\n  & when (@level = 14) {\n    box-shadow: 0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12);\n  }\n  & when (@level = 15) {\n    box-shadow: 0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12);\n  }\n  & when (@level = 16) {\n    box-shadow: 0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);\n  }\n  & when (@level = 17) {\n    box-shadow: 0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12);\n  }\n  & when (@level = 18) {\n    box-shadow: 0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12);\n  }\n  & when (@level = 19) {\n    box-shadow: 0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12);\n  }\n  & when (@level = 20) {\n    box-shadow: 0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12);\n  }\n  & when (@level = 21) {\n    box-shadow: 0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12);\n  }\n  & when (@level = 22) {\n    box-shadow: 0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12);\n  }\n  & when (@level = 23) {\n    box-shadow: 0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12);\n  }\n  & when (@level = 24) {\n    box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);\n  }\n  // & when (@level = 1) {\n  //   box-shadow: rgba(0, 0, 0, 0.117647) 0px 1px 6px, rgba(0, 0, 0, 0.117647) 0px 1px 4px;\n  // }\n  // & when (@level = 2) {\n  //   box-shadow: rgba(0, 0, 0, 0.156863) 0px 3px 10px, rgba(0, 0, 0, 0.227451) 0px 3px 10px;\n  // }\n  // & when (@level = 3) {\n  //   box-shadow: rgba(0, 0, 0, 0.188235) 0px 10px 30px, rgba(0, 0, 0, 0.227451) 0px 6px 10px;\n  // }\n  // & when (@level = 4) {\n  //   box-shadow: rgba(0, 0, 0, 0.247059) 0px 14px 45px, rgba(0, 0, 0, 0.219608) 0px 10px 18px;\n  // }\n  // & when (@level = 5) {\n  //   box-shadow: rgba(0, 0, 0, 0.298039) 0px 19px 60px, rgba(0, 0, 0, 0.219608) 0px 15px 20px;\n  // }\n}\n\n// Highlighted Links\n.active-highlight(@color:rgba(255, 255, 255, 0.15)){\n  &:before {\n    content: '';\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    left: 0;\n    top: 0;\n    background-color: @color;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 100% 100%;\n    opacity: 0;\n    pointer-events: none;\n    .transition(600ms);\n  }\n  &.active-state:before,\n  html:not(.watch-active-state) &:active:before {\n    opacity: 1;\n    .transition(150ms);\n  }\n}\n.active-highlight-color(@color) {\n  &:before {\n    background-image: -webkit-radial-gradient(center, circle cover, @color 66%, rgba(red(@color),green(@color),blue(@color),0) 66%);\n    background-image: radial-gradient(circle at center, @color 66%, rgba(red(@color),green(@color),blue(@color),0) 66%);\n  }\n}\n// No Scrollbar\n.no-scrollbar() {\n  &::-webkit-scrollbar {\n    display: none !important;\n    width: 0 !important;\n    height: 0 !important;\n    -webkit-appearance: none;\n    opacity: 0 !important;\n  }\n}\n\n\n.ellipsis() {\n  white-space:nowrap;\n  text-overflow:ellipsis;\n  overflow:hidden;\n  word-wrap: break-word;\n}\n"
  },
  {
    "path": "src/styles/normalize.less",
    "content": "/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Prevent adjustments of font size after orientation changes in IE and iOS.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n * 2. Add the correct display in IE.\n */\n\narticle,\naside,\ndetails, /* 1 */\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, /* 2 */\nmenu,\nnav,\nsection,\nsummary { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\n * Add the correct display in IE 10-.\n * 1. Add the correct display in IE.\n */\n\ntemplate, /* 1 */\n[hidden] {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n  outline-width: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change font properties to `inherit` in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n  font: inherit; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Restore the font weight unset by the previous rule.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n  color: inherit;\n  opacity: 0.54;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n"
  },
  {
    "path": "src/styles/theme.less",
    "content": "@import \"./import.less\";\n.mu-primary-color {\n  background-color: @primaryColor;\n}\n\n.mu-secondary-color {\n  background-color: @secondaryColor;\n}\n\n.mu-success-color {\n  background-color: @successColor;\n}\n\n.mu-warning-color {\n  background-color: @warningColor;\n}\n\n.mu-info-color {\n  background-color: @infoColor;\n}\n\n.mu-error-color {\n  background-color: @errorColor;\n}\n\n.mu-inverse {\n  color: @alternateTextColor;\n}\n\n.mu-primary-text-color {\n  color: @primaryColor;\n}\n\n.mu-secondary-text-color {\n  color: @secondaryColor;\n}\n\n.mu-success-text-color {\n  color: @successColor;\n}\n\n.mu-warning-text-color {\n  color: @warningColor;\n}\n\n.mu-info-text-color {\n  color: @infoColor;\n}\n\n.mu-error-text-color {\n  color: @errorColor;\n}\n"
  },
  {
    "path": "src/styles/transitions.less",
    "content": "@import \"./import.less\";\n\n.mu-fade-transition-enter-active,\n.mu-fade-transition-leave-active {\n  transition: opacity .45s cubic-bezier(0.23, 1, 0.32, 1);\n}\n\n.mu-fade-transition-enter,\n.mu-fade-transition-leave-active {\n  opacity: 0 !important;\n}\n\n.mu-popover-transition-enter-active, .mu-popover-transition-leave-active{\n  transition-duration: 300ms;\n  // transform-origin: left top;\n  transition-property: opacity, transform;\n  backface-visibility: hidden;\n}\n\n.mu-popover-transition-enter, .mu-popover-transition-leave-active {\n  transform: scale(0.6);\n  opacity: 0;\n}\n\n.mu-bottom-sheet-transition-enter-active,\n.mu-bottom-sheet-transition-leave-active{\n  transition: transform .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-bottom-sheet-transition-enter,\n.mu-bottom-sheet-transition-leave-active{\n  transform: translate3d(0, 100%, 0);\n}\n\n.mu-slide-top-transition-enter-active,\n.mu-slide-top-transition-leave-active {\n  transition: transform .45s @easeOutFunction, opacity .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-slide-top-transition-enter,\n.mu-slide-top-transition-leave-active {\n  transform: translate3d(0, -100%, 0);\n  opacity: 0;\n}\n\n.mu-slide-bottom-transition-enter-active,\n.mu-slide-bottom-transition-leave-active {\n  transition: transform .45s @easeOutFunction, opacity .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-slide-bottom-transition-enter,\n.mu-slide-bottom-transition-leave-active {\n  transform: translate3d(0, 100%, 0);\n  opacity: 0;\n}\n\n.mu-slide-left-transition-enter-active,\n.mu-slide-left-transition-leave-active {\n  transition: transform .45s @easeOutFunction, opacity .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-slide-left-transition-enter,\n.mu-slide-left-transition-leave-active {\n  transform: translate3d(-100%, 0, 0);\n  opacity: 0;\n}\n\n.mu-slide-right-transition-enter-active,\n.mu-slide-right-transition-leave-active {\n  transition: transform .45s @easeOutFunction, opacity .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-slide-right-transition-enter,\n.mu-slide-right-transition-leave-active {\n  transform: translate3d(100%, 0, 0);\n  opacity: 0;\n}\n\n.mu-scale-transition-enter-active,\n.mu-scale-transition-leave-active {\n  transition: all .45s @easeOutFunction;\n  backface-visibility: hidden;\n}\n\n.mu-scale-transition-enter,\n.mu-scale-transition-leave-active {\n  transform: scale(0);\n  opacity: 0;\n}\n\n\n"
  },
  {
    "path": "src/styles/vars.less",
    "content": "@import \"./colors.less\";\n@fontFamily: Roboto, Lato, sans-serif;\n\n// primary and accent\n@primaryColor: @blue;  // 主色\n@secondaryColor: @pinkA200;\n@successColor: @green;\n@warningColor: @yellow600;\n@errorColor: @red;\n@infoColor: @blue;\n@trackColor: @grey400;\n\n// textColor or borderColor\n@textColor: @darkBlack;\n@secondaryTextColor: fade(@fullBlack, 54%);\n@alternateTextColor: @white;\n@borderColor: fade(@fullBlack, 12%);\n@disabledColor: fade(@fullBlack, 38%);\n\n// background\n@backgroundColor: @grey50;\n@dialogBackgroundColor: @white; // dialogs or cards\n@chipBackgroundColor: @grey300;\n// icon color\n@activeIconColor: fade(@fullBlack, 54%);\n@inActiveIconColor: fade(@fullBlack, 38%);\n\n// spaceing\n@iconSize: 24px;\n@desktopGutter: 24px;\n@desktopGutterMore: 32px;\n@desktopGutterLess: 16px;\n@desktopGutterMini: 8px;\n@desktopKeylineIncrement: 64px;\n@desktopDropDownMenuItemHeight: 32px;\n@desktopDropDownMenuFontSize: 15px;\n@desktopDrawerMenuItemHeight: 48px;\n@desktopSubheaderHeight: 48px;\n@desktopToolbarHeight: 56px;\n\n// animate\n@easeOutFunction: cubic-bezier(0.23, 1, 0.32, 1);\n@easeInOutFunction: cubic-bezier(0.445, 0.05, 0.55, 0.95);\n\n"
  },
  {
    "path": "src/theme/baseTheme.js",
    "content": "export default (theme) => {\n  return `\n  body{\n    background-color: ${theme.background.default};\n    color: ${theme.text.primary};\n  }\n\n  a{\n    color: ${theme.secondary};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/theme/colorTheme.js",
    "content": "export default (theme) => {\n  return `\n  .mu-primary-color {\n    background-color: ${theme.primary};\n  }\n  .mu-secondary-color {\n    background-color: ${theme.secondary};\n  }\n  .mu-success-color {\n    background-color: ${theme.success};\n  }\n  .mu-warning-color {\n    background-color: ${theme.warning};\n  }\n  .mu-info-color {\n    background-color: ${theme.info};\n  }\n  .mu-error-color {\n    background-color: ${theme.error};\n  }\n  .mu-inverse {\n    color: #fff;\n  }\n  .mu-primary-text-color {\n    color: ${theme.primary};\n  }\n  .mu-secondary-text-color {\n    color: ${theme.secondary};\n  }\n  .mu-success-text-color {\n    color: ${theme.success};\n  }\n  .mu-warning-text-color {\n    color: ${theme.warning};\n  }\n  .mu-info-text-color {\n    color: ${theme.info};\n  }\n  .mu-error-text-color {\n    color: ${theme.error};\n  }\n  `;\n};\n"
  },
  {
    "path": "src/theme/colors.js",
    "content": "export const red50 = '#ffebee';\nexport const red100 = '#ffcdd2';\nexport const red200 = '#ef9a9a';\nexport const red300 = '#e57373';\nexport const red400 = '#ef5350';\nexport const red500 = '#f44336';\nexport const red600 = '#e53935';\nexport const red700 = '#d32f2f';\nexport const red800 = '#c62828';\nexport const red900 = '#b71c1c';\nexport const redA100 = '#ff8a80';\nexport const redA200 = '#ff5252';\nexport const redA400 = '#ff1744';\nexport const redA700 = '#d50000';\nexport const red = red500;\n\nexport const pink50 = '#fce4ec';\nexport const pink100 = '#f8bbd0';\nexport const pink200 = '#f48fb1';\nexport const pink300 = '#f06292';\nexport const pink400 = '#ec407a';\nexport const pink500 = '#e91e63';\nexport const pink600 = '#d81b60';\nexport const pink700 = '#c2185b';\nexport const pink800 = '#ad1457';\nexport const pink900 = '#880e4f';\nexport const pinkA100 = '#ff80ab';\nexport const pinkA200 = '#ff4081';\nexport const pinkA400 = '#f50057';\nexport const pinkA700 = '#c51162';\nexport const pink = pink500;\n\nexport const purple50 = '#f3e5f5';\nexport const purple100 = '#e1bee7';\nexport const purple200 = '#ce93d8';\nexport const purple300 = '#ba68c8';\nexport const purple400 = '#ab47bc';\nexport const purple500 = '#9c27b0';\nexport const purple600 = '#8e24aa';\nexport const purple700 = '#7b1fa2';\nexport const purple800 = '#6a1b9a';\nexport const purple900 = '#4a148c';\nexport const purpleA100 = '#ea80fc';\nexport const purpleA200 = '#e040fb';\nexport const purpleA400 = '#d500f9';\nexport const purpleA700 = '#aa00ff';\nexport const purple = purple500;\n\nexport const deepPurple50 = '#ede7f6';\nexport const deepPurple100 = '#d1c4e9';\nexport const deepPurple200 = '#b39ddb';\nexport const deepPurple300 = '#9575cd';\nexport const deepPurple400 = '#7e57c2';\nexport const deepPurple500 = '#673ab7';\nexport const deepPurple600 = '#5e35b1';\nexport const deepPurple700 = '#512da8';\nexport const deepPurple800 = '#4527a0';\nexport const deepPurple900 = '#311b92';\nexport const deepPurpleA100 = '#b388ff';\nexport const deepPurpleA200 = '#7c4dff';\nexport const deepPurpleA400 = '#651fff';\nexport const deepPurpleA700 = '#6200ea';\nexport const deepPurple = deepPurple500;\n\nexport const indigo50 = '#e8eaf6';\nexport const indigo100 = '#c5cae9';\nexport const indigo200 = '#9fa8da';\nexport const indigo300 = '#7986cb';\nexport const indigo400 = '#5c6bc0';\nexport const indigo500 = '#3f51b5';\nexport const indigo600 = '#3949ab';\nexport const indigo700 = '#303f9f';\nexport const indigo800 = '#283593';\nexport const indigo900 = '#1a237e';\nexport const indigoA100 = '#8c9eff';\nexport const indigoA200 = '#536dfe';\nexport const indigoA400 = '#3d5afe';\nexport const indigoA700 = '#304ffe';\nexport const indigo = indigo500;\n\nexport const blue50 = '#e3f2fd';\nexport const blue100 = '#bbdefb';\nexport const blue200 = '#90caf9';\nexport const blue300 = '#64b5f6';\nexport const blue400 = '#42a5f5';\nexport const blue500 = '#2196f3';\nexport const blue600 = '#1e88e5';\nexport const blue700 = '#1976d2';\nexport const blue800 = '#1565c0';\nexport const blue900 = '#0d47a1';\nexport const blueA100 = '#82b1ff';\nexport const blueA200 = '#448aff';\nexport const blueA400 = '#2979ff';\nexport const blueA700 = '#2962ff';\nexport const blue = blue500;\n\nexport const lightBlue50 = '#e1f5fe';\nexport const lightBlue100 = '#b3e5fc';\nexport const lightBlue200 = '#81d4fa';\nexport const lightBlue300 = '#4fc3f7';\nexport const lightBlue400 = '#29b6f6';\nexport const lightBlue500 = '#03a9f4';\nexport const lightBlue600 = '#039be5';\nexport const lightBlue700 = '#0288d1';\nexport const lightBlue800 = '#0277bd';\nexport const lightBlue900 = '#01579b';\nexport const lightBlueA100 = '#80d8ff';\nexport const lightBlueA200 = '#40c4ff';\nexport const lightBlueA400 = '#00b0ff';\nexport const lightBlueA700 = '#0091ea';\nexport const lightBlue = lightBlue500;\n\nexport const cyan50 = '#e0f7fa';\nexport const cyan100 = '#b2ebf2';\nexport const cyan200 = '#80deea';\nexport const cyan300 = '#4dd0e1';\nexport const cyan400 = '#26c6da';\nexport const cyan500 = '#00bcd4';\nexport const cyan600 = '#00acc1';\nexport const cyan700 = '#0097a7';\nexport const cyan800 = '#00838f';\nexport const cyan900 = '#006064';\nexport const cyanA100 = '#84ffff';\nexport const cyanA200 = '#18ffff';\nexport const cyanA400 = '#00e5ff';\nexport const cyanA700 = '#00b8d4';\nexport const cyan = cyan500;\n\nexport const teal50 = '#e0f2f1';\nexport const teal100 = '#b2dfdb';\nexport const teal200 = '#80cbc4';\nexport const teal300 = '#4db6ac';\nexport const teal400 = '#26a69a';\nexport const teal500 = '#009688';\nexport const teal600 = '#00897b';\nexport const teal700 = '#00796b';\nexport const teal800 = '#00695c';\nexport const teal900 = '#004d40';\nexport const tealA100 = '#a7ffeb';\nexport const tealA200 = '#64ffda';\nexport const tealA400 = '#1de9b6';\nexport const tealA700 = '#00bfa5';\nexport const teal = teal500;\n\nexport const green50 = '#e8f5e9';\nexport const green100 = '#c8e6c9';\nexport const green200 = '#a5d6a7';\nexport const green300 = '#81c784';\nexport const green400 = '#66bb6a';\nexport const green500 = '#4caf50';\nexport const green600 = '#43a047';\nexport const green700 = '#388e3c';\nexport const green800 = '#2e7d32';\nexport const green900 = '#1b5e20';\nexport const greenA100 = '#b9f6ca';\nexport const greenA200 = '#69f0ae';\nexport const greenA400 = '#00e676';\nexport const greenA700 = '#00c853';\nexport const green = green500;\n\nexport const lightGreen50 = '#f1f8e9';\nexport const lightGreen100 = '#dcedc8';\nexport const lightGreen200 = '#c5e1a5';\nexport const lightGreen300 = '#aed581';\nexport const lightGreen400 = '#9ccc65';\nexport const lightGreen500 = '#8bc34a';\nexport const lightGreen600 = '#7cb342';\nexport const lightGreen700 = '#689f38';\nexport const lightGreen800 = '#558b2f';\nexport const lightGreen900 = '#33691e';\nexport const lightGreenA100 = '#ccff90';\nexport const lightGreenA200 = '#b2ff59';\nexport const lightGreenA400 = '#76ff03';\nexport const lightGreenA700 = '#64dd17';\nexport const lightGreen = lightGreen500;\n\nexport const lime50 = '#f9fbe7';\nexport const lime100 = '#f0f4c3';\nexport const lime200 = '#e6ee9c';\nexport const lime300 = '#dce775';\nexport const lime400 = '#d4e157';\nexport const lime500 = '#cddc39';\nexport const lime600 = '#c0ca33';\nexport const lime700 = '#afb42b';\nexport const lime800 = '#9e9d24';\nexport const lime900 = '#827717';\nexport const limeA100 = '#f4ff81';\nexport const limeA200 = '#eeff41';\nexport const limeA400 = '#c6ff00';\nexport const limeA700 = '#aeea00';\nexport const lime = lime500;\n\nexport const yellow50 = '#fffde7';\nexport const yellow100 = '#fff9c4';\nexport const yellow200 = '#fff59d';\nexport const yellow300 = '#fff176';\nexport const yellow400 = '#ffee58';\nexport const yellow500 = '#ffeb3b';\nexport const yellow600 = '#fdd835';\nexport const yellow700 = '#fbc02d';\nexport const yellow800 = '#f9a825';\nexport const yellow900 = '#f57f17';\nexport const yellowA100 = '#ffff8d';\nexport const yellowA200 = '#ffff00';\nexport const yellowA400 = '#ffea00';\nexport const yellowA700 = '#ffd600';\nexport const yellow = yellow500;\n\nexport const amber50 = '#fff8e1';\nexport const amber100 = '#ffecb3';\nexport const amber200 = '#ffe082';\nexport const amber300 = '#ffd54f';\nexport const amber400 = '#ffca28';\nexport const amber500 = '#ffc107';\nexport const amber600 = '#ffb300';\nexport const amber700 = '#ffa000';\nexport const amber800 = '#ff8f00';\nexport const amber900 = '#ff6f00';\nexport const amberA100 = '#ffe57f';\nexport const amberA200 = '#ffd740';\nexport const amberA400 = '#ffc400';\nexport const amberA700 = '#ffab00';\nexport const amber = amber500;\n\nexport const orange50 = '#fff3e0';\nexport const orange100 = '#ffe0b2';\nexport const orange200 = '#ffcc80';\nexport const orange300 = '#ffb74d';\nexport const orange400 = '#ffa726';\nexport const orange500 = '#ff9800';\nexport const orange600 = '#fb8c00';\nexport const orange700 = '#f57c00';\nexport const orange800 = '#ef6c00';\nexport const orange900 = '#e65100';\nexport const orangeA100 = '#ffd180';\nexport const orangeA200 = '#ffab40';\nexport const orangeA400 = '#ff9100';\nexport const orangeA700 = '#ff6d00';\nexport const orange = orange500;\n\nexport const deepOrange50 = '#fbe9e7';\nexport const deepOrange100 = '#ffccbc';\nexport const deepOrange200 = '#ffab91';\nexport const deepOrange300 = '#ff8a65';\nexport const deepOrange400 = '#ff7043';\nexport const deepOrange500 = '#ff5722';\nexport const deepOrange600 = '#f4511e';\nexport const deepOrange700 = '#e64a19';\nexport const deepOrange800 = '#d84315';\nexport const deepOrange900 = '#bf360c';\nexport const deepOrangeA100 = '#ff9e80';\nexport const deepOrangeA200 = '#ff6e40';\nexport const deepOrangeA400 = '#ff3d00';\nexport const deepOrangeA700 = '#dd2c00';\nexport const deepOrange = deepOrange500;\n\nexport const brown50 = '#efebe9';\nexport const brown100 = '#d7ccc8';\nexport const brown200 = '#bcaaa4';\nexport const brown300 = '#a1887f';\nexport const brown400 = '#8d6e63';\nexport const brown500 = '#795548';\nexport const brown600 = '#6d4c41';\nexport const brown700 = '#5d4037';\nexport const brown800 = '#4e342e';\nexport const brown900 = '#3e2723';\nexport const brown = brown500;\n\nexport const blueGrey50 = '#eceff1';\nexport const blueGrey100 = '#cfd8dc';\nexport const blueGrey200 = '#b0bec5';\nexport const blueGrey300 = '#90a4ae';\nexport const blueGrey400 = '#78909c';\nexport const blueGrey500 = '#607d8b';\nexport const blueGrey600 = '#546e7a';\nexport const blueGrey700 = '#455a64';\nexport const blueGrey800 = '#37474f';\nexport const blueGrey900 = '#263238';\nexport const blueGrey = blueGrey500;\n\nexport const grey50 = '#fafafa';\nexport const grey100 = '#f5f5f5';\nexport const grey200 = '#eeeeee';\nexport const grey300 = '#e0e0e0';\nexport const grey400 = '#bdbdbd';\nexport const grey500 = '#9e9e9e';\nexport const grey600 = '#757575';\nexport const grey700 = '#616161';\nexport const grey800 = '#424242';\nexport const grey900 = '#212121';\nexport const grey = grey500;\n\nexport const black = '#000000';\nexport const white = '#ffffff';\n\nexport const transparent = 'rgba(0, 0, 0, 0)';\nexport const fullBlack = 'rgba(0, 0, 0, 1)';\nexport const darkBlack = 'rgba(0, 0, 0, 0.87)';\nexport const lightBlack = 'rgba(0, 0, 0, 0.54)';\nexport const minBlack = 'rgba(0, 0, 0, 0.26)';\nexport const faintBlack = 'rgba(0, 0, 0, 0.12)';\nexport const fullWhite = 'rgba(255, 255, 255, 1)';\nexport const darkWhite = 'rgba(255, 255, 255, 0.87)';\nexport const lightWhite = 'rgba(255, 255, 255, 0.54)';\n"
  },
  {
    "path": "src/theme/dark.js",
    "content": "import * as Colors from './colors';\nexport default {\n  type: 'dark',\n  primary: Colors.blue700,\n  secondary: Colors.pinkA200,\n  success: Colors.green,\n  warning: Colors.yellow600,\n  info: Colors.blue,\n  error: Colors.red,\n  track: Colors.grey600,\n  text: {\n    primary: Colors.white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    alternate: '#303030',\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    hint: 'rgba(255, 255, 255, 0.3)' // 提示文字颜色\n  },\n  divider: 'rgba(255, 255, 255, 0.3)',\n  background: {\n    paper: Colors.grey800,\n    chip: Colors.grey700,\n    default: '#303030'\n  }\n};\n"
  },
  {
    "path": "src/theme/index.js",
    "content": "import BaseTheme from './baseTheme';\nimport ColorTheme from './colorTheme';\nimport light from './light';\nimport dark from './dark';\n\nconst themes = [\n  BaseTheme, ColorTheme\n];\n\nconst vars = {\n  light,\n  dark\n};\n\nfunction getThemeStyle () {\n  const themeId = 'muse-theme';\n  let styleEl = document.getElementById(themeId);\n  if (styleEl) return styleEl;\n  styleEl = document.createElement('style');\n  styleEl.id = themeId;\n  document.body.appendChild(styleEl);\n  return styleEl;\n}\n\nexport default {\n  addCreateTheme (theme) {\n    const length = themes.length;\n    themes.splice(length - 1, 0, theme);\n    return this;\n  },\n  add (name, varObj = {}, extendName = 'light') {\n    const theme = {\n      name,\n      ...vars[extendName],\n      ...varObj\n    };\n    vars[name] = theme;\n    return this;\n  },\n  use (name) {\n    const themeEl = getThemeStyle();\n    themeEl.innerHTML = themes.map((theme) => theme(vars[name], vars[name].type, name)).join(' ');\n    return this;\n  },\n  generate (name) {\n    return themes.map((theme) => theme(vars[name], vars[name].type, name)).join(' ');\n  }\n};\n"
  },
  {
    "path": "src/theme/light.js",
    "content": "import * as Colors from './colors';\nexport default {\n  type: 'light',\n  primary: Colors.blue,\n  secondary: Colors.pinkA200,\n  success: Colors.green,\n  warning: Colors.yellow600,\n  info: Colors.blue,\n  error: Colors.red,\n  track: Colors.grey400,\n  text: {\n    primary: Colors.darkBlack,\n    secondary: Colors.lightBlack,\n    alternate: Colors.white,\n    disabled: 'rgba(0, 0, 0, 0.38)',\n    hint: 'rgba(0, 0, 0, 0.38)' // 提示文字颜色\n  },\n  divider: Colors.faintBlack,\n  background: {\n    paper: Colors.white,\n    chip: Colors.grey300,\n    default: Colors.grey50\n  }\n};\n"
  },
  {
    "path": "src/utils/colorManipulator.js",
    "content": "/**\n * material-ui colorManipulator.js\n * https://github.com/mui-org/material-ui/blob/master/src/utils/colorManipulator.js\n */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp (value, min, max) {\n  if (value < min) {\n    return min;\n  }\n  if (value > max) {\n    return max;\n  }\n  return value;\n}\n\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of, 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function convertColorToString (color) {\n  const { type, values } = color;\n\n  if (type.indexOf('rgb') > -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    for (let i = 0; i < 3; i++) {\n      values[i] = parseInt(values[i]);\n    }\n  }\n\n  let colorString;\n\n  if (type.indexOf('hsl') > -1) {\n    colorString = `${color.type}(${values[0]}, ${values[1]}%, ${values[2]}%`;\n  } else {\n    colorString = `${color.type}(${values[0]}, ${values[1]}, ${values[2]}`;\n  }\n\n  if (values.length === 4) {\n    colorString += `, ${color.values[3]})`;\n  } else {\n    colorString += ')';\n  }\n\n  return colorString;\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n *  @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n *  @returns {string} A CSS rgb color string\n */\nexport function convertHexToRGB (color) {\n  if (color.length === 4) {\n    let extendedColor = '#';\n    for (let i = 1; i < color.length; i++) {\n      extendedColor += color.charAt(i) + color.charAt(i);\n    }\n    color = extendedColor;\n  }\n\n  const values = {\n    r:\tparseInt(color.substr(1, 2), 16),\n    g:\tparseInt(color.substr(3, 2), 16),\n    b:\tparseInt(color.substr(5, 2), 16)\n  };\n\n  return `rgb(${values.r}, ${values.g}, ${values.b})`;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values and color names.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {{type: string, values: number[]}} A MUI color object\n */\nexport function decomposeColor (color) {\n  if (color.charAt(0) === '#') {\n    return decomposeColor(convertHexToRGB(color));\n  }\n\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n  let values = color.substring(marker + 1, color.length - 1).split(',');\n  values = values.map((value) => parseFloat(value));\n\n  return { type, values };\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21 with 2 digit precision.\n */\nexport function getContrastRatio (foreground, background) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background);\n  const contrastRatio = (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n\n  return Number(contrastRatio.toFixed(2)); // Truncate at two digits\n}\n\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/WAI/GL/wiki/Relative_luminance\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance (color) {\n  color = decomposeColor(color);\n\n  if (color.type.indexOf('rgb') > -1) {\n    const rgb = color.values.map((val) => {\n      val /= 255; // normalized\n      return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n    });\n    return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3)); // Truncate at 3 digits\n  } else if (color.type.indexOf('hsl') > -1) {\n    return color.values[2] / 100;\n  }\n}\n\n/**\n * Darken or lighten a colour, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize (color, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function fade (color, value) {\n  color = decomposeColor(color);\n  value = clamp(value, 0, 1);\n\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n  color.values[3] = value;\n\n  return convertColorToString(color);\n}\n\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken (color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient, 0, 1);\n\n  if (color.type.indexOf('hsl') > -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') > -1) {\n    for (let i = 0; i < 3; i++) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n  return convertColorToString(color);\n}\n\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten (color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient, 0, 1);\n\n  if (color.type.indexOf('hsl') > -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') > -1) {\n    for (let i = 0; i < 3; i++) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  }\n\n  return convertColorToString(color);\n}\n"
  },
  {
    "path": "src/utils/dom.js",
    "content": "export function getScrollEventTarget (element) {\n  let currentNode = element;\n  while (currentNode && currentNode.tagName !== 'HTML' && currentNode.nodeType === 1) {\n    const overflowY = window.getComputedStyle(currentNode).overflowY;\n    if (overflowY === 'scroll' || overflowY === 'auto') {\n      return currentNode;\n    }\n    currentNode = currentNode.parentNode;\n  }\n  return window;\n}\n\nexport function getScrollTop (element) {\n  if (element === window) {\n    return Math.max(window.pageYOffset || 0, document.documentElement.scrollTop);\n  } else {\n    return element.scrollTop;\n  }\n}\n\nexport function getOffset (el) {\n  const box = el.getBoundingClientRect();\n  const body = document.body;\n  const clientTop = el.clientTop || body.clientTop || 0;\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\n  const scrollTop = window.pageYOffset || el.scrollTop;\n  const scrollLeft = window.pageXOffset || el.scrollLeft;\n  return {\n    top: box.top + scrollTop - clientTop,\n    left: box.left + scrollLeft - clientLeft\n  };\n}\n\nexport function transitionEnd (el, fun) {\n  const arr = ['msTransitionEnd', 'mozTransitionEnd', 'oTransitionEnd', 'webkitTransitionEnd', 'transitionend'];\n  const handler = {\n    handleEvent (event) {\n      arr.forEach(function (eventName) {\n        el.removeEventListener(eventName, handler, false);\n      });\n      fun.apply(el, arguments);\n    }\n  };\n  arr.forEach(function (eventName) {\n    el.addEventListener(eventName, handler, false);\n  });\n}\n\nexport function hasClass (el, cls) {\n  if (!el || !cls) return false;\n  if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');\n  if (el.classList) {\n    return el.classList.contains(cls);\n  } else {\n    return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;\n  }\n};\n\nexport function addClass (el, cls) {\n  if (!el) return;\n  var curClass = el.className;\n  var classes = (cls || '').split(' ');\n\n  for (var i = 0, j = classes.length; i < j; i++) {\n    var clsName = classes[i];\n    if (!clsName) continue;\n\n    if (el.classList) {\n      el.classList.add(clsName);\n    } else {\n      if (!hasClass(el, clsName)) {\n        curClass += ' ' + clsName;\n      }\n    }\n  }\n  if (!el.classList) {\n    el.className = curClass;\n  }\n};\n\nexport function removeClass (el, cls) {\n  if (!el || !cls) return;\n  var classes = cls.split(' ');\n  var curClass = ' ' + el.className + ' ';\n\n  for (var i = 0, j = classes.length; i < j; i++) {\n    var clsName = classes[i];\n    if (!clsName) continue;\n\n    if (el.classList) {\n      el.classList.remove(clsName);\n    } else {\n      if (hasClass(el, clsName)) {\n        curClass = curClass.replace(' ' + clsName + ' ', ' ');\n      }\n    }\n  }\n  if (!el.classList) {\n    el.className = curClass ? curClass.trim() : curClass;\n  }\n};\n"
  },
  {
    "path": "src/utils/drag.js",
    "content": "const IS_TOUCH = typeof window !== 'undefined' && (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport default class Drag {\n  constructor (element, onlyTouch) {\n    this.el = element;\n    this.startPos = {};\n    this.endPos = {};\n    this.starts = [];\n    this.drags = [];\n    this.ends = [];\n    this.onlyTouch = onlyTouch;\n    if (IS_TOUCH || onlyTouch) {\n      this.el.addEventListener('touchstart', this);\n    } else {\n      this.el.addEventListener('mousedown', this);\n    }\n  }\n  handleEvent (event) {\n    switch (event.type) {\n      case 'touchstart':\n        this.touchStart(event);\n        break;\n      case 'touchmove':\n        this.touchMove(event);\n        break;\n      case 'touchcancel':\n      case 'touchend':\n        this.touchEnd(event);\n        break;\n      case 'mousedown':\n        this.mouseStart(event);\n        break;\n      case 'mousemove':\n        this.mouseMove(event);\n        break;\n      case 'mouseleave':\n      case 'mouseup':\n        this.mouseEnd(event);\n        break;\n    }\n  }\n\n  touchStart (event) {\n    const touch = event.touches[0];\n    this.startPos = { // 取第一个touch的坐标值\n      x: touch.pageX,\n      y: touch.pageY,\n      time: new Date().getTime()\n    };\n    this.endPos = {};\n    document.addEventListener('touchmove', this, {\n      passive: false\n    });\n    document.addEventListener('touchend', this, {\n      passive: false\n    });\n    this.starts.map((func) => {\n      func.call(this, this.startPos, event);\n    });\n  }\n\n  touchMove (event) {\n    if (event.touches.length > 1 || event.scale && event.scale !== 1) return;\n    const touch = event.touches[0];\n    this.endPos = {\n      x: touch.pageX - this.startPos.x,\n      y: touch.pageY - this.startPos.y,\n      time: new Date().getTime() - this.startPos.time\n    };\n    this.drags.map((func) => {\n      func.call(this, this.endPos, event);\n    });\n  }\n\n  touchEnd (event) {\n    this.endPos.time = new Date().getTime() - this.startPos.time;\n\n    document.removeEventListener('touchmove', this);\n    document.removeEventListener('touchend', this);\n    this.ends.map((func) => {\n      func.call(this, this.endPos, event);\n    });\n  }\n\n  mouseStart (event) {\n    this.startPos = {\n      x: event.clientX,\n      y: event.clientY,\n      time: new Date().getTime()\n    };\n    this.endPos = {};\n    document.addEventListener('mousemove', this);\n    document.addEventListener('mouseup', this);\n    this.starts.map((func) => {\n      func.call(this, this.startPos, event);\n    });\n  }\n\n  mouseMove (event) {\n    this.endPos = {\n      x: event.clientX - this.startPos.x,\n      y: event.clientY - this.startPos.y\n    };\n\n    this.drags.map((func) => {\n      func.call(this, this.endPos, event);\n    });\n  }\n\n  mouseEnd (event) {\n    document.removeEventListener('mousemove', this);\n    document.removeEventListener('mouseup', this);\n\n    this.endPos.time = new Date().getTime() - this.startPos.time;\n\n    this.ends.map((func) => {\n      func.call(this, this.endPos, event);\n    });\n  }\n\n  start (fun) {\n    this.starts.push(fun);\n    return this;\n  }\n\n  end (fun) {\n    this.ends.push(fun);\n    return this;\n  }\n\n  drag (fun) {\n    this.drags.push(fun);\n    return this;\n  }\n\n  reset (event) {\n    const touch = event.touches ? event.touches[0] : {};\n    this.startPos = { // 取第一个touch的坐标值\n      x: touch.pageX || event.clientX,\n      y: touch.pageY || event.clientY,\n      time: new Date().getTime()\n    };\n    this.endPos = {\n      x: 0,\n      y: 0\n    };\n  }\n  destory () {\n    if (IS_TOUCH || this.onlyTouch) {\n      this.el.removeEventListener('touchstart', this);\n    } else {\n      this.el.removeEventListener('mousedown', this);\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/index.js",
    "content": "import * as colorsObj from '../theme/colors';\n\nconst colors = Object.keys(colorsObj);\nexport function getColor (color) {\n  if (!color || ['primary', 'secondary', 'success', 'warning', 'info', 'error'].indexOf(color) !== -1) return '';\n  return colors.indexOf(color) !== -1 ? colorsObj[color] : color;\n};\n\nexport function isNotNull (val) {\n  return val !== undefined && val !== null;\n}\n\nexport function isNull (val) {\n  return val === undefined || val === null;\n}\n\nexport function getWidth (w) {\n  let width = String(w);\n  if (width && width.indexOf('%') === -1 && width.indexOf('px') === -1) width += 'px';\n  return width;\n}\n\nexport function isPc () {\n  var uaInfo = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n  var agents = ['Android', 'iPhone', 'Windows Phone', 'iPad', 'iPod'];\n  var flag = true;\n  for (var i = 0; i < agents.length; i++) {\n    if (uaInfo.indexOf(agents[i]) > 0) {\n      flag = false;\n      break;\n    }\n  }\n  return flag;\n}\n\nexport function retina () {\n  // 处理retina屏幕显示效果\n  if (isPc()) return;\n  var classNames = [];\n  const pixelRatio = typeof window !== undefined && window.devicePixelRatio || 1;\n  classNames.push('pixel-ratio-' + Math.floor(pixelRatio));\n  if (pixelRatio >= 2) {\n    classNames.push('retina');\n  }\n\n  const html = document.getElementsByTagName('html')[0];\n\n  classNames.forEach((className) => html.classList.add(className));\n}\n\n/**\n * 将 String, Object, Array 转成 Array\n */\nexport function convertClass (classes) {\n  let newClasses = [];\n  if (!classes) return newClasses;\n  if (classes instanceof Array) {\n    newClasses = newClasses.concat(classes);\n  } else if (classes instanceof Object) {\n    for (const name in classes) {\n      if (classes[name]) newClasses.push(name);\n    }\n  } else {\n    newClasses = newClasses.concat(classes.split(' '));\n  }\n  return newClasses;\n}\n\nexport function createSimpleFunctional (c, el = 'div', name) {\n  return {\n    name,\n    functional: true,\n\n    render: (h, { data, children }) => {\n      data.staticClass = (`${c} ${data.staticClass || ''}`).trim();\n\n      return h(el, data, children);\n    }\n  };\n}\n\nexport function getFirstComponentChild (children) {\n  return children && children.filter(c => c && c.tag)[0];\n};\n\nexport function isPromise (val) {\n  return val && typeof val.then === 'function';\n}\n\nexport function isObject (val) {\n  return val !== null && val && typeof val === 'object' && !Array.isArray(val);\n}\n\nexport function getObjAttr (obj, attrs) {\n  if (!obj || !attrs) return;\n  let value = obj;\n  attrs.split('.').forEach((key, index) => {\n    if (!value) return;\n    value = value[key];\n  });\n  return value;\n}\n\nexport function setObjAttr (obj, attrs, value) {\n  attrs.split('.').forEach((key, index) => {\n    if (attrs.length - index <= 1) {\n      obj[key] = value;\n      return;\n    }\n    obj = obj[key];\n  });\n}\n"
  },
  {
    "path": "src/utils/resize-event.js",
    "content": "import ResizeObserver from 'resize-observer-polyfill';\n\nconst isServer = typeof window === 'undefined';\n\nconst resizeHandler = function (entries) {\n  for (const entry of entries) {\n    const listeners = entry.target.__resizeListeners__ || [];\n    if (listeners.length) {\n      listeners.forEach(fn => {\n        fn();\n      });\n    }\n  }\n};\n\nexport const addResizeListener = function (element, fn) {\n  if (isServer) return;\n  if (!element.__resizeListeners__) {\n    element.__resizeListeners__ = [];\n    element.__ro__ = new ResizeObserver(resizeHandler);\n    element.__ro__.observe(element);\n  }\n  element.__resizeListeners__.push(fn);\n};\n\nexport const removeResizeListener = function (element, fn) {\n  if (!element || !element.__resizeListeners__) return;\n  element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n  if (!element.__resizeListeners__.length) {\n    element.__ro__.disconnect();\n  }\n};\n"
  },
  {
    "path": "src/utils/testing.js",
    "content": "import Vue from 'vue';\nimport { mount, shallow } from 'avoriaz';\nimport toHaveBeenWarnedInit from './to-have-ben-warned';\nimport MuseUI from '../index';\n\nexport default function test (name, cb) {\n  toHaveBeenWarnedInit();\n\n  MuseUI.install(Vue);\n\n  rafPolyfill(window);\n\n  describe(name, () =>\n    cb({\n      functionalContext,\n      mount,\n      shallow\n    })\n  );\n}\n\ntest.skip = describe.skip;\n\nfunction functionalContext (context = {}, children = []) {\n  if (!Array.isArray(children)) children = [children];\n  return {\n    context: Object.assign(\n      {\n        data: {},\n        props: {}\n      },\n      context\n    ),\n    children\n  };\n}\n\n// requestAnimationFrame polyfill | Milos Djakonovic ( @Miloshio ) | MIT | https://github.com/milosdjakonovic/requestAnimationFrame-polyfill\nfunction rafPolyfill (w) {\n  const FRAME_RATE_INTERVAL = 1000 / 60;\n  let allCallbacks = [];\n  let executeAllScheduled = false;\n  let shouldCheckCancelRaf = false;\n  const callbacksForCancellation = [];\n  function isToBeCancelled (cb) {\n    for (var i = 0; i < callbacksForCancellation.length; i++) {\n      if (callbacksForCancellation[i] === cb) {\n        callbacksForCancellation.splice(i, 1);\n        return true;\n      }\n    }\n  }\n  function executeAll () {\n    executeAllScheduled = false;\n    var _allCallbacks = allCallbacks;\n    allCallbacks = [];\n    for (var i = 0; i < _allCallbacks.length; i++) {\n      if (shouldCheckCancelRaf === true) {\n        if (isToBeCancelled(_allCallbacks[i])) {\n          shouldCheckCancelRaf = false;\n          return;\n        }\n      }\n      _allCallbacks[i].apply(w, [new Date().getTime()]);\n    }\n  }\n  function raf (callback) {\n    allCallbacks.push(callback);\n    if (executeAllScheduled === false) {\n      w.setTimeout(executeAll, FRAME_RATE_INTERVAL);\n      executeAllScheduled = true;\n    }\n    return callback;\n  }\n  function cancelRaf (callback) {\n    callbacksForCancellation.push(callback);\n    shouldCheckCancelRaf = true;\n  }\n  // https://gist.github.com/paulirish/1579671\n  const vendors = ['ms', 'moz', 'webkit', 'o'];\n\n  for (var x = 0; x < vendors.length && !w.requestAnimationFrame; ++x) {\n    w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame'];\n    w.cancelAnimationFrame =\n      w[vendors[x] + 'CancelAnimationFrame'] ||\n      w[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (!w.requestAnimationFrame) w.requestAnimationFrame = raf;\n  if (!w.cancelAnimationFrame) w.cancelAnimationFrame = cancelRaf;\n}\n"
  },
  {
    "path": "src/utils/to-have-ben-warned.js",
    "content": "/*eslint-disable*/\nfunction noop () {}\n\nif (typeof console === 'undefined') {\n  window.console = {\n    warn: noop,\n    error: noop\n  };\n}\n\n// avoid info messages during test\nconsole.info = noop;\n\nconst asserted = [];\n\nfunction createCompareFn (spy) {\n  const hasWarned = msg => {\n    for (const args of spy.calls.allArgs()) {\n      if (args.some(arg => arg.toString().includes(msg))) return true;\n    }\n    return false;\n  };\n\n  return {\n    compare: msg => {\n      asserted.push(msg);\n      const warned = Array.isArray(msg) ? msg.some(hasWarned) : hasWarned(msg);\n      return {\n        pass: warned,\n        message: warned\n          ? () => `Expected message \"${msg}\" not to have been warned`\n          : () => `Expected message \"${msg}\" to have been warned`\n      };\n    }\n  };\n}\n\nfunction toHaveBeenWarnedInit () {\n  // define custom matcher for warnings\n  beforeEach(() => {\n    asserted.length = 0;\n    spyOn(console, 'warn');\n    spyOn(console, 'error');\n    jasmine.addMatchers({\n      toHaveBeenWarned: () => createCompareFn(console.error),\n      toHaveBeenTipped: () => createCompareFn(console.warn)\n    });\n  });\n\n  afterEach(done => {\n    for (const type of ['error', 'warn']) {\n      const warned = msg =>\n        asserted.some(assertedMsg => msg.toString().includes(assertedMsg));\n      for (const args of console[type].calls.allArgs()) {\n        if (!warned(args[0])) {\n          done.fail(`Unexpected console.${type} message: ${args[0]}`);\n          return;\n        }\n      }\n    }\n    done();\n  });\n}\n\nexport default toHaveBeenWarnedInit;\n"
  },
  {
    "path": "src/utils/translate.js",
    "content": "var docStyle = typeof document !== 'undefined' ? document.documentElement.style : {};\nvar engine;\nvar translate3d = false;\n\nif (typeof window !== 'undefined' && window.opera && Object.prototype.toString.call(window.opera) === '[object Opera]') {\n  engine = 'presto';\n} else if ('MozAppearance' in docStyle) {\n  engine = 'gecko';\n} else if ('WebkitAppearance' in docStyle) {\n  engine = 'webkit';\n} else if (typeof navigator !== 'undefined' && typeof navigator.cpuClass === 'string') {\n  engine = 'trident';\n} else {\n  engine = 'node';\n}\n\nvar cssPrefix = { trident: '-ms-', gecko: '-moz-', webkit: '-webkit-', presto: '-o-' }[engine];\n\nvar vendorPrefix = { trident: 'ms', gecko: 'Moz', webkit: 'Webkit', presto: 'O' }[engine];\n\nvar helperElem = typeof document !== 'undefined' ? document.createElement('div') : {};\nvar perspectiveProperty = vendorPrefix + 'Perspective';\nvar transformProperty = vendorPrefix + 'Transform';\nvar transformStyleName = cssPrefix + 'transform';\nvar transitionProperty = vendorPrefix + 'Transition';\nvar transitionStyleName = cssPrefix + 'transition';\nvar transitionEndProperty = (vendorPrefix || '').toLowerCase() + 'TransitionEnd';\n\nif (helperElem.style && helperElem.style[perspectiveProperty] !== undefined) {\n  translate3d = true;\n}\n\nvar getTranslate = function (element) {\n  var result = { left: 0, top: 0 };\n  if (element === null || element.style === null) return result;\n\n  var transform = element.style[transformProperty];\n  var matches = /translate\\(\\s*(-?\\d+(\\.?\\d+?)?)px,\\s*(-?\\d+(\\.\\d+)?)px\\)\\s*translateZ\\(0px\\)/g.exec(transform);\n  if (matches) {\n    result.left = +matches[1];\n    result.top = +matches[3];\n  }\n\n  return result;\n};\n\nvar translateElement = function (element, x, y) {\n  if (x === null && y === null) return;\n\n  if (element === null || element.style === null) return;\n\n  if (!element.style[transformProperty] && x === 0 && y === 0) return;\n\n  if (x === null || y === null) {\n    var translate = getTranslate(element);\n    if (x === null) {\n      x = translate.left;\n    }\n    if (y === null) {\n      y = translate.top;\n    }\n  }\n\n  cancelTranslateElement(element);\n\n  if (translate3d) {\n    element.style[transformProperty] += ' translate(' + (x ? x + 'px' : '0px') + ',' + (y ? y + 'px' : '0px') + ') translateZ(0px)';\n  } else {\n    element.style[transformProperty] += ' translate(' + (x ? x + 'px' : '0px') + ',' + (y ? y + 'px' : '0px') + ')';\n  }\n};\n\nvar cancelTranslateElement = function (element) {\n  if (element === null || element.style === null) return;\n  var transformValue = element.style[transformProperty];\n  if (transformValue) {\n    transformValue = transformValue.replace(/translate\\(\\s*(-?\\d+(\\.?\\d+?)?)px,\\s*(-?\\d+(\\.\\d+)?)px\\)\\s*translateZ\\(0px\\)/g, '');\n    element.style[transformProperty] = transformValue;\n  }\n};\n\nexport default {\n  transformProperty: transformProperty,\n  transformStyleName: transformStyleName,\n  transitionProperty: transitionProperty,\n  transitionStyleName: transitionStyleName,\n  transitionEndProperty: transitionEndProperty,\n  getElementTranslate: getTranslate,\n  translateElement: translateElement,\n  cancelTranslateElement: cancelTranslateElement\n};\n"
  },
  {
    "path": "types/index.d.ts",
    "content": "export * from './muse-ui';\n\nimport * as MuseUI from './muse-ui';\nexport default MuseUI;\n\ndeclare module './muse-ui/lib/theme' {\n  import * as MuseUI from './muse-ui';\n  export default MuseUI.theme;\n}\n\ndeclare module './muse-ui/lib/theme/colors' {\n  import * as MuseUI from './muse-ui';\n  export default MuseUI.Colors;\n}\n"
  },
  {
    "path": "types/muse-ui.d.ts",
    "content": "import Vue, { PluginObject, PluginFunction } from 'vue';\nimport { MuTheme } from './theme';\n\n/** The version of muse-ui */\nexport const version: string;\n\n/**\n * Install all muse-ui components into Vue.\n * Please do not invoke this method directly.\n * Call `Vue.use(MuseUI)` to install.\n */\nexport const install: PluginFunction<never>;\nexport const Colors: { [key: string]: string };\nexport const theme: MuTheme;\n\n// components\nexport const Alert: PluginObject<never>;\nexport const AppBar: PluginObject<never>;\nexport const AutoComplete: PluginObject<never>;\nexport const Avatar: PluginObject<never>;\nexport const Badge: PluginObject<never>;\nexport const BottomNav: PluginObject<never>;\nexport const BottomSheet: PluginObject<never>;\nexport const Breadcrumbs: PluginObject<never>;\nexport const Button: PluginObject<never>;\nexport const Card: PluginObject<never>;\nexport const Carousel: PluginObject<never>;\nexport const Checkbox: PluginObject<never>;\nexport const Chip: PluginObject<never>;\nexport const DateInput: PluginObject<never>;\nexport const DataTable: PluginObject<never>;\nexport const Dialog: PluginObject<never>;\nexport const Divider: PluginObject<never>;\nexport const Drawer: PluginObject<never>;\nexport const ExpansionPanel: PluginObject<never>;\nexport const Form: PluginObject<never>;\nexport const Grid: PluginObject<never>;\nexport const GridList: PluginObject<never>;\nexport const Helpers: PluginObject<never>;\nexport const Icon: PluginObject<never>;\nexport const List: PluginObject<never>;\nexport const LoadMore: PluginObject<never>;\nexport const Menu: PluginObject<never>;\nexport const Pagination: PluginObject<never>;\nexport const Paper: PluginObject<never>;\nexport const Picker: PluginObject<never>;\nexport const Popover: PluginObject<never>;\nexport const Progress: PluginObject<never>;\nexport const Radio: PluginObject<never>;\nexport const Select: PluginObject<never>;\nexport const SlidePicker: PluginObject<never>;\nexport const Slider: PluginObject<never>;\nexport const Snackbar: PluginObject<never>;\nexport const Stepper: PluginObject<never>;\nexport const SubHeader: PluginObject<never>;\nexport const Switch: PluginObject<never>;\nexport const Tabs: PluginObject<never>;\nexport const TextField: PluginObject<never>;\nexport const Tooltip: PluginObject<never>;\n"
  },
  {
    "path": "types/theme.d.ts",
    "content": "export interface ThemeOptions {\n  type?: string;\n  primary?: string;\n  secondary?: string;\n  success?: string;\n  warning?: string;\n  info?: string;\n  error?: string;\n  track?: string;\n  text?: {\n    primary?: string;\n    secondary?: string;\n    alternate?: string;\n    disabled?: string;\n    hint?: string;\n  };\n  divider?: string;\n  background?: {\n    paper?: string;\n    chip?: string;\n    default?: string;\n  };\n}\nexport type ThemeType = 'dark' | 'light';\n\nexport interface ThemeFunction {\n  (theme: ThemeOptions, type: ThemeType, name: string): void;\n}\n\nexport interface MuTheme {\n  addCreateTheme(theme: ThemeFunction): MuTheme;\n  use(name: string): MuTheme;\n  add(name: string, options: ThemeOptions, extendName: string): MuTheme;\n  generate(name: string): string;\n}\n"
  }
]