执行过npm install命令的vue-element-admin源码
康凯
2022-05-20 aa4c235a8ca67ea8b731f90c951a465e92c0a865
1
{"remainingRequest":"D:\\源码\\vue-element-admin-master\\node_modules\\babel-loader\\lib\\index.js!D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\源码\\vue-element-admin-master\\src\\views\\login\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\views\\login\\index.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\babel.config.js","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KaW1wb3J0IHsgdmFsaWRVc2VybmFtZSB9IGZyb20gJ0AvdXRpbHMvdmFsaWRhdGUnOwppbXBvcnQgU29jaWFsU2lnbiBmcm9tICcuL2NvbXBvbmVudHMvU29jaWFsU2lnbmluJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdMb2dpbicsCiAgY29tcG9uZW50czogewogICAgU29jaWFsU2lnbjogU29jaWFsU2lnbgogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHZhciB2YWxpZGF0ZVVzZXJuYW1lID0gZnVuY3Rpb24gdmFsaWRhdGVVc2VybmFtZShydWxlLCB2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgaWYgKCF2YWxpZFVzZXJuYW1lKHZhbHVlKSkgewogICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignUGxlYXNlIGVudGVyIHRoZSBjb3JyZWN0IHVzZXIgbmFtZScpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9OwoKICAgIHZhciB2YWxpZGF0ZVBhc3N3b3JkID0gZnVuY3Rpb24gdmFsaWRhdGVQYXNzd29yZChydWxlLCB2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDYpIHsKICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ1RoZSBwYXNzd29yZCBjYW4gbm90IGJlIGxlc3MgdGhhbiA2IGRpZ2l0cycpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9OwoKICAgIHJldHVybiB7CiAgICAgIGxvZ2luRm9ybTogewogICAgICAgIHVzZXJuYW1lOiAnYWRtaW4nLAogICAgICAgIHBhc3N3b3JkOiAnMTExMTExJwogICAgICB9LAogICAgICBsb2dpblJ1bGVzOiB7CiAgICAgICAgdXNlcm5hbWU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIHRyaWdnZXI6ICdibHVyJywKICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRhdGVVc2VybmFtZQogICAgICAgIH1dLAogICAgICAgIHBhc3N3b3JkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICB0cmlnZ2VyOiAnYmx1cicsCiAgICAgICAgICB2YWxpZGF0b3I6IHZhbGlkYXRlUGFzc3dvcmQKICAgICAgICB9XQogICAgICB9LAogICAgICBwYXNzd29yZFR5cGU6ICdwYXNzd29yZCcsCiAgICAgIGNhcHNUb29sdGlwOiBmYWxzZSwKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIHNob3dEaWFsb2c6IGZhbHNlLAogICAgICByZWRpcmVjdDogdW5kZWZpbmVkLAogICAgICBvdGhlclF1ZXJ5OiB7fQogICAgfTsKICB9LAogIHdhdGNoOiB7CiAgICAkcm91dGU6IHsKICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihyb3V0ZSkgewogICAgICAgIHZhciBxdWVyeSA9IHJvdXRlLnF1ZXJ5OwoKICAgICAgICBpZiAocXVlcnkpIHsKICAgICAgICAgIHRoaXMucmVkaXJlY3QgPSBxdWVyeS5yZWRpcmVjdDsKICAgICAgICAgIHRoaXMub3RoZXJRdWVyeSA9IHRoaXMuZ2V0T3RoZXJRdWVyeShxdWVyeSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbW1lZGlhdGU6IHRydWUKICAgIH0KICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7Ly8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCB0aGlzLmFmdGVyUVJTY2FuKQogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIGlmICh0aGlzLmxvZ2luRm9ybS51c2VybmFtZSA9PT0gJycpIHsKICAgICAgdGhpcy4kcmVmcy51c2VybmFtZS5mb2N1cygpOwogICAgfSBlbHNlIGlmICh0aGlzLmxvZ2luRm9ybS5wYXNzd29yZCA9PT0gJycpIHsKICAgICAgdGhpcy4kcmVmcy5wYXNzd29yZC5mb2N1cygpOwogICAgfQogIH0sCiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7Ly8gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCB0aGlzLmFmdGVyUVJTY2FuKQogIH0sCiAgbWV0aG9kczogewogICAgY2hlY2tDYXBzbG9jazogZnVuY3Rpb24gY2hlY2tDYXBzbG9jayhlKSB7CiAgICAgIHZhciBrZXkgPSBlLmtleTsKICAgICAgdGhpcy5jYXBzVG9vbHRpcCA9IGtleSAmJiBrZXkubGVuZ3RoID09PSAxICYmIGtleSA+PSAnQScgJiYga2V5IDw9ICdaJzsKICAgIH0sCiAgICBzaG93UHdkOiBmdW5jdGlvbiBzaG93UHdkKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgaWYgKHRoaXMucGFzc3dvcmRUeXBlID09PSAncGFzc3dvcmQnKSB7CiAgICAgICAgdGhpcy5wYXNzd29yZFR5cGUgPSAnJzsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnBhc3N3b3JkVHlwZSA9ICdwYXNzd29yZCc7CiAgICAgIH0KCiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpcy4kcmVmcy5wYXNzd29yZC5mb2N1cygpOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVMb2dpbjogZnVuY3Rpb24gaGFuZGxlTG9naW4oKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgdGhpcy4kcmVmcy5sb2dpbkZvcm0udmFsaWRhdGUoZnVuY3Rpb24gKHZhbGlkKSB7CiAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICBfdGhpczIubG9hZGluZyA9IHRydWU7CgogICAgICAgICAgX3RoaXMyLiRzdG9yZS5kaXNwYXRjaCgndXNlci9sb2dpbicsIF90aGlzMi5sb2dpbkZvcm0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICBfdGhpczIuJHJvdXRlci5wdXNoKHsKICAgICAgICAgICAgICBwYXRoOiBfdGhpczIucmVkaXJlY3QgfHwgJy8nLAogICAgICAgICAgICAgIHF1ZXJ5OiBfdGhpczIub3RoZXJRdWVyeQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIF90aGlzMi5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF90aGlzMi5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIHN1Ym1pdCEhJyk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBnZXRPdGhlclF1ZXJ5OiBmdW5jdGlvbiBnZXRPdGhlclF1ZXJ5KHF1ZXJ5KSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cikgewogICAgICAgIGlmIChjdXIgIT09ICdyZWRpcmVjdCcpIHsKICAgICAgICAgIGFjY1tjdXJdID0gcXVlcnlbY3VyXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIHt9KTsKICAgIH0gLy8gYWZ0ZXJRUlNjYW4oKSB7CiAgICAvLyAgIGlmIChlLmtleSA9PT0gJ3gtYWRtaW4tb2F1dGgtY29kZScpIHsKICAgIC8vICAgICBjb25zdCBjb2RlID0gZ2V0UXVlcnlPYmplY3QoZS5uZXdWYWx1ZSkKICAgIC8vICAgICBjb25zdCBjb2RlTWFwID0gewogICAgLy8gICAgICAgd2VjaGF0OiAnY29kZScsCiAgICAvLyAgICAgICB0ZW5jZW50OiAnY29kZScKICAgIC8vICAgICB9CiAgICAvLyAgICAgY29uc3QgdHlwZSA9IGNvZGVNYXBbdGhpcy5hdXRoX3R5cGVdCiAgICAvLyAgICAgY29uc3QgY29kZU5hbWUgPSBjb2RlW3R5cGVdCiAgICAvLyAgICAgaWYgKGNvZGVOYW1lKSB7CiAgICAvLyAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnTG9naW5CeVRoaXJkcGFydHknLCBjb2RlTmFtZSkudGhlbigoKSA9PiB7CiAgICAvLyAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogdGhpcy5yZWRpcmVjdCB8fCAnLycgfSkKICAgIC8vICAgICAgIH0pCiAgICAvLyAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgIGFsZXJ0KCfnrKzkuInmlrnnmbvlvZXlpLHotKUnKQogICAgLy8gICAgIH0KICAgIC8vICAgfQogICAgLy8gfQoKICB9Cn07"},{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EA;AACA;AAEA;EACAA,aADA;EAEAC;IAAAC;EAAA,CAFA;EAGAC,IAHA,kBAGA;IACA;MACA;QACAC;MACA,CAFA,MAEA;QACAA;MACA;IACA,CANA;;IAOA;MACA;QACAA;MACA,CAFA,MAEA;QACAA;MACA;IACA,CANA;;IAOA;MACAC;QACAC,iBADA;QAEAC;MAFA,CADA;MAKAC;QACAF;UAAAG;UAAAC;UAAAC;QAAA,EADA;QAEAJ;UAAAE;UAAAC;UAAAC;QAAA;MAFA,CALA;MASAC,wBATA;MAUAC,kBAVA;MAWAC,cAXA;MAYAC,iBAZA;MAaAC,mBAbA;MAcAC;IAdA;EAgBA,CAlCA;EAmCAC;IACAC;MACAC;QACA;;QACA;UACA;UACA;QACA;MACA,CAPA;MAQAC;IARA;EADA,CAnCA;EA+CAC,OA/CA,qBA+CA,CACA;EACA,CAjDA;EAkDAC,OAlDA,qBAkDA;IACA;MACA;IACA,CAFA,MAEA;MACA;IACA;EACA,CAxDA;EAyDAC,SAzDA,uBAyDA,CACA;EACA,CA3DA;EA4DAC;IACAC,aADA,yBACAC,CADA,EACA;MACA;MACA;IACA,CAJA;IAKAC,OALA,qBAKA;MAAA;;MACA;QACA;MACA,CAFA,MAEA;QACA;MACA;;MACA;QACA;MACA,CAFA;IAGA,CAdA;IAeAC,WAfA,yBAeA;MAAA;;MACA;QACA;UACA;;UACA,uDACAC,IADA,CACA;YACA;cAAAC;cAAAC;YAAA;;YACA;UACA,CAJA,EAKAC,KALA,CAKA;YACA;UACA,CAPA;QAQA,CAVA,MAUA;UACAC;UACA;QACA;MACA,CAfA;IAgBA,CAhCA;IAiCAC,aAjCA,yBAiCAH,KAjCA,EAiCA;MACA;QACA;UACAI;QACA;;QACA;MACA,CALA,EAKA,EALA;IAMA,CAxCA,CAyCA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EA1DA;AA5DA","names":["name","components","SocialSign","data","callback","loginForm","username","password","loginRules","required","trigger","validator","passwordType","capsTooltip","loading","showDialog","redirect","otherQuery","watch","$route","handler","immediate","created","mounted","destroyed","methods","checkCapslock","e","showPwd","handleLogin","then","path","query","catch","console","getOtherQuery","acc"],"sourceRoot":"src/views/login","sources":["index.vue"],"sourcesContent":["<template>\n  <div class=\"login-container\">\n    <el-form ref=\"loginForm\" :model=\"loginForm\" :rules=\"loginRules\" class=\"login-form\" autocomplete=\"on\" label-position=\"left\">\n\n      <div class=\"title-container\">\n        <h3 class=\"title\">Login Form</h3>\n      </div>\n\n      <el-form-item prop=\"username\">\n        <span class=\"svg-container\">\n          <svg-icon icon-class=\"user\" />\n        </span>\n        <el-input\n          ref=\"username\"\n          v-model=\"loginForm.username\"\n          placeholder=\"Username\"\n          name=\"username\"\n          type=\"text\"\n          tabindex=\"1\"\n          autocomplete=\"on\"\n        />\n      </el-form-item>\n\n      <el-tooltip v-model=\"capsTooltip\" content=\"Caps lock is On\" placement=\"right\" manual>\n        <el-form-item prop=\"password\">\n          <span class=\"svg-container\">\n            <svg-icon icon-class=\"password\" />\n          </span>\n          <el-input\n            :key=\"passwordType\"\n            ref=\"password\"\n            v-model=\"loginForm.password\"\n            :type=\"passwordType\"\n            placeholder=\"Password\"\n            name=\"password\"\n            tabindex=\"2\"\n            autocomplete=\"on\"\n            @keyup.native=\"checkCapslock\"\n            @blur=\"capsTooltip = false\"\n            @keyup.enter.native=\"handleLogin\"\n          />\n          <span class=\"show-pwd\" @click=\"showPwd\">\n            <svg-icon :icon-class=\"passwordType === 'password' ? 'eye' : 'eye-open'\" />\n          </span>\n        </el-form-item>\n      </el-tooltip>\n\n      <el-button :loading=\"loading\" type=\"primary\" style=\"width:100%;margin-bottom:30px;\" @click.native.prevent=\"handleLogin\">Login</el-button>\n\n      <div style=\"position:relative\">\n        <div class=\"tips\">\n          <span>Username : admin</span>\n          <span>Password : any</span>\n        </div>\n        <div class=\"tips\">\n          <span style=\"margin-right:18px;\">Username : editor</span>\n          <span>Password : any</span>\n        </div>\n\n        <el-button class=\"thirdparty-button\" type=\"primary\" @click=\"showDialog=true\">\n          Or connect with\n        </el-button>\n      </div>\n    </el-form>\n\n    <el-dialog title=\"Or connect with\" :visible.sync=\"showDialog\">\n      Can not be simulated on local, so please combine you own business simulation! ! !\n      <br>\n      <br>\n      <br>\n      <social-sign />\n    </el-dialog>\n  </div>\n</template>\n\n<script>\nimport { validUsername } from '@/utils/validate'\nimport SocialSign from './components/SocialSignin'\n\nexport default {\n  name: 'Login',\n  components: { SocialSign },\n  data() {\n    const validateUsername = (rule, value, callback) => {\n      if (!validUsername(value)) {\n        callback(new Error('Please enter the correct user name'))\n      } else {\n        callback()\n      }\n    }\n    const validatePassword = (rule, value, callback) => {\n      if (value.length < 6) {\n        callback(new Error('The password can not be less than 6 digits'))\n      } else {\n        callback()\n      }\n    }\n    return {\n      loginForm: {\n        username: 'admin',\n        password: '111111'\n      },\n      loginRules: {\n        username: [{ required: true, trigger: 'blur', validator: validateUsername }],\n        password: [{ required: true, trigger: 'blur', validator: validatePassword }]\n      },\n      passwordType: 'password',\n      capsTooltip: false,\n      loading: false,\n      showDialog: false,\n      redirect: undefined,\n      otherQuery: {}\n    }\n  },\n  watch: {\n    $route: {\n      handler: function(route) {\n        const query = route.query\n        if (query) {\n          this.redirect = query.redirect\n          this.otherQuery = this.getOtherQuery(query)\n        }\n      },\n      immediate: true\n    }\n  },\n  created() {\n    // window.addEventListener('storage', this.afterQRScan)\n  },\n  mounted() {\n    if (this.loginForm.username === '') {\n      this.$refs.username.focus()\n    } else if (this.loginForm.password === '') {\n      this.$refs.password.focus()\n    }\n  },\n  destroyed() {\n    // window.removeEventListener('storage', this.afterQRScan)\n  },\n  methods: {\n    checkCapslock(e) {\n      const { key } = e\n      this.capsTooltip = key && key.length === 1 && (key >= 'A' && key <= 'Z')\n    },\n    showPwd() {\n      if (this.passwordType === 'password') {\n        this.passwordType = ''\n      } else {\n        this.passwordType = 'password'\n      }\n      this.$nextTick(() => {\n        this.$refs.password.focus()\n      })\n    },\n    handleLogin() {\n      this.$refs.loginForm.validate(valid => {\n        if (valid) {\n          this.loading = true\n          this.$store.dispatch('user/login', this.loginForm)\n            .then(() => {\n              this.$router.push({ path: this.redirect || '/', query: this.otherQuery })\n              this.loading = false\n            })\n            .catch(() => {\n              this.loading = false\n            })\n        } else {\n          console.log('error submit!!')\n          return false\n        }\n      })\n    },\n    getOtherQuery(query) {\n      return Object.keys(query).reduce((acc, cur) => {\n        if (cur !== 'redirect') {\n          acc[cur] = query[cur]\n        }\n        return acc\n      }, {})\n    }\n    // afterQRScan() {\n    //   if (e.key === 'x-admin-oauth-code') {\n    //     const code = getQueryObject(e.newValue)\n    //     const codeMap = {\n    //       wechat: 'code',\n    //       tencent: 'code'\n    //     }\n    //     const type = codeMap[this.auth_type]\n    //     const codeName = code[type]\n    //     if (codeName) {\n    //       this.$store.dispatch('LoginByThirdparty', codeName).then(() => {\n    //         this.$router.push({ path: this.redirect || '/' })\n    //       })\n    //     } else {\n    //       alert('第三方登录失败')\n    //     }\n    //   }\n    // }\n  }\n}\n</script>\n\n<style lang=\"scss\">\n/* 修复input 背景不协调 和光标变色 */\n/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */\n\n$bg:#283443;\n$light_gray:#fff;\n$cursor: #fff;\n\n@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {\n  .login-container .el-input input {\n    color: $cursor;\n  }\n}\n\n/* reset element-ui css */\n.login-container {\n  .el-input {\n    display: inline-block;\n    height: 47px;\n    width: 85%;\n\n    input {\n      background: transparent;\n      border: 0px;\n      -webkit-appearance: none;\n      border-radius: 0px;\n      padding: 12px 5px 12px 15px;\n      color: $light_gray;\n      height: 47px;\n      caret-color: $cursor;\n\n      &:-webkit-autofill {\n        box-shadow: 0 0 0px 1000px $bg inset !important;\n        -webkit-text-fill-color: $cursor !important;\n      }\n    }\n  }\n\n  .el-form-item {\n    border: 1px solid rgba(255, 255, 255, 0.1);\n    background: rgba(0, 0, 0, 0.1);\n    border-radius: 5px;\n    color: #454545;\n  }\n}\n</style>\n\n<style lang=\"scss\" scoped>\n$bg:#2d3a4b;\n$dark_gray:#889aa4;\n$light_gray:#eee;\n\n.login-container {\n  min-height: 100%;\n  width: 100%;\n  background-color: $bg;\n  overflow: hidden;\n\n  .login-form {\n    position: relative;\n    width: 520px;\n    max-width: 100%;\n    padding: 160px 35px 0;\n    margin: 0 auto;\n    overflow: hidden;\n  }\n\n  .tips {\n    font-size: 14px;\n    color: #fff;\n    margin-bottom: 10px;\n\n    span {\n      &:first-of-type {\n        margin-right: 16px;\n      }\n    }\n  }\n\n  .svg-container {\n    padding: 6px 5px 6px 15px;\n    color: $dark_gray;\n    vertical-align: middle;\n    width: 30px;\n    display: inline-block;\n  }\n\n  .title-container {\n    position: relative;\n\n    .title {\n      font-size: 26px;\n      color: $light_gray;\n      margin: 0px auto 40px auto;\n      text-align: center;\n      font-weight: bold;\n    }\n  }\n\n  .show-pwd {\n    position: absolute;\n    right: 10px;\n    top: 7px;\n    font-size: 16px;\n    color: $dark_gray;\n    cursor: pointer;\n    user-select: none;\n  }\n\n  .thirdparty-button {\n    position: absolute;\n    right: 0;\n    bottom: 6px;\n  }\n\n  @media only screen and (max-width: 470px) {\n    .thirdparty-button {\n      display: none;\n    }\n  }\n}\n</style>\n"]}]}