diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..d6471a3
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,2 @@
+> 1%
+last 2 versions
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..41bf611
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,21 @@
+module.exports = {
+ root: true,
+ env: {
+ node: true,
+ },
+ extends: ['plugin:vue/recommended', '@vue/airbnb'],
+ parserOptions: {
+ parser: 'babel-eslint',
+ },
+ rules: {
+ 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+
+ semi: ['error', 'never'],
+ 'max-len': 'off',
+ 'linebreak-style': 'off',
+ camelcase: ['error', { properties: 'never', ignoreDestructuring: true, ignoreImports: true }],
+ 'arrow-parens': ['error', 'as-needed'],
+ 'vue/multiline-html-element-content-newline': 'off',
+ },
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..00991b9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,29 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode/*
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+!.vscode/*.code-snippets
+
+# script
+/Rexo-scripts
+
+# Docs
+/docs/.temp
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..1a331d2
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,4 @@
+dist
+dev/assets/vendor
+node_modules
+src/node_modules
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..41f668a
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# Rexo-UI - VueJS & HTML 网站/后台管理模板
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..df19538
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ presets: [
+ '@vue/cli-plugin-babel/preset',
+ ],
+}
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..ecc10f4
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"],
+ "@core/*": ["src/@core/*"],
+ }
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..efd04fc
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,14774 @@
+{
+ "name": "rexo-ui-vuejs-html-admin-dashboard-template",
+ "version": "1.7.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.0.tgz?cache=0&sync_timestamp=1635560663383&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.16.0.tgz",
+ "integrity": "sha1-DfyAMJvuyEEeZecGRhxAiwu5tDE=",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.0"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmmirror.com/@babel/compat-data/download/@babel/compat-data-7.16.4.tgz?cache=0&sync_timestamp=1637102917946&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.16.4.tgz",
+ "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.16.5.tgz",
+ "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.5",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helpers": "^7.16.5",
+ "@babel/parser": "^7.16.5",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
+ "@babel/types": "^7.16.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.1.2",
+ "semver": "^6.3.0",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.16.5.tgz",
+ "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&sync_timestamp=1635560944976&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz",
+ "integrity": "sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.3.tgz?cache=0&sync_timestamp=1636494857717&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.16.3.tgz",
+ "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.0",
+ "@babel/helper-validator-option": "^7.14.5",
+ "browserslist": "^4.17.5",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.5.tgz",
+ "integrity": "sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-member-expression-to-functions": "^7.16.5",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.5",
+ "@babel/helper-split-export-declaration": "^7.16.0"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.0.tgz?cache=0&sync_timestamp=1635566958507&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.16.0.tgz",
+ "integrity": "sha1-BrI0jON/zMT14Y3NjXUFPyp8RP8=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "regexpu-core": "^4.7.1"
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.3.0.tgz?cache=0&sync_timestamp=1636799963185&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-define-polyfill-provider%2Fdownload%2F%40babel%2Fhelper-define-polyfill-provider-0.3.0.tgz",
+ "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.5.tgz",
+ "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.0.tgz",
+ "integrity": "sha1-dTAXM3oV9G+cCfZ0z/EM7pudd3g=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/download/@babel/helper-function-name-7.16.0.tgz",
+ "integrity": "sha1-t90Hl9ALv+5PB+nE6lsOMMi7FIE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.0.tgz",
+ "integrity": "sha1-AIjHSGspqctdlIsaHeRttm4InPo=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.0.tgz",
+ "integrity": "sha1-TJAjwvHe9+KP9G/B2802o5vqqBo=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.5.tgz",
+ "integrity": "sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.0.tgz?cache=0&sync_timestamp=1635560941965&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.16.0.tgz",
+ "integrity": "sha1-kFOOYLZy7PG0SPX09UM9N+eaPsM=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.5.tgz",
+ "integrity": "sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.0.tgz",
+ "integrity": "sha1-zs2xRdcMVAlrFWT46fEM19GTszg=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.5.tgz",
+ "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==",
+ "dev": true
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.5.tgz",
+ "integrity": "sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-wrap-function": "^7.16.5",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.5.tgz",
+ "integrity": "sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-member-expression-to-functions": "^7.16.5",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.0.tgz?cache=0&sync_timestamp=1635560942808&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.16.0.tgz",
+ "integrity": "sha1-IdaidiDjg+N1NM9sELugGab5BRc=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.16.0.tgz",
+ "integrity": "sha1-DuM4gHAUfDrgUeSH7KPrsOLouwk=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.0.tgz?cache=0&sync_timestamp=1635560943488&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.16.0.tgz",
+ "integrity": "sha1-KWcvQ2Y+k23zcKrrIr7ds7rsdDg=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.15.7",
+ "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz?cache=0&sync_timestamp=1631920000984&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.15.7.tgz",
+ "integrity": "sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz?cache=0&sync_timestamp=1623281108450&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-option%2Fdownload%2F%40babel%2Fhelper-validator-option-7.14.5.tgz",
+ "integrity": "sha1-bnKh//GNXfy4eOHmLxoCHEty1aM=",
+ "dev": true
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.5.tgz",
+ "integrity": "sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helpers/download/@babel/helpers-7.16.5.tgz",
+ "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.0.tgz?cache=0&sync_timestamp=1635560940881&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.16.0.tgz",
+ "integrity": "sha1-bOsysspLj182H7f9gh4/3fShclo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.16.6",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.16.6.tgz",
+ "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==",
+ "dev": true
+ },
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.16.2",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz?cache=0&sync_timestamp=1635837362783&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fplugin-bugfix-safari-id-destructuring-collision-in-function-expression%2Fdownload%2F%40babel%2Fplugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz",
+ "integrity": "sha1-KXf8qbIS2xU8GVZ05Xz6uAdzMYM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz",
+ "integrity": "sha1-NYly6qsAb16wgmGDsMk8vK8T4eI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0"
+ }
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.16.5.tgz",
+ "integrity": "sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.5.tgz",
+ "integrity": "sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-proposal-class-static-block": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.5.tgz",
+ "integrity": "sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.16.5.tgz",
+ "integrity": "sha512-XAiZll5oCdp2Dd2RbXA3LVPlFyIRhhcQy+G34p9ePpl6mjFkbqHAYHovyw2j5mqUrlBf0/+MtOIJ3JGYtz8qaw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-decorators": "^7.16.5"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.5.tgz",
+ "integrity": "sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-export-namespace-from": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.5.tgz",
+ "integrity": "sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.5.tgz",
+ "integrity": "sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-logical-assignment-operators": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.5.tgz",
+ "integrity": "sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz",
+ "integrity": "sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-numeric-separator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.5.tgz",
+ "integrity": "sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.5.tgz",
+ "integrity": "sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.16.5"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.5.tgz",
+ "integrity": "sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.5.tgz",
+ "integrity": "sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-private-methods": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.5.tgz",
+ "integrity": "sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.5.tgz",
+ "integrity": "sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.5.tgz",
+ "integrity": "sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz?cache=0&sync_timestamp=1618847046078&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-async-generators%2Fdownload%2F%40babel%2Fplugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz?cache=0&sync_timestamp=1623281106862&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-class-static-block%2Fdownload%2F%40babel%2Fplugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.16.5.tgz",
+ "integrity": "sha512-3CbYTXfflvyy8O819uhZcZSMedZG4J8yS/NLTc/8T24M9ke1GssTGvg8VZu3Yn2LU5IyQSv1CmPq0a9JWHXJwg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.5.tgz",
+ "integrity": "sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz?cache=0&sync_timestamp=1623280462994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-private-property-in-object%2Fdownload%2F%40babel%2Fplugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz?cache=0&sync_timestamp=1623280464882&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.5.tgz",
+ "integrity": "sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.16.5.tgz",
+ "integrity": "sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.5.tgz",
+ "integrity": "sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.5.tgz",
+ "integrity": "sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.5.tgz",
+ "integrity": "sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-replace-supers": "^7.16.5",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.5.tgz",
+ "integrity": "sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.5.tgz",
+ "integrity": "sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.5.tgz",
+ "integrity": "sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.5.tgz",
+ "integrity": "sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.5.tgz",
+ "integrity": "sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.5.tgz",
+ "integrity": "sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.5.tgz",
+ "integrity": "sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.5.tgz",
+ "integrity": "sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.5.tgz",
+ "integrity": "sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.5.tgz",
+ "integrity": "sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.5.tgz",
+ "integrity": "sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-simple-access": "^7.16.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.5.tgz",
+ "integrity": "sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.5.tgz",
+ "integrity": "sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.5.tgz",
+ "integrity": "sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.5.tgz",
+ "integrity": "sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.5.tgz",
+ "integrity": "sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-replace-supers": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.5.tgz",
+ "integrity": "sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.5.tgz",
+ "integrity": "sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.5.tgz",
+ "integrity": "sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.5.tgz",
+ "integrity": "sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.16.5.tgz",
+ "integrity": "sha512-gxpfS8XQWDbQ8oP5NcmpXxtEgCJkbO+W9VhZlOhr0xPyVaRjAQPOv7ZDj9fg0d5s9+NiVvMCE6gbkEkcsxwGRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "babel-plugin-polyfill-corejs2": "^0.3.0",
+ "babel-plugin-polyfill-corejs3": "^0.4.0",
+ "babel-plugin-polyfill-regenerator": "^0.3.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.5.tgz",
+ "integrity": "sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.5.tgz",
+ "integrity": "sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.5.tgz",
+ "integrity": "sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.5.tgz",
+ "integrity": "sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.5.tgz",
+ "integrity": "sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.5.tgz",
+ "integrity": "sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.5.tgz",
+ "integrity": "sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.16.5.tgz",
+ "integrity": "sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-validator-option": "^7.14.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.16.5",
+ "@babel/plugin-proposal-class-properties": "^7.16.5",
+ "@babel/plugin-proposal-class-static-block": "^7.16.5",
+ "@babel/plugin-proposal-dynamic-import": "^7.16.5",
+ "@babel/plugin-proposal-export-namespace-from": "^7.16.5",
+ "@babel/plugin-proposal-json-strings": "^7.16.5",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.16.5",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.5",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.5",
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.5",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.16.5",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.5",
+ "@babel/plugin-proposal-private-methods": "^7.16.5",
+ "@babel/plugin-proposal-private-property-in-object": "^7.16.5",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.16.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-transform-arrow-functions": "^7.16.5",
+ "@babel/plugin-transform-async-to-generator": "^7.16.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.16.5",
+ "@babel/plugin-transform-block-scoping": "^7.16.5",
+ "@babel/plugin-transform-classes": "^7.16.5",
+ "@babel/plugin-transform-computed-properties": "^7.16.5",
+ "@babel/plugin-transform-destructuring": "^7.16.5",
+ "@babel/plugin-transform-dotall-regex": "^7.16.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.16.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.16.5",
+ "@babel/plugin-transform-for-of": "^7.16.5",
+ "@babel/plugin-transform-function-name": "^7.16.5",
+ "@babel/plugin-transform-literals": "^7.16.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.16.5",
+ "@babel/plugin-transform-modules-amd": "^7.16.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.16.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.16.5",
+ "@babel/plugin-transform-modules-umd": "^7.16.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.5",
+ "@babel/plugin-transform-new-target": "^7.16.5",
+ "@babel/plugin-transform-object-super": "^7.16.5",
+ "@babel/plugin-transform-parameters": "^7.16.5",
+ "@babel/plugin-transform-property-literals": "^7.16.5",
+ "@babel/plugin-transform-regenerator": "^7.16.5",
+ "@babel/plugin-transform-reserved-words": "^7.16.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.16.5",
+ "@babel/plugin-transform-spread": "^7.16.5",
+ "@babel/plugin-transform-sticky-regex": "^7.16.5",
+ "@babel/plugin-transform-template-literals": "^7.16.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.16.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.16.5",
+ "@babel/plugin-transform-unicode-regex": "^7.16.5",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.16.0",
+ "babel-plugin-polyfill-corejs2": "^0.3.0",
+ "babel-plugin-polyfill-corejs3": "^0.4.0",
+ "babel-plugin-polyfill-regenerator": "^0.3.0",
+ "core-js-compat": "^3.19.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmmirror.com/@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz",
+ "integrity": "sha1-75Odbn8miCfhhBY43G/5VRXhFdk=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.16.5.tgz",
+ "integrity": "sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.0.tgz?cache=0&sync_timestamp=1635560664232&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.16.0.tgz",
+ "integrity": "sha1-0Wo16/TNdOICCDNW+rId2JNj3dY=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmmirror.com/@babel/traverse/download/@babel/traverse-7.16.5.tgz",
+ "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.5",
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/parser": "^7.16.5",
+ "@babel/types": "^7.16.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.16.0.tgz",
+ "integrity": "sha1-2zsxOAT5aq3Qt3bEgj4SetZyibo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@casl/ability": {
+ "version": "4.1.6",
+ "resolved": "https://registry.nlark.com/@casl/ability/download/@casl/ability-4.1.6.tgz",
+ "integrity": "sha1-ifJjkDrfyTFs7f8ymtYVVkZiRIo=",
+ "requires": {
+ "sift": "^13.0.0"
+ }
+ },
+ "@casl/vue": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/@casl/vue/download/@casl/vue-1.1.1.tgz",
+ "integrity": "sha1-46oxJbF+yDyr/djTtQKcxXmB1U4="
+ },
+ "@fullcalendar/common": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/common/download/@fullcalendar/common-5.10.1.tgz?cache=0&sync_timestamp=1635912577260&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40fullcalendar%2Fcommon%2Fdownload%2F%40fullcalendar%2Fcommon-5.10.1.tgz",
+ "integrity": "sha1-oBmVF0OFInekCV5Tb9dxb2+Fuao=",
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/core": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/core/download/@fullcalendar/core-5.10.1.tgz?cache=0&sync_timestamp=1635912576868&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40fullcalendar%2Fcore%2Fdownload%2F%40fullcalendar%2Fcore-5.10.1.tgz",
+ "integrity": "sha1-BcdlPlAEFJpjvLA+nciwSRhspQs=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "preact": "^10.0.5",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/daygrid": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/daygrid/download/@fullcalendar/daygrid-5.10.1.tgz?cache=0&sync_timestamp=1635912577561&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40fullcalendar%2Fdaygrid%2Fdownload%2F%40fullcalendar%2Fdaygrid-5.10.1.tgz",
+ "integrity": "sha1-ve5PWDZP2rYxsqv4tWCUq1d28gM=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/interaction": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/interaction/download/@fullcalendar/interaction-5.10.1.tgz?cache=0&sync_timestamp=1635912576213&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40fullcalendar%2Finteraction%2Fdownload%2F%40fullcalendar%2Finteraction-5.10.1.tgz",
+ "integrity": "sha1-36dLXFC71WCOtQrqtuV5yNIMs2c=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/list": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/list/download/@fullcalendar/list-5.10.1.tgz",
+ "integrity": "sha1-hQWq4JhFuC9b22JRvaD51jQu+dk=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/timegrid": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/timegrid/download/@fullcalendar/timegrid-5.10.1.tgz?cache=0&sync_timestamp=1635912586214&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40fullcalendar%2Ftimegrid%2Fdownload%2F%40fullcalendar%2Ftimegrid-5.10.1.tgz",
+ "integrity": "sha1-+n/rkJv1merBRmuecMDVbODRrvw=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "@fullcalendar/daygrid": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/vue": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/vue/download/@fullcalendar/vue-5.10.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40fullcalendar%2Fvue%2Fdownload%2F%40fullcalendar%2Fvue-5.10.1.tgz",
+ "integrity": "sha1-kA/6Vbn1ejs1xoYOgChze5J9M3Q=",
+ "requires": {
+ "@fullcalendar/core": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@gar/promisify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/@gar/promisify/download/@gar/promisify-1.1.2.tgz",
+ "integrity": "sha1-MKqCXxHUOGcdWFvUTn/VZFNfwhA=",
+ "dev": true
+ },
+ "@hapi/address": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmmirror.com/@hapi/address/download/@hapi/address-2.1.4.tgz",
+ "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=",
+ "dev": true
+ },
+ "@hapi/bourne": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmmirror.com/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz",
+ "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=",
+ "dev": true
+ },
+ "@hapi/hoek": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmmirror.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz?cache=0&sync_timestamp=1632777883600&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40hapi%2Fhoek%2Fdownload%2F%40hapi%2Fhoek-8.5.1.tgz",
+ "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=",
+ "dev": true
+ },
+ "@hapi/joi": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmmirror.com/@hapi/joi/download/@hapi/joi-15.1.1.tgz",
+ "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=",
+ "dev": true,
+ "requires": {
+ "@hapi/address": "2.x.x",
+ "@hapi/bourne": "1.x.x",
+ "@hapi/hoek": "8.x.x",
+ "@hapi/topo": "3.x.x"
+ }
+ },
+ "@hapi/topo": {
+ "version": "3.1.6",
+ "resolved": "https://registry.nlark.com/@hapi/topo/download/@hapi/topo-3.1.6.tgz",
+ "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=",
+ "dev": true,
+ "requires": {
+ "@hapi/hoek": "^8.3.0"
+ }
+ },
+ "@intervolga/optimize-cssnano-plugin": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz",
+ "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=",
+ "dev": true,
+ "requires": {
+ "cssnano": "^4.0.0",
+ "cssnano-preset-default": "^4.0.0",
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1622792655362&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz",
+ "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
+ "dev": true
+ },
+ "@npmcli/fs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/@npmcli/fs/download/@npmcli/fs-1.1.0.tgz",
+ "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==",
+ "dev": true,
+ "requires": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz",
+ "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz",
+ "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ }
+ }
+ },
+ "@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/@npmcli/move-file/download/@npmcli/move-file-1.1.2.tgz?cache=0&sync_timestamp=1613068732526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40npmcli%2Fmove-file%2Fdownload%2F%40npmcli%2Fmove-file-1.1.2.tgz",
+ "integrity": "sha1-GoLD43L3yuklPrZtclQ9a4aFxnQ=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-1.0.4.tgz",
+ "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/rimraf/download/rimraf-3.0.2.tgz",
+ "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "@nuxt/opencollective": {
+ "version": "0.3.2",
+ "resolved": "https://registry.nlark.com/@nuxt/opencollective/download/@nuxt/opencollective-0.3.2.tgz",
+ "integrity": "sha1-g8twzbK6xfrW+Mk1KeexEYfUnAI=",
+ "requires": {
+ "chalk": "^4.1.0",
+ "consola": "^2.15.0",
+ "node-fetch": "^2.6.1"
+ }
+ },
+ "@soda/friendly-errors-webpack-plugin": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.1.tgz?cache=0&sync_timestamp=1636965503646&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.1.tgz",
+ "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^3.0.0",
+ "error-stack-parser": "^2.0.6",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-3.0.0.tgz",
+ "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "@soda/get-current-script": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz",
+ "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
+ "dev": true
+ },
+ "@types/body-parser": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npmmirror.com/@types/body-parser/download/@types/body-parser-1.19.2.tgz?cache=0&sync_timestamp=1637265217498&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fbody-parser%2Fdownload%2F%40types%2Fbody-parser-1.19.2.tgz",
+ "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
+ "dev": true,
+ "requires": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/connect": {
+ "version": "3.4.35",
+ "resolved": "https://registry.npmmirror.com/@types/connect/download/@types/connect-3.4.35.tgz?cache=0&sync_timestamp=1637264592973&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fconnect%2Fdownload%2F%40types%2Fconnect-3.4.35.tgz",
+ "integrity": "sha1-X89q5EXkAh0fwiGaSHPMc6O7KtE=",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/connect-history-api-fallback": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.5.tgz?cache=0&sync_timestamp=1637264593179&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fconnect-history-api-fallback%2Fdownload%2F%40types%2Fconnect-history-api-fallback-1.3.5.tgz",
+ "integrity": "sha1-0feooJ0O1aV67lrpwYq5uAMgXa4=",
+ "dev": true,
+ "requires": {
+ "@types/express-serve-static-core": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/express": {
+ "version": "4.17.13",
+ "resolved": "https://registry.npmmirror.com/@types/express/download/@types/express-4.17.13.tgz",
+ "integrity": "sha1-p24plXKJmbq1GjP6vOHXBaNwkDQ=",
+ "dev": true,
+ "requires": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.18",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.17.26",
+ "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.26.tgz",
+ "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*"
+ }
+ },
+ "@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/@types/glob/download/@types/glob-7.2.0.tgz?cache=0&sync_timestamp=1637265668380&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.2.0.tgz",
+ "integrity": "sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/http-proxy": {
+ "version": "1.17.8",
+ "resolved": "https://registry.npmmirror.com/@types/http-proxy/download/@types/http-proxy-1.17.8.tgz",
+ "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmmirror.com/@types/json-schema/download/@types/json-schema-7.0.9.tgz?cache=0&sync_timestamp=1637265456183&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.9.tgz",
+ "integrity": "sha1-l+3JA36gw4WFMgsolk3eOznkZg0=",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.nlark.com/@types/json5/download/@types/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true
+ },
+ "@types/mime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmmirror.com/@types/mime/download/@types/mime-1.3.2.tgz?cache=0&sync_timestamp=1637267348464&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fmime%2Fdownload%2F%40types%2Fmime-1.3.2.tgz",
+ "integrity": "sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmmirror.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1637267363432&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz",
+ "integrity": "sha1-EAHMXmo3BLg8I2An538vWOoBD0A=",
+ "dev": true
+ },
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/@types/minimist/download/@types/minimist-1.2.2.tgz",
+ "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-17.0.2.tgz",
+ "integrity": "sha512-JepeIUPFDARgIs0zD/SKPgFsJEAF0X5/qO80llx59gOxFTboS9Amv3S+QfB7lqBId5sFXJ99BN0J6zFRvL9dDA==",
+ "dev": true
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1637270290556&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz",
+ "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmmirror.com/@types/q/download/@types/q-1.5.5.tgz",
+ "integrity": "sha1-daKo59irSyMEFFBdkjNdHctTpt8=",
+ "dev": true
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmmirror.com/@types/qs/download/@types/qs-6.9.7.tgz?cache=0&sync_timestamp=1637268454704&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fqs%2Fdownload%2F%40types%2Fqs-6.9.7.tgz",
+ "integrity": "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=",
+ "dev": true
+ },
+ "@types/range-parser": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/@types/range-parser/download/@types/range-parser-1.2.4.tgz?cache=0&sync_timestamp=1637268455466&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Frange-parser%2Fdownload%2F%40types%2Frange-parser-1.2.4.tgz",
+ "integrity": "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw=",
+ "dev": true
+ },
+ "@types/serve-static": {
+ "version": "1.13.10",
+ "resolved": "https://registry.npmmirror.com/@types/serve-static/download/@types/serve-static-1.13.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fserve-static%2Fdownload%2F%40types%2Fserve-static-1.13.10.tgz",
+ "integrity": "sha1-9eDOh5fS18xevtpIpSyWxPpHqNk=",
+ "dev": true,
+ "requires": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "@types/source-list-map": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz",
+ "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=",
+ "dev": true
+ },
+ "@types/tapable": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/@types/tapable/download/@types/tapable-1.0.8.tgz",
+ "integrity": "sha1-uUpDkchWZse3Mpn9OtedT6pDUxA=",
+ "dev": true
+ },
+ "@types/uglify-js": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmmirror.com/@types/uglify-js/download/@types/uglify-js-3.13.1.tgz?cache=0&sync_timestamp=1637270388794&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.13.1.tgz",
+ "integrity": "sha1-XoienoHpQkXHW2RQYA4cXqKHiuo=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ }
+ },
+ "@types/webpack": {
+ "version": "4.41.32",
+ "resolved": "https://registry.npmmirror.com/@types/webpack/download/@types/webpack-4.41.32.tgz",
+ "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/tapable": "^1",
+ "@types/uglify-js": "*",
+ "@types/webpack-sources": "*",
+ "anymatch": "^3.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "@types/webpack-dev-server": {
+ "version": "3.11.6",
+ "resolved": "https://registry.npmmirror.com/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.6.tgz",
+ "integrity": "sha1-2IiM/S8GMCA+E9PteDOk0RuKNNw=",
+ "dev": true,
+ "requires": {
+ "@types/connect-history-api-fallback": "*",
+ "@types/express": "*",
+ "@types/serve-static": "*",
+ "@types/webpack": "^4",
+ "http-proxy-middleware": "^1.0.0"
+ }
+ },
+ "@types/webpack-sources": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/@types/webpack-sources/download/@types/webpack-sources-3.2.0.tgz",
+ "integrity": "sha1-FtdZuglsKJA0smVT0t8b9FJI04s=",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/source-list-map": "*",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.nlark.com/source-map/download/source-map-0.7.3.tgz",
+ "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-helper-vue-jsx-merge-props": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
+ "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE=",
+ "dev": true
+ },
+ "@vue/babel-helper-vue-transform-on": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz",
+ "integrity": "sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w=",
+ "dev": true
+ },
+ "@vue/babel-plugin-jsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.1.1.tgz?cache=0&sync_timestamp=1634464314876&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vue%2Fbabel-plugin-jsx%2Fdownload%2F%40vue%2Fbabel-plugin-jsx-1.1.1.tgz",
+ "integrity": "sha1-DFusJ4gNI/iYlM0Daje1XvYd38E=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.0.0",
+ "@babel/template": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "@vue/babel-helper-vue-transform-on": "^1.0.2",
+ "camelcase": "^6.0.0",
+ "html-tags": "^3.1.0",
+ "svg-tags": "^1.0.0"
+ }
+ },
+ "@vue/babel-plugin-transform-vue-jsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.2.1.tgz",
+ "integrity": "sha1-ZGBGxlLC8CQnJ/NFGdkXsGQEHtc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "html-tags": "^2.0.0",
+ "lodash.kebabcase": "^4.1.1",
+ "svg-tags": "^1.0.0"
+ },
+ "dependencies": {
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-preset-app": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.15.tgz?cache=0&sync_timestamp=1637121122479&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.15.tgz",
+ "integrity": "sha1-9rwI+PZ06YomAAQjTN4YuWbXLrA=",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.0",
+ "@babel/helper-compilation-targets": "^7.9.6",
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
+ "@babel/plugin-proposal-decorators": "^7.8.3",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3",
+ "@babel/plugin-transform-runtime": "^7.11.0",
+ "@babel/preset-env": "^7.11.0",
+ "@babel/runtime": "^7.11.0",
+ "@vue/babel-plugin-jsx": "^1.0.3",
+ "@vue/babel-preset-jsx": "^1.2.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "core-js": "^3.6.5",
+ "core-js-compat": "^3.6.5",
+ "semver": "^6.1.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-preset-jsx": {
+ "version": "1.2.4",
+ "resolved": "https://registry.nlark.com/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.2.4.tgz",
+ "integrity": "sha1-kv6nnbbxOwHoDToAmeKSS9y+Toc=",
+ "dev": true,
+ "requires": {
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+ "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+ "@vue/babel-sugar-functional-vue": "^1.2.2",
+ "@vue/babel-sugar-inject-h": "^1.2.2",
+ "@vue/babel-sugar-v-model": "^1.2.3",
+ "@vue/babel-sugar-v-on": "^1.2.3"
+ }
+ },
+ "@vue/babel-sugar-composition-api-inject-h": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-inject-h/download/@vue/babel-sugar-composition-api-inject-h-1.2.1.tgz?cache=0&sync_timestamp=1602851211529&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-composition-api-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-composition-api-inject-h-1.2.1.tgz",
+ "integrity": "sha1-BdbgxDJxDjdYKyvppgSbaJtvA+s=",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-composition-api-render-instance": {
+ "version": "1.2.4",
+ "resolved": "https://registry.nlark.com/@vue/babel-sugar-composition-api-render-instance/download/@vue/babel-sugar-composition-api-render-instance-1.2.4.tgz",
+ "integrity": "sha1-5MvGmXw0T6wnF4WteikyXFHWjRk=",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-functional-vue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.nlark.com/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.2.2.tgz",
+ "integrity": "sha1-JnqayNeHyW7b8Dzj85LEnam9Jlg=",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-inject-h": {
+ "version": "1.2.2",
+ "resolved": "https://registry.nlark.com/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.2.2.tgz",
+ "integrity": "sha1-1zjTyJM2fshJHcu2abAAkZKT46o=",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-v-model": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.2.3.tgz?cache=0&sync_timestamp=1603182488740&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-model%2Fdownload%2F%40vue%2Fbabel-sugar-v-model-1.2.3.tgz",
+ "integrity": "sha1-+h8pulHr8KoabDX6ZtU5vEWaGPI=",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "camelcase": "^5.0.0",
+ "html-tags": "^2.0.0",
+ "svg-tags": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1636945191390&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+ "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+ "dev": true
+ },
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-sugar-v-on": {
+ "version": "1.2.3",
+ "resolved": "https://registry.nlark.com/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.2.3.tgz",
+ "integrity": "sha1-NCNnF4WGpp85LwS/ujICHQKROto=",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "camelcase": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1636945191390&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+ "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/cli-overlay": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/download/@vue/cli-overlay-4.5.15.tgz",
+ "integrity": "sha1-BwD9a605M21Bibo/99JeY46BjJw=",
+ "dev": true
+ },
+ "@vue/cli-plugin-babel": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.15.tgz?cache=0&sync_timestamp=1637121137770&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vue%2Fcli-plugin-babel%2Fdownload%2F%40vue%2Fcli-plugin-babel-4.5.15.tgz",
+ "integrity": "sha1-rk+y7VQlX+PYTfOB2raFCWQRee0=",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.0",
+ "@vue/babel-preset-app": "^4.5.15",
+ "@vue/cli-shared-utils": "^4.5.15",
+ "babel-loader": "^8.1.0",
+ "cache-loader": "^4.1.0",
+ "thread-loader": "^2.1.3",
+ "webpack": "^4.0.0"
+ }
+ },
+ "@vue/cli-plugin-eslint": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.15.tgz",
+ "integrity": "sha1-V4GCSpQfNMJjNqZ7H2WEoGxqJP8=",
+ "dev": true,
+ "requires": {
+ "@vue/cli-shared-utils": "^4.5.15",
+ "eslint-loader": "^2.2.1",
+ "globby": "^9.2.0",
+ "inquirer": "^7.1.0",
+ "webpack": "^4.0.0",
+ "yorkie": "^2.0.0"
+ }
+ },
+ "@vue/cli-plugin-router": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.15.tgz",
+ "integrity": "sha1-HnXIyJ30LGlPFDufECjePPXWHh4=",
+ "dev": true,
+ "requires": {
+ "@vue/cli-shared-utils": "^4.5.15"
+ }
+ },
+ "@vue/cli-plugin-vuex": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.15.tgz",
+ "integrity": "sha1-RmwfAnd9Av71Opu0mjbMOjvP7E4=",
+ "dev": true
+ },
+ "@vue/cli-service": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-service/download/@vue/cli-service-4.5.15.tgz?cache=0&sync_timestamp=1637121125617&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.5.15.tgz",
+ "integrity": "sha1-DpoYbVFVACfQ5o6VBCB3600RW0U=",
+ "dev": true,
+ "requires": {
+ "@intervolga/optimize-cssnano-plugin": "^1.0.5",
+ "@soda/friendly-errors-webpack-plugin": "^1.7.1",
+ "@soda/get-current-script": "^1.0.0",
+ "@types/minimist": "^1.2.0",
+ "@types/webpack": "^4.0.0",
+ "@types/webpack-dev-server": "^3.11.0",
+ "@vue/cli-overlay": "^4.5.15",
+ "@vue/cli-plugin-router": "^4.5.15",
+ "@vue/cli-plugin-vuex": "^4.5.15",
+ "@vue/cli-shared-utils": "^4.5.15",
+ "@vue/component-compiler-utils": "^3.1.2",
+ "@vue/preload-webpack-plugin": "^1.1.0",
+ "@vue/web-component-wrapper": "^1.2.0",
+ "acorn": "^7.4.0",
+ "acorn-walk": "^7.1.1",
+ "address": "^1.1.2",
+ "autoprefixer": "^9.8.6",
+ "browserslist": "^4.12.0",
+ "cache-loader": "^4.1.0",
+ "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "cli-highlight": "^2.1.4",
+ "clipboardy": "^2.3.0",
+ "cliui": "^6.0.0",
+ "copy-webpack-plugin": "^5.1.1",
+ "css-loader": "^3.5.3",
+ "cssnano": "^4.1.10",
+ "debug": "^4.1.1",
+ "default-gateway": "^5.0.5",
+ "dotenv": "^8.2.0",
+ "dotenv-expand": "^5.1.0",
+ "file-loader": "^4.2.0",
+ "fs-extra": "^7.0.1",
+ "globby": "^9.2.0",
+ "hash-sum": "^2.0.0",
+ "html-webpack-plugin": "^3.2.0",
+ "launch-editor-middleware": "^2.2.1",
+ "lodash.defaultsdeep": "^4.6.1",
+ "lodash.mapvalues": "^4.6.0",
+ "lodash.transform": "^4.6.0",
+ "mini-css-extract-plugin": "^0.9.0",
+ "minimist": "^1.2.5",
+ "pnp-webpack-plugin": "^1.6.4",
+ "portfinder": "^1.0.26",
+ "postcss-loader": "^3.0.0",
+ "ssri": "^8.0.1",
+ "terser-webpack-plugin": "^1.4.4",
+ "thread-loader": "^2.1.3",
+ "url-loader": "^2.2.0",
+ "vue-loader": "^15.9.2",
+ "vue-loader-v16": "npm:vue-loader@^16.1.0",
+ "vue-style-loader": "^4.1.2",
+ "webpack": "^4.0.0",
+ "webpack-bundle-analyzer": "^3.8.0",
+ "webpack-chain": "^6.4.0",
+ "webpack-dev-server": "^3.11.0",
+ "webpack-merge": "^4.2.2"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+ "dev": true
+ },
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz",
+ "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ }
+ }
+ },
+ "@vue/cli-shared-utils": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.15.tgz?cache=0&sync_timestamp=1637121122895&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.15.tgz",
+ "integrity": "sha1-26OFgWXb40ZXVfJWpIkOaQhFMtY=",
+ "dev": true,
+ "requires": {
+ "@hapi/joi": "^15.0.1",
+ "chalk": "^2.4.2",
+ "execa": "^1.0.0",
+ "launch-editor": "^2.2.1",
+ "lru-cache": "^5.1.1",
+ "node-ipc": "^9.1.1",
+ "open": "^6.3.0",
+ "ora": "^3.4.0",
+ "read-pkg": "^5.1.1",
+ "request": "^2.88.2",
+ "semver": "^6.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@vue/component-compiler-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.3.0.tgz?cache=0&sync_timestamp=1635248303132&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vue%2Fcomponent-compiler-utils%2Fdownload%2F%40vue%2Fcomponent-compiler-utils-3.3.0.tgz",
+ "integrity": "sha1-+fX7U0ZLDDeyyNLz+/5E32D2Hck=",
+ "dev": true,
+ "requires": {
+ "consolidate": "^0.15.1",
+ "hash-sum": "^1.0.2",
+ "lru-cache": "^4.1.2",
+ "merge-source-map": "^1.1.0",
+ "postcss": "^7.0.36",
+ "postcss-selector-parser": "^6.0.2",
+ "prettier": "^1.18.2 || ^2.0.0",
+ "source-map": "~0.6.1",
+ "vue-template-es2015-compiler": "^1.9.0"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-4.1.5.tgz",
+ "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-2.1.2.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/composition-api": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/@vue/composition-api/download/@vue/composition-api-1.3.0.tgz",
+ "integrity": "sha1-qi+mUR//WaVp8ug/nbDDqidmfys=",
+ "requires": {
+ "tslib": "^2.3.0"
+ }
+ },
+ "@vue/eslint-config-airbnb": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/@vue/eslint-config-airbnb/download/@vue/eslint-config-airbnb-5.3.0.tgz",
+ "integrity": "sha1-iWVR1gCBagbf8T/dfQT9UVM3mBc=",
+ "dev": true,
+ "requires": {
+ "eslint-config-airbnb-base": "^14.0.0",
+ "eslint-import-resolver-node": "^0.3.4",
+ "eslint-import-resolver-webpack": "^0.13.0",
+ "eslint-plugin-import": "^2.21.2"
+ }
+ },
+ "@vue/preload-webpack-plugin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz",
+ "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
+ "dev": true
+ },
+ "@vue/web-component-wrapper": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fweb-component-wrapper%2Fdownload%2F%40vue%2Fweb-component-wrapper-1.3.0.tgz",
+ "integrity": "sha1-trQKdiVCnSvXwigd26YB7QXcfxo=",
+ "dev": true
+ },
+ "@vuepress/plugin-medium-zoom": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmmirror.com/@vuepress/plugin-medium-zoom/download/@vuepress/plugin-medium-zoom-1.8.3.tgz",
+ "integrity": "sha512-05zW+/d1nDK7+ELPAmYNzyC9g3h5lPmXw0AT3a7K38HeWuqst9MIhrh9s8vkYb01Q+hQ7ez72ig525ysLVDrKQ==",
+ "dev": true,
+ "requires": {
+ "medium-zoom": "^1.0.4"
+ }
+ },
+ "@vueuse/core": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/core/download/@vueuse/core-4.0.0.tgz",
+ "integrity": "sha1-W+o+qoSOOz4AQn9QU/uY5+SDSw8=",
+ "requires": {
+ "@vueuse/shared": "4.0.0",
+ "vue-demi": "^0.12.1"
+ }
+ },
+ "@vueuse/shared": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/shared/download/@vueuse/shared-4.0.0.tgz",
+ "integrity": "sha1-1JW4/S8opFPvD8yuF1yoSKSoS7A=",
+ "requires": {
+ "vue-demi": "^0.12.1"
+ }
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1625473466238&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz",
+ "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473463638&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz",
+ "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz",
+ "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz?cache=0&sync_timestamp=1625473420790&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.9.0.tgz",
+ "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&sync_timestamp=1625473415428&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz",
+ "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz",
+ "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&sync_timestamp=1625473463016&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz",
+ "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz",
+ "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz",
+ "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1625473468202&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz",
+ "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1625473361759&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz",
+ "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz",
+ "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473464593&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz",
+ "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz",
+ "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz",
+ "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz",
+ "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.nlark.com/@xtuc/long/download/@xtuc/long-4.2.2.tgz",
+ "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+ "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz",
+ "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.nlark.com/acorn-jsx/download/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz",
+ "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=",
+ "dev": true
+ },
+ "address": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/address/download/address-1.1.2.tgz",
+ "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=",
+ "dev": true
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz",
+ "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/ajv-errors/download/ajv-errors-1.0.1.tgz",
+ "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/alphanum-sort/download/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "animate.css": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/animate.css/download/animate.css-4.1.1.tgz",
+ "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ=="
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz",
+ "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.nlark.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&sync_timestamp=1618847144938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.2.tgz",
+ "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.21.3.tgz",
+ "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=",
+ "dev": true
+ }
+ }
+ },
+ "ansi-html-community": {
+ "version": "0.0.8",
+ "resolved": "https://registry.nlark.com/ansi-html-community/download/ansi-html-community-0.0.8.tgz",
+ "integrity": "sha1-afvE1sy+OD+XNpNK40w/gpDxv0E=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/any-promise/download/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.nlark.com/anymatch/download/anymatch-3.1.2.tgz",
+ "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "apexcharts": {
+ "version": "3.23.0",
+ "resolved": "https://registry.npmmirror.com/apexcharts/download/apexcharts-3.23.0.tgz",
+ "integrity": "sha1-Eod6p4nWWK7165MK9sO4hQ/v2SU=",
+ "requires": {
+ "svg.draggable.js": "^2.2.2",
+ "svg.easing.js": "^2.0.0",
+ "svg.filter.js": "^2.0.2",
+ "svg.pathmorphing.js": "^0.1.3",
+ "svg.resize.js": "^1.4.3",
+ "svg.select.js": "^3.0.1"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/aproba/download/aproba-1.2.0.tgz",
+ "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
+ "dev": true
+ },
+ "arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/arch/download/arch-2.2.0.tgz",
+ "integrity": "sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.nlark.com/argparse/download/argparse-1.0.10.tgz",
+ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/arr-diff/download/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/arr-flatten/download/arr-flatten-1.1.0.tgz",
+ "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/arr-union/download/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-find": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/array-find/download/array-find-1.0.0.tgz",
+ "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmmirror.com/array-includes/download/array-includes-3.1.4.tgz",
+ "integrity": "sha1-9bSTFix2DzU5Yx8AW6K7Rqy0W6k=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/array-uniq/download/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.nlark.com/array-unique/download/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "array.prototype.flat": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmmirror.com/array.prototype.flat/download/array.prototype.flat-1.2.5.tgz",
+ "integrity": "sha1-B+CXXYS7x8SM0YedYJ5oJZjTPhM=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0"
+ }
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmmirror.com/asn1/download/asn1-0.2.6.tgz?cache=0&sync_timestamp=1635986760581&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasn1%2Fdownload%2Fasn1-0.2.6.tgz",
+ "integrity": "sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0=",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz",
+ "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+ "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+ "dev": true
+ }
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.nlark.com/assert/download/assert-1.5.0.tgz?cache=0&sync_timestamp=1618847153747&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fassert%2Fdownload%2Fassert-1.5.0.tgz",
+ "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.nlark.com/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1622212984161&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/astral-regex/download/astral-regex-1.0.0.tgz",
+ "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmmirror.com/async/download/async-2.6.3.tgz",
+ "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/async-each/download/async-each-1.0.3.tgz",
+ "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
+ "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/atob/download/atob-2.1.2.tgz",
+ "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "9.8.8",
+ "resolved": "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-9.8.8.tgz",
+ "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "picocolors": "^0.2.1",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.nlark.com/aws-sign2/download/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.nlark.com/aws4/download/aws4-1.11.0.tgz",
+ "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmmirror.com/axios/download/axios-0.21.1.tgz",
+ "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
+ "requires": {
+ "follow-redirects": "^1.10.0"
+ }
+ },
+ "axios-mock-adapter": {
+ "version": "1.19.0",
+ "resolved": "https://registry.nlark.com/axios-mock-adapter/download/axios-mock-adapter-1.19.0.tgz",
+ "integrity": "sha1-nXLjIabFQY4e/wZ6qZdhqGxRiKQ=",
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "is-buffer": "^2.0.3"
+ }
+ },
+ "babel-eslint": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmmirror.com/babel-eslint/download/babel-eslint-10.1.0.tgz",
+ "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "eslint-visitor-keys": "^1.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "babel-helper-vue-jsx-merge-props": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+ "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
+ },
+ "babel-loader": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmmirror.com/babel-loader/download/babel-loader-8.2.3.tgz",
+ "integrity": "sha1-iYa0Dxpkys/LS4QpMgCF72ixNC0=",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^1.4.0",
+ "make-dir": "^3.1.0",
+ "schema-utils": "^2.6.5"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.nlark.com/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1618846790496&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.3.0.tgz?cache=0&sync_timestamp=1636800035591&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.3.0.tgz",
+ "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.3.0",
+ "semver": "^6.1.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.4.0.tgz?cache=0&sync_timestamp=1636800035753&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-polyfill-corejs3%2Fdownload%2Fbabel-plugin-polyfill-corejs3-0.4.0.tgz",
+ "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.0",
+ "core-js-compat": "^3.18.0"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.3.0.tgz?cache=0&sync_timestamp=1636800035395&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-polyfill-regenerator%2Fdownload%2Fbabel-plugin-polyfill-regenerator-0.3.0.tgz",
+ "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz",
+ "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
+ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.nlark.com/base64-js/download/base64-js-1.5.1.tgz",
+ "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmmirror.com/batch/download/batch-0.6.1.tgz",
+ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bfj": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz",
+ "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "check-types": "^8.0.3",
+ "hoopy": "^0.1.4",
+ "tryer": "^1.0.1"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmmirror.com/big.js/download/big.js-5.2.2.tgz",
+ "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz",
+ "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.nlark.com/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1622605302685&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz",
+ "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
+ "dev": true
+ },
+ "bmaplib.curveline": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/bmaplib.curveline/download/bmaplib.curveline-1.0.0.tgz",
+ "integrity": "sha1-gm6wvxxZ+tGyMUK+Zvw2DPAJrqI="
+ },
+ "bmaplib.heatmap": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/bmaplib.heatmap/download/bmaplib.heatmap-1.0.4.tgz",
+ "integrity": "sha1-MBYSYncf54rzVwX/kkV3Jd5dmFA="
+ },
+ "bmaplib.lushu": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/bmaplib.lushu/download/bmaplib.lushu-1.0.7.tgz",
+ "integrity": "sha1-d8F9z3FI0wxG6EMMf/hrIOQYuLg="
+ },
+ "bmaplib.markerclusterer": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npm.taobao.org/bmaplib.markerclusterer/download/bmaplib.markerclusterer-1.0.13.tgz",
+ "integrity": "sha1-RC1xpsQIRO5H0B9tshZrVFMLW9E=",
+ "requires": {
+ "bmaplib.texticonoverlay": "^1.0.2"
+ }
+ },
+ "bmaplib.texticonoverlay": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/bmaplib.texticonoverlay/download/bmaplib.texticonoverlay-1.0.2.tgz",
+ "integrity": "sha1-14VG6g8DbZ/pZJg3ljFbbBEqBb8="
+ },
+ "bn.js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz",
+ "integrity": "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmmirror.com/body-parser/download/body-parser-1.19.1.tgz",
+ "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.1",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.8.1",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.9.6",
+ "raw-body": "2.4.2",
+ "type-is": "~1.6.18"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.9.6",
+ "resolved": "https://registry.npmmirror.com/qs/download/qs-6.9.6.tgz",
+ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.nlark.com/bonjour/download/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz",
+ "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
+ "dev": true
+ }
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/boolbase/download/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "bootstrap": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmmirror.com/bootstrap/download/bootstrap-4.6.0.tgz",
+ "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
+ },
+ "bootstrap-vue": {
+ "version": "2.21.1",
+ "resolved": "https://registry.npm.taobao.org/bootstrap-vue/download/bootstrap-vue-2.21.1.tgz",
+ "integrity": "sha1-INPO2WtzWRfYvnG3dxfu50u0DG8=",
+ "requires": {
+ "@nuxt/opencollective": "^0.3.2",
+ "bootstrap": ">=4.5.3 <5.0.0",
+ "popper.js": "^1.16.1",
+ "portal-vue": "^2.1.7",
+ "vue-functional-data-merge": "^3.1.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
+ "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.nlark.com/braces/download/braces-2.3.2.tgz",
+ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/brorand/download/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/browserify-aes/download/browserify-aes-1.2.0.tgz",
+ "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/browserify-des/download/browserify-des-1.0.2.tgz",
+ "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/browserify-rsa/download/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.nlark.com/browserify-sign/download/browserify-sign-4.2.1.tgz",
+ "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmmirror.com/browserslist/download/browserslist-4.19.1.tgz",
+ "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001286",
+ "electron-to-chromium": "^1.4.17",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmmirror.com/buffer/download/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/buffer-from/download/buffer-from-1.1.2.tgz",
+ "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=",
+ "dev": true
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
+ "dev": true
+ },
+ "buffer-json": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/buffer-json/download/buffer-json-2.0.0.tgz",
+ "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/bytes/download/bytes-3.1.1.tgz?cache=0&sync_timestamp=1637015259458&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbytes%2Fdownload%2Fbytes-3.1.1.tgz",
+ "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
+ "dev": true
+ },
+ "cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.nlark.com/cacache/download/cacache-12.0.4.tgz",
+ "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/cache-base/download/cache-base-1.0.1.tgz?cache=0&sync_timestamp=1636237266442&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz",
+ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "cache-loader": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/cache-loader/download/cache-loader-4.1.0.tgz",
+ "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=",
+ "dev": true,
+ "requires": {
+ "buffer-json": "^2.0.0",
+ "find-cache-dir": "^3.0.0",
+ "loader-utils": "^1.2.3",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "schema-utils": "^2.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz",
+ "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/caller-callsite/download/caller-callsite-2.0.0.tgz?cache=0&sync_timestamp=1633617041481&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-callsite%2Fdownload%2Fcaller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1633674209796&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/callsites/download/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867297052&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "camelcase": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-6.2.1.tgz?cache=0&sync_timestamp=1636945191390&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.1.tgz",
+ "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
+ "dev": true
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz",
+ "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001292",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001292.tgz",
+ "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==",
+ "dev": true
+ },
+ "case-sensitive-paths-webpack-plugin": {
+ "version": "2.4.0",
+ "resolved": "https://registry.nlark.com/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
+ "integrity": "sha1-22QGbGQi7tLgjMFLmGykN5bbxtQ=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmmirror.com/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1634639141514&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz",
+ "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+ "dev": true
+ },
+ "chart.js": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmmirror.com/chart.js/download/chart.js-2.9.4.tgz",
+ "integrity": "sha1-CCf5Vj+v+y3FwGVi+OsQM31bloQ=",
+ "requires": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ },
+ "chartjs-color": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npm.taobao.org/chartjs-color/download/chartjs-color-2.4.1.tgz",
+ "integrity": "sha1-YRi7ogL+Hqed1/fA+dqTRnKWw7A=",
+ "requires": {
+ "chartjs-color-string": "^0.6.0",
+ "color-convert": "^1.9.3"
+ },
+ "dependencies": {
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ }
+ }
+ },
+ "chartjs-color-string": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npm.taobao.org/chartjs-color-string/download/chartjs-color-string-0.6.0.tgz",
+ "integrity": "sha1-HfCWYhwOcHIKZPQTXqFx0FFAL3E=",
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "check-types": {
+ "version": "8.0.3",
+ "resolved": "https://registry.nlark.com/check-types/download/check-types-8.0.3.tgz",
+ "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/braces/download/braces-3.0.2.tgz",
+ "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz",
+ "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/is-number/download/is-number-7.0.0.tgz",
+ "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz",
+ "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/chownr/download/chownr-1.1.4.tgz",
+ "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/ci-info/download/ci-info-1.6.0.tgz",
+ "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
+ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.nlark.com/class-utils/download/class-utils-0.3.6.tgz",
+ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clean-css": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmmirror.com/clean-css/download/clean-css-4.2.4.tgz?cache=0&sync_timestamp=1634992314911&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fclean-css%2Fdownload%2Fclean-css-4.2.4.tgz",
+ "integrity": "sha1-czv0brpOYHxokepXwkqYk1aDEXg=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1621915044030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz",
+ "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=",
+ "dev": true
+ },
+ "cleave.js": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npm.taobao.org/cleave.js/download/cleave.js-1.6.0.tgz",
+ "integrity": "sha1-Dk4BGUO91wxnydz0/4AM5xBSkXE="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-2.1.0.tgz?cache=0&sync_timestamp=1629747481175&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-highlight": {
+ "version": "2.1.11",
+ "resolved": "https://registry.nlark.com/cli-highlight/download/cli-highlight-2.1.11.tgz",
+ "integrity": "sha1-SXNvpFLwqvT65YDjCssmgo0twb8=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "highlight.js": "^10.7.1",
+ "mz": "^2.4.0",
+ "parse5": "^5.1.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.0",
+ "yargs": "^16.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmmirror.com/cli-spinners/download/cli-spinners-2.6.1.tgz",
+ "integrity": "sha1-rclU6+KBw3pjGb+kAebdJIj/tw0=",
+ "dev": true
+ },
+ "cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz",
+ "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=",
+ "dev": true
+ },
+ "clipboard": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmmirror.com/clipboard/download/clipboard-2.0.8.tgz",
+ "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==",
+ "requires": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
+ "clipboardy": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/clipboardy/download/clipboardy-2.3.0.tgz",
+ "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.1",
+ "execa": "^1.0.0",
+ "is-wsl": "^2.1.1"
+ },
+ "dependencies": {
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/is-wsl/download/is-wsl-2.2.0.tgz",
+ "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-6.0.0.tgz",
+ "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1631557201275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz",
+ "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/clone/download/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/coa/download/coa-2.0.2.tgz?cache=0&sync_timestamp=1636035838814&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcoa%2Fdownload%2Fcoa-2.0.2.tgz",
+ "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=",
+ "dev": true,
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmmirror.com/color/download/color-3.2.1.tgz",
+ "integrity": "sha1-NUTcGYyvRJDD7MmnkLVP6f9F4WQ=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
+ },
+ "dependencies": {
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI="
+ },
+ "color-string": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmmirror.com/color-string/download/color-string-1.9.0.tgz",
+ "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.nlark.com/colors/download/colors-0.6.2.tgz?cache=0&sync_timestamp=1622604546780&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolors%2Fdownload%2Fcolors-0.6.2.tgz",
+ "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
+ "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.1.0.tgz",
+ "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/component-emitter/download/component-emitter-1.3.0.tgz",
+ "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.nlark.com/compressible/download/compressible-2.0.18.tgz",
+ "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz",
+ "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/bytes/download/bytes-3.0.0.tgz?cache=0&sync_timestamp=1637015259458&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1618847044058&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+ "dev": true
+ }
+ }
+ },
+ "compression-webpack-plugin": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/compression-webpack-plugin/download/compression-webpack-plugin-5.0.2.tgz",
+ "integrity": "sha1-34Tmgs+h+yojDnHPg9UMMj1TacI=",
+ "dev": true,
+ "requires": {
+ "cacache": "^15.0.5",
+ "find-cache-dir": "^3.3.1",
+ "schema-utils": "^2.7.0",
+ "serialize-javascript": "^4.0.0",
+ "webpack-sources": "^1.4.3"
+ },
+ "dependencies": {
+ "cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.nlark.com/cacache/download/cacache-15.3.0.tgz",
+ "integrity": "sha1-3IU4D7L1Vv492kxxm/oOyHWn8es=",
+ "dev": true,
+ "requires": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ }
+ },
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/chownr/download/chownr-2.0.0.tgz",
+ "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz",
+ "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-1.0.4.tgz",
+ "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=",
+ "dev": true
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/p-map/download/p-map-4.0.0.tgz",
+ "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/rimraf/download/rimraf-3.0.2.tgz",
+ "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz",
+ "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.nlark.com/concat-map/download/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.nlark.com/concat-stream/download/concat-stream-1.6.2.tgz",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmmirror.com/confusing-browser-globals/download/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "dev": true
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.nlark.com/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz?cache=0&sync_timestamp=1618847040596&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
+ "dev": true
+ },
+ "consola": {
+ "version": "2.15.3",
+ "resolved": "https://registry.nlark.com/consola/download/consola-2.15.3.tgz",
+ "integrity": "sha1-LhH5jWpL5x/3LgvfB70j4Sy2FVA="
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/console-browserify/download/console-browserify-1.2.0.tgz",
+ "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
+ "dev": true
+ },
+ "consolidate": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz?cache=0&sync_timestamp=1599596647062&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.15.1.tgz",
+ "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.1.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/constants-browserify/download/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmmirror.com/content-disposition/download/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.2.1"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/content-type/download/content-type-1.0.4.tgz",
+ "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz?cache=0&sync_timestamp=1624045420970&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.8.0.tgz",
+ "integrity": "sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1618847044058&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+ "dev": true
+ }
+ }
+ },
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.1.tgz",
+ "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "copy-webpack-plugin": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz",
+ "integrity": "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI=",
+ "dev": true,
+ "requires": {
+ "cacache": "^12.0.3",
+ "find-cache-dir": "^2.1.0",
+ "glob-parent": "^3.1.0",
+ "globby": "^7.1.1",
+ "is-glob": "^4.0.1",
+ "loader-utils": "^1.2.3",
+ "minimatch": "^3.0.4",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^4.0.0",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-2.1.0.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-2.1.0.tgz",
+ "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1632954501757&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz?cache=0&sync_timestamp=1632934586547&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "globby": {
+ "version": "7.1.1",
+ "resolved": "https://registry.nlark.com/globby/download/globby-7.1.1.tgz",
+ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-3.3.10.tgz",
+ "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz",
+ "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-3.0.0.tgz",
+ "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+ "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/slash/download/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ }
+ }
+ },
+ "core-js": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmmirror.com/core-js/download/core-js-3.8.1.tgz",
+ "integrity": "sha1-9RUjZorIopTRKFw7nbRAJf2mbUc="
+ },
+ "core-js-compat": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmmirror.com/core-js-compat/download/core-js-compat-3.20.0.tgz",
+ "integrity": "sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.19.1",
+ "semver": "7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz",
+ "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz?cache=0&sync_timestamp=1630420570787&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-util-is%2Fdownload%2Fcore-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.nlark.com/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1629585969900&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz",
+ "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1637475717072&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.nlark.com/create-ecdh/download/create-ecdh-4.0.4.tgz",
+ "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+ "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+ "dev": true
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
+ "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.nlark.com/create-hmac/download/create-hmac-1.1.7.tgz",
+ "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.nlark.com/cross-spawn/download/cross-spawn-6.0.5.tgz",
+ "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.nlark.com/css-color-names/download/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1630965563343&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "css-loader": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1635967924209&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz",
+ "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.32",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.2.0",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^2.7.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1636945191390&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+ "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/css-select/download/css-select-2.1.0.tgz",
+ "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=",
+ "dev": true
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmmirror.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
+ }
+ },
+ "css-what": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmmirror.com/css-what/download/css-what-3.4.2.tgz",
+ "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+ "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmmirror.com/cssnano/download/cssnano-4.1.11.tgz",
+ "integrity": "sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.8",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmmirror.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz",
+ "integrity": "sha1-kgYisfwelaNOiDggPxOXpQTy0/8=",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.3",
+ "postcss-unique-selectors": "^4.0.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=",
+ "dev": true
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/csso/download/csso-4.2.0.tgz",
+ "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmmirror.com/css-tree/download/css-tree-1.1.3.tgz",
+ "integrity": "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.14.tgz",
+ "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
+ "dev": true
+ }
+ }
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/cyclist/download/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/dashdash/download/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-fns": {
+ "version": "2.27.0",
+ "resolved": "https://registry.npmmirror.com/date-fns/download/date-fns-2.27.0.tgz",
+ "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q=="
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/de-indent/download/de-indent-1.0.2.tgz",
+ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/decamelize/download/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/deep-equal/download/deep-equal-1.1.1.tgz",
+ "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/deep-is/download/deep-is-0.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdeep-is%2Fdownload%2Fdeep-is-0.1.4.tgz",
+ "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
+ "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
+ "dev": true
+ },
+ "default-gateway": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmmirror.com/default-gateway/download/default-gateway-5.0.5.tgz",
+ "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=",
+ "dev": true,
+ "requires": {
+ "execa": "^3.3.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.nlark.com/cross-spawn/download/cross-spawn-7.0.3.tgz",
+ "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1637147236741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz",
+ "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "p-finally": "^2.0.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.nlark.com/get-stream/download/get-stream-5.2.0.tgz",
+ "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/is-stream/download/is-stream-2.0.1.tgz",
+ "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
+ "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&sync_timestamp=1633420566316&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz",
+ "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+ "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "p-finally": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz",
+ "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+ "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+ "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+ "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/which/download/which-2.0.2.tgz",
+ "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz?cache=0&sync_timestamp=1589682715225&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefaults%2Fdownload%2Fdefaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/clone/download/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ }
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/define-properties/download/define-properties-1.1.3.tgz?cache=0&sync_timestamp=1618847174317&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdefine-properties%2Fdownload%2Fdefine-properties-1.1.3.tgz",
+ "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz",
+ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz?cache=0&sync_timestamp=1601076882347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz",
+ "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.nlark.com/globby/download/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/delegate/download/delegate-3.2.0.tgz",
+ "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/depd/download/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/des.js/download/des.js-1.0.1.tgz",
+ "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/destroy/download/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/detect-node/download/detect-node-2.1.0.tgz?cache=0&sync_timestamp=1621146902208&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdetect-node%2Fdownload%2Fdetect-node-2.1.0.tgz",
+ "integrity": "sha1-yccHdaScPQO8LAbZpzvlUPl4+LE=",
+ "dev": true
+ },
+ "diacriticless": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/diacriticless/download/diacriticless-1.0.1.tgz",
+ "integrity": "sha1-592peMKRlgm7SK7h78XeajN71MM="
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.nlark.com/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+ "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+ "dev": true
+ }
+ }
+ },
+ "dir-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
+ "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=",
+ "dev": true,
+ "requires": {
+ "path-type": "^3.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/dns-equal/download/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.4",
+ "resolved": "https://registry.nlark.com/dns-packet/download/dns-packet-1.3.4.tgz",
+ "integrity": "sha1-40VQZYJKJQe6iGxVqJljuxB97G8=",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/doctrine/download/doctrine-2.1.0.tgz",
+ "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
+ "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=",
+ "dev": true,
+ "requires": {
+ "utila": "~0.4"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1621256830355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
+ "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+ "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/entities/download/entities-2.2.0.tgz",
+ "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+ "dev": true
+ }
+ }
+ },
+ "dom7": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmmirror.com/dom7/download/dom7-2.1.5.tgz",
+ "integrity": "sha1-p5QRAXgAsx2EAAcM2uu/ySwfY3c=",
+ "requires": {
+ "ssr-window": "^2.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1627591557212&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz",
+ "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
+ "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/domhandler/download/domhandler-4.3.0.tgz",
+ "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+ "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+ "dev": true
+ }
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.nlark.com/domutils/download/domutils-1.7.0.tgz",
+ "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.nlark.com/dot-prop/download/dot-prop-5.3.0.tgz",
+ "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.nlark.com/dotenv/download/dotenv-8.6.0.tgz",
+ "integrity": "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=",
+ "dev": true
+ },
+ "dotenv-expand": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
+ "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=",
+ "dev": true
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
+ "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.nlark.com/duplexify/download/duplexify-3.7.1.tgz?cache=0&sync_timestamp=1626860645267&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fduplexify%2Fdownload%2Fduplexify-3.7.1.tgz",
+ "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "easy-stack": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/easy-stack/download/easy-stack-1.0.1.tgz",
+ "integrity": "sha1-iv5CZGJpiMq7EfPHBMzQyDVBEGY=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "echarts": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmmirror.com/echarts/download/echarts-4.8.0.tgz",
+ "integrity": "sha512-YwShpug8fWngj/RlgxDaYrLBoD+LsZUArrusjNPHpAF+is+gGe38xx4W848AwWMGoi745t3OXM52JedNrv+F6g==",
+ "requires": {
+ "zrender": "4.3.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "ejs": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmmirror.com/ejs/download/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.4.26",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.26.tgz",
+ "integrity": "sha512-cA1YwlRzO6TGp7yd3+KAqh9Tt6Z4CuuKqsAJP6uF/H5MQryjAGDhMhnY5cEXo8MaRCczpzSBhMPdqRIodkbZYw==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.nlark.com/elliptic/download/elliptic-6.5.4.tgz",
+ "integrity": "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+ "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+ "dev": true
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1632811716250&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz",
+ "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/emojis-list/download/emojis-list-3.0.0.tgz",
+ "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/encodeurl/download/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.nlark.com/end-of-stream/download/end-of-stream-1.4.4.tgz",
+ "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.5.0",
+ "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz?cache=0&sync_timestamp=1632130808043&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.5.0.tgz",
+ "integrity": "sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.nlark.com/memory-fs/download/memory-fs-0.5.0.tgz",
+ "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/entities/download/entities-1.1.2.tgz",
+ "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY="
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.nlark.com/errno/download/errno-0.1.8.tgz",
+ "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/error-ex/download/error-ex-1.3.2.tgz",
+ "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "error-stack-parser": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz",
+ "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=",
+ "dev": true,
+ "requires": {
+ "stackframe": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmmirror.com/es-abstract/download/es-abstract-1.19.1.tgz?cache=0&sync_timestamp=1633234258828&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fes-abstract%2Fdownload%2Fes-abstract-1.19.1.tgz",
+ "integrity": "sha1-1IhXlodpFpWd547aoN9FZicRXsM=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/escalade/download/escalade-3.1.1.tgz",
+ "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "eslint": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmmirror.com/eslint/download/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^7.0.0",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.3",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/doctrine/download/doctrine-3.0.0.tgz",
+ "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1637466913662&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+ "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmmirror.com/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1635390798667&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz",
+ "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.8.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.nlark.com/import-fresh/download/import-fresh-3.3.0.tgz",
+ "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/resolve-from/download/resolve-from-4.0.0.tgz?cache=0&sync_timestamp=1622605305717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fresolve-from%2Fdownload%2Fresolve-from-4.0.0.tgz",
+ "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/strip-json-comments/download/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz",
+ "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "14.2.1",
+ "resolved": "https://registry.npmmirror.com/eslint-config-airbnb-base/download/eslint-config-airbnb-base-14.2.1.tgz?cache=0&sync_timestamp=1636442475199&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-config-airbnb-base%2Fdownload%2Feslint-config-airbnb-base-14.2.1.tgz",
+ "integrity": "sha1-ii6zhFXcWjElUBk7MZza7vBCzR4=",
+ "dev": true,
+ "requires": {
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.2"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.nlark.com/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.6.tgz?cache=0&sync_timestamp=1629046428620&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha1-QEi5WDldqJZoJSAB29nsprg7rL0=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-import-resolver-webpack": {
+ "version": "0.13.2",
+ "resolved": "https://registry.npmmirror.com/eslint-import-resolver-webpack/download/eslint-import-resolver-webpack-0.13.2.tgz?cache=0&sync_timestamp=1634713649080&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-import-resolver-webpack%2Fdownload%2Feslint-import-resolver-webpack-0.13.2.tgz",
+ "integrity": "sha1-/IE98NCLkmXMcHLSI5O9pRmL3B4=",
+ "dev": true,
+ "requires": {
+ "array-find": "^1.0.0",
+ "debug": "^3.2.7",
+ "enhanced-resolve": "^0.9.1",
+ "find-root": "^1.1.0",
+ "has": "^1.0.3",
+ "interpret": "^1.4.0",
+ "is-core-module": "^2.7.0",
+ "is-regex": "^1.1.4",
+ "lodash": "^4.17.21",
+ "resolve": "^1.20.0",
+ "semver": "^5.7.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "0.9.1",
+ "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-0.9.1.tgz?cache=0&sync_timestamp=1632130808043&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-0.9.1.tgz",
+ "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.2.0",
+ "tapable": "^0.1.8"
+ }
+ },
+ "memory-fs": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/memory-fs/download/memory-fs-0.2.0.tgz",
+ "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=",
+ "dev": true
+ },
+ "tapable": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmmirror.com/tapable/download/tapable-0.1.10.tgz",
+ "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-loader": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmmirror.com/eslint-loader/download/eslint-loader-2.2.1.tgz",
+ "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=",
+ "dev": true,
+ "requires": {
+ "loader-fs-cache": "^1.0.0",
+ "loader-utils": "^1.0.2",
+ "object-assign": "^4.0.1",
+ "object-hash": "^1.1.4",
+ "rimraf": "^2.6.1"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/eslint-module-utils/download/eslint-module-utils-2.7.1.tgz?cache=0&sync_timestamp=1634151692261&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-module-utils%2Fdownload%2Feslint-module-utils-2.7.1.tgz",
+ "integrity": "sha1-tDUAHJ+N1Kt/bQ78rkuWltTCS3w=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "find-up": "^2.1.0",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1628812721654&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
+ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz?cache=0&sync_timestamp=1633364397780&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.25.3",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-import/download/eslint-plugin-import-2.25.3.tgz",
+ "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.1",
+ "has": "^1.0.3",
+ "is-core-module": "^2.8.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.5",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.11.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-vue": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz",
+ "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=",
+ "dev": true,
+ "requires": {
+ "natural-compare": "^1.4.0",
+ "semver": "^5.6.0",
+ "vue-eslint-parser": "^7.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1637466913662&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz",
+ "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.nlark.com/eslint-utils/download/eslint-utils-1.4.3.tgz",
+ "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1636378420914&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
+ "dev": true
+ },
+ "espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmmirror.com/espree/download/espree-6.2.1.tgz",
+ "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
+ "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/esquery/download/esquery-1.4.0.tgz",
+ "integrity": "sha1-IUj/w4uC6McFff7UhCWz5h8PJKU=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-5.3.0.tgz?cache=0&sync_timestamp=1635237706876&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-5.3.0.tgz",
+ "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/esrecurse/download/esrecurse-4.3.0.tgz",
+ "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-5.3.0.tgz?cache=0&sync_timestamp=1635237706876&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-5.3.0.tgz",
+ "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1635237706876&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
+ "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
+ "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "event-pubsub": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz?cache=0&sync_timestamp=1606361507592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevent-pubsub%2Fdownload%2Fevent-pubsub-4.3.0.tgz",
+ "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-2.0.3.tgz",
+ "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
+ },
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/events/download/events-3.3.0.tgz",
+ "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=",
+ "dev": true
+ },
+ "eventsource": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/eventsource/download/eventsource-1.1.0.tgz",
+ "integrity": "sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68=",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1637147236741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
+ "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "express": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmmirror.com/express/download/express-4.17.2.tgz",
+ "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.1",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.9.6",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.17.2",
+ "serve-static": "1.14.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.9.6",
+ "resolved": "https://registry.npmmirror.com/qs/download/qs-6.9.6.tgz",
+ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
+ "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-1.0.1.tgz",
+ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/external-editor/download/external-editor-3.1.0.tgz",
+ "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.nlark.com/extglob/download/extglob-2.0.4.tgz",
+ "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/extsprintf/download/extsprintf-1.3.0.tgz?cache=0&sync_timestamp=1635889740043&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fextsprintf%2Fdownload%2Fextsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.nlark.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
+ },
+ "fast-diff": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.1.2.tgz",
+ "integrity": "sha1-S2LEK44D3j+EhGC2OQeZIGldAVQ="
+ },
+ "fast-glob": {
+ "version": "2.2.7",
+ "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-2.2.7.tgz",
+ "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1632954501757&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz?cache=0&sync_timestamp=1632934586547&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.nlark.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "faye-websocket": {
+ "version": "0.11.4",
+ "resolved": "https://registry.nlark.com/faye-websocket/download/faye-websocket-0.11.4.tgz",
+ "integrity": "sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=",
+ "dev": true
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1625254307578&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz",
+ "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz?cache=0&sync_timestamp=1613794357372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-entry-cache%2Fdownload%2Ffile-entry-cache-5.0.1.tgz",
+ "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "file-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz?cache=0&sync_timestamp=1603816843418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-4.3.0.tgz",
+ "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmmirror.com/filesize/download/filesize-3.6.1.tgz?cache=0&sync_timestamp=1635763993879&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz",
+ "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/fill-range/download/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.2.tgz",
+ "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-3.3.2.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.2.tgz",
+ "integrity": "sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/find-root/download/find-root-1.1.0.tgz",
+ "integrity": "sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-4.1.0.tgz",
+ "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "findup": {
+ "version": "0.1.5",
+ "resolved": "https://registry.nlark.com/findup/download/findup-0.1.5.tgz",
+ "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=",
+ "requires": {
+ "colors": "~0.6.0-1",
+ "commander": "~2.1.0"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/flat-cache/download/flat-cache-2.0.1.tgz",
+ "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmmirror.com/rimraf/download/rimraf-2.6.3.tgz",
+ "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatpickr": {
+ "version": "4.6.9",
+ "resolved": "https://registry.nlark.com/flatpickr/download/flatpickr-4.6.9.tgz",
+ "integrity": "sha1-mhM4PopoFL2l0jLq4/zcy5fcFJk="
+ },
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1636473925233&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz",
+ "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
+ "dev": true
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.14.6",
+ "resolved": "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.14.6.tgz",
+ "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A=="
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.nlark.com/forever-agent/download/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz",
+ "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz",
+ "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/fragment-cache/download/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-7.0.1.tgz",
+ "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz",
+ "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-2.3.2.tgz",
+ "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.nlark.com/gensync/download/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/get-caller-file/download/get-caller-file-2.0.5.tgz",
+ "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/get-stream/download/get-stream-4.1.0.tgz",
+ "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/get-symbol-description/download/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha1-f9uByQAQH71WTdXxowr1qtweWNY=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.nlark.com/get-value/download/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.nlark.com/getpass/download/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/glob/download/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1632954501757&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+ "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmmirror.com/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1635390798667&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz",
+ "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
+ "dev": true
+ },
+ "globby": {
+ "version": "9.2.0",
+ "resolved": "https://registry.nlark.com/globby/download/globby-9.2.0.tgz",
+ "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^1.0.2",
+ "dir-glob": "^2.2.2",
+ "fast-glob": "^2.2.6",
+ "glob": "^7.1.3",
+ "ignore": "^4.0.3",
+ "pify": "^4.0.1",
+ "slash": "^2.0.0"
+ }
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.nlark.com/good-listener/download/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "requires": {
+ "delegate": "^3.1.2"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.8.tgz",
+ "integrity": "sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo=",
+ "dev": true
+ },
+ "gzip-size": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/gzip-size/download/gzip-size-5.1.1.tgz",
+ "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
+ }
+ },
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/handle-thing/download/handle-thing-2.0.1.tgz",
+ "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/har-schema/download/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmmirror.com/har-validator/download/har-validator-5.1.5.tgz",
+ "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/has/download/has-1.0.3.tgz",
+ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/has-bigints/download/has-bigints-1.0.1.tgz",
+ "integrity": "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s="
+ },
+ "has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz",
+ "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/has-tostringtag/download/has-tostringtag-1.0.0.tgz?cache=0&sync_timestamp=1628198671004&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-tostringtag%2Fdownload%2Fhas-tostringtag-1.0.0.tgz",
+ "integrity": "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=",
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/has-value/download/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/has-values/download/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/hash-base/download/hash-base-3.1.0.tgz",
+ "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "hash-sum": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz",
+ "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo="
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
+ "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
+ "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
+ "dev": true
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/hex-color-regex/download/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=",
+ "dev": true
+ },
+ "highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmmirror.com/highlight.js/download/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hoopy": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/hoopy/download/hoopy-0.1.4.tgz",
+ "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmmirror.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/hsl-regex/download/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/hsla-regex/download/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-entities": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/html-entities/download/html-entities-1.4.0.tgz",
+ "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "3.5.21",
+ "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
+ "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.x",
+ "clean-css": "4.2.x",
+ "commander": "2.17.x",
+ "he": "1.2.x",
+ "param-case": "2.1.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "3.4.x"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ }
+ }
+ },
+ "html-tags": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz",
+ "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
+ "dev": true
+ },
+ "html-webpack-plugin": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz",
+ "integrity": "sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==",
+ "dev": true,
+ "requires": {
+ "html-minifier": "^3.2.3",
+ "loader-utils": "^0.2.16",
+ "lodash": "^4.17.3",
+ "pretty-error": "^2.0.2",
+ "tapable": "^1.0.0",
+ "toposort": "^1.0.0",
+ "util.promisify": "1.0.0"
+ },
+ "dependencies": {
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/big.js/download/big.js-3.2.0.tgz",
+ "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/emojis-list/download/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.0.tgz",
+ "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/htmlparser2/download/htmlparser2-6.1.0.tgz?cache=0&sync_timestamp=1636641539121&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-6.1.0.tgz",
+ "integrity": "sha1-xNditsM3GgXb5l6UrkOp+EX7j7c=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.5.2",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256830355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz",
+ "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+ "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+ "dev": true
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.nlark.com/domutils/download/domutils-2.8.0.tgz",
+ "integrity": "sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/entities/download/entities-2.2.0.tgz",
+ "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+ "dev": true
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.nlark.com/http-deceiver/download/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmmirror.com/http-errors/download/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "http-parser-js": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmmirror.com/http-parser-js/download/http-parser-js-0.5.5.tgz",
+ "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.nlark.com/http-proxy/download/http-proxy-1.18.1.tgz?cache=0&sync_timestamp=1618847045732&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz",
+ "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "dependencies": {
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz",
+ "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-1.3.1.tgz",
+ "integrity": "sha1-Q3ANbZ7st0Gb8IahKND3IF2etmU=",
+ "dev": true,
+ "requires": {
+ "@types/http-proxy": "^1.17.5",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "is-plain-obj": "^3.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/braces/download/braces-3.0.2.tgz",
+ "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz",
+ "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/is-number/download/is-number-7.0.0.tgz",
+ "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.nlark.com/micromatch/download/micromatch-4.0.4.tgz",
+ "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz",
+ "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1637178987671&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/https-browserify/download/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1624364695595&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz",
+ "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1621826342262&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
+ "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.nlark.com/icss-utils/download/icss-utils-4.1.1.tgz",
+ "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/ieee754/download/ieee754-1.2.1.tgz",
+ "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.nlark.com/iferr/download/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz",
+ "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+ "dev": true
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/import-cwd/download/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "dev": true,
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/import-fresh/download/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/import-from/download/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/import-local/download/import-local-2.0.0.tgz",
+ "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-3.0.0.tgz",
+ "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ }
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/imurmurhash/download/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1618679442183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz",
+ "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=",
+ "dev": true
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/infer-owner/download/infer-owner-1.0.4.tgz",
+ "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz",
+ "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmmirror.com/inquirer/download/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-3.1.0.tgz?cache=0&sync_timestamp=1629747481175&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-3.1.0.tgz",
+ "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
+ "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+ "dev": true
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+ "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-3.1.0.tgz?cache=0&sync_timestamp=1629746923086&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frestore-cursor%2Fdownload%2Frestore-cursor-3.1.0.tgz",
+ "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/internal-ip/download/internal-ip-4.3.0.tgz",
+ "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=",
+ "dev": true,
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ },
+ "dependencies": {
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/default-gateway/download/default-gateway-4.2.0.tgz",
+ "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ }
+ }
+ }
+ },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/internal-slot/download/internal-slot-1.0.3.tgz",
+ "integrity": "sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/interpret/download/interpret-1.4.0.tgz",
+ "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=",
+ "dev": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.nlark.com/ip/download/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/ip-regex/download/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1628691761253&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/is-arguments/download/is-arguments-1.1.1.tgz?cache=0&sync_timestamp=1628201919104&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.1.tgz",
+ "integrity": "sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/is-bigint/download/is-bigint-1.0.4.tgz?cache=0&sync_timestamp=1628747504782&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-bigint%2Fdownload%2Fis-bigint-1.0.4.tgz",
+ "integrity": "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/is-binary-path/download/is-binary-path-2.1.0.tgz",
+ "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/is-boolean-object/download/is-boolean-object-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-boolean-object%2Fdownload%2Fis-boolean-object-1.1.2.tgz",
+ "integrity": "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.5.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.5.tgz",
+ "integrity": "sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE="
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.nlark.com/is-callable/download/is-callable-1.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-callable%2Fdownload%2Fis-callable-1.2.4.tgz",
+ "integrity": "sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU=",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/is-ci/download/is-ci-1.2.1.tgz?cache=0&sync_timestamp=1635261061017&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-ci%2Fdownload%2Fis-ci-1.2.1.tgz",
+ "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/is-color-stop/download/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmmirror.com/is-core-module/download/is-core-module-2.8.0.tgz?cache=0&sync_timestamp=1634236731601&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.8.0.tgz",
+ "integrity": "sha1-AyEzbD0JJeSX/Zf12VyxFKXM1Ug=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.5.tgz",
+ "integrity": "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=",
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+ "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.nlark.com/is-directory/download/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/is-docker/download/is-docker-2.2.1.tgz?cache=0&sync_timestamp=1630451108035&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-docker%2Fdownload%2Fis-docker-2.2.1.tgz",
+ "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/is-extglob/download/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.3.tgz?cache=0&sync_timestamp=1632934586547&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-4.0.3.tgz",
+ "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/is-negative-zero/download/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/is-number/download/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-number-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.nlark.com/is-number-object/download/is-number-object-1.0.6.tgz",
+ "integrity": "sha1-anqvg4x/BoalC0VT9+VKlklOifA=",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz?cache=0&sync_timestamp=1618600919478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-obj%2Fdownload%2Fis-obj-2.0.0.tgz",
+ "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/is-path-cwd/download/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1620047156679&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/is-path-inside/download/is-path-inside-2.1.0.tgz",
+ "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-3.0.0.tgz?cache=0&sync_timestamp=1618600489644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-3.0.0.tgz",
+ "integrity": "sha1-r28uoUrFpkYYOlu9tbqrvBVq2dc=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz",
+ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.4.tgz",
+ "integrity": "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/is-resolvable/download/is-resolvable-1.1.0.tgz",
+ "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
+ "dev": true
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/download/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha1-l7DIX72stZycRG/mU7gs8rW3z+Y=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/is-stream/download/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.nlark.com/is-string/download/is-string-1.0.7.tgz",
+ "integrity": "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.4.tgz?cache=0&sync_timestamp=1620501174327&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.4.tgz",
+ "integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/is-weakref/download/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/is-windows/download/is-windows-1.0.2.tgz",
+ "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/is-wsl/download/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/isexe/download/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/isstream/download/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "javascript-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/javascript-stringify/download/javascript-stringify-2.1.0.tgz",
+ "integrity": "sha1-J8dlOb4U2L0Sghmi1zGwkzeQTnk=",
+ "dev": true
+ },
+ "js-message": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.7.tgz",
+ "integrity": "sha1-+93QU8ekcCGHG7iyyVOXzBfCDkc=",
+ "dev": true
+ },
+ "js-queue": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.2.tgz",
+ "integrity": "sha1-C+WQM4+QOzbHPTPDGIOoIUEs1II=",
+ "dev": true,
+ "requires": {
+ "easy-stack": "^1.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz",
+ "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz",
+ "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/jsbn/download/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.nlark.com/jsesc/download/jsesc-2.5.2.tgz",
+ "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.nlark.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/json-schema/download/json-schema-0.4.0.tgz?cache=0&sync_timestamp=1636423494254&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-schema%2Fdownload%2Fjson-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.nlark.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmmirror.com/json3/download/json3-3.3.3.tgz",
+ "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz",
+ "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/jsonfile/download/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonwebtoken": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmmirror.com/jsonwebtoken/download/jsonwebtoken-8.5.1.tgz",
+ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "requires": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmmirror.com/jsprim/download/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "jump.js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/jump.js/download/jump.js-1.0.2.tgz",
+ "integrity": "sha1-4GQbR/QKOPITnCX9oFAL8o5DAVo="
+ },
+ "jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/jwa/download/jwa-1.4.1.tgz",
+ "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.nlark.com/jws/download/jws-3.2.2.tgz",
+ "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/killable/download/killable-1.0.1.tgz",
+ "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+ "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+ "dev": true
+ },
+ "klona": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/klona/download/klona-2.0.5.tgz?cache=0&sync_timestamp=1635385383825&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fklona%2Fdownload%2Fklona-2.0.5.tgz",
+ "integrity": "sha1-0WZXTZAHY5XZljqnqSj6u412r7w=",
+ "dev": true
+ },
+ "launch-editor": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/launch-editor/download/launch-editor-2.3.0.tgz",
+ "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^1.0.0",
+ "shell-quote": "^1.6.1"
+ }
+ },
+ "launch-editor-middleware": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/launch-editor-middleware/download/launch-editor-middleware-2.3.0.tgz",
+ "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==",
+ "dev": true,
+ "requires": {
+ "launch-editor": "^2.3.0"
+ }
+ },
+ "leaflet": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/leaflet/download/leaflet-1.6.0.tgz",
+ "integrity": "sha1-rsuwRLlJ7ClGnusxx3qI4vRI8wg="
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/levn/download/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/lines-and-columns/download/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "linkify-it": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/linkify-it/download/linkify-it-2.2.0.tgz?cache=0&sync_timestamp=1633116216426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flinkify-it%2Fdownload%2Flinkify-it-2.2.0.tgz",
+ "integrity": "sha1-47VGl+eL+RXHCjis14/QngBYsc8=",
+ "requires": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "loader-fs-cache": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz",
+ "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^0.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1610027918622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
+ "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-1.4.0.tgz",
+ "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
+ "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+ "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmmirror.com/lodash/download/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.nlark.com/lodash.assign/download/lodash.assign-4.2.0.tgz?cache=0&sync_timestamp=1621386477025&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash.assign%2Fdownload%2Flodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.nlark.com/lodash.debounce/download/lodash.debounce-4.0.8.tgz?cache=0&sync_timestamp=1618847031591&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash.debounce%2Fdownload%2Flodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.defaultsdeep": {
+ "version": "4.6.1",
+ "resolved": "https://registry.nlark.com/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz",
+ "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=",
+ "dev": true
+ },
+ "lodash.filter": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npm.taobao.org/lodash.filter/download/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4="
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/lodash.foreach/download/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM="
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/lodash.includes/download/lodash.includes-4.3.0.tgz",
+ "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npm.taobao.org/lodash.isequal/download/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.nlark.com/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.nlark.com/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+ "lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.nlark.com/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+ "dev": true
+ },
+ "lodash.mapvalues": {
+ "version": "4.6.0",
+ "resolved": "https://registry.nlark.com/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz",
+ "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz",
+ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+ },
+ "lodash.transform": {
+ "version": "4.6.0",
+ "resolved": "https://registry.nlark.com/lodash.transform/download/lodash.transform-4.6.0.tgz",
+ "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.nlark.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/log-symbols/download/log-symbols-2.2.0.tgz",
+ "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "loglevel": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmmirror.com/loglevel/download/loglevel-1.8.0.tgz",
+ "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/loose-envify/download/loose-envify-1.4.0.tgz",
+ "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/lower-case/download/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-5.1.1.tgz",
+ "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+ "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.nlark.com/map-cache/download/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/map-visit/download/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown-it": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmmirror.com/markdown-it/download/markdown-it-8.4.2.tgz",
+ "integrity": "sha1-OG+YmY3BWjdyKqdyIIT0Agvdm1Q=",
+ "requires": {
+ "argparse": "^1.0.7",
+ "entities": "~1.1.1",
+ "linkify-it": "^2.0.0",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
+ "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.4.tgz",
+ "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=",
+ "dev": true
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/media-typer/download/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "medium-zoom": {
+ "version": "1.0.6",
+ "resolved": "https://registry.nlark.com/medium-zoom/download/medium-zoom-1.0.6.tgz",
+ "integrity": "sha1-kkfyHKkxPYu+lCCsoVOkEN8I0Cc=",
+ "dev": true
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.nlark.com/memory-fs/download/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-source-map": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/merge-source-map/download/merge-source-map-1.1.0.tgz",
+ "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/merge-stream/download/merge-stream-2.0.0.tgz?cache=0&sync_timestamp=1622025345923&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmerge-stream%2Fdownload%2Fmerge-stream-2.0.0.tgz",
+ "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz",
+ "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/methods/download/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.nlark.com/micromatch/download/micromatch-3.1.10.tgz",
+ "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/miller-rabin/download/miller-rabin-4.0.1.tgz",
+ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+ "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/download/mime-2.6.0.tgz",
+ "integrity": "sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/download/mime-db-1.51.0.tgz?cache=0&sync_timestamp=1636425951030&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-db%2Fdownload%2Fmime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmmirror.com/mime-types/download/mime-types-2.1.34.tgz?cache=0&sync_timestamp=1636432244120&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.51.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz",
+ "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+ "dev": true
+ },
+ "mini-css-extract-plugin": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&sync_timestamp=1637171409305&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz",
+ "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "normalize-url": "1.9.1",
+ "schema-utils": "^1.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "dependencies": {
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+ "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.nlark.com/minimatch/download/minimatch-3.0.4.tgz?cache=0&sync_timestamp=1618846754554&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminimatch%2Fdownload%2Fminimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.nlark.com/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1618847017774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz",
+ "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
+ },
+ "minipass": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmmirror.com/minipass/download/minipass-3.1.6.tgz",
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ }
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz",
+ "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz",
+ "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/minizlib/download/minizlib-2.1.2.tgz",
+ "integrity": "sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ }
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/mississippi/download/mississippi-3.0.0.tgz",
+ "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/mixin-deep/download/mixin-deep-1.3.2.tgz",
+ "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-1.0.1.tgz",
+ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "moment": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmmirror.com/moment/download/moment-2.29.1.tgz",
+ "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/move-concurrently/download/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz",
+ "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI="
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmmirror.com/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1633354862495&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz",
+ "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.nlark.com/mute-stream/download/mute-stream-0.0.8.tgz",
+ "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
+ "dev": true
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
+ "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.nlark.com/nanomatch/download/nanomatch-1.2.13.tgz",
+ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/natural-compare/download/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.nlark.com/negotiator/download/negotiator-0.6.2.tgz",
+ "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.nlark.com/neo-async/download/neo-async-2.6.2.tgz",
+ "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/nice-try/download/nice-try-1.0.5.tgz",
+ "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+ "dev": true
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.nlark.com/no-case/download/no-case-2.3.2.tgz",
+ "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.6.tgz",
+ "integrity": "sha1-F1GnwBg06OFpd1hzLp77burfr4k=",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.nlark.com/node-forge/download/node-forge-0.10.0.tgz",
+ "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
+ "dev": true
+ },
+ "node-ipc": {
+ "version": "9.2.1",
+ "resolved": "https://registry.nlark.com/node-ipc/download/node-ipc-9.2.1.tgz?cache=0&sync_timestamp=1631753661352&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-ipc%2Fdownload%2Fnode-ipc-9.2.1.tgz",
+ "integrity": "sha1-sy9mEV+dbOhB3E7CAJ1qcz+Yu2s=",
+ "dev": true,
+ "requires": {
+ "event-pubsub": "4.3.0",
+ "js-message": "1.0.7",
+ "js-queue": "2.0.2"
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.nlark.com/punycode/download/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "node-releases": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/node-releases/download/node-releases-2.0.1.tgz?cache=0&sync_timestamp=1634806960337&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-2.0.1.tgz",
+ "integrity": "sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz",
+ "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz",
+ "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz",
+ "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1633420566316&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/nth-check/download/nth-check-1.0.2.tgz",
+ "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.nlark.com/oauth-sign/download/oauth-sign-0.9.0.tgz",
+ "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618847043548&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-hash": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/object-hash/download/object-hash-1.3.1.tgz",
+ "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmmirror.com/object-inspect/download/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857698573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz",
+ "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/object-keys/download/object-keys-1.1.1.tgz",
+ "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/object-visit/download/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz",
+ "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmmirror.com/object.entries/download/object.entries-1.1.5.tgz?cache=0&sync_timestamp=1633280969551&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.entries%2Fdownload%2Fobject.entries-1.1.5.tgz",
+ "integrity": "sha1-4azdF8TeLNltWghIfPuduE2IGGE=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.3.tgz?cache=0&sync_timestamp=1633321702182&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.3.tgz",
+ "integrity": "sha1-siPPOOF/77l6Y8EMkd9yzLOG354=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmmirror.com/object.values/download/object.values-1.1.5.tgz?cache=0&sync_timestamp=1633327765894&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.5.tgz",
+ "integrity": "sha1-lZ9j486e8QhyAzMIITHkpFm3Fqw=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/obuf/download/obuf-1.1.2.tgz",
+ "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/on-finished/download/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/on-headers/download/on-headers-1.0.2.tgz",
+ "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/once/download/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "open": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmmirror.com/open/download/open-6.4.0.tgz",
+ "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.nlark.com/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1618847055043&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fopener%2Fdownload%2Fopener-1.5.2.tgz",
+ "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/opn/download/opn-5.5.0.tgz",
+ "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.nlark.com/optionator/download/optionator-0.8.3.tgz",
+ "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "ora": {
+ "version": "3.4.0",
+ "resolved": "https://registry.nlark.com/ora/download/ora-3.4.0.tgz",
+ "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^2.0.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^5.2.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz",
+ "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
+ "dev": true,
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/os-browserify/download/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1628812721654&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz",
+ "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz",
+ "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/p-map/download/p-map-2.1.0.tgz",
+ "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/p-retry/download/p-retry-3.0.1.tgz",
+ "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/p-try/download/p-try-2.2.0.tgz?cache=0&sync_timestamp=1633364397780&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-2.2.0.tgz",
+ "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.nlark.com/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1627560213493&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
+ "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/parallel-transform/download/parallel-transform-1.2.0.tgz",
+ "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=",
+ "dev": true,
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/param-case/download/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "parchment": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/parchment/download/parchment-1.1.4.tgz",
+ "integrity": "sha1-rt7Xq5OP6SHUw0vDOc4RaLwv/eU="
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz",
+ "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/callsites/download/callsites-3.1.0.tgz",
+ "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+ "dev": true
+ }
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.nlark.com/parse-asn1/download/parse-asn1-5.1.6.tgz",
+ "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1637475717072&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz",
+ "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-5.1.1.tgz",
+ "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=",
+ "dev": true
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.nlark.com/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-6.0.1.tgz",
+ "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+ "dev": true
+ }
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz?cache=0&sync_timestamp=1615984376007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseurl%2Fdownload%2Fparseurl-1.3.3.tgz",
+ "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/pascalcase/download/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.nlark.com/path-browserify/download/path-browserify-0.0.1.tgz",
+ "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/path-dirname/download/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-4.0.0.tgz",
+ "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/path-is-inside/download/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz",
+ "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-type/download/path-type-3.0.0.tgz",
+ "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.nlark.com/pbkdf2/download/pbkdf2-3.1.2.tgz",
+ "integrity": "sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU=",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/performance-now/download/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-1.0.0.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-1.0.0.tgz",
+ "integrity": "sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpicomatch%2Fdownload%2Fpicomatch-2.3.0.tgz",
+ "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz",
+ "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.nlark.com/pinkie/download/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz?cache=0&sync_timestamp=1618847023792&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpinkie-promise%2Fdownload%2Fpinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz",
+ "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "pnp-webpack-plugin": {
+ "version": "1.7.0",
+ "resolved": "https://registry.nlark.com/pnp-webpack-plugin/download/pnp-webpack-plugin-1.7.0.tgz",
+ "integrity": "sha1-ZXQThPbYBW824iVajWf/wghm9ck=",
+ "dev": true,
+ "requires": {
+ "ts-pnp": "^1.1.6"
+ }
+ },
+ "popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmmirror.com/popper.js/download/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
+ },
+ "portal-vue": {
+ "version": "2.1.7",
+ "resolved": "https://registry.nlark.com/portal-vue/download/portal-vue-2.1.7.tgz",
+ "integrity": "sha1-6ggGmyW2QMoIpbhvZ8YS8V9OStQ="
+ },
+ "portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.nlark.com/portfinder/download/portfinder-1.0.28.tgz",
+ "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.5",
+ "resolved": "https://registry.nlark.com/postcss-calc/download/postcss-calc-7.0.5.tgz",
+ "integrity": "sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.27",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1621449558287&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1621449558296&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz?cache=0&sync_timestamp=1621449733074&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz?cache=0&sync_timestamp=1621449732464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-load-config": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz",
+ "integrity": "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "import-cwd": "^2.0.0"
+ }
+ },
+ "postcss-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/postcss-loader/download/postcss-loader-3.0.0.tgz",
+ "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "postcss": "^7.0.0",
+ "postcss-load-config": "^2.0.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+ "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1637084835421&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1637085530842&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz?cache=0&sync_timestamp=1637084835630&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-4.0.2.tgz",
+ "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1621449558355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "3.0.3",
+ "resolved": "https://registry.nlark.com/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz",
+ "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.32",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1621449558308&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz?cache=0&sync_timestamp=1621449652268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1621449596114&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz?cache=0&sync_timestamp=1621449825612&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-unicode%2Fdownload%2Fpostcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1623330460500&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz?cache=0&sync_timestamp=1621449730895&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-rtl": {
+ "version": "1.7.3",
+ "resolved": "https://registry.nlark.com/postcss-rtl/download/postcss-rtl-1.7.3.tgz",
+ "integrity": "sha1-UBm/KCbpCXL7qK0GHH+A1DyBe/s=",
+ "requires": {
+ "rtlcss": "2.5.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.8",
+ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-6.0.8.tgz",
+ "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-svgo/download/postcss-svgo-4.0.3.tgz?cache=0&sync_timestamp=1635857761721&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-4.0.3.tgz",
+ "integrity": "sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1637084835538&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "preact": {
+ "version": "10.6.4",
+ "resolved": "https://registry.npmmirror.com/preact/download/preact-10.6.4.tgz",
+ "integrity": "sha512-WyosM7pxGcndU8hY0OQlLd54tOU+qmG45QXj2dAYrL11HoyU/EzOSTlpJsirbBr1QW7lICxSsVJJmcmUglovHQ=="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/prelude-ls/download/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/prepend-http/download/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/prettier/download/prettier-2.5.1.tgz",
+ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
+ "dev": true,
+ "optional": true
+ },
+ "pretty-error": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/pretty-error/download/pretty-error-2.1.2.tgz",
+ "integrity": "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.20",
+ "renderkid": "^2.0.4"
+ }
+ },
+ "prismjs": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmmirror.com/prismjs/download/prismjs-1.19.0.tgz",
+ "integrity": "sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw==",
+ "requires": {
+ "clipboard": "^2.0.0"
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.nlark.com/process/download/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz?cache=0&sync_timestamp=1599054255267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprogress%2Fdownload%2Fprogress-2.0.3.tgz",
+ "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/promise-inflight/download/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz",
+ "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/prr/download/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/pseudomap/download/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz",
+ "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
+ "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+ "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+ "dev": true
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
+ "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz",
+ "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
+ "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz",
+ "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz?cache=0&sync_timestamp=1599054212574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fq%2Fdownload%2Fq-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmmirror.com/qs/download/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1631632973844&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/querystring-es3/download/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/querystringify/download/querystringify-2.2.0.tgz",
+ "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
+ "dev": true
+ },
+ "quill": {
+ "version": "1.3.7",
+ "resolved": "https://registry.nlark.com/quill/download/quill-1.3.7.tgz",
+ "integrity": "sha1-2lsvOixHDpMjQM2/NmjJ8h+Shug=",
+ "requires": {
+ "clone": "^2.1.1",
+ "deep-equal": "^1.0.1",
+ "eventemitter3": "^2.0.3",
+ "extend": "^3.0.2",
+ "parchment": "^1.1.4",
+ "quill-delta": "^3.6.2"
+ }
+ },
+ "quill-delta": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npm.taobao.org/quill-delta/download/quill-delta-3.6.3.tgz",
+ "integrity": "sha1-sZ/SuJQSMBxg4f8hPY2GDqwPEDI=",
+ "requires": {
+ "deep-equal": "^1.0.1",
+ "extend": "^3.0.2",
+ "fast-diff": "1.1.2"
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
+ "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
+ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
+ "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/raw-body/download/raw-body-2.4.2.tgz?cache=0&sync_timestamp=1637116781880&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fraw-body%2Fdownload%2Fraw-body-2.4.2.tgz",
+ "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.1",
+ "http-errors": "1.8.1",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-5.2.0.tgz",
+ "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz",
+ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1618847044058&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+ "dev": true
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz",
+ "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.nlark.com/regenerate/download/regenerate-1.4.2.tgz",
+ "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "9.0.0",
+ "resolved": "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz",
+ "integrity": "sha1-VNCccRXh9T3CMUqXSzLBw0Tv4yY=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
+ "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.14.5",
+ "resolved": "https://registry.nlark.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz?cache=0&sync_timestamp=1627057502723&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.5.tgz",
+ "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/regex-not/download/regex-not-1.0.2.tgz",
+ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz",
+ "integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/regexpp/download/regexpp-2.0.1.tgz",
+ "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.8.0",
+ "resolved": "https://registry.nlark.com/regexpu-core/download/regexpu-core-4.8.0.tgz",
+ "integrity": "sha1-5WBbo2G2excYR4UBMnUC9EeamPA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^9.0.0",
+ "regjsgen": "^0.5.2",
+ "regjsparser": "^0.7.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.0.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmmirror.com/regjsgen/download/regjsgen-0.5.2.tgz?cache=0&sync_timestamp=1633097458876&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregjsgen%2Fdownload%2Fregjsgen-0.5.2.tgz",
+ "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmmirror.com/regjsparser/download/regjsparser-0.7.0.tgz",
+ "integrity": "sha1-prZntUyIXhi1JVTLSWDvcRh+mWg=",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.nlark.com/jsesc/download/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.nlark.com/relateurl/download/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "renderkid": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmmirror.com/renderkid/download/renderkid-2.0.7.tgz",
+ "integrity": "sha1-Rk8namvc7mBvShWZP5sp/HTKhgk=",
+ "dev": true,
+ "requires": {
+ "css-select": "^4.1.3",
+ "dom-converter": "^0.2.0",
+ "htmlparser2": "^6.1.0",
+ "lodash": "^4.17.21",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "css-select": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/css-select/download/css-select-4.2.0.tgz",
+ "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.1.0",
+ "domhandler": "^4.3.0",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ }
+ },
+ "css-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmmirror.com/css-what/download/css-what-5.1.0.tgz",
+ "integrity": "sha1-P3tweq32M7r2LCzrhXm1RbtA9/4=",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256830355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz",
+ "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+ "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+ "dev": true
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.nlark.com/domutils/download/domutils-2.8.0.tgz",
+ "integrity": "sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/entities/download/entities-2.2.0.tgz",
+ "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+ "dev": true
+ },
+ "nth-check": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/nth-check/download/nth-check-2.0.1.tgz",
+ "integrity": "sha1-Lv4WL1w9oGoolZ+9PbddvuqfD8I=",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/repeat-element/download/repeat-element-1.1.4.tgz",
+ "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmmirror.com/request/download/request-2.88.2.tgz",
+ "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/uuid/download/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/require-main-filename/download/require-main-filename-2.0.0.tgz",
+ "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/requires-port/download/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resize-detector": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npm.taobao.org/resize-detector/download/resize-detector-0.1.10.tgz?cache=0&sync_timestamp=1613821238490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresize-detector%2Fdownload%2Fresize-detector-0.1.10.tgz",
+ "integrity": "sha1-HaP5YapfkUzLz9N1LVL9Rb7raSw="
+ },
+ "resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.nlark.com/resolve/download/resolve-1.20.0.tgz",
+ "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/resolve-from/download/resolve-from-3.0.0.tgz?cache=0&sync_timestamp=1622605305717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/resolve-url/download/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-2.0.0.tgz?cache=0&sync_timestamp=1629746923086&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frestore-cursor%2Fdownload%2Frestore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.nlark.com/ret/download/ret-0.1.15.tgz",
+ "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
+ "dev": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.nlark.com/retry/download/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/rimraf/download/rimraf-2.7.1.tgz",
+ "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/ripemd160/download/ripemd160-2.0.2.tgz",
+ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rtlcss": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/rtlcss/download/rtlcss-2.5.0.tgz",
+ "integrity": "sha1-RVVJ5JET+eHPgxaaRN5SbIFt6KQ=",
+ "requires": {
+ "chalk": "^2.4.2",
+ "findup": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "postcss": "^6.0.23",
+ "strip-json-comments": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.nlark.com/run-async/download/run-async-2.4.1.tgz",
+ "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=",
+ "dev": true
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/run-queue/download/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmmirror.com/rxjs/download/rxjs-6.6.7.tgz",
+ "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+ "dev": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1618847044058&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz",
+ "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz",
+ "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
+ "dev": true
+ },
+ "sass": {
+ "version": "1.32.13",
+ "resolved": "https://registry.npmmirror.com/sass/download/sass-1.32.13.tgz",
+ "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==",
+ "dev": true,
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0"
+ }
+ },
+ "sass-loader": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmmirror.com/sass-loader/download/sass-loader-10.2.0.tgz",
+ "integrity": "sha1-PWTBWQ+REBOz+kigsiqD1eFJRxY=",
+ "dev": true,
+ "requires": {
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.2"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-2.0.2.tgz",
+ "integrity": "sha1-1uO0+4GHByGuTghoqxHdY4NowSk=",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz",
+ "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz",
+ "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
+ "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz",
+ "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/select/download/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.11",
+ "resolved": "https://registry.nlark.com/selfsigned/download/selfsigned-1.10.11.tgz",
+ "integrity": "sha1-JJKc2Qb+D0S20B+yOZmnOVN6y+k=",
+ "dev": true,
+ "requires": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+ },
+ "send": {
+ "version": "0.17.2",
+ "resolved": "https://registry.npmmirror.com/send/download/send-0.17.2.tgz",
+ "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.8.1",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/download/mime-1.6.0.tgz",
+ "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.nlark.com/serve-index/download/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmmirror.com/http-errors/download/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
+ "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmmirror.com/serve-static/download/serve-static-1.14.2.tgz",
+ "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.2"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/set-blocking/download/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/set-value/download/set-value-2.0.1.tgz",
+ "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmmirror.com/setimmediate/download/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.2.0.tgz",
+ "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
+ "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmmirror.com/shell-quote/download/shell-quote-1.7.3.tgz",
+ "integrity": "sha1-qkDtrBcERbmkMeF7tiwLiBucQSM=",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/side-channel/download/side-channel-1.0.4.tgz",
+ "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sift": {
+ "version": "13.5.4",
+ "resolved": "https://registry.npmmirror.com/sift/download/sift-13.5.4.tgz",
+ "integrity": "sha1-eypn9yTIsvyhIfz970ARux6k4+8="
+ },
+ "signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz",
+ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
+ "dev": true
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmmirror.com/simple-swizzle/download/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz",
+ "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=",
+ "dev": true
+ }
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/slash/download/slash-2.0.0.tgz",
+ "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/slice-ansi/download/slice-ansi-2.1.0.tgz?cache=0&sync_timestamp=1622604533654&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fslice-ansi%2Fdownload%2Fslice-ansi-2.1.0.tgz",
+ "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz?cache=0&sync_timestamp=1617971785350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsnapdragon%2Fdownload%2Fsnapdragon-0.8.2.tgz",
+ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/snapdragon-util/download/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.24",
+ "resolved": "https://registry.npmmirror.com/sockjs/download/sockjs-0.3.24.tgz",
+ "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.11.3",
+ "uuid": "^8.3.2",
+ "websocket-driver": "^0.7.4"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.5.2",
+ "resolved": "https://registry.nlark.com/sockjs-client/download/sockjs-client-1.5.2.tgz?cache=0&sync_timestamp=1629825213973&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.5.2.tgz",
+ "integrity": "sha1-S8SMLanOR2nxnccjOWtQ9cEjMKM=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "^0.11.3",
+ "inherits": "^2.0.4",
+ "json3": "^3.3.3",
+ "url-parse": "^1.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/sort-keys/download/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600489644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
+ "sortablejs": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmmirror.com/sortablejs/download/sortablejs-1.10.2.tgz",
+ "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
+ "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.nlark.com/source-map-resolve/download/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmmirror.com/source-map-support/download/source-map-support-0.5.21.tgz?cache=0&sync_timestamp=1637320322789&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.nlark.com/source-map-url/download/source-map-url-0.4.1.tgz",
+ "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/spdx-correct/download/spdx-correct-3.1.1.tgz",
+ "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmmirror.com/spdx-license-ids/download/spdx-license-ids-3.0.11.tgz?cache=0&sync_timestamp=1636978505034&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz",
+ "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz",
+ "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/split-string/download/split-string-3.1.0.tgz",
+ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&sync_timestamp=1618847174560&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.nlark.com/sshpk/download/sshpk-1.16.1.tgz",
+ "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssr-window": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ssr-window/download/ssr-window-2.0.0.tgz",
+ "integrity": "sha1-mMMBrvmVIzF/jWlhjwAQeRCW78Q="
+ },
+ "ssri": {
+ "version": "6.0.2",
+ "resolved": "https://registry.nlark.com/ssri/download/ssri-6.0.2.tgz",
+ "integrity": "sha1-FXk5E08gRk5zAd26PpD/qPdyisU=",
+ "dev": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmmirror.com/stable/download/stable-0.1.8.tgz",
+ "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
+ "dev": true
+ },
+ "stackframe": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/stackframe/download/stackframe-1.2.0.tgz",
+ "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.nlark.com/statuses/download/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
+ "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.nlark.com/stream-each/download/stream-each-1.2.3.tgz",
+ "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz",
+ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz",
+ "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=",
+ "dev": true
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz",
+ "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz",
+ "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz",
+ "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz",
+ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1618847044058&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+ "dev": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz",
+ "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-5.0.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.1.tgz",
+ "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=",
+ "dev": true
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/strip-bom/download/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/strip-eof/download/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz?cache=0&sync_timestamp=1620046435959&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-final-newline%2Fdownload%2Fstrip-final-newline-2.0.0.tgz",
+ "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/strip-json-comments/download/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.nlark.com/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1621449652268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz",
+ "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz?cache=0&sync_timestamp=1634093339035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/svg-tags/download/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "dev": true
+ },
+ "svg.draggable.js": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmmirror.com/svg.draggable.js/download/svg.draggable.js-2.2.2.tgz",
+ "integrity": "sha1-xRSi8UBe+28CY+eVj1to/OUGA7o=",
+ "requires": {
+ "svg.js": "^2.0.1"
+ }
+ },
+ "svg.easing.js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/svg.easing.js/download/svg.easing.js-2.0.0.tgz",
+ "integrity": "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=",
+ "requires": {
+ "svg.js": ">=2.3.x"
+ }
+ },
+ "svg.filter.js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/svg.filter.js/download/svg.filter.js-2.0.2.tgz",
+ "integrity": "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=",
+ "requires": {
+ "svg.js": "^2.2.5"
+ }
+ },
+ "svg.js": {
+ "version": "2.7.1",
+ "resolved": "https://registry.nlark.com/svg.js/download/svg.js-2.7.1.tgz",
+ "integrity": "sha1-65d+1HNwAeq4WZSbSjmO4bt5lI0="
+ },
+ "svg.pathmorphing.js": {
+ "version": "0.1.3",
+ "resolved": "https://registry.nlark.com/svg.pathmorphing.js/download/svg.pathmorphing.js-0.1.3.tgz",
+ "integrity": "sha1-wlcYocx8NuhS7KvDgOdYrAm7K2U=",
+ "requires": {
+ "svg.js": "^2.4.0"
+ }
+ },
+ "svg.resize.js": {
+ "version": "1.4.3",
+ "resolved": "https://registry.nlark.com/svg.resize.js/download/svg.resize.js-1.4.3.tgz",
+ "integrity": "sha1-iFq9JI4M0gWza5c8S1eLmjbyMzI=",
+ "requires": {
+ "svg.js": "^2.6.5",
+ "svg.select.js": "^2.1.2"
+ },
+ "dependencies": {
+ "svg.select.js": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/svg.select.js/download/svg.select.js-2.1.2.tgz",
+ "integrity": "sha1-5BzhOxrP9Dp0Qfn4voeiMZyHvnM=",
+ "requires": {
+ "svg.js": "^2.2.5"
+ }
+ }
+ }
+ },
+ "svg.select.js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/svg.select.js/download/svg.select.js-3.0.1.tgz",
+ "integrity": "sha1-pBmONZ84JXOSJkFfghdqkOpcyRc=",
+ "requires": {
+ "svg.js": "^2.6.5"
+ }
+ },
+ "svgo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmmirror.com/svgo/download/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "sweetalert2": {
+ "version": "10.16.9",
+ "resolved": "https://registry.npmmirror.com/sweetalert2/download/sweetalert2-10.16.9.tgz",
+ "integrity": "sha1-jthvL6gRoTZmekg1fiBDSHBb6Mk="
+ },
+ "swiper": {
+ "version": "5.4.5",
+ "resolved": "https://registry.npmmirror.com/swiper/download/swiper-5.4.5.tgz",
+ "integrity": "sha512-7QjA0XpdOmiMoClfaZ2lYN6ICHcMm72LXiY+NF4fQLFidigameaofvpjEEiTQuw3xm5eksG5hzkaRsjQX57vtA==",
+ "requires": {
+ "dom7": "^2.1.5",
+ "ssr-window": "^2.0.0"
+ }
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmmirror.com/table/download/table-5.4.6.tgz",
+ "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1632811716250&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz",
+ "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmmirror.com/tapable/download/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "dev": true
+ },
+ "tar": {
+ "version": "6.1.11",
+ "resolved": "https://registry.nlark.com/tar/download/tar-6.1.11.tgz?cache=0&sync_timestamp=1629994598621&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftar%2Fdownload%2Ftar-6.1.11.tgz",
+ "integrity": "sha1-Z2CjjwA6+hsv/Q/+npq70Oqz1iE=",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/chownr/download/chownr-2.0.0.tgz",
+ "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-1.0.4.tgz",
+ "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ }
+ }
+ },
+ "terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmmirror.com/terser/download/terser-4.8.0.tgz",
+ "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz",
+ "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=",
+ "dev": true,
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^4.0.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-2.1.0.tgz?cache=0&sync_timestamp=1630260035189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-2.1.0.tgz",
+ "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz",
+ "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-3.0.0.tgz",
+ "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+ "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/text-table/download/text-table-0.2.0.tgz?cache=0&sync_timestamp=1618847142316&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftext-table%2Fdownload%2Ftext-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz",
+ "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.nlark.com/thenify-all/download/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "dev": true,
+ "requires": {
+ "thenify": ">= 3.1.0 < 4"
+ }
+ },
+ "thread-loader": {
+ "version": "2.1.3",
+ "resolved": "https://registry.nlark.com/thread-loader/download/thread-loader-2.1.3.tgz",
+ "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=",
+ "dev": true,
+ "requires": {
+ "loader-runner": "^2.3.1",
+ "loader-utils": "^1.1.0",
+ "neo-async": "^2.6.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.nlark.com/through/download/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/thunky/download/thunky-1.1.0.tgz",
+ "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.12",
+ "resolved": "https://registry.nlark.com/timers-browserify/download/timers-browserify-2.0.12.tgz",
+ "integrity": "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4=",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/timsort/download/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/tiny-emitter/download/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM="
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.0.33.tgz",
+ "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1628418893613&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/to-object-path/download/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604432327227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/to-regex/download/to-regex-3.0.2.tgz",
+ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/toidentifier/download/toidentifier-1.0.1.tgz?cache=0&sync_timestamp=1636938512912&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "dev": true
+ },
+ "toposort": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",
+ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz",
+ "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz?cache=0&sync_timestamp=1633302360065&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftr46%2Fdownload%2Ftr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
+ "tryer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/tryer/download/tryer-1.0.1.tgz",
+ "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=",
+ "dev": true
+ },
+ "ts-pnp": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/ts-pnp/download/ts-pnp-1.2.0.tgz",
+ "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=",
+ "dev": true
+ },
+ "tsconfig-paths": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmmirror.com/tsconfig-paths/download/tsconfig-paths-3.12.0.tgz",
+ "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
+ "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.1.tgz",
+ "integrity": "sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.nlark.com/tty-browserify/download/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.nlark.com/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.nlark.com/type-check/download/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.6.0.tgz",
+ "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.nlark.com/type-is/download/type-is-1.6.18.tgz",
+ "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uc.micro": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz",
+ "integrity": "sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw="
+ },
+ "uglify-js": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmmirror.com/uglify-js/download/uglify-js-3.4.10.tgz",
+ "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
+ "dev": true,
+ "requires": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ }
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/unbox-primitive/download/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha1-CF4hViXsMWJXTciFmr7nilmxRHE=",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw=",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631618601397&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-match-property-ecmascript%2Fdownload%2Funicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM=",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-GgGqVyR8FMVouJd1pUk4eIGJpxQ=",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631609367398&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/union-value/download/union-value-1.0.1.tgz",
+ "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/uniq/download/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/uniqs/download/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/unique-filename/download/unique-filename-1.1.1.tgz",
+ "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/unique-slug/download/unique-slug-2.0.2.tgz",
+ "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz",
+ "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/unquote/download/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/unset-value/download/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.nlark.com/has-value/download/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/has-values/download/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz",
+ "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
+ "dev": true
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/upper-case/download/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.nlark.com/uri-js/download/uri-js-4.4.1.tgz",
+ "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmmirror.com/urix/download/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmmirror.com/url/download/url-0.11.0.tgz",
+ "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/punycode/download/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-loader": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/url-loader/download/url-loader-2.3.0.tgz",
+ "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "mime": "^2.4.4",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "url-parse": {
+ "version": "1.5.3",
+ "resolved": "https://registry.nlark.com/url-parse/download/url-parse-1.5.3.tgz?cache=0&sync_timestamp=1627251248997&other_urls=https%3A%2F%2Fregistry.nlark.com%2Furl-parse%2Fdownload%2Furl-parse-1.5.3.tgz",
+ "integrity": "sha1-ccEwPTj7Zjmt4YPCmSyMwGht+GI=",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/use/download/use-3.1.1.tgz",
+ "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.nlark.com/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1622212984161&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.11.1.tgz",
+ "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.1.tgz",
+ "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.2",
+ "has-symbols": "^1.0.1",
+ "object.getownpropertydescriptors": "^2.1.0"
+ }
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.nlark.com/utila/download/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/utils-merge/download/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmmirror.com/uuid/download/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.nlark.com/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "vee-validate": {
+ "version": "3.4.5",
+ "resolved": "https://registry.npmmirror.com/vee-validate/download/vee-validate-3.4.5.tgz",
+ "integrity": "sha1-lqRWwwn3vbLM5iw7VU+W2JPp9q4="
+ },
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/vendors/download/vendors-1.0.4.tgz",
+ "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmmirror.com/verror/download/verror-1.10.0.tgz?cache=0&sync_timestamp=1635885078723&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fverror%2Fdownload%2Fverror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/vm-browserify/download/vm-browserify-1.1.2.tgz",
+ "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
+ "dev": true
+ },
+ "vue": {
+ "version": "2.6.14",
+ "resolved": "https://registry.npmmirror.com/vue/download/vue-2.6.14.tgz",
+ "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ=="
+ },
+ "vue-apexcharts": {
+ "version": "1.6.0",
+ "resolved": "https://registry.nlark.com/vue-apexcharts/download/vue-apexcharts-1.6.0.tgz?cache=0&sync_timestamp=1627496216651&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-apexcharts%2Fdownload%2Fvue-apexcharts-1.6.0.tgz",
+ "integrity": "sha1-x9Ov2T9xJDPUBOXO6046pl9CKvI="
+ },
+ "vue-autosuggest": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/vue-autosuggest/download/vue-autosuggest-2.2.0.tgz",
+ "integrity": "sha1-AgK5qu7vajpDV79AGnO+LsvhZvE="
+ },
+ "vue-awesome-swiper": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npm.taobao.org/vue-awesome-swiper/download/vue-awesome-swiper-4.1.1.tgz",
+ "integrity": "sha1-j3qyIa0AMCHXVrhqphj0KZJJAP4="
+ },
+ "vue-baidu-map": {
+ "version": "0.21.22",
+ "resolved": "https://registry.npm.taobao.org/vue-baidu-map/download/vue-baidu-map-0.21.22.tgz",
+ "integrity": "sha1-a3apHvNPGKeC1zKrD1QaGjqgaeA=",
+ "requires": {
+ "bmaplib.curveline": "^1.0.0",
+ "bmaplib.heatmap": "^1.0.4",
+ "bmaplib.lushu": "^1.0.7",
+ "bmaplib.markerclusterer": "^1.0.13",
+ "markdown-it": "^8.4.0"
+ }
+ },
+ "vue-chartjs": {
+ "version": "3.5.0",
+ "resolved": "https://registry.nlark.com/vue-chartjs/download/vue-chartjs-3.5.0.tgz",
+ "integrity": "sha1-7dDCvpTFIby8U1fCSvufNWCFX4Q="
+ },
+ "vue-class-component": {
+ "version": "7.2.6",
+ "resolved": "https://registry.nlark.com/vue-class-component/download/vue-class-component-7.2.6.tgz",
+ "integrity": "sha1-hHHgN7jkdi9aRkaG4Z5a/HCFAuQ="
+ },
+ "vue-cleave-component": {
+ "version": "2.1.3",
+ "resolved": "https://registry.nlark.com/vue-cleave-component/download/vue-cleave-component-2.1.3.tgz",
+ "integrity": "sha1-xJaNFB3088e/5P0kqpcZDCNoVwE=",
+ "requires": {
+ "cleave.js": "^1.4.7"
+ }
+ },
+ "vue-clickaway": {
+ "version": "2.2.2",
+ "resolved": "https://registry.nlark.com/vue-clickaway/download/vue-clickaway-2.2.2.tgz",
+ "integrity": "sha1-zs9oOVdeiyr8XT7bPvthbSk9u0Q=",
+ "requires": {
+ "loose-envify": "^1.2.0"
+ }
+ },
+ "vue-clipboard2": {
+ "version": "0.3.1",
+ "resolved": "https://registry.nlark.com/vue-clipboard2/download/vue-clipboard2-0.3.1.tgz",
+ "integrity": "sha1-blUft704SImyiw2jsSKJ7WvKSJQ=",
+ "requires": {
+ "clipboard": "^2.0.0"
+ }
+ },
+ "vue-context": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/vue-context/download/vue-context-6.0.0.tgz",
+ "integrity": "sha1-l6GkI/yG+3pU9G0VZ2cKuigaWXA=",
+ "requires": {
+ "vue-clickaway": "^2.2.2"
+ }
+ },
+ "vue-demi": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmmirror.com/vue-demi/download/vue-demi-0.12.1.tgz",
+ "integrity": "sha1-9+GO++z/0RqwadFHLXoG4xm0F0w="
+ },
+ "vue-echarts": {
+ "version": "5.0.0-beta.0",
+ "resolved": "https://registry.npmmirror.com/vue-echarts/download/vue-echarts-5.0.0-beta.0.tgz",
+ "integrity": "sha512-QZFKGXDAYFQo+F20REpzcdLx79nsl4kOorJRpN+08aYq4YiIlmtWss1Lxadm7Fo+NYyWm8nnT+h4xHv3uqWIDQ==",
+ "requires": {
+ "core-js": "^3.4.4",
+ "lodash": "^4.17.15",
+ "resize-detector": "^0.1.10"
+ }
+ },
+ "vue-eslint-parser": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmmirror.com/vue-eslint-parser/download/vue-eslint-parser-7.11.0.tgz",
+ "integrity": "sha1-IUtd6pYQB/z/su5luJEjB2KNDa8=",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.2.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1637466913662&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+ "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "vue-feather-icons": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/vue-feather-icons/download/vue-feather-icons-5.1.0.tgz",
+ "integrity": "sha1-22WKyl9MCIwvcl+LHyln1KHk05g=",
+ "requires": {
+ "babel-helper-vue-jsx-merge-props": "^2.0.2"
+ }
+ },
+ "vue-flatpickr-component": {
+ "version": "8.1.6",
+ "resolved": "https://registry.nlark.com/vue-flatpickr-component/download/vue-flatpickr-component-8.1.6.tgz",
+ "integrity": "sha1-j7JdxylGzrGrAFuHGoFRRhwIg/Y=",
+ "requires": {
+ "flatpickr": "^4.6.6"
+ }
+ },
+ "vue-form-wizard": {
+ "version": "0.8.4",
+ "resolved": "https://registry.nlark.com/vue-form-wizard/download/vue-form-wizard-0.8.4.tgz",
+ "integrity": "sha1-3fhkyXCbe6KmMj9Z5dbRdTa3gA4="
+ },
+ "vue-functional-data-merge": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/vue-functional-data-merge/download/vue-functional-data-merge-3.1.0.tgz",
+ "integrity": "sha1-CKd5dYO381aAWH+KHVHXKaodxlc="
+ },
+ "vue-good-table": {
+ "version": "2.21.0",
+ "resolved": "https://registry.npmmirror.com/vue-good-table/download/vue-good-table-2.21.0.tgz",
+ "integrity": "sha1-ePkO5OQGlrclReKhmMk5jEXwukU=",
+ "requires": {
+ "date-fns": "^2.0.0-beta.4",
+ "diacriticless": "1.0.1",
+ "lodash.assign": "^4.2.0",
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.filter": "^4.6.0",
+ "lodash.foreach": "^4.5.0",
+ "lodash.isequal": "^4.5.0"
+ }
+ },
+ "vue-hot-reload-api": {
+ "version": "2.3.4",
+ "resolved": "https://registry.nlark.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
+ "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
+ "dev": true
+ },
+ "vue-i18n": {
+ "version": "8.22.2",
+ "resolved": "https://registry.npmmirror.com/vue-i18n/download/vue-i18n-8.22.2.tgz",
+ "integrity": "sha1-WCmaWgUOZ7T3mdlv7n3YvSaeCQc="
+ },
+ "vue-loader": {
+ "version": "15.9.8",
+ "resolved": "https://registry.npmmirror.com/vue-loader/download/vue-loader-15.9.8.tgz",
+ "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==",
+ "dev": true,
+ "requires": {
+ "@vue/component-compiler-utils": "^3.1.0",
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.1.0",
+ "vue-hot-reload-api": "^2.3.0",
+ "vue-style-loader": "^4.1.0"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ }
+ }
+ },
+ "vue-loader-v16": {
+ "version": "npm:vue-loader@16.8.3",
+ "resolved": "https://registry.npmmirror.com/vue-loader/download/vue-loader-16.8.3.tgz",
+ "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "hash-sum": "^2.0.0",
+ "loader-utils": "^2.0.0"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-2.0.2.tgz",
+ "integrity": "sha1-1uO0+4GHByGuTghoqxHdY4NowSk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ }
+ }
+ },
+ "vue-perfect-scrollbar": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/vue-perfect-scrollbar/download/vue-perfect-scrollbar-0.2.1.tgz",
+ "integrity": "sha1-L+yrl1US98jDfhYQ3uSPr0bWSfM="
+ },
+ "vue-prism-component": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/vue-prism-component/download/vue-prism-component-1.1.1.tgz",
+ "integrity": "sha1-3w43X3+bNnsGmy1U5u2G+s3pYDA="
+ },
+ "vue-property-decorator": {
+ "version": "8.5.1",
+ "resolved": "https://registry.nlark.com/vue-property-decorator/download/vue-property-decorator-8.5.1.tgz",
+ "integrity": "sha1-VxqRz40rUH9TfXm/gnWvMYRXL/8=",
+ "requires": {
+ "vue-class-component": "^7.1.0"
+ }
+ },
+ "vue-quill-editor": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmmirror.com/vue-quill-editor/download/vue-quill-editor-3.0.6.tgz",
+ "integrity": "sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==",
+ "requires": {
+ "object-assign": "^4.1.1",
+ "quill": "^1.3.4"
+ }
+ },
+ "vue-ripple-directive": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/vue-ripple-directive/download/vue-ripple-directive-2.0.1.tgz",
+ "integrity": "sha1-gXrkvCh0y/AdigGMjo2XyMrbY1U=",
+ "requires": {
+ "vue": "^2.2.1"
+ }
+ },
+ "vue-router": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmmirror.com/vue-router/download/vue-router-3.4.9.tgz",
+ "integrity": "sha512-CGAKWN44RqXW06oC+u4mPgHLQQi2t6vLD/JbGRDAXm0YpMv0bgpKuU5bBd7AvMgfTz9kXVRIWKHqRwGEb8xFkA=="
+ },
+ "vue-select": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmmirror.com/vue-select/download/vue-select-3.11.2.tgz",
+ "integrity": "sha1-Pvk+PycH4TPC3wspIKBe6nh2TRg="
+ },
+ "vue-slider-component": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmmirror.com/vue-slider-component/download/vue-slider-component-3.2.11.tgz",
+ "integrity": "sha1-eeM43FoyypJ6j3nuVSVhl714UjU=",
+ "requires": {
+ "core-js": "^3.6.5",
+ "vue-property-decorator": "^8.0.0"
+ }
+ },
+ "vue-style-loader": {
+ "version": "4.1.3",
+ "resolved": "https://registry.nlark.com/vue-style-loader/download/vue-style-loader-4.1.3.tgz",
+ "integrity": "sha1-bVWGOlH6dXqyTonZNxRlByqnvDU=",
+ "dev": true,
+ "requires": {
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.0.2"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ }
+ }
+ },
+ "vue-sweetalert2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.nlark.com/vue-sweetalert2/download/vue-sweetalert2-4.1.1.tgz",
+ "integrity": "sha1-d5Y4IdeYu/lf1FZ8zVXozFHHhGM=",
+ "requires": {
+ "sweetalert2": "10.x"
+ }
+ },
+ "vue-template-compiler": {
+ "version": "2.6.14",
+ "resolved": "https://registry.npmmirror.com/vue-template-compiler/download/vue-template-compiler-2.6.14.tgz",
+ "integrity": "sha1-ovDn2YVnDULJye4NBE/tdpD092M=",
+ "dev": true,
+ "requires": {
+ "de-indent": "^1.0.2",
+ "he": "^1.1.0"
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz",
+ "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
+ "dev": true
+ },
+ "vue-toastification": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmmirror.com/vue-toastification/download/vue-toastification-1.7.8.tgz",
+ "integrity": "sha1-/ZcPCkZWrCXp1j/12GPN8n2aHZw="
+ },
+ "vue-tour": {
+ "version": "1.5.0",
+ "resolved": "https://registry.nlark.com/vue-tour/download/vue-tour-1.5.0.tgz",
+ "integrity": "sha1-Tbu8A+ppMqGuPM2BnCGTBPOjAQk=",
+ "requires": {
+ "hash-sum": "^2.0.0",
+ "jump.js": "^1.0.2",
+ "popper.js": "^1.16.0",
+ "vue": "^2.6.10"
+ }
+ },
+ "vue-tree-halower": {
+ "version": "1.8.3",
+ "resolved": "https://registry.nlark.com/vue-tree-halower/download/vue-tree-halower-1.8.3.tgz",
+ "integrity": "sha1-pdxTsz29gg6ndtxcVUoDvKnD15k=",
+ "requires": {
+ "vue": "^2.4.4"
+ }
+ },
+ "vue2-leaflet": {
+ "version": "2.5.2",
+ "resolved": "https://registry.nlark.com/vue2-leaflet/download/vue2-leaflet-2.5.2.tgz",
+ "integrity": "sha1-uJwFb+dBx858ud9aypCAkJLl640="
+ },
+ "vuedraggable": {
+ "version": "2.24.3",
+ "resolved": "https://registry.nlark.com/vuedraggable/download/vuedraggable-2.24.3.tgz?cache=0&sync_timestamp=1629673069618&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvuedraggable%2Fdownload%2Fvuedraggable-2.24.3.tgz",
+ "integrity": "sha1-Q8k4SbdGokzlA+Ej1bJZxwG6DRk=",
+ "requires": {
+ "sortablejs": "1.10.2"
+ }
+ },
+ "vuex": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/vuex/download/vuex-3.6.0.tgz",
+ "integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ=="
+ },
+ "watchpack": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmmirror.com/watchpack/download/watchpack-1.7.5.tgz",
+ "integrity": "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM=",
+ "dev": true,
+ "requires": {
+ "chokidar": "^3.4.1",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.1"
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz",
+ "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/anymatch/download/anymatch-2.0.0.tgz",
+ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.nlark.com/binary-extensions/download/binary-extensions-1.13.1.tgz",
+ "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+ "dev": true,
+ "optional": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-1.2.13.tgz",
+ "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+ "dev": true,
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1632954501757&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz?cache=0&sync_timestamp=1632934586547&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-binary-path/download/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz",
+ "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ }
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.nlark.com/wbuf/download/wbuf-1.7.3.tgz",
+ "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/wcwidth/download/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz?cache=0&sync_timestamp=1631408600646&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "webpack": {
+ "version": "4.46.0",
+ "resolved": "https://registry.npmmirror.com/webpack/download/webpack-4.46.0.tgz",
+ "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.4.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.5.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.3",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.7.4",
+ "webpack-sources": "^1.4.1"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+ "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "webpack-bundle-analyzer": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.9.0.tgz",
+ "integrity": "sha1-9vlNsQj7V05BWtMT3kGicH0z7zw=",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1",
+ "bfj": "^6.1.1",
+ "chalk": "^2.4.1",
+ "commander": "^2.18.0",
+ "ejs": "^2.6.1",
+ "express": "^4.16.3",
+ "filesize": "^3.6.1",
+ "gzip-size": "^5.0.0",
+ "lodash": "^4.17.19",
+ "mkdirp": "^0.5.1",
+ "opener": "^1.5.1",
+ "ws": "^6.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "webpack-chain": {
+ "version": "6.5.1",
+ "resolved": "https://registry.nlark.com/webpack-chain/download/webpack-chain-6.5.1.tgz",
+ "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=",
+ "dev": true,
+ "requires": {
+ "deepmerge": "^1.5.2",
+ "javascript-stringify": "^2.0.1"
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU=",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.11.3",
+ "resolved": "https://registry.npmmirror.com/webpack-dev-server/download/webpack-dev-server-3.11.3.tgz",
+ "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==",
+ "dev": true,
+ "requires": {
+ "ansi-html-community": "0.0.8",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.3.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.8",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "^0.3.21",
+ "sockjs-client": "^1.5.0",
+ "spdy": "^4.0.2",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "^13.3.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/anymatch/download/anymatch-2.0.0.tgz",
+ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.nlark.com/binary-extensions/download/binary-extensions-1.13.1.tgz",
+ "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1636945191390&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+ "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-5.0.0.tgz",
+ "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1632811716250&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-1.2.13.tgz",
+ "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+ "dev": true,
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1632954501757&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz?cache=0&sync_timestamp=1632934586547&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.nlark.com/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1628691761253&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz",
+ "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-binary-path/download/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-exists%2Fdownload%2Fpath-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz",
+ "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075894281&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+ "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz",
+ "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-6.1.0.tgz",
+ "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1631557201275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz",
+ "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-13.3.2.tgz",
+ "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1637030983058&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz",
+ "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477439589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz",
+ "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/uuid/download/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-merge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.nlark.com/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&sync_timestamp=1623054906070&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz",
+ "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1636982699200&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz",
+ "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.nlark.com/websocket-driver/download/websocket-driver-0.7.4.tgz",
+ "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/which/download/which-1.3.1.tgz",
+ "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/which-module/download/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
+ "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.nlark.com/worker-farm/download/worker-farm-1.7.0.tgz?cache=0&sync_timestamp=1618846953836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fworker-farm%2Fdownload%2Fworker-farm-1.7.0.tgz",
+ "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=",
+ "dev": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557201275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/write/download/write-1.0.3.tgz",
+ "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmmirror.com/ws/download/ws-6.2.2.tgz",
+ "integrity": "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4=",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/xtend/download/xtend-4.0.2.tgz",
+ "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.nlark.com/y18n/download/y18n-4.0.3.tgz",
+ "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-3.1.1.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz",
+ "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-16.2.0.tgz",
+ "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-7.0.4.tgz",
+ "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.nlark.com/y18n/download/y18n-5.0.8.tgz",
+ "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637030983058&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ },
+ "yorkie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/yorkie/download/yorkie-2.0.0.tgz",
+ "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=",
+ "dev": true,
+ "requires": {
+ "execa": "^0.8.0",
+ "is-ci": "^1.0.10",
+ "normalize-path": "^1.0.0",
+ "strip-indent": "^2.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/cross-spawn/download/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmmirror.com/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1637147236741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/get-stream/download/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-4.1.5.tgz",
+ "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "normalize-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-1.0.0.tgz",
+ "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/yallist/download/yallist-2.1.2.tgz?cache=0&sync_timestamp=1622604530774&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "zrender": {
+ "version": "4.3.1",
+ "resolved": "https://registry.nlark.com/zrender/download/zrender-4.3.1.tgz",
+ "integrity": "sha1-uviqbcgYei+BlpLX1fm+36K5D6M="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ab1b9ce
--- /dev/null
+++ b/package.json
@@ -0,0 +1,87 @@
+{
+ "name": "rexo-ui-vuejs-html-admin-dashboard-template",
+ "version": "1.7.0",
+ "private": true,
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "lint": "vue-cli-service lint"
+ },
+ "dependencies": {
+ "@casl/ability": "4.1.6",
+ "@casl/vue": "1.1.1",
+ "@fullcalendar/common": "5.x",
+ "@fullcalendar/core": "5.x",
+ "@fullcalendar/daygrid": "5.x",
+ "@fullcalendar/interaction": "5.x",
+ "@fullcalendar/list": "5.x",
+ "@fullcalendar/timegrid": "5.x",
+ "@fullcalendar/vue": "5.x",
+ "@vue/composition-api": "1.3.0",
+ "@vueuse/core": "4.0.0",
+ "animate.css": "4.1.1",
+ "apexcharts": "3.23.0",
+ "axios": "0.21.1",
+ "axios-mock-adapter": "1.19.0",
+ "bootstrap": "4.6.0",
+ "bootstrap-vue": "2.21.1",
+ "chart.js": "2.9.4",
+ "core-js": "3.8.1",
+ "echarts": "4.8.0",
+ "flatpickr": "^4.6.9",
+ "jsonwebtoken": "8.5.1",
+ "leaflet": "1.6.0",
+ "portal-vue": "2.1.7",
+ "postcss-rtl": "1.7.3",
+ "prismjs": "1.19.0",
+ "swiper": "5.4.5",
+ "uuid": "8.3.2",
+ "vee-validate": "3.4.5",
+ "vue": "2.x",
+ "vue-apexcharts": "1.6.0",
+ "vue-autosuggest": "2.2.0",
+ "vue-awesome-swiper": "4.1.1",
+ "vue-baidu-map": "^0.21.22",
+ "vue-chartjs": "3.5.0",
+ "vue-cleave-component": "2.1.3",
+ "vue-clipboard2": "0.3.1",
+ "vue-context": "6.0.0",
+ "vue-echarts": "5.0.0-beta.0",
+ "vue-feather-icons": "5.1.0",
+ "vue-flatpickr-component": "8.1.6",
+ "vue-form-wizard": "0.8.4",
+ "vue-good-table": "2.21.0",
+ "vue-i18n": "8.22.2",
+ "vue-perfect-scrollbar": "0.2.1",
+ "vue-prism-component": "1.1.1",
+ "vue-quill-editor": "3.0.6",
+ "vue-ripple-directive": "2.0.1",
+ "vue-router": "3.4.9",
+ "vue-select": "3.11.2",
+ "vue-slider-component": "3.2.11",
+ "vue-sweetalert2": "4.1.1",
+ "vue-toastification": "1.7.8",
+ "vue-tour": "1.5.0",
+ "vue-tree-halower": "1.8.3",
+ "vue2-leaflet": "2.5.2",
+ "vuedraggable": "2.24.3",
+ "vuex": "3.6.0"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "~4.5.9",
+ "@vue/cli-plugin-eslint": "~4.5.9",
+ "@vue/cli-plugin-router": "~4.5.9",
+ "@vue/cli-plugin-vuex": "~4.5.9",
+ "@vue/cli-service": "~4.5.9",
+ "@vue/eslint-config-airbnb": "^5.3.0",
+ "@vuepress/plugin-medium-zoom": "^1.7.1",
+ "babel-eslint": "^10.0.3",
+ "compression-webpack-plugin": "^5.0.1",
+ "eslint": "6.8.0",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-vue": "6.2.2",
+ "sass": "1.32.*",
+ "sass-loader": "^10.1.0",
+ "vue-template-compiler": "2.x"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..fa8a7fa
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,5 @@
+const rtl = require('postcss-rtl')
+
+module.exports = {
+ plugins: [rtl()],
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..427179e
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..eb7f263
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+ Rexo-UI VueJS & HTML 网站/后台管理模板
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/loader.css b/public/loader.css
new file mode 100644
index 0000000..402c59b
--- /dev/null
+++ b/public/loader.css
@@ -0,0 +1,84 @@
+body {
+ margin: 0;
+}
+
+#loading-bg {
+ width: 100%;
+ height: 100%;
+ background: #fff;
+ display: block;
+ position: absolute;
+}
+.loading-logo {
+ position: absolute;
+ left: calc(50% - 35px);
+ top: 40%;
+}
+.loading {
+ position: absolute;
+ left: calc(50% - 25px);
+ top: 55%;
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 3px solid transparent;
+}
+.loading .effect-1,
+.loading .effect-2 {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border: 3px solid transparent;
+ border-left: 3px solid rgb(51, 102, 204);
+ border-radius: 50%;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.loading .effect-1 {
+ animation: rotate 1s ease infinite;
+}
+.loading .effect-2 {
+ animation: rotateOpacity 1s ease infinite 0.1s;
+}
+.loading .effect-3 {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border: 3px solid transparent;
+ border-left: 3px solid rgb(51, 102, 204);
+ -webkit-animation: rotateOpacity 1s ease infinite 0.2s;
+ animation: rotateOpacity 1s ease infinite 0.2s;
+ border-radius: 50%;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.loading .effects {
+ transition: all 0.3s ease;
+}
+
+@keyframes rotate {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(1turn);
+ transform: rotate(1turn);
+ }
+}
+@keyframes rotateOpacity {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 0.1;
+ }
+ 100% {
+ -webkit-transform: rotate(1turn);
+ transform: rotate(1turn);
+ opacity: 1;
+ }
+}
diff --git a/public/logo.png b/public/logo.png
new file mode 100644
index 0000000..3ae0813
Binary files /dev/null and b/public/logo.png differ
diff --git a/src/@core/app-config/useAppConfig.js b/src/@core/app-config/useAppConfig.js
new file mode 100644
index 0000000..20086ff
--- /dev/null
+++ b/src/@core/app-config/useAppConfig.js
@@ -0,0 +1,141 @@
+import { computed, watch } from '@vue/composition-api'
+import store from '@/store'
+
+export default function usAppConfig() {
+ // ------------------------------------------------
+ // 垂直折叠导航
+ // ------------------------------------------------
+ const isVerticalMenuCollapsed = computed({
+ get: () => store.state.verticalMenu.isVerticalMenuCollapsed,
+ set: val => {
+ store.commit('verticalMenu/UPDATE_VERTICAL_MENU_COLLAPSED', val)
+ },
+ })
+
+ // ------------------------------------------------
+ // RTL 从右向左模式
+ // ------------------------------------------------
+ const isRTL = computed({
+ get: () => store.state.appConfig.layout.isRTL,
+ set: val => {
+ store.commit('appConfig/TOGGLE_RTL', val)
+ },
+ })
+
+ // ------------------------------------------------
+ // 全局皮肤
+ // ------------------------------------------------
+ const skin = computed({
+ get: () => store.state.appConfig.layout.skin,
+ set: val => {
+ store.commit('appConfig/UPDATE_SKIN', val)
+ },
+ })
+
+ const skinClasses = computed(() => {
+ if (skin.value === 'bordered') return 'bordered-layout'
+ if (skin.value === 'semi-dark') return 'semi-dark-layout'
+
+ // 浅色布局(默认)和深色布局皮肤禁止添加类返回,否则 body 类会被更新
+ return null
+ })
+
+ // ------------------------------------------------
+ // 路由转换
+ // ------------------------------------------------
+ const routerTransition = computed({
+ get: () => store.state.appConfig.layout.routerTransition,
+ set: val => {
+ store.commit('appConfig/UPDATE_ROUTER_TRANSITION', val)
+ },
+ })
+
+ // *===============================================---*
+ // *--------- 布局 ---------------------------------------*
+ // *===============================================---*
+
+ // ------------------------------------------------
+ // 布局类型
+ // ------------------------------------------------
+
+ const layoutType = computed({
+ get: () => store.state.appConfig.layout.type,
+ set: val => {
+ store.commit('appConfig/UPDATE_LAYOUT_TYPE', val)
+ },
+ })
+
+ // 混合布局仅有垂直导航布局,更改为水平菜单布局时会重置皮肤
+ watch(layoutType, val => {
+ if (val === 'horizontal' && skin.value === 'semi-dark') skin.value = 'light'
+ })
+
+ // ------------------------------------------------
+ // 内容宽度(全宽/盒子)
+ // ------------------------------------------------
+ const contentWidth = computed({
+ get: () => store.state.appConfig.layout.contentWidth,
+ set: val => {
+ store.commit('appConfig/UPDATE_CONTENT_WIDTH', val)
+ },
+ })
+
+ // ------------------------------------------------
+ // 隐藏导航
+ // ------------------------------------------------
+ const isNavMenuHidden = computed({
+ get: () => store.state.appConfig.layout.menu.hidden,
+ set: val => {
+ store.commit('appConfig/UPDATE_NAV_MENU_HIDDEN', val)
+ },
+ })
+
+ // *===============================================---*
+ // *--------- 导航栏 ---------------------------------------*
+ // *===============================================---*
+
+ const navbarBackgroundColor = computed({
+ get: () => store.state.appConfig.layout.navbar.backgroundColor,
+ set: val => {
+ store.commit('appConfig/UPDATE_NAVBAR_CONFIG', { backgroundColor: val })
+ },
+ })
+
+ const navbarType = computed({
+ get: () => store.state.appConfig.layout.navbar.type,
+ set: val => {
+ store.commit('appConfig/UPDATE_NAVBAR_CONFIG', { type: val })
+ },
+ })
+
+ // *===============================================---*
+ // *--------- 页脚 ---------------------------------------*
+ // *===============================================---*
+
+ const footerType = computed({
+ get: () => store.state.appConfig.layout.footer.type,
+ set: val => {
+ store.commit('appConfig/UPDATE_FOOTER_CONFIG', { type: val })
+ },
+ })
+
+ return {
+ isVerticalMenuCollapsed,
+ isRTL,
+ skin,
+ skinClasses,
+ routerTransition,
+
+ // 导航栏
+ navbarBackgroundColor,
+ navbarType,
+
+ // 页脚
+ footerType,
+
+ // 布局
+ layoutType,
+ contentWidth,
+ isNavMenuHidden,
+ }
+}
diff --git a/src/@core/assets/fonts/feather/fonts/feather.eot b/src/@core/assets/fonts/feather/fonts/feather.eot
new file mode 100644
index 0000000..58371d9
Binary files /dev/null and b/src/@core/assets/fonts/feather/fonts/feather.eot differ
diff --git a/src/@core/assets/fonts/feather/fonts/feather.svg b/src/@core/assets/fonts/feather/fonts/feather.svg
new file mode 100644
index 0000000..2eed58e
--- /dev/null
+++ b/src/@core/assets/fonts/feather/fonts/feather.svg
@@ -0,0 +1,849 @@
+
+
+
+
diff --git a/src/@core/assets/fonts/feather/fonts/feather.ttf b/src/@core/assets/fonts/feather/fonts/feather.ttf
new file mode 100644
index 0000000..0b33dac
Binary files /dev/null and b/src/@core/assets/fonts/feather/fonts/feather.ttf differ
diff --git a/src/@core/assets/fonts/feather/fonts/feather.woff b/src/@core/assets/fonts/feather/fonts/feather.woff
new file mode 100644
index 0000000..9b03a72
Binary files /dev/null and b/src/@core/assets/fonts/feather/fonts/feather.woff differ
diff --git a/src/@core/assets/fonts/feather/iconfont.css b/src/@core/assets/fonts/feather/iconfont.css
new file mode 100644
index 0000000..7248096
--- /dev/null
+++ b/src/@core/assets/fonts/feather/iconfont.css
@@ -0,0 +1,1112 @@
+@font-face {
+ font-family: 'feather';
+ src: url('fonts/feather.eot?t=1525787366991'); /* IE9*/
+ src: url('fonts/feather.eot?t=1525787366991#iefix') format('embedded-opentype'),
+ /* IE6-IE8 */ url('fonts/feather.woff?t=1525787366991') format('woff'),
+ /* chrome, firefox */ url('fonts/feather.ttf?t=1525787366991') format('truetype'),
+ /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ url('fonts/feather.svg?t=1525787366991#feather')
+ format('svg'); /* iOS 4.1- */
+}
+
+.feather {
+ // 使用 !important 以防止浏览器扩展出现更改字体的问题
+ font-family: 'feather' !important;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+
+ // 提升字体渲染
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-alert-octagon:before {
+ content: '\e81b';
+}
+
+.icon-alert-circle:before {
+ content: '\e81c';
+}
+
+.icon-activity:before {
+ content: '\e81d';
+}
+
+.icon-alert-triangle:before {
+ content: '\e81e';
+}
+
+.icon-align-center:before {
+ content: '\e81f';
+}
+
+.icon-airplay:before {
+ content: '\e820';
+}
+
+.icon-align-justify:before {
+ content: '\e821';
+}
+
+.icon-align-left:before {
+ content: '\e822';
+}
+
+.icon-align-right:before {
+ content: '\e823';
+}
+
+.icon-arrow-down-left:before {
+ content: '\e824';
+}
+
+.icon-arrow-down-right:before {
+ content: '\e825';
+}
+
+.icon-anchor:before {
+ content: '\e826';
+}
+
+.icon-aperture:before {
+ content: '\e827';
+}
+
+.icon-arrow-left:before {
+ content: '\e828';
+}
+
+.icon-arrow-right:before {
+ content: '\e829';
+}
+
+.icon-arrow-down:before {
+ content: '\e82a';
+}
+
+.icon-arrow-up-left:before {
+ content: '\e82b';
+}
+
+.icon-arrow-up-right:before {
+ content: '\e82c';
+}
+
+.icon-arrow-up:before {
+ content: '\e82d';
+}
+
+.icon-award:before {
+ content: '\e82e';
+}
+
+.icon-bar-chart:before {
+ content: '\e82f';
+}
+
+.icon-at-sign:before {
+ content: '\e830';
+}
+
+.icon-bar-chart-2:before {
+ content: '\e831';
+}
+
+.icon-battery-charging:before {
+ content: '\e832';
+}
+
+.icon-bell-off:before {
+ content: '\e833';
+}
+
+.icon-battery:before {
+ content: '\e834';
+}
+
+.icon-bluetooth:before {
+ content: '\e835';
+}
+
+.icon-bell:before {
+ content: '\e836';
+}
+
+.icon-book:before {
+ content: '\e837';
+}
+
+.icon-briefcase:before {
+ content: '\e838';
+}
+
+.icon-camera-off:before {
+ content: '\e839';
+}
+
+.icon-calendar:before {
+ content: '\e83a';
+}
+
+.icon-bookmark:before {
+ content: '\e83b';
+}
+
+.icon-box:before {
+ content: '\e83c';
+}
+
+.icon-camera:before {
+ content: '\e83d';
+}
+
+.icon-check-circle:before {
+ content: '\e83e';
+}
+
+.icon-check:before {
+ content: '\e83f';
+}
+
+.icon-check-square:before {
+ content: '\e840';
+}
+
+.icon-cast:before {
+ content: '\e841';
+}
+
+.icon-chevron-down:before {
+ content: '\e842';
+}
+
+.icon-chevron-left:before {
+ content: '\e843';
+}
+
+.icon-chevron-right:before {
+ content: '\e844';
+}
+
+.icon-chevron-up:before {
+ content: '\e845';
+}
+
+.icon-chevrons-down:before {
+ content: '\e846';
+}
+
+.icon-chevrons-right:before {
+ content: '\e847';
+}
+
+.icon-chevrons-up:before {
+ content: '\e848';
+}
+
+.icon-chevrons-left:before {
+ content: '\e849';
+}
+
+.icon-circle:before {
+ content: '\e84a';
+}
+
+.icon-clipboard:before {
+ content: '\e84b';
+}
+
+.icon-chrome:before {
+ content: '\e84c';
+}
+
+.icon-clock:before {
+ content: '\e84d';
+}
+
+.icon-cloud-lightning:before {
+ content: '\e84e';
+}
+
+.icon-cloud-drizzle:before {
+ content: '\e84f';
+}
+
+.icon-cloud-rain:before {
+ content: '\e850';
+}
+
+.icon-cloud-off:before {
+ content: '\e851';
+}
+
+.icon-codepen:before {
+ content: '\e852';
+}
+
+.icon-cloud-snow:before {
+ content: '\e853';
+}
+
+.icon-compass:before {
+ content: '\e854';
+}
+
+.icon-copy:before {
+ content: '\e855';
+}
+
+.icon-corner-down-right:before {
+ content: '\e856';
+}
+
+.icon-corner-down-left:before {
+ content: '\e857';
+}
+
+.icon-corner-left-down:before {
+ content: '\e858';
+}
+
+.icon-corner-left-up:before {
+ content: '\e859';
+}
+
+.icon-corner-up-left:before {
+ content: '\e85a';
+}
+
+.icon-corner-up-right:before {
+ content: '\e85b';
+}
+
+.icon-corner-right-down:before {
+ content: '\e85c';
+}
+
+.icon-corner-right-up:before {
+ content: '\e85d';
+}
+
+.icon-cpu:before {
+ content: '\e85e';
+}
+
+.icon-credit-card:before {
+ content: '\e85f';
+}
+
+.icon-crosshair:before {
+ content: '\e860';
+}
+
+.icon-disc:before {
+ content: '\e861';
+}
+
+.icon-delete:before {
+ content: '\e862';
+}
+
+.icon-download-cloud:before {
+ content: '\e863';
+}
+
+.icon-download:before {
+ content: '\e864';
+}
+
+.icon-droplet:before {
+ content: '\e865';
+}
+
+.icon-edit-2:before {
+ content: '\e866';
+}
+
+.icon-edit:before {
+ content: '\e867';
+}
+
+.icon-edit-1:before {
+ content: '\e868';
+}
+
+.icon-external-link:before {
+ content: '\e869';
+}
+
+.icon-eye:before {
+ content: '\e86a';
+}
+
+.icon-feather:before {
+ content: '\e86b';
+}
+
+.icon-facebook:before {
+ content: '\e86c';
+}
+
+.icon-file-minus:before {
+ content: '\e86d';
+}
+
+.icon-eye-off:before {
+ content: '\e86e';
+}
+
+.icon-fast-forward:before {
+ content: '\e86f';
+}
+
+.icon-file-text:before {
+ content: '\e870';
+}
+
+.icon-film:before {
+ content: '\e871';
+}
+
+.icon-file:before {
+ content: '\e872';
+}
+
+.icon-file-plus:before {
+ content: '\e873';
+}
+
+.icon-folder:before {
+ content: '\e874';
+}
+
+.icon-filter:before {
+ content: '\e875';
+}
+
+.icon-flag:before {
+ content: '\e876';
+}
+
+.icon-globe:before {
+ content: '\e877';
+}
+
+.icon-grid:before {
+ content: '\e878';
+}
+
+.icon-heart:before {
+ content: '\e879';
+}
+
+.icon-home:before {
+ content: '\e87a';
+}
+
+.icon-github:before {
+ content: '\e87b';
+}
+
+.icon-image:before {
+ content: '\e87c';
+}
+
+.icon-inbox:before {
+ content: '\e87d';
+}
+
+.icon-layers:before {
+ content: '\e87e';
+}
+
+.icon-info:before {
+ content: '\e87f';
+}
+
+.icon-instagram:before {
+ content: '\e880';
+}
+
+.icon-layout:before {
+ content: '\e881';
+}
+
+.icon-link-2:before {
+ content: '\e882';
+}
+
+.icon-life-buoy:before {
+ content: '\e883';
+}
+
+.icon-link:before {
+ content: '\e884';
+}
+
+.icon-log-in:before {
+ content: '\e885';
+}
+
+.icon-list:before {
+ content: '\e886';
+}
+
+.icon-lock:before {
+ content: '\e887';
+}
+
+.icon-log-out:before {
+ content: '\e888';
+}
+
+.icon-loader:before {
+ content: '\e889';
+}
+
+.icon-mail:before {
+ content: '\e88a';
+}
+
+.icon-maximize-2:before {
+ content: '\e88b';
+}
+
+.icon-map:before {
+ content: '\e88c';
+}
+
+.icon-map-pin:before {
+ content: '\e88e';
+}
+
+.icon-menu:before {
+ content: '\e88f';
+}
+
+.icon-message-circle:before {
+ content: '\e890';
+}
+
+.icon-message-square:before {
+ content: '\e891';
+}
+
+.icon-minimize-2:before {
+ content: '\e892';
+}
+
+.icon-mic-off:before {
+ content: '\e893';
+}
+
+.icon-minus-circle:before {
+ content: '\e894';
+}
+
+.icon-mic:before {
+ content: '\e895';
+}
+
+.icon-minus-square:before {
+ content: '\e896';
+}
+
+.icon-minus:before {
+ content: '\e897';
+}
+
+.icon-moon:before {
+ content: '\e898';
+}
+
+.icon-monitor:before {
+ content: '\e899';
+}
+
+.icon-more-vertical:before {
+ content: '\e89a';
+}
+
+.icon-more-horizontal:before {
+ content: '\e89b';
+}
+
+.icon-move:before {
+ content: '\e89c';
+}
+
+.icon-music:before {
+ content: '\e89d';
+}
+
+.icon-navigation-2:before {
+ content: '\e89e';
+}
+
+.icon-navigation:before {
+ content: '\e89f';
+}
+
+.icon-octagon:before {
+ content: '\e8a0';
+}
+
+.icon-package:before {
+ content: '\e8a1';
+}
+
+.icon-pause-circle:before {
+ content: '\e8a2';
+}
+
+.icon-pause:before {
+ content: '\e8a3';
+}
+
+.icon-percent:before {
+ content: '\e8a4';
+}
+
+.icon-phone-call:before {
+ content: '\e8a5';
+}
+
+.icon-phone-forwarded:before {
+ content: '\e8a6';
+}
+
+.icon-phone-missed:before {
+ content: '\e8a7';
+}
+
+.icon-phone-off:before {
+ content: '\e8a8';
+}
+
+.icon-phone-incoming:before {
+ content: '\e8a9';
+}
+
+.icon-phone:before {
+ content: '\e8aa';
+}
+
+.icon-phone-outgoing:before {
+ content: '\e8ab';
+}
+
+.icon-pie-chart:before {
+ content: '\e8ac';
+}
+
+.icon-play-circle:before {
+ content: '\e8ad';
+}
+
+.icon-play:before {
+ content: '\e8ae';
+}
+
+.icon-plus-square:before {
+ content: '\e8af';
+}
+
+.icon-plus-circle:before {
+ content: '\e8b0';
+}
+
+.icon-plus:before {
+ content: '\e8b1';
+}
+
+.icon-pocket:before {
+ content: '\e8b2';
+}
+
+.icon-printer:before {
+ content: '\e8b3';
+}
+
+.icon-power:before {
+ content: '\e8b4';
+}
+
+.icon-radio:before {
+ content: '\e8b5';
+}
+
+.icon-repeat:before {
+ content: '\e8b6';
+}
+
+.icon-refresh-ccw:before {
+ content: '\e8b7';
+}
+
+.icon-rewind:before {
+ content: '\e8b8';
+}
+
+.icon-rotate-ccw:before {
+ content: '\e8b9';
+}
+
+.icon-refresh-cw:before {
+ content: '\e8ba';
+}
+
+.icon-rotate-cw:before {
+ content: '\e8bb';
+}
+
+.icon-save:before {
+ content: '\e8bc';
+}
+
+.icon-search:before {
+ content: '\e8bd';
+}
+
+.icon-server:before {
+ content: '\e8be';
+}
+
+.icon-scissors:before {
+ content: '\e8bf';
+}
+
+.icon-share-2:before {
+ content: '\e8c0';
+}
+
+.icon-share:before {
+ content: '\e8c1';
+}
+
+.icon-shield:before {
+ content: '\e8c2';
+}
+
+.icon-settings:before {
+ content: '\e8c3';
+}
+
+.icon-skip-back:before {
+ content: '\e8c4';
+}
+
+.icon-shuffle:before {
+ content: '\e8c5';
+}
+
+.icon-sidebar:before {
+ content: '\e8c6';
+}
+
+.icon-skip-forward:before {
+ content: '\e8c7';
+}
+
+.icon-slack:before {
+ content: '\e8c8';
+}
+
+.icon-slash:before {
+ content: '\e8c9';
+}
+
+.icon-smartphone:before {
+ content: '\e8ca';
+}
+
+.icon-square:before {
+ content: '\e8cb';
+}
+
+.icon-speaker:before {
+ content: '\e8cc';
+}
+
+.icon-star:before {
+ content: '\e8cd';
+}
+
+.icon-stop-circle:before {
+ content: '\e8ce';
+}
+
+.icon-sun:before {
+ content: '\e8cf';
+}
+
+.icon-sunrise:before {
+ content: '\e8d0';
+}
+
+.icon-tablet:before {
+ content: '\e8d1';
+}
+
+.icon-tag:before {
+ content: '\e8d2';
+}
+
+.icon-sunset:before {
+ content: '\e8d3';
+}
+
+.icon-target:before {
+ content: '\e8d4';
+}
+
+.icon-thermometer:before {
+ content: '\e8d5';
+}
+
+.icon-thumbs-up:before {
+ content: '\e8d6';
+}
+
+.icon-thumbs-down:before {
+ content: '\e8d7';
+}
+
+.icon-toggle-left:before {
+ content: '\e8d8';
+}
+
+.icon-toggle-right:before {
+ content: '\e8d9';
+}
+
+.icon-trash-2:before {
+ content: '\e8da';
+}
+
+.icon-trash:before {
+ content: '\e8db';
+}
+
+.icon-trending-up:before {
+ content: '\e8dc';
+}
+
+.icon-trending-down:before {
+ content: '\e8dd';
+}
+
+.icon-triangle:before {
+ content: '\e8de';
+}
+
+.icon-type:before {
+ content: '\e8df';
+}
+
+.icon-twitter:before {
+ content: '\e8e0';
+}
+
+.icon-upload:before {
+ content: '\e8e1';
+}
+
+.icon-umbrella:before {
+ content: '\e8e2';
+}
+
+.icon-upload-cloud:before {
+ content: '\e8e3';
+}
+
+.icon-unlock:before {
+ content: '\e8e4';
+}
+
+.icon-user-check:before {
+ content: '\e8e5';
+}
+
+.icon-user-minus:before {
+ content: '\e8e6';
+}
+
+.icon-user-plus:before {
+ content: '\e8e7';
+}
+
+.icon-user-x:before {
+ content: '\e8e8';
+}
+
+.icon-user:before {
+ content: '\e8e9';
+}
+
+.icon-users:before {
+ content: '\e8ea';
+}
+
+.icon-video-off:before {
+ content: '\e8eb';
+}
+
+.icon-video:before {
+ content: '\e8ec';
+}
+
+.icon-voicemail:before {
+ content: '\e8ed';
+}
+
+.icon-volume-x:before {
+ content: '\e8ee';
+}
+
+.icon-volume-2:before {
+ content: '\e8ef';
+}
+
+.icon-volume-1:before {
+ content: '\e8f0';
+}
+
+.icon-volume:before {
+ content: '\e8f1';
+}
+
+.icon-watch:before {
+ content: '\e8f2';
+}
+
+.icon-wifi:before {
+ content: '\e8f3';
+}
+
+.icon-x-square:before {
+ content: '\e8f4';
+}
+
+.icon-wind:before {
+ content: '\e8f5';
+}
+
+.icon-x:before {
+ content: '\e8f6';
+}
+
+.icon-x-circle:before {
+ content: '\e8f7';
+}
+
+.icon-zap:before {
+ content: '\e8f8';
+}
+
+.icon-zoom-in:before {
+ content: '\e8f9';
+}
+
+.icon-zoom-out:before {
+ content: '\e8fa';
+}
+
+.icon-command:before {
+ content: '\e8fb';
+}
+
+.icon-cloud:before {
+ content: '\e8fc';
+}
+
+.icon-hash:before {
+ content: '\e8fd';
+}
+
+.icon-headphones:before {
+ content: '\e8fe';
+}
+
+.icon-underline:before {
+ content: '\e8ff';
+}
+
+.icon-italic:before {
+ content: '\e900';
+}
+
+.icon-bold:before {
+ content: '\e901';
+}
+
+.icon-crop:before {
+ content: '\e902';
+}
+
+.icon-help-circle:before {
+ content: '\e903';
+}
+
+.icon-paperclip:before {
+ content: '\e904';
+}
+
+.icon-shopping-cart:before {
+ content: '\e905';
+}
+
+.icon-tv:before {
+ content: '\e906';
+}
+
+.icon-wifi-off:before {
+ content: '\e907';
+}
+
+.icon-minimize:before {
+ content: '\e88d';
+}
+
+.icon-maximize:before {
+ content: '\e908';
+}
+
+.icon-gitlab:before {
+ content: '\e909';
+}
+
+.icon-sliders:before {
+ content: '\e90a';
+}
+
+.icon-star-on:before {
+ content: '\e90b';
+}
+
+.icon-heart-on:before {
+ content: '\e90c';
+}
+
+.icon-archive:before {
+ content: '\e90d';
+}
+
+.icon-arrow-down-circle:before {
+ content: '\e90e';
+}
+
+.icon-arrow-up-circle:before {
+ content: '\e90f';
+}
+
+.icon-arrow-left-circle:before {
+ content: '\e910';
+}
+
+.icon-arrow-right-circle:before {
+ content: '\e911';
+}
+
+.icon-bar-chart-line-:before {
+ content: '\e912';
+}
+
+.icon-bar-chart-line:before {
+ content: '\e913';
+}
+
+.icon-book-open:before {
+ content: '\e914';
+}
+
+.icon-code:before {
+ content: '\e915';
+}
+
+.icon-database:before {
+ content: '\e916';
+}
+
+.icon-dollar-sign:before {
+ content: '\e917';
+}
+
+.icon-folder-plus:before {
+ content: '\e918';
+}
+
+.icon-gift:before {
+ content: '\e919';
+}
+
+.icon-folder-minus:before {
+ content: '\e91a';
+}
+
+.icon-git-commit:before {
+ content: '\e91b';
+}
+
+.icon-git-branch:before {
+ content: '\e91c';
+}
+
+.icon-git-pull-request:before {
+ content: '\e91d';
+}
+
+.icon-git-merge:before {
+ content: '\e91e';
+}
+
+.icon-linkedin:before {
+ content: '\e91f';
+}
+
+.icon-hard-drive:before {
+ content: '\e920';
+}
+
+.icon-more-vertical-:before {
+ content: '\e921';
+}
+
+.icon-more-horizontal-:before {
+ content: '\e922';
+}
+
+.icon-rss:before {
+ content: '\e923';
+}
+
+.icon-send:before {
+ content: '\e924';
+}
+
+.icon-shield-off:before {
+ content: '\e925';
+}
+
+.icon-shopping-bag:before {
+ content: '\e926';
+}
+
+.icon-terminal:before {
+ content: '\e927';
+}
+
+.icon-truck:before {
+ content: '\e928';
+}
+
+.icon-zap-off:before {
+ content: '\e929';
+}
+
+.icon-youtube:before {
+ content: '\e92a';
+}
diff --git a/src/@core/auth/jwt/jwtDefaultConfig.js b/src/@core/auth/jwt/jwtDefaultConfig.js
new file mode 100644
index 0000000..1e65dc2
--- /dev/null
+++ b/src/@core/auth/jwt/jwtDefaultConfig.js
@@ -0,0 +1,14 @@
+export default {
+ // 端点路由
+ loginEndpoint: '/jwt/login',
+ registerEndpoint: '/jwt/register',
+ refreshEndpoint: '/jwt/refresh-token',
+ logoutEndpoint: '/jwt/logout',
+
+ // 授权头中以 Bearer 作为前缀
+ tokenType: 'Bearer',
+
+ // 下列属性值将用作存储 JWT token 的密钥
+ storageTokenKeyName: 'accessToken',
+ storageRefreshTokenKeyName: 'refreshToken',
+}
diff --git a/src/@core/auth/jwt/jwtService.js b/src/@core/auth/jwt/jwtService.js
new file mode 100644
index 0000000..e0ef0cc
--- /dev/null
+++ b/src/@core/auth/jwt/jwtService.js
@@ -0,0 +1,109 @@
+import jwtDefaultConfig from './jwtDefaultConfig'
+
+export default class JwtService {
+ // JwtService 用于进行API调用
+ axiosIns = null
+
+ // jwt 默认设置
+ jwtConfig = { ...jwtDefaultConfig }
+
+ // 刷新 token
+ isAlreadyFetchingAccessToken = false
+
+ // 刷新 token
+ subscribers = []
+
+ constructor(axiosIns, jwtOverrideConfig) {
+ this.axiosIns = axiosIns
+ this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig }
+
+ // 拦截请求
+ this.axiosIns.interceptors.request.use(
+ config => {
+ // 从本地获取 token
+ const accessToken = this.getToken()
+
+ // 获取 token 成功后添加到请求的授权头中
+ if (accessToken) {
+ // eslint-disable-next-line no-param-reassign
+ config.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`
+ }
+ return config
+ },
+ error => Promise.reject(error),
+ )
+
+ // 添加请求/响应拦截
+ this.axiosIns.interceptors.response.use(
+ response => response,
+ error => {
+ // 响应状态为错误
+ const { config, response } = error
+ const originalRequest = config
+
+ // 状态 401
+ if (response && response.status === 401) {
+ if (!this.isAlreadyFetchingAccessToken) {
+ this.isAlreadyFetchingAccessToken = true
+ this.refreshToken().then(r => {
+ this.isAlreadyFetchingAccessToken = false
+
+ // 在本地存储中更新 accessToken
+ this.setToken(r.data.accessToken)
+ this.setRefreshToken(r.data.refreshToken)
+
+ this.onAccessTokenFetched(r.data.accessToken)
+ })
+ }
+ const retryOriginalRequest = new Promise(resolve => {
+ this.addSubscriber(accessToken => {
+ // 确保根据响应分配 accessToken 后更改授权头
+ originalRequest.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`
+ resolve(this.axiosIns(originalRequest))
+ })
+ })
+ return retryOriginalRequest
+ }
+ return Promise.reject(error)
+ },
+ )
+ }
+
+ onAccessTokenFetched(accessToken) {
+ this.subscribers = this.subscribers.filter(callback => callback(accessToken))
+ }
+
+ addSubscriber(callback) {
+ this.subscribers.push(callback)
+ }
+
+ getToken() {
+ return localStorage.getItem(this.jwtConfig.storageTokenKeyName)
+ }
+
+ getRefreshToken() {
+ return localStorage.getItem(this.jwtConfig.storageRefreshTokenKeyName)
+ }
+
+ setToken(value) {
+ localStorage.setItem(this.jwtConfig.storageTokenKeyName, value)
+ }
+
+ setRefreshToken(value) {
+ localStorage.setItem(this.jwtConfig.storageRefreshTokenKeyName, value)
+ }
+
+ login(...args) {
+ return this.axiosIns.post(this.jwtConfig.loginEndpoint, ...args)
+ }
+
+ register(...args) {
+ return this.axiosIns.post(this.jwtConfig.registerEndpoint, ...args)
+ }
+
+ refreshToken() {
+ return this.axiosIns.post(this.jwtConfig.refreshEndpoint, {
+ refreshToken: this.getRefreshToken(),
+ })
+ }
+}
diff --git a/src/@core/auth/jwt/useJwt.js b/src/@core/auth/jwt/useJwt.js
new file mode 100644
index 0000000..85e31c0
--- /dev/null
+++ b/src/@core/auth/jwt/useJwt.js
@@ -0,0 +1,9 @@
+import JwtService from './jwtService'
+
+export default function useJwt(axiosIns, jwtOverrideConfig) {
+ const jwt = new JwtService(axiosIns, jwtOverrideConfig)
+
+ return {
+ jwt,
+ }
+}
diff --git a/src/@core/comp-functions/forms/form-utils.js b/src/@core/comp-functions/forms/form-utils.js
new file mode 100644
index 0000000..c465521
--- /dev/null
+++ b/src/@core/comp-functions/forms/form-utils.js
@@ -0,0 +1,23 @@
+export const useInputImageRenderer = (inputEl, callback) => {
+ const inputImageRenderer = () => {
+ const file = inputEl.value.files[0]
+ const reader = new FileReader()
+
+ reader.addEventListener(
+ 'load',
+ () => {
+ callback(reader.result)
+ },
+ false,
+ )
+
+ if (file) {
+ reader.readAsDataURL(file)
+ }
+ }
+ return {
+ inputImageRenderer,
+ }
+}
+
+export const _ = null
diff --git a/src/@core/comp-functions/forms/form-validation.js b/src/@core/comp-functions/forms/form-validation.js
new file mode 100644
index 0000000..0d6ec6f
--- /dev/null
+++ b/src/@core/comp-functions/forms/form-validation.js
@@ -0,0 +1,47 @@
+import { ref, nextTick } from '@vue/composition-api'
+
+// ===========================================================
+// 结合使用 veeValidate 插件
+// ===========================================================
+
+export default function formValidation(resetFormData, clearFormData = () => {}) {
+
+ // 表单验证 Observer
+ const refFormObserver = ref(null)
+
+ // 表单重置 Observer
+ const resetObserver = () => {
+ refFormObserver.value.reset()
+ }
+
+ // 根据验证返回 true/false
+ // eslint-disable-next-line object-curly-newline
+ const getValidationState = ({ dirty, validated, required: fieldRequired, changed, valid = null }) => {
+ const result = dirty || validated ? valid : null
+ return !fieldRequired && !changed ? null : result
+ }
+
+ // 使用 resetFormData 参数重置表单数据
+ const resetForm = () => {
+ resetFormData()
+ nextTick(() => {
+ resetObserver()
+ })
+ }
+
+ // 使用 resetFormData 参数重置表单数据
+ const clearForm = () => {
+ clearFormData()
+ nextTick(() => {
+ resetObserver()
+ })
+ }
+
+ return {
+ refFormObserver,
+ resetObserver,
+ getValidationState,
+ resetForm,
+ clearForm,
+ }
+}
diff --git a/src/@core/comp-functions/misc/event-listeners.js b/src/@core/comp-functions/misc/event-listeners.js
new file mode 100644
index 0000000..fb49e24
--- /dev/null
+++ b/src/@core/comp-functions/misc/event-listeners.js
@@ -0,0 +1,20 @@
+import { ref, onUnmounted } from '@vue/composition-api'
+
+export const useScrollListener = () => {
+ const scrolledTo = ref(null)
+
+ const scrollHandler = () => {
+ scrolledTo.value = window.scrollY
+ }
+
+ window.addEventListener('scroll', scrollHandler, { passive: false })
+ onUnmounted(() => {
+ window.removeEventListener('scroll', scrollHandler)
+ })
+
+ return {
+ scrolledTo,
+ }
+}
+
+export const _ = null
diff --git a/src/@core/comp-functions/ui/app.js b/src/@core/comp-functions/ui/app.js
new file mode 100644
index 0000000..e6d9a56
--- /dev/null
+++ b/src/@core/comp-functions/ui/app.js
@@ -0,0 +1,18 @@
+import store from '@/store'
+import { ref, watch, computed } from '@vue/composition-api'
+
+export const useResponsiveAppLeftSidebarVisibility = () => {
+ const mqShallShowLeftSidebar = ref(false)
+ // 进入非移动端时关闭活动侧栏和其他内容
+ const currentBreakPoint = computed(() => store.getters['app/currentBreakPoint'])
+ watch(currentBreakPoint, (val, oldVal) => {
+ // 重置聊天和联系人左侧边栏
+ if (oldVal === 'md' && val === 'lg') mqShallShowLeftSidebar.value = false
+ })
+
+ return {
+ mqShallShowLeftSidebar,
+ }
+}
+
+export const _ = {}
diff --git a/src/@core/comp-functions/ui/vertical-menu.js b/src/@core/comp-functions/ui/vertical-menu.js
new file mode 100644
index 0000000..c30c668
--- /dev/null
+++ b/src/@core/comp-functions/ui/vertical-menu.js
@@ -0,0 +1,21 @@
+import { onBeforeUnmount } from '@vue/composition-api'
+import userAppConfig from '@core/app-config/useAppConfig'
+
+/**
+ * 垂直折叠导航访问路由时恢复离开时的状态
+ */
+export const useCollapseMenuOnVisit = () => {
+ const { isVerticalMenuCollapsed } = userAppConfig()
+ const wasVerticalMenuCollapsed = isVerticalMenuCollapsed.value
+
+ if (!wasVerticalMenuCollapsed.value) {
+ isVerticalMenuCollapsed.value = true
+ }
+
+ // 恢复折叠原始值
+ onBeforeUnmount(() => {
+ isVerticalMenuCollapsed.value = wasVerticalMenuCollapsed
+ })
+}
+
+export const _ = null
diff --git a/src/@core/components/app-auto-suggest/AppAutoSuggest.vue b/src/@core/components/app-auto-suggest/AppAutoSuggest.vue
new file mode 100644
index 0000000..c4a2f4e
--- /dev/null
+++ b/src/@core/components/app-auto-suggest/AppAutoSuggest.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
diff --git a/src/@core/components/app-auto-suggest/useAutoSuggest.js b/src/@core/components/app-auto-suggest/useAutoSuggest.js
new file mode 100644
index 0000000..927c624
--- /dev/null
+++ b/src/@core/components/app-auto-suggest/useAutoSuggest.js
@@ -0,0 +1,41 @@
+import { ref, watch } from '@vue/composition-api'
+
+export default function useAutoSuggest(props) {
+ const filteredData = ref({})
+ const filterGrp = (grp, query) => {
+ const exactEle = grp.data.filter(item => item[grp.key].toLowerCase().startsWith(query.toLowerCase()))
+ const containEle = grp.data.filter(
+ // prettier-ignore
+ item => !item[grp.key].toLowerCase().startsWith(query.toLowerCase()) && item[grp.key].toLowerCase().indexOf(query.toLowerCase()) > -1,
+ )
+ return exactEle.concat(containEle).slice(0, props.searchLimit)
+ }
+
+ const searchQuery = ref('')
+ const resetsearchQuery = () => {
+ searchQuery.value = ''
+ }
+
+ const handleSearchQueryUpdate = val => {
+ if (val === '') {
+ filteredData.value = {}
+ } else {
+ const queriedData = {}
+ const dataGrps = Object.keys(props.data)
+
+ dataGrps.forEach((grp, i) => {
+ queriedData[dataGrps[i]] = filterGrp(props.data[grp], val)
+ })
+
+ filteredData.value = queriedData
+ }
+ }
+
+ watch(searchQuery, val => handleSearchQueryUpdate(val))
+
+ return {
+ searchQuery,
+ resetsearchQuery,
+ filteredData,
+ }
+}
diff --git a/src/@core/components/app-collapse/AppCollapse.vue b/src/@core/components/app-collapse/AppCollapse.vue
new file mode 100644
index 0000000..0b3fc6c
--- /dev/null
+++ b/src/@core/components/app-collapse/AppCollapse.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
diff --git a/src/@core/components/app-collapse/AppCollapseItem.vue b/src/@core/components/app-collapse/AppCollapseItem.vue
new file mode 100644
index 0000000..bfc2cfa
--- /dev/null
+++ b/src/@core/components/app-collapse/AppCollapseItem.vue
@@ -0,0 +1,87 @@
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/app-timeline/AppTimeline.vue b/src/@core/components/app-timeline/AppTimeline.vue
new file mode 100644
index 0000000..082c78a
--- /dev/null
+++ b/src/@core/components/app-timeline/AppTimeline.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/@core/components/app-timeline/AppTimelineItem.vue b/src/@core/components/app-timeline/AppTimelineItem.vue
new file mode 100644
index 0000000..978b2c8
--- /dev/null
+++ b/src/@core/components/app-timeline/AppTimelineItem.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/app-tour/AppTour.vue b/src/@core/components/app-tour/AppTour.vue
new file mode 100644
index 0000000..8881350
--- /dev/null
+++ b/src/@core/components/app-tour/AppTour.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+ 跳过
+
+
+
+
+
+
+ 上一步
+
+
+
+
+ 下一步
+
+
+
+
+
+ 结束
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/b-card-actions/BCardActions.vue b/src/@core/components/b-card-actions/BCardActions.vue
new file mode 100644
index 0000000..0f604d0
--- /dev/null
+++ b/src/@core/components/b-card-actions/BCardActions.vue
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/b-card-actions/BCardActionsContainer.vue b/src/@core/components/b-card-actions/BCardActionsContainer.vue
new file mode 100644
index 0000000..d60744a
--- /dev/null
+++ b/src/@core/components/b-card-actions/BCardActionsContainer.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
diff --git a/src/@core/components/b-card-actions/index.js b/src/@core/components/b-card-actions/index.js
new file mode 100644
index 0000000..5bb9c90
--- /dev/null
+++ b/src/@core/components/b-card-actions/index.js
@@ -0,0 +1,2 @@
+export { default as BCardActions } from './BCardActions.vue'
+export { default as BCardActionsContainer } from './BCardActionsContainer.vue'
diff --git a/src/@core/components/b-card-code/BCardCode.vue b/src/@core/components/b-card-code/BCardCode.vue
new file mode 100644
index 0000000..175e8da
--- /dev/null
+++ b/src/@core/components/b-card-code/BCardCode.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/b-card-code/index.js b/src/@core/components/b-card-code/index.js
new file mode 100644
index 0000000..7425748
--- /dev/null
+++ b/src/@core/components/b-card-code/index.js
@@ -0,0 +1,3 @@
+import BCardCode from './BCardCode.vue'
+
+export default BCardCode
diff --git a/src/@core/components/charts/echart/AppEchartBar.vue b/src/@core/components/charts/echart/AppEchartBar.vue
new file mode 100644
index 0000000..68766bf
--- /dev/null
+++ b/src/@core/components/charts/echart/AppEchartBar.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
diff --git a/src/@core/components/charts/echart/AppEchartDoughnut.vue b/src/@core/components/charts/echart/AppEchartDoughnut.vue
new file mode 100644
index 0000000..c99979a
--- /dev/null
+++ b/src/@core/components/charts/echart/AppEchartDoughnut.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/src/@core/components/charts/echart/AppEchartLine.vue b/src/@core/components/charts/echart/AppEchartLine.vue
new file mode 100644
index 0000000..9a328c1
--- /dev/null
+++ b/src/@core/components/charts/echart/AppEchartLine.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
diff --git a/src/@core/components/charts/echart/AppEchartRadar.vue b/src/@core/components/charts/echart/AppEchartRadar.vue
new file mode 100644
index 0000000..bd35d85
--- /dev/null
+++ b/src/@core/components/charts/echart/AppEchartRadar.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
diff --git a/src/@core/components/charts/echart/AppEchartScatter.vue b/src/@core/components/charts/echart/AppEchartScatter.vue
new file mode 100644
index 0000000..41809c7
--- /dev/null
+++ b/src/@core/components/charts/echart/AppEchartScatter.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
diff --git a/src/@core/components/charts/echart/AppEchartStackedArea.vue b/src/@core/components/charts/echart/AppEchartStackedArea.vue
new file mode 100644
index 0000000..a61afd0
--- /dev/null
+++ b/src/@core/components/charts/echart/AppEchartStackedArea.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
diff --git a/src/@core/components/charts/echart/theme.json b/src/@core/components/charts/echart/theme.json
new file mode 100644
index 0000000..d40b709
--- /dev/null
+++ b/src/@core/components/charts/echart/theme.json
@@ -0,0 +1,475 @@
+{
+ "color": [
+ "#826AF9",
+ "#9F87FF",
+ "#D2B0FF",
+ "#F8D3FF"
+ ],
+ "backgroundColor": "rgba(0,0,0,0)",
+ "textStyle": {},
+ "title": {
+ "textStyle": {
+ "color": "#666666"
+ },
+ "subtextStyle": {
+ "color": "#999999"
+ }
+ },
+ "line": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "1"
+ }
+ },
+ "lineStyle": {
+ "normal": {
+ "width": "1"
+ }
+ },
+ "symbolSize": "10",
+ "symbol": "emptyCircle",
+ "smooth": false
+ },
+ "radar": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "2"
+ }
+ },
+ "lineStyle": {
+ "normal": {
+ "width": "3"
+ }
+ },
+ "symbolSize": "10",
+ "symbol": "emptyCircle",
+ "smooth": true
+ },
+ "bar": {
+ "itemStyle": {
+ "normal": {
+ "barBorderWidth": "0",
+ "barBorderColor": "#444444"
+ },
+ "emphasis": {
+ "barBorderWidth": "0",
+ "barBorderColor": "#444444"
+ }
+ }
+ },
+ "pie": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "scatter": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "boxplot": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "parallel": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "sankey": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "funnel": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "gauge": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ },
+ "emphasis": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ }
+ },
+ "candlestick": {
+ "itemStyle": {
+ "normal": {
+ "color": "#d0648a",
+ "color0": "#ffffff",
+ "borderColor": "#d0648a",
+ "borderColor0": "#22c3aa",
+ "borderWidth": 1
+ }
+ }
+ },
+ "graph": {
+ "itemStyle": {
+ "normal": {
+ "borderWidth": "0",
+ "borderColor": "#444444"
+ }
+ },
+ "lineStyle": {
+ "normal": {
+ "width": 1,
+ "color": "#aaa"
+ }
+ },
+ "symbolSize": "10",
+ "symbol": "emptyCircle",
+ "smooth": true,
+ "color": [
+ "#4ea397",
+ "#22c3aa",
+ "#7bd9a5"
+ ],
+ "label": {
+ "normal": {
+ "textStyle": {
+ "color": "#ffffff"
+ }
+ }
+ }
+ },
+ "map": {
+ "itemStyle": {
+ "normal": {
+ "areaColor": "#eeeeee",
+ "borderColor": "#999999",
+ "borderWidth": "0.5"
+ },
+ "emphasis": {
+ "areaColor": "rgba(34,195,170,0.25)",
+ "borderColor": "#22c3aa",
+ "borderWidth": "0.5"
+ }
+ },
+ "label": {
+ "normal": {
+ "textStyle": {
+ "color": "#28544e"
+ }
+ },
+ "emphasis": {
+ "textStyle": {
+ "color": "rgb(52,158,142)"
+ }
+ }
+ }
+ },
+ "geo": {
+ "itemStyle": {
+ "normal": {
+ "areaColor": "#eeeeee",
+ "borderColor": "#999999",
+ "borderWidth": "0.5"
+ },
+ "emphasis": {
+ "areaColor": "rgba(34,195,170,0.25)",
+ "borderColor": "#22c3aa",
+ "borderWidth": "0.5"
+ }
+ },
+ "label": {
+ "normal": {
+ "textStyle": {
+ "color": "#28544e"
+ }
+ },
+ "emphasis": {
+ "textStyle": {
+ "color": "rgb(52,158,142)"
+ }
+ }
+ }
+ },
+ "categoryAxis": {
+ "axisLine": {
+ "show": true,
+ "lineStyle": {
+ "color": "#cccccc"
+ }
+ },
+ "axisTick": {
+ "show": false,
+ "lineStyle": {
+ "color": "#333333"
+ }
+ },
+ "axisLabel": {
+ "show": true,
+ "textStyle": {
+ "color": "#999999"
+ }
+ },
+ "splitLine": {
+ "show": true,
+ "lineStyle": {
+ "color": [
+ "#eeeeee"
+ ]
+ }
+ },
+ "splitArea": {
+ "show": false,
+ "areaStyle": {
+ "color": [
+ "rgba(250,250,250,0.3)",
+ "rgba(200,200,200,0.3)"
+ ]
+ }
+ }
+ },
+ "valueAxis": {
+ "axisLine": {
+ "show": true,
+ "lineStyle": {
+ "color": "#cccccc"
+ }
+ },
+ "axisTick": {
+ "show": false,
+ "lineStyle": {
+ "color": "#333333"
+ }
+ },
+ "axisLabel": {
+ "show": true,
+ "textStyle": {
+ "color": "#999999"
+ }
+ },
+ "splitLine": {
+ "show": true,
+ "lineStyle": {
+ "color": [
+ "#eeeeee"
+ ]
+ }
+ },
+ "splitArea": {
+ "show": false,
+ "areaStyle": {
+ "color": [
+ "rgba(250,250,250,0.3)",
+ "rgba(200,200,200,0.3)"
+ ]
+ }
+ }
+ },
+ "logAxis": {
+ "axisLine": {
+ "show": true,
+ "lineStyle": {
+ "color": "#cccccc"
+ }
+ },
+ "axisTick": {
+ "show": false,
+ "lineStyle": {
+ "color": "#333333"
+ }
+ },
+ "axisLabel": {
+ "show": true,
+ "textStyle": {
+ "color": "#999999"
+ }
+ },
+ "splitLine": {
+ "show": true,
+ "lineStyle": {
+ "color": [
+ "#eeeeee"
+ ]
+ }
+ },
+ "splitArea": {
+ "show": false,
+ "areaStyle": {
+ "color": [
+ "rgba(250,250,250,0.3)",
+ "rgba(200,200,200,0.3)"
+ ]
+ }
+ }
+ },
+ "timeAxis": {
+ "axisLine": {
+ "show": true,
+ "lineStyle": {
+ "color": "#cccccc"
+ }
+ },
+ "axisTick": {
+ "show": false,
+ "lineStyle": {
+ "color": "#333333"
+ }
+ },
+ "axisLabel": {
+ "show": true,
+ "textStyle": {
+ "color": "#999999"
+ }
+ },
+ "splitLine": {
+ "show": true,
+ "lineStyle": {
+ "color": [
+ "#eeeeee"
+ ]
+ }
+ },
+ "splitArea": {
+ "show": false,
+ "areaStyle": {
+ "color": [
+ "rgba(250,250,250,0.3)",
+ "rgba(200,200,200,0.3)"
+ ]
+ }
+ }
+ },
+ "toolbox": {
+ "iconStyle": {
+ "normal": {
+ "borderColor": "#aaaaaa"
+ },
+ "emphasis": {
+ "borderColor": "#666"
+ }
+ }
+ },
+ "legend": {
+ "textStyle": {
+ "color": "#999999"
+ }
+ },
+ "tooltip": {
+ "axisPointer": {
+ "lineStyle": {
+ "color": "#ccc",
+ "width": 1
+ },
+ "crossStyle": {
+ "color": "#ccc",
+ "width": 1
+ }
+ }
+ },
+ "timeline": {
+ "lineStyle": {
+ "color": "#349e8e",
+ "width": 1
+ },
+ "itemStyle": {
+ "normal": {
+ "color": "#349e8e",
+ "borderWidth": "1"
+ },
+ "emphasis": {
+ "color": "#57e8d2"
+ }
+ },
+ "controlStyle": {
+ "normal": {
+ "color": "#349e8e",
+ "borderColor": "#349e8e",
+ "borderWidth": "0"
+ }
+ },
+ "checkpointStyle": {
+ "color": "#22c3aa",
+ "borderColor": "rgba(34,195,170,0.25)"
+ },
+ "label": {
+ "normal": {
+ "textStyle": {
+ "color": "#349e8e"
+ }
+ }
+ }
+ },
+ "visualMap": {
+ "color": [
+ "#d0648a",
+ "#22c3aa",
+ "rgba(123,217,165,0.2)"
+ ]
+ },
+ "dataZoom": {
+ "backgroundColor": "#fff",
+ "dataBackgroundColor": "#dedede",
+ "fillerColor": "rgba(34,195,170,0.25)",
+ "handleColor": "#dddddd",
+ "handleSize": "100%",
+ "textStyle": {
+ "color": "#999"
+ }
+ },
+ "markPoint": {
+ "label": {
+ "normal": {
+ "textStyle": {
+ "color": "#ffffff"
+ }
+ },
+ "emphasis": {
+ "textStyle": {
+ "color": "#ffffff"
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/components/feather-icon/FeatherIcon.vue b/src/@core/components/feather-icon/FeatherIcon.vue
new file mode 100644
index 0000000..3c81142
--- /dev/null
+++ b/src/@core/components/feather-icon/FeatherIcon.vue
@@ -0,0 +1,45 @@
+
+
+
diff --git a/src/@core/components/scroll-to-top/ScrollToTop.vue b/src/@core/components/scroll-to-top/ScrollToTop.vue
new file mode 100644
index 0000000..b57e13c
--- /dev/null
+++ b/src/@core/components/scroll-to-top/ScrollToTop.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/statistics-cards/StatisticCardHorizontal.vue b/src/@core/components/statistics-cards/StatisticCardHorizontal.vue
new file mode 100644
index 0000000..477cb34
--- /dev/null
+++ b/src/@core/components/statistics-cards/StatisticCardHorizontal.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+ {{ statistic }}
+
+ {{ statisticTitle }}
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/statistics-cards/StatisticCardVertical.vue b/src/@core/components/statistics-cards/StatisticCardVertical.vue
new file mode 100644
index 0000000..8d94ab0
--- /dev/null
+++ b/src/@core/components/statistics-cards/StatisticCardVertical.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+ {{ statistic }}
+
+ {{ statisticTitle }}
+
+
+
+
+
diff --git a/src/@core/components/statistics-cards/StatisticCardWithAreaChart.vue b/src/@core/components/statistics-cards/StatisticCardWithAreaChart.vue
new file mode 100644
index 0000000..dc78062
--- /dev/null
+++ b/src/@core/components/statistics-cards/StatisticCardWithAreaChart.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+ {{ statistic }}
+
+ {{ statisticTitle }}
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/statistics-cards/StatisticCardWithLineChart.vue b/src/@core/components/statistics-cards/StatisticCardWithLineChart.vue
new file mode 100644
index 0000000..eca9d59
--- /dev/null
+++ b/src/@core/components/statistics-cards/StatisticCardWithLineChart.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+ {{ statistic }}
+
+ {{ statisticTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/components/statistics-cards/chartOptions.js b/src/@core/components/statistics-cards/chartOptions.js
new file mode 100644
index 0000000..f2f85e9
--- /dev/null
+++ b/src/@core/components/statistics-cards/chartOptions.js
@@ -0,0 +1,122 @@
+import { $themeColors } from '@themeConfig'
+
+export const areaChartOptions = {
+ grid: {
+ show: false,
+ padding: {
+ left: 0,
+ right: 0,
+ },
+ },
+ chart: {
+ toolbar: {
+ show: false,
+ },
+ sparkline: {
+ enabled: true,
+ },
+ },
+ dataLabels: {
+ enabled: false,
+ },
+ stroke: {
+ curve: 'smooth',
+ width: 2.5,
+ },
+ fill: {
+ type: 'gradient',
+ gradient: {
+ shadeIntensity: 0.9,
+ opacityFrom: 0.5,
+ opacityTo: 0.2,
+ stops: [0, 80, 100],
+ },
+ },
+ xaxis: {
+ type: 'numeric',
+ lines: {
+ show: false,
+ },
+ axisBorder: {
+ show: false,
+ },
+ labels: { show: false },
+ },
+ yaxis: [
+ {
+ y: 0,
+ offsetX: 0,
+ offsetY: 0,
+ padding: {
+ left: 0,
+ right: 0,
+ },
+ },
+ ],
+ tooltip: {
+ x: { show: false },
+ },
+ theme: {
+ monochrome: {
+ enabled: true,
+ color: $themeColors.primary,
+ shadeTo: 'light',
+ shadeIntensity: 0.65,
+ },
+ },
+}
+
+export const lineChartOptions = {
+ grid: {
+ show: false,
+ padding: {
+ left: 0,
+ right: 0,
+ },
+ },
+ chart: {
+ type: 'line',
+ dropShadow: {
+ enabled: true,
+ top: 5,
+ left: 0,
+ blur: 4,
+ opacity: 0.1,
+ },
+ toolbar: {
+ show: false,
+ },
+ sparkline: {
+ enabled: true,
+ },
+ },
+ stroke: {
+ width: 5,
+ curve: 'smooth',
+ },
+ xaxis: {
+ type: 'numeric',
+ },
+ colors: [$themeColors.primary],
+ fill: {
+ type: 'gradient',
+ gradient: {
+ shade: 'dark',
+ gradientToColors: ['#A9A2F6'],
+ shadeIntensity: 1,
+ type: 'horizontal',
+ opacityFrom: 1,
+ opacityTo: 1,
+ stops: [0, 100, 100, 100],
+ },
+ },
+ markers: {
+ size: 0,
+ hover: {
+ size: 5,
+ },
+ },
+ tooltip: {
+ x: { show: false },
+ },
+}
diff --git a/src/@core/components/toastification/ToastificationContent.vue b/src/@core/components/toastification/ToastificationContent.vue
new file mode 100644
index 0000000..c398456
--- /dev/null
+++ b/src/@core/components/toastification/ToastificationContent.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
diff --git a/src/@core/directives/animations.js b/src/@core/directives/animations.js
new file mode 100644
index 0000000..a036af2
--- /dev/null
+++ b/src/@core/directives/animations.js
@@ -0,0 +1,32 @@
+export const heightFade = {
+ /* eslint-disable no-param-reassign */
+ inserted(el, binding) {
+ const height = `${el.offsetHeight}px`
+
+ if (binding.modifiers.appear) {
+ el.style.overflow = 'hidden'
+ el.style.maxHeight = '0px'
+ el.style.opacity = 0
+
+ // 元素聚焦
+ setTimeout(() => {
+ el.style.maxHeight = height
+ el.style.opacity = 1
+ setTimeout(() => {
+ el.style.overflow = 'unset'
+ }, 300)
+ }, 100)
+ } else {
+ el.style.maxHeight = height
+ }
+ },
+ unbind(el) {
+ if (el.style === undefined) return
+ el.style.overflow = 'hidden'
+ el.style.maxHeight = '0px'
+ el.style.opacity = 0
+ },
+ /* eslint-enable no-param-reassign */
+}
+
+export const temp = 2
diff --git a/src/@core/layouts/components/AppBreadcrumb.vue b/src/@core/layouts/components/AppBreadcrumb.vue
new file mode 100644
index 0000000..47a1259
--- /dev/null
+++ b/src/@core/layouts/components/AppBreadcrumb.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
diff --git a/src/@core/layouts/components/AppFooter.vue b/src/@core/layouts/components/AppFooter.vue
new file mode 100644
index 0000000..8921fd3
--- /dev/null
+++ b/src/@core/layouts/components/AppFooter.vue
@@ -0,0 +1,31 @@
+
+
+
+ COPYRIGHT © 2019 - {{ new Date().getFullYear() }}
+ Dejavu Tech.
+ , 设计开发 & 版权所有
+
+
+ Rexo-UI 管理模板
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/Logo.vue b/src/@core/layouts/components/Logo.vue
new file mode 100644
index 0000000..3fcfd05
--- /dev/null
+++ b/src/@core/layouts/components/Logo.vue
@@ -0,0 +1,142 @@
+
+
+
diff --git a/src/@core/layouts/components/app-customizer/AppCustomizer.vue b/src/@core/layouts/components/app-customizer/AppCustomizer.vue
new file mode 100644
index 0000000..f708a82
--- /dev/null
+++ b/src/@core/layouts/components/app-customizer/AppCustomizer.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+
+ 界面主题定制器
+
+ 定制主题实时预览
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 折叠导航布局
+
+
+
+
+
+ 隐藏导航
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-customizer/useAppCustomizer.js b/src/@core/layouts/components/app-customizer/useAppCustomizer.js
new file mode 100644
index 0000000..34f08f4
--- /dev/null
+++ b/src/@core/layouts/components/app-customizer/useAppCustomizer.js
@@ -0,0 +1,109 @@
+import { ref } from '@vue/composition-api'
+import useAppConfig from '@core/app-config/useAppConfig'
+
+export default function useAppCustomizer() {
+ // 定制器
+ const isCustomizerOpen = ref(false)
+
+ // 皮肤
+ const skinOptions = [
+ { text: '浅色', value: 'light' },
+ { text: '平面线框', value: 'bordered' },
+ { text: '深色', value: 'dark' },
+ { text: '混合', value: 'semi-dark' },
+ ]
+
+ // 内容宽度选项
+ const contentWidthOptions = [
+ { text: '全宽模式', value: 'full' },
+ { text: '盒子模式', value: 'boxed' },
+ ]
+
+ // 路由转场效果
+ const routerTransitionOptions = [
+ { title: '缩放淡入淡出', value: 'zoom-fade' },
+ { title: '淡入淡出', value: 'fade' },
+ { title: '纵向淡入淡出', value: 'fade-bottom' },
+ { title: '横向淡入淡出', value: 'slide-fade' },
+ { title: '缩放', value: 'zoom-out' },
+ { title: '无', value: 'none' },
+ ]
+
+ // 导航布局方向
+ const layoutTypeOptions = [
+ { text: '垂直导航布局', value: 'vertical' },
+ { text: '水平导航布局', value: 'horizontal' },
+ ]
+
+ // 副导航栏颜色
+ const navbarColors = ['', 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark']
+
+ // 副导航栏样式
+ const navbarTypes = [
+ { text: '浮动', value: 'floating' },
+ { text: '固定', value: 'sticky' },
+ { text: '跟随内容', value: 'static' },
+ { text: '隐藏', value: 'hidden' },
+ ]
+
+ // 页脚样式
+ const footerTypes = [
+ { text: '固定', value: 'sticky' },
+ { text: '跟随内容', value: 'static' },
+ { text: '隐藏', value: 'hidden' },
+ ]
+
+ // eslint-disable-next-line object-curly-newline
+ const {
+ isRTL,
+ skin,
+ contentWidth,
+ routerTransition,
+ layoutType,
+ isNavMenuHidden,
+ isVerticalMenuCollapsed,
+ navbarBackgroundColor,
+ navbarType,
+ footerType,
+ } = useAppConfig()
+
+ return {
+ // 定制器
+ isCustomizerOpen,
+
+ // 垂直导航折叠
+ isVerticalMenuCollapsed,
+
+ // 皮肤
+ skin,
+ skinOptions,
+
+ // 内容宽度
+ contentWidth,
+ contentWidthOptions,
+
+ // 右侧导航
+ isRTL,
+
+ // 路由转场
+ routerTransition,
+ routerTransitionOptions,
+
+ // 布局样式
+ layoutType,
+ layoutTypeOptions,
+
+ // 导航隐藏
+ isNavMenuHidden,
+
+ // 副导航栏
+ navbarColors,
+ navbarTypes,
+ navbarBackgroundColor,
+ navbarType,
+
+ // 页脚
+ footerTypes,
+ footerType,
+ }
+}
diff --git a/src/@core/layouts/components/app-navbar/AppNavbarHorizontalLayout.vue b/src/@core/layouts/components/app-navbar/AppNavbarHorizontalLayout.vue
new file mode 100644
index 0000000..ff1dc53
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/AppNavbarHorizontalLayout.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/AppNavbarHorizontalLayoutBrand.vue b/src/@core/layouts/components/app-navbar/AppNavbarHorizontalLayoutBrand.vue
new file mode 100644
index 0000000..aaaa920
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/AppNavbarHorizontalLayoutBrand.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/AppNavbarVerticalLayout.vue b/src/@core/layouts/components/app-navbar/AppNavbarVerticalLayout.vue
new file mode 100644
index 0000000..29cbbe1
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/AppNavbarVerticalLayout.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/Bookmarks.vue b/src/@core/layouts/components/app-navbar/components/Bookmarks.vue
new file mode 100644
index 0000000..c6b00fc
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/Bookmarks.vue
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ suggestion.title }}
+
+
+
+
+ 未找到任何结果
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/CartDropdown.vue b/src/@core/layouts/components/app-navbar/components/CartDropdown.vue
new file mode 100644
index 0000000..2147e79
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/CartDropdown.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+ {{ item.brand }}
+
+
+
+
+
+
+
+ ¥ {{ item.price }}
+
+
+
+
+
+
+
+
+ 您的购物车空空如也
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/DarkToggler.vue b/src/@core/layouts/components/app-navbar/components/DarkToggler.vue
new file mode 100644
index 0000000..7d67a5c
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/DarkToggler.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/Locale.vue b/src/@core/layouts/components/app-navbar/components/Locale.vue
new file mode 100644
index 0000000..e8f5a8f
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/Locale.vue
@@ -0,0 +1,73 @@
+
+
+
+
+ {{ currentLocale.name }}
+
+
+
+ {{ localeObj.name }}
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/NotificationDropdown.vue b/src/@core/layouts/components/app-navbar/components/NotificationDropdown.vue
new file mode 100644
index 0000000..0bff64b
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/NotificationDropdown.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ notification.title }}
+
+
+ {{ notification.subtitle }}
+
+
+
+
+
+
+ 系统通知
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ notification.title }}
+
+
+ {{ notification.subtitle }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/SearchBar.vue b/src/@core/layouts/components/app-navbar/components/SearchBar.vue
new file mode 100644
index 0000000..a183499
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/SearchBar.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/components/UserDropdown.vue b/src/@core/layouts/components/app-navbar/components/UserDropdown.vue
new file mode 100644
index 0000000..8cba1b9
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/components/UserDropdown.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+ {{ userData.fullName || userData.username }}
+
+
{{ userData.role }}
+
+
+
+
+
+
+
+
+ 个人资料
+
+
+
+ 收件箱
+
+
+
+ 任务清单
+
+
+
+ 聊天应用
+
+
+
+
+
+
+ 用户设置
+
+
+
+ 产品定价
+
+
+
+ 常见问题
+
+
+
+ 退出登录
+
+
+
+
diff --git a/src/@core/layouts/components/app-navbar/search-and-bookmark-data.js b/src/@core/layouts/components/app-navbar/search-and-bookmark-data.js
new file mode 100644
index 0000000..42fdf5f
--- /dev/null
+++ b/src/@core/layouts/components/app-navbar/search-and-bookmark-data.js
@@ -0,0 +1,298 @@
+/* eslint-disable */
+// prettier-ignore
+export default {
+ pages: {
+ key: 'title',
+ label: '页面',
+ data: [
+ { title: '访问控制', route: { name: 'access-control' }, icon: 'ShieldIcon', isBookmarked: false },
+ { title: '账户设置', route: { name: 'pages-account-setting' }, icon: 'SettingsIcon', isBookmarked: false },
+ { title: '进阶卡片', route: { name: 'card-advance' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: '警报', route: { name: 'components-alert' }, icon: 'AlertTriangleIcon', isBookmarked: false },
+ { title: '分析卡片', route: { name: 'card-analytic' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: 'Apex 图表', route: { name: 'charts-apex-chart' }, icon: 'PieChartIcon', isBookmarked: false },
+ { title: '宽高比', route: { name: 'components-aspect' }, icon: 'AirplayIcon', isBookmarked: false },
+ { title: '自动补全', route: { name: 'extensions-auto-suggest' }, icon: 'AlignLeftIcon', isBookmarked: false },
+ { title: '头像', route: { name: 'components-avatar' }, icon: 'UserIcon', isBookmarked: false },
+ { title: '徽章', route: { name: 'components-badge' }, icon: 'TagIcon', isBookmarked: false },
+ { title: '基本卡片', route: { name: 'card-basic' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: '博客详情', route: { name: 'pages-blog-detail', params: { id: 1 } }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '博客编辑', route: { name: 'pages-blog-edit', params: { id: 1 } }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '博客列表', route: { name: 'pages-blog-list' }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '面包屑', route: { name: 'components-breadcrumb' }, icon: 'HomeIcon', isBookmarked: false },
+ { title: 'Bootstrap 表格', route: { name: 'table-bs-table' }, icon: 'GridIcon', isBookmarked: false },
+ { title: '按钮组', route: { name: 'components-button-group' }, icon: 'BoldIcon', isBookmarked: false },
+ { title: '按钮工具栏', route: { name: 'components-button-toolbar' }, icon: 'BoldIcon', isBookmarked: false },
+ { title: '按钮', route: { name: 'components-button' }, icon: 'BoldIcon', isBookmarked: false },
+ { title: '日历', route: { name: 'apps-calendar' }, icon: 'CalendarIcon', isBookmarked: true },
+ { title: '日历组件', route: { name: 'components-calendar' }, icon: 'CalendarIcon', isBookmarked: false },
+ { title: '卡片动作', route: { name: 'card-action' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: '轮播图', route: { name: 'components-carousel' }, icon: 'CopyIcon', isBookmarked: false },
+ { title: '图表', route: { name: 'charts-chartjs' }, icon: 'PieChartIcon', isBookmarked: false },
+ { title: '聊天', route: { name: 'apps-chat' }, icon: 'MessageSquareIcon', isBookmarked: true },
+ { title: '复选框', route: { name: 'forms-element-checkbox' }, icon: 'CheckSquareIcon', isBookmarked: false },
+ { title: '结算', route: { name: 'apps-e-commerce-checkout' }, icon: 'DollarSignIcon', isBookmarked: false },
+ { title: '剪贴板', route: { name: 'extensions-clipboard' }, icon: 'ClipboardIcon', isBookmarked: false },
+ { title: '折叠', route: { name: 'components-collapse' }, icon: 'PlusIcon', isBookmarked: false },
+ { title: '颜色', route: { name: 'ui-colors' }, icon: 'DropletIcon', isBookmarked: false },
+ { title: '敬请期待', route: { name: 'misc-coming-soon' }, icon: 'ClockIcon', isBookmarked: false },
+ { title: '右键菜单', route: { name: 'extensions-context-menu' }, icon: 'MoreVerticalIcon', isBookmarked: false },
+ { title: '统计模板', route: { name: 'dashboard-analytics' }, icon: 'ActivityIcon', isBookmarked: false },
+ { title: '电子商务模板', route: { name: 'dashboard-ecommerce' }, icon: 'ShoppingCartIcon', isBookmarked: false },
+ { title: '日期时间选择器', route: { name: 'extensions-date-time-picker' }, icon: 'ClockIcon', isBookmarked: false },
+ { title: '拖放', route: { name: 'extensions-drag-and-drop' }, icon: 'CopyIcon', isBookmarked: false },
+ { title: '下拉菜单', route: { name: 'components-dropdown' }, icon: 'MoreHorizontalIcon', isBookmarked: false },
+ { title: 'Echart 图表', route: { name: 'charts-echart' }, icon: 'PieChartIcon', isBookmarked: false },
+ { title: '电子邮件', route: { name: 'apps-email' }, icon: 'MailIcon', isBookmarked: true },
+ { title: '嵌入', route: { name: 'components-embed' }, icon: 'TvIcon', isBookmarked: false },
+ { title: '404 错误页', route: { name: 'error-404' }, icon: 'AlertTriangleIcon', isBookmarked: false },
+ { title: '错误页', route: { name: 'misc-error' }, icon: 'AlertTriangleIcon', isBookmarked: false },
+ { title: '常见问题', route: { name: 'pages-faq' }, icon: 'HelpCircleIcon', isBookmarked: false },
+ { title: 'Feather 羽毛图标', route: { name: 'ui-feather' }, icon: 'FeatherIcon', isBookmarked: false },
+ { title: '文件输入', route: { name: 'forms-element-file-input' }, icon: 'FileIcon', isBookmarked: false },
+ { title: '忘记密码页 V1', route: { name: 'auth-forgot-password-v1' }, icon: 'KeyIcon', isBookmarked: false },
+ { title: '忘记密码页 V2', route: { name: 'auth-forgot-password-v2' }, icon: 'KeyIcon', isBookmarked: false },
+ { title: '表单日期选择框', route: { name: 'forms-element-datepicker' }, icon: 'ClockIcon', isBookmarked: false },
+ { title: '表单布局', route: { name: 'form-layout' }, icon: 'GridIcon', isBookmarked: false },
+ { title: '表单评分', route: { name: 'forms-element-rating' }, icon: 'StarIcon', isBookmarked: false },
+ { title: '表单重复', route: { name: 'form-repeater' }, icon: 'StarIcon', isBookmarked: false },
+ { title: '表单标签', route: { name: 'forms-element-tag' }, icon: 'TagIcon', isBookmarked: false },
+ { title: '表单时间选择框', route: { name: 'forms-element-timepicker' }, icon: 'ClockIcon', isBookmarked: false },
+ { title: '表单验证', route: { name: 'form-validation' }, icon: 'CheckCircleIcon', isBookmarked: false },
+ { title: '表单向导', route: { name: 'form-wizard' }, icon: 'GitCommitIcon', isBookmarked: false },
+ { title: 'Good 表格', route: { name: 'table-good-table' }, icon: 'GridIcon', isBookmarked: false },
+ { title: '多语言', route: { name: 'extensions-i18n' }, icon: 'GlobeIcon', isBookmarked: false },
+ { title: '图片', route: { name: 'components-image' }, icon: 'ImageIcon', isBookmarked: false },
+ { title: '输入组', route: { name: 'forms-element-input-group' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '输入格式自动调整', route: { name: 'forms-element-input-mask' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '输入框', route: { name: 'forms-element-input' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '添加账单', route: { name: 'apps-invoice-add' }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '编辑账单', route: { name: 'apps-invoice-edit', params: { id: 4987 } }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '账单列表', route: { name: 'apps-invoice-list' }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '账单预览', route: { name: 'apps-invoice-preview', params: { id: 4987 } }, icon: 'FileTextIcon', isBookmarked: false },
+ { title: '知识库分类', route: { name: 'pages-knowledge-base-category' }, icon: 'InfoIcon', isBookmarked: false, },
+ { title: '知识库问题', route: { name: 'pages-knowledge-base-question' }, icon: 'InfoIcon', isBookmarked: false, },
+ { title: '知识库', route: { name: 'pages-knowledge-base' }, icon: 'InfoIcon', isBookmarked: false },
+ { title: 'Leaflet 地图', route: { name: 'maps-leaflet' }, icon: 'MapPinIcon', isBookmarked: false },
+ { title: '列表组', route: { name: 'components-list-group' }, icon: 'ListIcon', isBookmarked: false },
+ { title: '登录页 V1', route: { name: 'auth-login-v1' }, icon: 'LogInIcon', isBookmarked: false },
+ { title: '登录页 V2', route: { name: 'auth-login-v2' }, icon: 'LogInIcon', isBookmarked: false },
+ { title: '多媒体对象', route: { name: 'components-media' }, icon: 'ImageIcon', isBookmarked: false },
+ { title: '模态弹窗', route: { name: 'components-modal' }, icon: 'CopyIcon', isBookmarked: false },
+ { title: '标签导航', route: { name: 'components-nav' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: '无权限页', route: { name: 'misc-not-authorized' }, icon: 'XOctagonIcon', isBookmarked: false },
+ { title: 'Overlay 悬浮层', route: { name: 'components-overlay' }, icon: 'CopyIcon', isBookmarked: false },
+ { title: '分页导航', route: { name: 'components-pagination-nav' }, icon: 'HashIcon', isBookmarked: false },
+ { title: '分页', route: { name: 'components-pagination' }, icon: 'HashIcon', isBookmarked: false },
+ { title: '胶囊徽章', route: { name: 'components-pill-badge' }, icon: 'TagIcon', isBookmarked: false },
+ { title: '胶囊导航', route: { name: 'components-pill' }, icon: 'TagIcon', isBookmarked: false },
+ { title: '弹出气泡', route: { name: 'components-popover' }, icon: 'TagIcon', isBookmarked: false },
+ { title: '定价页', route: { name: 'pages-pricing' }, icon: 'DollarSignIcon', isBookmarked: false },
+ { title: '产品详情页', route: { name: 'apps-e-commerce-product-details', params: { slug: 'apple-iphone-13-pro-27' } }, icon: 'BoxIcon', isBookmarked: false, },
+ { title: '个人主页', route: { name: 'pages-profile' }, icon: 'UserIcon', isBookmarked: false },
+ { title: '进度条', route: { name: 'components-progress' }, icon: 'ChevronsRightIcon', isBookmarked: false },
+ { title: 'Quill 富文本编辑器', route: { name: 'extensions-quill-editor' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '单选框', route: { name: 'forms-element-radio' }, icon: 'DiscIcon', isBookmarked: false },
+ { title: '注册页 V1', route: { name: 'auth-register-v1' }, icon: 'UserPlusIcon', isBookmarked: false },
+ { title: '注册页 V2', route: { name: 'auth-register-v2' }, icon: 'UserPlusIcon', isBookmarked: false },
+ { title: '重置密码页 V1', route: { name: 'auth-reset-password-v1' }, icon: 'KeyIcon', isBookmarked: false },
+ { title: '重置密码页 V2', route: { name: 'auth-reset-password-v2' }, icon: 'KeyIcon', isBookmarked: false },
+ { title: '选择框', route: { name: 'forms-element-select' }, icon: 'AlignCenterIcon', isBookmarked: false },
+ { title: '商店页', route: { name: 'apps-e-commerce-shop' }, icon: 'ArchiveIcon', isBookmarked: false },
+ { title: '侧边栏', route: { name: 'components-sidebar' }, icon: 'SidebarIcon', isBookmarked: false },
+ { title: '滑块', route: { name: 'extensions-slider' }, icon: 'GitCommitIcon', isBookmarked: false },
+ { title: '数值调节器', route: { name: 'forms-element-spinbutton' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '加载遮罩状态', route: { name: 'components-spinner' }, icon: 'LoaderIcon', isBookmarked: false },
+ { title: '统计卡片', route: { name: 'card-statistic' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: '弹窗警告', route: { name: 'extensions-sweet-alert' }, icon: 'BellIcon', isBookmarked: false },
+ { title: '轮播图', route: { name: 'extensions-swiper' }, icon: 'ImageIcon', isBookmarked: false },
+ { title: '开关', route: { name: 'forms-element-switch' }, icon: 'ToggleRightIcon', isBookmarked: false },
+ { title: '选项卡', route: { name: 'components-tab' }, icon: 'CreditCardIcon', isBookmarked: false },
+ { title: '文本域', route: { name: 'forms-element-textarea' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '时间', route: { name: 'components-time' }, icon: 'ClockIcon', isBookmarked: false },
+ { title: '时间线', route: { name: 'components-timeline' }, icon: 'GitCommitIcon', isBookmarked: false },
+ { title: 'Toastification 通知', route: { name: 'extensions-toastification' }, icon: 'BellIcon', isBookmarked: false },
+ { title: '消息通知', route: { name: 'components-toasts' }, icon: 'BellIcon', isBookmarked: false },
+ { title: '任务清单', route: { name: 'apps-todo' }, icon: 'CheckSquareIcon', isBookmarked: true },
+ { title: '文字提示', route: { name: 'components-tooltip' }, icon: 'CopyIcon', isBookmarked: false },
+ { title: '引导', route: { name: 'extensions-tour' }, icon: 'GlobeIcon', isBookmarked: false },
+ // { title: '树形目录', route: { name: 'extensions-tree' }, icon: 'GitCommitIcon', isBookmarked: false },
+ { title: '字型排版', route: { name: 'ui-typography' }, icon: 'TypeIcon', isBookmarked: false },
+ { title: '维护页', route: { name: 'misc-under-maintenance' }, icon: 'MonitorIcon', isBookmarked: false },
+ { title: '用户编辑页', route: { name: 'apps-users-edit', params: { id: 21 } }, icon: 'UserIcon', isBookmarked: false },
+ { title: '用户列表页', route: { name: 'apps-users-list' }, icon: 'UserIcon', isBookmarked: false },
+ { title: '用户视图页', route: { name: 'apps-users-view', params: { id: 21 } }, icon: 'UserIcon', isBookmarked: false },
+ { title: 'Vue Select 选择框', route: { name: 'extensions-vue-select' }, icon: 'AlignCenterIcon', isBookmarked: false },
+ { title: '心愿单', route: { name: 'apps-e-commerce-wishlist' }, icon: 'HeartIcon', isBookmarked: false },
+ ],
+ },
+ files: {
+ key: 'file_name',
+ label: '文件',
+ data: [
+ {
+ file_name: "Joe's CV",
+ from: 'Stacy Watson',
+ icon: require('@/assets/images/icons/doc.png'),
+ size: '1.7 MB',
+ },
+ {
+ file_name: 'Passport Image',
+ from: 'Ben Sinitiere',
+ icon: require('@/assets/images/icons/jpg.png'),
+ size: ' 52 kb',
+ },
+ {
+ file_name: 'Questions',
+ from: 'Charleen Patti',
+ icon: require('@/assets/images/icons/doc.png'),
+ size: '1.5 gb',
+ },
+ {
+ file_name: 'Parenting Guide',
+ from: 'Doyle Blatteau',
+ icon: require('@/assets/images/icons/doc.png'),
+ size: '2.3 MB',
+ },
+ {
+ file_name: 'Class Notes',
+ from: 'Gwen Greenlow',
+ icon: require('@/assets/images/icons/doc.png'),
+ size: ' 30 kb',
+ },
+ {
+ file_name: 'Class Attendance',
+ from: 'Tom Alred',
+ icon: require('@/assets/images/icons/xls.png'),
+ size: '52 MB',
+ },
+ {
+ file_name: 'Company Salary',
+ from: 'Nellie Dezan',
+ icon: require('@/assets/images/icons/xls.png'),
+ size: '29 MB',
+ },
+ {
+ file_name: 'Company Logo',
+ from: 'Steve Sheldon',
+ icon: require('@/assets/images/icons/jpg.png'),
+ size: '1.3 MB',
+ },
+ {
+ file_name: 'Crime Rates',
+ from: 'Sherlock Holmes',
+ icon: require('@/assets/images/icons/xls.png'),
+ size: '37 kb',
+ },
+ {
+ file_name: 'Ulysses',
+ from: 'Theresia Wrenne',
+ icon: require('@/assets/images/icons/pdf.png'),
+ size: '7.2 MB',
+ },
+ {
+ file_name: 'War and Peace',
+ from: 'Goldie Highnote',
+ icon: require('@/assets/images/icons/pdf.png'),
+ size: '10.5 MB',
+ },
+ {
+ file_name: 'Vedas',
+ from: 'Ajay Patel',
+ icon: require('@/assets/images/icons/pdf.png'),
+ size: '8.3 MB',
+ },
+ {
+ file_name: 'The Trial',
+ from: 'Sirena Linkert',
+ icon: require('@/assets/images/icons/pdf.png'),
+ size: '1.5 MB',
+ },
+ ],
+ },
+ contacts: {
+ key: 'name',
+ label: '联系人',
+ data: [
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-4.jpg'),
+ name: 'Rena Brant',
+ email: 'nephrod@preany.co.uk',
+ time: '2019-21-05',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-2.jpg'),
+ name: 'Mariano Packard',
+ email: 'seek@sparaxis.org',
+ time: '2018-14-01',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-24.jpg'),
+ name: 'Risa Montufar',
+ email: 'vagary@unblist.org',
+ time: '2019-10-08',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-15.jpg'),
+ name: 'Maragaret Cimo',
+ email: 'designed@insanely.net',
+ time: '2019-01-12',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-7.jpg'),
+ name: 'Jona Prattis',
+ email: 'unwieldable@unblist.org',
+ time: '2019-21-05',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-5.jpg'),
+ name: 'Edmond Chicon',
+ email: 'museist@anaphyte.co.uk',
+ time: '2019-15-11',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-24.jpg'),
+ name: 'Abbey Darden',
+ email: 'astema@defectively.co.uk',
+ time: '2019-07-05',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-10.jpg'),
+ name: 'Seema Moallankamp',
+ email: 'fernando@storkish.co.uk',
+ time: '2017-13-08',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-2.jpg'),
+ name: 'Charleen Warmington',
+ email: 'furphy@cannibal.net',
+ time: '1891-11-08',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-22.jpg'),
+ name: 'Geri Linch',
+ email: 'insignia@markab.org',
+ time: '2015-18-01',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-23.jpg'),
+ name: 'Shellie Muster',
+ email: 'maxillary@equalize.co.uk',
+ time: '2019-26-07',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-20.jpg'),
+ name: 'Jesenia Vanbramer',
+ email: 'hypotony@phonetist.net',
+ time: '2017-12-09',
+ },
+ {
+ img: require('@/assets/images/portrait/small/avatar-s-23.jpg'),
+ name: 'Mardell Channey',
+ email: 'peseta@myrica.com',
+ time: '2019-11-11',
+ },
+ ],
+ },
+}
+/* eslint-enable */
diff --git a/src/@core/layouts/components/content-with-sidebar/ContentWithSidebar.vue b/src/@core/layouts/components/content-with-sidebar/ContentWithSidebar.vue
new file mode 100644
index 0000000..9e09595
--- /dev/null
+++ b/src/@core/layouts/components/content-with-sidebar/ContentWithSidebar.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererDefault.vue b/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererDefault.vue
new file mode 100644
index 0000000..7d58fed
--- /dev/null
+++ b/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererDefault.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererLeft.vue b/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererLeft.vue
new file mode 100644
index 0000000..6e834d3
--- /dev/null
+++ b/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererLeft.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererLeftDetached.vue b/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererLeftDetached.vue
new file mode 100644
index 0000000..208c161
--- /dev/null
+++ b/src/@core/layouts/components/layout-content-renderer/LayoutContentRendererLeftDetached.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-full/LayoutFull.vue b/src/@core/layouts/layout-full/LayoutFull.vue
new file mode 100644
index 0000000..2010a9e
--- /dev/null
+++ b/src/@core/layouts/layout-full/LayoutFull.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/LayoutHorizontal.vue b/src/@core/layouts/layout-horizontal/LayoutHorizontal.vue
new file mode 100644
index 0000000..6971d4e
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/LayoutHorizontal.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/HorizontalNavMenu.vue b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/HorizontalNavMenu.vue
new file mode 100644
index 0000000..7b96c47
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/HorizontalNavMenu.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/HorizontalNavMenuGroup.vue b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/HorizontalNavMenuGroup.vue
new file mode 100644
index 0000000..ff3eadc
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/HorizontalNavMenuGroup.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/mixinHorizontalNavMenuGroup.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/mixinHorizontalNavMenuGroup.js
new file mode 100644
index 0000000..6f9a820
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/mixinHorizontalNavMenuGroup.js
@@ -0,0 +1,10 @@
+export default {
+ watch: {
+ $route: {
+ immediate: true,
+ handler() {
+ this.updateIsActive()
+ },
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/useHorizontalNavMenuGroup.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/useHorizontalNavMenuGroup.js
new file mode 100644
index 0000000..ab377f6
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-group/useHorizontalNavMenuGroup.js
@@ -0,0 +1,55 @@
+// eslint-disable-next-line object-curly-newline
+import { ref, nextTick } from '@vue/composition-api'
+// import store from '@/store'
+import { isNavGroupActive } from '@core/layouts/utils'
+
+export default function useHorizontalNavMenuGroup(item) {
+
+ // 下拉子项
+ const refChildDropdown = ref(null)
+ const openChildDropdownOnLeft = ref(false)
+
+ // 激活态
+ const isOpen = ref(false)
+
+ const updateGroupOpen = val => {
+ isOpen.value = val
+ if (val) {
+ nextTick(() => {
+ const childDropdownWidth = refChildDropdown.value.offsetWidth
+ const windowContentWidth = window.innerWidth - 16
+ const { left: childDropdownLeft } = refChildDropdown.value.getBoundingClientRect()
+ const shallDropLeft = childDropdownLeft + childDropdownWidth - windowContentWidth
+ openChildDropdownOnLeft.value = shallDropLeft > 0
+
+ // 如果空间不够时在下拉列表添加滚动条
+ const refChildDropdownTop = refChildDropdown.value.getBoundingClientRect().top
+ const refChildDropdownHeight = refChildDropdown.value.getBoundingClientRect().height
+ if (window.innerHeight - refChildDropdownTop - refChildDropdownHeight - 28 < 1) {
+ const maxHeight = window.innerHeight - refChildDropdownTop - 70
+ refChildDropdown.value.style.maxHeight = `${maxHeight}px`
+ refChildDropdown.value.style.overflowY = 'auto'
+ refChildDropdown.value.style.overflowX = 'hidden'
+ }
+ })
+ } else {
+ openChildDropdownOnLeft.value = false
+ }
+ }
+
+ // 激活态
+ const isActive = ref(false)
+
+ const updateIsActive = () => {
+ isActive.value = isNavGroupActive(item.children)
+ }
+
+ return {
+ isOpen,
+ isActive,
+ updateGroupOpen,
+ updateIsActive,
+ refChildDropdown,
+ openChildDropdownOnLeft,
+ }
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/HorizontalNavMenuHeaderGroup.vue b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/HorizontalNavMenuHeaderGroup.vue
new file mode 100644
index 0000000..d35e958
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/HorizontalNavMenuHeaderGroup.vue
@@ -0,0 +1,80 @@
+
+ updateGroupOpen(true)"
+ @mouseleave="() => updateGroupOpen(false)"
+ >
+
+
+ {{ t(item.header) }}
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/mixinHorizontalNavMenuHeaderGroup.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/mixinHorizontalNavMenuHeaderGroup.js
new file mode 100644
index 0000000..6f9a820
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/mixinHorizontalNavMenuHeaderGroup.js
@@ -0,0 +1,10 @@
+export default {
+ watch: {
+ $route: {
+ immediate: true,
+ handler() {
+ this.updateIsActive()
+ },
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/useHorizontalNavMenuHeaderGroup.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/useHorizontalNavMenuHeaderGroup.js
new file mode 100644
index 0000000..fa88729
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-group/useHorizontalNavMenuHeaderGroup.js
@@ -0,0 +1,26 @@
+import { ref } from '@vue/composition-api'
+import { isNavGroupActive } from '@core/layouts/utils'
+
+export default function useHorizontalNavMenuHeaderGroup(item) {
+ // 展开
+ const isOpen = ref(false)
+
+ const updateGroupOpen = val => {
+ // eslint-disable-next-line no-use-before-define
+ isOpen.value = val
+ }
+
+ // 激活态
+ const isActive = ref(false)
+
+ const updateIsActive = () => {
+ isActive.value = isNavGroupActive(item.children)
+ }
+
+ return {
+ isOpen,
+ isActive,
+ updateGroupOpen,
+ updateIsActive,
+ }
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/HorizontalNavMenuHeaderLink.vue b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/HorizontalNavMenuHeaderLink.vue
new file mode 100644
index 0000000..846290a
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/HorizontalNavMenuHeaderLink.vue
@@ -0,0 +1,56 @@
+
+
+
+
+ {{ t(item.title) }}
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/mixinHorizontalNavMenuHeaderLink.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/mixinHorizontalNavMenuHeaderLink.js
new file mode 100644
index 0000000..6f9a820
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/mixinHorizontalNavMenuHeaderLink.js
@@ -0,0 +1,10 @@
+export default {
+ watch: {
+ $route: {
+ immediate: true,
+ handler() {
+ this.updateIsActive()
+ },
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/useHorizontalNavMenuHeaderLink.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/useHorizontalNavMenuHeaderLink.js
new file mode 100644
index 0000000..69ff201
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-header-link/useHorizontalNavMenuHeaderLink.js
@@ -0,0 +1,17 @@
+import { ref } from '@vue/composition-api'
+import { isNavLinkActive } from '@core/layouts/utils'
+
+export default function useHorizontalNavMenuHeaderGroup(item) {
+
+ // 激活态
+ const isActive = ref(false)
+
+ const updateIsActive = () => {
+ isActive.value = isNavLinkActive(item)
+ }
+
+ return {
+ isActive,
+ updateIsActive,
+ }
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-items/HorizontalNavMenuItems.vue b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-items/HorizontalNavMenuItems.vue
new file mode 100644
index 0000000..08a10d2
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-items/HorizontalNavMenuItems.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/HorizontalNavMenuLink.vue b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/HorizontalNavMenuLink.vue
new file mode 100644
index 0000000..577e314
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/HorizontalNavMenuLink.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/mixinHorizontalNavMenuLink.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/mixinHorizontalNavMenuLink.js
new file mode 100644
index 0000000..6f9a820
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/mixinHorizontalNavMenuLink.js
@@ -0,0 +1,10 @@
+export default {
+ watch: {
+ $route: {
+ immediate: true,
+ handler() {
+ this.updateIsActive()
+ },
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/useHorizontalNavMenuLink.js b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/useHorizontalNavMenuLink.js
new file mode 100644
index 0000000..e7b3489
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/components/horizontal-nav-menu/components/horizontal-nav-menu-link/useHorizontalNavMenuLink.js
@@ -0,0 +1,18 @@
+import { ref } from '@vue/composition-api'
+import { isNavLinkActive, navLinkProps } from '@core/layouts/utils'
+
+export default function useHorizontalNavMenuLink(item) {
+ const isActive = ref(false)
+
+ const linkProps = navLinkProps(item)
+
+ const updateIsActive = () => {
+ isActive.value = isNavLinkActive(item)
+ }
+
+ return {
+ isActive,
+ linkProps,
+ updateIsActive,
+ }
+}
diff --git a/src/@core/layouts/layout-horizontal/mixinLayoutHorizontal.js b/src/@core/layouts/layout-horizontal/mixinLayoutHorizontal.js
new file mode 100644
index 0000000..50265ed
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/mixinLayoutHorizontal.js
@@ -0,0 +1,11 @@
+import { $themeBreakpoints } from '@themeConfig'
+
+export default {
+ watch: {
+ $route() {
+ if (this.$store.state.app.windowWidth < $themeBreakpoints.xl) {
+ this.isVerticalMenuActive = false
+ }
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-horizontal/useLayoutHorizontal.js b/src/@core/layouts/layout-horizontal/useLayoutHorizontal.js
new file mode 100644
index 0000000..fc188ae
--- /dev/null
+++ b/src/@core/layouts/layout-horizontal/useLayoutHorizontal.js
@@ -0,0 +1,56 @@
+import { computed } from '@vue/composition-api'
+import store from '@/store'
+
+export default function useLayoutHorizontal(navbarMenuType, footerType, isVerticalMenuActive) {
+ const currentBreakpoint = computed(() => store.getters['app/currentBreakPoint'])
+
+ const layoutClasses = computed(() => {
+ const classes = []
+
+ if (currentBreakpoint.value === 'xl') {
+ classes.push('horizontal-menu')
+ } else {
+ classes.push('vertical-overlay-menu')
+ // classes.push('vertical-layout')
+ classes.push(isVerticalMenuActive.value ? 'menu-open' : 'menu-hide')
+ }
+
+ // 副导航栏
+ classes.push(`navbar-${navbarMenuType.value}`)
+
+ // 页脚
+ if (footerType.value === 'sticky') classes.push('footer-fixed')
+ if (footerType.value === 'static') classes.push('footer-static')
+ if (footerType.value === 'hidden') classes.push('footer-hidden')
+
+ return classes
+ })
+
+ // const resizeHandler = () => {
+ // isVerticalMenuActive.value = window.innerWidth >= 1200
+ // if (window.innerWidth >= 1200) currentBreakpoint.value = 'xl'
+ // else if (window.innerWidth >= 992) currentBreakpoint.value = 'lg'
+ // else if (window.innerWidth >= 768) currentBreakpoint.value = 'md'
+ // else if (window.innerWidth >= 576) currentBreakpoint.value = 'sm'
+ // else currentBreakpoint.value = 'xs'
+ // }
+
+ const navbarMenuTypeClass = computed(() => {
+ if (navbarMenuType.value === 'sticky') return 'fixed-top'
+ if (navbarMenuType.value === 'static') return ''
+ if (navbarMenuType.value === 'hidden') return 'd-none'
+ return 'floating-nav'
+ })
+
+ const footerTypeClass = computed(() => {
+ if (footerType.value === 'static') return 'footer-static'
+ if (footerType.value === 'hidden') return 'd-none'
+ return ''
+ })
+
+ return {
+ layoutClasses,
+ navbarMenuTypeClass,
+ footerTypeClass,
+ }
+}
diff --git a/src/@core/layouts/layout-vertical/LayoutVertical.vue b/src/@core/layouts/layout-vertical/LayoutVertical.vue
new file mode 100644
index 0000000..af5dd87
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/LayoutVertical.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/VerticalNavMenu.vue b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/VerticalNavMenu.vue
new file mode 100644
index 0000000..d915996
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/VerticalNavMenu.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ {{ appName }}
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{ shallShadowBottom = evt.srcElement.scrollTop > 0 }"
+ >
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/VerticalNavMenuGroup.vue b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/VerticalNavMenuGroup.vue
new file mode 100644
index 0000000..4cc6525
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/VerticalNavMenuGroup.vue
@@ -0,0 +1,100 @@
+
+
+ updateGroupOpen(!isOpen)"
+ >
+
+
+
+ {{ item.tag }}
+
+
+
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/mixinVerticalNavMenuGroup.js b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/mixinVerticalNavMenuGroup.js
new file mode 100644
index 0000000..6f9a820
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/mixinVerticalNavMenuGroup.js
@@ -0,0 +1,10 @@
+export default {
+ watch: {
+ $route: {
+ immediate: true,
+ handler() {
+ this.updateIsActive()
+ },
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/useVerticalNavMenuGroup.js b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/useVerticalNavMenuGroup.js
new file mode 100644
index 0000000..d7b4246
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-group/useVerticalNavMenuGroup.js
@@ -0,0 +1,89 @@
+// eslint-disable-next-line object-curly-newline
+import { ref, watch, inject, computed } from '@vue/composition-api'
+import store from '@/store'
+import { isNavGroupActive } from '@core/layouts/utils'
+
+export default function useVerticalNavMenuGroup(item) {
+
+ // 垂直导航折叠
+ const isVerticalMenuCollapsed = computed(() => store.state.verticalMenu.isVerticalMenuCollapsed)
+
+ watch(isVerticalMenuCollapsed, val => {
+ /* eslint-disable no-use-before-define */
+ // 使用定制器或链接设定垂直导航折叠后的内容布局
+ if (!isMouseHovered.value) {
+ if (val) isOpen.value = false
+ else if (!val && isActive.value) isOpen.value = true
+ }
+ /* eslint-enable */
+ })
+
+ // 鼠标悬停态
+ const isMouseHovered = inject('isMouseHovered')
+
+ // 导航折叠时鼠标悬停展开垂直导航
+ watch(isMouseHovered, val => {
+ if (isVerticalMenuCollapsed.value) {
+ // 使用`val && val && isActive.value` 在鼠标点击态时打开激活菜单,在鼠标离开态时关闭菜单
+ // 如果不使用 `isActive.value` ,仅使用 `val` 也可以打开其他未激活的组或菜单
+ // eslint-disable-next-line no-use-before-define
+ isOpen.value = val && isActive.value
+ }
+ })
+
+ // 展开分组
+ const openGroups = inject('openGroups')
+
+ // 展开分组时折叠其他已打开的组
+ watch(openGroups, currentOpenGroups => {
+ const clickedGroup = currentOpenGroups[currentOpenGroups.length - 1]
+
+ // 关闭未单击的组或当前组未处于激活态
+ // eslint-disable-next-line no-use-before-define
+ if (clickedGroup !== item.title && !isActive.value) {
+ // 如果单击的组不是当前组的子级
+ // eslint-disable-next-line no-use-before-define
+ if (!doesHaveChild(clickedGroup)) isOpen.value = false
+ }
+ })
+
+ // 已展开组
+ const isOpen = ref(false)
+ watch(isOpen, val => {
+ // 如果组已展开则推送到数组
+ if (val) openGroups.value.push(item.title)
+ })
+
+ const updateGroupOpen = val => {
+ // eslint-disable-next-line no-use-before-define
+ isOpen.value = val
+ }
+
+ // 已激活组
+ const isActive = ref(false)
+ watch(isActive, val => {
+
+ // 如果导航已折叠且未悬停于此(可选),则不打开组
+ if (val) {
+ if (!isVerticalMenuCollapsed.value) isOpen.value = val
+ } else {
+ isOpen.value = val
+ }
+ })
+
+ const updateIsActive = () => {
+ isActive.value = isNavGroupActive(item.children)
+ }
+
+ // 子级
+ const doesHaveChild = title => item.children.some(child => child.title === title)
+
+ return {
+ isOpen,
+ isActive,
+ updateGroupOpen,
+ openGroups,
+ isMouseHovered,
+ updateIsActive,
+ }
+}
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-header/index.js b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-header/index.js
new file mode 100644
index 0000000..5638c87
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-header/index.js
@@ -0,0 +1,22 @@
+import { useUtils as useI18nUtils } from '@core/libs/i18n'
+import { useUtils as useAclUtils } from '@core/libs/acl'
+
+const { t } = useI18nUtils()
+const { canViewVerticalNavMenuHeader } = useAclUtils()
+
+export default {
+ props: {
+ item: {
+ type: Object,
+ required: true,
+ },
+ },
+ render(h) {
+ const span = h('span', {}, t(this.item.header))
+ const icon = h('feather-icon', { props: { icon: 'MoreHorizontalIcon', size: '18' } })
+ if (canViewVerticalNavMenuHeader(this.item)) {
+ return h('li', { class: 'navigation-header text-truncate' }, [span, icon])
+ }
+ return h()
+ },
+}
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-items/VerticalNavMenuItems.vue b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-items/VerticalNavMenuItems.vue
new file mode 100644
index 0000000..8a51b75
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-items/VerticalNavMenuItems.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/VerticalNavMenuLink.vue b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/VerticalNavMenuLink.vue
new file mode 100644
index 0000000..6a0d4fd
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/VerticalNavMenuLink.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+ {{ item.tag }}
+
+
+
+
+
+
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/mixinVerticalNavMenuLink.js b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/mixinVerticalNavMenuLink.js
new file mode 100644
index 0000000..6f9a820
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/mixinVerticalNavMenuLink.js
@@ -0,0 +1,10 @@
+export default {
+ watch: {
+ $route: {
+ immediate: true,
+ handler() {
+ this.updateIsActive()
+ },
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/useVerticalNavMenuLink.js b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/useVerticalNavMenuLink.js
new file mode 100644
index 0000000..4562d57
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/components/vertical-nav-menu-link/useVerticalNavMenuLink.js
@@ -0,0 +1,18 @@
+import { ref } from '@vue/composition-api'
+import { isNavLinkActive, navLinkProps } from '@core/layouts/utils'
+
+export default function useVerticalNavMenuLink(item) {
+ const isActive = ref(false)
+
+ const linkProps = navLinkProps(item)
+
+ const updateIsActive = () => {
+ isActive.value = isNavLinkActive(item)
+ }
+
+ return {
+ isActive,
+ linkProps,
+ updateIsActive,
+ }
+}
diff --git a/src/@core/layouts/layout-vertical/components/vertical-nav-menu/useVerticalNavMenu.js b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/useVerticalNavMenu.js
new file mode 100644
index 0000000..99d2504
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/components/vertical-nav-menu/useVerticalNavMenu.js
@@ -0,0 +1,39 @@
+import { ref, computed } from '@vue/composition-api'
+import store from '@/store'
+
+export default function useVerticalNavMenu(props) {
+
+ // 垂直导航折叠
+ const isVerticalMenuCollapsed = computed({
+ get: () => store.state.verticalMenu.isVerticalMenuCollapsed,
+ set: val => {
+ store.commit('verticalMenu/UPDATE_VERTICAL_MENU_COLLAPSED', val)
+ },
+ })
+
+ // 导航折叠图标按钮
+ const collapseTogglerIcon = computed(() => {
+ if (props.isVerticalMenuActive) {
+ return isVerticalMenuCollapsed.value ? 'unpinned' : 'pinned'
+ }
+ return 'close'
+ })
+
+ const isMouseHovered = ref(false)
+
+ const updateMouseHovered = val => {
+ isMouseHovered.value = val
+ }
+
+ const toggleCollapsed = () => {
+ isVerticalMenuCollapsed.value = !isVerticalMenuCollapsed.value
+ }
+
+ return {
+ isMouseHovered,
+ isVerticalMenuCollapsed,
+ collapseTogglerIcon,
+ toggleCollapsed,
+ updateMouseHovered,
+ }
+}
diff --git a/src/@core/layouts/layout-vertical/mixinVerticalLayout.js b/src/@core/layouts/layout-vertical/mixinVerticalLayout.js
new file mode 100644
index 0000000..50265ed
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/mixinVerticalLayout.js
@@ -0,0 +1,11 @@
+import { $themeBreakpoints } from '@themeConfig'
+
+export default {
+ watch: {
+ $route() {
+ if (this.$store.state.app.windowWidth < $themeBreakpoints.xl) {
+ this.isVerticalMenuActive = false
+ }
+ },
+ },
+}
diff --git a/src/@core/layouts/layout-vertical/useVerticalLayout.js b/src/@core/layouts/layout-vertical/useVerticalLayout.js
new file mode 100644
index 0000000..b52bd5b
--- /dev/null
+++ b/src/@core/layouts/layout-vertical/useVerticalLayout.js
@@ -0,0 +1,78 @@
+import { ref, computed, watch } from '@vue/composition-api'
+import store from '@/store'
+
+export default function useVerticalLayout(navbarType, footerType) {
+ const isVerticalMenuActive = ref(true)
+ const toggleVerticalMenuActive = () => {
+ isVerticalMenuActive.value = !isVerticalMenuActive.value
+ }
+
+ const currentBreakpoint = ref('xl')
+
+ const isVerticalMenuCollapsed = computed(() => store.state.verticalMenu.isVerticalMenuCollapsed)
+
+ const layoutClasses = computed(() => {
+ const classes = []
+
+ if (currentBreakpoint.value === 'xl') {
+ classes.push('vertical-menu-modern')
+ classes.push(isVerticalMenuCollapsed.value ? 'menu-collapsed' : 'menu-expanded')
+ } else {
+ classes.push('vertical-overlay-menu')
+ classes.push(isVerticalMenuActive.value ? 'menu-open' : 'menu-hide')
+ }
+
+ // 副导航栏
+ classes.push(`navbar-${navbarType.value}`)
+
+ // 页脚
+ if (footerType.value === 'sticky') classes.push('footer-fixed')
+ if (footerType.value === 'static') classes.push('footer-static')
+ if (footerType.value === 'hidden') classes.push('footer-hidden')
+
+ return classes
+ })
+
+ // 断点尺寸调整
+ watch(currentBreakpoint, val => {
+ isVerticalMenuActive.value = val === 'xl'
+ })
+
+ const resizeHandler = () => {
+ // ! 当窗口宽度为 'xs' 时判定为移动端,将关闭垂直菜单。可调整 sass 改变判定断点(不建议)
+ if (window.innerWidth >= 1200) currentBreakpoint.value = 'xl'
+ else if (window.innerWidth >= 992) currentBreakpoint.value = 'lg'
+ else if (window.innerWidth >= 768) currentBreakpoint.value = 'md'
+ else if (window.innerWidth >= 576) currentBreakpoint.value = 'sm'
+ else currentBreakpoint.value = 'xs'
+ }
+
+ const overlayClasses = computed(() => {
+ if (currentBreakpoint.value !== 'xl' && isVerticalMenuActive.value) return 'show'
+ return null
+ })
+
+ const navbarTypeClass = computed(() => {
+ if (navbarType.value === 'sticky') return 'fixed-top'
+ if (navbarType.value === 'static') return 'navbar-static-top'
+ if (navbarType.value === 'hidden') return 'd-none'
+ return 'floating-nav'
+ })
+
+ const footerTypeClass = computed(() => {
+ if (footerType.value === 'static') return 'footer-static'
+ if (footerType.value === 'hidden') return 'd-none'
+ return ''
+ })
+
+ return {
+ isVerticalMenuActive,
+ toggleVerticalMenuActive,
+ isVerticalMenuCollapsed,
+ layoutClasses,
+ overlayClasses,
+ navbarTypeClass,
+ footerTypeClass,
+ resizeHandler,
+ }
+}
diff --git a/src/@core/layouts/utils.js b/src/@core/layouts/utils.js
new file mode 100644
index 0000000..e9a9481
--- /dev/null
+++ b/src/@core/layouts/utils.js
@@ -0,0 +1,90 @@
+import router from '@/router'
+import { isObject } from '@core/utils/utils'
+import { computed } from '@vue/composition-api'
+
+/**
+ * 根据数据 / 上下文返回要渲染的组件
+ * @param {Object} item 导航菜单项
+ */
+export const resolveVerticalNavMenuItemComponent = item => {
+ if (item.header) return 'vertical-nav-menu-header'
+ if (item.children) return 'vertical-nav-menu-group'
+ return 'vertical-nav-menu-link'
+}
+
+/**
+ * 根据数据 / 上下文返回要渲染的组件
+ * @param {Object} item 导航菜单项
+ */
+export const resolveHorizontalNavMenuItemComponent = item => {
+ if (item.children) return 'horizontal-nav-menu-group'
+ return 'horizontal-nav-menu-link'
+}
+
+/**
+ *返回导航链接的路由名称。如果链接是字符串,链接将被认为是路由名称;如果链接是对象,它将解析对象并返回链接
+ * @param {Object, String} link 导航链接对象 / 字符串
+ */
+export const resolveNavDataRouteName = link => {
+ if (isObject(link.route)) {
+ const { route } = router.resolve(link.route)
+ return route.name
+ }
+ return link.route
+}
+
+/**
+ * 检查导航链接是否激活
+ * @param {Object} link 导航链接对象
+ */
+export const isNavLinkActive = link => {
+ // 当前路由的匹配路由数组
+ const matchedRoutes = router.currentRoute.matched
+
+ // 检查提供的路由名是否与路由匹配
+ const resolveRoutedName = resolveNavDataRouteName(link)
+
+ if (!resolveRoutedName) return false
+
+ return matchedRoutes.some(route => route.name === resolveRoutedName || route.meta.navActiveLink === resolveRoutedName)
+}
+
+/**
+ * 检查导航是否分组
+ * @param {Array} children 分组子级数组
+ */
+export const isNavGroupActive = children => {
+ // 检查当前路由匹配数组
+ const matchedRoutes = router.currentRoute.matched
+
+ return children.some(child => {
+ // 如果子级中有子级则递归
+ if (child.children) {
+ return isNavGroupActive(child.children)
+ }
+
+ // 否则检查链接是否为匹配的路由
+ return isNavLinkActive(child, matchedRoutes)
+ })
+}
+
+/**
+ * 返回使用的 b-link prop
+ * @param {Object, String} item 数据中提供的导航路由名称或路由对象
+ */
+// prettier-ignore
+export const navLinkProps = item => computed(() => {
+ const props = {}
+
+ // 如果路由为字符串,则判定用路由名称创建路由对象;如果路由不为字符串,则直接返回路由对象
+ if (item.route) props.to = typeof item.route === 'string' ? { name: item.route } : item.route
+ else {
+ props.href = item.href
+ props.target = '_blank'
+ props.rel = 'nofollow'
+ }
+
+ if (!props.target) props.target = item.target || null
+
+ return props
+})
diff --git a/src/@core/libs/acl/index.js b/src/@core/libs/acl/index.js
new file mode 100644
index 0000000..3be9548
--- /dev/null
+++ b/src/@core/libs/acl/index.js
@@ -0,0 +1,7 @@
+import * as utils from './utils'
+
+export const useUtils = () => ({
+ ...utils,
+})
+
+export const _ = null
diff --git a/src/@core/libs/acl/utils.js b/src/@core/libs/acl/utils.js
new file mode 100644
index 0000000..dc137c0
--- /dev/null
+++ b/src/@core/libs/acl/utils.js
@@ -0,0 +1,84 @@
+import { getCurrentInstance } from '@vue/composition-api'
+
+/**
+ * 如果配置了 ACL,则返回结果,否则返回 true
+ * 在 @core 文件中使用以处理没有 ACL 的情况而不会出错
+ * @param {String} action CASL 用户权限管理功能
+ * @param {String} subject CASL 用户权限管理对象
+ */
+export const can = (action, subject) => {
+ const vm = getCurrentInstance().proxy
+ return vm.$can ? vm.$can(action, subject) : true
+}
+
+/**
+ * 检查用户是否根据根据其能力查看此项
+ * @param {Object} item 导航对象项
+ */
+export const canViewVerticalNavMenuLink = item => can(item.action, item.resource)
+
+/**
+ * 基于项目资源和隐藏组(其所有子项都隐藏),检查用户是否根据根据其能力查看此项
+ * @param {Object} item 导航对象项
+ */
+// eslint-disable-next-line arrow-body-style
+export const canViewVerticalNavMenuGroup = item => {
+ // 在 canViewHorizontalNavMenuGroup 和 canViewHorizontalNavMenuHeaderGroup 中使用和更新相同的逻辑。
+ const hasAnyVisibleChild = item.children.some(i => can(i.action, i.resource))
+
+ // 如果在项目返回中定义了资源和操作,则返回子项的可见性(如果没有子项可见,则隐藏组)。否则将使用提供的资源和操作检查能力,同时检查是否有任何可见的子项
+ if (!(item.action && item.resource)) {
+ return hasAnyVisibleChild
+ }
+ return can(item.action, item.resource) && hasAnyVisibleChild
+}
+
+/**
+ * 检查用户是否根据根据其能力查看此项
+ * @param {Object} item 导航对象项
+ */
+export const canViewVerticalNavMenuHeader = item => can(item.action, item.resource)
+
+/**
+ * 检查用户是否根据根据其能力查看此项
+ * @param {Object} item 导航对象项
+ */
+export const canViewHorizontalNavMenuLink = item => can(item.action, item.resource)
+
+/**
+ * 检查用户是否根据根据其能力查看此项
+ * @param {Object} item 导航对象项
+ */
+export const canViewHorizontalNavMenuHeaderLink = item => can(item.action, item.resource)
+
+/**
+ * 基于项目资源和隐藏组(其所有子项都隐藏),检查用户是否根据根据其能力查看此项
+ * @param {Object} item 导航对象项
+ */
+// eslint-disable-next-line arrow-body-style
+export const canViewHorizontalNavMenuGroup = item => {
+ // 与 canViewVerticalNavMenuGroup 的逻辑相同
+ const hasAnyVisibleChild = item.children.some(i => can(i.action, i.resource))
+
+ // 如果在项目返回中定义了资源和操作,则返回子项的可见性(如果没有子项可见,则隐藏组)。否则将使用提供的资源和操作检查能力,同时检查是否有任何可见的子项
+ if (!(item.action && item.resource)) {
+ return hasAnyVisibleChild
+ }
+ return can(item.action, item.resource) && hasAnyVisibleChild
+}
+
+// eslint-disable-next-line arrow-body-style
+export const canViewHorizontalNavMenuHeaderGroup = item => {
+ // 与 canViewVerticalNavMenuGroup 的逻辑相同,注意添加了其他内容
+ // eslint-disable-next-line arrow-body-style
+ const hasAnyVisibleChild = item.children.some(grpOrItem => {
+ // 组中必有子级,基于组 / 链接调用 ACL
+ return grpOrItem.children ? canViewHorizontalNavMenuGroup(grpOrItem) : canViewHorizontalNavMenuLink(grpOrItem)
+ })
+
+ // 如果在项目返回中定义了资源和操作,则返回子项的可见性(如果没有子项可见,则隐藏组)。否则将使用提供的资源和操作检查能力,同时检查是否有任何可见的子项
+ if (!(item.action && item.resource)) {
+ return hasAnyVisibleChild
+ }
+ return can(item.action, item.resource) && hasAnyVisibleChild
+}
diff --git a/src/@core/libs/i18n/index.js b/src/@core/libs/i18n/index.js
new file mode 100644
index 0000000..3be9548
--- /dev/null
+++ b/src/@core/libs/i18n/index.js
@@ -0,0 +1,7 @@
+import * as utils from './utils'
+
+export const useUtils = () => ({
+ ...utils,
+})
+
+export const _ = null
diff --git a/src/@core/libs/i18n/utils.js b/src/@core/libs/i18n/utils.js
new file mode 100644
index 0000000..df530b8
--- /dev/null
+++ b/src/@core/libs/i18n/utils.js
@@ -0,0 +1,14 @@
+import { getCurrentInstance } from '@vue/composition-api'
+
+/**
+ * 如果 Vue 可以使用 i18n,则返回已翻译的字符串
+ * 如果没有配置 i18n,则返回正在传递的简单内容
+ * 在 @core 文件中不会因为 i18n 缺失而导致错误
+ * @param {String} key 用于翻译的 i18n key
+ */
+export const t = key => {
+ const vm = getCurrentInstance().proxy
+ return vm.$t ? vm.$t(key) : key
+}
+
+export const _ = null
diff --git a/src/@core/mixins/ui/forms.js b/src/@core/mixins/ui/forms.js
new file mode 100644
index 0000000..1079608
--- /dev/null
+++ b/src/@core/mixins/ui/forms.js
@@ -0,0 +1,15 @@
+// 本模板 UI 整合于混入中,因此未添加图标的 computed 属性
+export const togglePasswordVisibility = {
+ data() {
+ return {
+ passwordFieldType: 'password',
+ }
+ },
+ methods: {
+ togglePasswordVisibility() {
+ this.passwordFieldType = this.passwordFieldType === 'password' ? 'text' : 'password'
+ },
+ },
+}
+
+export const _ = null
diff --git a/src/@core/mixins/ui/transition.js b/src/@core/mixins/ui/transition.js
new file mode 100644
index 0000000..6197bfa
--- /dev/null
+++ b/src/@core/mixins/ui/transition.js
@@ -0,0 +1,34 @@
+export const heightTransition = {
+ /*
+ 1. 设置适当的过渡速度值:`transition: 0.35s height;`
+ 2. 可选择设置高度动画时隐藏元素溢出:`overflow: hidden;`
+ 3. 在进行任何操作之前,设置元素动态初始高度为:`trSetHeight`,建议安装钩子以使用 'ref' 作为动态内容
+ 5. 如果浏览器出现任何问题,则使用 $nextTick 切换高度(未全面验证)
+ */
+
+ data() {
+ return {
+ trHeight: null,
+ }
+ },
+ methods: {
+ trAddHeight(val) {
+ // 添加新元素或添加更多高度(例如列表附加)。假设高度已指定且为字符串,则传入值是 'number' 或字符串中的有效数字
+ const heightValue = Number(this.trHeight.substring(0, this.trHeight.length - 2))
+ this.trHeight = `${heightValue + Number(val)}px`
+ },
+ trTrimHeight(val) {
+ // 从现有高度中移除新元素或移除高度
+ const heightValue = Number(this.trHeight.substring(0, this.trHeight.length - 2))
+ this.trHeight = `${heightValue - Number(val)}px`
+ },
+ trSetHeight(val) {
+ // 设定高度用于从已安装的钩子中分配初始值。假设未指定高度或无指定操作添加 / 删除的内容,则传入值是 'number' 或字符串中的有效数字
+ if (val === null) this.trHeight = 'auto'
+ else this.trHeight = `${Number(val)}px`
+ },
+ },
+}
+
+// 当前版本忽略下面的内容。后续版本预留添加更多转换内容
+export const _ = null
diff --git a/src/@core/scss/base/bootstrap-extended.scss b/src/@core/scss/base/bootstrap-extended.scss
new file mode 100644
index 0000000..72ada66
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended.scss
@@ -0,0 +1,46 @@
+// ================================================================================================
+// 文件名:bootstrap-extended.scss
+// 描述:已修改的 Bootstrap 文件列表。不包括尚未修改的文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import 'bootstrap-extended/include';
+@import 'components/include';
+
+// 自定义模板混入
+@import 'core/mixins/alert'; // 自定义模板混入
+
+// 核心 CSS
+@import 'bootstrap-extended/reboot';
+@import 'bootstrap-extended/helper';
+@import 'bootstrap-extended/type';
+@import 'bootstrap-extended/code';
+@import 'bootstrap-extended/tables';
+@import 'bootstrap-extended/forms';
+@import 'bootstrap-extended/buttons';
+@import 'bootstrap-extended/button-group';
+
+// 组件
+@import 'bootstrap-extended/dropdown';
+@import 'bootstrap-extended/navbar';
+@import 'bootstrap-extended/card';
+@import 'bootstrap-extended/breadcrumb';
+@import 'bootstrap-extended/badge';
+@import 'bootstrap-extended/nav';
+@import 'bootstrap-extended/alert';
+@import 'bootstrap-extended/media';
+@import 'bootstrap-extended/progress';
+@import 'bootstrap-extended/list-group';
+@import 'bootstrap-extended/toast';
+@import 'bootstrap-extended/collapse';
+@import 'bootstrap-extended/pagination';
+
+// JS 组件
+@import 'bootstrap-extended/modal';
+@import 'bootstrap-extended/popover';
+
+// 工具类
+@import 'bootstrap-extended/utilities';
diff --git a/src/@core/scss/base/bootstrap-extended/_alert.scss b/src/@core/scss/base/bootstrap-extended/_alert.scss
new file mode 100644
index 0000000..8ef89b7
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_alert.scss
@@ -0,0 +1,56 @@
+// Alerts 提示
+
+.alert {
+ font-weight: 500;
+ border: none;
+ padding: 0;
+ // 提示关闭
+ &.alert-dismissible {
+ .close {
+ padding: 0.5rem $alert-padding-x 0.5rem $alert-padding-x;
+ background-color: transparent !important;
+ box-shadow: none !important;
+ }
+ .alert-body {
+ padding: $alert-padding-y ($alert-padding-x * 2) $alert-padding-y $alert-padding-x;
+ }
+ }
+ .close:focus {
+ outline: 0;
+ }
+
+ .alert-link:hover {
+ text-decoration: underline;
+ }
+
+ // 提示内容
+ p {
+ font-weight: 500;
+ padding: 2px 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ // 提示标题
+ .alert-heading {
+ font-weight: 600;
+ font-size: $font-size-base;
+ padding: $alert-padding-y $alert-padding-x;
+ margin-bottom: 0;
+ }
+ .alert-body {
+ padding: $alert-padding-y $alert-padding-x;
+ i,
+ svg {
+ position: relative;
+ top: -2px;
+ }
+ }
+
+ // For dark alert
+ &.alert-dark {
+ .alert-heading {
+ @include alert-heading-bs($dark);
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_badge.scss b/src/@core/scss/base/bootstrap-extended/_badge.scss
new file mode 100644
index 0000000..24edab1
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_badge.scss
@@ -0,0 +1,89 @@
+// Badge 徽章
+
+.badge {
+ color: $white;
+ &[class*='badge-'] {
+ [class*='icon-'] {
+ line-height: 1;
+ }
+
+ a {
+ color: $white;
+ }
+
+ // 徽章下拉列表对齐
+ .dropdown-toggle,
+ &.dropdown-toggle {
+ span,
+ i,
+ svg {
+ vertical-align: text-top;
+ }
+ i,
+ svg {
+ padding-left: 0.2rem;
+ }
+ &::after {
+ position: relative;
+ top: 0;
+ left: 0;
+ font-size: 1rem;
+ }
+ }
+ .dropdown-menu {
+ a {
+ color: $dropdown-color;
+ }
+ }
+ }
+
+ i,
+ svg {
+ height: 12px;
+ width: 11px;
+ font-size: 12px;
+ stroke-width: 3;
+ vertical-align: top;
+ }
+
+ // square badge
+ &.badge-square {
+ border-radius: 0;
+ }
+
+ // 在所有元素上对齐
+ &.badge-up {
+ position: absolute;
+ top: -11px;
+ right: -9px;
+ min-width: 1.429rem;
+ min-height: 1.429rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.786rem;
+ line-height: 0.786;
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+ &.badge-sm {
+ top: -0.5rem;
+ right: -0.5rem;
+ }
+ }
+}
+
+// 全屏幕搜索徽章
+.badge-icon {
+ i,
+ svg {
+ font-size: 100%;
+ margin-right: 5px;
+ }
+}
+
+// 下拉指针
+.dropup {
+ .badge {
+ cursor: pointer;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_breadcrumb.scss b/src/@core/scss/base/bootstrap-extended/_breadcrumb.scss
new file mode 100644
index 0000000..5671b4b
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_breadcrumb.scss
@@ -0,0 +1,77 @@
+// Breadcrumb 面包屑
+
+.breadcrumb {
+ &:not([class*='breadcrumb-']) {
+ .breadcrumb-item + .breadcrumb-item {
+ &:before {
+ content: ' ';
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ color: $body-color;
+ margin-right: $breadcrumb-item-padding;
+ background-size: 14px;
+ }
+ }
+ }
+ .breadcrumb-item + .breadcrumb-item {
+ &:before {
+ height: 20px;
+ }
+ }
+}
+
+.breadcrumb-slash {
+ &.breadcrumb {
+ .breadcrumb-item + .breadcrumb-item:before {
+ content: '/';
+ }
+ }
+}
+.breadcrumb-dots {
+ &.breadcrumb {
+ .breadcrumb-item + .breadcrumb-item:before {
+ content: '.';
+ position: relative;
+ top: -4px;
+ }
+ }
+}
+.breadcrumb-dashes {
+ &.breadcrumb {
+ .breadcrumb-item + .breadcrumb-item:before {
+ content: '-';
+ }
+ }
+}
+.breadcrumb-pipes {
+ &.breadcrumb {
+ .breadcrumb-item + .breadcrumb-item:before {
+ content: '|';
+ }
+ }
+}
+.breadcrumb-chevron {
+ &.breadcrumb {
+ .breadcrumb-item + .breadcrumb-item:before {
+ content: ' ';
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ color: $body-color;
+ margin-right: $breadcrumb-item-padding;
+ background-size: 14px;
+ }
+ }
+}
+
+@media (max-width: 648px) {
+ .content-header .breadcrumb {
+ display: none;
+ }
+ .breadcrumbs-top {
+ .content-header-title {
+ display: contents !important;
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_button-group.scss b/src/@core/scss/base/bootstrap-extended/_button-group.scss
new file mode 100644
index 0000000..78008a0
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_button-group.scss
@@ -0,0 +1,58 @@
+// butt0n-group 按钮组
+
+// 拆分按钮下拉列表
+.dropdown-toggle-split {
+ padding-right: $btn-padding-x / 1.9;
+ padding-left: $btn-padding-x / 1.9;
+}
+
+.btn-lg + .dropdown-toggle-split,
+.btn-group-lg > .btn + .dropdown-toggle-split {
+ padding-right: $input-btn-padding-x-lg / 1.75;
+ padding-left: $input-btn-padding-x-lg / 1.75;
+}
+
+.btn-sm + .dropdown-toggle-split,
+.btn-group-sm > .btn + .dropdown-toggle-split {
+ padding-right: $input-btn-padding-x-sm / 1.9;
+ padding-left: $input-btn-padding-x-sm / 1.9;
+}
+
+// 按钮组边框
+.btn-group {
+ [class*='btn-']:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']) {
+ border-left-color: rgba($black, 0.08) !important;
+ border-right-color: rgba($black, 0.08) !important;
+ }
+}
+
+// 删除左侧的第一个按钮组边框
+.btn-group
+ > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):first-child,
+.btn-group
+ > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):first-of-type {
+ border-left-color: transparent !important;
+}
+
+// 删除右侧的最后一个按钮组边框
+.btn-group
+ > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):last-child,
+.btn-group
+ > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):last-of-type {
+ border-right-color: transparent !important;
+}
+
+// 切换按钮
+.btn-group-toggle {
+ [class*='btn-outline-'] {
+ &:not(:last-child) {
+ border-right-width: 0 !important;
+ }
+ }
+ :not([class*='btn-outline-']) {
+ &.active,
+ &:active {
+ box-shadow: inset $box-shadow;
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_buttons.scss b/src/@core/scss/base/bootstrap-extended/_buttons.scss
new file mode 100644
index 0000000..d522244
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_buttons.scss
@@ -0,0 +1,73 @@
+// Buttons 按钮
+
+// 渐变阴影按钮
+.btn {
+ box-shadow: none;
+ font-weight: 500;
+
+ &[class*='bg-gradient-'] {
+ transition: all 0.2s ease;
+ // 按钮悬停的渐变过渡
+ &:hover {
+ transform: translateY(-2px);
+ }
+ }
+
+ // 图标按钮填充
+ &.btn-icon {
+ padding: 0.715rem 0.736rem;
+ }
+ &.btn-sm {
+ &.btn-icon {
+ padding: 0.5rem;
+ line-height: 0.5;
+ }
+ }
+ &.btn-lg {
+ &.btn-icon {
+ padding: 1rem;
+ line-height: 0.75;
+ }
+ }
+
+ &:focus,
+ &.focus,
+ &:active,
+ &.active {
+ outline: none;
+ box-shadow: none;
+ }
+
+ &:not(:disabled):not(.disabled):active:focus,
+ &:not(:disabled):not(.disabled).active:focus {
+ box-shadow: none !important;
+ }
+
+ // 按钮内的图标
+ .feather {
+ vertical-align: bottom;
+ }
+ .qq {
+ vertical-align: bottom;
+ }
+ .wechat {
+ vertical-align: bottom;
+ }
+}
+
+// 输入框按钮涟漪效果(未启用)
+.btn.waves-input-wrapper {
+ padding: 0;
+}
+
+@include media-breakpoint-down(sm) {
+ .btn-sm-block {
+ display: block;
+ width: 100%;
+ }
+}
+
+// 光标指针样式设置为继承父级(原则上如果按钮被禁用,按钮中的光标指针应被删除)
+.waves-effect {
+ cursor: inherit;
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_card.scss b/src/@core/scss/base/bootstrap-extended/_card.scss
new file mode 100644
index 0000000..947d7ae
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_card.scss
@@ -0,0 +1,515 @@
+// Card 卡片
+.card {
+ border: none;
+ margin-bottom: $content-padding;
+ box-shadow: $box-shadow;
+ transition: all 0.3s ease-in-out, background 0s, color 0s, border-color 0s;
+ .card {
+ box-shadow: none !important;
+ }
+ .card-title {
+ font-weight: 500;
+ font-size: 1.285rem;
+ margin-bottom: 1.53rem; // 可考虑将子标题 'sub-title' 的边距删除
+ }
+ .card-bordered {
+ border: $card-border-width solid $card-border-color;
+ }
+ .card-img {
+ object-fit: cover;
+ }
+ .card-img-overlay {
+ border-radius: $card-border-radius;
+ }
+
+ // 全屏卡片
+ &.card-fullscreen {
+ display: block;
+ z-index: 9999;
+ position: fixed;
+ width: 100% !important;
+ height: 100% !important;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ overflow: auto;
+ }
+ .card-body[class*='border-bottom-'] {
+ border-bottom-width: 2px !important;
+ }
+ .card-img-overlay {
+ &.bg-overlay {
+ background: rgba($black, 0.45);
+ }
+ .text-muted {
+ color: $gray-800 !important;
+ }
+ }
+ &.card-minimal {
+ border: none;
+ box-shadow: none;
+ }
+
+ .card-header {
+ position: relative;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ border-bottom: none;
+ padding: 1.5rem;
+ background-color: transparent;
+ .card-title {
+ margin-bottom: 0;
+ }
+
+ .heading-elements {
+ position: relative;
+ top: -1px;
+
+ li:not(:first-child) a {
+ margin-left: 0.75rem;
+ }
+
+ a {
+ &.btn {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ }
+ i,
+ svg {
+ height: 1rem;
+ width: 1rem;
+ font-size: 1rem;
+ }
+ &[data-action='collapse'] {
+ i,
+ svg {
+ transition: all 0.25s ease-out;
+ display: inline-block;
+ }
+ &.rotate {
+ i,
+ svg {
+ transform: rotate(-180deg);
+ }
+ }
+ }
+ }
+ }
+
+ & + .card-content > .card-body:first-of-type,
+ & + .card-body {
+ padding-top: 0px;
+ }
+ }
+ .card-footer {
+ border-top: 1px solid $gray-300;
+ background-color: transparent;
+ }
+}
+// 卡片栏
+.card-columns {
+ .card {
+ margin-bottom: $spacer * 2.2;
+ }
+}
+
+.card-group,
+.card-deck {
+ margin-bottom: 0.75rem;
+}
+
+.card-head-inverse {
+ .heading-elements {
+ i,
+ svg {
+ color: $white;
+ }
+ }
+ color: $white;
+}
+.card-transparent {
+ background-color: transparent;
+}
+
+.text-white {
+ .card-img-overlay {
+ .text-muted {
+ color: $white !important;
+ }
+ }
+ code {
+ background-color: rgba($white, 1);
+ }
+ .heading-elements {
+ i,
+ svg {
+ color: $white;
+ }
+ }
+}
+
+// 图片遮罩卡片
+.overlay-img-card {
+ .card-img-overlay,
+ img {
+ max-height: 34.64rem;
+ }
+}
+
+// IE 特定样式
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ // img-fluid class
+ .card-body,
+ .card-content {
+ min-height: 1px;
+ }
+}
+
+//--------------- 进阶卡片 ---------------
+//--------------------------------------
+
+// 恭喜卡片
+.card-congratulations {
+ background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7));
+ color: $white;
+
+ // 左侧图片
+ .congratulations-img-left {
+ width: 200px;
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ @include media-breakpoint-down(xs) {
+ width: 140px;
+ }
+ }
+ // 右侧图片
+ .congratulations-img-right {
+ width: 175px;
+ position: absolute;
+ top: 0;
+ right: 0;
+
+ @include media-breakpoint-down(xs) {
+ width: 140px;
+ }
+ }
+
+ .avatar {
+ margin-bottom: 2rem;
+ }
+}
+// 恭喜卡片带奖章
+.congratulation-medal {
+ position: absolute;
+ top: 0;
+ right: 37px;
+}
+
+// 定金卡片
+.card-deposits {
+ .deposits-divider {
+ margin-top: 1.8rem;
+ margin-bottom: 1.4rem;
+ }
+}
+
+// 员工任务卡片
+.card-employee-task {
+ .employee-task {
+ &:not(:last-child) {
+ margin-bottom: 1.5rem;
+ }
+ }
+}
+
+// 开发者大会卡片
+.card-developer-meetup {
+ .meetup-img-wrapper {
+ background-color: rgba($primary, 0.1);
+ }
+ .meetup-header {
+ margin-bottom: 2rem;
+
+ .meetup-day {
+ text-align: center;
+ border-right: 1px solid $custom-control-border-color;
+ padding-right: 1.3rem;
+ margin-right: 1.3rem;
+ }
+ }
+ .media {
+ .avatar .avatar-content {
+ width: 34px;
+ height: 34px;
+ }
+ & + .media {
+ margin-top: 1.2rem;
+ }
+ }
+ .avatar-group {
+ margin-top: 2rem;
+ }
+}
+
+// 个人主页卡片
+.card-profile {
+ text-align: center;
+ .card-body {
+ position: relative;
+ padding: 5rem 2.3rem $card-spacer-y 2.3rem;
+
+ .profile-image-wrapper {
+ display: flex;
+ justify-content: center;
+
+ .profile-image {
+ position: absolute;
+ top: -4rem;
+ padding: 0.5rem;
+ border-radius: 50%;
+ background-color: $white;
+ box-shadow: 0 0 8px 0 rgba($black, 0.14);
+ margin-bottom: 1.15rem;
+
+ img {
+ width: 100px;
+ height: 100px;
+ }
+ }
+ }
+
+ .profile-badge {
+ margin-top: 0.8rem;
+ margin-bottom: 0.8rem;
+ }
+ }
+}
+
+// 面试卡片
+.card-apply-job {
+ .apply-job-package {
+ padding: 1.2rem;
+ margin-bottom: 1.15rem;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ sup {
+ top: -0.8rem;
+ }
+ }
+}
+
+// 交易卡片
+.card-transaction {
+ .transaction-item {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ &:not(:last-child) {
+ margin-bottom: 1.2rem;
+ }
+
+ .avatar {
+ margin-right: 1.2rem;
+ .avatar-content {
+ width: 42px;
+ height: 42px;
+ }
+ }
+
+ .transaction-title {
+ margin-bottom: 0.2rem;
+ margin-top: 0.2rem;
+ }
+ }
+}
+
+// 用户时间线卡片
+.card-user-timeline {
+ .user-timeline-title-icon {
+ width: 1.714rem;
+ height: 1.714rem;
+ margin-right: 1.3rem;
+ }
+ .timeline {
+ .timeline-item {
+ &:last-child {
+ .timeline-event {
+ min-height: auto;
+ }
+ }
+ &:not(:last-child) {
+ padding-bottom: 2.3rem;
+ }
+ }
+ }
+}
+
+// 电商卡片
+.business-card {
+ .business-items {
+ &:not(:last-child) {
+ margin-bottom: 1.3rem;
+ }
+
+ .business-item {
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ padding: 1rem 1rem 1rem 1.3rem;
+ &:not(:last-child) {
+ margin-bottom: 0.85rem;
+ }
+ }
+ }
+}
+
+// 浏览器状态卡片
+.card-browser-states {
+ .browser-states {
+ margin-top: 2.14rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+}
+
+// App 设计卡片
+.card-app-design {
+ .design-group {
+ margin-bottom: 2rem;
+
+ .avatar:not(:last-child) {
+ margin-right: 0.6rem;
+ }
+ }
+
+ .design-planning-wrapper {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ &:not(:last-child) {
+ margin-bottom: 1.3rem;
+ }
+
+ .design-planning {
+ padding: 0.5rem;
+ margin-bottom: 0.7rem;
+ text-align: center;
+ background-color: $body-bg;
+ border-radius: $border-radius;
+ min-width: 6.4rem;
+ &:not(:last-child) {
+ margin-right: 0.7rem;
+ }
+ }
+ }
+}
+
+//--------------- 统计卡片 ---------------
+//--------------------------------------
+
+.card-statistics {
+ .card-header {
+ padding-left: 2.4rem;
+ }
+ .statistics-body {
+ padding: 2rem 2.4rem 2.8rem !important;
+
+ .avatar .avatar-content {
+ width: 48px;
+ height: 48px;
+
+ .avatar-icon {
+ width: 24px;
+ height: 24px;
+ }
+ }
+ }
+}
+
+//--------------- 分析卡片 ---------------
+//--------------------------------------
+
+// Chart-dropdown Button
+.chart-dropdown {
+ .btn {
+ font-size: 1rem;
+ font-weight: $font-weight-normal;
+ &:after {
+ display: none;
+ }
+ }
+}
+
+// 营收和预算报告卡片
+.card-revenue-budget {
+ .revenue-report-wrapper {
+ padding: 1.286rem 1.5rem;
+
+ @include media-breakpoint-up(md) {
+ border-right: 1px solid $border-color;
+ }
+
+ #revenue-report-chart {
+ .apexcharts-series {
+ &[seriesName='收入'] {
+ transform: scaleY(0.965);
+ }
+ &[seriesName='成本'] {
+ transform: scaleY(1.035);
+ }
+ }
+ }
+ }
+
+ .budget-wrapper {
+ padding: 2rem 3rem;
+ text-align: center;
+
+ @include media-breakpoint-down(sm) {
+ padding-top: 0;
+ }
+
+ .budget-dropdown {
+ margin-bottom: 2rem;
+ }
+
+ #budget-chart {
+ margin-top: 2rem;
+ margin-bottom: 2rem;
+ }
+ }
+}
+
+// 收入卡片
+.earnings-card {
+ .apexcharts-canvas .apexcharts-pie {
+ .apexcharts-datalabel-label {
+ font-size: 0.8rem;
+ fill: $body-color !important;
+ }
+ .apexcharts-datalabel-value {
+ fill: $headings-color;
+ font-size: 1.286rem;
+ font-weight: 500;
+ }
+ }
+}
+
+// IE 特定样式
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ // 在头像内容中设置居中图标
+ #dashboard-analytics,
+ #statistics-card {
+ .avatar {
+ .avatar-content {
+ padding: 0 !important;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_code.scss b/src/@core/scss/base/bootstrap-extended/_code.scss
new file mode 100644
index 0000000..563d643
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_code.scss
@@ -0,0 +1,15 @@
+// code 内联演示代码
+
+code {
+ padding: 0.1rem 0.4rem;
+ font-size: 90%;
+ color: $code-color;
+ background-color: $kbd-bg;
+ @include border-radius($border-radius/2);
+}
+pre {
+ background-color: #f7f7f9;
+ code {
+ background-color: transparent !important;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_collapse.scss b/src/@core/scss/base/bootstrap-extended/_collapse.scss
new file mode 100644
index 0000000..70b9cac
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_collapse.scss
@@ -0,0 +1,138 @@
+// Collapse & Accordion 折叠 & 手风琴
+
+// 折叠标题
+[class*='collapse-'] {
+ .collapse-title {
+ font-weight: 500;
+ font-size: 1.1rem;
+ }
+ .card {
+ margin-bottom: 0;
+ &:last-of-type {
+ margin-bottom: 0;
+ }
+ &:not(:last-of-type) {
+ border-bottom: 1px solid $border-color;
+ }
+ .card-header {
+ cursor: pointer;
+ padding: 1rem 2.8rem 1rem 1rem;
+ }
+ .card-body {
+ padding: 1rem;
+ line-height: 1.5;
+ padding-top: 0.42rem;
+ }
+ }
+}
+
+.collapse-title {
+ color: inherit;
+ &:hover {
+ color: inherit;
+ }
+}
+
+// 在折叠/手风琴下方添加边框
+.collapse-default {
+ .card:first-child {
+ border-top: 0;
+ }
+ .card:last-child {
+ border-bottom: 0;
+ }
+ .card {
+ border-radius: 0;
+ }
+}
+
+// 折叠边框
+.collapse-border {
+ .card {
+ border: 1px solid $border-color;
+ &:not(:last-of-type) {
+ border-bottom: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ &:not(:first-of-type) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+ }
+}
+
+// 折叠阴影
+.collapse-shadow {
+ box-shadow: 0 0px 4px 0 rgba($black, 0.1);
+ padding: 0.15rem 0.75rem;
+ border-radius: $border-radius;
+ .card {
+ border-radius: 0;
+ transition: border 0.5s ease-in-out, all 0.3s ease-in-out;
+ &.open {
+ border-radius: 0.571rem;
+ margin: 10px 0;
+ border: 0;
+ box-shadow: 0px 0px 8px 0px rgba($black, 0.1) !important;
+ }
+ }
+ .card:first-child {
+ border-top-left-radius: 0.571rem;
+ border-top-right-radius: 0.571rem;
+ }
+ .card:last-child {
+ border-bottom-left-radius: 0.571rem;
+ border-bottom-right-radius: 0.571rem;
+ }
+}
+
+// 折叠边距
+.collapse-margin {
+ .card {
+ margin-top: 0.71rem;
+ margin-bottom: 0.71rem;
+ box-shadow: 0 2px 15px 0 rgba($black, 0.05) !important;
+ border-radius: 0.358rem;
+ border-bottom: 0 solid transparent !important;
+ }
+ .card-header {
+ border-radius: 0.358rem;
+ }
+}
+
+// 折叠图标和动画
+.collapse-icon {
+ .card-header {
+ position: relative;
+ }
+
+ [data-toggle='collapse'] {
+ &:after {
+ position: absolute;
+ top: 58%;
+ right: 1rem;
+ margin-top: -8px;
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $body-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 14px;
+ width: 14px;
+ height: 11px;
+ content: '';
+ transition: all 300ms linear 0s;
+ }
+
+ &:disabled {
+ &:before {
+ background-image: url(str-replace(str-replace($chevron-up, 'currentColor', $body-color), '#', '%23'));
+ }
+ }
+ }
+
+ [aria-expanded='false'] {
+ &:after {
+ transform: rotate(-180deg);
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_dropdown.scss b/src/@core/scss/base/bootstrap-extended/_dropdown.scss
new file mode 100644
index 0000000..756d7f6
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_dropdown.scss
@@ -0,0 +1,254 @@
+// Dropdown 下拉菜单
+
+.dropdown {
+ [class*='btn-outline-'].dropdown-toggle.dropdown-toggle-split {
+ border-left: 0 !important;
+ }
+
+ // 如果没有下/上箭头,则不会显示
+ &.no-arrow {
+ .dropdown-toggle {
+ &:after {
+ display: none;
+ }
+ i,
+ svg {
+ margin-right: 0;
+ }
+ }
+ }
+}
+
+.dropdown-menu {
+ // border: 1px solid rgba($black, 0.05); // 边框不透明度已降低,使其看起来与 vue 的默认下拉菜单边框(组件、列表视图页面)相同
+ border-radius: $dropdown-border-radius;
+ transform: scale(1, 0);
+ box-shadow: $dropdown-box-shadow; // 取决于 vue 版本
+
+ .dropdown-item {
+ width: auto;
+ cursor: pointer;
+ }
+
+ // 下拉标题
+ .dropdown-header {
+ font-weight: 500;
+ line-height: 1;
+ }
+}
+
+.show {
+ > .dropdown-menu {
+ transform: scale(1, 1);
+ opacity: 1;
+ display: block;
+ }
+ .dropdown-toggle {
+ &:focus {
+ box-shadow: none;
+ }
+ }
+
+ // 显示下拉盒状阴影
+ .btn {
+ &.dropdown-toggle {
+ &:focus {
+ box-shadow: none;
+ }
+ }
+ }
+}
+
+.dropdown-toggle {
+ // 更改 'ˆ' 上箭头(下拉展开)图标
+
+ &::after {
+ border: none !important;
+ content: ' ';
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $white), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 16px;
+ color: $body-color;
+ width: 14px;
+ height: 11px;
+ position: relative;
+ right: 0px;
+ left: 0.714rem;
+ padding: 0;
+ margin: 0;
+ vertical-align: 0;
+ }
+ // 箭头大小取决于按钮大小
+ &.btn-lg {
+ &::after {
+ background-size: 18px;
+ }
+ }
+
+ &.btn-sm {
+ &::after {
+ background-size: 14px;
+ }
+ }
+
+ &.dropdown-toggle-split {
+ &:after {
+ left: 0;
+ }
+ }
+
+ // 隐藏默认箭头以显示自定义的下拉图标
+ &.nav-hide-arrow {
+ &::after {
+ display: none;
+ }
+ }
+
+ // 关闭下拉列表时,防止将焦点放在下拉切换上
+ &:focus {
+ outline: 0;
+ }
+}
+
+// 上拉
+.dropup {
+ position: relative;
+ .dropdown-toggle {
+ // changed icon dropup caret
+ &::after {
+ background-image: url(str-replace(str-replace($chevron-up, 'currentColor', $white), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 16px;
+ width: 14px;
+ height: 11px;
+ content: '';
+ vertical-align: 0.05rem;
+ }
+ }
+ .dropdown-menu {
+ min-width: 8rem;
+ }
+}
+
+// DropLeft
+.dropleft {
+ .dropdown-toggle {
+ // changed icon dropup caret
+ &::before {
+ border: none !important;
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 16px;
+ width: 14px;
+ height: 11px;
+ content: '';
+ position: relative;
+ left: 0;
+ }
+ }
+ .dropdown-menu {
+ min-width: 8rem;
+ }
+}
+
+// 右拉
+.dropright {
+ .dropdown-toggle {
+ // 更改 'ˆ' 上箭头(上拉)图标
+ &::after {
+ border: none !important;
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $white), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 16px;
+ width: 14px;
+ height: 11px;
+ content: '';
+ }
+ }
+ .dropdown-menu {
+ min-width: 8rem;
+ }
+}
+
+// 下拉菜单 ::前置定位
+.dropdown-menu {
+ // 根据按钮定位下拉的边距
+
+ &[x-placement='bottom-start'],
+ &[x-placement='bottom-end'] {
+ margin-top: $dropdown_spacing;
+ }
+
+ &[x-placement='top-start'],
+ &[x-placement='top-end'] {
+ margin-bottom: $dropdown_spacing;
+ }
+
+ &[x-placement='right-start'] {
+ margin-left: $dropdown_spacing;
+ }
+ &[x-placement='left-start'] {
+ margin-right: $dropdown_spacing;
+ }
+}
+
+// 下拉图标
+.dropdown,
+.dropup {
+ &.dropdown-icon-wrapper {
+ .dropdown-toggle {
+ &:after {
+ display: none;
+ }
+ }
+ .dropdown-menu {
+ min-width: auto;
+ .dropdown-item {
+ padding: 0.5rem 1.1rem;
+ cursor: pointer;
+ i,
+ svg {
+ height: 1.3rem;
+ width: 1.3rem;
+ font-size: 1.3rem;
+ }
+ }
+ }
+ }
+}
+
+// 水平布局导航的下拉菜单动画
+.horizontal-menu-wrapper .dropdown-menu,
+.header-navbar .dropdown-menu {
+ animation-duration: 0.3s;
+ animation-fill-mode: both;
+ animation-name: slideIn;
+}
+
+// 隐藏下拉箭头
+.dropdown-toggle.hide-arrow,
+.dropdown-toggle-hide-arrow > .dropdown-toggle {
+ &::before,
+ &::after {
+ display: none;
+ }
+}
+
+@keyframes slideIn {
+ 0% {
+ transform: translateY(1rem);
+ opacity: 0;
+ }
+ 100% {
+ transform: translateY(0rem);
+ opacity: 1;
+ }
+ 0% {
+ transform: translateY(1rem);
+ opacity: 0;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_forms.scss b/src/@core/scss/base/bootstrap-extended/_forms.scss
new file mode 100644
index 0000000..840a7e1
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_forms.scss
@@ -0,0 +1,595 @@
+// Forms 表单
+
+label {
+ color: $headings-color;
+ font-size: $input-font-size;
+}
+.col-form-label-sm {
+ line-height: 2;
+}
+.col-form-label-sm {
+ &.label-last-sm{
+ margin-left: 0.3em;
+ }
+}
+// 占位符特定样式
+.form-control {
+ &::placeholder {
+ transition: all 0.2s ease;
+ }
+
+ &:focus {
+ &::placeholder {
+ transform: translate(5px);
+ transition: all 0.2s ease;
+ }
+ &:valid,
+ &.is-valid {
+ box-shadow: $input-focus-box-shadow;
+ }
+ }
+}
+
+.form-control-plaintext {
+ &:focus {
+ outline: none;
+ }
+}
+
+.custom-file-label {
+ line-height: 1.75;
+ height: $custom-file-height !important;
+ &:after {
+ height: 2.58rem;
+ line-height: 1.75;
+ content: "浏览"!important;
+ }
+}
+
+.valid-tooltip,
+.invalid-tooltip {
+ top: 102%;
+ left: 5px;
+}
+
+/***************
+* 输入组
+***************/
+
+// 当输入组切换覆盖深色模式时使用 !important 强制
+.input-group {
+ &:not(.bootstrap-touchspin):focus-within {
+ box-shadow: $input-focus-box-shadow;
+ border-radius: $input-border-radius;
+ .form-control,
+ .input-group-text {
+ border-color: $primary;
+ box-shadow: none;
+
+ &.is-valid {
+ border-color: $success;
+ }
+
+ &.is-invalid {
+ border-color: $danger;
+ }
+ }
+ }
+ &.is-valid {
+ .input-group-text {
+ border-color: $success !important;
+ }
+ &:not(.bootstrap-touchspin):focus-within {
+ .input-group-text {
+ border-color: $success;
+ }
+ }
+ }
+ &.is-invalid {
+ .input-group-text {
+ border-color: $danger !important;
+ }
+ &:not(.bootstrap-touchspin):focus-within {
+ .input-group-text {
+ border-color: $danger;
+ }
+ }
+ }
+
+ &.disabled {
+ .input-group-text {
+ background-color: $input-disabled-bg;
+ }
+ }
+
+ &.round {
+ .form-control,
+ .input-group-text,
+ &:focus-within {
+ @include border-radius(1.5rem);
+ }
+ }
+ &.square {
+ .form-control,
+ .input-group-text,
+ &:focus-within {
+ @include border-radius(0);
+ }
+ }
+ &.round,
+ &.square {
+ .input-group-prepend {
+ .input-group-text {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+ .input-group-append {
+ .input-group-text {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ }
+ .form-control {
+ &:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ &:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+ }
+ &.square {
+ .form-control,
+ .input-group-text {
+ @include border-radius(0);
+ }
+ }
+}
+
+.input-group-text {
+ @include transition($input-transition);
+}
+
+.input-group-prepend {
+ .input-group-text {
+ border-right: 0;
+ }
+}
+
+.input-group-append {
+ .input-group-text {
+ border-left: 0;
+ }
+ &:not(:last-child) .input-group-text {
+ border-right: 0;
+ }
+}
+
+// 输入组合并
+.input-group-merge {
+ .form-control {
+ &:not(:first-child) {
+ padding-left: 0;
+ border-left: 0;
+ }
+
+ &:not(:last-child) {
+ padding-right: 0;
+ border-right: 0;
+ }
+
+ &.is-valid {
+ ~ .input-group-append {
+ .input-group-text {
+ border-color: $success;
+ }
+ }
+ }
+ }
+ .input-group-prepend {
+ ~ .form-control.is-valid {
+ .input-group-text & {
+ border-color: $success;
+ }
+ }
+ }
+}
+
+// 文本域行高
+textarea {
+ &.form-control {
+ line-height: 1.6rem;
+ padding: 0.8rem 1rem !important;
+ }
+
+ &.form-control-sm {
+ padding: 0.4rem 0.857rem !important;
+ }
+
+ &.form-control-lg {
+ padding: 1rem 1.143rem !important;
+ }
+}
+
+// 表单动作(暂未启用)
+.form-actions {
+ border-top: 1px solid darken($body-bg, 10%);
+ padding: 20px 0;
+ margin-top: 20px;
+
+ &.filled {
+ background-color: $body-bg;
+ }
+ &.center {
+ text-align: center;
+ }
+ &.right {
+ text-align: right;
+ }
+
+ &.top {
+ border-top: 0;
+ border-bottom: 1px solid darken($body-bg, 10%);
+ margin-top: 0;
+ margin-bottom: 20px;
+ }
+
+ @include media-breakpoint-down(sm) {
+ .buttons-group {
+ float: left !important;
+ margin-bottom: 10px;
+ }
+ }
+}
+
+// 水平表单布局
+.form-horizontal {
+ .form-group {
+ @include media-breakpoint-up(sm) {
+ .label-control {
+ text-align: right;
+ }
+ }
+ }
+}
+
+// 选择框特定样式
+select.form-control {
+ &:not([multiple='multiple']) {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $input-border-color), '#', '%23'));
+ background-position: calc(100% - 12px) 13px, calc(100% - 20px) 13px, 100% 0;
+ background-size: 18px 14px, 18px 14px;
+ background-repeat: no-repeat;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ padding-right: 1.5rem;
+ }
+ &.form-control-lg {
+ background-position: calc(100% - 12px) 16px, calc(100% - 20px) 16px, 100% 0;
+ }
+ &.form-control-sm {
+ background-position: calc(100% - 12px) 8px, calc(100% - 20px) 8px, 100% 0;
+ }
+}
+
+// '.custom-select' 删除浏览器默认双箭头
+.custom-select {
+ -moz-appearance: none; // firefox
+ -webkit-appearance: none; // Chrome
+}
+
+// 自定义复选框
+.custom-checkbox {
+ .custom-control-label::before,
+ .custom-control-label::after {
+ top: 0.07rem;
+ }
+
+ .custom-control-label::after {
+ background-size: 57%;
+ }
+}
+
+// 自定义单选框
+.custom-radio {
+ .custom-control-label::before {
+ top: 0.1rem;
+ }
+}
+
+// 自定义单选/复选框通用
+.custom-checkbox,
+.custom-radio {
+ &.custom-control {
+ padding-left: 1.8rem;
+
+ .input-group & {
+ padding-left: 1.3rem;
+ }
+ }
+
+ .custom-control-input {
+ width: 1.285rem;
+ height: 1.285rem;
+ }
+
+ .custom-control-label {
+ font-size: $font-size-base;
+ position: static;
+ // vertical-align: middle;
+ &::before,
+ &::after {
+ width: 18px;
+ height: 18px;
+ left: 0;
+ }
+ }
+ .custom-control-input:checked ~ .custom-control-label::before {
+ box-shadow: 0 2px 4px 0 rgba($custom-control-indicator-checked-bg, 0.4) !important;
+ }
+
+ .custom-control-input:disabled ~ .custom-control-label::before {
+ border: none;
+ box-shadow: none !important;
+ }
+
+ .custom-control-input:focus ~ .custom-control-label::before {
+ border-color: none;
+ box-shadow: 0 2px 4px 0 rgba($custom-control-indicator-checked-bg, 0.4) !important;
+ }
+}
+
+// 非禁用/激活态复选框
+.custom-control-input:not(:disabled) {
+ &:active ~ .custom-control-label {
+ &::before {
+ background-color: $primary;
+ border-color: $primary;
+ }
+ }
+}
+
+/* 浮动标签组 */
+.form-label-group {
+ position: relative;
+ margin-bottom: $form-group-margin-bottom;
+
+ // 大号表单控件
+ .form-control-lg {
+ ~ label {
+ font-size: $input-font-size;
+ padding: 1rem;
+ }
+ }
+
+ // 表单标签
+ > label {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block;
+ transition: all 0.25s ease-in-out;
+ padding: 0.6rem;
+ pointer-events: none;
+ cursor: text;
+ color: rgba($black, 0.4);
+ font-size: 0.7rem;
+ opacity: 0;
+ }
+ // 表单输入
+ > input,
+ textarea {
+ // 输入框聚焦时更改颜色
+ &:focus,
+ &:not(:active) {
+ &:not(:placeholder-shown) ~ label {
+ color: rgba($primary, 1) !important;
+ transition: all 0.25s ease-in-out;
+ opacity: 1;
+ }
+ }
+ &:not(:focus) {
+ &:not(:placeholder-shown) ~ label {
+ color: rgba($black, 0.4) !important;
+ }
+ }
+ // 在输入框中输入文本后的表单标签
+ &:not(:placeholder-shown) ~ label {
+ padding: 0.25rem 0;
+ top: -20px;
+ left: 3px;
+ }
+
+ &.form-control-lg:not(:placeholder-shown) ~ label {
+ top: -23px;
+ }
+
+ &.form-control-sm:not(:placeholder-shown) ~ label {
+ top: -18px;
+ }
+ }
+}
+
+/* 开关 */
+
+.custom-switch {
+ padding-left: 0;
+ line-height: 1.7rem;
+
+ .custom-control-label {
+ padding-left: 3.5rem;
+ line-height: 1.7rem;
+
+ // 开关背景样式
+ &::before {
+ border: none;
+ background-color: $switch-bg-color;
+ height: 1.7rem;
+ box-shadow: none !important;
+ transition: opacity 0.25s ease, background-color 0.1s ease;
+ cursor: pointer;
+ user-select: none;
+ top: 0;
+ left: 0;
+ }
+ // 开关手柄
+ &:after {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ box-shadow: -1px 2px 3px 0 rgba($black, 0.2);
+ background-color: $switch-indicator-color;
+ transition: all 0.15s ease-out;
+ cursor: pointer;
+ user-select: none;
+ }
+
+ // 开关内文本
+ .switch-text-left,
+ .switch-text-right,
+ .switch-icon-left,
+ .switch-icon-right {
+ position: absolute;
+ cursor: pointer;
+ user-select: none;
+ line-height: 1.5;
+ i,
+ svg {
+ height: 13px;
+ width: 13px;
+ font-size: 13px;
+ }
+ }
+ .switch-text-left,
+ .switch-text-right {
+ line-height: 1.8;
+ width: 25px;
+ font-size: 6px;
+ }
+ .switch-text-left {
+ left: 4px;
+ color: $white;
+ opacity: 0;
+ transform: translateX(8px);
+ transition: opacity 0.1s ease, transform 0.15s ease;
+ }
+ .switch-text-right {
+ right: 10px;
+ opacity: 1;
+ transform: translateX(0px);
+ transition: opacity 0.08s ease, transform 0.15s ease;
+ }
+ .switch-icon-left {
+ left: 6px;
+ color: $white;
+ opacity: 0;
+ transform: translateX(8px);
+ transition: opacity 0.1s ease, transform 0.15s ease;
+ }
+ .switch-icon-right {
+ right: 13px;
+ opacity: 1;
+ transform: translateX(0px);
+ transition: opacity 0.08s ease, transform 0.15s ease;
+ }
+ &:focus {
+ outline: 0;
+ }
+ }
+
+ // 开关标签
+
+ .switch-label {
+ padding-left: 1rem;
+ }
+
+ // 开关 checked
+ .custom-control-input:checked ~ .custom-control-label::before {
+ box-shadow: none;
+ }
+
+ // 开关手柄动画
+ .custom-control-input:checked ~ .custom-control-label::after {
+ transform: translateX(1.4rem);
+ }
+
+ .custom-control-input:checked ~ .custom-control-label {
+ .switch-text-left,
+ .switch-icon-left {
+ transform: translateX(0);
+ opacity: 1;
+ }
+
+ .switch-text-right,
+ .switch-icon-right {
+ transform: translateX(-8px);
+ opacity: 0;
+ }
+ }
+ .custom-control-input:not(:checked) ~ .custom-control-label {
+ .switch-text-left {
+ opacity: 0;
+ }
+ .switch-text-right {
+ opacity: 1;
+ }
+ }
+ .custom-control-input:checked ~ .custom-control-label {
+ .switch-text-right {
+ opacity: 0;
+ }
+ .switch-text-left {
+ opacity: 1;
+ }
+ }
+}
+
+/* 带计数器的文本域 */
+
+.textarea-counter-value {
+ background-color: $primary;
+ color: $white;
+ padding: 1px 6px;
+ font-size: 0.6rem;
+ border-radius: 0 0 5px 5px;
+ margin-right: 1rem;
+}
+
+.btn.disabled-max-min {
+ background-color: rgba($black, 0.5) !important;
+ cursor: default;
+}
+
+/* 数字类型的输入框删除悬停箭头 */
+
+input[type='number']::-webkit-inner-spin-button,
+input[type='number']::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+}
+
+// IE 特定样式
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ // floating Label Group
+ .form-label-group {
+ label {
+ display: none;
+ }
+ }
+
+ // Bootstrap 选择框
+ select.form-control {
+ &:not([multiple='multiple']) {
+ background: none;
+ }
+ }
+}
+
+// 表单日期和时间选择器背景颜色
+.picker__input {
+ &.form-control {
+ background-color: $white;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_functions.scss b/src/@core/scss/base/bootstrap-extended/_functions.scss
new file mode 100644
index 0000000..1fc74e5
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_functions.scss
@@ -0,0 +1,12 @@
+// SASS Function
+
+@function str-replace($string, $search, $replace: '') {
+ $index: str-index($string, $search);
+
+ @if $index {
+ @return str-slice($string, 1, $index - 1) + $replace +
+ str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
+ }
+
+ @return $string;
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_helper.scss b/src/@core/scss/base/bootstrap-extended/_helper.scss
new file mode 100644
index 0000000..ad33b6f
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_helper.scss
@@ -0,0 +1,106 @@
+// ================================================================================================
+// 文件名:helper.scss
+// 描述:模板中通用组件类的辅助调整
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// Content helpers
+// -------------------------
+
+// 带有列表的排版页面图标
+.list-style-icons {
+ padding-left: 10px;
+ margin-left: 0;
+ list-style: none;
+ > li svg,
+ > li i {
+ margin-right: 6px;
+ }
+}
+
+// 图标指向提升
+.pull-up {
+ transition: all 0.25s ease;
+
+ &:hover {
+ transform: translateY(-4px) scale(1.02);
+ box-shadow: 0px 14px 24px rgba(62, 57, 107, 0.2);
+ z-index: 30;
+ }
+}
+
+// Spinner 加载器
+.spinner {
+ display: inline-block;
+ animation: spin 1s linear infinite;
+}
+@keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.spinner-reverse {
+ display: inline-block;
+ animation: spin-reverse 1s linear infinite;
+}
+@keyframes spin-reverse {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(-360deg);
+ }
+}
+
+// 应用页面中的项目圆点
+.bullet {
+ width: 1rem;
+ height: 1rem;
+ border-radius: 50%;
+ display: inline-block;
+ &.bullet-xs {
+ width: 0.5rem;
+ height: 0.5rem;
+ }
+ &.bullet-sm {
+ width: 0.714rem;
+ height: 0.714rem;
+ }
+ &.bullet-lg {
+ width: 1.25rem;
+ height: 1.25rem;
+ }
+}
+
+// 应用页面中的标题标签
+.section-label {
+ font-size: 0.85rem;
+ color: $text-muted;
+ text-transform: uppercase;
+ letter-spacing: 0.6px;
+}
+
+// 表格单元格调整
+.cell-fit {
+ width: 0.1%;
+ white-space: nowrap;
+}
+
+// 卡片匹配高度
+.match-height {
+ > [class*='col'] {
+ display: flex;
+ flex-flow: column;
+
+ > .card {
+ flex: 1 1 auto;
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_include.scss b/src/@core/scss/base/bootstrap-extended/_include.scss
new file mode 100644
index 0000000..5ecac2d
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_include.scss
@@ -0,0 +1,21 @@
+// ================================================================================================
+// 文件名:include.scss
+// 描述:SASS 通用组件类样式,包括所有特定于主题 DEMO 的自定义组件类样式。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 函数
+@import 'bootstrap/scss/functions'; // Bootstrap 核心函数
+@import 'functions'; // Bootstrap 扩展函数
+
+// 变量
+@import 'scss/variables/variables'; // Bootstrap 覆盖自定义变量
+@import 'variables'; // Bootstrap 覆盖扩展变量
+@import 'bootstrap/scss/variables'; // Bootstrap 核心变量
+
+// 混入
+@import 'bootstrap/scss/mixins'; // Bootstrap 核心混入
+@import 'mixins'; // Bootstrap 扩展混入
diff --git a/src/@core/scss/base/bootstrap-extended/_list-group.scss b/src/@core/scss/base/bootstrap-extended/_list-group.scss
new file mode 100644
index 0000000..74eb215
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_list-group.scss
@@ -0,0 +1,100 @@
+// ================================================================================================
+// 文件名:list-group.scss
+// 描述:包含列表项、列表组相关的扩展 SCSS。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 内联列表
+ul.list-inline {
+ li {
+ display: inline-block;
+ }
+ // used in search page
+ &.list-inline-pipe {
+ > li + li:before {
+ content: ' | ';
+ padding-right: 2px;
+ }
+ }
+}
+
+// bootstrap 列表组
+.list-group {
+ .list-group-item {
+ line-height: 1.5;
+ &.active {
+ &:hover {
+ background-color: $primary;
+ }
+ &:focus {
+ // color: $body-color;
+ outline: 0;
+ &:hover {
+ color: $white;
+ }
+ }
+ small {
+ color: $white !important;
+ }
+ }
+ &:hover {
+ background-color: $body-bg;
+ }
+
+ i,
+ svg {
+ position: relative;
+ }
+
+ &:not(.active):focus:active {
+ color: inherit;
+ }
+ }
+ .list-group-item-action {
+ &.active {
+ background-color: $primary;
+ color: $white;
+ &:focus {
+ background-color: $primary;
+ }
+ }
+ &:focus {
+ background-color: $body-bg;
+ outline: 0;
+ }
+ }
+
+ // 知识库之类的页面,使用圆圈列出列表组
+ &.list-group-circle {
+ border: none;
+ .list-group-item {
+ border: none;
+ position: relative;
+ padding-left: 1.5rem;
+ &:after {
+ content: ' ';
+ background-image: url(str-replace(str-replace($circle, 'currentColor', $body-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ color: $body-color;
+ background-size: 10px;
+ position: absolute;
+ height: 10px;
+ width: 10px;
+ top: 1.15rem;
+ left: 0;
+ }
+ &:hover {
+ background-color: transparent;
+ }
+ }
+ }
+}
+
+// 选定对象上的拖放圆角
+.list-group-item.gu-mirror {
+ border-radius: 0;
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_media.scss b/src/@core/scss/base/bootstrap-extended/_media.scss
new file mode 100644
index 0000000..173c863
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_media.scss
@@ -0,0 +1,24 @@
+// Media 媒体对象
+
+.media-list {
+ .media {
+ padding: 1.25rem;
+ width: 100%;
+ margin-top: 0;
+ .media-left {
+ margin-right: 1rem;
+ }
+ .media-right {
+ margin-left: 1rem;
+ }
+ }
+ a.media {
+ color: $gray-600 !important;
+ }
+}
+
+.media-bordered {
+ .media:not(:first-child) {
+ border-top: 1px solid $border-color;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_mixins.scss b/src/@core/scss/base/bootstrap-extended/_mixins.scss
new file mode 100644
index 0000000..4043aac
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_mixins.scss
@@ -0,0 +1,13 @@
+// ===============================================================================================
+// 文件名:mixins.scss
+// 描述:具有新混入特性的扩展混入文件。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+@import 'mixins/_type'; // 新
+
+// 导航组件
+@import 'mixins/_navs';
diff --git a/src/@core/scss/base/bootstrap-extended/_modal.scss b/src/@core/scss/base/bootstrap-extended/_modal.scss
new file mode 100644
index 0000000..d32c1c7
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_modal.scss
@@ -0,0 +1,171 @@
+// Modals 模态
+
+.modal {
+ // 模态标题
+ .modal-header {
+ background-color: $body-bg;
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+
+ // 关闭按钮
+ .close {
+ padding: 0.2rem 0.62rem;
+ box-shadow: 0 5px 20px 0 rgba($black, 0.1);
+ border-radius: $border-radius;
+ background: $white;
+ opacity: 1;
+ transition: all 0.23s ease 0.1s;
+ position: relative;
+ transform: translate(8px, -2px);
+
+ // 关闭按钮的悬停等效果
+ &:hover,
+ &:focus,
+ &:active {
+ opacity: 1;
+ outline: none;
+ transform: translate(5px, 3px);
+ box-shadow: none;
+ }
+ }
+ }
+ // 模态主体内容
+ .modal-content {
+ border: none;
+ // 在 IE 中关闭图标默认不可见,应设为 visible 可见
+ overflow: visible;
+ box-shadow: 0 5px 20px 0 rgba($black, 0.1);
+ }
+
+ .modal-footer {
+ padding: $modal-inner-padding;
+ }
+
+ // 应用页面中的粘性模态弹窗
+ &.modal-sticky {
+ bottom: 0;
+ right: 0;
+ top: auto;
+ left: auto;
+ height: auto;
+ position: fixed;
+ .modal-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ .modal-dialog {
+ margin-right: #{$content-padding} !important;
+ box-shadow: 0px 0px 24px 0 rgba($black, 0.25);
+ border-radius: $border-radius;
+ }
+ .modal-actions {
+ background: transparent;
+ box-shadow: none;
+ line-height: 0;
+ }
+ }
+}
+
+.modal-xs {
+ max-width: 300px;
+}
+
+@media (min-width: 1200px) {
+ .modal-xl {
+ margin-left: 3%;
+ margin-right: 3%;
+ }
+}
+
+// 滑入效果模态样式
+.modal-slide-in,
+.modal-slide-in .modal {
+ padding: 0 !important;
+ overflow: hidden !important;
+}
+
+.modal-slide-in {
+ .modal-dialog {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: auto;
+ margin: 0;
+ max-width: none;
+ width: ($modal-slide-in-width-sm - 5);
+
+ .modal-content {
+ padding-bottom: ($modal-title-line-height * $close-font-size) + $modal-header-padding-y;
+ padding-top: ($modal-title-line-height * $close-font-size) + $modal-header-padding-y;
+ overflow: auto;
+ border-radius: 0;
+ height: 100%;
+ }
+
+ .modal-body {
+ padding-bottom: 0;
+ padding-top: 0;
+ margin: auto 0;
+ flex-grow: 0;
+ }
+
+ @media (min-width: (map-get($grid-breakpoints, sm))) {
+ width: $modal-slide-in-width;
+ }
+
+ &.sidebar-sm {
+ width: $modal-slide-in-width-sm;
+ }
+ &.sidebar-lg {
+ @media (min-width: (map-get($grid-breakpoints, sm))) {
+ width: $modal-slide-in-width-lg;
+ }
+ }
+ }
+
+ .close {
+ top: $modal-header-padding-y / 2;
+ z-index: 10;
+ transform: none;
+ position: absolute;
+ top: 1.5rem;
+ right: $modal-header-padding-x;
+ margin: 0;
+ padding: 0 !important;
+ line-height: 0.5;
+ transform: translate(0, -50%);
+ }
+}
+
+// 从右滑入
+.modal-slide-in.fade .modal-dialog,
+.modal-slide-in .modal.fade .modal-dialog {
+ transform: translateX(100%);
+ transition: transform 0.1s ease-out;
+}
+
+.modal-slide-in.show .modal-dialog,
+.modal-slide-in .modal.show .modal-dialog {
+ transform: translateX(0) !important;
+ transition: transform 0.1s ease-out;
+}
+
+// 删除小屏幕中 XS 模式的最大宽度
+@media (max-width: 576px) {
+ .modal {
+ padding-right: 1rem;
+ padding-left: 1rem;
+ .modal-xs,
+ .modal-sm {
+ max-width: unset;
+ }
+ &.modal-sticky .modal-dialog {
+ margin-right: 0.2rem !important;
+ margin-left: 0.2rem;
+ margin-bottom: 3rem;
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_nav.scss b/src/@core/scss/base/bootstrap-extended/_nav.scss
new file mode 100644
index 0000000..cf29d72
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_nav.scss
@@ -0,0 +1,269 @@
+// Nav 导航和胶囊导航组件
+
+.nav {
+ border-radius: 0.25rem;
+ // 导航组件的边框环绕
+ &.wrap-border {
+ border: 1px solid $nav-component-border-color;
+ li.nav-header {
+ margin: 0 0.5rem;
+ }
+ li.nav-item,
+ div {
+ padding: 2px 0.714rem;
+ }
+ }
+
+ &.nav-left {
+ .nav-item .nav-link {
+ justify-content: flex-start;
+ }
+ }
+
+ &.nav-right {
+ .nav-item .nav-link {
+ justify-content: flex-end;
+ }
+ }
+
+ // 方形边框
+ &.square-border {
+ border-radius: 0;
+ .nav-item {
+ .nav-link.active {
+ border-radius: 0;
+ }
+ }
+ }
+
+ // 主菜单切换
+ .modern-nav-toggle {
+ padding: 0;
+ margin: 1.571rem 0;
+ }
+
+ // 不带背景的下拉列表需要更改箭头颜色
+ .dropdown.show {
+ .dropdown-toggle {
+ &::after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ }
+
+ .dropdown-toggle {
+ &:not(.active) {
+ &::after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $body-color), '#', '%23'));
+ }
+ }
+ }
+}
+.nav-pills,
+.nav-tabs {
+ // 带 SVG 图标的导航链接
+ .nav-link {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ i,
+ svg {
+ margin-right: 0.5rem;
+ }
+ }
+}
+// 胶囊导航
+.nav-pills {
+ margin-bottom: 1rem;
+ // 胶囊导航中的项
+ .nav-link {
+ padding: $btn-padding-y $btn-padding-x;
+ font-size: $btn-font-size;
+ line-height: $btn-font-size;
+ border: 1px solid transparent;
+ color: $headings-color;
+ &.active {
+ border-color: $nav-pills-link-active-bg;
+ box-shadow: 0 4px 18px -4px rgba($nav-pills-link-active-bg, 0.65);
+ }
+ &.disabled {
+ color: $nav-link-disabled-color;
+ }
+ &.dropdown-toggle::after {
+ left: 1px;
+ }
+ }
+
+ &.dropdown {
+ &.show {
+ .nav-link {
+ color: $white;
+ }
+ .dropdown-item {
+ &.active {
+ &:hover {
+ color: $primary;
+ }
+ }
+ }
+ }
+ }
+
+ // 均分
+ &.nav-justified {
+ @include nav-justified;
+ @include nav-tabs-justified;
+ .nav-link {
+ display: block;
+
+ &.active {
+ border: none;
+
+ &:hover,
+ &:focus {
+ border: none;
+ }
+ }
+ }
+ }
+}
+
+// 基本导航标签
+.nav-tabs {
+ margin-bottom: 1rem;
+ position: relative;
+ // 基本导航项
+ .nav-item {
+ position: relative;
+ }
+ .nav-link {
+ color: $body-color;
+ border: none;
+ min-width: auto;
+ font-weight: 450;
+ padding: 0.61rem 1.2rem;
+ border-radius: 0;
+ position: relative;
+ overflow: hidden;
+
+ &:after {
+ content: '';
+
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 3px;
+ background: linear-gradient(30deg, rgba($primary, 1), rgba($primary, 0.5)) !important;
+ transition: transform 0.3s;
+ transform: translate3d(0, 150%, 0);
+ }
+ &.active {
+ position: relative;
+ color: $primary;
+
+ &:after {
+ transform: translate3d(0, 0, 0);
+ // box-shadow: 0 0 8px 0 rgba($primary, 0.5) !important;
+ }
+ }
+
+ &.dropdown-toggle {
+ &::after {
+ left: 1px;
+ }
+ }
+ }
+ // 导航均分
+ &.nav-justified {
+ @include nav-justified;
+ @include nav-tabs-justified;
+
+ .nav-item {
+ a.nav-link {
+ display: block;
+ border-radius: 0;
+
+ &.active {
+ border: none;
+ }
+ &:hover {
+ border-color: transparent;
+ }
+ }
+ }
+ }
+}
+
+// 标签垂直对齐
+.nav-vertical {
+ overflow: hidden;
+ .nav.nav-tabs {
+ // nav item styles for vertical nav tabs
+ .nav-item {
+ .nav-link {
+ margin-bottom: 0;
+ &:after {
+ transform: rotate(90deg) translate3d(0, 150%, 0);
+ left: 70%;
+ }
+ &.active {
+ &:after {
+ left: auto;
+ right: -1.4rem;
+ transform: rotate(90deg) translate3d(0, 225%, 0);
+ top: 1.25rem;
+ width: 2.14rem;
+ }
+ }
+ }
+ }
+
+ // 垂直左对齐
+ &.nav-left {
+ float: left;
+ display: table;
+ margin-right: 1rem;
+
+ ~ .tab-content {
+ .tab-pane {
+ display: none;
+ overflow-y: auto;
+ padding-left: 1rem;
+ &.active {
+ display: block;
+ }
+ }
+ }
+ }
+
+ // 垂直右对齐
+ &.nav-right {
+ float: right;
+ display: table;
+ margin-left: 1rem;
+
+ .nav-item {
+ .nav-link {
+ &.active {
+ &:after {
+ left: -0.9rem;
+ transform: rotate(90deg) translate3d(0, 10%, 0);
+ }
+ }
+ }
+ }
+
+ ~ .tab-content {
+ .tab-pane {
+ display: none;
+ overflow-y: auto;
+ padding-right: 1rem;
+ &.active {
+ display: block;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_navbar.scss b/src/@core/scss/base/bootstrap-extended/_navbar.scss
new file mode 100644
index 0000000..d26c4ba
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_navbar.scss
@@ -0,0 +1,659 @@
+// ================================================================================================
+// 文件名:navbar.scss
+// 描述:包含副导航栏、垂直导航布局和水平导航布局相关的 SCSS 文件.
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@function set-navbar-text-color($color) {
+ @if (lightness($color) > 50) {
+ @return $white; // 浅色布局返回深色时
+ } @else {
+ @return $black; // 深色布局返回浅色时
+ }
+}
+
+.header-navbar {
+ padding: 0px;
+ min-height: $navbar-height;
+ font-family: $font-family-monospace;
+ transition: 300ms ease all, background 0s;
+ z-index: 997;
+
+ &.fixed-top {
+ left: $menu-expanded-width;
+ }
+
+ // 根据背景应用导航栏颜色
+ &[class*='bg-'] {
+ .navbar-nav {
+ .nav-item {
+ > a {
+ color: set-navbar-text-color($theme-dark-body-color) !important;
+
+ i,
+ svg,
+ span {
+ color: set-navbar-text-color($theme-dark-body-color) !important;
+ }
+ }
+
+ .dropdown-menu {
+ i,
+ svg {
+ color: inherit !important;
+ }
+ }
+ }
+
+ .search-input {
+ .input,
+ .search-list .auto-suggestion span {
+ color: $body-color !important;
+ }
+ }
+ }
+ }
+
+ /* ------ 副导航栏 ------ */
+
+ // 浮动样式
+ &.floating-nav {
+ position: fixed;
+ right: 0;
+ margin: #{$floating-nav-margin} #{$content-padding} 0;
+ width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2) - #{$menu-expanded-width});
+ border-radius: $card-border-radius;
+ z-index: 12;
+ }
+
+ // 跟随内容
+ &.navbar-static-top {
+ top: 0;
+ right: 0;
+ left: $menu-expanded-width;
+ width: calc(100vw - (100vw - 100%) - #{$sidebar-width});
+ background: transparent;
+ box-shadow: none !important; // remove this if removing "menu-shadow" class
+ }
+
+ // 添加边框
+ &.navbar-border {
+ border-bottom: 1px solid $border-color;
+ }
+
+ // 添加阴影
+ &.navbar-shadow {
+ box-shadow: $box-shadow;
+ }
+
+ &.navbar-dark.navbar-border {
+ border-bottom: 1px solid $theme-dark-border-color;
+ }
+
+ // 隐藏副导航栏下拉箭头
+ &:not(.navbar-horizontal) {
+ .nav-link {
+ &.dropdown-toggle::after {
+ display: none;
+ }
+ }
+ }
+
+ .navbar-container {
+ padding: 0.8rem 1rem;
+ // 在移动端上方断点添加更多的填充
+ @include media-breakpoint-up(sm) {
+ padding: 0.8rem 1.4rem;
+ }
+ flex-basis: 100%;
+ transition: 300ms ease all;
+ margin-left: 0;
+
+ // 悬停时导航栏书签主颜色
+ .bookmark-wrapper {
+ // for bookmark z-index
+ .bookmark-input {
+ z-index: 1;
+ }
+ }
+
+ // 语言下拉样式
+ .dropdown-language {
+ .selected-language {
+ font-weight: 500;
+ }
+ .nav-link {
+ .flag-icon {
+ margin-right: 0.4rem;
+ }
+ }
+ .dropdown-menu .dropdown-item {
+ .flag-icon {
+ margin-right: 0.4rem;
+ }
+ }
+ }
+
+ ul.navbar-nav {
+ li {
+ line-height: 1.5;
+ &.dropdown {
+ .dropdown-menu {
+ .vertical-layout & {
+ top: 41px !important; // 仅在垂直布局上应用导航栏下拉箭头位置(由于悬停问题,不适用于水平布局)
+ }
+ }
+ }
+
+ &.dropdown-language {
+ .dropdown-menu.dropdown-menu-right {
+ right: -2px;
+ }
+ }
+
+ // 购物车和通知徽章
+ &.dropdown-cart,
+ &.dropdown-notification {
+ .badge {
+ &.badge-up {
+ right: -3px;
+ }
+ }
+ .dropdown-menu.dropdown-menu-right {
+ right: -2px;
+ padding: 0;
+ left: inherit;
+ &::before {
+ background: $primary;
+ border-color: $primary;
+ }
+ }
+ .dropdown-menu-header {
+ border-top-left-radius: $dropdown-border-radius;
+ border-top-right-radius: $dropdown-border-radius;
+ .dropdown-header {
+ padding: 1.22rem 1.28rem;
+ }
+ }
+ .notification-text {
+ margin-bottom: 0.5rem;
+ font-size: smaller;
+ color: $text-muted;
+ }
+ .dropdown-menu-footer {
+ padding: 1.28rem;
+ }
+ }
+ &.dropdown-notification {
+ .media-body {
+ .media-heading {
+ color: $body-color;
+ margin-bottom: 0;
+ line-height: 1.2;
+ }
+ }
+ }
+
+ // 购物车下拉菜单
+ &.dropdown-cart {
+ .media {
+ position: relative;
+ img {
+ background: $body-bg;
+ }
+ &:hover {
+ .cart-item-remove {
+ visibility: visible;
+ }
+ }
+ }
+ .media-heading {
+ width: 8rem;
+ h6.cart-item-title {
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+ .cart-item-by {
+ color: $text-muted;
+ display: -webkit-box;
+ -webkit-line-clamp: 1;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+ }
+ .media-body {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ .cart-item-price {
+ margin-bottom: 0;
+ width: 5rem;
+ text-align: right;
+ }
+
+ .cart-item-remove {
+ position: absolute;
+ top: 10px;
+ right: 17px;
+ width: 14px;
+ height: 14px;
+ cursor: pointer;
+ @include media-breakpoint-up(md) {
+ visibility: hidden;
+ }
+ }
+ }
+
+ > a.nav-link {
+ color: $body-color;
+ padding: 0 0.5rem;
+ position: relative;
+ }
+
+ &.dropdown-user {
+ line-height: 1 !important; // 因导航栏中的自定义双线组件需强定义
+ .dropdown-menu {
+ width: 12rem;
+ margin-top: 10px;
+ i,
+ svg {
+ height: 16px;
+ width: 16px;
+ font-size: 16px;
+ vertical-align: top;
+ }
+ }
+ }
+
+ // 登录用户下拉列表样式
+ a.dropdown-user-link {
+ display: flex;
+ align-items: center;
+
+ .user-name {
+ display: inline-block;
+ margin-bottom: 0.435rem;
+ margin-left: 0.2rem;
+ }
+
+ .user-status {
+ font-size: smaller;
+ }
+
+ img {
+ box-shadow: 0 4px 8px 0 rgba($black, 0.12), 0 2px 4px 0 rgba($black, 0.08);
+ }
+ }
+
+ // 导航栏切换菜单大小(在 lg 屏幕尺寸以上显示)
+ a.menu-toggle {
+ i,
+ svg {
+ height: 1.6rem;
+ width: 1.6rem;
+ font-size: 1.6rem;
+ }
+ }
+
+ a.dropdown-user-link {
+ .user-nav {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+ float: left;
+ margin-right: $spacer - 0.2;
+ }
+ }
+
+ div.input-group {
+ padding: 0.7rem 1rem;
+ }
+
+ i,
+ svg {
+ &.ficon {
+ height: 1.5rem;
+ width: 1.5rem;
+ font-size: 1.5rem;
+ color: $body-color;
+
+ &:hover {
+ color: $primary;
+ }
+ }
+ }
+
+ .media-list {
+ max-height: 25rem;
+ }
+
+ .scrollable-container {
+ position: relative;
+ }
+ }
+ }
+
+ // 导航通知下拉列表
+ .dropdown-menu-media {
+ width: 30rem;
+
+ .dropdown-menu-header {
+ border-bottom: 1px solid $border-color;
+ }
+
+ .media-list {
+ .media {
+ padding: 0.9rem 1.28rem;
+ border: none;
+ border-bottom: 1px solid $border-color;
+
+ &:hover {
+ background: $body-bg;
+ }
+
+ .media-meta {
+ color: $body-color;
+ }
+ }
+
+ a:last-of-type {
+ .media {
+ border-bottom: none;
+ }
+ }
+ }
+
+ .dropdown-menu-footer {
+ border-top: 1px solid $border-color;
+ }
+ }
+ }
+}
+
+// 导航栏和滚动条阴影
+.header-navbar-shadow {
+ display: none;
+}
+
+// 浮动副导航栏
+.navbar-floating {
+ // 浮动副导航栏在所有屏幕上具有相同的填充尺寸
+ .navbar-container {
+ padding: 0.8rem 1rem;
+ }
+ .header-navbar-shadow {
+ display: block;
+ background: linear-gradient(
+ 180deg,
+ hsla(0, 0%, 97.3%, 0.95) 44%,
+ hsla(0, 0%, 97.3%, 0.46) 73%,
+ hsla(0, 0%, 100%, 0)
+ );
+ padding-top: 2.2rem;
+ background-repeat: repeat;
+ width: 100%;
+ height: 102px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 11;
+ }
+}
+
+// 副导航栏颜色
+.navbar-light {
+ background: $white;
+
+ &.navbar-horizontal {
+ background: $white;
+ }
+
+ .navbar-nav {
+ .active {
+ &.nav-link {
+ background-color: rgba($black, 0.03);
+ }
+ }
+
+ .disabled {
+ &.nav-link {
+ color: $nav-link-disabled-color;
+ }
+ }
+ }
+}
+
+.navbar-dark {
+ background: $gray-600;
+
+ .navbar-brand {
+ color: $white !important;
+ }
+
+ &.navbar-horizontal {
+ background: $gray-600;
+ }
+
+ .nav-search {
+ .form-control,
+ .btn-secondary {
+ color: $white;
+ background: $gray-600;
+ }
+ }
+
+ .navbar-nav {
+ li {
+ line-height: 1;
+ }
+
+ .active {
+ &.nav-link {
+ background-color: rgba($white, 0.05);
+ }
+ }
+
+ .disabled {
+ &.nav-link {
+ color: $gray-300;
+ }
+ }
+ }
+}
+
+// 设备支持的导航折叠开关按钮
+@include media-breakpoint-down(sm) {
+ .header-navbar {
+ // 通用导航栏下拉列表的特定样式
+ .navbar-nav {
+ .show {
+ position: static;
+ }
+
+ .open-navbar-container {
+ padding-top: 0.625rem;
+ }
+ }
+
+ .navbar-container {
+ .show {
+ .dropdown-menu {
+ right: 0;
+ left: 0 !important;
+ float: none;
+ width: auto !important;
+ margin-top: 0;
+ overflow: hidden;
+ }
+ }
+
+ .dropdown-user {
+ .dropdown-menu-right {
+ right: 0 !important;
+ }
+ }
+
+ ul.navbar-nav {
+ li {
+ .dropdown-toggle::after {
+ margin-right: 0;
+ margin-left: -2px;
+ }
+ }
+ }
+ }
+ }
+
+ // 深色布局导航
+ .navbar-dark {
+ .navbar-header {
+ .navbar-nav {
+ .nav-link {
+ color: $white;
+ }
+ }
+ }
+
+ .navbar-container {
+ .navbar-nav {
+ .nav-link {
+ color: $gray-600;
+ }
+ }
+ }
+ }
+
+ // 浅色布局导航
+ .navbar-light {
+ .navbar-header {
+ .navbar-nav {
+ .nav-link {
+ color: $gray-600;
+ }
+ }
+ }
+
+ .navbar-container {
+ .navbar-nav {
+ .nav-link {
+ color: $gray-600;
+ }
+ }
+ }
+ }
+}
+
+/* ----------- 用于 MD 屏幕及以下(如 iPad)导航的特定样式 ----------- */
+
+@include media-breakpoint-down(lg) {
+ .header-navbar {
+ // 浮动导航宽度
+ &.floating-nav {
+ width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2));
+ }
+ &.navbar-static-top {
+ left: 0;
+ width: 100%;
+ }
+ }
+}
+
+// 用于响应式子导航项
+@mixin responsive_sub_nav {
+ .header-navbar {
+ .navbar-nav {
+ margin: 0;
+ flex-flow: row wrap;
+
+ .dropdown-menu {
+ position: absolute;
+ }
+
+ .nav-item {
+ float: left;
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(md) {
+ @include responsive_sub_nav;
+}
+@media (max-width: 767px) {
+ @include responsive_sub_nav;
+}
+
+@include media-breakpoint-down(xs) {
+ .header-navbar {
+ &.floating-nav {
+ width: calc(
+ 100vw - (100vw - 100%) - calc(#{$content-padding} + 0.4rem)
+ ) !important; // SM 屏幕(移动端)计算更新的宽度
+ margin-left: 1rem;
+ margin-right: 1.2rem;
+ }
+
+ .navbar-container ul.navbar-nav li .selected-language {
+ display: none;
+ }
+ }
+}
+
+/* ----------- 用于 iPhone 5, 5S iPhone 6 导航的特定样式 ----------- */
+
+// 根据屏幕大小设置下拉高度
+@mixin extend_mobile_specific($menu_height) {
+ .header-navbar {
+ .navbar-container {
+ .show {
+ .dropdown-menu {
+ max-height: $menu_height;
+ }
+ }
+ }
+ }
+}
+
+@media only screen and (min-device-width: 26.78em) and (max-device-width: 47.64em) and (-webkit-min-device-pixel-ratio: 2) and (orientation: landscape) {
+ @include extend_mobile_specific(180px);
+}
+
+/* ----------- 用于 iPhone 6 以上导航的特定样式 ----------- */
+
+@media only screen and (min-device-width: 29.57em) and (max-device-width: 52.57em) and (-webkit-min-device-pixel-ratio: 3) and (orientation: landscape) {
+ @include extend_mobile_specific(280px);
+}
+
+// 用于固定副导航栏的宽度
+@media (max-width: 1201px) {
+ .header-navbar {
+ &.fixed-top {
+ left: 0;
+ }
+ }
+
+ .horizontal-layout {
+ .header-navbar {
+ .navbar-container {
+ padding-left: 0.8rem;
+ padding-right: 0.8rem;
+ }
+ }
+ }
+}
+
+@media (max-width: 1199px) {
+ .header-navbar {
+ .navbar-container {
+ ul.navbar-nav li a.dropdown-user-link .user-name {
+ margin-bottom: 0;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_pagination.scss b/src/@core/scss/base/bootstrap-extended/_pagination.scss
new file mode 100644
index 0000000..df028f0
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_pagination.scss
@@ -0,0 +1,305 @@
+// Pagination 分页组件
+
+// 页数、第一页和最后一页的默认样式
+.page-item {
+ border-radius: 5rem;
+
+ &:not(.prev-item),
+ &:not(.next-item),
+ &:not(.first),
+ &:not(.last),
+ &:not(.active) {
+ .page-link {
+ line-height: 1.3;
+ }
+ }
+
+ .page-link {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ &.previous,
+ &.prev,
+ &.next,
+ &.first,
+ &.last {
+ .page-link {
+ width: auto;
+ }
+ }
+
+ &.prev-item,
+ &.next-item {
+ .page-link {
+ transition: all 0.2s ease-out;
+ }
+ }
+
+ // 上一页和下一页的特定样式
+ &.prev-item {
+ margin-right: 0.3571rem;
+
+ .page-link {
+ border-radius: 50%;
+
+ &:before {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $pagination-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 14px;
+ color: $body-color;
+ width: 8px;
+ height: 18px;
+ content: '';
+ }
+
+ &:hover {
+ background: $pagination-hover-bg;
+ color: $pagination-hover-color;
+ }
+ &:active,
+ &:hover {
+ background-color: $primary !important;
+ &:before {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23')) !important;
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-left, 'currentColor', $pagination-disabled-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+
+ & ~ .page-item:nth-child(2) {
+ border-top-left-radius: 5rem;
+ border-bottom-left-radius: 5rem;
+ .page-link {
+ border-top-left-radius: 5rem !important;
+ border-bottom-left-radius: 5rem !important;
+ }
+ }
+
+ & ~ .page-item:nth-last-child(2) {
+ border-top-right-radius: 5rem;
+ border-bottom-right-radius: 5rem;
+ .page-link {
+ border-top-right-radius: 5rem !important;
+ border-bottom-right-radius: 5rem !important;
+ }
+ }
+ }
+
+ &.next-item {
+ margin-left: 0.3571rem;
+
+ .page-link {
+ border-radius: 50%;
+
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $pagination-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 14px;
+ width: 8px;
+ height: 18px;
+ content: '';
+ }
+
+ &:hover {
+ background: $pagination-hover-bg;
+ color: $pagination-hover-color;
+ }
+ &:active,
+ &:hover {
+ background-color: $primary !important;
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $white),
+ '#',
+ '%23'
+ )) !important;
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $pagination-disabled-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+
+ // 上一页和下一页的通用样式
+ &.prev,
+ &.previous {
+ .page-link {
+ &:before {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $pagination-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 14px;
+ color: $body-color;
+ width: 12px;
+ height: 18px;
+ content: '';
+ }
+ // &:active,
+ &:hover {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-left, 'currentColor', $pagination-active-color),
+ '#',
+ '%23'
+ )) !important;
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-left, 'currentColor', $pagination-disabled-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+ &.next {
+ .page-link {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $pagination-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 14px;
+ color: $body-color;
+ width: 12px;
+ height: 18px;
+ content: '';
+ }
+ // &:active,
+ &:hover {
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $primary),
+ '#',
+ '%23'
+ )) !important;
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $pagination-disabled-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+
+ &.disabled {
+ .page-link {
+ color: $pagination-disabled-color;
+ }
+ }
+
+ // 自定义页面跳转
+ .page-link {
+ border: none;
+ margin: 0;
+ margin-left: 0;
+ font-size: 1rem;
+ min-width: 2.286rem;
+ &:focus {
+ box-shadow: none;
+ }
+
+ &:hover {
+ color: $primary;
+ }
+ }
+
+ // 激活态页数
+ &.active {
+ background-color: $pagination-bg;
+ border-radius: 0;
+
+ .page-link {
+ z-index: 3;
+ border-radius: 5rem;
+ background-color: $primary;
+ color: $white !important;
+ font-weight: 600;
+ }
+ }
+
+ // 分页组件第一子项(非上一页)
+ &:first-child:not(.prev-item) {
+ &.active {
+ border-top-left-radius: 1.428rem;
+ border-bottom-left-radius: 1.428rem;
+ .page-link {
+ border-radius: 5rem;
+ }
+ }
+ .page-link {
+ border-top-left-radius: 1.428rem;
+ border-bottom-left-radius: 1.428rem;
+ }
+ }
+
+ // 分页组件最后子项(非下一页)
+ &:last-child:not(.next-item) {
+ &.active {
+ border-top-right-radius: 1.428rem;
+ border-bottom-right-radius: 1.428rem;
+ .page-link {
+ border-radius: 5rem;
+ }
+ }
+ .page-link {
+ border-top-right-radius: 1.428rem;
+ border-bottom-right-radius: 1.428rem;
+ }
+ }
+}
+
+// 分页字号和最小宽度
+.pagination {
+ // 大号分页
+ &.pagination-lg {
+ .page-item {
+ .page-link {
+ font-size: $pagination-font-size-lg;
+ min-width: 2.6rem;
+ }
+ }
+ }
+ // 小号分页
+ &.pagination-sm {
+ .page-item {
+ .page-link {
+ font-size: $pagination-font-size-sm;
+ min-width: 2rem;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_popover.scss b/src/@core/scss/base/bootstrap-extended/_popover.scss
new file mode 100644
index 0000000..de1d51b
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_popover.scss
@@ -0,0 +1,45 @@
+// Popovers 气泡弹窗
+
+.popover {
+ box-shadow: $popover-box-shadow;
+ // 弹窗标题
+ .popover-header {
+ @include font-size(1.07rem);
+ border: 1px solid $popover-header-bg;
+ }
+ // 弹窗主体
+ .popover-body {
+ border: 1px solid $popover-border-color;
+ border-top-color: $popover-bg;
+ border-bottom-left-radius: $popover-border-radius;
+ border-bottom-right-radius: $popover-border-radius;
+ }
+ // 弹窗底部箭头颜色与标题一致
+ &.bs-popover-bottom {
+ .arrow:after {
+ border-bottom-color: $popover-header-bg;
+ }
+ }
+}
+// 箭头边框
+.bs-popover-top {
+ > .arrow {
+ &::after {
+ bottom: $popover-border-width + 1px;
+ }
+ }
+}
+.bs-popover-right {
+ > .arrow {
+ &::after {
+ left: $popover-border-width + 1px;
+ }
+ }
+}
+.bs-popover-left {
+ > .arrow {
+ &::after {
+ right: $popover-border-width + 1px;
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_progress.scss b/src/@core/scss/base/bootstrap-extended/_progress.scss
new file mode 100644
index 0000000..2972ab6
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_progress.scss
@@ -0,0 +1,19 @@
+// ===============================================================================================
+// 文件名:progress.scss
+// 描述:Bootstrap 进度条扩展 SCSS 文件.
+// ---------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+.progress {
+ // 设置进度条堆叠时的边界圆角
+ .progress-bar + .progress-bar:not(:last-child) {
+ border-radius: 0;
+ }
+ .progress-bar:last-child {
+ border-top-right-radius: $progress-border-radius;
+ border-bottom-right-radius: $progress-border-radius;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_reboot.scss b/src/@core/scss/base/bootstrap-extended/_reboot.scss
new file mode 100644
index 0000000..b041ded
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_reboot.scss
@@ -0,0 +1,24 @@
+// ===============================================================================================
+// 文件名:reboot.scss
+// 描述:Bootstrap 特定的加载扩展 SCSS 文件.
+// ---------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+a {
+ &:focus {
+ outline: none;
+ }
+}
+
+a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+
+ @include hover() {
+ color: inherit;
+ text-decoration: none;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_tables.scss b/src/@core/scss/base/bootstrap-extended/_tables.scss
new file mode 100644
index 0000000..ce44a01
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_tables.scss
@@ -0,0 +1,122 @@
+// ================================================================================================
+// 文件名:tables.scss
+// 描述:表格自定义 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 表格空白区域
+.table-white-space {
+ th,
+ td {
+ white-space: nowrap;
+ }
+}
+
+// th, td 填充
+.table {
+ thead,
+ tfoot {
+ th {
+ vertical-align: top;
+ text-transform: uppercase;
+ font-size: $table-th-font-size;
+ letter-spacing: 0.5px;
+ }
+ }
+ th,
+ td {
+ padding: $table-cell-padding 2rem;
+ vertical-align: middle;
+ }
+ &.table-sm {
+ th,
+ td {
+ padding: $table-cell-padding-sm 0.5rem;
+ &:first-child {
+ padding-left: 0.75rem;
+ }
+ }
+ }
+}
+// 如果不使用 table-light 类,则标题颜色也相应改变
+.table:not(.table-dark):not(.table-light) {
+ thead:not(.thead-dark) th,
+ tfoot:not(.thead-dark) th {
+ background-color: $table-head-bg;
+ }
+}
+
+.table-hover {
+ tbody {
+ tr {
+ cursor: pointer;
+ }
+ }
+}
+// 表格悬停动画
+.table-hover-animation {
+ background-color: $body-bg;
+ thead {
+ th {
+ border-bottom: 0;
+ }
+ }
+ th,
+ td {
+ border: 0;
+ }
+ tbody {
+ tr {
+ transition: all 0.25s ease;
+ background-color: $white;
+ &:hover {
+ transform: translateY(-4px);
+ }
+ }
+ }
+}
+
+// 表格圆角
+.card .table {
+ margin-bottom: 0;
+ border-bottom-left-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ tbody {
+ tr:last-child {
+ td:first-child {
+ border-bottom-left-radius: $border-radius;
+ }
+ td:last-child {
+ border-bottom-right-radius: $border-radius;
+ }
+ }
+ }
+}
+
+// 卡片内嵌表格圆角修正
+.card {
+ table {
+ tr[class*='table-']:last-child {
+ td:first-child {
+ border-bottom-left-radius: $border-radius;
+ }
+ td:last-child {
+ border-bottom-right-radius: $border-radius;
+ }
+ }
+ }
+}
+
+// IE 特定样式
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ .table-hover-animation {
+ tr {
+ &:hover {
+ border-bottom-color: $table-border-color;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_toast.scss b/src/@core/scss/base/bootstrap-extended/_toast.scss
new file mode 100644
index 0000000..1e8cee2
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_toast.scss
@@ -0,0 +1,16 @@
+// Toasts 通知
+
+.toast {
+ &.show {
+ z-index: 1030;
+ }
+ .close:focus {
+ outline: none;
+ }
+}
+
+@include media-breakpoint-down(xs) {
+ .toast {
+ left: 1rem;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_type.scss b/src/@core/scss/base/bootstrap-extended/_type.scss
new file mode 100644
index 0000000..ed42737
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_type.scss
@@ -0,0 +1,22 @@
+// ================================================================================================
+// 文件名:type.scss
+// 描述:特定类型的自定义 scss 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 文本标题颜色
+.text-body-heading {
+ color: $headings-color;
+ &:hover {
+ color: inherit !important;
+ }
+}
+// 带链接的文本正文悬停颜色
+.text-body {
+ &[href]:hover {
+ color: $link-hover-color !important;
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_utilities.scss b/src/@core/scss/base/bootstrap-extended/_utilities.scss
new file mode 100644
index 0000000..23b91c2
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_utilities.scss
@@ -0,0 +1,462 @@
+// ================================================================================================
+// 文件名:utilities.scss
+// 描述:定义模板公共类颜色、宽度、位置和背景等样式的 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 定义可变尺寸的混入高度和宽度
+$sizes-px: (
+ // px 像素
+ 50: 50px,
+ 100: 100px,
+ 150: 150px,
+ 200: 200px,
+ 250: 250px,
+ 300: 300px,
+ 350: 350px,
+ 400: 405px,
+ 450: 455px,
+ 500: 500px,
+ 550: 550px,
+ 600: 600px,
+ 650: 650px,
+ 700: 700px,
+ 750: 750px,
+ 800: 800px
+) !default;
+
+$sizes-per: (
+ // % 百分比
+ 5: 5%,
+ 10: 10%,
+ 15: 15%,
+ 20: 20%,
+ 25: 25%,
+ 30: 30%,
+ 35: 35%,
+ 40: 40%,
+ 45: 45%,
+ 50: 50%,
+ 55: 55%,
+ 60: 60%,
+ 65: 65%,
+ 70: 70%,
+ 75: 75%,
+ 80: 80%,
+ 85: 85%,
+ 90: 90%,
+ 95: 95%
+) !default;
+
+/*--------------- 文本 ---------------*/
+
+// 字号 ---------
+
+// 小号
+.font-small-1 {
+ font-size: 0.7rem !important;
+
+ // SVG 羽毛图标默认大小作为 1rem
+ @at-root svg#{&} {
+ height: 0.7rem !important;
+ width: 0.7rem !important;
+ }
+}
+.font-small-2 {
+ font-size: 0.8rem !important;
+ @at-root svg#{&} {
+ height: 0.8rem !important;
+ width: 0.8rem !important;
+ }
+}
+.font-small-3 {
+ font-size: 0.9rem !important;
+ @at-root svg#{&} {
+ height: 0.9rem !important;
+ width: 0.9rem !important;
+ }
+}
+.font-small-4 {
+ font-size: 1rem !important;
+ @at-root svg#{&} {
+ height: 1rem !important;
+ width: 1rem !important;
+ }
+}
+// 中号
+.font-medium-1 {
+ font-size: 1.1rem !important;
+ @at-root svg#{&} {
+ height: 1.1rem !important;
+ width: 1.1rem !important;
+ }
+}
+.font-medium-2 {
+ font-size: 1.2rem !important;
+ @at-root svg#{&} {
+ height: 1.2rem !important;
+ width: 1.2rem !important;
+ }
+}
+.font-medium-3 {
+ font-size: 1.3rem !important;
+ @at-root svg#{&} {
+ height: 1.3rem !important;
+ width: 1.3rem !important;
+ }
+}
+.font-medium-4 {
+ font-size: 1.4rem !important;
+ @at-root svg#{&} {
+ height: 1.4rem !important;
+ width: 1.4rem !important;
+ }
+}
+.font-medium-5 {
+ font-size: 1.5rem !important;
+ @at-root svg#{&} {
+ height: 1.5rem !important;
+ width: 1.5rem !important;
+ }
+}
+// 大号
+.font-large-1 {
+ font-size: 2rem !important;
+ @at-root svg#{&} {
+ height: 2rem !important;
+ width: 2rem !important;
+ }
+}
+.font-large-2 {
+ font-size: 3rem !important;
+ @at-root svg#{&} {
+ height: 3rem !important;
+ width: 3rem !important;
+ }
+}
+.font-large-3 {
+ font-size: 4rem !important;
+ @at-root svg#{&} {
+ height: 4rem !important;
+ width: 4rem !important;
+ }
+}
+.font-large-4 {
+ font-size: 5rem !important;
+ @at-root svg#{&} {
+ height: 5rem !important;
+ width: 5rem !important;
+ }
+}
+.font-large-5 {
+ font-size: 6rem !important;
+ @at-root svg#{&} {
+ height: 6rem !important;
+ width: 6rem !important;
+ }
+}
+
+// 行高 ---------
+
+.line-height-1 {
+ line-height: 1 !important;
+}
+.line-height-condensed {
+ line-height: 1.5 !important;
+}
+.line-height-inherit {
+ line-height: inherit !important;
+}
+
+// 转换 ---------
+
+.rotate-45 {
+ transform: rotate(45deg);
+}
+.rotate-45-inverse {
+ transform: rotate(-45deg);
+}
+.rotate-90 {
+ transform: rotate(90deg);
+}
+.rotate-90-inverse {
+ transform: rotate(-90deg);
+}
+.rotate-180 {
+ transform: rotate(180deg);
+}
+.rotate-180-inverse {
+ transform: rotate(-180deg);
+}
+
+/*--------------- 边框 ---------------*/
+
+// 边框宽度 - 2px
+.border-2 {
+ border-width: 2px !important;
+}
+.border-top-2 {
+ border-top-width: 2px !important;
+}
+.border-bottom-2 {
+ border-bottom-width: 2px !important;
+}
+.border-left-2 {
+ border-left-width: 2px !important;
+}
+.border-right-2 {
+ border-right-width: 2px !important;
+}
+
+// 边框宽度 - 3px
+.border-3 {
+ border-width: 3px !important;
+}
+.border-top-3 {
+ border-top-width: 3px !important;
+}
+.border-bottom-3 {
+ border-bottom-width: 3px !important;
+}
+.border-left-3 {
+ border-left-width: 3px !important;
+}
+.border-right-3 {
+ border-right-width: 3px !important;
+}
+
+// 圆形/方形边框
+.round {
+ @include border-radius(1.5rem);
+}
+.square {
+ @include border-radius(0);
+}
+
+/*--------------- 尺寸 ---------------*/
+
+// 宽/高
+.fit {
+ max-width: 100% !important;
+}
+.half-width {
+ width: 50% !important;
+}
+.full-width {
+ width: 100% !important;
+}
+.full-height {
+ height: 100% !important;
+}
+
+// 定义宽/高为 px
+@each $name, $size in $sizes-px {
+ .height-#{$name} {
+ height: $size !important;
+ }
+
+ .width-#{$name} {
+ width: $size !important;
+ }
+}
+
+// 定义宽/高为 %
+@each $name, $size in $sizes-per {
+ .height-#{$name}-per {
+ height: $size !important;
+ }
+
+ .width-#{$name}-per {
+ width: $size !important;
+ }
+}
+
+/*--------------- 定位 ---------------*/
+
+.position-top-0 {
+ top: 0;
+}
+.position-right-0 {
+ right: 0;
+}
+.position-bottom-0 {
+ bottom: 0;
+}
+.position-left-0 {
+ left: 0;
+}
+
+/*--------------- 溢出 ---------------*/
+
+.overflow-visible {
+ overflow: visible;
+}
+.overflow-scroll {
+ overflow: scroll;
+}
+.overflow-x-scroll {
+ overflow: scroll;
+}
+.overflow-y-scroll {
+ overflow: scroll;
+}
+
+/*--------------- 光标指针 ---------------*/
+
+.cursor-pointer {
+ cursor: pointer;
+}
+.cursor-move {
+ cursor: move;
+}
+.cursor-default {
+ cursor: default;
+}
+.cursor-progress {
+ cursor: progress;
+}
+.cursor-not-allowed {
+ cursor: not-allowed;
+}
+
+/*--------------- 层级 ---------------*/
+
+.zindex-1 {
+ z-index: 1 !important;
+}
+.zindex-2 {
+ z-index: 2 !important;
+}
+.zindex-3 {
+ z-index: 3 !important;
+}
+.zindex-4 {
+ z-index: 4 !important;
+}
+.zindex-0 {
+ z-index: 0 !important;
+}
+.zindex-minus-1 {
+ z-index: -1 !important;
+}
+.zindex-minus-2 {
+ z-index: -2 !important;
+}
+.zindex-minus-3 {
+ z-index: -3 !important;
+}
+.zindex-minus-4 {
+ z-index: -4 !important;
+}
+
+/*--------------- 盒状阴影 ---------------*/
+
+.box-shadow-0 {
+ box-shadow: none !important;
+}
+.box-shadow-1 {
+ box-shadow: 0 2px 5px 0 rgba($black, 0.16), 0 2px 10px 0 rgba($black, 0.12);
+}
+.box-shadow-2 {
+ box-shadow: 0 8px 17px 0 rgba($black, 0.2), 0 6px 20px 0 rgba($black, 0.19);
+}
+.box-shadow-3 {
+ box-shadow: 0 12px 15px 0 rgba($black, 0.24), 0 17px 50px 0 rgba($black, 0.19);
+}
+.box-shadow-4 {
+ box-shadow: 0 16px 28px 0 rgba($black, 0.22), 0 25px 55px 0 rgba($black, 0.21);
+}
+.box-shadow-5 {
+ box-shadow: 0 27px 24px 0 rgba($black, 0.2), 0 40px 77px 0 rgba($black, 0.22);
+}
+.box-shadow-6 {
+ box-shadow: 0 4px 8px 0 rgba($black, 0.12), 0 2px 4px 0 rgba($black, 0.08);
+}
+
+/*--------------- 轮廓 ---------------*/
+
+.outline-none {
+ outline: none !important;
+}
+
+/*--------------- 列表 ---------------*/
+
+.list-style-inside {
+ list-style: inside;
+}
+.list-style-circle {
+ list-style: circle;
+}
+.list-style-square {
+ list-style: square;
+}
+
+/*--------------- 背景图片 ---------------*/
+
+.bg-cover {
+ background-size: cover !important;
+}
+.background-repeat {
+ background-repeat: repeat !important;
+}
+.background-no-repeat {
+ background-repeat: no-repeat !important;
+}
+
+/*--------------- 图标 ---------------*/
+
+.icon-bg-circle {
+ color: $white;
+ padding: 0.5rem;
+ border-radius: 50%;
+}
+.icon-left {
+ margin-right: 0.5rem;
+}
+.icon-right {
+ margin-right: 0.5rem;
+}
+
+/*--------------- 块级元素 ---------------*/
+
+.blockOverlay {
+ z-index: 1050 !important;
+}
+.blockElement,
+.blockPage {
+ z-index: 1051 !important;
+}
+
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+
+a {
+ &:hover {
+ cursor: pointer;
+ }
+}
+
+/*--------------- 表格 ---------------*/
+
+.table-middle {
+ td {
+ vertical-align: middle;
+ }
+}
+
+/*--------------- SVG ---------------*/
+
+.fill-current {
+ fill: currentColor;
+}
+
+/*--------------- 指针事件 ---------------*/
+
+.pointer-events-none {
+ pointer-events: none;
+}
diff --git a/src/@core/scss/base/bootstrap-extended/_variables.scss b/src/@core/scss/base/bootstrap-extended/_variables.scss
new file mode 100644
index 0000000..ef68192
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/_variables.scss
@@ -0,0 +1,467 @@
+// ================================================================================================
+// 文件名:variables.scss
+// 描述: Bootstrap 变量的自定义 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 颜色系统
+
+$white: #fff !default;
+$gray-50: #f6f6f6 !default;
+$gray-100: #babfc7 !default; // $gray-lightest
+$gray-200: #ededed !default; // $gray-lighter
+$gray-300: #dae1e7 !default; // $gray-light
+$gray-400: #636363 !default;
+$gray-500: #adb5bd !default;
+$gray-600: #b8c2cc !default; // $gray
+$gray-700: #4e5154 !default;
+$gray-800: #1e1e1e !default; // $gray-dark
+$gray-900: #2a2e30 !default;
+$black: #22292f !default; // 231f48 22292f
+
+$rexo: #3366CC !default; //$primary
+$green: #28c76f !default; //$success
+$blue: #00cfe8 !default; //$info
+$orange: #ff9f43 !default; //$warning
+$red: #ea5455 !default; //$danger
+
+$primary: $rexo !default;
+$secondary: #82868b !default;
+$info: $blue !default;
+$warning: $orange !default;
+$light: $gray-50 !default;
+$dark: #4b4b4b !default;
+
+// ---------------------------------------------------------------------------------------------------
+// 通过修改以下变量来自定义大多数 Bootstrap 元素的默认样式。可以向 $spacers 添加更多条目来控制所有元素样式。
+// ---------------------------------------------------------------------------------------------------
+
+// 容器最大宽度
+$container-max-widths: (
+ sm: 540px,
+ md: 720px,
+ lg: 960px,
+ xl: 1140px,
+ xxl: 1440px // Custom xxl size
+) !default;
+
+// stylelint-disable
+$spacer: 1rem !default;
+$spacers: () !default;
+// stylelint-disable-next-line scss/dollar-variable-default
+$spacers: map-merge(
+ (
+ 0: 0,
+ 25: (
+ $spacer * 0.25
+ ),
+ 50: (
+ $spacer * 0.5
+ ),
+ 75: (
+ $spacer * 0.75
+ ),
+ 1: (
+ $spacer
+ ),
+ 2: (
+ $spacer * 1.5
+ ),
+ 3: (
+ $spacer * 3
+ ),
+ 4: (
+ $spacer * 3.5
+ ),
+ 5: (
+ $spacer * 4
+ )
+ ),
+ $spacers
+);
+
+// ''元素样式
+$body-bg: #f8f8f8 !default;
+$body-color: #6b727b !default;
+
+
+// 链接元素样式
+$link-color: $primary !default;
+$link-hover-color: darken($link-color, 5%) !default;
+$link-hover-decoration: none !default;
+
+// 设置 Grid 布局网格间距的宽度。
+$grid-gutter-width: 2rem !default;
+
+// 定义常用组件的填充、边框和圆角
+$line-height-lg: 1.25 !default;
+$line-height-sm: 1 !default;
+
+$border-width: 1px !default;
+$border-color: #ebe9f1 !default;
+$border-radius: 0.357rem !default;
+$border-radius-lg: 0.6rem !default;
+$border-radius-sm: 0.25rem !default;
+
+// 阴影
+$box-shadow: 0 4px 24px 0 rgba($black, 0.1) !default;
+
+// 正文、标题等的字体、行高和颜色。
+// stylelint-disable value-keyword-case
+$font-family-sans-serif: 'Montserrat', Helvetica, Arial, sans-serif !default;
+$font-family-monospace: 'Montserrat', Helvetica, Arial, sans-serif !default;
+// stylelint-enable value-keyword-case
+$font-size-base: 1rem !default;
+$font-size-lg: ceil($font-size-base * 1.25) !default;
+$font-size-sm: ceil($font-size-base * 0.85) !default;
+
+$font-weight-normal: 400 !default;
+$font-weight-bold: 500 !default;
+$font-weight-bolder: 600 !default;
+
+$line-height-base: 1.45 !default;
+
+$h1-font-size: $font-size-base * 2 !default;
+$h2-font-size: $font-size-base * 1.714 !default;
+$h3-font-size: $font-size-base * 1.5 !default;
+$h4-font-size: $font-size-base * 1.286 !default;
+$h5-font-size: $font-size-base * 1.07 !default;
+
+$headings-font-family: inherit !default;
+$headings-color: #5e5873 !default;
+
+$display1-weight: $font-weight-normal !default;
+$display2-weight: $font-weight-normal !default;
+$display3-weight: $font-weight-normal !default;
+$display4-weight: $font-weight-normal !default;
+
+$lead-font-size: $font-size-base * 1.14 !default;
+$lead-font-weight: $font-weight-normal !default;
+
+$small-font-size: 0.857rem !default;
+
+$text-muted: #b9b9c3 !default;
+$hr-border-color: $border-color !default;
+
+$blockquote-small-color: $text-muted !default;
+
+// 表格
+$table-cell-padding: 0.72rem !default;
+
+$table-accent-bg: #fafafc !default;
+$table-hover-bg: #f6f6f9 !default;
+
+$table-border-color: $border-color !default;
+
+$table-head-bg: #f2f4f7 !default;
+$table-head-color: $headings-color !default;
+
+$table-dark-bg: $dark !default;
+$table-dark-border-color: #404040 !default;
+
+$table-th-font-size: 0.857rem !default; // 模板 DEMO 自定义
+
+// 按钮
+$btn-padding-y: 0.786rem !default;
+$btn-padding-x: 1.5rem !default;
+$input-btn-padding-y: 0.75rem !default;
+$input-btn-padding-x: 2rem !default;
+
+$input-btn-padding-y-sm: 0.486rem !default;
+$input-btn-padding-x-sm: 1rem !default;
+$input-btn-font-size-sm: $font-size-base * 0.9 !default;
+
+$input-btn-padding-y-lg: 0.8rem !default;
+$input-btn-padding-x-lg: 2rem !default;
+$input-btn-font-size-lg: $font-size-base * 1.25 !default;
+$btn-line-height: 1 !default;
+$btn-border-radius: 0.358rem !default;
+$btn-border-radius-lg: 0.358rem !default;
+$btn-border-radius-sm: 0.358rem !default;
+
+$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, background 0s, border 0s !default;
+
+// 表单
+$custom-control-border-color: #d8d6de;
+$label-margin-bottom: 0.2857rem !default;
+
+$input-padding-y: 0.438rem !default;
+$input-padding-x: 1rem !default;
+$input-font-size: 1rem !default;
+$input-line-height: $line-height-base !default;
+
+$input-padding-y-sm: 0.188rem !default;
+$input-padding-x-sm: 0.857rem !default;
+$input-font-size-sm: 0.857rem !default;
+
+$input-padding-y-lg: 0.75rem !default;
+$input-padding-x-lg: 1.143rem !default;
+$input-font-size-lg: 1.143rem !default;
+
+$input-disabled-bg: #efefef !default;
+
+$input-color: $body-color !default;
+$input-border-color: $custom-control-border-color !default;
+$input-box-shadow: inset 0 1px 1px rgba($black, 0.075) !default;
+
+$input-border-radius: $border-radius !default;
+$input-border-radius-lg: $border-radius !default;
+$input-border-radius-sm: $border-radius !default;
+
+$input-focus-border-color: $primary !default;
+$input-focus-box-shadow: 0 3px 10px 0 rgba($black, 0.1) !default;
+
+$input-placeholder-color: $text-muted !default;
+$input-plaintext-color: $body-color !default;
+
+$input-height: 2.714rem !default;
+$input-height-sm: 2.142rem !default;
+$input-height-lg: 3.2857rem !default;
+
+$input-group-addon-bg: white !default;
+$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, background 0s, border-color 0s !default;
+
+$custom-control-indicator-border-color: $custom-control-border-color;
+
+$custom-checkbox-indicator-border-radius: 3px !default;
+$custom-checkbox-indicator-checked-color: white !default;
+$custom-checkbox-indicator-indeterminate-color: white !default;
+$custom-checkbox-indicator-icon-checked: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 9.5 7.5'%3E%3Cpolyline points='0.75 4.35 4.18 6.75 8.75 0.75' style='fill:none;stroke:%23fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px'/%3E%3C/svg%3E");
+
+$custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='#{$custom-checkbox-indicator-indeterminate-color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-minus'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
+
+$custom-control-indicator-checked-disabled-bg: rgba($primary, 0.65);
+
+$custom-radio-indicator-icon-checked: none;
+
+$custom-file-height-inner: $input-height !default;
+
+$custom-select-indicator-padding: 1rem !default; // 带有背景图像的指示器的额外填充
+$custom-select-disabled-bg: $input-disabled-bg !default;
+$custom-select-bg-size: 10px 10px !default; // 图像尺寸以像素为单位为宜
+$custom-select-indicator-color: $input-border-color !default;
+$custom-select-indicator: url("data:image/svg+xml,") !default;
+
+// $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;
+// $custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;
+
+$custom-select-border-radius: $input-border-radius !default;
+$custom-select-focus-box-shadow: $input-focus-box-shadow !default;
+
+$custom-select-padding-y-sm: $input-padding-y-sm !default;
+$custom-select-padding-x-sm: $input-padding-x-sm !default;
+$custom-select-font-size-sm: $input-font-size-sm !default;
+$custom-select-height-sm: $input-height-sm !default;
+
+$custom-select-padding-y-lg: $input-padding-y-lg !default;
+$custom-select-padding-x-lg: $input-padding-x-lg !default;
+$custom-select-font-size-lg: $input-font-size-lg !default;
+$custom-select-height-lg: $input-height-lg !default;
+
+// 下拉菜单容器和内容
+$dropdown-border-color: rgba($black, 0.05) !default;
+$dropdown-border-radius: 0.358rem !default;
+$dropdown-box-shadow: 0 5px 25px rgba($black, 0.1) !default;
+
+$dropdown-link-color: $body-color !default;
+$dropdown-link-hover-color: $primary !default;
+$dropdown-link-hover-bg: rgba($primary, 0.12) !default;
+
+$dropdown-divider-bg: rgba($black, 0.08) !default;
+$dropdown-font-size: 1rem !default;
+$dropdown-spacer: 0 !default;
+$zindex-dropdown: 10 !default;
+
+$dropdown-box-shadow: 0 5px 25px 0 rgba($black, 0.1) !default;
+
+$dropdown-link-disabled-color: $text-muted !default;
+
+$dropdown-item-padding-y: 0.65rem !default;
+$dropdown-item-padding-x: 1.28rem !default;
+
+$dropdown-header-color: $headings-color !default;
+
+$dropdown_spacing: 0.5rem; // 模板 DEMO 自定义
+
+// 分页
+$pagination-padding-y: 0.5rem !default;
+$pagination-padding-x: 0.85rem !default;
+$pagination-padding-y-lg: 0.5575rem !default;
+$pagination-padding-x-lg: 1rem !default;
+$pagination-padding-y-sm: 0.443rem !default;
+$pagination-padding-x-sm: 0.745rem !default;
+
+$pagination-disabled-color: $text-muted !default;
+
+$pagination-color: $body-color !default;
+$pagination-bg: #f2f4f7 !default;
+
+$pagination-hover-color: $primary !default;
+$pagination-hover-bg: #f2f4f7 !default;
+
+$pagination-active-color: $primary !default;
+
+$pagination-disabled-color: $text-muted !default;
+$pagination-disabled-bg: #f2f4f7 !default;
+
+$pagination-font-size-lg: 1.14rem !default; // 模板 DEMO 自定义
+$pagination-font-size-sm: 0.857rem !default; // 模板 DEMO 自定义
+
+// 卡片
+$card-spacer-y: 1.5rem !default;
+$card-spacer-x: 1.5rem !default;
+$card-border-radius: 0.428rem !default;
+
+// 提示
+$alert-padding-y: 0.71rem !default;
+$alert-padding-x: 1rem !default;
+$alert-border-radius: 0.358rem !default;
+$alert-link-font-weight: 700 !default;
+
+// 列表组
+$list-group-border-radius: 0.358rem !default;
+$list-group-disabled-color: $text-muted !default;
+
+// 导航标签
+$nav-link-padding-y: 0.358rem !default;
+$nav-link-padding-x: 0.5rem !default;
+$nav-link-disabled-color: $text-muted !default;
+
+$nav-tabs-border-width: 0 !default;
+$nav-tabs-border-radius: 0.25 !default;
+$nav-tabs-link-active-color: $primary !default;
+
+$nav-tabs-link-active-bg: transparent !default;
+
+$nav-pills-border-radius: $btn-border-radius !default;
+
+// 浮动副导航栏
+$floating-nav-margin: 1.3rem;
+
+// 文字提示
+$tooltip-bg: #323232 !default;
+$tooltip-padding-y: 0.4rem !default;
+$tooltip-padding-x: 0.775rem !default;
+$tooltip-font-size: 0.857rem !default;
+$tooltip-border-radius: 0.358rem !default;
+$tooltip-opacity: 1 !default;
+$tooltip-max-width: 220px !default;
+
+// 气泡弹窗
+$popover-font-size: 1rem !default;
+$popover-border-width: 0 !default;
+$popover-border-radius: 0.358rem !default;
+$popover-border-color: $border-color !default;
+$popover-box-shadow: 0 0 10px 0 rgba($black, 0.1) !default;
+
+$popover-header-bg: $primary !default;
+$popover-header-color: $white !default;
+$popover-header-padding-y: 0.65rem !default;
+$popover-header-padding-x: 1.21rem !default;
+
+// 消息通知
+$toast-max-width: 380px !default;
+$toast-padding-x: 1.14rem !default;
+$toast-padding-y: 0.15rem !default;
+$toast-font-size: 0.857rem !default;
+$toast-color: $body-color !default;
+$toast-border-width: 0 !default;
+$toast-border-radius: 0.286rem !default;
+$toast-box-shadow: 0 2px 20px 0 rgba($black, 0.08) !default;
+
+$toast-header-color: $body-color !default;
+$toast-header-background-color: $white !default;
+
+// 进度条
+$progress-height: 0.857rem !default;
+$progress-border-radius: 5rem !default;
+$progress-font-size: $font-size-base * 0.857 !default;
+$progress-bg: rgba($primary, 0.12) !default;
+
+// 面包屑
+$breadcrumb-font-size: 1rem !default;
+
+$breadcrumb-padding-y: 0.3rem !default;
+$breadcrumb-item-padding: 0.6rem !default;
+
+$breadcrumb-margin-bottom: 0 !default;
+
+$breadcrumb-bg: transparent !default;
+$breadcrumb-divider-color: $body-color !default;
+$breadcrumb-active-color: $body-color !default;
+
+$breadcrumb-border-radius: 0 !default;
+
+// 轮播图
+$carousel-control-color: $white !default;
+$carousel-control-prev-icon-bg: url('data:image/svg+xml,') !default;
+$carousel-control-next-icon-bg: url('data:image/svg+xml,') !default;
+
+// 徽章
+$badge-font-size: 85% !default;
+$badge-padding-y: 0.3rem !default;
+$badge-padding-x: 0.5rem !default;
+$badge-font-weight: 600 !default;
+$badge-border-radius: 0.358rem !default;
+
+$badge-pill-padding-x: 0.5rem !default;
+
+// 模态弹窗
+$modal-inner-padding: 0.8rem 1.4rem !default;
+
+$modal-footer-border-color: rgba($black, 0.05) !default;
+
+$modal-header-padding-y: 0.8rem !default;
+$modal-header-padding-x: 1.4rem !default;
+$modal-content-border-radius: 0.358rem !default;
+
+$modal-xl: 94% !default;
+$modal-sm: 400px !default;
+
+// 滑入模态
+$modal-slide-in-width-sm: 25rem !default; // 模板 DEMO 自定义
+$modal-slide-in-width: 28rem !default; // 模板 DEMO 自定义
+$modal-slide-in-width-lg: 30rem !default; // 模板 DEMO 自定义
+
+// 关闭图标
+$close-font-size: $font-size-base * 2 !default;
+$close-font-weight: 400 !default;
+$close-color: $headings-color !default;
+
+// 演示代码
+$code-font-size: 90% !default;
+$kbd-bg: #eee !default;
+
+// 开关
+$custom-switch-width: 3rem !default;
+$custom-switch-indicator-border-radius: 1rem !default;
+$custom-switch-indicator-size: 1rem !default;
+
+// SVG 颜色
+$svg-color-light: #626262 !default;
+
+// SVG 图标
+// DEMO 面包屑右箭头专用
+$double-chevron-right: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevrons-right'%3E%3Cpolyline points='13 17 18 12 13 7'%3E%3C/polyline%3E%3Cpolyline points='6 17 11 12 6 7'%3E%3C/polyline%3E%3C/svg%3E";
+
+// 箭头图标
+$chevron-left: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevron-left'%3E%3Cpolyline points='15 18 9 12 15 6'%3E%3C/polyline%3E%3C/svg%3E";
+$chevron-right: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevron-right'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E";
+$chevron-up: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevron-up'%3E%3Cpolyline points='18 15 12 9 6 15'%3E%3C/polyline%3E%3C/svg%3E";
+$chevron-down: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevron-down'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E";
+
+// 其他图标
+$download: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-download'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='7 10 12 15 17 10'%3E%3C/polyline%3E%3Cline x1='12' y1='15' x2='12' y2='3'%3E%3C/line%3E%3C/svg%3E";
+$remove: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E";
+$check: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-check'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E";
+$circle: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-circle'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3C/svg%3E";
+$infoIcon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-info'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12.01' y2='8'%3E%3C/line%3E%3C/svg%3E";
+$warningIcon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-alert-triangle'%3E%3Cpath d='M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z'%3E%3C/path%3E%3Cline x1='12' y1='9' x2='12' y2='13'%3E%3C/line%3E%3Cline x1='12' y1='17' x2='12.01' y2='17'%3E%3C/line%3E%3C/svg%3E";
+$menu: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' stroke='currentColor' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1'%3E%3Cline x1='3' y1='12' x2='21' y2='12'%3E%3C/line%3E%3Cline x1='3' y1='6' x2='21' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='18' x2='21' y2='18'%3E%3C/line%3E%3C/svg%3E";
+
+// 聊天 SVG 背景
+$chat-bg-light: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIzLjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyNjAgMjYwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNjAgMjYwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0UxRTBFOTt9Cjwvc3R5bGU+CjxnPgoJPGcgaWQ9ImktbGlrZS1mb29kIj4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQuNCwxNmMwLjIsMC42LDAuNCwxLjMsMC41LDJoLTMuN2wxLjIsMi4zbDAuNSwwLjlsLTAuMiwwLjFWMjhjMi4yLDEuNywyLjcsNC44LDEsNwoJCQljLTAuOCwxLTEuOSwxLjctMy4yLDEuOVYzN2MtMC45LDMuNS00LjEsNi03LjgsNmgtMjBjLTMuNiwwLTYuOC0yLjUtNy43LTZ2LTAuMWMtMi43LTAuNC00LjYtMy00LjItNS43YzAuMi0xLjMsMC45LTIuNSwxLjktMy4yCgkJCXYtNi44bC0wLjgtMS42bC0wLjQtMC45bDAuOS0wLjRMLTE3LDE4aC0zQy0xNy4yLDUuNi00LjktMi4yLDcuNSwwLjZDMTUuNCwyLjMsMjEuOSw4LjIsMjQuNCwxNnogTS0xMi40LDE4Yy0wLjIsMC0wLjMsMC0wLjQsMC4xCgkJCWwtMy4xLDEuNmwwLjksMS44bDEuMy0wLjdjMC44LTAuNCwxLjgtMC40LDIuNywwbDIuMiwxLjFjMC4zLDAuMSwwLjYsMC4xLDAuOSwwbDIuMi0xLjFjMC44LTAuNCwxLjgtMC40LDIuNywwbDIuMiwxLjEKCQkJYzAuMywwLjEsMC42LDAuMSwwLjksMGwyLjItMS4xYzAuOC0wLjQsMS44LTAuNCwyLjcsMGwyLjIsMS4xQzcuNCwyMiw3LjcsMjIsOCwyMS45bDIuOS0xLjNjMC44LTAuMywxLjctMC4zLDIuNCwwbDIuOSwxLjMKCQkJYzAuMywwLjEsMC42LDAuMSwwLjksMGwzLjEtMS41bC0wLjktMS44bC0xLjQsMC43Yy0wLjgsMC40LTEuNywwLjQtMi42LDAuMWwtMi44LTEuMkMxMi4zLDE4LDEyLjIsMTgsMTIuMSwxOGwwLDAKCQkJYy0wLjEsMC0wLjMsMC0wLjQsMC4xbC0yLjgsMS4yYy0wLjgsMC40LTEuOCwwLjMtMi42LTAuMUw0LDE4LjFDMy45LDE4LDMuNywxOCwzLjYsMThsMCwwYy0wLjIsMC0wLjMsMC0wLjQsMC4xTDEsMTkuMgoJCQljLTAuOCwwLjQtMS44LDAuNC0yLjcsMEwtNCwxOC4xQy00LjEsMTgtNC4zLDE4LTQuNCwxOGwwLDBjLTAuMiwwLTAuMywwLTAuNCwwLjFMLTcsMTkuMmMtMC44LDAuNC0xLjgsMC40LTIuNywwbC0yLjItMS4xCgkJCUMtMTIuMSwxOC0xMi4zLDE4LTEyLjQsMThMLTEyLjQsMThMLTEyLjQsMTh6IE0tMTIuNCwxNmgtNC45Qy0xMy41LDUuMS0xLjUtMC43LDkuNSwzLjJjNiwyLjEsMTAuNyw2LjgsMTIuOCwxMi44aC0yLjFsLTAuMS0wLjEKCQkJTDE5LjksMTZILTEyLjRMLTEyLjQsMTZ6IE0xNy45LDIzLjdsMS40LTAuN2gxLjN2MmgtMzZ2LTEuMWwwLjMtMC4ybDEuNC0wLjdoMi42bDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwbDEuNC0wLjdILTMKCQkJbDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwTDIuMywyM2gyLjZsMS40LDAuN2MwLjcsMC40LDEuNywwLjQsMi41LDBsMS43LTAuN2gzLjJsMS43LDAuN0MxNi4yLDI0LjEsMTcuMSwyNC4xLDE3LjksMjMuN3oKCQkJIE0tMTMuOCwyN2wxNi40LDQuOUwxOC45LDI3SC0xMy44eiBNLTE0LjQsMjloMC4zbDE2LjcsNWwxNi43LTVoMC4zYzEuNywwLDMsMS4zLDMsM3MtMS4zLDMtMywzaC0zNGMtMS43LDAtMy0xLjMtMy0zCgkJCUMtMTcuNCwzMC4zLTE2LjEsMjktMTQuNCwyOXogTS0xMy4xLDM3YzAuOCwyLjQsMy4xLDQsNS43LDRoMjBjMi41LDAsNC44LTEuNiw1LjctNEMxOC4yLDM3LTEzLjEsMzctMTMuMSwzN3oiLz4KCQk8cGF0aCBpZD0icGF0aDZfZmlsbC1jb3B5IiBjbGFzcz0ic3QwIiBkPSJNMjg0LjQsMTZjMC4yLDAuNiwwLjQsMS4zLDAuNSwyaC0zLjdsMS4yLDIuM2wwLjUsMC45bC0wLjIsMC4xVjI4YzIuMiwxLjcsMi43LDQuOCwxLDcKCQkJYy0wLjgsMS0xLjksMS43LTMuMiwxLjlWMzdjLTAuOSwzLjUtNC4xLDYtNy44LDZoLTIwYy0zLjYsMC02LjgtMi41LTcuNy02di0wLjFjLTIuNy0wLjQtNC42LTMtNC4yLTUuN2MwLjItMS4zLDAuOS0yLjUsMS45LTMuMgoJCQl2LTYuOGwtMC44LTEuNmwtMC40LTAuOWwwLjktMC40TDI0MywxOGgtM2MyLjgtMTIuNCwxNS4xLTIwLjIsMjcuNS0xNy40QzI3NS40LDIuMywyODEuOSw4LjIsMjg0LjQsMTZ6IE0yNDcuNSwxOAoJCQljLTAuMiwwLTAuMywwLTAuNCwwLjFsLTMuMSwxLjZsMC45LDEuOGwxLjMtMC43YzAuOC0wLjQsMS44LTAuNCwyLjcsMGwyLjIsMS4xYzAuMywwLjEsMC42LDAuMSwwLjksMGwyLjItMS4xCgkJCWMwLjgtMC40LDEuOC0wLjQsMi43LDBsMi4yLDEuMWMwLjMsMC4xLDAuNiwwLjEsMC45LDBsMi4yLTEuMWMwLjgtMC40LDEuOC0wLjQsMi43LDBsMi4yLDEuMWMwLjMsMC4xLDAuNiwwLjEsMC45LDBsMi45LTEuMwoJCQljMC44LTAuMywxLjctMC4zLDIuNCwwbDIuOSwxLjNjMC4zLDAuMSwwLjYsMC4xLDAuOSwwbDMuMS0xLjVsLTAuOS0xLjhsLTEuNCwwLjdjLTAuOCwwLjQtMS43LDAuNC0yLjYsMC4xbC0yLjgtMS4yCgkJCWMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFsMCwwYy0wLjEsMC0wLjMsMC0wLjQsMC4xbC0yLjgsMS4yYy0wLjgsMC40LTEuOCwwLjMtMi42LTAuMWwtMi4zLTEuMWMtMC4xLTAuMS0wLjMtMC4xLTAuNS0wLjFsMCwwCgkJCWMtMC4yLDAtMC4zLDAtMC40LDAuMWwtMi4yLDEuMWMtMC44LDAuNC0xLjgsMC40LTIuNywwbC0yLjItMS4xYy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMWwwLDBjLTAuMiwwLTAuMywwLTAuNCwwLjFsLTIuMiwxLjEKCQkJYy0wLjgsMC40LTEuOCwwLjQtMi43LDBsLTIuMi0xLjFDMjQ3LjksMTgsMjQ3LjcsMTgsMjQ3LjUsMThMMjQ3LjUsMThMMjQ3LjUsMTh6IE0yNDcuNSwxNmgtNC45YzMuOS0xMC45LDE1LjktMTYuNywyNi44LTEyLjgKCQkJYzYsMi4xLDEwLjcsNi44LDEyLjgsMTIuOGgtMi4xbC0wLjEtMC4xbC0wLjMsMC4xSDI0Ny41TDI0Ny41LDE2eiBNMjc3LjksMjMuN2wxLjQtMC43aDEuM3YyaC0zNnYtMS4xbDAuMy0wLjJsMS40LTAuN2gyLjYKCQkJbDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwbDEuNC0wLjdoMi42bDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwbDEuNC0wLjdoMi42bDEuNCwwLjdjMC44LDAuNCwxLjcsMC40LDIuNiwwLjFsMS43LTAuNwoJCQloMy4ybDEuNywwLjdDMjc2LjIsMjQuMSwyNzcuMSwyNC4xLDI3Ny45LDIzLjdMMjc3LjksMjMuN3ogTTI0Ni4yLDI3bDE2LjQsNC45TDI3OSwyN0gyNDYuMnogTTI0NS41LDI5aDAuM2wxNi43LDVsMTYuNy01aDAuMwoJCQljMS43LDAsMywxLjMsMywzcy0xLjMsMy0zLDNoLTM0Yy0xLjcsMC0zLTEuMy0zLTNTMjQzLjksMjksMjQ1LjUsMjl6IE0yNDYuOSwzN2MwLjgsMi40LDMuMSw0LDUuNiw0aDIwYzIuNSwwLDQuOC0xLjYsNS43LTQKCQkJSDI0Ni45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNTkuNSwyMWMtMS4zLTMuNi00LjctNi04LjUtNmgtNDJjLTMuOCwwLTcuMiwyLjQtOC41LDZjLTMuMywwLjMtNS44LDMuMi01LjUsNi41YzAuMiwyLjksMi42LDUuMiw1LjUsNS41CgkJCWMtMS43LDQuNywwLjgsOS44LDUuNCwxMS41YzEsMC4zLDIsMC41LDMsMC41aDQyYzUsMCw5LTQsOS05YzAtMS0wLjItMi4xLTAuNS0zYzMuMy0wLjMsNS44LTMuMiw1LjUtNi41CgkJCUMxNjQuNywyMy42LDE2Mi40LDIxLjMsMTU5LjUsMjF6IE0xNTEsMTdoLTQyYy0yLjcsMC01LjIsMS42LTYuMyw0aDU0LjdDMTU2LjIsMTguNiwxNTMuNywxNywxNTEsMTd6IE0xNDEuNyw0MwoJCQljMi4xLTEuNywzLjMtNC4zLDMuMy03aC0yYzAsMy45LTMuMSw3LTcsN2gtNC4zYzIuMS0xLjcsMy4zLTQuMywzLjMtN2gtMmMwLDMuOS0zLjEsNy03LDdoLTQuM2MyLjEtMS43LDMuMy00LjMsMy4zLTdoLTIKCQkJYzAsMy45LTMuMSw3LTcsN2gtN2MtMy45LDAtNy0zLjEtNy03czMuMS03LDctN2g0MmMzLjksMCw3LDMuMSw3LDdzLTMuMSw3LTcsN0gxNDEuN3ogTTEwOSwyN2MtMywwLTUuOCwxLjUtNy41LDRIMTAxCgkJCWMtMi4yLDAtNC0xLjgtNC00czEuOC00LDQtNGg1OGMyLjIsMCw0LDEuOCw0LDRzLTEuOCw0LTQsNGgtMC41Yy0xLjctMi41LTQuNS00LTcuNS00SDEwOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzksMTE1YzQuNCwwLDgtMy42LDgtOHMtMy42LTgtOC04cy04LDMuNi04LDhTMzQuNiwxMTUsMzksMTE1eiBNNDUsMTA3YzAsMy4zLTIuNyw2LTYsNnMtNi0yLjctNi02CgkJCXMyLjctNiw2LTZTNDUsMTAzLjcsNDUsMTA3eiBNNDIsNzh2LTJoOHYtNkg0MGMtMi4yLDAtNCwxLjgtNCw0djEwSDIybC0xLjMsNEwyMCw5MGgyLjJsMy44LDQwaDI2bDMuOC00MEg1OGwtMC43LTJMNTYsODRINDJWNzh6CgkJCSBNMzgsNzR2MTBoMlY3NGg4di0yaC04QzM4LjksNzIsMzgsNzIuOSwzOCw3NHogTTQwLDg2aDE0LjZsMC43LDJIMjIuOGwwLjctMkg0MHogTTUzLjgsOTBIMjQuMmwzLjYsMzhoMjIuNEw1My44LDkweiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjksOTJoLTZ2NGgtNnY0aC02djE0aC0zbDAuMiwybDMuOCwzMmgzNmwzLjgtMzJsMC4yLTJoLTN2LTE0aC02di00aC02di00SDEyOXogTTE0NywxMTR2LTEyaC00djRoM3Y4SDE0NwoJCQl6IE0xNDQsMTE0di02aC00djZIMTQ0eiBNMTM4LDEyMHYtMTZoLTR2MTkuMkMxMzUuNiwxMjIuNSwxMzcsMTIxLjQsMTM4LDEyMHogTTEzMiwxMjMuOFYxMDBoLTR2MjMuOAoJCQlDMTI5LjMsMTI0LjEsMTMwLjcsMTI0LjEsMTMyLDEyMy44eiBNMTI2LDEyMy4yVjEwNGgtNHYxNkMxMjMsMTIxLjQsMTI0LjQsMTIyLjUsMTI2LDEyMy4yeiBNMTIwLDExNHYtNmgtNHY2SDEyMHogTTExNCwxMTR2LThoMwoJCQl2LTRoLTR2MTJIMTE0eiBNMTQxLDEwMnYtNGgtNHY0aDN2NGgxVjEwMnogTTEzNSwxMDJ2LThoLTR2NGgzdjRIMTM1eiBNMTI5LDk4di00aC00djhoMXYtNEgxMjl6IE0xMjMsMTAydi00aC00djhoMXYtNEgxMjN6CgkJCSBNMTMwLDEyNmM1LjksMCwxMC45LTQuMiwxMS44LTEwaDcuOWwtMy41LDMwaC0zMi40bC0zLjUtMzBoNy45QzExOS4xLDEyMS44LDEyNC4xLDEyNiwxMzAsMTI2eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMTIsODZ2MmgtNHYtMkgyMTJ6IE0yMTYsODZoLTJ2MmgyVjg2eiBNMTk2LDg2TDE5Niw4NmMtMi43LDAuNy00LjUsMy4zLTMuOSw2YzAuNCwxLjgsMS42LDMuMiwzLjMsMy44CgkJCWwwLjEsMC4ybDEuMSw0LjVjMC4yLDAuOSwxLDEuNSwxLjksMS41bDAsMGw3LDI0LjZjMC4yLDAuOSwxLDEuNCwxLjksMS40aDVjMC45LDAsMS43LTAuNiwxLjktMS40bDctMjQuNmMwLjksMCwxLjctMC42LDEuOS0xLjUKCQkJbDEuMS00LjVsMC4xLTAuMmMyLjYtMC45LDQuMS0zLjcsMy4yLTYuM2MtMC42LTEuNy0yLTMtMy44LTMuM1Y4NmMwLTcuNy02LjMtMTQtMTQtMTRTMTk2LDc4LjMsMTk2LDg2eiBNMjAwLDg2aDZ2MmgtOQoJCQljLTEuNywwLTMsMS4zLTMsM3MxLjMsMywzLDNoMjZjMS43LDAsMy0xLjMsMy0zcy0xLjMtMy0zLTNoLTN2LTJoMmMwLTYuNi01LjQtMTItMTItMTJzLTEyLDUuNC0xMiwxMkgyMDB6IE0xOTguNiwxMDBsLTEtNGgyNC45CgkJCWwtMSw0SDE5OC42eiBNMjA3LjUsMTI2bC02LjktMjRoMTguN2wtNi45LDI0SDIwNy41eiBNMTUwLDI0MmMxMi4yLDAsMjItOS44LDIyLTIycy05LjgtMjItMjItMjJzLTIyLDkuOC0yMiwyMgoJCQlTMTM3LjgsMjQyLDE1MCwyNDJ6IE0xNzQsMjIwYzAsMTMuMy0xMC43LDI0LTI0LDI0cy0yNC0xMC43LTI0LTI0bDAsMGMwLTEzLjMsMTAuNy0yNCwyNC0yNFMxNzQsMjA2LjcsMTc0LDIyMHogTTE0NS42LDIzNy43CgkJCWwyLTAuOWMxLjUtMC42LDMuMi0wLjYsNC43LDBsMiwwLjljMC45LDAuNCwyLDAsMi41LTAuOGwxLjEtMS45YzAuOC0xLjQsMi4yLTIuNCwzLjgtMi44bDIuMS0wLjVjMS0wLjIsMS42LTEuMSwxLjUtMi4xbC0wLjItMi4yCgkJCWMtMC4xLTEuNiwwLjQtMy4yLDEuNC00LjVsMS40LTEuN2MwLjctMC44LDAuNy0xLjksMC0yLjZsLTEuNC0xLjdjLTEuMS0xLjItMS42LTIuOC0xLjQtNC41bDAuMi0yLjJjMC4xLTEtMC42LTEuOS0xLjYtMi4xCgkJCWwtMi4xLTAuNWMtMS42LTAuNC0zLTEuNC0zLjgtMi44bC0xLjEtMS45Yy0wLjUtMC45LTEuNi0xLjItMi41LTAuOGwtMiwwLjljLTEuNSwwLjYtMy4yLDAuNi00LjcsMGwtMi0wLjljLTAuOS0wLjQtMiwwLTIuNSwwLjgKCQkJbC0xLDIuMWMtMC44LDEuNC0yLjIsMi40LTMuOCwyLjhsLTIuMSwwLjVjLTEsMC4yLTEuNiwxLjEtMS41LDIuMWwwLjIsMi4yYzAuMSwxLjYtMC40LDMuMi0xLjQsNC41bC0xLjQsMS43CgkJCWMtMC43LDAuOC0wLjcsMS45LDAsMi42bDEuNCwxLjdjMS4xLDEuMiwxLjYsMi44LDEuNCw0LjVsLTAuMiwyLjJjLTAuMSwxLDAuNiwxLjksMS42LDIuMWwyLjEsMC41YzEuNiwwLjQsMywxLjQsMy44LDIuOGwxLjEsMS45CgkJCUMxNDMuNiwyMzcuOCwxNDQuNywyMzguMSwxNDUuNiwyMzcuN0wxNDUuNiwyMzcuN3ogTTE0OC40LDIzOC43YzEtMC40LDIuMS0wLjQsMy4xLDBsMiwwLjljMS44LDAuOCw0LDAuMSw1LTEuNmwxLjEtMS45CgkJCWMwLjYtMC45LDEuNS0xLjYsMi41LTEuOGwyLjEtMC41YzEuOS0wLjQsMy4zLTIuMywzLjEtNC4ybC0wLjItMi4yYy0wLjEtMS4xLDAuMy0yLjIsMS0zbDEuNC0xLjdjMS4zLTEuNSwxLjMtMy43LDAtNS4ybC0xLjQtMS43CgkJCWMtMC43LTAuOC0xLjEtMS45LTEtM2wwLjItMi4yYzAuMi0yLTEuMS0zLjgtMy4xLTQuMmwtMi4xLTAuNWMtMS4xLTAuMi0yLTAuOS0yLjUtMS44bC0xLjEtMS45Yy0xLTEuNy0zLjItMi40LTUtMS42bC0yLDAuOQoJCQljLTEsMC40LTIuMSwwLjQtMy4xLDBsLTItMC45Yy0xLjgtMC44LTQtMC4xLTUsMS42bC0xLjEsMS45Yy0wLjYsMC45LTEuNSwxLjYtMi41LDEuOGwtMi4xLDAuNWMtMS45LDAuNC0zLjMsMi4zLTMuMSw0LjJsMC4yLDIuMgoJCQljMC4xLDEuMS0wLjMsMi4yLTEsM2wtMS40LDEuN2MtMS4zLDEuNS0xLjMsMy43LDAsNS4ybDEuNCwxLjdjMC43LDAuOCwxLjEsMS45LDEsM2wtMC4yLDIuMmMtMC4yLDIsMS4xLDMuOCwzLjEsNC4ybDIuMSwwLjUKCQkJYzEuMSwwLjIsMiwwLjksMi41LDEuOGwxLjEsMS45YzEsMS43LDMuMiwyLjQsNSwxLjZMMTQ4LjQsMjM4Ljd6IE0xNTIsMjA3YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMQoJCQlTMTUyLDIwNy42LDE1MiwyMDd6IE0xNTgsMjA5YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNTgsMjA5LjYsMTU4LDIwOXogTTE0NywyMTBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMQoJCQlzLTAuNCwxLTEsMVMxNDcsMjEwLjYsMTQ3LDIxMHogTTE0MSwyMTBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxUzE0MSwyMTAuNiwxNDEsMjEweiBNMTQ0LDIwNWMwLTAuNiwwLjQtMSwxLTEKCQkJczEsMC40LDEsMXMtMC40LDEtMSwxUzE0NCwyMDUuNiwxNDQsMjA1eiBNMTM2LDIxM2MwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTM2LDIxMy42LDEzNiwyMTN6IE0xMzksMjE5CgkJCWMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTM5LDIxOS42LDEzOSwyMTl6IE0xMzksMjI1YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxMzksMjI1LjYsMTM5LDIyNXoKCQkJIE0xNDMsMjMyYzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNDMsMjMyLjYsMTQzLDIzMnogTTE0OCwyMzBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxCgkJCVMxNDgsMjMwLjYsMTQ4LDIzMHogTTE1MywyMzRjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxUzE1MywyMzQuNiwxNTMsMjM0eiBNMTU3LDIyOGMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxCgkJCXMtMC40LDEtMSwxUzE1NywyMjguNiwxNTcsMjI4eiBNMTYzLDIyNGMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTYzLDIyNC42LDE2MywyMjR6IE0xNTksMjIxYzAtMC42LDAuNC0xLDEtMQoJCQlzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTU5LDIyMS42LDE1OSwyMjF6IE0xNjMsMjE4YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNjMsMjE4LjYsMTYzLDIxOHogTTE1OCwyMTQKCQkJYzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNTgsMjE0LjYsMTU4LDIxNHogTTEzNCwyMjBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxUzEzNCwyMjAuNiwxMzQsMjIwegoJCQkgTTE1MCwyMjVjMi44LDAsNS0yLjIsNS01cy0yLjItNS01LTVzLTUsMi4yLTUsNVMxNDcuMiwyMjUsMTUwLDIyNXogTTE1NywyMjBjMCwzLjktMy4xLDctNyw3cy03LTMuMS03LTdzMy4xLTcsNy03CgkJCVMxNTcsMjE2LjEsMTU3LDIyMHogTTI0MywxOTFjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgyNDN6IE0yNjIsMjAwYzAtMC42LDAuNC0xLDEtMWgyCgkJCWMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMWgtMkMyNjIuNCwyMDEsMjYyLDIwMC42LDI2MiwyMDB6IE0yNDgsMjA1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTEKCQkJSDI0OHogTTIyMywyMDZjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgyMjN6IE0yMjgsMjEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIKCQkJYzAuNiwwLDEtMC40LDEtMXMtMC40LTEtMS0xSDIyOHogTTIzNywyMTBjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDMjM3LjQsMjExLDIzNywyMTAuNiwyMzcsMjEwegoJCQkgTTI1MiwyMTFjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDMjUyLjQsMjEyLDI1MiwyMTEuNiwyNTIsMjExeiBNMjY0LDIwOWMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyCgkJCWMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgyNjR6IE0yNTMsMTk1YzAtMC42LDAuNC0xLDEtMWgyYzAuNiwwLDEsMC40LDEsMXMtMC40LDEtMSwxaC0yQzI1My40LDE5NiwyNTMsMTk1LjYsMjUzLDE5NXoKCQkJIE0yMzQsMTk1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMjM0eiBNMjQwLDIwMGMwLTAuNiwwLjQtMSwxLTFoMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMQoJCQloLTJDMjQwLjQsMjAxLDI0MCwyMDAuNiwyNDAsMjAweiBNMjE1LDIxNWMwLTAuNSwwLTAuOSwwLTEuNGMtMi41LTEuMS0zLjctNC0yLjYtNi42YzAuMi0wLjUsMC41LTEsMC45LTEuNGMtMC45LTIsMC00LjIsMS45LTUuMgoJCQljLTAuOC0yLjYsMC43LTUuNCwzLjQtNi4ybDAsMGMwLjQtMC41LDAuOS0wLjksMS41LTEuMWMwLjUtMi43LDMuMS00LjUsNS44LTQuMWMwLjcsMC4xLDEuNCwwLjQsMiwwLjhjNS4zLTMuOCwxMS42LTUuOSwxOC4yLTUuOQoJCQljNi44LDAsMTMuMSwyLjIsMTguMiw1LjljMi4zLTEuNiw1LjQtMSw3LDEuM2MwLjQsMC42LDAuNywxLjMsMC44LDJjMC42LDAuMiwxLjEsMC42LDEuNSwxLjFjMi43LDAuOCw0LjIsMy41LDMuNCw2LjJsMCwwCgkJCWMxLjksMSwyLjcsMy4yLDEuOSw1LjJjMS45LDIsMS44LDUuMi0wLjIsN2MtMC40LDAuNC0wLjksMC43LTEuNSwxYzAsMC41LDAsMC45LDAsMS40djFoLTYydi0xSDIxNXogTTIxNS44LDIwNy44CgkJCWMtMC4zLDEuMi0wLjUsMi40LTAuNiwzLjZjLTEuMy0xLTEuNi0yLjktMC42LTQuMmwwLDBDMjE1LDIwNy41LDIxNS40LDIwNy43LDIxNS44LDIwNy44TDIxNS44LDIwNy44eiBNMjE3LjMsMjAzLjIKCQkJYy0wLjQsMC45LTAuNywxLjgtMSwyLjdjLTEtMC40LTEuNi0xLjUtMS4zLTIuNWMwLjItMC41LDAuNi0wLjksMS4xLTEuMkMyMTYuNSwyMDIuNiwyMTYuOSwyMDIuOSwyMTcuMywyMDMuMkwyMTcuMywyMDMuMnoKCQkJIE0yMTkuNiwxOTguN2MtMC41LDAuOS0xLDEuOC0xLjUsMi43Yy0xLjMtMS0xLjUtMi45LTAuNS00LjJjMC4xLTAuMiwwLjMtMC4zLDAuNC0wLjVDMjE4LjMsMTk3LjYsMjE4LjksMTk4LjMsMjE5LjYsMTk4LjcKCQkJTDIxOS42LDE5OC43eiBNMjIwLjgsMTk3YzAuNC0wLjUsMC43LTEsMS4xLTEuNWMtMC4zLTAuNS0wLjktMC43LTEuNC0wLjRzLTAuNywwLjktMC40LDEuNEMyMjAuMywxOTYuNywyMjAuNSwxOTYuOSwyMjAuOCwxOTcKCQkJTDIyMC44LDE5N3ogTTIyNi4xLDE5MS4yYy0xLDAuOS0yLDEuOC0yLjksMi44Yy0wLjMtMC4zLTAuNy0wLjYtMS4xLTAuOGMwLjQtMS42LDIuMS0yLjUsMy43LTIuMQoJCQlDMjI1LjksMTkxLjEsMjI2LDE5MS4yLDIyNi4xLDE5MS4yTDIyNi4xLDE5MS4yeiBNMjY4LjgsMTk0Yy0wLjktMS0xLjktMS45LTIuOS0yLjhjMS41LTAuNiwzLjMsMC4xLDMuOSwxLjcKCQkJYzAsMC4xLDAuMSwwLjIsMC4xLDAuM0MyNjkuNSwxOTMuNCwyNjkuMSwxOTMuNiwyNjguOCwxOTRMMjY4LjgsMTk0eiBNMjcwLjEsMTk1LjVjMC40LDAuNSwwLjgsMSwxLjEsMS40CgkJCWMwLjUtMC4xLDAuOS0wLjcsMC44LTEuMnMtMC43LTAuOS0xLjItMC44QzI3MC41LDE5NS4xLDI3MC4zLDE5NS4zLDI3MC4xLDE5NS41eiBNMjczLjksMjAxLjRjLTAuNS0wLjktMS0xLjgtMS41LTIuNwoJCQljMC44LTAuNCwxLjQtMS4xLDEuNi0yYzEuMywxLjEsMS40LDMsMC40LDQuMkMyNzQuMiwyMDEuMSwyNzQsMjAxLjIsMjczLjksMjAxLjR6IE0yNzUuNiwyMDUuOWMtMC4zLTAuOS0wLjYtMS44LTEtMi43CgkJCWMwLjQtMC4zLDAuOC0wLjYsMS4yLTFjMSwwLjUsMS40LDEuNywxLDIuN0MyNzYuNiwyMDUuMywyNzYuMiwyMDUuNywyNzUuNiwyMDUuOXogTTI3Ni44LDIxMS40Yy0wLjEtMS4yLTAuNC0yLjQtMC42LTMuNgoJCQljMC41LTAuMSwwLjktMC40LDEuMi0wLjZDMjc4LjQsMjA4LjUsMjc4LjEsMjEwLjQsMjc2LjgsMjExLjRMMjc2LjgsMjExLjRMMjc2LjgsMjExLjR6IE0yNzUsMjE0Yy0wLjUtMTYtMTMuOS0yOC42LTI5LjktMjguMQoJCQljLTE1LjMsMC41LTI3LjYsMTIuOC0yOC4xLDI4LjFIMjc1TDI3NSwyMTR6IE03Mi4zLDE5OC4xYy0wLjItMC4zLTAuMy0wLjctMC4zLTEuMXYtMTJoLTJ2MTJjMCwyLjIsMS44LDQsNCw0CgkJCWMxLjIsMCwyLjMtMC41LDMuMS0xLjRjMC42LTAuNywwLjktMS42LDAuOS0yLjV2LTEyaC0ydjEyYzAsMS4xLTAuOSwyLTIsMmwwLDBDNzMuMywxOTksNzIuNywxOTguNyw3Mi4zLDE5OC4xeiBNNzUsMTc2CgkJCWMwLjQsMCwwLjcsMCwxLjEtMC4xYzAuNSwyLjIsMi42LDMuNSw0LjgsM2MwLjUtMC4xLDEtMC4zLDEuNC0wLjZjMS4xLDIuMSwxLjcsNC40LDEuNyw2Ljd2MjRjMCwzLjMtMi43LDYtNiw2aC0zdjkKCQkJYzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01di05aC0zYy0zLjMsMC02LTIuNy02LTZ2LTI0YzAtNy43LDYuMy0xNCwxNC0xNEM3MCwxNzMuOCw3Mi4yLDE3Niw3NSwxNzZ6IE01OCwxOTF2MTIKCQkJYzAsMC44LDAuNSwxLjUsMS4yLDEuOGMwLjksMC40LDEuOSwwLjEsMi40LTAuN2MwLjItMC4zLDAuMy0wLjcsMC4zLTEuMXYtMTJoMnYxMmMwLDIuMi0xLjcsNC0zLjksNGMtMC41LDAtMS0wLjEtMS40LTAuMgoJCQljLTAuMi0wLjEtMC40LTAuMi0wLjctMC4zdjIuNWMwLDIuMiwxLjgsNCw0LDRoMTZjMi4yLDAsNC0xLjgsNC00di0yNGMwLTEuNS0wLjItMi45LTAuNy00LjJjLTAuNCwwLjEtMC45LDAuMi0xLjMsMC4yCgkJCWMtMi4xLDAtNC4xLTEuMS01LjItM2MtMy0wLjEtNS42LTItNi41LTQuOUM2Mi40LDE3NCw1OCwxNzksNTgsMTg1VjE5MXogTTY3LDIxNXY5YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTlINjd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xNywxOTFjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgtMTd6IE0yLDIwMGMwLTAuNiwwLjQtMSwxLTFoMgoJCQljMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIM0MyLjQsMjAxLDIsMjAwLjYsMiwyMDB6IE0tMTIsMjA1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFILTEyegoJCQkgTS0zNywyMDZjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgtMzd6IE0tMzIsMjEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xCgkJCXMtMC40LTEtMS0xSC0zMnogTS0yMywyMTBjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDLTIyLjYsMjExLTIzLDIxMC42LTIzLDIxMHogTS04LDIxMWMwLTAuNiwwLjQtMSwxLTEKCQkJaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDLTcuNiwyMTItOCwyMTEuNi04LDIxMXogTTQsMjA5Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFINHoKCQkJIE0tNywxOTVjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDLTYuNiwxOTYtNywxOTUuNi03LDE5NXogTS0yNiwxOTVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMgoJCQljMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFILTI2eiBNLTIwLDIwMGMwLTAuNiwwLjQtMSwxLTFoMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMWgtMkMtMTkuNiwyMDEtMjAsMjAwLjYtMjAsMjAweiBNLTQ1LDIxNQoJCQljMC0wLjUsMC0wLjksMC0xLjRjLTIuNS0xLjEtMy43LTQtMi42LTYuNmMwLjItMC41LDAuNS0xLDAuOS0xLjRjLTAuOS0yLDAtNC4yLDEuOS01LjJjLTAuOC0yLjYsMC43LTUuNCwzLjQtNi4ybDAsMAoJCQljMC40LTAuNSwwLjktMC45LDEuNS0xLjFjMC41LTIuNywzLjEtNC41LDUuOC00LjFjMC43LDAuMSwxLjQsMC40LDIsMC44YzUuMy0zLjgsMTEuNi01LjksMTguMi01LjljNi44LDAsMTMuMSwyLjIsMTguMiw1LjkKCQkJYzIuMy0xLjYsNS40LTEsNywxLjNjMC40LDAuNiwwLjcsMS4zLDAuOCwyYzAuNiwwLjIsMS4xLDAuNiwxLjUsMS4xYzIuNywwLjgsNC4yLDMuNSwzLjQsNi4ybDAsMGMxLjksMSwyLjcsMy4yLDEuOSw1LjIKCQkJYzEuOSwyLDEuOCw1LjItMC4yLDdjLTAuNCwwLjQtMC45LDAuNy0xLjUsMWMwLDAuNSwwLDAuOSwwLDEuNHYxaC02MnYtMUgtNDV6IE0tNDQuMiwyMDcuOGMtMC4zLDEuMi0wLjUsMi40LTAuNiwzLjYKCQkJYy0xLjMtMS0xLjYtMi45LTAuNi00LjJsMCwwQy00NSwyMDcuNS00NC42LDIwNy43LTQ0LjIsMjA3LjhMLTQ0LjIsMjA3Ljh6IE0tNDIuNywyMDMuMmMtMC40LDAuOS0wLjcsMS44LTEsMi43CgkJCWMtMS0wLjQtMS42LTEuNS0xLjMtMi41YzAuMi0wLjUsMC42LTAuOSwxLjEtMS4yQy00My41LDIwMi42LTQzLjEsMjAyLjktNDIuNywyMDMuMkwtNDIuNywyMDMuMnogTS00MC40LDE5OC43CgkJCWMtMC41LDAuOS0xLDEuOC0xLjUsMi43Yy0xLjMtMS0xLjUtMi45LTAuNS00LjJjMC4xLTAuMiwwLjMtMC4zLDAuNC0wLjVDLTQxLjcsMTk3LjYtNDEuMSwxOTguMy00MC40LDE5OC43eiBNLTM5LjIsMTk3CgkJCWMwLjMtMC41LDAuNy0xLDEuMS0xLjVjLTAuMy0wLjUtMC45LTAuNy0xLjQtMC40cy0wLjcsMC45LTAuNCwxLjRDLTM5LjcsMTk2LjctMzkuNSwxOTYuOS0zOS4yLDE5N0wtMzkuMiwxOTd6IE0tMzMuOSwxOTEuMgoJCQljLTEsMC45LTIsMS44LTIuOSwyLjhjLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44YzAuNC0xLjYsMi4xLTIuNSwzLjctMi4xQy0zNC4xLDE5MS4xLTM0LDE5MS4yLTMzLjksMTkxLjJMLTMzLjksMTkxLjJ6IE04LjgsMTk0CgkJCWMtMC45LTEtMS45LTEuOS0yLjktMi44YzEuNS0wLjYsMy4zLDAuMSwzLjksMS43YzAsMC4xLDAuMSwwLjIsMC4xLDAuM0M5LjUsMTkzLjQsOS4xLDE5My42LDguOCwxOTRMOC44LDE5NHogTTEwLjEsMTk1LjUKCQkJYzAuNCwwLjUsMC44LDEsMS4xLDEuNGMwLjUtMC4xLDAuOS0wLjcsMC44LTEuMmMtMC4xLTAuNS0wLjctMC45LTEuMi0wLjhDMTAuNSwxOTUuMSwxMC4zLDE5NS4zLDEwLjEsMTk1LjV6IE0xMy45LDIwMS40CgkJCWMtMC41LTAuOS0wLjktMS44LTEuNS0yLjdjMC44LTAuNCwxLjQtMS4xLDEuNi0yYzEuMywxLjEsMS40LDMsMC40LDQuMkMxNC4yLDIwMS4xLDE0LDIwMS4yLDEzLjksMjAxLjR6IE0xNS43LDIwNS45CgkJCWMtMC4zLTAuOS0wLjYtMS44LTEtMi43YzAuNC0wLjMsMC44LTAuNiwxLjItMWMxLDAuNSwxLjQsMS43LDEsMi43QzE2LjYsMjA1LjMsMTYuMiwyMDUuNywxNS43LDIwNS45eiBNMTYuOCwyMTEuNAoJCQljLTAuMS0xLjItMC40LTIuNC0wLjYtMy42YzAuNS0wLjEsMC45LTAuNCwxLjItMC42QzE4LjQsMjA4LjUsMTguMSwyMTAuNCwxNi44LDIxMS40TDE2LjgsMjExLjRMMTYuOCwyMTEuNHogTTE1LDIxNAoJCQljLTAuNS0xNi0xMy45LTI4LjYtMjkuOS0yOC4xYy0xNS4zLDAuNS0yNy42LDEyLjgtMjguMSwyOC4xSDE1TDE1LDIxNHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K";
+$chat-bg-dark: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyNjAgMjYwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNjAgMjYwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6IzE3MUEyNDt9Cjwvc3R5bGU+CjxnPgoJPGcgaWQ9ImktbGlrZS1mb29kIj4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQuNCwxNmMwLjIsMC42LDAuNCwxLjMsMC41LDJoLTMuN2wxLjIsMi4zbDAuNSwwLjlsLTAuMiwwLjFWMjhjMi4yLDEuNywyLjcsNC44LDEsNwoJCQljLTAuOCwxLTEuOSwxLjctMy4yLDEuOVYzN2MtMC45LDMuNS00LjEsNi03LjgsNmgtMjBjLTMuNiwwLTYuOC0yLjUtNy43LTZ2LTAuMWMtMi43LTAuNC00LjYtMy00LjItNS43YzAuMi0xLjMsMC45LTIuNSwxLjktMy4yCgkJCXYtNi44bC0wLjgtMS42bC0wLjQtMC45bDAuOS0wLjRMLTE3LDE4aC0zQy0xNy4yLDUuNi00LjktMi4yLDcuNSwwLjZDMTUuNCwyLjMsMjEuOSw4LjIsMjQuNCwxNnogTS0xMi40LDE4Yy0wLjIsMC0wLjMsMC0wLjQsMC4xCgkJCWwtMy4xLDEuNmwwLjksMS44bDEuMy0wLjdjMC44LTAuNCwxLjgtMC40LDIuNywwbDIuMiwxLjFjMC4zLDAuMSwwLjYsMC4xLDAuOSwwbDIuMi0xLjFjMC44LTAuNCwxLjgtMC40LDIuNywwbDIuMiwxLjEKCQkJYzAuMywwLjEsMC42LDAuMSwwLjksMGwyLjItMS4xYzAuOC0wLjQsMS44LTAuNCwyLjcsMGwyLjIsMS4xQzcuNCwyMiw3LjcsMjIsOCwyMS45bDIuOS0xLjNjMC44LTAuMywxLjctMC4zLDIuNCwwbDIuOSwxLjMKCQkJYzAuMywwLjEsMC42LDAuMSwwLjksMGwzLjEtMS41bC0wLjktMS44bC0xLjQsMC43Yy0wLjgsMC40LTEuNywwLjQtMi42LDAuMWwtMi44LTEuMkMxMi4zLDE4LDEyLjIsMTgsMTIuMSwxOGwwLDAKCQkJYy0wLjEsMC0wLjMsMC0wLjQsMC4xbC0yLjgsMS4yYy0wLjgsMC40LTEuOCwwLjMtMi42LTAuMUw0LDE4LjFDMy45LDE4LDMuNywxOCwzLjYsMThsMCwwYy0wLjIsMC0wLjMsMC0wLjQsMC4xTDEsMTkuMgoJCQljLTAuOCwwLjQtMS44LDAuNC0yLjcsMEwtNCwxOC4xQy00LjEsMTgtNC4zLDE4LTQuNCwxOGwwLDBjLTAuMiwwLTAuMywwLTAuNCwwLjFMLTcsMTkuMmMtMC44LDAuNC0xLjgsMC40LTIuNywwbC0yLjItMS4xCgkJCUMtMTIuMSwxOC0xMi4zLDE4LTEyLjQsMThMLTEyLjQsMThMLTEyLjQsMTh6IE0tMTIuNCwxNmgtNC45Qy0xMy41LDUuMS0xLjUtMC43LDkuNSwzLjJjNiwyLjEsMTAuNyw2LjgsMTIuOCwxMi44aC0yLjFsLTAuMS0wLjEKCQkJTDE5LjksMTZILTEyLjRMLTEyLjQsMTZ6IE0xNy45LDIzLjdsMS40LTAuN2gxLjN2MmgtMzZ2LTEuMWwwLjMtMC4ybDEuNC0wLjdoMi42bDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwbDEuNC0wLjdILTMKCQkJbDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwTDIuMywyM2gyLjZsMS40LDAuN2MwLjcsMC40LDEuNywwLjQsMi41LDBsMS43LTAuN2gzLjJsMS43LDAuN0MxNi4yLDI0LjEsMTcuMSwyNC4xLDE3LjksMjMuN3oKCQkJIE0tMTMuOCwyN2wxNi40LDQuOUwxOC45LDI3SC0xMy44eiBNLTE0LjQsMjloMC4zbDE2LjcsNWwxNi43LTVoMC4zYzEuNywwLDMsMS4zLDMsM3MtMS4zLDMtMywzaC0zNGMtMS43LDAtMy0xLjMtMy0zCgkJCUMtMTcuNCwzMC4zLTE2LjEsMjktMTQuNCwyOXogTS0xMy4xLDM3YzAuOCwyLjQsMy4xLDQsNS43LDRoMjBjMi41LDAsNC44LTEuNiw1LjctNEMxOC4yLDM3LTEzLjEsMzctMTMuMSwzN3oiLz4KCQk8cGF0aCBpZD0icGF0aDZfZmlsbC1jb3B5IiBjbGFzcz0ic3QwIiBkPSJNMjg0LjQsMTZjMC4yLDAuNiwwLjQsMS4zLDAuNSwyaC0zLjdsMS4yLDIuM2wwLjUsMC45bC0wLjIsMC4xVjI4YzIuMiwxLjcsMi43LDQuOCwxLDcKCQkJYy0wLjgsMS0xLjksMS43LTMuMiwxLjlWMzdjLTAuOSwzLjUtNC4xLDYtNy44LDZoLTIwYy0zLjYsMC02LjgtMi41LTcuNy02di0wLjFjLTIuNy0wLjQtNC42LTMtNC4yLTUuN2MwLjItMS4zLDAuOS0yLjUsMS45LTMuMgoJCQl2LTYuOGwtMC44LTEuNmwtMC40LTAuOWwwLjktMC40TDI0MywxOGgtM2MyLjgtMTIuNCwxNS4xLTIwLjIsMjcuNS0xNy40QzI3NS40LDIuMywyODEuOSw4LjIsMjg0LjQsMTZ6IE0yNDcuNSwxOAoJCQljLTAuMiwwLTAuMywwLTAuNCwwLjFsLTMuMSwxLjZsMC45LDEuOGwxLjMtMC43YzAuOC0wLjQsMS44LTAuNCwyLjcsMGwyLjIsMS4xYzAuMywwLjEsMC42LDAuMSwwLjksMGwyLjItMS4xCgkJCWMwLjgtMC40LDEuOC0wLjQsMi43LDBsMi4yLDEuMWMwLjMsMC4xLDAuNiwwLjEsMC45LDBsMi4yLTEuMWMwLjgtMC40LDEuOC0wLjQsMi43LDBsMi4yLDEuMWMwLjMsMC4xLDAuNiwwLjEsMC45LDBsMi45LTEuMwoJCQljMC44LTAuMywxLjctMC4zLDIuNCwwbDIuOSwxLjNjMC4zLDAuMSwwLjYsMC4xLDAuOSwwbDMuMS0xLjVsLTAuOS0xLjhsLTEuNCwwLjdjLTAuOCwwLjQtMS43LDAuNC0yLjYsMC4xbC0yLjgtMS4yCgkJCWMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFsMCwwYy0wLjEsMC0wLjMsMC0wLjQsMC4xbC0yLjgsMS4yYy0wLjgsMC40LTEuOCwwLjMtMi42LTAuMWwtMi4zLTEuMWMtMC4xLTAuMS0wLjMtMC4xLTAuNS0wLjFsMCwwCgkJCWMtMC4yLDAtMC4zLDAtMC40LDAuMWwtMi4yLDEuMWMtMC44LDAuNC0xLjgsMC40LTIuNywwbC0yLjItMS4xYy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMWwwLDBjLTAuMiwwLTAuMywwLTAuNCwwLjFsLTIuMiwxLjEKCQkJYy0wLjgsMC40LTEuOCwwLjQtMi43LDBsLTIuMi0xLjFDMjQ3LjksMTgsMjQ3LjcsMTgsMjQ3LjUsMThMMjQ3LjUsMThMMjQ3LjUsMTh6IE0yNDcuNSwxNmgtNC45YzMuOS0xMC45LDE1LjktMTYuNywyNi44LTEyLjgKCQkJYzYsMi4xLDEwLjcsNi44LDEyLjgsMTIuOGgtMi4xbC0wLjEtMC4xbC0wLjMsMC4xSDI0Ny41TDI0Ny41LDE2eiBNMjc3LjksMjMuN2wxLjQtMC43aDEuM3YyaC0zNnYtMS4xbDAuMy0wLjJsMS40LTAuN2gyLjYKCQkJbDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwbDEuNC0wLjdoMi42bDEuNCwwLjdjMC44LDAuNCwxLjgsMC40LDIuNywwbDEuNC0wLjdoMi42bDEuNCwwLjdjMC44LDAuNCwxLjcsMC40LDIuNiwwLjFsMS43LTAuNwoJCQloMy4ybDEuNywwLjdDMjc2LjIsMjQuMSwyNzcuMSwyNC4xLDI3Ny45LDIzLjdMMjc3LjksMjMuN3ogTTI0Ni4yLDI3bDE2LjQsNC45TDI3OSwyN0gyNDYuMnogTTI0NS41LDI5aDAuM2wxNi43LDVsMTYuNy01aDAuMwoJCQljMS43LDAsMywxLjMsMywzcy0xLjMsMy0zLDNoLTM0Yy0xLjcsMC0zLTEuMy0zLTNTMjQzLjksMjksMjQ1LjUsMjl6IE0yNDYuOSwzN2MwLjgsMi40LDMuMSw0LDUuNiw0aDIwYzIuNSwwLDQuOC0xLjYsNS43LTQKCQkJSDI0Ni45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNTkuNSwyMWMtMS4zLTMuNi00LjctNi04LjUtNmgtNDJjLTMuOCwwLTcuMiwyLjQtOC41LDZjLTMuMywwLjMtNS44LDMuMi01LjUsNi41YzAuMiwyLjksMi42LDUuMiw1LjUsNS41CgkJCWMtMS43LDQuNywwLjgsOS44LDUuNCwxMS41YzEsMC4zLDIsMC41LDMsMC41aDQyYzUsMCw5LTQsOS05YzAtMS0wLjItMi4xLTAuNS0zYzMuMy0wLjMsNS44LTMuMiw1LjUtNi41CgkJCUMxNjQuNywyMy42LDE2Mi40LDIxLjMsMTU5LjUsMjF6IE0xNTEsMTdoLTQyYy0yLjcsMC01LjIsMS42LTYuMyw0aDU0LjdDMTU2LjIsMTguNiwxNTMuNywxNywxNTEsMTd6IE0xNDEuNyw0MwoJCQljMi4xLTEuNywzLjMtNC4zLDMuMy03aC0yYzAsMy45LTMuMSw3LTcsN2gtNC4zYzIuMS0xLjcsMy4zLTQuMywzLjMtN2gtMmMwLDMuOS0zLjEsNy03LDdoLTQuM2MyLjEtMS43LDMuMy00LjMsMy4zLTdoLTIKCQkJYzAsMy45LTMuMSw3LTcsN2gtN2MtMy45LDAtNy0zLjEtNy03czMuMS03LDctN2g0MmMzLjksMCw3LDMuMSw3LDdzLTMuMSw3LTcsN0gxNDEuN3ogTTEwOSwyN2MtMywwLTUuOCwxLjUtNy41LDRIMTAxCgkJCWMtMi4yLDAtNC0xLjgtNC00czEuOC00LDQtNGg1OGMyLjIsMCw0LDEuOCw0LDRzLTEuOCw0LTQsNGgtMC41Yy0xLjctMi41LTQuNS00LTcuNS00SDEwOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzksMTE1YzQuNCwwLDgtMy42LDgtOHMtMy42LTgtOC04cy04LDMuNi04LDhTMzQuNiwxMTUsMzksMTE1eiBNNDUsMTA3YzAsMy4zLTIuNyw2LTYsNnMtNi0yLjctNi02CgkJCXMyLjctNiw2LTZTNDUsMTAzLjcsNDUsMTA3eiBNNDIsNzh2LTJoOHYtNkg0MGMtMi4yLDAtNCwxLjgtNCw0djEwSDIybC0xLjMsNEwyMCw5MGgyLjJsMy44LDQwaDI2bDMuOC00MEg1OGwtMC43LTJMNTYsODRINDJWNzh6CgkJCSBNMzgsNzR2MTBoMlY3NGg4di0yaC04QzM4LjksNzIsMzgsNzIuOSwzOCw3NHogTTQwLDg2aDE0LjZsMC43LDJIMjIuOGwwLjctMkg0MHogTTUzLjgsOTBIMjQuMmwzLjYsMzhoMjIuNEw1My44LDkweiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjksOTJoLTZ2NGgtNnY0aC02djE0aC0zbDAuMiwybDMuOCwzMmgzNmwzLjgtMzJsMC4yLTJoLTN2LTE0aC02di00aC02di00SDEyOXogTTE0NywxMTR2LTEyaC00djRoM3Y4SDE0NwoJCQl6IE0xNDQsMTE0di02aC00djZIMTQ0eiBNMTM4LDEyMHYtMTZoLTR2MTkuMkMxMzUuNiwxMjIuNSwxMzcsMTIxLjQsMTM4LDEyMHogTTEzMiwxMjMuOFYxMDBoLTR2MjMuOAoJCQlDMTI5LjMsMTI0LjEsMTMwLjcsMTI0LjEsMTMyLDEyMy44eiBNMTI2LDEyMy4yVjEwNGgtNHYxNkMxMjMsMTIxLjQsMTI0LjQsMTIyLjUsMTI2LDEyMy4yeiBNMTIwLDExNHYtNmgtNHY2SDEyMHogTTExNCwxMTR2LThoMwoJCQl2LTRoLTR2MTJIMTE0eiBNMTQxLDEwMnYtNGgtNHY0aDN2NGgxVjEwMnogTTEzNSwxMDJ2LThoLTR2NGgzdjRIMTM1eiBNMTI5LDk4di00aC00djhoMXYtNEgxMjl6IE0xMjMsMTAydi00aC00djhoMXYtNEgxMjN6CgkJCSBNMTMwLDEyNmM1LjksMCwxMC45LTQuMiwxMS44LTEwaDcuOWwtMy41LDMwaC0zMi40bC0zLjUtMzBoNy45QzExOS4xLDEyMS44LDEyNC4xLDEyNiwxMzAsMTI2eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMTIsODZ2MmgtNHYtMkgyMTJ6IE0yMTYsODZoLTJ2MmgyVjg2eiBNMTk2LDg2TDE5Niw4NmMtMi43LDAuNy00LjUsMy4zLTMuOSw2YzAuNCwxLjgsMS42LDMuMiwzLjMsMy44CgkJCWwwLjEsMC4ybDEuMSw0LjVjMC4yLDAuOSwxLDEuNSwxLjksMS41bDAsMGw3LDI0LjZjMC4yLDAuOSwxLDEuNCwxLjksMS40aDVjMC45LDAsMS43LTAuNiwxLjktMS40bDctMjQuNmMwLjksMCwxLjctMC42LDEuOS0xLjUKCQkJbDEuMS00LjVsMC4xLTAuMmMyLjYtMC45LDQuMS0zLjcsMy4yLTYuM2MtMC42LTEuNy0yLTMtMy44LTMuM1Y4NmMwLTcuNy02LjMtMTQtMTQtMTRTMTk2LDc4LjMsMTk2LDg2eiBNMjAwLDg2aDZ2MmgtOQoJCQljLTEuNywwLTMsMS4zLTMsM3MxLjMsMywzLDNoMjZjMS43LDAsMy0xLjMsMy0zcy0xLjMtMy0zLTNoLTN2LTJoMmMwLTYuNi01LjQtMTItMTItMTJzLTEyLDUuNC0xMiwxMkgyMDB6IE0xOTguNiwxMDBsLTEtNGgyNC45CgkJCWwtMSw0SDE5OC42eiBNMjA3LjUsMTI2bC02LjktMjRoMTguN2wtNi45LDI0SDIwNy41eiBNMTUwLDI0MmMxMi4yLDAsMjItOS44LDIyLTIycy05LjgtMjItMjItMjJzLTIyLDkuOC0yMiwyMgoJCQlTMTM3LjgsMjQyLDE1MCwyNDJ6IE0xNzQsMjIwYzAsMTMuMy0xMC43LDI0LTI0LDI0cy0yNC0xMC43LTI0LTI0bDAsMGMwLTEzLjMsMTAuNy0yNCwyNC0yNFMxNzQsMjA2LjcsMTc0LDIyMHogTTE0NS42LDIzNy43CgkJCWwyLTAuOWMxLjUtMC42LDMuMi0wLjYsNC43LDBsMiwwLjljMC45LDAuNCwyLDAsMi41LTAuOGwxLjEtMS45YzAuOC0xLjQsMi4yLTIuNCwzLjgtMi44bDIuMS0wLjVjMS0wLjIsMS42LTEuMSwxLjUtMi4xbC0wLjItMi4yCgkJCWMtMC4xLTEuNiwwLjQtMy4yLDEuNC00LjVsMS40LTEuN2MwLjctMC44LDAuNy0xLjksMC0yLjZsLTEuNC0xLjdjLTEuMS0xLjItMS42LTIuOC0xLjQtNC41bDAuMi0yLjJjMC4xLTEtMC42LTEuOS0xLjYtMi4xCgkJCWwtMi4xLTAuNWMtMS42LTAuNC0zLTEuNC0zLjgtMi44bC0xLjEtMS45Yy0wLjUtMC45LTEuNi0xLjItMi41LTAuOGwtMiwwLjljLTEuNSwwLjYtMy4yLDAuNi00LjcsMGwtMi0wLjljLTAuOS0wLjQtMiwwLTIuNSwwLjgKCQkJbC0xLDIuMWMtMC44LDEuNC0yLjIsMi40LTMuOCwyLjhsLTIuMSwwLjVjLTEsMC4yLTEuNiwxLjEtMS41LDIuMWwwLjIsMi4yYzAuMSwxLjYtMC40LDMuMi0xLjQsNC41bC0xLjQsMS43CgkJCWMtMC43LDAuOC0wLjcsMS45LDAsMi42bDEuNCwxLjdjMS4xLDEuMiwxLjYsMi44LDEuNCw0LjVsLTAuMiwyLjJjLTAuMSwxLDAuNiwxLjksMS42LDIuMWwyLjEsMC41YzEuNiwwLjQsMywxLjQsMy44LDIuOGwxLjEsMS45CgkJCUMxNDMuNiwyMzcuOCwxNDQuNywyMzguMSwxNDUuNiwyMzcuN0wxNDUuNiwyMzcuN3ogTTE0OC40LDIzOC43YzEtMC40LDIuMS0wLjQsMy4xLDBsMiwwLjljMS44LDAuOCw0LDAuMSw1LTEuNmwxLjEtMS45CgkJCWMwLjYtMC45LDEuNS0xLjYsMi41LTEuOGwyLjEtMC41YzEuOS0wLjQsMy4zLTIuMywzLjEtNC4ybC0wLjItMi4yYy0wLjEtMS4xLDAuMy0yLjIsMS0zbDEuNC0xLjdjMS4zLTEuNSwxLjMtMy43LDAtNS4ybC0xLjQtMS43CgkJCWMtMC43LTAuOC0xLjEtMS45LTEtM2wwLjItMi4yYzAuMi0yLTEuMS0zLjgtMy4xLTQuMmwtMi4xLTAuNWMtMS4xLTAuMi0yLTAuOS0yLjUtMS44bC0xLjEtMS45Yy0xLTEuNy0zLjItMi40LTUtMS42bC0yLDAuOQoJCQljLTEsMC40LTIuMSwwLjQtMy4xLDBsLTItMC45Yy0xLjgtMC44LTQtMC4xLTUsMS42bC0xLjEsMS45Yy0wLjYsMC45LTEuNSwxLjYtMi41LDEuOGwtMi4xLDAuNWMtMS45LDAuNC0zLjMsMi4zLTMuMSw0LjJsMC4yLDIuMgoJCQljMC4xLDEuMS0wLjMsMi4yLTEsM2wtMS40LDEuN2MtMS4zLDEuNS0xLjMsMy43LDAsNS4ybDEuNCwxLjdjMC43LDAuOCwxLjEsMS45LDEsM2wtMC4yLDIuMmMtMC4yLDIsMS4xLDMuOCwzLjEsNC4ybDIuMSwwLjUKCQkJYzEuMSwwLjIsMiwwLjksMi41LDEuOGwxLjEsMS45YzEsMS43LDMuMiwyLjQsNSwxLjZMMTQ4LjQsMjM4Ljd6IE0xNTIsMjA3YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMQoJCQlTMTUyLDIwNy42LDE1MiwyMDd6IE0xNTgsMjA5YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNTgsMjA5LjYsMTU4LDIwOXogTTE0NywyMTBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMQoJCQlzLTAuNCwxLTEsMVMxNDcsMjEwLjYsMTQ3LDIxMHogTTE0MSwyMTBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxUzE0MSwyMTAuNiwxNDEsMjEweiBNMTQ0LDIwNWMwLTAuNiwwLjQtMSwxLTEKCQkJczEsMC40LDEsMXMtMC40LDEtMSwxUzE0NCwyMDUuNiwxNDQsMjA1eiBNMTM2LDIxM2MwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTM2LDIxMy42LDEzNiwyMTN6IE0xMzksMjE5CgkJCWMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTM5LDIxOS42LDEzOSwyMTl6IE0xMzksMjI1YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxMzksMjI1LjYsMTM5LDIyNXoKCQkJIE0xNDMsMjMyYzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNDMsMjMyLjYsMTQzLDIzMnogTTE0OCwyMzBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxCgkJCVMxNDgsMjMwLjYsMTQ4LDIzMHogTTE1MywyMzRjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxUzE1MywyMzQuNiwxNTMsMjM0eiBNMTU3LDIyOGMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxCgkJCXMtMC40LDEtMSwxUzE1NywyMjguNiwxNTcsMjI4eiBNMTYzLDIyNGMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTYzLDIyNC42LDE2MywyMjR6IE0xNTksMjIxYzAtMC42LDAuNC0xLDEtMQoJCQlzMSwwLjQsMSwxcy0wLjQsMS0xLDFTMTU5LDIyMS42LDE1OSwyMjF6IE0xNjMsMjE4YzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNjMsMjE4LjYsMTYzLDIxOHogTTE1OCwyMTQKCQkJYzAtMC42LDAuNC0xLDEtMXMxLDAuNCwxLDFzLTAuNCwxLTEsMVMxNTgsMjE0LjYsMTU4LDIxNHogTTEzNCwyMjBjMC0wLjYsMC40LTEsMS0xczEsMC40LDEsMXMtMC40LDEtMSwxUzEzNCwyMjAuNiwxMzQsMjIwegoJCQkgTTE1MCwyMjVjMi44LDAsNS0yLjIsNS01cy0yLjItNS01LTVzLTUsMi4yLTUsNVMxNDcuMiwyMjUsMTUwLDIyNXogTTE1NywyMjBjMCwzLjktMy4xLDctNyw3cy03LTMuMS03LTdzMy4xLTcsNy03CgkJCVMxNTcsMjE2LjEsMTU3LDIyMHogTTI0MywxOTFjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgyNDN6IE0yNjIsMjAwYzAtMC42LDAuNC0xLDEtMWgyCgkJCWMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMWgtMkMyNjIuNCwyMDEsMjYyLDIwMC42LDI2MiwyMDB6IE0yNDgsMjA1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTEKCQkJSDI0OHogTTIyMywyMDZjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgyMjN6IE0yMjgsMjEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIKCQkJYzAuNiwwLDEtMC40LDEtMXMtMC40LTEtMS0xSDIyOHogTTIzNywyMTBjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDMjM3LjQsMjExLDIzNywyMTAuNiwyMzcsMjEwegoJCQkgTTI1MiwyMTFjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDMjUyLjQsMjEyLDI1MiwyMTEuNiwyNTIsMjExeiBNMjY0LDIwOWMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyCgkJCWMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgyNjR6IE0yNTMsMTk1YzAtMC42LDAuNC0xLDEtMWgyYzAuNiwwLDEsMC40LDEsMXMtMC40LDEtMSwxaC0yQzI1My40LDE5NiwyNTMsMTk1LjYsMjUzLDE5NXoKCQkJIE0yMzQsMTk1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMjM0eiBNMjQwLDIwMGMwLTAuNiwwLjQtMSwxLTFoMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMQoJCQloLTJDMjQwLjQsMjAxLDI0MCwyMDAuNiwyNDAsMjAweiBNMjE1LDIxNWMwLTAuNSwwLTAuOSwwLTEuNGMtMi41LTEuMS0zLjctNC0yLjYtNi42YzAuMi0wLjUsMC41LTEsMC45LTEuNGMtMC45LTIsMC00LjIsMS45LTUuMgoJCQljLTAuOC0yLjYsMC43LTUuNCwzLjQtNi4ybDAsMGMwLjQtMC41LDAuOS0wLjksMS41LTEuMWMwLjUtMi43LDMuMS00LjUsNS44LTQuMWMwLjcsMC4xLDEuNCwwLjQsMiwwLjhjNS4zLTMuOCwxMS42LTUuOSwxOC4yLTUuOQoJCQljNi44LDAsMTMuMSwyLjIsMTguMiw1LjljMi4zLTEuNiw1LjQtMSw3LDEuM2MwLjQsMC42LDAuNywxLjMsMC44LDJjMC42LDAuMiwxLjEsMC42LDEuNSwxLjFjMi43LDAuOCw0LjIsMy41LDMuNCw2LjJsMCwwCgkJCWMxLjksMSwyLjcsMy4yLDEuOSw1LjJjMS45LDIsMS44LDUuMi0wLjIsN2MtMC40LDAuNC0wLjksMC43LTEuNSwxYzAsMC41LDAsMC45LDAsMS40djFoLTYydi0xSDIxNXogTTIxNS44LDIwNy44CgkJCWMtMC4zLDEuMi0wLjUsMi40LTAuNiwzLjZjLTEuMy0xLTEuNi0yLjktMC42LTQuMmwwLDBDMjE1LDIwNy41LDIxNS40LDIwNy43LDIxNS44LDIwNy44TDIxNS44LDIwNy44eiBNMjE3LjMsMjAzLjIKCQkJYy0wLjQsMC45LTAuNywxLjgtMSwyLjdjLTEtMC40LTEuNi0xLjUtMS4zLTIuNWMwLjItMC41LDAuNi0wLjksMS4xLTEuMkMyMTYuNSwyMDIuNiwyMTYuOSwyMDIuOSwyMTcuMywyMDMuMkwyMTcuMywyMDMuMnoKCQkJIE0yMTkuNiwxOTguN2MtMC41LDAuOS0xLDEuOC0xLjUsMi43Yy0xLjMtMS0xLjUtMi45LTAuNS00LjJjMC4xLTAuMiwwLjMtMC4zLDAuNC0wLjVDMjE4LjMsMTk3LjYsMjE4LjksMTk4LjMsMjE5LjYsMTk4LjcKCQkJTDIxOS42LDE5OC43eiBNMjIwLjgsMTk3YzAuNC0wLjUsMC43LTEsMS4xLTEuNWMtMC4zLTAuNS0wLjktMC43LTEuNC0wLjRzLTAuNywwLjktMC40LDEuNEMyMjAuMywxOTYuNywyMjAuNSwxOTYuOSwyMjAuOCwxOTcKCQkJTDIyMC44LDE5N3ogTTIyNi4xLDE5MS4yYy0xLDAuOS0yLDEuOC0yLjksMi44Yy0wLjMtMC4zLTAuNy0wLjYtMS4xLTAuOGMwLjQtMS42LDIuMS0yLjUsMy43LTIuMQoJCQlDMjI1LjksMTkxLjEsMjI2LDE5MS4yLDIyNi4xLDE5MS4yTDIyNi4xLDE5MS4yeiBNMjY4LjgsMTk0Yy0wLjktMS0xLjktMS45LTIuOS0yLjhjMS41LTAuNiwzLjMsMC4xLDMuOSwxLjcKCQkJYzAsMC4xLDAuMSwwLjIsMC4xLDAuM0MyNjkuNSwxOTMuNCwyNjkuMSwxOTMuNiwyNjguOCwxOTRMMjY4LjgsMTk0eiBNMjcwLjEsMTk1LjVjMC40LDAuNSwwLjgsMSwxLjEsMS40CgkJCWMwLjUtMC4xLDAuOS0wLjcsMC44LTEuMnMtMC43LTAuOS0xLjItMC44QzI3MC41LDE5NS4xLDI3MC4zLDE5NS4zLDI3MC4xLDE5NS41eiBNMjczLjksMjAxLjRjLTAuNS0wLjktMS0xLjgtMS41LTIuNwoJCQljMC44LTAuNCwxLjQtMS4xLDEuNi0yYzEuMywxLjEsMS40LDMsMC40LDQuMkMyNzQuMiwyMDEuMSwyNzQsMjAxLjIsMjczLjksMjAxLjR6IE0yNzUuNiwyMDUuOWMtMC4zLTAuOS0wLjYtMS44LTEtMi43CgkJCWMwLjQtMC4zLDAuOC0wLjYsMS4yLTFjMSwwLjUsMS40LDEuNywxLDIuN0MyNzYuNiwyMDUuMywyNzYuMiwyMDUuNywyNzUuNiwyMDUuOXogTTI3Ni44LDIxMS40Yy0wLjEtMS4yLTAuNC0yLjQtMC42LTMuNgoJCQljMC41LTAuMSwwLjktMC40LDEuMi0wLjZDMjc4LjQsMjA4LjUsMjc4LjEsMjEwLjQsMjc2LjgsMjExLjRMMjc2LjgsMjExLjRMMjc2LjgsMjExLjR6IE0yNzUsMjE0Yy0wLjUtMTYtMTMuOS0yOC42LTI5LjktMjguMQoJCQljLTE1LjMsMC41LTI3LjYsMTIuOC0yOC4xLDI4LjFIMjc1TDI3NSwyMTR6IE03Mi4zLDE5OC4xYy0wLjItMC4zLTAuMy0wLjctMC4zLTEuMXYtMTJoLTJ2MTJjMCwyLjIsMS44LDQsNCw0CgkJCWMxLjIsMCwyLjMtMC41LDMuMS0xLjRjMC42LTAuNywwLjktMS42LDAuOS0yLjV2LTEyaC0ydjEyYzAsMS4xLTAuOSwyLTIsMmwwLDBDNzMuMywxOTksNzIuNywxOTguNyw3Mi4zLDE5OC4xeiBNNzUsMTc2CgkJCWMwLjQsMCwwLjcsMCwxLjEtMC4xYzAuNSwyLjIsMi42LDMuNSw0LjgsM2MwLjUtMC4xLDEtMC4zLDEuNC0wLjZjMS4xLDIuMSwxLjcsNC40LDEuNyw2Ljd2MjRjMCwzLjMtMi43LDYtNiw2aC0zdjkKCQkJYzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01di05aC0zYy0zLjMsMC02LTIuNy02LTZ2LTI0YzAtNy43LDYuMy0xNCwxNC0xNEM3MCwxNzMuOCw3Mi4yLDE3Niw3NSwxNzZ6IE01OCwxOTF2MTIKCQkJYzAsMC44LDAuNSwxLjUsMS4yLDEuOGMwLjksMC40LDEuOSwwLjEsMi40LTAuN2MwLjItMC4zLDAuMy0wLjcsMC4zLTEuMXYtMTJoMnYxMmMwLDIuMi0xLjcsNC0zLjksNGMtMC41LDAtMS0wLjEtMS40LTAuMgoJCQljLTAuMi0wLjEtMC40LTAuMi0wLjctMC4zdjIuNWMwLDIuMiwxLjgsNCw0LDRoMTZjMi4yLDAsNC0xLjgsNC00di0yNGMwLTEuNS0wLjItMi45LTAuNy00LjJjLTAuNCwwLjEtMC45LDAuMi0xLjMsMC4yCgkJCWMtMi4xLDAtNC4xLTEuMS01LjItM2MtMy0wLjEtNS42LTItNi41LTQuOUM2Mi40LDE3NCw1OCwxNzksNTgsMTg1VjE5MXogTTY3LDIxNXY5YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTlINjd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xNywxOTFjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgtMTd6IE0yLDIwMGMwLTAuNiwwLjQtMSwxLTFoMgoJCQljMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIM0MyLjQsMjAxLDIsMjAwLjYsMiwyMDB6IE0tMTIsMjA1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFILTEyegoJCQkgTS0zNywyMDZjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMmMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgtMzd6IE0tMzIsMjEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xCgkJCXMtMC40LTEtMS0xSC0zMnogTS0yMywyMTBjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDLTIyLjYsMjExLTIzLDIxMC42LTIzLDIxMHogTS04LDIxMWMwLTAuNiwwLjQtMSwxLTEKCQkJaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDLTcuNiwyMTItOCwyMTEuNi04LDIxMXogTTQsMjA5Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDJjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFINHoKCQkJIE0tNywxOTVjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJDLTYuNiwxOTYtNywxOTUuNi03LDE5NXogTS0yNiwxOTVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMgoJCQljMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFILTI2eiBNLTIwLDIwMGMwLTAuNiwwLjQtMSwxLTFoMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMWgtMkMtMTkuNiwyMDEtMjAsMjAwLjYtMjAsMjAweiBNLTQ1LDIxNQoJCQljMC0wLjUsMC0wLjksMC0xLjRjLTIuNS0xLjEtMy43LTQtMi42LTYuNmMwLjItMC41LDAuNS0xLDAuOS0xLjRjLTAuOS0yLDAtNC4yLDEuOS01LjJjLTAuOC0yLjYsMC43LTUuNCwzLjQtNi4ybDAsMAoJCQljMC40LTAuNSwwLjktMC45LDEuNS0xLjFjMC41LTIuNywzLjEtNC41LDUuOC00LjFjMC43LDAuMSwxLjQsMC40LDIsMC44YzUuMy0zLjgsMTEuNi01LjksMTguMi01LjljNi44LDAsMTMuMSwyLjIsMTguMiw1LjkKCQkJYzIuMy0xLjYsNS40LTEsNywxLjNjMC40LDAuNiwwLjcsMS4zLDAuOCwyYzAuNiwwLjIsMS4xLDAuNiwxLjUsMS4xYzIuNywwLjgsNC4yLDMuNSwzLjQsNi4ybDAsMGMxLjksMSwyLjcsMy4yLDEuOSw1LjIKCQkJYzEuOSwyLDEuOCw1LjItMC4yLDdjLTAuNCwwLjQtMC45LDAuNy0xLjUsMWMwLDAuNSwwLDAuOSwwLDEuNHYxaC02MnYtMUgtNDV6IE0tNDQuMiwyMDcuOGMtMC4zLDEuMi0wLjUsMi40LTAuNiwzLjYKCQkJYy0xLjMtMS0xLjYtMi45LTAuNi00LjJsMCwwQy00NSwyMDcuNS00NC42LDIwNy43LTQ0LjIsMjA3LjhMLTQ0LjIsMjA3Ljh6IE0tNDIuNywyMDMuMmMtMC40LDAuOS0wLjcsMS44LTEsMi43CgkJCWMtMS0wLjQtMS42LTEuNS0xLjMtMi41YzAuMi0wLjUsMC42LTAuOSwxLjEtMS4yQy00My41LDIwMi42LTQzLjEsMjAyLjktNDIuNywyMDMuMkwtNDIuNywyMDMuMnogTS00MC40LDE5OC43CgkJCWMtMC41LDAuOS0xLDEuOC0xLjUsMi43Yy0xLjMtMS0xLjUtMi45LTAuNS00LjJjMC4xLTAuMiwwLjMtMC4zLDAuNC0wLjVDLTQxLjcsMTk3LjYtNDEuMSwxOTguMy00MC40LDE5OC43eiBNLTM5LjIsMTk3CgkJCWMwLjMtMC41LDAuNy0xLDEuMS0xLjVjLTAuMy0wLjUtMC45LTAuNy0xLjQtMC40cy0wLjcsMC45LTAuNCwxLjRDLTM5LjcsMTk2LjctMzkuNSwxOTYuOS0zOS4yLDE5N0wtMzkuMiwxOTd6IE0tMzMuOSwxOTEuMgoJCQljLTEsMC45LTIsMS44LTIuOSwyLjhjLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44YzAuNC0xLjYsMi4xLTIuNSwzLjctMi4xQy0zNC4xLDE5MS4xLTM0LDE5MS4yLTMzLjksMTkxLjJMLTMzLjksMTkxLjJ6IE04LjgsMTk0CgkJCWMtMC45LTEtMS45LTEuOS0yLjktMi44YzEuNS0wLjYsMy4zLDAuMSwzLjksMS43YzAsMC4xLDAuMSwwLjIsMC4xLDAuM0M5LjUsMTkzLjQsOS4xLDE5My42LDguOCwxOTRMOC44LDE5NHogTTEwLjEsMTk1LjUKCQkJYzAuNCwwLjUsMC44LDEsMS4xLDEuNGMwLjUtMC4xLDAuOS0wLjcsMC44LTEuMmMtMC4xLTAuNS0wLjctMC45LTEuMi0wLjhDMTAuNSwxOTUuMSwxMC4zLDE5NS4zLDEwLjEsMTk1LjV6IE0xMy45LDIwMS40CgkJCWMtMC41LTAuOS0wLjktMS44LTEuNS0yLjdjMC44LTAuNCwxLjQtMS4xLDEuNi0yYzEuMywxLjEsMS40LDMsMC40LDQuMkMxNC4yLDIwMS4xLDE0LDIwMS4yLDEzLjksMjAxLjR6IE0xNS43LDIwNS45CgkJCWMtMC4zLTAuOS0wLjYtMS44LTEtMi43YzAuNC0wLjMsMC44LTAuNiwxLjItMWMxLDAuNSwxLjQsMS43LDEsMi43QzE2LjYsMjA1LjMsMTYuMiwyMDUuNywxNS43LDIwNS45eiBNMTYuOCwyMTEuNAoJCQljLTAuMS0xLjItMC40LTIuNC0wLjYtMy42YzAuNS0wLjEsMC45LTAuNCwxLjItMC42QzE4LjQsMjA4LjUsMTguMSwyMTAuNCwxNi44LDIxMS40TDE2LjgsMjExLjRMMTYuOCwyMTEuNHogTTE1LDIxNAoJCQljLTAuNS0xNi0xMy45LTI4LjYtMjkuOS0yOC4xYy0xNS4zLDAuNS0yNy42LDEyLjgtMjguMSwyOC4xSDE1TDE1LDIxNHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K";
diff --git a/src/@core/scss/base/bootstrap-extended/mixins/_navs.scss b/src/@core/scss/base/bootstrap-extended/mixins/_navs.scss
new file mode 100644
index 0000000..8c5989f
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/mixins/_navs.scss
@@ -0,0 +1,46 @@
+// 垂直导航链接
+
+@mixin nav-justified {
+ width: 100%;
+
+ .nav-item {
+ float: none;
+ }
+
+ .nav-link {
+ text-align: center;
+ margin-bottom: 5px;
+ }
+
+ > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+ }
+
+ @include media-breakpoint-up(sm) {
+ .nav-item {
+ display: block;
+ width: 1%;
+ }
+ .nav-link {
+ margin-bottom: 0;
+ }
+ }
+}
+
+// 将边框移动到指定的锚点而不是列表底部效果更佳。混入调整顶部的共享标签 '.nav-justified' 样式
+@mixin nav-tabs-justified {
+ .nav-link {
+ // 覆盖 '.nav-tabs' 边距
+ margin-right: 0;
+ border-radius: $border-radius;
+ }
+
+ @include media-breakpoint-up(sm) {
+ .nav-link.active,
+ .nav-link.active:hover,
+ .nav-link.active:focus {
+ border-bottom-color: transparent; //$nav-tabs-justified-active-link-border-color;
+ }
+ }
+}
diff --git a/src/@core/scss/base/bootstrap-extended/mixins/_type.scss b/src/@core/scss/base/bootstrap-extended/mixins/_type.scss
new file mode 100644
index 0000000..cb9c176
--- /dev/null
+++ b/src/@core/scss/base/bootstrap-extended/mixins/_type.scss
@@ -0,0 +1,31 @@
+// 混入字重
+
+@mixin font-weight($weight) {
+ $weights: (
+ thin: 100,
+ extra-light: 200,
+ ultra-light: 200,
+ light: 300,
+ normal: 400,
+ book: 400,
+ regular: 400,
+ medium: 500,
+ semi-bold: 600,
+ demi-bold: 600,
+ bold: 700,
+ extra-bold: 800,
+ ultra-bold: 900,
+ heavy: 900,
+ black: 900,
+ ultra: 900,
+ ultra-black: 900,
+ extra-ultra: 900
+ );
+
+ $output: $weight;
+ @if map-has-key($weights, $weight) {
+ $output: map-get($weights, $weight);
+ }
+
+ font-weight: $output;
+}
diff --git a/src/@core/scss/base/bootstrap.scss b/src/@core/scss/base/bootstrap.scss
new file mode 100644
index 0000000..d3b6e8c
--- /dev/null
+++ b/src/@core/scss/base/bootstrap.scss
@@ -0,0 +1,11 @@
+// ================================================================================================
+// 文件名:bootstrap.scss
+// 描述:包含 node_modules 中的 bootstrap 核心部分
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import 'bootstrap-extended/include';
+@import 'bootstrap/scss/bootstrap'; // Bootstrap 核心部分
diff --git a/src/@core/scss/base/colors.scss b/src/@core/scss/base/colors.scss
new file mode 100644
index 0000000..444ad1b
--- /dev/null
+++ b/src/@core/scss/base/colors.scss
@@ -0,0 +1,19 @@
+// ================================================================================================
+// 文件名:colors.scss
+// 描述:通用颜色的 SCSS 文件,包括调色板和颜色,用一个文件单独导入归集所有颜色文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 导入变量和混入
+@import 'bootstrap/scss/mixins/gradients';
+@import 'core/mixins/hex2rgb';
+
+// 提示标题的盒子阴影
+@import 'core/mixins/alert';
+
+// 始终在最后加载颜色系统,
+@import 'core/colors/palette';
+@import 'core/colors/palette-gradient.scss';
diff --git a/src/@core/scss/base/components.scss b/src/@core/scss/base/components.scss
new file mode 100644
index 0000000..445726c
--- /dev/null
+++ b/src/@core/scss/base/components.scss
@@ -0,0 +1,36 @@
+// ================================================================================================
+// 文件名:components.scss
+// 描述:通用组件文件,包括所有特定于主题的自定义组件的 SCSS 归集
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import 'bootstrap-extended/include';
+@import 'components/include';
+
+@import 'core/mixins/transitions'; // 自定义模板混入
+
+// 布局
+@import 'core/layouts/content';
+@import 'core/layouts/sidebar';
+@import 'core/layouts/footer';
+// 导航
+@import 'core/menu/navigation';
+
+// 组件
+@import 'components/avatar';
+@import 'components/search';
+// @import 'components/chart';
+@import 'components/bootstrap-social';
+@import 'components/demo'; //! DEMO 插件样式,在实际开发中请删除
+@import 'components/customizer'; //! DEMO 界面定制器样式,在实际开发中请删除
+@import 'components/divider';
+@import 'components/timeline';
+
+// 插件
+@import 'plugins/ui/breakpoints';
+@import 'plugins/forms/select2/select2';
+@import 'plugins/tables/datatables';
+@import 'plugins/forms/form-number-input'; // ? 购物车下拉列表需要全局引入
diff --git a/src/@core/scss/base/components/_include.scss b/src/@core/scss/base/components/_include.scss
new file mode 100644
index 0000000..426dcb4
--- /dev/null
+++ b/src/@core/scss/base/components/_include.scss
@@ -0,0 +1,13 @@
+// ================================================================================================
+// 文件名:include.scss
+// 描述:包括主题所有的自定义通用组件 SCSS。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 重写用户变量
+@import 'scss/variables/_variables-components'; // 组件自定义变量重写 (用户变量)
+@import 'variables'; // 组件自定义变量
+@import 'variables-dark'; // 深色变量
diff --git a/src/@core/scss/base/components/_variables-dark.scss b/src/@core/scss/base/components/_variables-dark.scss
new file mode 100644
index 0000000..4ce093d
--- /dev/null
+++ b/src/@core/scss/base/components/_variables-dark.scss
@@ -0,0 +1,49 @@
+// ================================================================================================
+// 文件名:variables-dark.scss
+// 描述:自定义深色模式变量 SCSS
+// -----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// -----------------------------------------------------------------------------------------------
+// 警告:请勿更改此变量文件。每个 Rexo-UI 模板版本更新都会覆盖此文件。
+// 提示:如需自定义请使用(assets/scss/variables/_variables-components.scss)文件覆盖组件变量。
+// ================================================================================================
+
+// 主体
+$theme-dark-body-bg: #161d31 !default;
+$theme-dark-body-color: #b4b7bd !default;
+$theme-dark-border-color: #3b4253 !default;
+$theme-dark-custom-control-border-color: #44405e !default;
+
+// 文字排版
+$theme-dark-headings-color: #d0d2d6 !default;
+$theme-dark-label-color: #d0d2d6 !default;
+$theme-dark-text-muted-color: #676d7d !default;
+
+// 卡片
+$theme-dark-card-bg: #283046 !default;
+$theme-dark-box-shadow: 0 4px 24px 0 rgba($black, 0.24);
+
+// 输入框
+$theme-dark-input-bg: #283046 !default;
+$theme-dark-input-placeholder-color: #676d7d !default;
+$theme-dark-input-border-color: #404656 !default;
+$theme-dark-input-disabled-bg: #24233a !default;
+$theme-dark-input-disabled-border-color: #444b60 !default;
+
+// 开关
+$theme-dark-switch-bg: #545a6a;
+$theme-dark-switch-bg-disabled: #1b2337;
+
+// 表格
+$theme-dark-table-bg: #283046 !default;
+$theme-dark-table-header-bg: #343d55 !default;
+$theme-dark-table-row-bg: #283046 !default;
+$theme-dark-table-hover-bg: #242b3d !default;
+$theme-dark-table-striped-bg: #242b3d !default;
+
+$theme-dark-modal-header-bg: #161d31 !default;
+$theme-dark-pagination-bg: #242b3d !default;
+$theme-dark-chart-bg: #384056 !default;
+$theme-dark-widget-bg: #384056 !default;
diff --git a/src/@core/scss/base/components/_variables.scss b/src/@core/scss/base/components/_variables.scss
new file mode 100644
index 0000000..7d72947
--- /dev/null
+++ b/src/@core/scss/base/components/_variables.scss
@@ -0,0 +1,129 @@
+// ================================================================================================
+// 文件名:variables.scss
+// 描述:自定义组件变量 SCSS
+// -----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// -----------------------------------------------------------------------------------------------
+// 警告:请勿更改此变量文件。每个 Rexo-UI 模板版本更新都会覆盖此文件。
+// 提示:如需自定义请使用(assets/scss/variables/_variables-components.scss)文件覆盖组件变量。
+// ================================================================================================
+
+$base-font-size: 14px !default;
+$body-direction: ltr !default; // 默认为 ltr 左侧导航模式,将其更改为 rtl 以变更为右侧导航模式
+$content-padding: 2rem !default;
+
+// ------------------------------
+// 颜色
+// ------------------------------
+$nav-component-border-color: #ddd !default;
+
+$swiper-bg: #f2f4f4 !default;
+
+// ------------------------------
+// 副导航栏
+// ------------------------------
+$navbar-height: 4.45rem !default;
+$horizontal-menu-height: 4.45rem !default;
+$footer-height: 3.35rem !default;
+
+// ------------------------------
+// 主导航菜单
+// ------------------------------
+
+// 深色模式
+$menu-dark-color: #dcdcdc !default;
+$menu-dark-bg-color: #10163a !default;
+
+$menu-padding: 10px 15px 10px 15px !default;
+$menu-second-level-padding: 10px 15px 10px 20px !default;
+$menu-third-level-padding: 10px 15px 10px 53px !default;
+$menu-forth-level-padding: 10px 15px 10px 53px !default;
+
+// 垂直导航菜单
+$menu-expanded-width: 260px !default;
+$menu-collapsed-width: 80px !default;
+
+// ------------------------------
+// 边栏
+// -------------------------------
+$sidebar-width: 260px !default;
+$chat-sidebar-width: 360px !default;
+
+// -------------------------------
+// 头像
+// -------------------------------
+$avatar-size: 32px !default;
+$avatar-status-size: 11px !default;
+$avatar-status-size-lg: 17px !default;
+
+$avatar-size-xl: 70px !default;
+$avatar-size-lg: 50px !default;
+$avatar-size-sm: 24px !default;
+
+$avatar-bg: #c3c3c3;
+$avatar-group-border: $white;
+
+// -------------------------------
+// 进度条
+// -------------------------------
+$progress-size-xl: 1.14rem !default;
+$progress-size-lg: 0.857rem !default;
+$progress-size-md: 0.57rem !default;
+$progress-size-sm: 0.143rem !default;
+
+// -------------------------------
+// 表单
+// -------------------------------
+// $input-height, $input-height-lg, $input-height-sm are in variables
+$font-size-xs: 0.75rem !default;
+$font-size-xl: ($font-size-base + 0.5) !default;
+$line-height-xl: 1.7 !default;
+$line-height-xs: 1.5 !default;
+$input-padding-y-xl: 0.5rem !default;
+$input-padding-x-xl: 0.5rem !default;
+
+$input-padding-y-xs: 0.2rem !default;
+$input-padding-x-xs: 0.275rem !default;
+
+$border-radius-xl: 0.35rem !default;
+$border-radius-xs: 0.12rem !default;
+$input-border-radius-xl: $border-radius-xl !default;
+$input-border-radius-xs: $border-radius-xs !default;
+
+$input-height-xl: (($font-size-xl * $line-height-xl) + ($input-padding-y-xl * 2)) !default;
+$input-height-xs: (($font-size-xs * $line-height-xs) + ($input-padding-y-xs * 2)) !default;
+$input-height-sm: (($font-size-sm * $line-height-sm) + ($input-padding-y-sm * 2)) !default;
+
+// -------------------------------
+// 空白页面背景色
+// -------------------------------
+$blank-bg-color: #eff2f7 !default;
+
+// -------------------------------
+// 数据表格背景色
+// -------------------------------
+$datatable-bg-color: #f8f8f8 !default;
+
+// -------------------------------
+// 开关
+// -------------------------------
+$switch-bg-color: #e2e2e2 !default;
+$switch-indicator-color: $white !default;
+
+// -------------------------------
+// 时间线
+// -------------------------------
+$timeline-border-color: $border-color !default;
+
+$timeline-point-size: 1.75rem !default;
+$timeline-point-indicator-size: 12px !default;
+$timeline-point-indicator-color: $primary !default;
+$timeline-point-indicator-wrapper-size: 20px !default;
+
+$timeline-item-min-height: 4rem !default;
+$timeline-item-icon-font-size: 0.85rem !default;
+
+$timeline-event-time-size: 0.85rem !default;
+$timeline-event-time-color: $text-muted !default;
diff --git a/src/@core/scss/base/components/avatar.scss b/src/@core/scss/base/components/avatar.scss
new file mode 100644
index 0000000..e684fb6
--- /dev/null
+++ b/src/@core/scss/base/components/avatar.scss
@@ -0,0 +1,185 @@
+// =========================================================================================
+// 文件名:avatar.scss
+// 描述:头像组件样式
+// ---------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// =========================================================================================
+
+// 头像
+.avatar {
+ white-space: nowrap;
+ background-color: $avatar-bg;
+ border-radius: 50%;
+ position: relative;
+ cursor: pointer;
+ color: $white;
+ display: inline-flex;
+ font-size: 1rem;
+ text-align: center;
+ vertical-align: middle;
+ font-weight: 600;
+
+ // 头像内内容
+ .avatar-content {
+ width: $avatar-size;
+ height: $avatar-size;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 50%;
+ font-size: 0.857rem;
+ .avatar-icon {
+ height: 1rem;
+ width: 1rem;
+ }
+ }
+ [class*='avatar-status-'] {
+ border-radius: 50%;
+ width: $avatar-status-size;
+ height: $avatar-status-size;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ border: 1px solid $white;
+ &.avatar-status-lg,
+ &.avatar-status-xl {
+ width: $avatar-status-size-lg;
+ height: $avatar-status-size-lg;
+ border-width: 2px;
+ }
+ }
+ .avatar-status-online {
+ background-color: $success;
+ }
+ .avatar-status-busy {
+ background-color: $danger;
+ }
+ .avatar-status-away {
+ background-color: $warning;
+ }
+ .avatar-status-offline {
+ background-color: $secondary;
+ }
+
+ // 用于常见问题等页面的头像标签
+ &.avatar-tag {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 42px;
+ width: 42px;
+ border-radius: $border-radius;
+ }
+
+ // 头像图片
+ img {
+ border-radius: 50%;
+ }
+
+ // 头像尺寸自定义
+ &.avatar-xl {
+ font-size: 1.5rem;
+ img {
+ width: $avatar-size-xl;
+ height: $avatar-size-xl;
+ }
+ .avatar-content {
+ height: $avatar-size-xl;
+ width: $avatar-size-xl;
+ font-size: 2.57rem;
+ .avatar-icon,
+ i,
+ svg {
+ height: 3rem;
+ width: 3rem;
+ font-size: 3rem;
+ }
+ }
+ [class*='avatar-status-'] {
+ right: 3px;
+ bottom: 0;
+ }
+ }
+ &.avatar-lg {
+ font-size: 1.2rem;
+ img {
+ width: $avatar-size-lg;
+ height: $avatar-size-lg;
+ }
+ .avatar-content {
+ width: $avatar-size-lg;
+ height: $avatar-size-lg;
+ font-size: 1.714rem;
+ .avatar-icon,
+ i,
+ svg {
+ height: 2rem;
+ width: 2rem;
+ font-size: 2rem;
+ }
+ }
+ [class*='avatar-status-'] {
+ right: 3px;
+ bottom: 1px;
+ }
+ }
+
+ &.avatar-sm {
+ .avatar-content {
+ width: $avatar-size-sm;
+ height: $avatar-size-sm;
+ .avatar-icon,
+ i,
+ svg {
+ height: 1rem;
+ width: 1rem;
+ font-size: 1rem;
+ }
+ }
+ img {
+ width: $avatar-size-sm;
+ height: $avatar-size-sm;
+ }
+ [class*='avatar-status-'] {
+ right: -3px;
+ bottom: -2px;
+ }
+ }
+}
+
+// 头像组
+.avatar-group {
+ display: flex;
+ justify-content: flex-start;
+ .avatar {
+ transition: all 0.25s ease;
+ img,
+ .avatar-content {
+ box-shadow: 0 0 0 2px $avatar-group-border, inset 0 0 0 1px rgba($black, 0.07);
+ }
+ .avatar-content {
+ background-color: lighten(theme-color('secondary'), 20%) !important;
+ }
+ &:hover {
+ transition: all 0.25s ease;
+ }
+ &.pull-up:hover {
+ transform: translateY(-4px) scale(1.07);
+ }
+ }
+ // 头像组尺寸
+ .avatar:not(:first-child) {
+ margin-left: -0.55rem;
+ }
+ .avatar-sm:not(:first-child) {
+ margin-left: -0.4rem;
+ }
+ .avatar-lg:not(:first-child) {
+ margin-left: -1rem;
+ }
+ .avatar-xl:not(:first-child) {
+ margin-left: -1.5rem;
+ }
+}
diff --git a/src/@core/scss/base/components/bootstrap-social.scss b/src/@core/scss/base/components/bootstrap-social.scss
new file mode 100644
index 0000000..2df49ec
--- /dev/null
+++ b/src/@core/scss/base/components/bootstrap-social.scss
@@ -0,0 +1,340 @@
+$bs-height-base: ($line-height-base + $input-btn-padding-y * 2) !default;
+$bs-height-lg: (floor($font-size-lg * $line-height-base) + $input-btn-padding-y-lg * 2) !default;
+$bs-height-sm: (floor($font-size-sm * 1.5) + $input-btn-padding-y-lg * 2) !default;
+$bs-height-xs: (floor($font-size-sm * 0.2) + $input-btn-padding-y-lg) !default;
+
+.btn-social {
+ position: relative;
+ padding-left: ($bs-height-base + $input-btn-padding-x);
+ text-align: left;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ > :first-child {
+ position: absolute;
+ left: 0;
+ top: 2px;
+ bottom: 0;
+ width: $bs-height-base;
+ line-height: ($bs-height-base - 0.25);
+ font-size: $font-size-base;
+ text-align: center;
+ border-right: 1px solid rgba($black, 0.2);
+ }
+}
+
+.btn-social-icon {
+ @extend .btn-social;
+ height: ($bs-height-base);
+ width: ($bs-height-base);
+ padding: 0;
+ > :first-child {
+ border: none;
+ text-align: center;
+ width: 100% !important;
+ }
+}
+
+// 混入社交按钮
+@mixin btn-social($color-bg, $color: #fff, $hover: $color-bg, $border-hover: $color-bg) {
+ background-color: $color-bg;
+ @include button-variant($color-bg, $color, $hover, $border-hover);
+ color: $white !important;
+ border: none;
+}
+
+// 混入带边框的社交按钮
+@mixin btn-social-outline($color-bg) {
+ border: 1px solid $color-bg !important;
+ color: $color-bg;
+}
+
+// 混入带边框的社交按钮悬停效果
+@mixin btn-hover-outline($color-bg) {
+ color: darken($color-bg, 20%);
+ border: 1px solid darken($color-bg, 20%) !important;
+}
+
+// 社交按钮
+.btn-adn {
+ @include btn-social(#d87a68);
+}
+.btn-bitbucket {
+ @include btn-social(#205081);
+}
+.btn-dropbox {
+ @include btn-social(#1087dd);
+}
+.btn-facebook {
+ @include btn-social(#3b5998);
+}
+.btn-flickr {
+ @include btn-social(#ff0084);
+}
+.btn-foursquare {
+ @include btn-social(#f94877);
+}
+.btn-github {
+ @include btn-social(#444444);
+}
+.btn-google {
+ @include btn-social(#dd4b39);
+}
+.btn-instagram {
+ @include btn-social(#3f729b);
+}
+.btn-linkedin {
+ @include btn-social(#007bb6);
+}
+.btn-microsoft {
+ @include btn-social(#2672ec);
+}
+.btn-odnoklassniki {
+ @include btn-social(#f4731c);
+}
+.btn-openid {
+ @include btn-social(#f7931e);
+}
+.btn-pinterest {
+ @include btn-social(#cb2027);
+}
+.btn-qq {
+ @include btn-social(#3b5998);
+}
+.btn-reddit {
+ @include btn-social(#eff7ff, #000, #000, #000);
+}
+.btn-soundcloud {
+ @include btn-social(#ff5500);
+}
+.btn-tumblr {
+ @include btn-social(#2c4762);
+}
+.btn-twitter {
+ @include btn-social(#55acee, #fff);
+}
+.btn-vimeo {
+ @include btn-social(#1ab7ea);
+}
+.btn-wechat {
+ @include btn-social(#04be02);
+}
+.btn-vk {
+ @include btn-social(#587ea3);
+}
+.btn-yahoo {
+ @include btn-social(#720e9e);
+}
+
+// 带边框的社交按钮
+.btn-outline-adn {
+ @include btn-social-outline(#d87a68);
+}
+.btn-outline-bitbucket {
+ @include btn-social-outline(#205081);
+}
+.btn-outline-dropbox {
+ @include btn-social-outline(#1087dd);
+}
+.btn-outline-facebook {
+ @include btn-social-outline(#3b5998);
+}
+.btn-outline-flickr {
+ @include btn-social-outline(#ff0084);
+}
+.btn-outline-foursquare {
+ @include btn-social-outline(#f94877);
+}
+.btn-outline-github {
+ @include btn-social-outline(#444444);
+}
+.btn-outline-google {
+ @include btn-social-outline(#dd4b39);
+}
+.btn-outline-instagram {
+ @include btn-social-outline(#3f729b);
+}
+.btn-outline-linkedin {
+ @include btn-social-outline(#007bb6);
+}
+.btn-outline-microsoft {
+ @include btn-social-outline(#2672ec);
+}
+.btn-outline-odnoklassniki {
+ @include btn-social-outline(#f4731c);
+}
+.btn-outline-openid {
+ @include btn-social-outline(#f7931e);
+}
+.btn-outline-pinterest {
+ @include btn-social-outline(#cb2027);
+}
+.btn-outline-reddit {
+ @include btn-social-outline(#ff4500);
+}
+.btn-outline-qq {
+ @include btn-social-outline(#3b5998);
+}
+.btn-outline-soundcloud {
+ @include btn-social-outline(#ff5500);
+}
+.btn-outline-tumblr {
+ @include btn-social-outline(#2c4762);
+}
+.btn-outline-twitter {
+ @include btn-social-outline(#55acee);
+}
+.btn-outline-vimeo {
+ @include btn-social-outline(#1ab7ea);
+}
+.btn-outline-vk {
+ @include btn-social-outline(#587ea3);
+}
+.btn-outline-wechat {
+ @include btn-social-outline(#04be02);
+}
+.btn-outline-yahoo {
+ @include btn-social-outline(#720e9e);
+}
+
+// 带边框的社交按钮悬停效果
+.btn-outline-adn:hover {
+ @include btn-hover-outline(#d87a68);
+}
+.btn-outline-bitbucket:hover {
+ @include btn-hover-outline(#205081);
+}
+.btn-outline-dropbox:hover {
+ @include btn-hover-outline(#1087dd);
+}
+.btn-outline-facebook:hover {
+ @include btn-hover-outline(#3b5998);
+}
+.btn-outline-flickr:hover {
+ @include btn-hover-outline(#ff0084);
+}
+.btn-outline-foursquare:hover {
+ @include btn-hover-outline(#f94877);
+}
+.btn-outline-github:hover {
+ @include btn-hover-outline(#444444);
+}
+.btn-outline-google:hover {
+ @include btn-hover-outline(#dd4b39);
+}
+.btn-outline-instagram:hover {
+ @include btn-hover-outline(#3f729b);
+}
+.btn-outline-linkedin:hover {
+ @include btn-hover-outline(#007bb6);
+}
+.btn-outline-microsoft:hover {
+ @include btn-hover-outline(#2672ec);
+}
+.btn-outline-odnoklassniki:hover {
+ @include btn-hover-outline(#f4731c);
+}
+.btn-outline-openid:hover {
+ @include btn-hover-outline(#f7931e);
+}
+.btn-outline-pinterest:hover {
+ @include btn-hover-outline(#cb2027);
+}
+.btn-outline-qq:hover {
+ @include btn-hover-outline(#3b5998);
+}
+.btn-outline-reddit:hover {
+ @include btn-hover-outline(#ff4500);
+}
+.btn-outline-soundcloud:hover {
+ @include btn-hover-outline(#ff5500);
+}
+.btn-outline-tumblr:hover {
+ @include btn-hover-outline(#2c4762);
+}
+.btn-outline-twitter:hover {
+ @include btn-hover-outline(#55acee);
+}
+.btn-outline-vimeo:hover {
+ @include btn-hover-outline(#1ab7ea);
+}
+.btn-outline-vk:hover {
+ @include btn-hover-outline(#587ea3);
+}
+.btn-outline-wechat:hover {
+ @include btn-hover-outline(#04be02);
+}
+.btn-outline-yahoo:hover {
+ @include btn-hover-outline(#720e9e);
+}
+
+// 社交按钮背景色
+.bg-adn {
+ background-color: #d87a68;
+}
+.bg-bitbucket {
+ background-color: #205081;
+}
+.bg-dropbox {
+ background-color: #1087dd;
+}
+.bg-facebook {
+ background-color: #3b5998;
+}
+.bg-flickr {
+ background-color: #ff0084;
+}
+.bg-foursquare {
+ background-color: #f94877;
+}
+.bg-github {
+ background-color: #444444;
+}
+.bg-google {
+ background-color: #dd4b39;
+}
+.bg-instagram {
+ background-color: #3f729b;
+}
+.bg-linkedin {
+ background-color: #007bb6;
+}
+.bg-microsoft {
+ background-color: #2672ec;
+}
+.bg-odnoklassniki {
+ background-color: #f4731c;
+}
+.bg-openid {
+ background-color: #f7931e;
+}
+.bg-pinterest {
+ background-color: #cb2027;
+}
+.bg-qq {
+ background-color: #3b5998;
+}
+.bg-reddit {
+ background-color: #ff4500;
+}
+.bg-soundcloud {
+ background-color: #ff5500;
+}
+.bg-tumblr {
+ background-color: #2c4762;
+}
+.bg-twitter {
+ background-color: #55acee;
+}
+.bg-vimeo {
+ background-color: #1ab7ea;
+}
+.bg-vk {
+ background-color: #587ea3;
+}
+.bg-wechat {
+ background-color: #04be02;
+}
+.bg-yahoo {
+ background-color: #720e9e;
+}
diff --git a/src/@core/scss/base/components/chart.scss b/src/@core/scss/base/components/chart.scss
new file mode 100644
index 0000000..47cd3c8
--- /dev/null
+++ b/src/@core/scss/base/components/chart.scss
@@ -0,0 +1,35 @@
+// Apex 图表
+
+.apexcharts-canvas {
+ // 文字提示颜色
+ .apexcharts-tooltip {
+ color: $body-color !important;
+ &.apexcharts-theme-dark {
+ color: $white !important;
+ }
+ }
+ // 工具栏下载选项颜色
+ .apexcharts-toolbar {
+ .apexcharts-menu {
+ .apexcharts-menu-item {
+ color: $body-color;
+ }
+ }
+ }
+
+ // 图表字体
+ .apexcharts-text,
+ .apexcharts-datalabel {
+ font-family: $font-family-base !important;
+ }
+}
+
+// Apex 图表文字提示
+.apexcharts-xaxistooltip {
+ color: $body-color !important;
+}
+
+// 工具栏层级
+.apexcharts-toolbar {
+ z-index: 10;
+}
diff --git a/src/@core/scss/base/components/customizer.scss b/src/@core/scss/base/components/customizer.scss
new file mode 100644
index 0000000..832ce20
--- /dev/null
+++ b/src/@core/scss/base/components/customizer.scss
@@ -0,0 +1,98 @@
+// =========================================================================================
+// 文件名:customizer.scss
+// 描述:模板界面定制器 SCSS 文件,仅用于 DEMO 演示目的。项目开发请删除此文件。
+// ---------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// =========================================================================================
+
+.customizer {
+ width: 400px;
+ right: -400px;
+ padding: 0;
+ background-color: $white;
+ z-index: 1051;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ height: 100vh;
+ height: calc(var(--vh, 1vh) * 100);
+ transition: right 0.4s cubic-bezier(0.05, 0.74, 0.2, 0.99);
+ backface-visibility: hidden;
+ border-left: 1px solid rgba($black, 0.05);
+
+ &.open {
+ box-shadow: 0 15px 30px 0 rgba($black, 0.11), 0 5px 15px 0 rgba($black, 0.08);
+ right: 0;
+ }
+
+ // 定制器内容高度
+ .customizer-content {
+ position: relative;
+ height: 100%;
+ }
+
+ // 定制器关闭图标
+ .customizer-close {
+ position: absolute;
+ right: 0.6rem;
+ top: 0.6rem;
+ padding: 7px;
+ width: auto;
+ z-index: 10;
+ color: $headings-color;
+ i,
+ svg {
+ font-size: 1.5rem;
+ height: 1.5rem;
+ width: 1.5rem;
+ }
+ }
+
+ // 定制器切换图标
+ .customizer-toggle {
+ background: $primary;
+ color: $white !important;
+ display: block;
+ box-shadow: -3px 0px 8px rgba($black, 0.1);
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ position: absolute;
+ top: 50%;
+ width: 38px;
+ height: 38px;
+ left: -39px;
+ text-align: center;
+ line-height: 40px;
+ cursor: pointer;
+ }
+
+ // 主题色框样式
+ .color-box {
+ height: 24px;
+ width: 24px;
+ margin: 0.5rem;
+ border-radius: 0.5rem;
+ cursor: pointer;
+ position: relative;
+ &.selected {
+ &:after {
+ content: '';
+ border: 1px solid $primary;
+ height: 30px;
+ width: 30px;
+ top: -3px;
+ left: -3px;
+ position: absolute;
+ border-radius: 0.5rem;
+ }
+ &.border {
+ &:after {
+ top: -4px;
+ left: -4px;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/components/demo.scss b/src/@core/scss/base/components/demo.scss
new file mode 100644
index 0000000..2cd113c
--- /dev/null
+++ b/src/@core/scss/base/components/demo.scss
@@ -0,0 +1,120 @@
+// =========================================================================================
+// 文件名:demo.scss
+// 描述:模板 DEMO 某些组件片段的 SCSS 文件,仅用于 DEMO 演示目的。项目开发请删除此文件。
+// ---------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// =========================================================================================
+
+// Demo 内容间距
+.demo-inline-spacing {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ & > * {
+ margin-right: 1.5rem;
+ margin-top: 1.5rem;
+ }
+}
+
+.demo-vertical-spacing > * {
+ margin: 0;
+ margin-bottom: 1.5rem;
+ &:last-child {
+ margin: 0;
+ }
+}
+
+.demo-spacing-0 > *:last-child {
+ margin: 0;
+}
+
+// Demo 图标页面
+.icon-wrapper {
+ .feather {
+ height: 24px;
+ width: 24px;
+ }
+}
+
+.scroll-example {
+ padding: 0.5rem;
+ position: relative;
+ border: 2px solid darken($body-bg, 10%);
+ overflow: auto;
+
+ .horz-scroll-content {
+ width: 1200px;
+ }
+}
+
+.browser {
+ background: #e0e0e0;
+ border: 4px solid #e0e0e0;
+ width: 100%;
+ height: 12rem;
+ padding-top: 20px;
+ margin: 0 0 10px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.browser iframe {
+ border: 0;
+ background: #fff;
+ height: 100%;
+ width: 100%;
+}
+
+.loader-wrapper {
+ height: 8em;
+}
+
+.maintenance-icon {
+ font-size: 4rem;
+}
+
+.animationIcon {
+ right: 30px;
+ bottom: 10px;
+}
+
+// Demo 面包屑页面
+#component-breadcrumbs .breadcrumb:not(last-child){
+ margin-bottom: .5rem;
+}
+#breadcrumb-alignment {
+ .breadcrumb-wrapper {
+ box-shadow: 1px 1px 10px rgba($black, 0.1);
+ padding: 1px;
+ border-radius: $border-radius;
+ .breadcrumb {
+ margin-top: 0.8rem;
+ margin-bottom: 0.8rem;
+ }
+ }
+}
+.dark-layout {
+ #breadcrumb-alignment {
+ .breadcrumb-wrapper {
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.24);
+ }
+ }
+}
+
+// Demo 模板购买跳转
+.buy-now {
+ position: fixed;
+ bottom: 5%;
+ right: 79px;
+ z-index: 1031;
+ .btn {
+ box-shadow: 0 1px 20px 1px $danger !important;
+ &:hover {
+ box-shadow: none !important;
+ }
+ }
+}
diff --git a/src/@core/scss/base/components/divider.scss b/src/@core/scss/base/components/divider.scss
new file mode 100644
index 0000000..ead8a36
--- /dev/null
+++ b/src/@core/scss/base/components/divider.scss
@@ -0,0 +1,99 @@
+// Divider 分隔符
+
+.divider {
+ display: block;
+ text-align: center;
+ overflow: hidden;
+ white-space: nowrap;
+ margin: 1rem 0;
+
+ //分隔符文本显示 prop
+ .divider-text {
+ position: relative;
+ display: inline-block;
+ font-size: 0.9375rem;
+ padding: 0 1rem;
+
+ // 分隔符图标大小
+ i,
+ svg {
+ height: 1rem;
+ width: 1rem;
+ font-size: 1rem;
+ }
+
+ // 分隔符边框
+ &:before,
+ &:after {
+ content: '';
+ position: absolute;
+ top: 50%;
+ width: 9999px;
+ border-top: 1px solid $border-color;
+ }
+
+ // 分隔器间距
+ &:before {
+ right: 100%;
+ }
+
+ &:after {
+ left: 100%;
+ }
+ }
+
+ // 分隔符定位设置
+ &.divider-left {
+ .divider-text {
+ float: left;
+ padding-left: 0;
+ &:before {
+ display: none;
+ }
+ }
+ }
+ &.divider-left-center {
+ .divider-text {
+ left: -25%;
+ }
+ }
+
+ &.divider-right {
+ .divider-text {
+ float: right;
+ padding-right: 0;
+ &:after {
+ display: none;
+ }
+ }
+ }
+ &.divider-right-center {
+ .divider-text {
+ right: -25%;
+ }
+ }
+
+ // 分隔符样式
+ &.divider-dotted {
+ .divider-text {
+ &:before,
+ &:after {
+ border-style: dotted;
+ border-width: 1px;
+ border-top-width: 0;
+ border-color: $border-color;
+ }
+ }
+ }
+ &.divider-dashed {
+ .divider-text {
+ &:before,
+ &:after {
+ border-style: dashed;
+ border-width: 1px;
+ border-top-width: 0;
+ border-color: $border-color;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/components/search.scss b/src/@core/scss/base/components/search.scss
new file mode 100644
index 0000000..a30c2ec
--- /dev/null
+++ b/src/@core/scss/base/components/search.scss
@@ -0,0 +1,234 @@
+// =========================================================================================
+// 文件名:search.scss
+// 描述:副导航栏搜索功能样式
+// ---------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// =========================================================================================
+
+.navbar-container {
+ a.nav-link-search {
+ float: left;
+ }
+
+ .search-input {
+ width: 0;
+ float: left;
+ display: none;
+
+ input {
+ width: 0;
+ border: none;
+ background: none;
+ transition: all 0.2s ease-out;
+ line-height: 16px;
+ padding: 1.6rem 3.6rem;
+ }
+
+ &.open {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1000;
+ width: 100%;
+ display: block;
+ background: $white;
+ border-radius: 0.5rem;
+
+ .search-input-close,
+ .search-input-icon {
+ display: block;
+ }
+
+ input {
+ width: 100%;
+ outline: none;
+ background: none;
+ height: auto;
+ box-shadow: none;
+ transition: all 0.3s ease-out;
+ }
+ }
+
+ .search-list {
+ max-height: 450px;
+ height: auto;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ background: $white;
+ width: 100%;
+ margin-top: 0.5rem;
+ padding-left: 0;
+ border-radius: $border-radius;
+ display: none;
+ @media only screen and (min-device-width: 320px) and (max-device-width: 875px) and (orientation: landscape) {
+ max-height: 250px;
+ }
+
+ &.search-list-bookmark {
+ height: auto !important;
+ i,
+ svg {
+ font-size: 1.2rem;
+ height: 1.2rem;
+ width: 1.2rem;
+ }
+ }
+
+ &.show {
+ display: block;
+ min-height: 3rem;
+ }
+
+ li {
+ a {
+ padding: 0.9rem 1rem;
+ color: $body-color;
+
+ i,
+ svg[class*='feather feather-'] {
+ height: 1.25rem;
+ width: 1.25rem;
+ font-size: 1.25rem;
+ }
+ }
+
+ &:first-child {
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+
+ &:last-child {
+ border-bottom-left-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ }
+
+ &.auto-suggestion {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ &:hover,
+ &.current_item {
+ background-color: $body-bg;
+ }
+ }
+ }
+ }
+
+ .search-input-icon {
+ z-index: 2;
+ display: none;
+ position: absolute;
+ left: 1.5rem;
+ top: 32%;
+ cursor: pointer;
+
+ i,
+ svg {
+ height: 1.25rem;
+ width: 1.25rem;
+ font-size: 1.25rem;
+ }
+ }
+
+ .search-input-close {
+ z-index: 1;
+ display: none;
+ position: absolute;
+ right: 2rem;
+ top: 32%;
+ cursor: pointer;
+
+ i,
+ svg {
+ height: 1.25rem;
+ width: 1.25rem;
+ font-size: 1.25rem;
+ }
+ }
+ }
+
+ .bookmark-input {
+ position: absolute;
+ top: 102%;
+ width: 25%;
+ display: none;
+ background: $white;
+ border-radius: $border-radius;
+ box-shadow: 0 15px 30px 0 rgba($black, 0.11), 0 5px 15px 0 rgba($black, 0.08);
+
+ &.show {
+ display: block;
+ }
+
+ .bookmark-input-icon {
+ position: absolute;
+ z-index: 1;
+ top: 20px;
+ left: 24px;
+ }
+
+ input {
+ padding: 0.7rem 0.7rem 0.7rem 2.5rem;
+ margin: 12px;
+ width: calc(100% - 24px); // 宽度缩减
+ background: $white;
+ border: 1px solid rgba($black, 0.2);
+
+ &:focus {
+ border: 1px solid $primary;
+ }
+ }
+
+ .search-list {
+ position: relative; // 考虑外部 div 宽度
+ }
+ }
+
+ .bookmark-icon {
+ cursor: pointer;
+ }
+
+ .dropdown.bookmark-dropdown {
+ padding: 1.4rem 0.5rem 1.35rem;
+
+ .dropdown-toggle:after {
+ display: none;
+ }
+ }
+
+ .search-data-title {
+ line-height: 1.25rem;
+ }
+}
+
+.navbar-dark
+// .navbar-semi-light
+{
+ .search-input {
+ .input {
+ color: #f5f7fa;
+ border-radius: 0.5rem;
+ }
+
+ &.open {
+ .input {
+ color: #f5f7fa;
+ border: 1px solid #f5f7fa;
+ }
+ }
+ }
+}
+
+// 副导航栏跟随内容
+.navbar-static {
+ .navbar-container {
+ .search-input {
+ &.open {
+ border-radius: 0;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/components/timeline.scss b/src/@core/scss/base/components/timeline.scss
new file mode 100644
index 0000000..f30b6dc
--- /dev/null
+++ b/src/@core/scss/base/components/timeline.scss
@@ -0,0 +1,99 @@
+// =========================================================================================
+// 文件名:timeline.scss
+// 描述:时间线组件样式 SCSS
+// ---------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ==========================================================================================
+
+
+.timeline {
+ padding: 0;
+ margin-bottom: 0;
+ margin-left: 1rem;
+ list-style: none;
+
+ // 时间线子项
+ .timeline-item {
+ position: relative;
+ padding-left: 2.5rem;
+ border-left: 1px solid $timeline-border-color;
+
+ &:not(:last-child) {
+ padding-bottom: 1.8rem;
+ }
+
+ // 时间线圆点
+ .timeline-point {
+ position: absolute;
+ left: -0.85rem;
+ top: 0;
+ z-index: 2;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $timeline-point-size;
+ width: $timeline-point-size;
+ text-align: center;
+ border-radius: 50%;
+ border: 1px solid $timeline-point-indicator-color;
+ background-color: $white;
+
+ // 时间线圆点指示器
+ &.timeline-point-indicator {
+ left: -0.412rem;
+ top: 0.07rem;
+ height: $timeline-point-indicator-size;
+ width: $timeline-point-indicator-size;
+ border: 0;
+ background-color: $timeline-point-indicator-color;
+
+ &:before {
+ content: '';
+ background: rgba($color: $timeline-point-indicator-color, $alpha: 0.12);
+ height: $timeline-point-indicator-wrapper-size;
+ width: $timeline-point-indicator-wrapper-size;
+ display: block;
+ position: absolute;
+ top: -0.285rem;
+ left: -0.285rem;
+ border-radius: 50%;
+ }
+ }
+
+ // 图标
+ i,
+ svg {
+ color: $timeline-point-indicator-color;
+ font-size: $timeline-item-icon-font-size;
+ vertical-align: baseline;
+ }
+ }
+
+ .timeline-event {
+ position: relative;
+ width: 100%;
+ min-height: $timeline-item-min-height;
+ // background-color: transparent;
+
+ .timeline-event-time {
+ font-size: $timeline-event-time-size;
+ color: $timeline-event-time-color;
+ }
+ }
+
+ &:last-of-type {
+ border-left-color: transparent !important;
+ &:after {
+ content: '';
+ position: absolute;
+ left: -1px;
+ bottom: 0;
+ width: 1px;
+ height: 100%;
+ background: linear-gradient($border-color, transparent);
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/colors/_palette.scss b/src/@core/scss/base/core/colors/_palette.scss
new file mode 100644
index 0000000..60e2056
--- /dev/null
+++ b/src/@core/scss/base/core/colors/_palette.scss
@@ -0,0 +1,529 @@
+// ================================================================================================
+// 文件名:pallette.scss
+// 描述:自定义系统颜色样式,包括背景、边框和文本颜色
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ----------------------------------------------------------------------------------------------
+// 警告:请勿更改此变量文件。每个 Rexo-UI 模板版本更新都会覆盖此文件。
+// 提示:如需自定义请使用(assets/scss/colors/palette.scss)文件覆盖颜色变量。
+// ================================================================================================
+
+// 使用主题颜色('name_of_color', 'type_of_color')避免重复映射
+
+@function color-function($color, $type) {
+ @if map-has-key($colors, $color) {
+ $curr_color: map-get($colors, $color);
+ @if map-has-key($curr_color, $type) {
+ @return map-get($curr_color, $type);
+ }
+ }
+
+ // @warn "Unknown `#{name}` in $colors.";
+ @return null;
+}
+
+// 调色板
+@import 'palette-variables';
+
+// 颜色类
+// Text color: .color .lighten-* / .darken-* / .accent-*
+// Background: .bg-color .bg-lighten-* / .bg-darken-* / .bg-accent-*
+// border: .border-color .border-lighten-* / .border-darken-* / .border-accent-*
+// border-top: .border-top-color .border-top-lighten-* / .border-top-darken-* / .border-top-accent-*
+// border-bottom: .border-bottom-color .border-bottom-lighten-* / .border-bottom-darken-* / .border-bottom-accent-*
+// border-left: .border-left-color .border-left-lighten-* / .border-left-darken-* / .border-left-accent-*
+// border-right: .border-right-color .border-right-lighten-* / .border-right-darken-* / .border-right-accent-*
+
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ // background color
+ .bg-#{$color_name} {
+ background-color: $color_value !important;
+
+ .card-header,
+ .card-footer {
+ background-color: transparent;
+ }
+ }
+
+ // 提示
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .alert-#{$color_name} {
+ background: rgba($color_value, 0.12) !important;
+ color: $color_value !important;
+
+ .alert-heading {
+ @include alert-heading-bs($color_value);
+ }
+
+ .alert-link {
+ color: darken($color_value, 5%) !important;
+ }
+
+ // 可关闭提示
+ .close {
+ color: $color_value !important;
+ }
+ }
+ }
+
+ // 浅色背景rgba颜色不透明度设置
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white' and $color_name != 'dark') {
+ .bg-light-#{$color_name} {
+ background: rgba($color_value, 0.12) !important;
+ color: $color_value !important;
+
+ // 日历背景、颜色和边框颜色
+ &.fc-h-event,
+ &.fc-v-event {
+ border-color: rgba($color_value, 0.1);
+ }
+
+ .fc-list-event-dot {
+ border-color: $color_value !important;
+ }
+
+ &.fc-list-event {
+ &:hover td {
+ background: rgba($color_value, 0.1) !important;
+ }
+
+ .fc-list-event-title {
+ color: $body-color;
+ }
+ }
+ }
+ }
+
+ // 浅色头像背景
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white' and $color_name != 'dark') {
+ .avatar.bg-light-#{$color_name} {
+ color: $color_value !important;
+ }
+ }
+
+ // 边框颜色
+ .border-#{$color_name} {
+ border: 1px solid $color_value !important;
+ }
+
+ .border-top-#{$color_name} {
+ border-top: 1px solid $color_value;
+ }
+
+ .border-bottom-#{$color_name} {
+ border-bottom: 1px solid $color_value;
+ }
+
+ .border-left-#{$color_name} {
+ border-left: 1px solid $color_value;
+ }
+
+ .border-right-#{$color_name} {
+ border-right: 1px solid $color_value;
+ }
+
+ // 徽章发光颜色
+ .bg-#{$color_name},
+ .border-#{$color_name},
+ .badge-#{$color-name} {
+ &.badge-glow {
+ box-shadow: 0px 0px 10px $color_value;
+ }
+ }
+
+ // 徽章背景颜色
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .badge {
+ // 徽章浅色背景
+ &.badge-light-#{$color_name} {
+ background-color: rgba($color: $color_value, $alpha: 0.12);
+ color: $color_value !important;
+ }
+ }
+ }
+
+ // 遮罩颜色
+ .overlay-#{$color_name} {
+ @include bg-opacity($color_value, 0.6);
+ }
+
+ // 基本按钮
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .btn-#{$color_name} {
+ border-color: $color_value !important;
+ background-color: $color_value !important;
+ color: $white !important;
+
+ &:focus,
+ &:active,
+ &.active {
+ color: $white;
+ background-color: color-function($color_name, 'darken-1') !important;
+ }
+
+ &:hover:not(.disabled):not(:disabled) {
+ box-shadow: 0 8px 25px -8px rgba($color-value, 1);
+ }
+
+ &:not(:disabled):not(.disabled):active:focus {
+ box-shadow: none;
+ }
+ }
+ }
+
+ // 平面按钮
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .btn-flat-#{$color-name} {
+ background-color: transparent;
+ color: $color-value;
+
+ &:hover {
+ color: $color-value;
+ }
+
+ &:hover:not(.disabled):not(:disabled) {
+ background-color: rgba($color-value, 0.12);
+ }
+
+ &:active,
+ &.active,
+ &:focus {
+ background-color: rgba($color: $color_value, $alpha: 0.2);
+ color: $color_value;
+ }
+
+ &.dropdown-toggle::after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $color_value), '#', '%23'));
+ }
+ }
+ }
+
+ // 浮雕按钮
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .btn-relief-#{$color-name} {
+ background-color: $color-value;
+ box-shadow: inset 0 -3px 0 0 rgba($black, 0.2);
+ color: $white;
+ transition: all 0.2s ease;
+ @if $color_name == 'dark' {
+ &:hover:not(.disabled):not(:disabled) {
+ background-color: color-function($color_name, 'darken-3');
+ }
+ } @else {
+ &:hover:not(.disabled):not(:disabled) {
+ background-color: color-function($color_name, 'lighten-1');
+ }
+ }
+ &:active,
+ &.active,
+ &:focus {
+ background-color: color-function($color_name, 'darken-1');
+ }
+
+ &:hover {
+ color: $white;
+ }
+ &:active,
+ &.active {
+ outline: none;
+ box-shadow: none;
+ transform: translateY(3px);
+ }
+ }
+ }
+
+ // 轮廓按钮
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .btn-outline-#{$color_name} {
+ border: 1px solid $color_value !important;
+ background-color: transparent;
+ color: $color_value;
+
+ &:hover:not(.disabled):not(:disabled) {
+ background-color: rgba($color: $color_value, $alpha: 0.04);
+ color: $color_value;
+ }
+ &:not(:disabled):not(.disabled):active:focus {
+ box-shadow: none;
+ }
+ &:not(:disabled):not(.disabled):active,
+ &:not(:disabled):not(.disabled).active,
+ &:not(:disabled):not(.disabled):focus {
+ background-color: rgba($color: $color_value, $alpha: 0.2);
+ color: $color_value;
+ }
+
+ &.dropdown-toggle::after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $color_value), '#', '%23'));
+ }
+ // split toggle have show class
+ .show > &.dropdown-toggle {
+ background-color: rgba($color: $color_value, $alpha: 0.2);
+ color: $color_value;
+ }
+ }
+ }
+
+ // 涟漪效果按钮
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .btn-outline-#{$color_name},
+ .btn-flat-#{$color-name} {
+ &.waves-effect {
+ .waves-ripple {
+ background: radial-gradient(
+ rgba($color_value, 0.2) 0,
+ rgba($color_value, 0.3) 40%,
+ rgba($color_value, 0.4) 50%,
+ rgba($color_value, 0.5) 60%,
+ rgba($white, 0) 70%
+ );
+ }
+ }
+ }
+ }
+
+ // 邮件应用圆点按钮
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .bullet {
+ &.bullet-#{$color_name} {
+ background-color: $color_value;
+ }
+ }
+ }
+
+ // 模态
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .modal {
+ &.modal-#{$color_name} {
+ .modal-header {
+ .modal-title {
+ color: $color_value;
+ }
+ .close {
+ color: $color_value !important;
+ }
+ }
+ }
+ }
+ }
+
+ // 分页
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white' and $color_name != 'dark') {
+ .pagination-#{$color-name} {
+ .page-item {
+ &.active {
+ .page-link {
+ background: $color-value !important;
+ color: $white;
+
+ &:hover {
+ color: $white;
+ }
+ }
+ }
+
+ .page-link {
+ &:hover {
+ color: $color_value;
+ }
+ }
+
+ &.prev-item,
+ &.next-item {
+ .page-link:hover {
+ background: $color_value;
+ color: $white;
+ }
+ }
+ &.next-item,
+ &.next {
+ .page-link {
+ &:active,
+ &:hover {
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $color_value),
+ '#',
+ '%23'
+ )) !important;
+ }
+ }
+ }
+ }
+ &.prev-item,
+ &.prev {
+ .page-link {
+ &:active,
+ &:hover {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-left, 'currentColor', $color_value),
+ '#',
+ '%23'
+ )) !important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 胶囊导航
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white' and $color_name != 'dark') {
+ .nav-pill-#{$color-name} {
+ .nav-item {
+ .nav-link {
+ &.active {
+ color: $white;
+ background-color: $color_value !important;
+ border-color: $color_value;
+ box-shadow: 0 4px 18px -4px rgba($color_value, 0.65);
+ }
+ }
+ }
+ }
+ }
+
+ // 进度条进度
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .progress-bar-#{$color_name} {
+ background-color: rgba($color_value, 0.12);
+
+ .progress-bar {
+ background-color: $color-value;
+ }
+ }
+ }
+
+ // 时间线
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .timeline {
+ .timeline-point-#{$color_name} {
+ border-color: $color_value !important;
+
+ i,
+ svg {
+ stroke: $color_value !important;
+ }
+
+ &.timeline-point-indicator {
+ background-color: $color_value !important;
+ &:before {
+ background: rgba($color: $color_value, $alpha: 0.12) !important;
+ }
+ }
+ }
+ }
+ }
+
+ // 分隔线
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .divider.divider-#{$color-name} {
+ .divider-text {
+ &:before,
+ &:after {
+ border-color: $color-value !important;
+ }
+ }
+ }
+ }
+
+ // 表单元素/组件
+
+ // 单选复选框
+ // todo: 请在确认后将其删除
+ input:focus ~ .bg-#{$color_name} {
+ box-shadow: 0 0 0 0.075rem $white, 0 0 0 0.21rem $color_value !important;
+ }
+
+ // 自定义单选复选框
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .custom-control-#{$color_name} {
+ .custom-control-input:checked ~ .custom-control-label::before,
+ .custom-control-input:active ~ .custom-control-label::before {
+ border-color: $color_value;
+ background-color: $color_value;
+ }
+ &.custom-checkbox,
+ &.custom-radio {
+ .custom-control-input:checked ~ .custom-control-label::before,
+ .custom-control-input:active ~ .custom-control-label::before,
+ .custom-control-input:focus ~ .custom-control-label::before {
+ box-shadow: 0 2px 4px 0 rgba($color_value, 0.4) !important;
+ }
+ }
+ .custom-control-input:disabled:checked ~ .custom-control-label::before {
+ background-color: rgba($color_value, 0.65) !important;
+ border: none;
+ box-shadow: none !important;
+ }
+ .custom-control-input:focus ~ .custom-control-label::before {
+ border-color: $color_value;
+ }
+ }
+ }
+
+ // Bootstrap 自定义开关
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .custom-switch-#{$color-name} {
+ .custom-control-input:checked ~ .custom-control-label::before {
+ background-color: $color_value !important;
+ color: $white;
+ transition: all 0.2s ease-out;
+ }
+ }
+ }
+
+ // 多选
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .select2-#{$color-name} {
+ .select2-container--default {
+ .select2-selection--multiple {
+ .select2-selection__choice {
+ background: $color_value !important;
+ border-color: $color_value !important;
+ }
+ }
+ }
+ }
+ }
+ } @else {
+ .text-#{$color_name}.text-#{$color_type} {
+ color: $color_value !important;
+ }
+
+ .bg-#{$color_name}.bg-#{$color_type} {
+ background-color: $color_value !important;
+ }
+
+ .border-#{$color_name}.border-#{$color_type} {
+ border: 1px solid $color_value !important;
+ }
+
+ .border-top-#{$color_name}.border-top-#{$color_type} {
+ border-top: 1px solid $color_value !important;
+ }
+
+ .border-bottom-#{$color_name}.border-bottom-#{$color_type} {
+ border-bottom: 1px solid $color_value !important;
+ }
+
+ .border-left-#{$color_name}.border-left-#{$color_type} {
+ border-left: 1px solid $color_value !important;
+ }
+
+ .border-right-#{$color_name}.border-right-#{$color_type} {
+ border-right: 1px solid $color_value !important;
+ }
+
+ .overlay-#{$color_name}.overlay-#{$color_type} {
+ @include bg-opacity($color_value, 0.6);
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/colors/palette-gradient.scss b/src/@core/scss/base/core/colors/palette-gradient.scss
new file mode 100644
index 0000000..f28313c
--- /dev/null
+++ b/src/@core/scss/base/core/colors/palette-gradient.scss
@@ -0,0 +1,72 @@
+// ================================================================================================
+// 文件名:palette-gradient.scss
+// 描述:系统渐变颜色样式
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@function color-function($color, $type) {
+ @if map-has-key($colors, $color) {
+ $curr_color: map-get($colors, $color);
+ @if map-has-key($curr_color, $type) {
+ @return map-get($curr_color, $type);
+ }
+ }
+ // @warn "Unknown `#{name}` in $colors.";
+ @return null;
+}
+
+// 调色板
+@import 'palette-variables';
+
+@import 'bootstrap/scss/mixins/_gradients';
+@import 'bootstrap/scss/mixins/gradients';
+
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type == 'base' {
+ @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') {
+ .bg-gradient-#{$color_name},
+ .btn-gradient-#{$color_name} {
+ color: $white;
+ transition: all 0.2s ease;
+ @if $color_name == 'dark' {
+ @if (color-function($color_name, 'base') != null) {
+ @include gradient-directional(map-get(($color), 'base'), map-get(($color), 'darken-2'), 47deg);
+ }
+ // 深色布局
+ .dark-layout & {
+ @include gradient-directional(map-get(($color), 'darken-2'), map-get(($color), 'base'), 47deg);
+ background-repeat: repeat;
+ }
+ background-repeat: repeat;
+ } @else {
+ @if (color-function($color_name, 'base') != null) {
+ @include gradient-directional(map-get(($color), 'base'), map-get(($color), 'lighten-2'), 47deg);
+ }
+ background-repeat: repeat;
+ }
+ &:hover,
+ &:active {
+ color: $white;
+ }
+ &:hover:not(.disabled):not(:disabled) {
+ transform: translateY(-2px);
+ }
+ &:active {
+ transform: translateY(0);
+ }
+ &:active,
+ &:focus {
+ @if (color-function($color_name, 'darken-2') != null) {
+ @include gradient-directional(map-get(($color), 'darken-2'), map-get(($color), 'base'), 47deg);
+ }
+ background-repeat: repeat;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/colors/palette-noui.scss b/src/@core/scss/base/core/colors/palette-noui.scss
new file mode 100644
index 0000000..e63b872
--- /dev/null
+++ b/src/@core/scss/base/core/colors/palette-noui.scss
@@ -0,0 +1,30 @@
+// ================================================================================================
+// 文件名:pallette-noui.scss
+// 描述:noui 系统颜色样式
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 调色板
+@import 'palette-variables';
+
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type == 'base' {
+ .slider-#{$color_name} {
+ background-color: rgba($color_value, 0.12);
+ .noUi-connect {
+ background: $color_value !important;
+ }
+ &.noUi-connect {
+ background: $color_value !important;
+ }
+ .noUi-handle {
+ border-color: $color_value !important;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/colors/palette-variables.scss b/src/@core/scss/base/core/colors/palette-variables.scss
new file mode 100644
index 0000000..3542e34
--- /dev/null
+++ b/src/@core/scss/base/core/colors/palette-variables.scss
@@ -0,0 +1,126 @@
+// Overrides user _variables-components
+@import '../../bootstrap-extended/include';
+
+// Google Color Palette defined: http://www.google.com/design/spec/style/color.html
+
+$white-color: (
+ 'base': #ffffff
+);
+$black-color: (
+ 'base': #000000
+);
+$dark-color: (
+ 'base': theme-color('dark'),
+ 'darken-1': #343434,
+ 'darken-2': #1e1e1e,
+ 'darken-3': #626262
+);
+$light-color: (
+ 'base': theme-color('light')
+);
+
+$primary-color: (
+ 'lighten-5': lighten(theme-color('primary'), 25%),
+ 'lighten-4': lighten(theme-color('primary'), 20%),
+ 'lighten-3': lighten(theme-color('primary'), 15%),
+ 'lighten-2': lighten(theme-color('primary'), 10%),
+ 'lighten-1': lighten(theme-color('primary'), 5%),
+ 'base': theme-color('primary'),
+ 'darken-1': darken(theme-color('primary'), 5%),
+ 'darken-2': darken(theme-color('primary'), 10%),
+ 'darken-3': darken(theme-color('primary'), 15%),
+ 'darken-4': darken(theme-color('primary'), 20%),
+ 'accent-1': #bdfdff,
+ 'accent-2': #8afbff,
+ 'accent-3': #57faff,
+ 'accent-4': #3df9ff
+);
+$secondary-color: (
+ 'lighten-5': lighten(theme-color('secondary'), 25%),
+ 'lighten-4': lighten(theme-color('secondary'), 20%),
+ 'lighten-3': lighten(theme-color('secondary'), 15%),
+ 'lighten-2': lighten(theme-color('secondary'), 10%),
+ 'lighten-1': lighten(theme-color('secondary'), 5%),
+ 'base': theme-color('secondary'),
+ 'darken-1': darken(theme-color('secondary'), 5%),
+ 'darken-2': darken(theme-color('secondary'), 10%),
+ 'darken-3': darken(theme-color('secondary'), 15%),
+ 'darken-4': darken(theme-color('secondary'), 20%)
+);
+$success-color: (
+ 'lighten-5': lighten(theme-color('success'), 25%),
+ 'lighten-4': lighten(theme-color('success'), 20%),
+ 'lighten-3': lighten(theme-color('success'), 15%),
+ 'lighten-2': lighten(theme-color('success'), 10%),
+ 'lighten-1': lighten(theme-color('success'), 5%),
+ 'base': theme-color('success'),
+ 'darken-1': darken(theme-color('success'), 5%),
+ 'darken-2': darken(theme-color('success'), 10%),
+ 'darken-3': darken(theme-color('success'), 15%),
+ 'darken-4': darken(theme-color('success'), 20%),
+ 'accent-1': #e1fff1,
+ 'accent-2': #aeffd9,
+ 'accent-3': #7bffc1,
+ 'accent-4': #62ffb5
+);
+$info-color: (
+ 'lighten-5': lighten(theme-color('info'), 25%),
+ 'lighten-4': lighten(theme-color('info'), 20%),
+ 'lighten-3': lighten(theme-color('info'), 15%),
+ 'lighten-2': lighten(theme-color('info'), 10%),
+ 'lighten-1': lighten(theme-color('info'), 5%),
+ 'base': theme-color('info'),
+ 'darken-1': darken(theme-color('info'), 5%),
+ 'darken-2': darken(theme-color('info'), 10%),
+ 'darken-3': darken(theme-color('info'), 15%),
+ 'darken-4': darken(theme-color('info'), 20%),
+ 'accent-1': #feffff,
+ 'accent-2': #cbf5ff,
+ 'accent-3': #98ecff,
+ 'accent-4': #7fe7ff
+);
+$warning-color: (
+ 'lighten-5': lighten(theme-color('warning'), 25%),
+ 'lighten-4': lighten(theme-color('warning'), 20%),
+ 'lighten-3': lighten(theme-color('warning'), 15%),
+ 'lighten-2': lighten(theme-color('warning'), 10%),
+ 'lighten-1': lighten(theme-color('warning'), 5%),
+ 'base': theme-color('warning'),
+ 'darken-1': darken(theme-color('warning'), 5%),
+ 'darken-2': darken(theme-color('warning'), 10%),
+ 'darken-3': darken(theme-color('warning'), 15%),
+ 'darken-4': darken(theme-color('warning'), 20%),
+ 'accent-1': #fff5ef,
+ 'accent-2': #ffe5d8,
+ 'accent-3': #fff6f3,
+ 'accent-4': #ffe3da
+);
+$danger-color: (
+ 'lighten-5': lighten(theme-color('danger'), 25%),
+ 'lighten-4': lighten(theme-color('danger'), 20%),
+ 'lighten-3': lighten(theme-color('danger'), 15%),
+ 'lighten-2': lighten(theme-color('danger'), 10%),
+ 'lighten-1': lighten(theme-color('danger'), 5%),
+ 'base': theme-color('danger'),
+ 'darken-1': darken(theme-color('danger'), 5%),
+ 'darken-2': darken(theme-color('danger'), 10%),
+ 'darken-3': darken(theme-color('danger'), 15%),
+ 'darken-4': darken(theme-color('danger'), 20%),
+ 'accent-1': #ffeef1,
+ 'accent-2': #ffd6db,
+ 'accent-3': #ffecee,
+ 'accent-4': #ffd3d7
+);
+
+$colors: (
+ 'white': $white-color,
+ 'black': $black-color,
+ 'dark': $dark-color,
+ 'light': $light-color,
+ 'primary': $primary-color,
+ 'secondary': $secondary-color,
+ 'success': $success-color,
+ 'info': $info-color,
+ 'warning': $warning-color,
+ 'danger': $danger-color
+);
diff --git a/src/@core/scss/base/core/layouts/_content.scss b/src/@core/scss/base/core/layouts/_content.scss
new file mode 100644
index 0000000..6cdbaaf
--- /dev/null
+++ b/src/@core/scss/base/core/layouts/_content.scss
@@ -0,0 +1,466 @@
+// ================================================================================================
+// 文件名:content.scss
+// 描述:适配不同屏幕大小、布局和设备(桌面或移动端)的页面内容层别 SCSS
+// --------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ==============================================================================================
+
+// 展开和折叠统计信息的左侧区域边距左侧宽度和边距
+@import '../mixins/main-menu-mixin';
+
+html {
+ font-size: $base-font-size;
+ height: 100%;
+ letter-spacing: 0.01rem;
+ body {
+ height: 100%;
+ background-color: $body-bg;
+ direction: $body-direction;
+ // 段落行高
+ p {
+ line-height: 1.5rem;
+ }
+ }
+ .content {
+ padding: 0;
+ position: relative;
+ transition: 300ms ease all;
+ backface-visibility: hidden;
+ min-height: calc(100% - #{$footer-height});
+ margin-left: $menu-expanded-width;
+ &.app-content {
+ padding: calc(#{$content-padding} + #{$navbar-height} + #{$floating-nav-margin}) #{$content-padding} 0;
+ &.show-overlay {
+ .content-overlay {
+ z-index: 10;
+ opacity: 1;
+ ~ .header-navbar-shadow {
+ display: none;
+ }
+ }
+ }
+ .content-overlay {
+ position: fixed;
+ opacity: 0;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba($black, 0.5);
+ cursor: pointer;
+ transition: all 0.7s, z-index 0s;
+ z-index: -1;
+ }
+ .content-area-wrapper {
+ display: flex;
+ position: relative;
+ overflow: hidden; // 用于应用
+ .content-wrapper,
+ .content-body {
+ height: 100%;
+ }
+ }
+ }
+ .body-content-overlay {
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ position: absolute;
+ display: block;
+ z-index: 4;
+ visibility: hidden;
+ opacity: 0;
+ transition: all 0.3s ease;
+ &.show {
+ visibility: visible;
+ transition: all 0.3s ease;
+ opacity: 1;
+ background-color: rgba($black, 0.2);
+ border-radius: $border-radius/2;
+ }
+ }
+ .content-wrapper {
+ .content-header-title {
+ font-weight: 500;
+ color: $gray-400;
+ padding-right: $spacer;
+ border-right: 1px solid lighten($gray-600, 10%);
+ }
+ .content-header-right {
+ .dropdown-toggle {
+ &::after {
+ display: none;
+ }
+ i,
+ svg {
+ margin-right: 0;
+ }
+ }
+ .btn-icon {
+ padding: 0.8rem;
+ i,
+ svg {
+ height: $font-size-base;
+ width: $font-size-base;
+ }
+ }
+ }
+ }
+ }
+
+ // 看板应用类没有内容布局,所以添加下列类和选项
+ // 浮动副导航栏
+ .navbar-floating {
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ #{$floating-nav-margin}
+ );
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ 0rem,
+ #{$floating-nav-margin},
+ 0rem,
+ 2
+ );
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ #{$floating-nav-margin},
+ 0rem,
+ 2
+ );
+ }
+ }
+ }
+ }
+
+ // 副导航栏隐藏
+ .navbar-hidden {
+ .app-content {
+ padding: #{$content-padding} #{$content-padding} 0 #{$content-padding} !important;
+ }
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, 0rem, #{$footer-height});
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, 0rem, 0rem, 0rem, 0rem, 2);
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, 0rem, #{$footer-height}, 0rem, 0rem, 2);
+ }
+ }
+ }
+ }
+
+ // 内容随动导航栏
+ .navbar-static {
+ .main-menu {
+ top: 0;
+ }
+ .content {
+ min-height: calc(100% - calc(#{$navbar-height} + #{$footer-height}));
+ }
+ .app-content {
+ padding: #{$content-padding} #{$content-padding} 0 #{$content-padding};
+ }
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, #{$navbar-height}, #{$footer-height});
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, #{$navbar-height}, 0rem, 0rem, 0rem, 2);
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ 0rem,
+ 0rem,
+ 2
+ );
+ }
+ }
+ }
+ }
+
+ // 粘性导航栏
+ .navbar-sticky {
+ .app-content {
+ padding: calc(#{$content-padding} + #{$navbar-height}) #{$content-padding} 0 #{$content-padding};
+ }
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, #{$navbar-height}, #{$footer-height});
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(#{$content-padding}, #{$navbar-height}, 0rem, 0rem, 0rem, 2);
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ 0rem,
+ 0rem,
+ 2
+ );
+ }
+ }
+ }
+ }
+
+ // 粘性和静态导航栏的搜索框宽度
+ .navbar-static,
+ .navbar-sticky {
+ .nav.header-navbar {
+ .navbar-container {
+ padding-left: 1.6rem;
+ padding-right: 1.6rem;
+ .search-input {
+ .search-list {
+ &.show {
+ width: 98%;
+ left: 1%;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 固定页脚
+ .footer-fixed {
+ .content {
+ &.app-content {
+ padding-bottom: $footer-height !important; // 页脚的固定高度增加额外的底部填充以协调
+ }
+ }
+ }
+
+ // 删除布局中第一列的左边距
+ [data-col='1-column'] {
+ .header-navbar {
+ // 浮动导航的自定义宽度
+ &.floating-nav {
+ width: calc(
+ 100vw - (100vw - 100%) - calc(#{$content-padding} * 2)
+ ) !important; // 覆盖所有导航栏类型宽度
+ }
+ width: 100%; // 其他导航栏的全宽
+ left: 0 !important;
+ }
+ .content,
+ .footer {
+ margin-left: 0px !important;
+ }
+
+ // 水平导航布局
+ &.horizontal-layout {
+ .header-navbar {
+ width: 100% !important;
+ }
+ .app-content {
+ padding: calc(#{$content-padding} + #{$navbar-height} + #{$floating-nav-margin}) #{$content-padding} 0 #{$content-padding} !important; // 必须检查所有导航栏类型
+ }
+ &.footer-fixed {
+ .app-content {
+ padding: calc(#{$content-padding} + #{$navbar-height} + #{$floating-nav-margin}) #{$content-padding} #{$footer-height}
+ #{$content-padding} !important; // 必须检查所有导航栏类型
+ }
+ }
+ }
+ }
+
+ // 空白页
+ .blank-page {
+ .content {
+ margin-left: 0; // 两种情况下都不使用
+ // overflow-x: hidden, sm 屏幕中 y 轴溢出问题解决办法
+ &.app-content {
+ overflow: overlay;
+ overflow-x: hidden;
+ padding: 0 !important;
+ transition: none;
+ // 删除标题导航栏顶部阴影的空白
+ .header-navbar-shadow {
+ display: none;
+ }
+ }
+ }
+ // 空白页内容
+ .content-wrapper {
+ padding: 0 !important;
+ // 内容水平垂直居中
+ .flexbox-container {
+ display: flex;
+ align-items: center;
+ height: 100vh;
+ height: calc(var(--vh, 1vh) * 100);
+ justify-content: center;
+ }
+ }
+ }
+
+ .pace {
+ .pace-progress {
+ background: $primary;
+ }
+ }
+}
+
+.app-content.center-layout {
+ overflow: hidden;
+}
+
+// 分离式和通用式布局
+@include media-breakpoint-up(lg) {
+ body {
+ // Normal sidebar
+ .content-right {
+ width: calc(100vw - (100vw - 100%) - #{$sidebar-width});
+ float: right;
+ }
+ .content-left {
+ width: calc(100vw - (100vw - 100%) - #{$sidebar-width});
+ float: left;
+ }
+ // 分离式边栏
+ .content-detached {
+ width: 100%;
+ &.content-right {
+ float: right;
+ margin-left: -$sidebar-width;
+ .content-body {
+ margin-left: calc(#{$sidebar-width} + #{$content-padding});
+ }
+ }
+ &.content-left {
+ float: left;
+ margin-right: -$sidebar-width;
+ .content-body {
+ margin-right: calc(#{$sidebar-width} + #{$content-padding});
+ }
+ }
+ }
+ }
+ .sidebar-right.sidebar-sticky {
+ float: right !important;
+ margin-left: -$sidebar-width;
+ width: $sidebar-width !important;
+ margin-top: $navbar-height + 1.25;
+ }
+}
+
+@include media-breakpoint-down(xs) {
+ html body .app-content {
+ padding: calc(#{$content-padding} - 0.8rem + #{$navbar-height} + #{$floating-nav-margin})
+ calc(#{$content-padding} - 0.8rem) 0 calc(#{$content-padding} - 0.8rem) !important; // - 0.8rem to reduce padding in small screen
+ }
+
+ // 导航栏跟随内容
+ html body.navbar-static .app-content {
+ padding: calc(#{$content-padding} - 0.8rem) calc(#{$content-padding} - 0.8rem) 0 calc(#{$content-padding} - 0.8rem) !important; // - 0.8rem to reduce padding in small screen
+ }
+
+ // 粘性导航栏
+ html body.navbar-sticky .app-content {
+ padding: calc(#{$content-padding} - 0.8rem + #{$navbar-height}) calc(#{$content-padding} - 0.8rem) 0
+ calc(#{$content-padding} - 0.8rem) !important; // - 0.8rem to reduce padding in small screen
+ }
+
+ // 导航栏隐藏
+ html body.navbar-hidden .app-content {
+ padding: calc(#{$content-padding} - 0.8rem) calc(#{$content-padding} - 0.8rem) 0 calc(#{$content-padding} - 0.8rem) !important; // - 0.8rem to reduce padding in small screen
+ }
+}
+
+@include media-breakpoint-down(xs) {
+ .navbar-static,
+ .navbar-sticky {
+ .app-content {
+ .header-navbar {
+ .navbar-container {
+ padding-left: 1rem;
+ padding-right: 0.5rem;
+ }
+ }
+ }
+ }
+}
+
+// IE 全屏幕样式
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ html.full-screen {
+ width: 100%;
+ .content.app-content {
+ height: 100%;
+ overflow: scroll;
+ overflow-x: hidden;
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/layouts/_footer.scss b/src/@core/scss/base/core/layouts/_footer.scss
new file mode 100644
index 0000000..e2341c8
--- /dev/null
+++ b/src/@core/scss/base/core/layouts/_footer.scss
@@ -0,0 +1,71 @@
+// ================================================================================================
+// 文件名:Footer.scss
+// 描述:主页脚样式
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 页面底部粘性页脚(底部固定)
+footer {
+ &.footer {
+ padding: 0.8rem $content-padding;
+ min-height: $footer-height;
+ transition: 300ms ease all;
+
+ // 心形 SVG 图标
+ span {
+ i,
+ svg {
+ height: 1.51rem;
+ width: 1.51rem;
+ font-size: 1.51rem;
+ margin-left: 0.5rem;
+ color: $danger;
+ }
+ }
+ .scroll-top {
+ padding: 0.81rem 0.83rem;
+ }
+ }
+
+ // 阴影和边框选项
+ &.footer-shadow {
+ box-shadow: $box-shadow;
+ }
+ &.footer-border {
+ border-top: 1px solid $border-color;
+ }
+}
+
+// 固定页脚
+.footer-fixed {
+ footer {
+ position: fixed !important;
+ z-index: 1030;
+ right: 0;
+ left: 0;
+ bottom: 0;
+
+ // 浅色模式页脚
+ &.footer-light {
+ background: $white;
+ box-shadow: $box-shadow;
+ }
+ // 深色模式页脚
+ &.footer-dark {
+ background: $gray-600;
+ color: $white;
+ }
+ }
+}
+
+// 页脚滚动顶部按钮
+.scroll-top {
+ position: fixed;
+ bottom: 5%;
+ right: 30px;
+ display: none;
+ z-index: 99;
+}
diff --git a/src/@core/scss/base/core/layouts/_sidebar.scss b/src/@core/scss/base/core/layouts/_sidebar.scss
new file mode 100644
index 0000000..6e92fc3
--- /dev/null
+++ b/src/@core/scss/base/core/layouts/_sidebar.scss
@@ -0,0 +1,76 @@
+// ================================================================================================
+// 文件名:Sidebar.scss
+// 描述:内容层别侧边栏特定 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 基础侧边栏
+.sidebar {
+ position: relative;
+ width: 100%;
+ height: 100%;
+
+ // 适用于桌面端
+ @include media-breakpoint-up(lg) {
+ vertical-align: top;
+ }
+}
+.sidebar-fixed {
+ position: fixed;
+ height: 100%;
+ overflow: scroll;
+}
+
+.sidenav-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 120vh;
+ background-color: rgba($black, 0.5);
+ z-index: 997;
+ display: block;
+ visibility: hidden;
+ opacity: 0;
+ transition: all 0.5s ease;
+ &.show {
+ opacity: 1;
+ visibility: visible;
+ transition: all 0.5s ease;
+ }
+}
+
+.drag-target {
+ height: 100%;
+ width: 40px;
+ position: fixed;
+ top: 0;
+ left: -10px;
+ z-index: 1036;
+}
+
+.sidebar-detached{
+ .sidebar{
+ width: $sidebar-width;
+ }
+}
+
+@include media-breakpoint-up(lg) {
+ .sidebar-left {
+ float: left;
+ }
+ .sidebar-right {
+ float: right;
+ }
+}
+
+@include media-breakpoint-down(md) {
+ .sidebar-detached{
+ .sidebar{
+ width: 100%;
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/menu/_navigation.scss b/src/@core/scss/base/core/menu/_navigation.scss
new file mode 100644
index 0000000..d241008
--- /dev/null
+++ b/src/@core/scss/base/core/menu/_navigation.scss
@@ -0,0 +1,205 @@
+// ================================================================================================
+// 文件名:navigation.scss
+// 描述:默认折叠,鼠标悬停时展开的垂直导航遮罩布局主导航栏 SCSS 文件,
+// 支持浅色/深色,翻转布局(从右到左),右侧图标,滚动条和菜单项分隔。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 导入第一个导航主菜单混入
+@import '../mixins/main-menu-mixin';
+
+// 基本主菜单
+.main-menu {
+ z-index: 1031;
+ position: absolute;
+ display: table-cell;
+ height: 100%;
+ overflow: hidden;
+
+ &.menu-light {
+ @include menu-theme($body-color, $white);
+ }
+
+ &.menu-dark {
+ @include menu-theme($menu-dark-color, $menu-dark-bg-color);
+ }
+
+ &.menu-fixed {
+ position: fixed;
+ }
+ &.menu-static {
+ height: 100%;
+ padding-bottom: calc(100% - 20rem);
+ .main-menu-content {
+ height: unset !important;
+ }
+ }
+
+ &.menu-shadow {
+ box-shadow: 0 0 15px 0 rgba($black, 0.05);
+ }
+
+ &.menu-border {
+ border-right: 1px solid $border-color;
+ }
+
+ // 导航滚动条阴影
+ .shadow-bottom {
+ display: none;
+ position: absolute;
+ z-index: 2;
+ height: 50px;
+ width: 100%;
+ pointer-events: none;
+ margin-top: -0.7rem;
+ filter: blur(5px);
+ background: linear-gradient(#fff 41%, hsla(0, 0%, 100%, 0.11) 95%, hsla(0, 0%, 100%, 0));
+ .bordered-layout & {
+ background: linear-gradient($body-bg 41%, hsla(0, 0%, 100%, 0.11) 95%, hsla(0, 0%, 100%, 0));
+ }
+ }
+
+ // 导航内滚动条
+ &.menu-native-scroll {
+ .main-menu-content {
+ overflow-y: scroll !important;
+ }
+ }
+
+ .navbar-header {
+ height: 100%;
+ width: $menu-expanded-width;
+ height: $navbar-height;
+ position: relative;
+ padding: 0.35rem 1rem 0.8rem 1.64rem;
+ transition: 300ms ease all, background 0s;
+ .navbar-brand {
+ display: flex;
+ align-items: center;
+ margin-top: 1rem;
+ font-size: inherit;
+ .brand-logo img {
+ max-width: 36px;
+ }
+ .brand-text {
+ color: $primary;
+ padding-left: 1rem;
+ margin-bottom: 0;
+ font-weight: 600;
+ letter-spacing: 0.01rem;
+ font-size: 1.75rem;
+ animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein;
+ }
+ }
+ .modern-nav-toggle {
+ animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein;
+ }
+ }
+
+ .main-menu-content {
+ height: calc(100% - #{$navbar-height}) !important;
+ position: relative;
+ .ps__rail-y {
+ z-index: 3;
+ }
+ }
+
+ ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+
+ &.navigation-main {
+ overflow-x: hidden;
+ padding-bottom: .75rem;
+ > li:first-child {
+ margin-top: 0.5rem;
+ }
+ }
+ }
+
+ a {
+ outline: none;
+
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ }
+ }
+}
+
+// 主导航栏
+.navigation {
+ font-size: 1.1rem;
+ font-family: $font-family-monospace;
+ font-weight: 400;
+ overflow-y: hidden;
+ padding-bottom: 20px;
+
+ .navigation-header {
+ font-family: $font-family-monospace;
+ font-weight: $headings-font-weight;
+ line-height: $headings-line-height;
+ padding: 12px 22px;
+ font-size: 0.9rem;
+ text-transform: uppercase;
+ }
+
+ li {
+ position: relative;
+ white-space: nowrap;
+
+ a {
+ display: block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ i,
+ svg {
+ height: 11px;
+ width: 11px;
+ font-size: 11px;
+ margin-right: 1.38rem;
+ }
+ }
+
+ &.menu-item-animating {
+ transition: height 0.25s ease-in-out;
+ }
+
+ &.disabled {
+ a {
+ cursor: not-allowed;
+ opacity: 0.65;
+ pointer-events: none;
+ }
+ }
+ }
+}
+
+// 小屏幕设备(移动端)的导航栏弹出图标按钮
+@include media-breakpoint-down(sm) {
+ // menu hide/open animation
+ .menu-hide .main-menu,
+ .menu-open .main-menu {
+ transition: transform 0.25s, top 0.35s, height 0.35s;
+ }
+
+ .main-menu {
+ transform: translate3d(-240px, 0, 0);
+ backface-visibility: hidden;
+ perspective: 1000;
+ }
+
+ .menu-open .main-menu {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@include media-breakpoint-up(md) {
+ .drag-target {
+ z-index: 0;
+ }
+}
diff --git a/src/@core/scss/base/core/menu/menu-types/horizontal-menu.scss b/src/@core/scss/base/core/menu/menu-types/horizontal-menu.scss
new file mode 100644
index 0000000..630bbf8
--- /dev/null
+++ b/src/@core/scss/base/core/menu/menu-types/horizontal-menu.scss
@@ -0,0 +1,584 @@
+// ================================================================================================
+// 文件名:horizontal-menu.scss
+// 描述:水平导航布局主导航栏 SCSS 文件,支持所有设备。支持项目分离的浅色/深色,翻转布局(从右到左),右侧图标,边框菜单
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../../../bootstrap-extended/include';
+@import '../../../components/include';
+
+// 导入第一个导航主菜单混入
+@import '../../mixins/main-menu-mixin';
+
+// 水平导航菜单
+.horizontal-menu {
+ // 内容区边距
+ .content {
+ margin-left: 0;
+ &.show-overlay {
+ .content-overlay {
+ z-index: 998 !important;
+ }
+ }
+ }
+
+ // 所有导航栏容器间距
+ .navbar.header-navbar {
+ .navbar-container {
+ padding: 0.8rem #{$content-padding};
+ }
+ }
+
+ .horizontal-menu-wrapper {
+ .header-navbar {
+ min-height: $horizontal-menu-height;
+ }
+ }
+
+ footer {
+ position: static;
+ }
+
+ // 水平导航标题隐藏
+ .horizontal-menu-wrapper {
+ position: fixed;
+ top: 62px;
+ z-index: 990;
+ width: 100%;
+
+ .header-navbar {
+ .navbar-container {
+ padding: 0 1rem;
+ width: 100%;
+ }
+ .navbar-header {
+ display: none;
+ }
+ }
+ }
+ .header-navbar {
+ background: $white;
+ z-index: 999 !important;
+ line-height: 1;
+ min-height: auto;
+ // 副导航栏 LOGO
+ &.navbar-horizontal.floating-nav {
+ width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2));
+ background: $white;
+ }
+ .navbar-container {
+ border-radius: $border-radius;
+ }
+ &.navbar-fixed {
+ position: fixed;
+ width: 100%;
+ }
+ &.navbar-brand-center {
+ .navbar-header {
+ position: absolute;
+ left: calc(50% - 75px); // left 50% - LOGO 宽度
+ padding: 0;
+ z-index: 1000;
+ .navbar-brand {
+ display: flex;
+ align-items: center;
+ margin-right: 0;
+ font-size: inherit;
+ .brand-logo img {
+ max-width: 36px;
+ }
+
+ // LOGO 文字
+ .brand-text {
+ color: $primary;
+ padding-left: 1rem;
+ margin-bottom: 0;
+ font-weight: 600;
+ letter-spacing: 0.01rem;
+ font-size: 1.75rem;
+ }
+ }
+ }
+ }
+
+ &.navbar-horizontal {
+ .nav-link {
+ &.dropdown-toggle {
+ &::after {
+ left: 0.4rem;
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $body-color), '#', '%23'));
+ }
+ }
+ }
+ .sidebar-group-active {
+ .dropdown-toggle {
+ &::after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ }
+ .dropdown-menu::before {
+ display: none;
+ }
+ .dropdown-menu {
+ min-width: 215px;
+ border: none;
+ margin-top: 0;
+ min-height: 52px;
+ .disabled {
+ pointer-events: none !important;
+ a {
+ color: $gray-600;
+ }
+ }
+ .dropdown-toggle::after {
+ left: auto;
+ position: absolute;
+ top: 50%;
+ margin-top: -7px;
+ right: 1rem;
+ // content: '\e844' !important;
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
+ }
+ .dropdown-item {
+ font-size: 1rem;
+ padding-top: 0.68rem;
+ padding-bottom: 0.68rem;
+ display: flex;
+ align-items: center;
+ }
+ .dropdown-submenu {
+ position: relative;
+
+ &.openLeft {
+ .dropdown-menu {
+ left: auto !important;
+ right: 100% !important;
+ }
+ }
+
+ &.sidebar-group-active {
+ background: $body-bg;
+ }
+
+ & > .dropdown-menu {
+ position: absolute;
+ top: 0 !important;
+ left: 100% !important;
+ i,
+ svg {
+ height: 11px !important;
+ width: 11px !important;
+ font-size: 11px !important;
+ }
+ }
+ }
+ }
+ ul#main-menu-navigation > li {
+ padding-top: 0.857rem;
+ padding-bottom: 0.857rem;
+
+ > .dropdown-menu {
+ a {
+ & > * {
+ transition: all 0.2s ease;
+ }
+ &:hover {
+ background-color: transparent;
+ color: $body-color;
+ & > * {
+ transform: translateX(5px);
+ transition: transform 0.2s ease;
+ }
+ }
+ }
+ .active > a {
+ background: $body-bg;
+ color: $primary;
+ font-weight: 500;
+ }
+ .open {
+ &.active {
+ > a {
+ color: $body-color;
+ font-weight: normal;
+ }
+ }
+ }
+ }
+ i,
+ svg {
+ margin-right: 0.5rem;
+ height: 17px;
+ width: 17px;
+ font-size: 1.2rem;
+ }
+ > a {
+ padding: 0.715rem 1.25rem;
+ display: flex;
+ margin-right: 0.715rem;
+ }
+ &:hover {
+ > a {
+ background: $body-bg;
+ border-radius: 4px;
+ }
+ }
+ &.active {
+ > a {
+ background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7));
+ box-shadow: 0px 0px 6px 1px rgba($primary, 0.6);
+ color: $white;
+ border-radius: 4px;
+ }
+ }
+ }
+ }
+ }
+
+ .navigation-header {
+ font-family: inherit;
+ color: #929292;
+ padding: 8px 20px;
+ font-size: 1rem;
+ text-transform: uppercase;
+ }
+
+ .navbar-dark {
+ .nav-item {
+ &.active > a {
+ border-bottom: 2px solid $primary;
+ background-color: #313c50;
+ }
+ }
+ }
+}
+
+.horizontal-layout {
+ // 浮动副导航栏
+ &.navbar-floating {
+ // 水平导航布局阴影位置和高度固定
+ .header-navbar-shadow {
+ height: 80px;
+ }
+ @include media-breakpoint-up(xl) {
+ .header-navbar-shadow {
+ top: 45px;
+ }
+ }
+ &:not(.blank-page) {
+ .app-content {
+ // padding-top: 9.75rem;
+ padding: calc(#{$content-padding} + #{$navbar-height}* 2 + #{$floating-nav-margin}) #{$content-padding} 0 #{$content-padding}; // * 2 as we have 2 navbar (menu + navbar) in horizontal layout.
+ }
+ }
+ .horizontal-menu-wrapper {
+ background: linear-gradient(
+ to bottom,
+ rgba(248, 248, 248, 0.95) 44%,
+ rgba(248, 248, 248, 0.46) 73%,
+ rgba($white, 0) 100%
+ );
+ background-repeat: repeat-x;
+ .navbar-horizontal.floating-nav {
+ margin: $floating-nav-margin $content-padding 0;
+ }
+ }
+
+ // 应用页面内容区域包装高度
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ #{$floating-nav-margin},
+ #{$horizontal-menu-height},
+ 1,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ 0rem,
+ #{$floating-nav-margin},
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ #{$floating-nav-margin},
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ }
+
+ // 粘性副导航栏
+ &.navbar-sticky {
+ .app-content {
+ padding: calc(#{$content-padding} + #{$navbar-height}* 2) #{$content-padding} 0 #{$content-padding};
+ }
+ .header-navbar {
+ background-color: $body-bg;
+ box-shadow: none;
+ }
+ .horizontal-menu-wrapper {
+ .navbar-horizontal.header-navbar.fixed-top {
+ left: 0;
+ top: 62px;
+ background-color: $white;
+ box-shadow: 0 4px 24px 0 rgba($black, 0.1);
+ }
+ }
+
+ // 应用页面内容区域包装高度
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ 0rem,
+ #{$horizontal-menu-height},
+ 1,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ 0rem,
+ 0rem,
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ 0rem,
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ }
+ // 固定副导航栏
+ &.navbar-static {
+ .app-content {
+ padding: calc(#{$content-padding} + #{$horizontal-menu-height}) #{$content-padding} 0 #{$content-padding};
+ }
+ .content {
+ min-height: calc(100% - calc(#{$horizontal-menu-height} + calc(#{$footer-height} + 0.2rem)));
+ }
+ .header-navbar {
+ background-color: $body-bg;
+ box-shadow: none;
+ }
+ .horizontal-menu-wrapper {
+ position: relative;
+ .navbar-horizontal.header-navbar {
+ background: $white;
+ // 水平导航布局左侧修正
+ &.navbar-static-top {
+ left: 0;
+ width: 100%;
+ }
+ }
+ }
+ // 应用页面内容区域包装高度
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ calc(#{$footer-height} + 0.2rem),
+ 0rem,
+ #{$horizontal-menu-height},
+ 1,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ 0rem,
+ 0rem,
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ #{$navbar-height},
+ #{$footer-height},
+ 0rem,
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ }
+
+ // 副导航栏隐藏
+ &.navbar-hidden {
+ &.footer-static {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ 0rem,
+ #{$footer-height},
+ 0rem,
+ #{$horizontal-menu-height},
+ 1,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-hidden {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ 0rem,
+ 0rem,
+ 0rem,
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ &.footer-fixed {
+ .app-content {
+ .content-area-wrapper,
+ .kanban-wrapper {
+ @include content-area-wrapper-height(
+ #{$content-padding},
+ 0rem,
+ #{$footer-height},
+ 0rem,
+ #{$horizontal-menu-height},
+ 2,
+ $horizontalLayout: true
+ );
+ }
+ }
+ }
+ }
+
+ &.vertical-overlay-menu {
+ #main-menu-navigation {
+ > li {
+ > ul {
+ > li {
+ > a {
+ i,
+ svg {
+ height: 1rem;
+ width: 1rem;
+ font-size: 1rem;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// MD 屏幕和以下尺寸的初始菜单和内容宽度
+@include media-breakpoint-down(lg) {
+ .horizontal-layout {
+ &.horizontal-menu {
+ .horizontal-menu-wrapper {
+ .header-navbar {
+ display: none;
+ }
+ }
+ }
+ .header-navbar {
+ background: $white;
+ }
+ .app-content {
+ padding: calc(#{$navbar-height} + calc(#{$content-padding} - 0.8rem)) calc(#{$content-padding} - 0.8rem) 0
+ calc(#{$content-padding} - 0.8rem) !important;
+ }
+ }
+}
+
+@include media-breakpoint-down(xs) {
+ // 导航栏跟随内容
+ html body.horizontal-layout.navbar-static .app-content {
+ padding: calc(#{$content-padding} - 0.8rem + #{$navbar-height}) calc(#{$content-padding} - 0.8rem) 0
+ calc(#{$content-padding} - 0.8rem) !important; // 减少小屏幕设备中的填充
+ }
+}
+// 导入垂直导航模式小屏幕(移动端)默认为折叠
+@import 'vertical-overlay-menu.scss';
diff --git a/src/@core/scss/base/core/menu/menu-types/vertical-menu.scss b/src/@core/scss/base/core/menu/menu-types/vertical-menu.scss
new file mode 100644
index 0000000..c7ad4cd
--- /dev/null
+++ b/src/@core/scss/base/core/menu/menu-types/vertical-menu.scss
@@ -0,0 +1,293 @@
+// ================================================================================================
+// 文件名:vertical-menu.scss
+// 描述:垂直导航布局主导航栏 SCSS 文件,支持所有设备。支持折叠/展开(小屏幕默认为折叠)。
+// 支持浅色/深色/混合模式,翻转布局(从右到左),右侧图标,滚动条和菜单项分隔。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../../../bootstrap-extended/include';
+@import '../../../components/include';
+
+// 导入第一个导航主菜单混入
+@import '../../mixins/main-menu-mixin';
+
+// 垂直导航菜单
+.vertical-layout {
+ &.vertical-menu-modern {
+ .main-menu {
+ transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background 0s;
+ transform: translate3d(0, 0, 0);
+ backface-visibility: hidden;
+ .navigation {
+ li a {
+ align-items: center;
+ }
+ > li > a svg,
+ > li > a i {
+ height: 20px;
+ width: 20px;
+ font-size: 1.45rem;
+ margin-right: 1.1rem;
+ flex-shrink: 0;
+ }
+ // 子菜单项图标尺寸
+ .menu-content {
+ > li > a svg,
+ > li > a i {
+ margin-right: 1.45rem;
+ font-size: 11px;
+ height: 11px;
+ width: 11px;
+ }
+ }
+ }
+ }
+
+ // 垂直导航菜单(展开态)
+ &.menu-expanded {
+ // 主菜单展开
+ .main-menu {
+ width: $menu-expanded-width;
+ .navigation {
+ .navigation-header {
+ .feather-more-horizontal {
+ display: none;
+ }
+ }
+ > li {
+ > a {
+ > i,
+ > svg {
+ &:before {
+ height: 20px;
+ width: 20px;
+ font-size: 1.45rem;
+ }
+ }
+ }
+ }
+ li {
+ @include vertical-menu-has-sub-arrow($font-size-base + 0.1);
+ }
+ }
+ }
+ // 内容展开
+ .footer {
+ @include main-menu-width($menu-expanded-width);
+ }
+ }
+ // 垂直导航菜单(折叠态)
+ &.menu-collapsed {
+ // 副导航栏折叠
+ .navbar {
+ .navbar-header {
+ @include menu-navbar-width($menu-collapsed-width);
+ .modern-nav-toggle {
+ display: none;
+ }
+ &.expanded {
+ width: $menu-expanded-width;
+ z-index: 1000;
+ .modern-nav-toggle {
+ display: block;
+ }
+ }
+ }
+ // 修复折叠时的副导航栏
+ &.fixed-top {
+ left: $menu-collapsed-width;
+ }
+ }
+ // 主菜单折叠
+ .main-menu {
+ width: $menu-collapsed-width;
+
+ .navbar-header .brand-text,
+ .modern-nav-toggle {
+ display: none;
+ }
+
+ // 当菜单折叠且鼠标未悬停在菜单上时
+ &:not(.expanded) {
+ .navigation-header {
+ margin-left: 2.2rem;
+ span {
+ display: none;
+ }
+ .feather-more-horizontal {
+ display: block;
+ font-size: 1.285rem;
+ width: 18px;
+ height: 18px;
+ }
+ }
+ .navigation li {
+ &:last-child {
+ margin-bottom: 1.25rem !important;
+ }
+ &.active {
+ a {
+ background: whitesmoke;
+ box-shadow: none;
+ color: #565656;
+ }
+ }
+ }
+ }
+
+ // 当菜单折叠但鼠标悬停在菜单上时
+ &.expanded {
+ width: $menu-expanded-width;
+ .navigation {
+ > li.navigation-header {
+ span {
+ display: block;
+ }
+ .feather-more-horizontal {
+ display: none;
+ }
+ }
+ li {
+ @include vertical-menu-has-sub-arrow(1rem);
+ }
+ }
+ .navbar-header .brand-text {
+ display: inline;
+ }
+ .modern-nav-toggle {
+ display: block;
+ }
+ }
+
+ // 主导航栏折叠
+ .navigation {
+ overflow: visible;
+ > li.navigation-header {
+ span {
+ display: none;
+ }
+ }
+ > li {
+ > a {
+ text-overflow: inherit;
+ }
+ }
+ }
+ }
+ // LOGO 和文字内容折叠
+ .app-content,
+ .footer {
+ @include main-menu-width($menu-collapsed-width);
+ }
+ .header-navbar {
+ // 浮动副导航栏
+ &.floating-nav {
+ width: calc(100vw - (100vw - 100%) - 4.4rem - 74px);
+ }
+ // 顶部固定副导航栏
+ &.navbar-static-top {
+ width: calc(100vw - (100vw - 100%) - 74px);
+ left: 74px;
+ }
+ }
+ }
+
+ .toggle-icon,
+ .collapse-toggle-icon {
+ margin-right: 0.425rem;
+ &:focus {
+ outline: none;
+ }
+ }
+ }
+}
+
+// LG 和更大屏幕尺寸的初始菜单和内容宽度
+@include media-breakpoint-up(lg) {
+ .vertical-layout {
+ &.vertical-menu-modern {
+ .main-menu {
+ width: $menu-expanded-width;
+ }
+ }
+ }
+}
+
+// MD 和更小屏幕尺寸的初始菜单和内容宽度
+@include media-breakpoint-down(lg) {
+ .vertical-layout {
+ &.vertical-menu-modern {
+ // 屏幕宽度小于 992 的情况下不使用此类
+ .main-menu {
+ width: 0;
+ }
+ .navbar {
+ .navbar-header {
+ width: 0;
+ }
+ }
+ .content,
+ .footer {
+ @include main-menu-width(0);
+ }
+ &.menu-collapsed {
+ .app-content,
+ .footer {
+ margin-left: 0;
+ }
+ .main-menu {
+ width: 0;
+ }
+ }
+ }
+ }
+}
+
+// SM 和更小屏幕尺寸的初始菜单和内容宽度
+@include media-breakpoint-down(sm) {
+ .vertical-layout {
+ &.vertical-menu-modern {
+ // 屏幕宽度小于 992 的情况下不使用此类
+ .main-menu {
+ width: 0;
+ }
+ .navbar {
+ .navbar-header {
+ width: 0;
+ }
+ }
+ .content,
+ .footer {
+ @include main-menu-width(0);
+ }
+ }
+ }
+}
+
+@keyframes fadein {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+@keyframes fadeout {
+ from {
+ opacity: 1;
+ }
+ to {
+ opacity: 0;
+ }
+}
+// IE 特定样式
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ .vertical-menu-modern.vertical-layout .main-menu .navigation > li > a > span {
+ animation: none;
+ }
+}
+// 导入垂直导航模式小屏幕(移动端)默认为折叠
+@import 'vertical-overlay-menu.scss';
diff --git a/src/@core/scss/base/core/menu/menu-types/vertical-overlay-menu.scss b/src/@core/scss/base/core/menu/menu-types/vertical-overlay-menu.scss
new file mode 100644
index 0000000..b10d48e
--- /dev/null
+++ b/src/@core/scss/base/core/menu/menu-types/vertical-overlay-menu.scss
@@ -0,0 +1,77 @@
+// ================================================================================================
+// 文件名:vertical-overlay-menu.scss
+// 描述:默认折叠,鼠标悬停时展开的垂直导航遮罩布局主导航栏 SCSS 文件,
+// 支持浅色/深色,翻转布局(从右到左),右侧图标,滚动条和菜单项分隔。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../../../bootstrap-extended/include';
+@import '../../../components/include';
+
+// 导入第一个导航主菜单混入
+@import '../../mixins/main-menu-mixin';
+
+// 垂直导航遮罩布局
+.vertical-overlay-menu {
+ // 内容展开
+ .content {
+ @include main-menu-width(0);
+ }
+ // 副导航栏展开
+ .navbar {
+ .navbar-header {
+ @include menu-navbar-width($menu-expanded-width);
+ }
+ }
+ // 主导航栏展开
+ .main-menu {
+ opacity: 0;
+ transform: translate3d(0, 0, 0);
+ transition: width 0.25s, opacity 0.25s, transform 0.25s;
+ width: $menu-expanded-width;
+ left: -($menu-expanded-width);
+
+ .navigation {
+ > li {
+ > a {
+ > svg,
+ > i {
+ margin-right: 14px;
+ float: left;
+ transition: 200ms ease all;
+ height: 20px;
+ width: 20px;
+ &:before {
+ transition: 200ms ease all;
+ font-size: 1.429rem;
+ }
+ }
+ }
+ }
+ li {
+ @include vertical-menu-has-sub-arrow(1rem);
+ }
+
+ .navigation-header {
+ .feather-more-horizontal {
+ display: none;
+ }
+ }
+ }
+ }
+ &.menu-open {
+ .main-menu {
+ opacity: 1;
+ transform: translate3d($menu-expanded-width, 0, 0);
+ transition: width 0.25s, opacity 0.25s, transform 0.25s;
+ }
+ }
+ &.menu-hide {
+ .main-menu {
+ @extend .main-menu;
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/mixins/alert.scss b/src/@core/scss/base/core/mixins/alert.scss
new file mode 100644
index 0000000..d8dda78
--- /dev/null
+++ b/src/@core/scss/base/core/mixins/alert.scss
@@ -0,0 +1,5 @@
+// 用于提示的标题框阴影
+
+@mixin alert-heading-bs($color) {
+ box-shadow: rgba($color, 0.4) 0px 6px 15px -7px;
+}
diff --git a/src/@core/scss/base/core/mixins/hex2rgb.scss b/src/@core/scss/base/core/mixins/hex2rgb.scss
new file mode 100644
index 0000000..736e320
--- /dev/null
+++ b/src/@core/scss/base/core/mixins/hex2rgb.scss
@@ -0,0 +1,4 @@
+@mixin bg-opacity($color, $opacity: 1) {
+ background: $color;
+ background: rgba($color, $opacity);
+}
diff --git a/src/@core/scss/base/core/mixins/main-menu-mixin.scss b/src/@core/scss/base/core/mixins/main-menu-mixin.scss
new file mode 100644
index 0000000..7ff5451
--- /dev/null
+++ b/src/@core/scss/base/core/mixins/main-menu-mixin.scss
@@ -0,0 +1,354 @@
+// =========================================================================================
+// 文件名:main-menu-mixin.scss
+// 描述:主/副导航栏菜单混入
+// ---------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// =========================================================================================
+
+// 导航栏内容和品牌展开/折叠间距和尺寸
+// 导航栏定位、边距和宽度的混入
+@mixin main-menu-width($menu-width) {
+ margin-left: $menu-width;
+}
+@mixin menu-navbar-width($menu-width) {
+ float: left;
+ width: $menu-width;
+}
+// 基于菜单展开/折叠的动作的宽度混入
+@mixin vertical-menu-transform-show($transform-width) {
+ transform: translate3d($transform-width, 0, 0);
+ backface-visibility: hidden;
+ perspective: 1000;
+}
+@mixin vertical-menu-transform-hide() {
+ transform: translate3d(0, 0, 0);
+}
+
+// 子菜单项箭头混入
+@mixin vertical-menu-has-sub-arrow($arrow-font-size) {
+ &.has-sub {
+ > a:after {
+ content: '';
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: $arrow-font-size;
+ height: $arrow-font-size;
+ width: $arrow-font-size;
+ display: inline-block;
+ position: absolute;
+ right: 20px;
+ top: 14px;
+ transform: rotate(0deg);
+ transition: all 0.2s ease-out;
+ }
+ &.open:not(.menu-item-closing) {
+ > a:after {
+ transform: rotate(90deg);
+ }
+ }
+ }
+}
+// 应用页面
+@mixin content-area-wrapper-height(
+ $contentPadding: 0rem,
+ $navbarHeight: 0rem,
+ $footerHeight: 0rem,
+ $floatingNavMargin: 0rem,
+ $horizontalMenuHeight: 0rem,
+ $spacingSides: 1,
+ $horizontalLayout: false
+) {
+ height: calc(
+ 100vh -
+ calc(
+ calc(#{$contentPadding} * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight} + #{$floatingNavMargin} + #{$horizontalMenuHeight}
+ )
+ );
+ height: calc(
+ var(--vh, 1vh) * 100 -
+ calc(
+ calc(#{$contentPadding} * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight} + #{$floatingNavMargin} + #{$horizontalMenuHeight}
+ )
+ );
+ // 响应尺寸高度
+ @if $horizontalLayout {
+ @include media-breakpoint-down(lg) {
+ height: calc(
+ 100vh - calc(calc(calc(#{$contentPadding} - 0.8rem) * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight})
+ );
+ height: calc(
+ var(--vh, 1vh) * 100 -
+ calc(calc(calc(#{$contentPadding} - 0.8rem) * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight})
+ );
+ }
+ } @else {
+ @include media-breakpoint-down(xs) {
+ height: calc(
+ 100vh -
+ calc(
+ calc(calc(#{$contentPadding} * #{$spacingSides}) - calc(0.8rem * #{$spacingSides})) + #{$navbarHeight} + #{$footerHeight} +
+ #{$floatingNavMargin} + #{$horizontalMenuHeight}
+ )
+ );
+ height: calc(
+ var(--vh, 1vh) * 100 -
+ calc(
+ calc(calc(#{$contentPadding} * #{$spacingSides}) - calc(0.8rem * #{$spacingSides})) + #{$navbarHeight} + #{$footerHeight} +
+ #{$floatingNavMargin} + #{$horizontalMenuHeight}
+ )
+ );
+ }
+ }
+}
+
+// 浅色/深色菜单混入
+// $theme-color : 菜单文本颜色
+// $theme-bg : 菜单背景颜色
+@mixin menu-theme($theme-color, $theme-bg) {
+ $main-menu-top-open-color: darken($theme-color, 10%);
+ $main-menu-top-open-hover-bg: darken($theme-bg, 6%);
+ $main-menu-top-open-head-bg: darken($theme-bg, 4%);
+
+ $main-menu-top-active-head-bg: darken($theme-bg, 4%); //$primary
+
+ $main-menu-sub-color: $theme-color;
+ $main-menu-sub-hover-color: lighten($theme-color, 4%);
+
+ $main-menu-sub-open-color: $theme-color;
+
+ color: $theme-color;
+ background: $theme-bg;
+
+ .navigation {
+ background: $theme-bg;
+ .navigation-header {
+ color: lighten($theme-color, 21.5%);
+ margin: calc(#{$content-padding} + 0.286rem) 0 0.8rem ($content-padding + 0.2rem);
+ padding: 0;
+ line-height: 1.5;
+ letter-spacing: 0.01rem;
+ span {
+ font-weight: 500;
+ }
+ }
+ li {
+ &.has-sub {
+ > a {
+ transition: all 0.5s ease, background 0s, color 0s;
+ }
+ }
+ a {
+ color: darken($theme-color, 4.9%);
+ padding: $menu-padding;
+ line-height: 1.45;
+
+ span.menu-sub-title {
+ color: lighten($theme-color, 30%);
+ }
+
+ & > * {
+ transition: transform 0.25s ease;
+ }
+ }
+ }
+
+ // 菜单项悬停动画
+ li.nav-item {
+ a:hover > * {
+ transition: transform 0.25s ease;
+ transform: translateX(5px);
+ }
+ ul.menu-content {
+ li {
+ a:hover > * {
+ transition: transform 0.25s ease;
+ transform: translateX(5px);
+ }
+ }
+ }
+ }
+
+ > li {
+ > a {
+ margin: 0 15px;
+ .label {
+ margin-top: 4px;
+ margin-right: 5px;
+ }
+ i,
+ svg {
+ position: relative;
+ }
+ }
+ > ul li {
+ &:first-of-type {
+ margin-top: 7px !important;
+ }
+
+ &:not(.has-sub) {
+ margin: 0 15px;
+ }
+ &.has-sub {
+ > a {
+ margin: 0 15px;
+ }
+
+ > ul > li {
+ margin: 0 15px;
+ }
+ }
+ }
+ &.open:not(.menu-item-closing),
+ &.sidebar-group-active {
+ > a {
+ color: $main-menu-top-open-color;
+ background: $main-menu-top-open-head-bg;
+ border-radius: 6px;
+ }
+ }
+
+ &:not(.open) {
+ > ul {
+ display: none;
+ .active {
+ background: transparent;
+ box-shadow: none;
+ }
+ }
+ }
+ &.active {
+ z-index: 1;
+ > a {
+ background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7));
+ box-shadow: 0 0 10px 1px rgba($primary, 0.7);
+ color: $white;
+ font-weight: 400;
+ border-radius: 4px;
+ }
+ }
+
+ .active {
+ background: $main-menu-top-open-hover-bg;
+
+ > a {
+ color: $primary;
+ margin-bottom: 0;
+ }
+
+ .hover,
+ :hover {
+ > a {
+ background: $main-menu-top-active-head-bg;
+ }
+ }
+ }
+
+ ul {
+ padding: 0;
+ margin: 0;
+
+ li {
+ color: $main-menu-sub-color;
+ background: transparent;
+ > a {
+ padding: $menu-second-level-padding;
+ }
+ ul {
+ a {
+ padding: $menu-third-level-padding;
+ }
+ }
+ }
+ .has-sub {
+ &:not(.open) {
+ > ul {
+ display: none;
+ .active {
+ background: transparent;
+ box-shadow: none;
+ }
+ }
+ }
+ }
+ .open,
+ .sidebar-group-active {
+ > a {
+ color: $main-menu-sub-open-color;
+ background: $main-menu-top-active-head-bg;
+ border-radius: 6px;
+ }
+ // 第二层级菜单
+ > ul {
+ display: block;
+ // 第三层级菜单
+ .open {
+ > ul {
+ display: block;
+ }
+ }
+ }
+ }
+
+ .hover,
+ &:hover {
+ > a {
+ color: $main-menu-sub-hover-color;
+ }
+ }
+
+ .active {
+ background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7));
+ box-shadow: 0 0 10px 1px rgba($primary, 0.7);
+ border-radius: 4px;
+ z-index: 1;
+ > a {
+ color: $white;
+ }
+ }
+ }
+ }
+ }
+}
+// 菜单内容显示混入
+// $menu-expanded-width : 导航展开宽度
+// $menu-collapsed-width: 导航折叠宽度
+// ================================================
+@mixin menu-content($menu-expanded-width, $menu-collapsed-width, $theme-color, $theme-bg) {
+ .main-menu-content {
+ > span.menu-title,
+ a.menu-title {
+ right: -($menu-expanded-width);
+ width: $menu-expanded-width;
+ font-weight: 600;
+ color: #fff;
+ text-transform: uppercase;
+ text-align: left;
+ background-color: $primary;
+ border-color: $primary;
+ padding: 13px 20px;
+ }
+ > ul.menu-content {
+ left: $menu-collapsed-width;
+ width: $menu-expanded-width;
+ transition: visibility 0.25s, opacity 0.25s;
+ box-shadow: 1px 0px 2px rgba($black, 0.1);
+ border-bottom: 2px solid rgba($black, 0.2);
+ border-left: 1px solid rgba($black, 0.02);
+
+ li {
+ white-space: nowrap;
+ position: relative;
+
+ a {
+ display: block;
+ padding: 8px 20px 8px 20px;
+ }
+
+ @include vertical-menu-has-sub-arrow(1rem);
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/core/mixins/transitions.scss b/src/@core/scss/base/core/mixins/transitions.scss
new file mode 100644
index 0000000..66c31e1
--- /dev/null
+++ b/src/@core/scss/base/core/mixins/transitions.scss
@@ -0,0 +1,30 @@
+@mixin transition($transition) {
+ -moz-transition: $transition;
+ -o-transition: $transition;
+ -webkit-transition: $transition;
+ transition: $transition;
+}
+@mixin transition-property($property) {
+ -moz-transition-property: $property;
+ -o-transition-property: $property;
+ -webkit-transition-property: $property;
+ transition-property: $property;
+}
+@mixin transition-duration($duration) {
+ -moz-transition-property: $duration;
+ -o-transition-property: $duration;
+ -webkit-transition-property: $duration;
+ transition-property: $duration;
+}
+@mixin transition-timing-function($timing) {
+ -moz-transition-timing-function: $timing;
+ -o-transition-timing-function: $timing;
+ -webkit-transition-timing-function: $timing;
+ transition-timing-function: $timing;
+}
+@mixin transition-delay($delay) {
+ -moz-transition-delay: $delay;
+ -o-transition-delay: $delay;
+ -webkit-transition-delay: $delay;
+ transition-delay: $delay;
+}
diff --git a/src/@core/scss/base/custom-rtl.scss b/src/@core/scss/base/custom-rtl.scss
new file mode 100644
index 0000000..26bc530
--- /dev/null
+++ b/src/@core/scss/base/custom-rtl.scss
@@ -0,0 +1,349 @@
+// ================================================================================================
+// 文件名:custom-rtl.scss
+// 描述:RTL(从右至左)模式支持的 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 变量
+@import 'bootstrap-extended/include';
+@import 'components/include';
+
+// 图标定位对齐
+.main-menu {
+ .navigation li > a > svg,
+ .navigation li > a > i,
+ .dropdown-menu svg,
+ .dropdown-menu i,
+ .dropdown-user > a > svg,
+ .dropdown-user > a > i,
+ .navigation > li > a > svg,
+ .navigation > li > a > i {
+ float: right;
+ }
+
+ .navigation > li ul li > a {
+ display: flex;
+ align-items: center;
+ }
+}
+
+// 转换菜单图标
+.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation li.has-sub > a:after,
+.vertical-layout.vertical-overlay-menu.menu-open .main-menu .navigation li.has-sub > a:after {
+ transform: rotate(180deg);
+}
+.vertical-layout.vertical-menu-modern.menu-expanded
+ .main-menu
+ .navigation
+ li.has-sub.open:not(.menu-item-closing)
+ > a:after {
+ transform: rotate(90deg);
+}
+
+// 水平导航菜单
+.horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-toggle::after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $body-color), '#', '%23'));
+}
+
+// RTL 下拉菜单更改
+.header-navbar .navbar-container ul.nav li.dropdown {
+ .dropdown-menu {
+ top: 41px !important;
+ }
+}
+
+.header-navbar {
+ .dropdown,
+ .dropup {
+ .dropdown-menu.dropdown-menu-right::before {
+ right: auto;
+ left: 0.5rem;
+ }
+ }
+}
+
+.dropdown,
+.dropup,
+.btn-group {
+ .dropdown-menu {
+ right: auto !important;
+ top: 0 !important;
+ left: auto !important;
+
+ &.dropdown-menu-right {
+ left: 0 !important;
+
+ &::before {
+ right: 0.6rem;
+ left: auto;
+ }
+ }
+ }
+}
+
+.dropleft {
+ .dropdown-toggle {
+ &::before {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $white), '#', '%23')) !important;
+ }
+ }
+ .dropdown-menu {
+ left: 0 !important;
+ margin-left: 0;
+ margin-right: 0.5rem;
+ }
+}
+
+.dropright {
+ .dropdown-toggle {
+ &::after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23')) !important;
+ }
+ }
+ .dropdown-menu {
+ left: 0 !important;
+ margin-right: 0;
+ margin-left: 0.5rem;
+ }
+}
+
+// 输入组下拉菜单
+.input-group {
+ .dropdown-menu.show {
+ top: 0 !important;
+ right: auto !important;
+ left: 0px !important;
+ }
+}
+
+// BS 通知
+.toast {
+ right: 1rem;
+}
+
+// Select2
+.select2-container--default .select2-selection--single .select2-selection__arrow {
+ left: 1px;
+}
+.select2-container--default .select2-selection--multiple .select2-selection__choice {
+ float: right;
+}
+.select2-search__field {
+ direction: rtl;
+}
+
+// Chartjs 图表
+.chartjs-render-monitor {
+ margin-right: 1rem;
+}
+
+// 数据表
+div.dataTables_wrapper div.dataTables_filter {
+ text-align: left !important;
+}
+table.dataTable thead .sorting:before,
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_desc:before {
+ right: 0.45rem;
+}
+
+// 头像组
+.avatar-group {
+ // 头像组尺寸
+ .avatar {
+ margin-right: -0.785rem;
+ margin-left: 0;
+ }
+ .avatar-sm {
+ margin-right: -0.65rem;
+ }
+ .avatar-lg {
+ margin-right: -1.5rem;
+ }
+ .avatar-xl {
+ margin-right: -1.85rem;
+ }
+}
+
+// 面包屑
+.breadcrumb:not([class*='breadcrumb-']),
+.breadcrumb.breadcrumb-chevron {
+ .breadcrumb-item + .breadcrumb-item {
+ &:before {
+ transform: rotate(180deg);
+ }
+ }
+}
+
+// 分页
+.pagination .page-item {
+ &.prev-item,
+ &.prev,
+ &.previous {
+ .page-link {
+ &:before {
+ transform: rotate(180deg);
+ }
+ &:hover,
+ &:active {
+ &:before {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ &:before {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ }
+
+ &.next-item,
+ &.next {
+ .page-link {
+ &:after {
+ transform: rotate(180deg);
+ }
+ &:hover,
+ &:active {
+ &:after {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ &:before {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ }
+}
+
+code[class*='language-'],
+pre[class*='language-'] {
+ direction: ltr;
+}
+
+@media print {
+ code[class*='language-'],
+ pre[class*='language-'] {
+ text-shadow: none;
+ }
+}
+
+// 日历
+.fc .fc-header-toolbar .fc-right .fc-button.fc-prev-button .fc-icon {
+ right: 4px !important;
+}
+
+.fc .fc-header-toolbar .fc-right .fc-button.fc-next-button .fc-icon {
+ left: -3px !important;
+}
+
+// 轮播图改变
+.carousel-control-next {
+ left: auto;
+ right: 0;
+}
+
+.carousel-control-prev {
+ left: 0;
+ right: auto;
+}
+
+// 工具栏
+.bs-tooltip-left .arrow::before,
+.bs-tooltip-auto[x-placement^='left'] .arrow::before {
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-left-color: $tooltip-bg;
+}
+
+.bs-tooltip-left .arrow,
+.bs-tooltip-auto[x-placement^='left'] .arrow {
+ right: 0;
+ left: auto;
+}
+
+.bs-tooltip-right .arrow::before,
+.bs-tooltip-auto[x-placement^='right'] .arrow::before {
+ border-width: 0.4rem 0.4rem 0.4rem 0;
+ border-right-color: $tooltip-bg;
+}
+
+.bs-tooltip-right .arrow,
+.bs-tooltip-auto[x-placement^='right'] .arrow {
+ left: 0;
+ right: auto;
+}
+
+// 气泡弹窗
+.popover {
+ right: auto !important;
+}
+
+// 进度条
+.progress-bar-animated {
+ animation: progress-bar-stripes 40s linear infinite;
+}
+
+// Perfect scrollbar RTL 模式修正
+body .ps__rail-y {
+ right: auto !important;
+ left: 1px !important;
+}
+
+// 常见问题和定价页
+.faq-navigation img,
+.pricing-free-trial .pricing-trial-img {
+ transform: scaleX(-1);
+}
+
+.feather-chevron-left,
+.feather-chevron-right {
+ transform: rotate(-180deg) !important;
+}
+
+// 看板
+.kanban-application {
+ .kanban-container {
+ .kanban-item {
+ i,
+ svg {
+ margin-right: 0 !important;
+ margin-left: 0.25rem;
+ }
+ }
+ }
+}
+
+// 账单列表
+.invoice-list-wrapper {
+ .dataTables_filter {
+ input {
+ margin-left: 0 !important;
+ margin-right: 0.5rem;
+ }
+ }
+
+ .dropdown .dropdown-menu.dropdown-menu-right {
+ left: 2rem !important;
+ }
+}
+
+// 文件管理应用
+.file-manager-application {
+ .sidebar-file-manager {
+ .sidebar-inner {
+ .my-drive .jstree-node.jstree-closed > .jstree-icon {
+ transform: rotate(180deg);
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-calendar.scss b/src/@core/scss/base/pages/app-calendar.scss
new file mode 100644
index 0000000..ce2b97e
--- /dev/null
+++ b/src/@core/scss/base/pages/app-calendar.scss
@@ -0,0 +1,411 @@
+// 核心变量和混入
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$fc-calendar-height: 650px;
+$fc-sidebar-width: 18rem;
+$fc-event-font-weight: 600;
+$fc-event-font-size: 0.8rem;
+$fc-event-padding-x: 0.5rem;
+$fc-event-padding-y: 0.25rem;
+$fc-toolbar-btn-padding: 0.438rem 0.5rem;
+$fc-day-toggle-btn-padding: 0.55rem 1.5rem;
+
+// 全尺寸日历样式
+.fc {
+ // 工具栏
+ .fc-toolbar {
+ flex-wrap: wrap;
+ flex-direction: row !important;
+ .fc-prev-button,
+ .fc-next-button {
+ display: inline-block;
+ background-color: transparent;
+ border-color: transparent;
+ .fc-icon {
+ color: $body-color;
+ }
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: transparent !important;
+ border-color: transparent !important;
+ box-shadow: none !important;
+ }
+ }
+ .fc-prev-button {
+ padding-left: 0 !important;
+ }
+ .fc-toolbar-chunk:first-child {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ }
+ .fc-button {
+ padding: $fc-toolbar-btn-padding;
+ &:active,
+ &:focus {
+ box-shadow: none;
+ }
+ }
+ .fc-button-group {
+ .fc-button {
+ text-transform: capitalize;
+ &:focus {
+ box-shadow: none;
+ }
+ }
+ .fc-button-primary {
+ &:not(.fc-prev-button):not(.fc-next-button) {
+ // background-color: rgba($primary, 0.1);
+ background-color: transparent;
+ border-color: $primary;
+ color: $primary;
+ &.fc-button-active,
+ &:hover {
+ background-color: rgba($color: $primary, $alpha: 0.2) !important;
+ border-color: $primary !important;
+ color: $primary;
+ }
+ }
+ &.fc-sidebarToggle-button {
+ border: 0;
+
+ i,
+ svg {
+ height: 21px;
+ width: 21px;
+ font-size: 21px;
+ }
+ }
+ }
+ .fc-sidebarToggle-button {
+ padding-left: 0;
+ background-color: transparent !important;
+ color: $body-color !important;
+
+ &:not(.fc-prev-button):not(.fc-next-button):hover {
+ background-color: transparent !important;
+ }
+
+ & + div {
+ margin-left: 0;
+ }
+ }
+ .fc-dayGridMonth-button,
+ .fc-timeGridWeek-button,
+ .fc-timeGridDay-button,
+ .fc-listMonth-button {
+ padding: $fc-day-toggle-btn-padding;
+
+ &:last-child,
+ &:first-child {
+ border-radius: $btn-border-radius;
+ }
+ &:first-child {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ &:last-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ }
+ }
+ & > * > :not(:first-child) {
+ margin-left: 0rem;
+ }
+ .fc-toolbar-title {
+ margin-left: 0.25rem;
+ }
+ .fc--button:empty,
+ .fc-toolbar-chunk:empty {
+ display: none;
+ }
+ }
+
+ // 通用日历标题和内容
+ tbody td,
+ thead th {
+ border-color: $border-color;
+ &.fc-col-header-cell {
+ border-right: 0;
+ border-left: 0;
+ }
+ }
+
+ .fc-view-harness {
+ min-height: $fc-calendar-height;
+ }
+
+ // Daygrid
+ .fc-scrollgrid-section-liquid > td {
+ border-bottom: 0;
+ }
+ .fc-daygrid-event-harness {
+ .fc-event {
+ font-size: $fc-event-font-size;
+ font-weight: $fc-event-font-weight;
+ padding: $fc-event-padding-y $fc-event-padding-x;
+ }
+ & + .fc-daygrid-event-harness {
+ margin-top: 0.3rem!important;
+ }
+ }
+ .fc-daygrid-day-bottom {
+ margin-top: 0.3rem!important;
+ }
+ .fc-daygrid-day {
+ padding: 5px;
+ .fc-daygrid-day-top {
+ flex-direction: row;
+ }
+ }
+
+ // 视图事件
+ .fc-daygrid-day-number,
+ .fc-timegrid-slot-label-cushion,
+ .fc-list-event-time {
+ color: $body-color;
+ }
+ .fc-day-today {
+ background: $body-bg !important;
+ background-color: $body-bg !important;
+ }
+
+ // 日历网格
+ .fc-timegrid {
+ .fc-scrollgrid-section {
+ .fc-col-header-cell,
+ .fc-timegrid-axis {
+ border-color: $border-color;
+ border-left: 0;
+ border-right: 0;
+ }
+ .fc-timegrid-axis {
+ border-color: $border-color;
+ }
+ }
+ .fc-timegrid-axis {
+ &.fc-scrollgrid-shrink {
+ .fc-timegrid-axis-cushion {
+ text-transform: capitalize;
+ color: $text-muted;
+ }
+ }
+ }
+ .fc-timegrid-slots {
+ .fc-timegrid-slot {
+ height: 3rem;
+ .fc-timegrid-slot-label-frame {
+ text-align: center;
+ .fc-timegrid-slot-label-cushion {
+ text-transform: uppercase;
+ }
+ }
+ }
+ }
+ .fc-timegrid-divider {
+ display: none;
+ }
+ }
+
+ // 列表视图
+ .fc-list {
+ border-color: $border-color;
+ .fc-list-day-cushion {
+ background: $body-bg;
+ }
+ .fc-list-event {
+ &:hover {
+ td {
+ background-color: $body-bg;
+ }
+ }
+ td {
+ border-color: $border-color;
+ }
+ }
+ }
+}
+
+// 日历应用特定样式
+.app-calendar {
+ position: relative;
+ border-radius: $card-border-radius;
+ .app-calendar-sidebar {
+ position: absolute;
+ left: calc(-#{$fc-sidebar-width} - 1.2rem);
+ width: $fc-sidebar-width;
+ height: 100%;
+ z-index: 5;
+ background-color: $card-bg;
+ border-right: 1px solid $border-color;
+ flex-basis: $fc-sidebar-width;
+ transition: all 0.2s, background 0s, border 0s;
+ &.show {
+ left: 0;
+ }
+ .sidebar-content-title {
+ font-size: 0.85rem;
+ color: $text-muted;
+ text-transform: uppercase;
+ letter-spacing: 0.6px;
+ }
+ .select-all,
+ .input-filter {
+ & ~ label {
+ color: $headings-color;
+ font-weight: 500;
+ letter-spacing: 0.4px;
+ }
+ }
+ }
+
+ // 右侧边栏样式
+ .event-sidebar {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 400px;
+ z-index: 15;
+ transform: translateX(120%);
+ transition: all 0.3s ease-in-out;
+
+ .card {
+ height: calc(100vh - 12.96rem);
+ height: calc(var(--vh, 1vh) * 100 - 12.96rem);
+ border-radius: 0 $border-radius-sm $border-radius-sm 0;
+
+ .close-bar {
+ cursor: pointer;
+ }
+
+ .todo-item-action {
+ width: 6rem;
+
+ .todo-item-info,
+ .todo-item-favorite,
+ .dropdown {
+ cursor: pointer;
+ line-height: 1.5;
+ }
+ .dropdown .dropdown-menu .dropdown-item {
+ padding: 0.14rem 1.428rem;
+ }
+ .dropdown-toggle::after {
+ display: none;
+ }
+ }
+ }
+
+ &.show {
+ transform: translateX(0);
+ }
+ }
+
+ .fc-toolbar {
+ h2 {
+ font-size: 1.45rem;
+ }
+ }
+ .fc-header-toolbar {
+ margin-bottom: 1.75rem !important;
+ }
+ .fc-view-harness {
+ margin: 0 -1.6rem;
+ }
+ .fc-scrollgrid {
+ border-color: $border-color;
+ }
+ .fc-day-past,
+ .fc-day-future {
+ .fc-daygrid-day-number {
+ color: $text-muted;
+ }
+ }
+ .fc-popover {
+ box-shadow: $box-shadow;
+ .fc-popover-header {
+ background: transparent;
+ padding: 0.5rem;
+ .fc-popover-title,
+ .fc-popover-close {
+ color: $headings-color;
+ }
+ }
+ .fc-popover-body {
+ *:not(:last-of-type) {
+ margin-bottom: 0.3rem;
+ }
+ }
+ }
+
+ .fc {
+ .fc-event {
+ .fc-event-main {
+ color: inherit;
+ }
+ }
+ }
+ .fc-list-event {
+ background: transparent !important;
+ }
+
+ @media (min-width: 992px) {
+ .app-calendar-sidebar {
+ position: static;
+ height: auto;
+ box-shadow: none !important;
+
+ .flatpickr-days {
+ background-color: transparent;
+ }
+ }
+ }
+}
+
+// 事件侧边栏
+.event-sidebar {
+ .select2-selection__choice__remove {
+ &:before {
+ top: 40% !important;
+ }
+ }
+}
+
+// 水平导航模式
+.horizontal-layout {
+ .app-calendar {
+ margin-bottom: 1rem;
+ }
+}
+
+// 媒体查询
+@media (max-width: 992px) {
+ .fc {
+ .fc-sidebarToggle-button {
+ font-size: 0;
+ }
+ }
+}
+
+@media (min-width: 992px) {
+ .fc {
+ .fc-sidebarToggle-button {
+ display: none;
+ }
+ }
+}
+
+@media (max-width: 700px) {
+ .app-calendar {
+ .fc {
+ .fc-header-toolbar {
+ .fc-toolbar-chunk:last-of-type {
+ margin-top: 1rem;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-chat-list.scss b/src/@core/scss/base/pages/app-chat-list.scss
new file mode 100644
index 0000000..6e75003
--- /dev/null
+++ b/src/@core/scss/base/pages/app-chat-list.scss
@@ -0,0 +1,133 @@
+// ================================================================================================
+// 文件名:app-chat-list.scss
+// 描述:聊天应用聊天区域页面的 SCSS 文件。
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+@import '../core/colors/palette-variables';
+
+@import 'bootstrap/scss/mixins/_gradients';
+@import 'bootstrap/scss/mixins/gradients';
+
+// 变量
+$chat-image-back-color: #f2f0f7;
+$chat-head-footer-height: 65px;
+$chat-widget-head-footer-height: 56px;
+$chat-widget-height: 390px;
+
+// 用户聊天窗口
+.chat-app-window {
+ // 聊天内容
+ .user-chats {
+ background-color: $chat-image-back-color;
+ padding: 1rem;
+ position: relative;
+ height: calc(100% - #{$chat-head-footer-height} - #{$chat-head-footer-height});
+ .avatar {
+ img {
+ border: 2px solid $white;
+ }
+ }
+ }
+ .chat-app-form {
+ button {
+ min-width: 80px;
+ }
+ }
+ .active-chat {
+ height: inherit;
+ .chat-header {
+ display: flex;
+ justify-content: space-between;
+ height: $chat-head-footer-height;
+ background-color: $white;
+ padding: 0 1rem;
+ border-bottom: 1px solid $border-color;
+ }
+ }
+
+ // 聊天区域
+ .chats {
+ .chat-avatar {
+ float: right;
+ }
+ .chat-body {
+ display: block;
+ margin: 10px 30px 0 0;
+ overflow: hidden;
+ .chat-content {
+ float: right;
+ padding: 0.7rem 1rem;
+ margin: 0 1rem 10px 0;
+ clear: both;
+ color: $white;
+ @include gradient-directional(map-get($primary-color, 'base'), map-get($primary-color, 'lighten-2'), 80deg);
+ border-radius: $border-radius;
+ box-shadow: 0 4px 8px 0 rgba($black, 0.12);
+ max-width: 75%;
+ p {
+ margin: 0;
+ }
+ }
+ }
+ // 聊天区域左侧
+ .chat-left {
+ .chat-avatar {
+ float: left;
+ }
+ .chat-body {
+ .chat-content {
+ float: left;
+ margin: 0 0 10px 1rem;
+ color: $body-color;
+ background: none;
+ background-color: lighten($white, 18%);
+ }
+ }
+ }
+ }
+ // 用户区域聊天表单
+ .chat-app-form {
+ height: $chat-head-footer-height;
+ padding: 0 1rem;
+ background-color: $white;
+ display: flex;
+ align-items: center;
+ border-top: 1px solid $border-color;
+ }
+}
+
+// 聊天小部件
+.chat-widget {
+ .card-header {
+ padding-top: 0.8rem;
+ padding-bottom: 0.8rem;
+ }
+ .chat-app-window {
+ // 聊天内容
+ .user-chats {
+ background-color: $body-bg;
+ height: $chat-widget-height;
+ }
+ .chat-app-form {
+ border-top: 0;
+ border-bottom-left-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ height: $chat-widget-head-footer-height;
+ .input-group-text,
+ .message {
+ border: 0;
+ padding-left: 0;
+ }
+ .input-group:not(.bootstrap-touchspin):focus-within {
+ box-shadow: none;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-chat.scss b/src/@core/scss/base/pages/app-chat.scss
new file mode 100644
index 0000000..c6987de
--- /dev/null
+++ b/src/@core/scss/base/pages/app-chat.scss
@@ -0,0 +1,340 @@
+// ================================================================================================
+// 文件名:app-chat.scss
+// 描述:聊天应用页面的 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+@import '../core/colors/palette-variables';
+
+@import 'bootstrap/scss/mixins/_gradients';
+@import 'bootstrap/scss/mixins/gradients';
+
+// 变量
+$chat-image-back-color: #f2f0f7;
+$chat-head-footer-height: 65px;
+$chat-profile-sidebar-head-height: 200px;
+
+.chat-application {
+ .content-area-wrapper {
+ border: 1px solid $border-color;
+ border-radius: $card-border-radius;
+ }
+
+ // 管理员个人资料边栏
+ .chat-profile-sidebar {
+ border-right: 1px solid $border-color;
+ height: inherit;
+ width: $chat-sidebar-width;
+ border-radius: $border-radius-sm;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ position: absolute;
+ background-color: $white;
+ transform: translateX(-110%);
+ transition: all 0.3s ease, background 0s, border 0s, color 0s;
+ z-index: 6;
+ &.show {
+ transform: translateX(0);
+ transition: all 0.3s ease, background 0s, border 0s, color 0s;
+ }
+
+ // 管理员个人资料标题
+ .chat-profile-header {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: $chat-profile-sidebar-head-height;
+ text-align: center;
+ .avatar {
+ margin-bottom: 1.25rem;
+ }
+ }
+
+ // 管理员个人资料滚动区域
+ .profile-sidebar-area {
+ height: calc(100% - #{$chat-profile-sidebar-head-height});
+ position: relative;
+ padding: 0 2rem 1.5rem;
+ }
+ }
+
+ // 侧边栏关闭按钮样式
+ .close-icon {
+ position: absolute;
+ top: 0.85rem;
+ right: 1rem;
+ cursor: pointer;
+ }
+ .sidebar-close-icon,
+ .close-icon {
+ svg,
+ i {
+ font-size: 1.143rem;
+ height: 1.143rem;
+ width: 1.143rem;
+ }
+ }
+
+ // 聊天头像边框
+ .avatar-border {
+ img {
+ border: 2px solid $white;
+ }
+ }
+
+ // 主侧边栏内容
+ .sidebar-content {
+ background-color: $white;
+ border-right: 1px solid $border-color;
+ height: inherit;
+ width: $chat-sidebar-width;
+ border-radius: $border-radius-sm;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ margin: 0;
+ box-shadow: none;
+ // 关闭图标
+ .sidebar-close-icon {
+ position: absolute;
+ right: 0.25rem;
+ top: 0.25rem;
+ font-size: 1.25rem;
+ z-index: 1;
+ cursor: pointer;
+ visibility: hidden;
+ }
+ // 搜索区域
+ .chat-fixed-search {
+ width: $chat-sidebar-width;
+ border-bottom: 1px solid $border-color;
+ padding: 0 1.286rem;
+ height: $chat-head-footer-height;
+ display: flex;
+ .sidebar-profile-toggle {
+ .avatar {
+ display: inline-table;
+ }
+ }
+ .input-group {
+ &:focus-within {
+ background-color: transparent;
+ box-shadow: none;
+ }
+ }
+ }
+ .chat-list-title {
+ color: $primary;
+ margin: 2rem 1.286rem 0.5rem;
+ }
+ // 侧边栏聊天列表
+ .chat-user-list-wrapper {
+ position: relative;
+ height: calc(100% - #{$chat-head-footer-height});
+ width: $chat-sidebar-width;
+ border-radius: 0;
+ // 联系人状态的特定样式
+ .avatar {
+ height: 42px;
+ [class*='avatar-status-'] {
+ right: 1px;
+ bottom: 1px;
+ }
+ }
+ .contact-list {
+ .chat-info {
+ width: calc(100% - 46px); // 头像尺寸+状态扩展+头像边框 = 42+2+2 =46px
+ padding-right: 0;
+ }
+ }
+ .no-results {
+ padding: 0.786rem 1.286rem;
+ display: none !important;
+ &.show {
+ display: block !important;
+ }
+ }
+ ul {
+ padding-left: 0;
+ margin-bottom: 0;
+ }
+ li {
+ display: flex;
+ padding: 0.786rem 1.286rem;
+ .chat-info {
+ margin-top: 0.3rem;
+ width: calc(100% - 46px - 46px); // 头像尺寸+状态扩展+头像边框 = 42+2+2 =46px = 42+2+2 =46px 和日期区域宽度 = 46px
+ padding: 0 0.75rem;
+ .card-text,
+ p {
+ color: $text-muted;
+ }
+ }
+
+ .chat-time {
+ color: $text-muted;
+ }
+ &:hover {
+ cursor: pointer;
+ background: $body-bg;
+ }
+ &.active {
+ @include gradient-directional(map-get($primary-color, 'base'), map-get($primary-color, 'lighten-2'), 80deg);
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ .card-text,
+ .chat-time {
+ color: $white;
+ }
+ }
+ img {
+ border: 2px solid $white;
+ }
+ }
+ }
+ }
+
+ // 聊天窗口
+ .chat-app-window {
+ height: 100%;
+
+ // 开始聊天
+ .start-chat-area,
+ .user-chats {
+ background-image: url($chat-bg-light);
+ background-color: $chat-image-back-color;
+ background-repeat: repeat;
+ background-size: 210px;
+ }
+ .start-chat-area {
+ height: inherit;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ .start-chat-icon,
+ .start-chat-text {
+ background: $white;
+ box-shadow: 0 4px 8px 0 rgba($black, 0.12) !important;
+ color: $body-color;
+ }
+ .start-chat-text {
+ padding: 0.5rem 1rem;
+ border-radius: calc(#{$border-radius} * 4);
+ cursor: pointer;
+ }
+ .start-chat-icon {
+ border-radius: 50%;
+ padding: 2rem;
+ svg,
+ i {
+ height: 4rem;
+ width: 4rem;
+ font-size: 4rem;
+ }
+ }
+ }
+ }
+
+ // 用户资料右侧边栏
+ .user-profile-sidebar {
+ width: $chat-sidebar-width;
+ border-radius: $border-radius-sm;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ background-color: $white;
+ position: absolute;
+ transform: translateX(110%);
+ transition: all 0.3s ease, background 0s, border 0s, color 0s;
+ z-index: 6;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ &.show {
+ transform: translateX(0%);
+ transition: all 0.3s ease, background 0s, border 0s, color 0s;
+ }
+ .user-profile-header {
+ .header-profile-sidebar {
+ height: $chat-profile-sidebar-head-height;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ flex-direction: column;
+ width: 100%;
+ }
+ .avatar {
+ margin-bottom: 1.25rem;
+ }
+ }
+ .user-profile-sidebar-area {
+ position: relative;
+ height: calc(100% - #{$chat-profile-sidebar-head-height});
+ padding: 0 2rem 1.5rem;
+ }
+ }
+}
+
+@include media-breakpoint-down(md) {
+ .content-right {
+ width: 100%;
+ }
+ .chat-application {
+ .sidebar-content {
+ transform: translateX(-110%);
+ transition: all 0.3s ease-in-out;
+ position: absolute;
+ z-index: 5;
+ &.show {
+ transform: translateX(0);
+ transition: all 0.3s ease;
+ }
+ }
+ }
+}
+@include media-breakpoint-down(sm) {
+ .chat-application {
+ .sidebar-content {
+ .sidebar-close-icon {
+ visibility: visible;
+ top: 15px;
+ right: 0;
+ padding: 0.65rem;
+ line-height: 1;
+ }
+ .chat-fixed-search {
+ padding-right: 2.5rem;
+ }
+ }
+ }
+}
+@include media-breakpoint-down(xs) {
+ .chat-application {
+ .sidebar {
+ position: unset !important;
+ }
+ .sidebar-content {
+ width: 100%;
+ .chat-fixed-search,
+ .chat-user-list-wrapper {
+ width: 100%;
+ }
+ }
+ .chat-profile-sidebar {
+ width: 100%;
+ }
+ .user-profile-sidebar {
+ width: 100%;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-ecommerce-details.scss b/src/@core/scss/base/pages/app-ecommerce-details.scss
new file mode 100644
index 0000000..574feb0
--- /dev/null
+++ b/src/@core/scss/base/pages/app-ecommerce-details.scss
@@ -0,0 +1,287 @@
+// ================================================================================================
+// 文件名:app-ecommerce-details.scss
+// 描述:电商应用商品详情 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 商品详情样式
+.ecommerce-application {
+ .app-ecommerce-details {
+ .product-img {
+ width: 600px;
+ }
+ // 评分样式
+ .ratings-list-item {
+ svg,
+ i {
+ font-size: 1.286rem;
+ height: 1.286rem;
+ width: 1.286rem;
+ }
+ }
+ .filled-star {
+ fill: $warning;
+ stroke: $warning;
+ color: $warning;
+ }
+ .unfilled-star {
+ stroke: $gray-100;
+ color: $gray-100;
+ }
+
+ // 商品价格
+ .item-price {
+ color: $primary;
+ }
+ // 列表视图、心愿单、结算页通用样式
+ .item-company {
+ display: inline-flex;
+ font-weight: $font-weight-normal;
+ font-size: 0.875rem;
+
+ .company-name {
+ font-weight: $font-weight-bolder;
+ margin-left: 0.25rem;
+ }
+ }
+
+ // 商品品特性列表
+ .product-features {
+ margin-top: 1.5rem;
+ margin-bottom: 1.5rem;
+ li {
+ svg,
+ i {
+ height: 1.4rem;
+ width: 1.4rem;
+ font-size: 1.4rem;
+ margin-right: 0.75rem;
+ }
+ display: flex;
+ align-items: center;
+ margin-bottom: 1rem;
+ span {
+ font-weight: $font-weight-bolder;
+ }
+ }
+ }
+
+ .product-color-options {
+ margin-top: 1.5rem;
+ margin-bottom: 1.2rem;
+ }
+ .btn-wishlist {
+ .text-danger {
+ color: $danger;
+ fill: $danger;
+ }
+ }
+ .btn-share {
+ .btn-icon {
+ ~ .dropdown-menu {
+ min-width: 3rem;
+ }
+ }
+ }
+ .item-features {
+ background-color: $body-bg;
+ padding-top: 5.357rem;
+ padding-bottom: 5.357rem;
+ i,
+ svg {
+ font-size: 2.5rem;
+ height: 2.5rem;
+ width: 2.5rem;
+ color: $primary;
+ }
+ }
+ }
+
+ // 居中幻灯片选项1
+ .swiper-responsive-breakpoints {
+ &.swiper-container {
+ .swiper-slide {
+ text-align: center;
+ background-color: $body-bg;
+ padding: 1.5rem 3rem;
+ border-radius: $card-border-radius;
+ .img-container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 250px;
+ }
+ }
+ }
+ }
+
+ // 导航按钮自定义图标
+ .swiper-button-prev,
+ .swiper-button-next,
+ .swiper-container-rtl .swiper-button-prev,
+ .swiper-container-rtl .swiper-button-next {
+ background-image: none;
+ width: 35px;
+ font-size: $h1-font-size;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .swiper-button-prev {
+ left: 0;
+
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ }
+ }
+
+ .swiper-button-next {
+ right: 0;
+
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ }
+ }
+
+ .swiper-container-rtl {
+ .swiper-button-prev {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ }
+ }
+
+ .swiper-button-next {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ }
+ }
+ }
+
+ // 颜色选项
+ .product-color-options {
+ .color-option {
+ border: 1px solid transparent;
+ border-radius: 50%;
+ position: relative;
+ cursor: pointer;
+ padding: 3px;
+
+ .filloption {
+ height: 18px;
+ width: 18px;
+ border-radius: 50%;
+ }
+ }
+
+ // 选择
+ .selected {
+ // 仅用于特定页面的边框颜色
+ .b-primary {
+ border-color: $primary;
+ .filloption {
+ box-shadow: 0 2px 4px 0 rgba($primary, 0.4);
+ }
+ }
+
+ .b-success {
+ border-color: $success;
+ .filloption {
+ box-shadow: 0 2px 4px 0 rgba($success, 0.4);
+ }
+ }
+
+ .b-danger {
+ border-color: $danger;
+ .filloption {
+ box-shadow: 0 2px 4px 0 rgba($danger, 0.4);
+ }
+ }
+
+ .b-warning {
+ border-color: $warning;
+ .filloption {
+ box-shadow: 0 2px 4px 0 rgba($warning, 0.4);
+ }
+ }
+
+ .b-info {
+ border-color: $info;
+ .filloption {
+ box-shadow: 0 2px 4px 0 rgba($info, 0.4);
+ }
+ }
+ }
+ .b-primary .filloption {
+ box-shadow: 0 2px 4px 0 rgba($primary, 0.4);
+ }
+ .b-success .filloption {
+ box-shadow: 0 2px 4px 0 rgba($success, 0.4);
+ }
+ .b-danger .filloption {
+ box-shadow: 0 2px 4px 0 rgba($danger, 0.4);
+ }
+ .b-warning .filloption {
+ box-shadow: 0 2px 4px 0 rgba($warning, 0.4);
+ }
+ .b-info .filloption {
+ box-shadow: 0 2px 4px 0 rgba($info, 0.4);
+ }
+ }
+}
+
+@include media-breakpoint-down(sm) {
+ .ecommerce-application .swiper-responsive-breakpoints.swiper-container .swiper-slide {
+ padding: 1rem;
+ }
+}
+@include media-breakpoint-down(sm) {
+ .ecommerce-application {
+ .app-ecommerce-details {
+ // 评分样式
+ .ratings-list-item {
+ svg,
+ i {
+ font-size: 1rem;
+ height: 1rem;
+ width: 1rem;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-ecommerce.scss b/src/@core/scss/base/pages/app-ecommerce.scss
new file mode 100644
index 0000000..992f2e0
--- /dev/null
+++ b/src/@core/scss/base/pages/app-ecommerce.scss
@@ -0,0 +1,631 @@
+// ================================================================================================
+// 文件名:app-ecommerce.scss
+// 描述:电商网站页面、商品列表、心愿单和结帐页的 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$search-bar-height: 48px;
+
+.ecommerce-application {
+ .content-body {
+ position: relative;
+ }
+ // 内容区大遮罩
+ .body-content-overlay {
+ position: fixed !important;
+ z-index: 12 !important;
+ }
+
+ // 商城侧边栏
+ .sidebar-shop {
+ margin-top: 0.85rem;
+ width: $sidebar-width;
+ z-index: 14;
+
+ // 顶部
+ .filter-heading {
+ margin-bottom: 1.75rem;
+ }
+
+ // 标题
+ .filter-title {
+ margin-bottom: 1rem;
+ margin-top: 2.5rem;
+ }
+
+ // 侧边栏价格范围和分类列表
+ .price-range,
+ .categories-list {
+ li:not(:last-child) {
+ margin-bottom: 0.75rem;
+ }
+ }
+
+ // 侧边栏品牌列表
+ .brand-list {
+ li {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 0.75rem;
+ }
+ }
+
+ // 侧边栏滑块
+ .range-slider.noUi-horizontal {
+ .noUi-handle {
+ .noUi-tooltip {
+ opacity: 0;
+ transform: translate(-50%, -15%);
+
+ &:before {
+ content: '$ ';
+ }
+ }
+ &:active {
+ .noUi-tooltip {
+ opacity: 1;
+ }
+ }
+ }
+ }
+
+ // 侧边栏评分
+ .ratings-list {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 0.5rem;
+ &:last-child {
+ margin-bottom: 2.5rem;
+ }
+ ul {
+ margin-bottom: 0;
+ .ratings-list-item {
+ svg,
+ i {
+ width: 1.25rem;
+ height: 1.25rem;
+ font-size: 1.25rem;
+ }
+ }
+ }
+ }
+ }
+
+ // 评分星星样式
+ .filled-star {
+ fill: $warning;
+ stroke: $warning;
+ color: $warning;
+ }
+ .unfilled-star {
+ stroke: $gray-100;
+ color: $gray-100;
+ }
+
+ // 商城主内容区域
+
+ // 商城标题
+ .ecommerce-header-items {
+ display: flex;
+ justify-content: space-between;
+
+ .result-toggler {
+ display: flex;
+ align-items: center;
+
+ // 侧边栏开关
+ .shop-sidebar-toggler {
+ padding-left: 0;
+
+ &:active,
+ &:focus {
+ outline: 0;
+ }
+
+ .navbar-toggler-icon {
+ height: auto;
+ i,
+ svg {
+ color: $body-color;
+ height: 1.5rem;
+ width: 1.5rem;
+ font-size: 1.5rem;
+ }
+ }
+ }
+ // 搜索结果
+ .search-results {
+ font-weight: $font-weight-bold;
+ color: $headings-color;
+ }
+ }
+ }
+
+ // 商品搜索栏
+ .ecommerce-searchbar {
+ .input-group {
+ box-shadow: 0 2px 8px 0 rgba($black, 0.14);
+ border-radius: 0.3rem;
+ }
+ }
+
+ // 搜索框
+ .search-product,
+ .input-group-text {
+ height: $search-bar-height;
+ border: none;
+ font-size: 0.95rem;
+ padding-left: 1.25rem;
+
+ &::placeholder {
+ font-size: 0.95rem;
+ }
+ }
+
+ // 商品卡片
+ .ecommerce-card {
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 4px 25px 0 rgba($black, 0.25);
+ }
+
+ // 评分
+ .item-rating {
+ ul {
+ margin-bottom: 0;
+ }
+ svg,
+ i {
+ height: 1.143rem;
+ width: 1.143rem;
+ font-size: 1.143rem;
+ }
+ }
+
+ // 商品名
+ .item-name {
+ margin-bottom: 0;
+ a {
+ font-weight: $font-weight-bolder;
+ display: -webkit-box;
+ -webkit-line-clamp: 1;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+
+ .item-description {
+ font-size: 0.875rem;
+ }
+
+ // 按钮样式
+ .btn-wishlist,
+ .btn-cart {
+ span {
+ vertical-align: text-top;
+ }
+ i,
+ svg {
+ margin-right: 0.25rem;
+ vertical-align: text-top;
+ &.text-danger {
+ fill: $danger;
+ }
+ }
+ }
+ }
+
+ // 栅格/列表视图边距
+ .grid-view,
+ .list-view {
+ &:not(.wishlist-items) {
+ margin-top: 2rem;
+ }
+ }
+
+ // 栅格视图特定样式
+ .grid-view {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ column-gap: 2rem;
+ &.wishlist-items {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+
+ .ecommerce-card {
+ overflow: hidden;
+
+ // 商品图片
+ .item-img {
+ padding-top: 0.5rem;
+ min-height: 15.85rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ // 商品内容
+ .item-wrapper {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+ }
+
+ // 隐藏列表商品
+ .shipping,
+ .item-company,
+ .item-options .item-price {
+ display: none;
+ }
+
+ .item-options {
+ display: flex;
+ flex-wrap: wrap;
+
+ .btn-cart,
+ .btn-wishlist {
+ flex-grow: 1;
+ border-radius: 0;
+ }
+ }
+
+ .item-name {
+ margin-top: 0.75rem;
+ }
+
+ // 商品详情
+ .item-description {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ margin-top: 0.2rem;
+ }
+
+ .item-price {
+ font-weight: $font-weight-bolder;
+ }
+
+ .card-body {
+ padding: 1rem;
+ }
+ }
+ }
+
+ // 列表视图特定样式
+ .list-view {
+ display: grid;
+ grid-template-columns: 1fr;
+
+ .ecommerce-card {
+ overflow: hidden;
+ display: grid;
+ grid-template-columns: 1fr 2fr 1fr;
+
+ // 列表视图商品图片
+ .item-img {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+ }
+
+ .card-body {
+ padding: 1.5rem 1rem;
+ border-right: 1px solid $border-color;
+ display: flex;
+ flex-direction: column;
+
+ // item name and ratings order
+ .item-wrapper {
+ order: 2;
+ }
+ .item-name {
+ order: 1;
+ }
+ // 列表视图商品详情
+ .item-description {
+ order: 3;
+ display: -webkit-box;
+ -webkit-line-clamp: 5;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ // .item-rating,
+ .item-price {
+ display: none;
+ }
+ // 评分
+ .item-rating {
+ margin-bottom: 0.3rem;
+ }
+ }
+ // 列表视图、心愿单、结算页通用样式
+ .item-company {
+ display: inline-flex;
+ font-weight: $font-weight-normal;
+ margin: 0.3rem 0 0.5rem;
+ font-size: 0.875rem;
+
+ .company-name {
+ font-weight: $font-weight-bolder;
+ margin-left: 0.25rem;
+ }
+ }
+
+ // 列表视图价格按钮区域
+ .item-options {
+ padding: 1rem;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ .item-wrapper {
+ position: relative;
+
+ .item-cost {
+ .item-price {
+ color: $primary;
+ margin-bottom: 0;
+ }
+ }
+ }
+ // 包邮标签
+ .shipping {
+ margin-top: 0.75rem;
+ }
+ // 列表视图按钮间距
+ .btn-wishlist,
+ .btn-cart {
+ margin-top: 1rem;
+ }
+ }
+ }
+ }
+
+ // 用于商品结算和选项
+ // 删除步进标题和内容区域的填充
+ .checkout-tab-steps {
+ .bs-stepper-header,
+ .bs-stepper-content {
+ padding: 0;
+ margin: 0;
+ }
+ }
+ // 结算商品列表
+ .checkout-items {
+ .ecommerce-card {
+ .item-img {
+ img {
+ width: 200px;
+ }
+ }
+ // 更新店铺列表视图的订单后添加订单
+ .item-name {
+ order: 0 !important;
+ }
+ .item-company,
+ .item-rating {
+ margin-bottom: 0.4rem !important;
+ }
+ .item-quantity {
+ display: flex;
+ align-items: center;
+ }
+
+ .delivery-date {
+ margin-top: 1.2rem;
+ margin-bottom: 0.25rem;
+ }
+ // 商品选项按钮
+ .item-options {
+ .btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+ }
+
+ .checkout-options {
+ .coupons {
+ &:focus-within {
+ box-shadow: none;
+ }
+ input {
+ border: none;
+ padding-left: 0;
+ color: $body-color;
+ font-weight: $font-weight-bolder;
+ &::placeholder {
+ color: $body-color;
+ font-weight: $font-weight-bolder;
+ }
+ }
+ .input-group-append {
+ margin: 0;
+ }
+ .input-group-text {
+ height: auto;
+ font-weight: $font-weight-bolder;
+ padding: inherit;
+ }
+ }
+ .price-details {
+ .price-title {
+ font-weight: $font-weight-bolder;
+ margin-bottom: 0.75rem;
+ margin-top: 1.5rem;
+ }
+ .price-detail {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 0.75rem;
+
+ .detail-title {
+ &.detail-total {
+ font-weight: $font-weight-bolder;
+ }
+ }
+ }
+ }
+ }
+ .payment-type {
+ .gift-card {
+ cursor: pointer;
+ }
+ }
+
+ // 结算向导
+ .checkout-tab-steps {
+ background-color: transparent !important;
+ box-shadow: none !important;
+
+ .bs-stepper-header {
+ border: none;
+ }
+ }
+
+ // 隐藏 LG 及更大屏幕上的切换开关,以及网格视图中的心愿单按钮和列表视图中的结算按钮
+ @include media-breakpoint-up(lg) {
+ .ecommerce-header-items {
+ .shop-sidebar-toggler {
+ display: none;
+ }
+ }
+
+ // 列表视图中的结算按钮
+ .product-checkout {
+ &.list-view {
+ grid-template-columns: 2fr 1fr;
+ column-gap: 2rem;
+ }
+ }
+ }
+}
+// 媒体查询 更改不同屏幕中的网格列并在 <768px 屏幕下隐藏搜索结果
+@include media-breakpoint-down(lg) {
+ .ecommerce-application {
+ // Header item area
+ .ecommerce-header-items {
+ .btn-group {
+ align-items: center;
+ .btn-icon {
+ padding: 0.6rem 0.736rem;
+ }
+ }
+ }
+ .grid-view.wishlist-items {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+ // 所有电商页面的遮罩样式
+ .body-content-overlay {
+ position: fixed;
+ opacity: 0;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ &.show {
+ opacity: 1;
+ }
+ }
+
+ // 水平导航布局特定样式
+ &.horizontal-layout {
+ .body-content-overlay {
+ z-index: 998 !important;
+ }
+ .sidebar-shop {
+ z-index: 999 !important;
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(md) {
+ .ecommerce-application {
+ .sidebar-left {
+ .sidebar {
+ // 删除了全高侧边栏的圆角和边距
+ .card {
+ border-radius: 0;
+ margin: 0;
+ }
+ // 侧边栏样式
+ .sidebar-shop {
+ transform: translateX(-112%);
+ transition: all 0.25s ease;
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100%;
+ overflow-y: scroll;
+ margin: 0;
+
+ &.show {
+ transition: all 0.25s ease;
+ transform: translateX(0);
+ }
+ }
+ }
+ }
+ // 网格视图响应
+ .grid-view {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ // 隐藏搜索结果
+ .ecommerce-header-items {
+ .result-toggler {
+ .search-results {
+ display: none;
+ }
+ }
+ }
+ }
+}
+@include media-breakpoint-down(sm) {
+ .ecommerce-application {
+ .grid-view.wishlist-items {
+ grid-template-columns: 1fr 1fr;
+ }
+ // 列表视图
+ .list-view {
+ .ecommerce-card {
+ grid-template-columns: 1fr;
+
+ .item-img {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+ }
+
+ // 删除卡片主体边框
+ .card-body {
+ border: none;
+ }
+ }
+ }
+ }
+}
+@include media-breakpoint-down(xs) {
+ .ecommerce-application {
+ // 网格视图
+ .grid-view,
+ .grid-view.wishlist-items {
+ grid-template-columns: 1fr;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-email.scss b/src/@core/scss/base/pages/app-email.scss
new file mode 100644
index 0000000..afc08c1
--- /dev/null
+++ b/src/@core/scss/base/pages/app-email.scss
@@ -0,0 +1,492 @@
+// ================================================================================================
+// 文件名:app-email.scss
+// 描述:邮箱应用的 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$email_read: $body-bg;
+$email_selected_border: #e4e1e8;
+$email_details_header_height: 5rem;
+
+.email-application {
+ .content-area-wrapper {
+ border: 1px solid $border-color;
+ border-radius: $card-border-radius;
+ // 侧边栏区域
+ .sidebar {
+ .email-app-sidebar {
+ width: $menu-expanded-width;
+ height: inherit;
+ background-color: $white;
+ border-top-left-radius: $card-border-radius;
+ border-bottom-left-radius: $card-border-radius;
+ transition: all 0.3s ease, background 0s;
+ z-index: 210;
+ .email-app-menu {
+ width: 100%;
+ height: 100%;
+ z-index: 3;
+ .compose-btn {
+ padding: 1.5rem;
+ }
+ .sidebar-menu-list {
+ position: relative;
+ height: calc(100% - 80px); // 搜索区高度为 80px
+ }
+ }
+ }
+ .list-group .list-group-item {
+ padding: 0.58rem 1.5rem;
+ border: 0;
+ font-weight: $font-weight-bold;
+ letter-spacing: 0.4px;
+ border-left: 2px solid transparent;
+ border-radius: 0;
+ + .list-group-item.active {
+ margin-top: 0;
+ }
+ &:hover,
+ &:focus,
+ &.active {
+ background: transparent;
+ color: $primary;
+ }
+ &.active {
+ border-color: #3366CC;
+ }
+ }
+ }
+
+ // 右侧内容通用样式
+ .content-right {
+ width: calc(100% - #{$menu-expanded-width});
+ border-left: 1px solid $border-color;
+ .email-app-list {
+ height: inherit;
+ }
+ .app-fixed-search {
+ padding: 0.35rem 0.5rem;
+ border-bottom: 1px solid $border-color;
+ background-color: $white;
+ border-top-right-radius: $border-radius;
+
+ .input-group:focus-within {
+ box-shadow: none;
+ }
+ input,
+ .input-group-text {
+ border: 0;
+ background-color: transparent;
+ }
+ }
+ .action-icon {
+ cursor: pointer;
+ }
+ }
+
+ // 侧边栏切换按钮
+ .sidebar-toggle {
+ cursor: pointer;
+ float: left;
+ }
+ .go-back {
+ cursor: pointer;
+ }
+
+ // 邮箱用户列表区域
+ .email-user-list {
+ position: relative;
+ height: calc(
+ 100% - calc(3.49rem + 3.32rem)
+ ); // 搜索框高度 (3.49rem) + 全选部件高度 (3.32rem)
+ .email-media-list {
+ padding: 0;
+ margin: 0;
+ // 设置每个列表项的延迟
+ @for $i from 1 through 5000 {
+ li:nth-child(#{$i}) {
+ animation-delay: 0.1s * $i;
+ }
+ }
+ li {
+ cursor: pointer;
+ transition: all 0.2s, background 0s, border-color 0s, color 0s;
+ animation: fadeIn 0.5s linear;
+ animation-fill-mode: both;
+ position: relative;
+ background: $white;
+ &.media {
+ padding: ($spacer + 0.5);
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 3px 10px 0 $border-color;
+ transition: all 0.2s;
+ z-index: 1;
+ }
+ .media-left {
+ display: flex;
+ flex-direction: column;
+ }
+ .media-body {
+ overflow: hidden;
+ }
+ }
+ // 邮箱头像样式
+ .avatar {
+ margin-bottom: 0.65rem;
+ }
+ .avatar,
+ .avatar img {
+ height: $avatar-size + 8;
+ width: $avatar-size + 8;
+ }
+
+ // 已读邮件
+ &.mail-read {
+ background-color: $email_read;
+ }
+ // 已选择邮件
+ &.selected-row-bg {
+ background-color: rgba($primary, 0.06);
+ &:not(:first-child) {
+ border-color: $email_selected_border;
+ }
+ }
+ &:not(:first-child) {
+ border-top: 1px solid $border-color;
+ }
+ .mail-details {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 0.55rem;
+ }
+ .mail-date {
+ color: $text-muted;
+ font-size: 0.857rem;
+ }
+ .mail-message {
+ p {
+ color: $text-muted;
+ }
+ }
+ }
+ .user-action {
+ display: flex;
+ .email-favorite {
+ i,
+ svg {
+ height: 1.25rem;
+ width: 1.25rem;
+ font-size: 1.25rem;
+ vertical-align: text-top;
+ color: $text-muted;
+ &.favorite {
+ fill: $warning;
+ stroke: $warning;
+ }
+ }
+ }
+ }
+ }
+ .no-results {
+ display: none;
+ padding: 1.5rem;
+ text-align: center;
+ &.show {
+ display: block;
+ }
+ }
+ .ps__rail-y {
+ z-index: 2;
+ }
+ }
+ }
+ // 邮箱列表部分的操作区域
+ .app-action {
+ padding: 0.9rem ($spacer + 0.5);
+ display: flex;
+ justify-content: space-between;
+ border-bottom: 1px solid $border-color;
+ background-color: $white;
+ .action-right {
+ ul {
+ li:not(:last-child) {
+ margin-right: 1rem;
+ }
+ }
+ .dropdown-toggle {
+ color: $headings-color;
+ white-space: normal;
+ &::after {
+ display: none;
+ }
+ }
+ }
+ }
+ // 邮件详情部分,单击从右侧滑入
+ .email-app-details {
+ position: absolute;
+ display: block;
+ z-index: 2;
+ visibility: hidden;
+ top: 0;
+ width: calc(100% - #{$menu-expanded-width});
+ background-color: $body-bg;
+ transform: translateX(100%);
+ transition: all 0.25s ease, color 0s;
+ height: 100%;
+ &.show {
+ visibility: visible;
+ transition: all 0.25s ease, color 0s;
+ transform: translateX(0%);
+ }
+ .email-detail-header {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: center;
+ box-shadow: 0 4px 6px rgba($black, 0.04);
+ border-bottom: 1px solid $kbd-bg;
+ position: relative;
+ padding: 0.5rem 2rem;
+ background-color: $white;
+ height: $email_details_header_height;
+ }
+ .email-header-left {
+ .email-subject {
+ display: -webkit-box;
+ -webkit-line-clamp: 1;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+ }
+ .email-header-right {
+ .dropdown-toggle,
+ .action-icon {
+ color: $body-color;
+ }
+ }
+
+ // 邮件详情滚动区域
+ .email-scroll-area {
+ padding: 0 2rem;
+ position: relative;
+ height: calc(100% - #{$email_details_header_height});
+
+ .email-detail-head {
+ border-bottom: 1px solid $border-color;
+ .mail-meta-item {
+ .dropdown {
+ line-height: 0;
+ }
+ }
+ }
+ .email-label {
+ margin: 2rem 0;
+ }
+ .email-info-dropup {
+ .dropdown-toggle::after {
+ left: -2px;
+ margin: 0;
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $text-muted), '#', '%23'));
+ background-size: 0.857rem;
+ }
+ .dropdown-menu {
+ padding: 0.5rem;
+ }
+ }
+ }
+ }
+
+ #compose-mail {
+ .compose-mail-form-field {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 0.12rem $modal-header-padding-x;
+ border-bottom: 1px solid $modal-footer-border-color;
+ .select2-container--open {
+ box-shadow: none;
+ }
+ .select2-selection--multiple,
+ .form-control {
+ border: 0;
+ background-color: transparent;
+ &:focus {
+ box-shadow: none !important;
+ background-color: transparent;
+ }
+ }
+ .select2-selection--multiple {
+ min-height: 42px !important;
+ .select2-selection__rendered li .select2-search__field {
+ margin-top: 10px;
+ }
+ }
+ .select2-selection__choice__remove:before {
+ top: 40%;
+ }
+ label {
+ margin-bottom: 0;
+ font-size: $font-size-base;
+ }
+ }
+ .ql-editor {
+ min-height: 250px;
+ }
+ .ql-container,
+ .ql-toolbar {
+ border: none;
+ border-radius: 0;
+ border-bottom: 1px solid $border-color;
+ .ql-picker.ql-expanded .ql-picker-options {
+ bottom: 100%;
+ top: auto;
+ }
+ }
+ .compose-footer-wrapper {
+ padding: $modal-inner-padding;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ }
+}
+
+@include media-breakpoint-down(md) {
+ .email-application {
+ .content-area-wrapper {
+ .sidebar-left {
+ position: relative;
+ .email-app-sidebar {
+ transform: translateX(-110%);
+ transition: all 0.3s ease-in-out;
+ position: absolute;
+ left: 0;
+ border-top-left-radius: $border-radius-sm;
+ border-bottom-left-radius: $border-radius-sm;
+ }
+ &.show {
+ .email-app-sidebar {
+ transform: translateX(0%);
+ transition: all 0.3s ease;
+ }
+ }
+ }
+ .content-right {
+ width: 100%;
+ border-left: 0;
+ .app-fixed-search {
+ border-top-left-radius: $border-radius;
+ }
+ .email-app-details {
+ width: 100%;
+ border-radius: $border-radius;
+ }
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(sm) {
+ .email-application #compose-mail .ql-editor {
+ min-height: 150px;
+ }
+}
+
+// XS 设备 (宽度 <576px 的移动端)
+@include media-breakpoint-down(xs) {
+ .email-application {
+ .email-detail-head .mail-meta-item {
+ display: flex;
+ justify-content: space-between;
+ margin-left: 4rem; // ltr 模式头像间距
+ .mail-date,
+ .mail-time {
+ margin: 1rem 0.75rem 0 0;
+ }
+ }
+ .content-area-wrapper {
+ .content-right .email-app-details {
+ .email-scroll-area {
+ padding: 0 1rem;
+ }
+
+ .email-detail-header {
+ padding: 0.5rem 1rem;
+ }
+ }
+ .email-user-list {
+ .email-media-list li .mail-details {
+ display: block;
+ .mail-items {
+ width: 70%;
+ display: inline-grid;
+ }
+ .mail-meta-item {
+ width: 15%;
+ position: absolute;
+ right: 1rem;
+ top: 1.5rem;
+ i,
+ svg,
+ .bullet {
+ display: none;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media (max-width: 359.98px) {
+ .email-application .content-area-wrapper .sidebar .email-app-sidebar {
+ width: 230px;
+ }
+ .email-application .email-app-details .email-detail-header {
+ padding: 0 0.5rem;
+ }
+}
+
+// Keyframe animation
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ top: 100px;
+ }
+ 75% {
+ opacity: 0.5;
+ top: 0px;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+// RTL 模式
+html[data-textdirection='rtl'] {
+ .email-application {
+ .email-app-details {
+ .email-prev,
+ .email-next {
+ .action-icon i,
+ .action-icon svg {
+ transform: rotate(180deg);
+ }
+ }
+ .go-back {
+ i,
+ svg {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-file-manager.scss b/src/@core/scss/base/pages/app-file-manager.scss
new file mode 100644
index 0000000..2a853d3
--- /dev/null
+++ b/src/@core/scss/base/pages/app-file-manager.scss
@@ -0,0 +1,441 @@
+// ================================================================================================
+// 文件名:app-file-manager.scss
+// 描述:文件管理应用的 SCSS 文件.
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$file-manager-logo-height: 7.5rem;
+
+// 文件管理应用容器
+.file-manager-application {
+ // 文件管理应用侧边栏样式
+ .sidebar-file-manager {
+ width: $sidebar-width;
+ height: 100%;
+ background-color: $white;
+ border-top-left-radius: $border-radius-sm;
+ border-bottom-left-radius: $border-radius-sm;
+ transition: all 0.3s ease, background 0s;
+
+ // 卡片内部样式
+ .sidebar-inner {
+ height: inherit;
+
+ .dropdown-actions {
+ width: 100%;
+ padding: 1.5rem 1.5rem 1.8rem;
+ }
+
+ .sidebar-close-icon {
+ position: absolute;
+ top: 0.25rem;
+ right: 0.25rem;
+ font-size: $font-size-xl;
+ z-index: 5;
+ cursor: pointer;
+ }
+
+ .add-file-btn {
+ & ~ .dropdown-menu {
+ width: 85%;
+ &:before {
+ display: none;
+ }
+ }
+ }
+
+ // 卡片内部列表样式
+ .sidebar-list {
+ position: relative;
+ height: calc(100% - 85px); // 搜索部件高度 85px
+ .my-drive {
+ padding: 0.58rem 0;
+ .jstree-node {
+ .jstree-icon {
+ background-position: 0.5rem;
+ background-size: 1.3rem;
+ }
+ .jstree-anchor > .jstree-themeicon {
+ margin-right: 0.5rem;
+ }
+ &.jstree-closed {
+ > .jstree-icon {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $headings-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ &.jstree-open {
+ > .jstree-icon {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $headings-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+
+ .list-group-labels,
+ .storage-status {
+ margin-top: 2.2rem;
+ }
+
+ .list-group-item {
+ padding: 0.58rem 1.9rem;
+ font-weight: 500;
+ border: 0;
+ border-radius: 0;
+ border-left: 2px solid transparent;
+ &:hover {
+ z-index: 0 !important;
+ }
+ + .list-group-item.active {
+ margin-top: 0;
+ }
+ }
+ .active {
+ background-color: transparent;
+ border-color: $primary;
+ color: $primary;
+ }
+ }
+ }
+
+ // 单击时显示侧边栏
+ &.show {
+ transition: all 0.25s ease, background 0s !important;
+ transform: translateX(0) !important;
+ z-index: 10;
+ }
+ }
+
+ // 内容区域样式
+ .content-area-wrapper {
+ border: 1px solid $border-color;
+ border-radius: $border-radius-sm;
+
+ .content-right {
+ .content-wrapper {
+ padding: 0;
+ }
+ }
+
+ // 文件管理应用主样式
+ .file-manager-main-content {
+ border-left: 1px solid $border-color;
+ height: inherit;
+
+ // 搜索栏
+ .file-manager-content-header {
+ padding: 0.4rem 1rem;
+ border-bottom: 1px solid $border-color;
+ background-color: $white;
+ border-top-right-radius: $border-radius;
+
+ .file-manager-toggler {
+ cursor: pointer;
+ }
+
+ input {
+ border-color: transparent;
+ box-shadow: none;
+ }
+
+ .file-actions:not(.show) {
+ display: none;
+ }
+ }
+
+ // 内容样式
+ .file-manager-content-body {
+ position: relative;
+ padding: 1.5rem 1.5rem 0;
+ height: calc(100% - 50px); // search area height
+ background-color: $white;
+ .view-container {
+ display: flex;
+ flex-wrap: wrap;
+ .file-manager-item {
+ border: 1px solid $border-color;
+ margin-bottom: 1.6rem;
+ box-shadow: none;
+ margin-right: 1rem;
+ transition: none;
+ cursor: pointer;
+
+ .card-body {
+ padding: 1rem;
+ padding-bottom: 0.5rem;
+ }
+
+ .custom-control-input:not(:checked) ~ .custom-control-label:before {
+ background-color: transparent;
+ }
+
+ .file-logo-wrapper {
+ padding: 1rem;
+ height: $file-manager-logo-height;
+ background-color: $body-bg;
+ .feather-folder {
+ stroke: $gray-100;
+ }
+ }
+
+ .dropdown-menu {
+ transform: none;
+ &:before {
+ display: none;
+ }
+ }
+
+ .content-wrapper {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ height: auto;
+ }
+
+ .file-date {
+ flex-grow: 1;
+ margin-bottom: 0;
+ }
+
+ &.selected {
+ border-color: $primary;
+ }
+ }
+
+ .file-name {
+ width: calc(100% - 26rem);
+ min-height: 1rem;
+ font-weight: 600;
+ flex-grow: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .files-section-title {
+ width: 100%;
+ }
+
+ &.list-view {
+ flex-direction: column;
+
+ .files-section-title {
+ display: none;
+ }
+ .files-header {
+ display: flex;
+ justify-content: space-between;
+ margin-left: 7.2rem;
+ margin-bottom: 1rem;
+
+ p {
+ font-weight: 600;
+ }
+
+ .file-last-modified,
+ .file-item-size {
+ margin-right: 3rem;
+ }
+ }
+
+ .file-manager-item {
+ flex-direction: row;
+ flex: 0 0 100%;
+ align-items: center;
+ max-width: 100%;
+ margin-bottom: 0.75rem;
+ margin-right: 0;
+ .file-logo-wrapper {
+ padding-right: 0;
+ width: auto;
+ height: auto;
+ background-color: transparent !important;
+
+ img {
+ height: 1.5rem;
+ }
+
+ .feather-folder,
+ .feather-arrow-up {
+ width: 19px;
+ height: 18px;
+ }
+
+ .dropdown {
+ position: absolute;
+ right: 1rem;
+ }
+ }
+ .custom-checkbox {
+ margin: 0 0.4rem 0 1.75rem;
+ }
+
+ .file-accessed {
+ display: none;
+ }
+
+ .file-size {
+ width: 5.71rem;
+ flex-grow: 1;
+ margin-bottom: 0;
+ }
+ }
+ .folder {
+ &.level-up {
+ .file-logo-wrapper {
+ margin-left: 3.5rem;
+ }
+ }
+ }
+ }
+
+ &:not(.list-view) {
+ .files-header {
+ display: none;
+ }
+
+ .file-manager-item {
+ .content-wrapper {
+ margin-bottom: 0rem;
+ }
+
+ .file-date {
+ display: none;
+ }
+ .file-size {
+ color: $text-muted;
+ font-size: 85%;
+ }
+ &:not(.selected):not(:hover) {
+ .custom-checkbox,
+ .toggle-dropdown {
+ opacity: 0;
+ }
+ }
+ .feather-folder {
+ height: 32px;
+ width: 35px;
+ }
+ &.folder.level-up {
+ display: none !important;
+ }
+ .custom-checkbox {
+ position: absolute;
+ top: 1rem;
+ left: 1rem;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// 最大宽度 1200px 的媒体查询
+@media screen and (max-width: 1200px) {
+ .file-manager-application {
+ .content-right {
+ width: 100%;
+ }
+ .content-body {
+ margin-left: 0 !important;
+ }
+ .content-area-wrapper {
+ .file-manager-main-content {
+ border-left: 0;
+ }
+ }
+
+ .sidebar-left {
+ .sidebar {
+ z-index: 10;
+
+ .sidebar-file-manager {
+ transform: translateX(-112%);
+ transition: all 0.25s ease;
+ position: absolute;
+ }
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(sm) {
+ .file-manager-application {
+ .view-container {
+ .file-manager-item {
+ flex: 47%;
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(xs) {
+ .file-manager-application {
+ .content-area-wrapper {
+ .file-manager-main-content {
+ .file-manager-content-header {
+ padding-left: 0.5rem;
+
+ .file-actions {
+ .dropdown {
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+ }
+ }
+ }
+ }
+ .view-container {
+ .file-manager-item {
+ flex: 0 0 100%;
+ max-width: 100%;
+ }
+ &.list-view {
+ .file-date,
+ .file-last-modified,
+ .file-size,
+ .file-item-size {
+ display: none !important;
+ }
+ }
+ }
+ }
+ }
+}
+
+@include media-breakpoint-up(xs) {
+ .file-manager-application {
+ .view-container {
+ .file-manager-item {
+ flex: 0 0 47%;
+ max-width: 50%;
+ }
+ }
+ }
+}
+
+@include media-breakpoint-up(sm) {
+ .file-manager-application {
+ .view-container {
+ .file-manager-item {
+ flex: 0 0 23%;
+ max-width: 25%;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-invoice-list.scss b/src/@core/scss/base/pages/app-invoice-list.scss
new file mode 100644
index 0000000..6d9e7af
--- /dev/null
+++ b/src/@core/scss/base/pages/app-invoice-list.scss
@@ -0,0 +1,95 @@
+// ================================================================================================
+// 文件名:app-invoice-list.scss
+// 描述:账单应用列表 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+.invoice-list-wrapper {
+ .dataTables_wrapper {
+ .dataTables_length,
+ .dataTables_filter {
+ label {
+ margin-top: 0.55rem;
+ }
+ }
+ .dataTables_length {
+ select {
+ margin-left: 0.5rem;
+ }
+ }
+ .invoice-list-table {
+ thead {
+ th {
+ &:before,
+ &:after {
+ left: auto;
+ }
+
+ &:last-child {
+ &:before,
+ &:after {
+ display: none;
+ }
+ }
+ }
+ }
+ tbody {
+ .control:before {
+ background-color: $primary;
+ line-height: 1rem;
+ font-family: $font-family-base;
+ }
+ .col-actions {
+ a:not(.dropdown-item) {
+ color: $body-color;
+ }
+ .dropdown {
+ .dropdown-item {
+ display: flex;
+ align-items: center;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @media (max-width: 470px) {
+ .invoice_status {
+ margin-top: 1rem;
+ width: 100%;
+ select {
+ margin-left: 0 !important;
+ }
+ }
+ }
+}
+
+// 响应式数据表格
+.dtr-bs-modal {
+ .modal-header {
+ flex-direction: row-reverse;
+ }
+ .modal-body {
+ padding-left: 0;
+ padding-right: 0;
+ .table {
+ tr {
+ td {
+ border-color: $border-color;
+ .col-actions {
+ a:not(.dropdown-item) {
+ color: $body-color;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-invoice-print.scss b/src/@core/scss/base/pages/app-invoice-print.scss
new file mode 100644
index 0000000..1b8e7a7
--- /dev/null
+++ b/src/@core/scss/base/pages/app-invoice-print.scss
@@ -0,0 +1,57 @@
+// ================================================================================================
+// 文件名:app-invoice-print.scss
+// 描述:账单应用打印 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+
+html,
+body {
+ background: $white !important;
+}
+
+.invoice-print {
+ min-width: 768px !important;
+ font-size: 15px !important;
+
+ .invoice-date-wrapper {
+ display: flex;
+ align-items: center;
+
+ .invoice-date-title {
+ width: 8rem;
+ }
+ }
+
+ i,
+ svg {
+ fill: $body-color !important;
+ }
+
+ .invoice-total-wrapper {
+ width: 100%;
+ max-width: 12rem;
+ .invoice-total-item {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .invoice-total-title {
+ // width: 92px;
+ margin-bottom: 0.35rem;
+ }
+ .invoice-total-amount {
+ margin-bottom: 0.35rem;
+ font-weight: 600;
+ }
+ }
+ }
+}
+
+.invoice-print * {
+ border-color: rgba($color: $black, $alpha: 0.5) !important;
+ color: $body-color !important;
+}
diff --git a/src/@core/scss/base/pages/app-invoice.scss b/src/@core/scss/base/pages/app-invoice.scss
new file mode 100644
index 0000000..70a9e27
--- /dev/null
+++ b/src/@core/scss/base/pages/app-invoice.scss
@@ -0,0 +1,168 @@
+// ================================================================================================
+// 文件名:app-invoice.scss
+// 描述:账单应用 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$product-details-bg: #fcfcfc;
+$invoice-spacing: 1.45rem 0;
+$invoice-card-body-padding: 2.5rem;
+
+// 预览、编辑和添加
+.invoice-preview,
+.invoice-edit,
+.invoice-add {
+ .invoice-padding {
+ padding-left: $invoice-card-body-padding;
+ padding-right: $invoice-card-body-padding;
+ }
+ .table {
+ th:first-child,
+ td:first-child {
+ padding-left: 2.5rem;
+ }
+ }
+ .logo-wrapper {
+ display: flex;
+ align-items: center;
+ margin-bottom: 1.9rem;
+ logo {
+
+ }
+ .invoice-logo {
+ font-size: 2.142rem;
+ font-weight: bold;
+ letter-spacing: -0.54px;
+ margin-left: 1rem;
+ margin-bottom: 0;
+ }
+ }
+ .invoice-title {
+ font-size: 1.285rem;
+ margin-bottom: 1rem;
+ .invoice-number {
+ font-weight: 600;
+ }
+ }
+ .invoice-date-wrapper {
+ display: flex;
+ align-items: center;
+
+ &:not(:last-of-type) {
+ margin-bottom: 0.5rem;
+ }
+
+ .invoice-date-title {
+ width: 7rem;
+ margin-bottom: 0;
+ }
+ .invoice-date {
+ margin-left: 0.5rem;
+ font-weight: 600;
+ margin-bottom: 0;
+ }
+ }
+ .invoice-spacing {
+ margin: $invoice-spacing;
+ }
+ .invoice-number-date {
+ .title {
+ width: 115px;
+ }
+ }
+ .invoice-total-wrapper {
+ width: 100%;
+ max-width: 12rem;
+ .invoice-total-item {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .invoice-total-title {
+ margin-bottom: 0.35rem;
+ }
+ .invoice-total-amount {
+ margin-bottom: 0.35rem;
+ font-weight: 600;
+ }
+ }
+ }
+
+ @media (min-width: 768px) {
+ .invoice-title {
+ text-align: right;
+ margin-bottom: 3rem;
+ }
+ }
+}
+
+// 编辑和添加
+.invoice-edit,
+.invoice-add {
+ .invoice-preview-card {
+ .invoice-title {
+ text-align: left;
+ margin-right: 3.5rem;
+ margin-bottom: 0;
+ }
+ .invoice-edit-input,
+ .invoice-edit-input-group {
+ max-width: 11.21rem;
+ }
+ .invoice-product-details {
+ background-color: $product-details-bg;
+ padding: 3.75rem 3.45rem 2.3rem 3.45rem;
+ .product-details-border {
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ }
+ }
+ .invoice-to-title {
+ margin-bottom: 1.9rem;
+ }
+ .col-title {
+ position: absolute;
+ top: -3.2rem;
+ }
+ .item-options-menu {
+ min-width: 20rem;
+ }
+ .repeater-wrapper {
+ &:not(:last-child) {
+ margin-bottom: 3rem;
+ }
+ }
+ .invoice-calculations {
+ .total-amt-title {
+ width: 100px;
+ }
+ }
+ }
+ @media (max-width: 769px) {
+ .invoice-preview-card {
+ .invoice-title {
+ margin-right: 0;
+ width: 115px;
+ }
+ .invoice-edit-input {
+ max-width: 100%;
+ }
+ }
+ }
+ @media (max-width: 992px) {
+ .col-title {
+ top: -1.5rem !important;
+ }
+ }
+ @media print {
+ hr {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-kanban.scss b/src/@core/scss/base/pages/app-kanban.scss
new file mode 100644
index 0000000..b6dd37a
--- /dev/null
+++ b/src/@core/scss/base/pages/app-kanban.scss
@@ -0,0 +1,156 @@
+// 核心变量和混入
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$avatar-add-new-color: rgba(108, 117, 125, 0.12);
+
+.kanban-application {
+ .kanban-wrapper {
+ width: 100%;
+ position: relative;
+ .kanban-container {
+ display: flex;
+ width: max-content !important;
+
+ // 填充以防止添加项目按钮离滚动条太近
+ padding-bottom: 1.5rem;
+
+ .kanban-board {
+ width: auto !important;
+ height: 100%;
+ background: transparent;
+ &:focus {
+ outline: 0;
+ }
+
+ .kanban-board-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding-left: 0;
+ padding-right: 0;
+ .kanban-title-board {
+ color: $headings-color;
+ font-size: 1.1rem;
+ padding: 0.5rem;
+ font-weight: 500;
+ width: 100%;
+ max-width: 13rem;
+ white-space: nowrap;
+ overflow: hidden;
+ border-radius: $card-border-radius;
+ &:hover,
+ &:focus {
+ background-color: $white;
+ }
+ &:focus {
+ outline: 0;
+ }
+ }
+ .dropdown {
+ .dropdown-toggle:after {
+ display: none;
+ }
+ }
+ }
+ .kanban-drag {
+ min-height: 1rem;
+ min-width: 18.55rem;
+ padding: 0;
+ }
+ .kanban-title-button {
+ position: absolute;
+ left: -8px;
+ bottom: 0;
+ margin: -1rem 0;
+ &:focus {
+ box-shadow: none;
+ }
+ }
+ .kanban-item {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ background: $white;
+ width: 18.55rem;
+ padding: 1rem 1.2rem;
+ margin-bottom: 1.5rem;
+ box-shadow: $box-shadow;
+ cursor: pointer;
+ @include border-radius($card-border-radius);
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1), background 0s, color 0s, border 0s;
+
+ i,
+ svg {
+ stroke: $headings-color;
+ }
+
+ .kanban-text {
+ font-weight: 500;
+ }
+ .item-dropdown {
+ display: none;
+ position: absolute;
+ right: 0rem;
+ cursor: pointer;
+ .dropdown-toggle:after {
+ display: none;
+ }
+ }
+ &:hover {
+ .item-dropdown {
+ display: block;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 添加新看板
+ .add-new-board {
+ margin-top: 22px;
+ float: left;
+ padding: 0 15px;
+ label {
+ font-size: 1rem;
+ font-weight: 700;
+ margin-bottom: 0;
+ cursor: pointer;
+ }
+ }
+
+ // 更新侧边栏样式
+ .update-item-sidebar {
+ text-align: left;
+
+ .avatar-add-member {
+ background-color: $avatar-add-new-color;
+ i,
+ svg {
+ stroke: $headings-color;
+ }
+ }
+
+ .comment-editor {
+ .ql-editor {
+ min-height: 5.5rem;
+ }
+ }
+ .comment-toolbar.ql-toolbar {
+ width: 100%;
+ text-align: right;
+ border-top: 0;
+ }
+ }
+}
+
+// 拖动项目时
+.kanban-item.gu-mirror {
+ .item-dropdown {
+ .dropdown-toggle:after {
+ display: none;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/app-todo.scss b/src/@core/scss/base/pages/app-todo.scss
new file mode 100644
index 0000000..1f87376
--- /dev/null
+++ b/src/@core/scss/base/pages/app-todo.scss
@@ -0,0 +1,299 @@
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 待办事项应用样式
+.todo-application {
+ // 内容区域边框
+ .content-area-wrapper {
+ border: 1px solid $border-color;
+ border-radius: $card-border-radius;
+
+ // 侧边栏区域
+ .sidebar {
+ .todo-sidebar {
+ width: $menu-expanded-width;
+ height: inherit;
+ display: flex;
+ background-color: $white;
+ border-top-left-radius: $card-border-radius;
+ border-bottom-left-radius: $card-border-radius;
+ transition: all 0.3s ease, background 0s;
+
+ // 侧边栏菜单
+ .todo-app-menu {
+ width: 100%;
+ z-index: 3;
+ .add-task {
+ padding: 1.5rem;
+ }
+
+ // 侧边栏菜单列表项
+ .sidebar-menu-list {
+ position: relative;
+ height: calc(100% - 80px);
+ }
+ .list-group .list-group-item {
+ padding: 0.58rem 1.5rem;
+ border: 0;
+ font-weight: $font-weight-bold;
+ letter-spacing: 0.4px;
+ border-left: 2px solid transparent;
+ border-radius: 0;
+ + .list-group-item.active {
+ margin-top: 0;
+ }
+ &:hover,
+ &:focus,
+ &.active {
+ background: transparent;
+ color: $primary;
+ }
+ &.active {
+ border-color: #3366CC;
+ }
+ }
+ }
+ }
+ }
+
+ // 富文本编辑器
+ .ql-editor {
+ padding-bottom: 0;
+ }
+
+ // 右侧内容通用样式
+ .content-right {
+ width: calc(100% - #{$menu-expanded-width});
+ border-left: 1px solid $border-color;
+ .todo-app-list {
+ height: inherit;
+ }
+ // 固定搜索栏
+ .app-fixed-search {
+ padding: 0.35rem 0.5rem;
+ border-bottom: 1px solid $border-color;
+ background-color: $white;
+ border-top-right-radius: $border-radius;
+ .input-group:focus-within {
+ box-shadow: none;
+ }
+ input,
+ .input-group-text {
+ border: 0;
+ background-color: transparent;
+ }
+ }
+
+ .todo-title {
+ margin-left: 0.5rem;
+ margin-right: 0.5rem;
+ }
+ .completed {
+ .todo-title {
+ color: $text-muted;
+ }
+ }
+ // 任务列表区域
+ .todo-task-list-wrapper {
+ position: relative;
+ height: calc(100% - 3.56rem); // 搜索框高度 (3.49rem) + 底部边框小数点后两位入至 1px
+ background-color: $white;
+ border-radius: 0;
+ .todo-task-list {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ li {
+ cursor: pointer;
+ transition: all 0.2s, border-color 0s;
+ position: relative;
+ padding: 0.893rem 2rem;
+ &:not(:first-child) {
+ border-top: 1px solid $border-color;
+ }
+ &:hover {
+ transform: translateY(-4px);
+ box-shadow: 0 3px 10px 0 $border-color;
+ transition: all 0.2s;
+ }
+ .todo-title-wrapper {
+ display: flex;
+ justify-content: space-between;
+ }
+ .todo-title-area,
+ .title-wrapper {
+ display: flex;
+ align-items: center;
+ }
+ // Todo Item Action
+ .todo-item-action {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ a {
+ cursor: pointer;
+ font-size: 1.2rem;
+ line-height: 1.5;
+ }
+ }
+
+ .badge-wrapper {
+ display: flex;
+ .badge:not(:last-child) {
+ margin-right: 0.5rem;
+ }
+ }
+ }
+ }
+ // 搜索无结果
+ .no-results {
+ display: none;
+ padding: 1.5rem;
+ text-align: center;
+ &.show {
+ display: block;
+ }
+ }
+ }
+ }
+ }
+ // 滑入关闭按钮
+ .todo-item-action {
+ .close {
+ background: transparent !important;
+ box-shadow: none !important;
+ position: unset !important;
+ transform: none !important;
+ transition: none !important;
+ }
+ }
+
+ // 拖放图标
+ .todo-item {
+ .drag-icon {
+ visibility: hidden;
+ cursor: move;
+ position: absolute;
+ left: 0.2rem;
+ width: 1.75rem;
+ height: 4rem;
+ padding: 0 5px;
+ }
+ &:hover {
+ .drag-icon {
+ visibility: visible;
+ }
+ }
+ }
+
+ // 验证文本样式
+ form .error:not(li):not(input) {
+ color: $danger;
+ font-size: 85%;
+ margin-top: 0.25rem;
+ }
+}
+
+// 任务拖动时
+.gu-mirror {
+ list-style-type: none;
+ list-style: none;
+ padding: 0.893rem 2rem;
+ background-color: $white;
+ border-top: 1px solid $border-color;
+ border-bottom: 1px solid $border-color;
+ box-shadow: 0 0 10px 0 rgba($black, 0.25);
+ .todo-title-wrapper {
+ display: flex;
+ justify-content: space-between;
+ }
+ .todo-title-area,
+ .title-wrapper {
+ display: flex;
+ align-items: center;
+ }
+ // 待办事项操作
+ .todo-item-action {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ .todo-title {
+ padding-left: 1rem;
+ }
+ &.completed {
+ .todo-title {
+ color: $text-muted;
+ }
+ }
+}
+
+// 关键帧动画
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ top: 100px;
+ }
+ 75% {
+ opacity: 0.5;
+ top: 0px;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@include media-breakpoint-down(md) {
+ .todo-application {
+ .content-area-wrapper {
+ .sidebar-left {
+ .todo-sidebar {
+ transform: translateX(-110%);
+ transition: all 0.3s ease-in-out;
+ left: 0;
+ position: absolute;
+ z-index: 5;
+ border-top-left-radius: $border-radius-sm;
+ border-bottom-left-radius: $border-radius-sm;
+ }
+ &.show {
+ .todo-sidebar {
+ transform: translateX(0%);
+ transition: all 0.3s ease;
+ }
+ }
+ }
+ .content-right {
+ width: 100%;
+ border-left: 0;
+ .app-fixed-search {
+ border-top-left-radius: $border-radius;
+ }
+ }
+ // 列表中的响应式待办事项
+ .todo-title-wrapper {
+ flex-direction: column;
+ .title-wrapper {
+ margin-bottom: 0.5rem;
+ }
+ .todo-title {
+ display: -webkit-box;
+ -webkit-line-clamp: 1;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+ .badge-wrapper {
+ margin-right: auto !important;
+ }
+ }
+ }
+ }
+}
+@media (max-width: 349.98px) {
+ .todo-application .content-area-wrapper .sidebar .todo-sidebar {
+ width: 230px;
+ }
+}
+.horizontal-menu .todo-application .content-area-wrapper .content-right .todo-task-list-wrapper {
+ height: calc(100% - 3.6rem); // 搜索框高度 (48.79px + 1px 边框 = 3.56rem), 水平需至少一位小数点
+}
diff --git a/src/@core/scss/base/pages/app-user.scss b/src/@core/scss/base/pages/app-user.scss
new file mode 100644
index 0000000..2eb33aa
--- /dev/null
+++ b/src/@core/scss/base/pages/app-user.scss
@@ -0,0 +1,106 @@
+// ================================================================================================
+// 文件名:app-users.scss
+// 描述:用户应用 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+
+$color-box-size: 2.714rem;
+
+// 用户列表
+.app-user-list {
+ .dataTables_wrapper {
+ .dataTables_length {
+ select {
+ margin-left: 0.5rem;
+ margin-right: 0.5rem;
+ }
+ }
+ }
+
+ @media (max-width: 767px) {
+ .header-actions {
+ .dataTables_length {
+ text-align: left;
+ }
+ & > div[class^='col-']:last-child {
+ padding-left: 0;
+ }
+ }
+ }
+}
+
+// 用户视图
+.app-user-view {
+ .user-info-wrapper {
+ .user-info-title {
+ width: 11.785rem;
+ }
+ }
+ .user-total-numbers {
+ margin-top: 2.428rem;
+ .color-box {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: $color-box-size;
+ width: $color-box-size;
+ border-radius: $border-radius;
+
+ i,
+ svg {
+ height: 1.285rem;
+ width: 1.285rem;
+ font-size: 1.285rem;
+ }
+ }
+ }
+}
+
+// 用户编辑
+.app-user-edit {
+ .nav-pills {
+ margin-bottom: 2.3rem;
+ .nav-link {
+ i,
+ svg {
+ font-size: 0.921rem;
+ margin-right: 0.5rem;
+ }
+ }
+ }
+
+ @media (max-width: 576px) {
+ .nav-pills {
+ .nav-link {
+ i,
+ svg {
+ height: 1.2rem;
+ width: 1.2rem;
+ font-size: 1.2rem;
+ margin-right: 0;
+ }
+ }
+ }
+ }
+}
+
+// RTL 模式
+html[data-textdirection='rtl'] {
+ .app-user-list {
+ .dataTables_filter {
+ input {
+ margin-right: 0;
+ margin-left: 0.5rem;
+ }
+ }
+
+ .dropdown .dropdown-menu.dropdown-menu-right {
+ right: 3.57rem !important;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/dashboard-ecommerce.scss b/src/@core/scss/base/pages/dashboard-ecommerce.scss
new file mode 100644
index 0000000..e93e4dd
--- /dev/null
+++ b/src/@core/scss/base/pages/dashboard-ecommerce.scss
@@ -0,0 +1,66 @@
+// ================================================================================================
+// 文件名:dashboard-ecommerce.scss
+// 描述:电商模板页 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 统计卡片
+.card-statistics {
+ .statistics-body {
+ padding: 2rem 2.4rem !important;
+ }
+
+ @include media-breakpoint-down(md) {
+ .card-header,
+ .statistics-body {
+ padding: 1.5rem !important;
+ }
+ }
+}
+
+// 企业表格卡片
+.card-company-table {
+ thead th {
+ border: 0;
+ }
+ td {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+
+ .avatar {
+ background-color: $body-bg;
+ margin-right: 2rem;
+
+ img {
+ border-radius: 0;
+ }
+ }
+ }
+}
+
+// 浏览器状态卡片
+.card-browser-states {
+ .browser-states {
+ &:first-child {
+ margin-top: 0;
+ }
+ &:not(:first-child) {
+ margin-top: 1.7rem;
+ }
+ }
+}
+
+// 交易列表卡片
+.card-transaction {
+ .transaction-item {
+ &:not(:last-child) {
+ margin-bottom: 1.5rem;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/page-auth.scss b/src/@core/scss/base/pages/page-auth.scss
new file mode 100644
index 0000000..2d1e7c0
--- /dev/null
+++ b/src/@core/scss/base/pages/page-auth.scss
@@ -0,0 +1,106 @@
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$auth-1-inner-max-width: 400px !default;
+
+.auth-wrapper {
+ display: flex;
+ flex-basis: 100%;
+ min-height: 100vh;
+ min-height: calc(var(--vh, 1vh) * 100);
+ width: 100%;
+
+ .auth-inner {
+ width: 100%;
+ position: relative;
+ }
+
+ &.auth-v1 {
+ align-items: center;
+ justify-content: center;
+ overflow: hidden; // 用于 v1 页面的长身份验证表单滚动
+ .auth-inner {
+ &:before {
+ width: 244px;
+ height: 243px;
+ content: ' ';
+ position: absolute;
+ top: -54px;
+ left: -46px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAADzCAMAAACG9Mt0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAA9KADAAQAAAABAAAA8wAAAADhQHfUAAAAyVBMVEUAAAD///+AgP+AgP9mZv+AgNWAgP9tbf9gYP+AgP9xcf9mZv+AZuaAgP9dXf90dOhiYv92dv9mZu5mZv93d+53d/9paf94afCAcfFrXvJra/9mZvJzZvJzc/JoaP96b/Rqav91aupsYvV2bOt2bPVxaPZ7cfZqavZyau1waPd4aO9xafBxafh4afB1bfh4avFuZ/F2afJzZvJzZ/N0aPN0bvN3bPR0ae5yZ/R3be93bfR1au9zafBxbPVzavV0a/F0a/ZyafFwaPKZm3nTAAAAQ3RSTlMAAQIEBQYGBwgICQoKCgsLDQ0PDw8PERESExMUFBQWFxgYGhoaGxsdHSAgIiIiIyQlJygqLCwtLi8vLzAzNDU3Nzg7h9vbHgAAA9RJREFUeNrt3ftS2kAUx/Fc1gSyWsErtuJdRDQiiteolb7/QzUoTm07k4AzObuu3/MCez45yWbzT36eZ6b8erO1e1B97baadd+zocJWmg0HaXe/+uqmg2GWtkLT5Lle1m9LdhG2+1lvzuiUO1knEF81yFc1N+35m15kZOGodz1vyLx+v2Lseq/erxtZd/NuweCTtfiwaWLOD5FnsqI7+VnP3y8afnEs3Es/1+H1qvETwuq18B7e6VlwLup1ZM8kWWQBOsrmHL7GVtxvYRZYgQ4ywae61ffsqH5Lbq20bQm6ncp9P2ehJegwE/u+rl95ttSwLrVSc2ANetAU28dSa9Cp2E623bUG3d2VWmn/wBq0XCugQYMGLdVKoOJaoiuok1NdXSW1WAUfRPtRUllflaJf5ZE/O9pXVbZUPTov5c+IDqvtRwStdTgLutoxy6GnGfYb2o+1I2gd+1OiqzfLocvVE7TSDqG1mgodaqfQZbvZC9rXjqG1X45WzqFVKVpk0LLo4lGP0ZGD6KgMnTiITkrQgXYQrYNitHISrYrRsZPouBhdcxJdK0YnTqKTYrR2Eq1BgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRoh9DH59ag86ACoSYOL61B55EUQk1s3VqDzsNHhJpYe7QGncfMSHUxaliCHgcKSXVxeWQJehwdJdXF4dAS9DgkTKqLxuibFeiXODixNi7OrEC/BP+JtbE0WrYA/RrxKNfH2YUF6NegSbk+Gk87xtErN6EsWm88fzeMXpwE9EruLns/l42io4dJFLPo2/Po1w+D6IW7t9Bt2SPx3vOOMfS7eHVZtN54ulg2go56138Ct4XRunE2Ovsmjg46WeddUoUWr6WL0fCoIYgO2/2s91fstDZQjcPL0ePt5flpdXUwqW46uMrS1j95JNpQrW0dHp9UV/uT2m416/8HVGg3qzhpBjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KC/FDpx0pwUo2tOomvF6NhJdFyMVk6iVTE6cBIdeF9vJyvZx/I/AzuIjsrQvoNovwzt4FamSs0Ojrp80PmvoB0zh940pb7azf1yg7t0LIt978uppzbnalfucDW92ZndLPRmKweGPduYJ+zoM5/Dk+gD5NdvLhXXPp88qcUqmEH5G5JZRs6cuxwIAAAAAElFTkSuQmCC');
+ @include media-breakpoint-down(xs) {
+ display: none;
+ }
+ }
+ &:after {
+ width: 272px;
+ height: 272px;
+ content: ' ';
+ position: absolute;
+ bottom: -55px;
+ right: -75px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARAAAAEQCAMAAABP1NsnAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABEKADAAQAAAABAAABEAAAAAAQWxS2AAAAwFBMVEUAAAD///+AgICAgP9VVaqqVf+qqv+AgL+AgP9mZsxmZv+ZZv+AgNWAgP9tbdttbf+Sbf+AYN+AgN+AgP9xceNmZv+AZuaAZv90dOh0dP9qav+AauqAav+AgP92dv9tbf+Abe2Abf93Zu53d+6AcO94afCAcfF5a+R5a/JzZuaAZvKAc/J5bed5bfOAaPN6b/R1auqAavR6ZvV6cPV2bOuAbPV7aPZ2be2AbfZ7au17avZ3Zu53b+57a+97a/d4aO9J6CoeAAAAQHRSTlMAAQICAwMDBAQFBQUGBgcHBwgICAkKCgoLCwwMDAwNDg4ODw8QERITExQUFBUVFhcYGBkZGhobHBwdHR4eHx8gJ5uMWwAAA/FJREFUeNrt2G1XEkEYxvHZNk2xHGzdbKFl0cTwgdSkCKzu7/+t4pw6sAjtjIueE/f8r3fMO35nZnbuy5gVGcvfzJe0rnTfGI+MggGJRUZnbpPIhJKt88nU53JnFULvyISY6KAv8vPj0vr2rYwiE2Z2B9J+uNYcyyQxwWZvaeGH3G4bMjsvI/kcwTC/V+7kLoahlITzQojP3ZFgsJCh7IJQzpX0QFj4uMiY18eDMZ9bZCF9OQahnK6cm/Y7js0sh/LF3Auv1PlQd3MxbdXYIQspV44EEEAAAWTNDAYYkKdJbNMsLzYueZbaZ2iM46RVbHBaiZ9Js+nHEdli42N9XuSen5hGp1CQTuOJQDRsD99N4gMSpYWapNH6IJo83CIeILZQFesEaber79NCWRoukOpNEnW0gXQqD81w6ACxhbrYde7VuFCYeA2QRCNIsgZISyNIqz6IyhPjOjNVIFYniK3dmKU6QdLaJUimEySrDZLrBMlrgxRKU7sxCw/EMe0CAggggADySJCqxixIkKpNEh6IozELD8RxjQACCCCAAPJIkKrGLEgQXqqAAEJjxrQLCCCAAEJjRmNGY8a0CwgggABCYwYIfQgggNCYMe0CAggggNCY0ZjRmDHtAgIIIIAAQmNGHwIIIDRmTLuAAAIIIDRmNGY0Zky7gAACCCCA0JjRhwACCI0Z0y4ggAACCI0ZjRmNGdMuIIAAAgggNGb0IYAAQmPGtAsIIIAAQmNGY0ZjxrQLCCCAAAIIjRl9CCCA0Jgx7QICCCCA0JjRmNGYMe0CAggggABCY0YfAgggNGZMu4AAAgggNGY0ZjRmTLuAAAIIIIDQmNGHAAIIjRnTLiCAAAIIjRmNGY0ZIEy7gAACCCA0ZvQhgABCY8a0CwgggABCY0ZjBgiNGdMuIIAAAgiN2f/Sh+Q6PfLaIJlOkKw2SKoTJK3dmFmdILb2tBvrBIlrg5iWRo+WqQ+SaARJ1gCJAzsxThCN16p1vNurGjNjoo42j07kAHFskoY2kEbl33U0ZgoPjXW+Rl0gkarnahqtDaJKxMPDDWIiNafGenh4gExvVhXfmk7Da6L1AVGxSby2h6MxK79Zk42ea1pJbJ48sU2zDezQ8iy1z6BBwoyjMQsvXp8YQAAhgADilRfyy+wf8WqZZUfGZihvgZiB3FybC+kCUU5XLkAo50C+gbBQdUzkAIVyejIAYfFTI1solHP2HgNCnHn5AYNy4jvpoVB6fVzL91cwzLJ9Lfd7S0jhehxO5H5/yePr1W6gHonI7fJ5ORSR/n6Q2yQanq763zuXU5LJZRKiyD/W9/pjkdPZz0/yJ8fqVyry+qQZDMjJKoDfy8bRVhHhQTwAAAAASUVORK5CYII=');
+ z-index: -1;
+ @include media-breakpoint-down(xs) {
+ display: none;
+ }
+ }
+ }
+ }
+
+ &.auth-v2 {
+ align-items: flex-start;
+ .auth-inner {
+ height: 100vh;
+ overflow-y: auto; // 用于 v2 页面的长身份验证表单滚动
+ height: calc(var(--vh, 1vh) * 100);
+ }
+ .brand-logo {
+ position: absolute;
+ top: 2rem;
+ left: 2rem;
+ margin: 0;
+ z-index: 1;
+ }
+ }
+
+ &.auth-v1 .auth-inner {
+ max-width: $auth-1-inner-max-width;
+ }
+
+ .brand-logo {
+ display: flex;
+ justify-content: center;
+ margin: 1rem 0 2rem 0;
+ .brand-text {
+ font-weight: 600;
+ }
+ }
+
+ .auth-footer-btn {
+ .btn {
+ padding: 0.6rem !important;
+ &:not(:last-child) {
+ margin-right: 1rem;
+ }
+ }
+ }
+}
+
+@media (min-width: 1200px) {
+ .auth-wrapper {
+ &.auth-v2 .auth-card {
+ width: $auth-1-inner-max-width;
+ }
+ }
+}
+
+.auth-wrapper .auth-bg {
+ background-color: $white;
+}
+
+.dark-layout {
+ .auth-wrapper .auth-bg {
+ background-color: $theme-dark-card-bg;
+ }
+}
diff --git a/src/@core/scss/base/pages/page-blog.scss b/src/@core/scss/base/pages/page-blog.scss
new file mode 100644
index 0000000..68bff33
--- /dev/null
+++ b/src/@core/scss/base/pages/page-blog.scss
@@ -0,0 +1,63 @@
+// ================================================================================================
+// 文件名:page-blog.scss
+// 描述:博客相关页面 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 博客列表
+.blog-list-wrapper {
+ // 限制博客标题为 2 行
+ .blog-title-truncate {
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+
+ // 限制博客内容为 3 行
+ .blog-content-truncate {
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+}
+
+// 博客详情
+.blog-detail-wrapper {
+ .blog-detail-share .dropdown-menu {
+ min-width: auto;
+ }
+}
+
+// 博客右侧边栏
+.blog-sidebar {
+ .blog-recent-posts {
+ img {
+ object-fit: cover;
+ }
+ // 博客文章标题为链接时鼠标悬停于链接上
+ .text-body-heading:hover {
+ color: $link-hover-color !important;
+ }
+ }
+
+ .blog-recent-post-title,
+ .blog-category-title {
+ line-height: 23px;
+ letter-spacing: 0;
+ }
+}
+
+// 博客编辑
+.blog-edit-wrapper {
+ .border {
+ border-color: $input-border-color !important;
+ }
+}
diff --git a/src/@core/scss/base/pages/page-coming-soon.scss b/src/@core/scss/base/pages/page-coming-soon.scss
new file mode 100644
index 0000000..503f361
--- /dev/null
+++ b/src/@core/scss/base/pages/page-coming-soon.scss
@@ -0,0 +1,19 @@
+// ================================================================================================
+// 文件名:page-coming-soon.scss
+// 描述:敬请期待页面的 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+.clockCard {
+ float: left;
+}
+
+.getting-started {
+ font-size: 3rem;
+}
+.lead {
+ font-size: 1rem;
+}
diff --git a/src/@core/scss/base/pages/page-faq.scss b/src/@core/scss/base/pages/page-faq.scss
new file mode 100644
index 0000000..c14def0
--- /dev/null
+++ b/src/@core/scss/base/pages/page-faq.scss
@@ -0,0 +1,67 @@
+// ===============================================================================================
+// 文件名:page-faq.scss
+// 描述:常见问题页面的 SCSS 文件
+// ---------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 常见问题搜索部件
+.faq-search {
+ background-size: cover;
+ background-color: rgba($primary, 0.12) !important;
+ .faq-search-input {
+ .input-group {
+ // 移除内部焦点上的输入组框阴影
+ &:focus-within {
+ box-shadow: none;
+ }
+ }
+ }
+}
+
+// 联系卡片
+.faq-contact {
+ .faq-contact-card {
+ background-color: rgba($gray-100, 0.12);
+ }
+}
+
+// LG 及更大屏幕的搜索栏填充
+@include media-breakpoint-up(lg) {
+ .faq-search {
+ .card-body {
+ padding: 8rem !important;
+ }
+ }
+}
+
+// MD 屏幕的搜索栏填充
+@include media-breakpoint-only(md) {
+ .faq-search {
+ .card-body {
+ padding: 6rem !important;
+ }
+ }
+}
+
+// MD 以上屏幕的搜索栏填充
+@include media-breakpoint-up(md) {
+ // MD 以上屏幕搜索框宽度固定
+ .faq-search {
+ .faq-search-input {
+ .input-group {
+ width: 576px;
+ margin: 0 auto;
+ }
+ }
+ }
+ // 修复导航折叠时矢量图像不会随折叠移动
+ .faq-navigation {
+ height: 550px;
+ }
+}
diff --git a/src/@core/scss/base/pages/page-knowledge-base.scss b/src/@core/scss/base/pages/page-knowledge-base.scss
new file mode 100644
index 0000000..ffeb70c
--- /dev/null
+++ b/src/@core/scss/base/pages/page-knowledge-base.scss
@@ -0,0 +1,77 @@
+// ===============================================================================================
+// 文件名:page-knowledge-base.scss
+// 描述:知识库页面 SCSS 文件
+// ---------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+$svg-bg: #fcfcfc;
+
+// 知识库搜索栏背景
+.knowledge-base-bg {
+ background-size: cover;
+ background-color: rgba($primary, 0.12) !important;
+
+ // 知识库搜索栏
+ .kb-search-input {
+ .input-group {
+ // 移除内部焦点上的输入组框阴影
+ &:focus-within {
+ box-shadow: none;
+ }
+ }
+ }
+}
+
+//
+.kb-search-content-info {
+ .kb-search-content {
+ .card-img-top {
+ background-color: $svg-bg;
+ }
+ }
+ .no-result {
+ &.no-items {
+ display: none;
+ }
+ }
+}
+// 知识库标题
+.kb-title {
+ display: flex;
+ align-items: center;
+}
+
+// MD 及以上屏幕的搜索框宽度固定
+@include media-breakpoint-up(md) {
+ .knowledge-base-bg {
+ .kb-search-input {
+ .input-group {
+ width: 576px;
+ margin: 0 auto;
+ }
+ }
+ }
+}
+
+// LG 及以上屏幕的搜索栏填充
+@include media-breakpoint-up(lg) {
+ .knowledge-base-bg {
+ .card-body {
+ padding: 8rem;
+ }
+ }
+}
+// MD 屏幕的搜索栏填充
+@include media-breakpoint-only(md) {
+ .knowledge-base-bg {
+ .card-body {
+ padding: 6rem;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/page-misc.scss b/src/@core/scss/base/pages/page-misc.scss
new file mode 100644
index 0000000..f165a8f
--- /dev/null
+++ b/src/@core/scss/base/pages/page-misc.scss
@@ -0,0 +1,36 @@
+// ================================================================================================
+// 文件名:page-misc.scss
+// 描述:其他页面的杂项 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+$misc-inner-max-width: 750px;
+
+.misc-wrapper {
+ display: flex;
+ flex-basis: 100%;
+ min-height: 100vh;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+
+ .misc-inner {
+ position: relative;
+ max-width: $misc-inner-max-width;
+ }
+
+ .brand-logo {
+ display: flex;
+ justify-content: center;
+ position: absolute;
+ top: 2rem;
+ left: 2rem;
+ margin: 0;
+ .brand-text {
+ font-weight: 600;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/page-pricing.scss b/src/@core/scss/base/pages/page-pricing.scss
new file mode 100644
index 0000000..2173af8
--- /dev/null
+++ b/src/@core/scss/base/pages/page-pricing.scss
@@ -0,0 +1,100 @@
+// ===============================================================================================
+// 文件名:page-pricing.scss
+// 描述:定价页面的 SCSS 文件
+// ---------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 价格卡片
+.pricing-card {
+ // 卡片激活态边框
+ .card {
+ &.popular {
+ border: 1px solid $primary;
+ }
+ }
+ // 列表组子项圆圈
+ .list-group-circle {
+ font-weight: $font-weight-bold;
+ color: $headings-color;
+ }
+ // 月付价格数值
+ .annual-plan {
+ margin-bottom: 1.7rem;
+ .plan-price {
+ sup {
+ top: -1.5rem;
+ left: 0.2rem;
+ }
+ span {
+ font-size: 3.5rem;
+ line-height: 0.8;
+ }
+ sub {
+ bottom: 0;
+ right: 0.14rem;
+ }
+ }
+
+ // 年付价格数值
+ .annual-pricing {
+ position: absolute;
+ margin: auto;
+ left: 0;
+ right: 0;
+ }
+ }
+}
+
+// 免费试用卡片
+.pricing-free-trial {
+ height: 16.71rem;
+ background-color: rgba(186, 191, 199, 0.12);
+ margin-right: -$content-padding;
+ margin-left: -$content-padding;
+ margin-top: 7.5rem;
+ margin-bottom: 6.3rem;
+
+ // 行默认边距设为 0,否则会导致出现水平滚动条
+ .row {
+ margin: 0;
+ }
+ // 内容容器
+ .pricing-trial-content {
+ padding: 0 1rem;
+ // 卡片图片
+ img {
+ position: relative;
+ top: -3.1rem;
+ }
+ }
+}
+
+// SM 及以下屏幕免费试用卡片
+@include media-breakpoint-down(sm) {
+ .pricing-free-trial {
+ height: auto;
+ .pricing-trial-content {
+ flex-direction: column;
+ align-items: center;
+ .pricing-trial-img {
+ top: 0;
+ margin-top: 2rem;
+ height: 150px;
+ }
+ }
+ }
+}
+
+// XS 屏幕免费试用卡片
+@include media-breakpoint-down(xs) {
+ .pricing-free-trial {
+ margin-right: -1.2rem;
+ margin-left: -1.2rem;
+ }
+}
diff --git a/src/@core/scss/base/pages/page-profile.scss b/src/@core/scss/base/pages/page-profile.scss
new file mode 100644
index 0000000..0d1a568
--- /dev/null
+++ b/src/@core/scss/base/pages/page-profile.scss
@@ -0,0 +1,146 @@
+// ================================================================================================
+// 文件名:page-profile.scss
+// 描述:不同于博客用户详情的个人主页页面 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+// 个人主页样式
+#user-profile {
+ // 个人主页顶部卡片
+ .profile-header {
+ overflow: hidden;
+
+ // 顶部卡片图片容器
+ .profile-img-container {
+ position: absolute;
+ bottom: -2rem;
+ left: 2.14rem;
+ z-index: 2;
+
+ // 个人主页图片背景
+ .profile-img {
+ height: 8.92rem;
+ width: 8.92rem;
+ border: 0.357rem solid $white;
+ background-color: $white;
+ border-radius: $card-border-radius;
+ box-shadow: $box-shadow;
+ }
+ }
+
+ // 个人主页导航栏填充
+ .profile-header-nav {
+ .navbar {
+ padding: 0.8rem 1rem;
+
+ // 导航切换按钮
+ .navbar-toggler {
+ line-height: 0;
+ }
+ .profile-tabs {
+ .nav-item {
+ i,
+ svg {
+ margin-right: 0;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 个人主页信息列表部分
+ #profile-info {
+ // 星星图标
+ .profile-star {
+ color: $gray-100;
+
+ i,
+ svg {
+ // 图标填充
+ &.profile-favorite {
+ fill: $warning;
+ stroke: $warning;
+ }
+ }
+ }
+
+ // 心形图标填充
+ .profile-likes {
+ fill: $danger;
+ stroke: $danger;
+ }
+
+ // 进度条高度
+ .profile-polls-info {
+ .progress {
+ height: 0.42rem;
+ }
+ }
+ }
+
+ // 相册图片及悬停态动画
+ .profile-latest-img {
+ transition: all 0.2s ease-in-out;
+ &:hover {
+ transform: translateY(-4px) scale(1.2);
+ z-index: 10;
+ }
+ img {
+ margin-top: 1.28rem;
+ }
+ }
+
+ // 加载更多 - 添加空白元素
+ .block-element {
+ .spinner-border {
+ border-width: 0.14rem;
+ }
+ }
+}
+
+// 相册图片尺寸
+@include media-breakpoint-down(md) {
+ #user-profile {
+ .profile-latest-img {
+ img {
+ width: 100%;
+ }
+ }
+ }
+}
+
+@include media-breakpoint-up(md) {
+ // 导航栏图标填充
+ .profile-header-nav {
+ .profile-tabs {
+ width: 100%;
+ margin-left: 13.2rem;
+ }
+ }
+}
+
+// 个人主页图片和标题
+@include media-breakpoint-down(xs) {
+ #user-profile {
+ .profile-header {
+ .profile-img-container {
+ .profile-img {
+ height: 100px;
+ width: 100px;
+ }
+ .profile-title {
+ h2 {
+ font-size: 1.5rem;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/ui-colors.scss b/src/@core/scss/base/pages/ui-colors.scss
new file mode 100644
index 0000000..33ce194
--- /dev/null
+++ b/src/@core/scss/base/pages/ui-colors.scss
@@ -0,0 +1,25 @@
+// ===============================================================================================
+// 文件名:ui-colors.scss
+// 描述:模板颜色组件 SCSS
+// ---------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ===============================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+.colors-list {
+ li {
+ padding: 0.4rem;
+ i,
+ svg {
+ height: 1.2rem;
+ width: 1.2rem;
+ top: 0;
+ position: relative;
+ margin-right: 0.25rem;
+ }
+ }
+}
diff --git a/src/@core/scss/base/pages/ui-feather.scss b/src/@core/scss/base/pages/ui-feather.scss
new file mode 100644
index 0000000..b2ef589
--- /dev/null
+++ b/src/@core/scss/base/pages/ui-feather.scss
@@ -0,0 +1,59 @@
+@import '../bootstrap-extended/include';
+
+.icon-search-wrapper {
+ max-width: 300px;
+
+ .feather-search {
+ height: 1.15rem;
+ width: 1.15rem;
+ }
+}
+#icons-container {
+ .icon-card {
+ width: 128px;
+ }
+}
+
+// 卡片激活态
+.icon-card {
+ border: 1px solid transparent;
+ &.active {
+ border-color: $primary;
+ i,
+ svg {
+ color: $primary;
+ }
+ }
+}
+
+@media (max-width: 1024px) {
+ #icons-container {
+ .icon-card {
+ width: 126px;
+ }
+ }
+}
+
+@media (max-width: 768px) {
+ #icons-container {
+ .icon-card {
+ width: 131px;
+ }
+ }
+}
+
+@media (max-width: 414px) {
+ #icons-container {
+ .icon-card {
+ width: 110px;
+ }
+ }
+}
+
+@media (max-width: 375px) {
+ #icons-container {
+ .icon-card {
+ width: 150px;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/charts/chart-apex.scss b/src/@core/scss/base/plugins/charts/chart-apex.scss
new file mode 100644
index 0000000..5e97afe
--- /dev/null
+++ b/src/@core/scss/base/plugins/charts/chart-apex.scss
@@ -0,0 +1,158 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.apexcharts-canvas {
+ line[stroke='transparent'] {
+ display: none;
+ }
+ .apexcharts-tooltip {
+ background: $white;
+ border-color: $border-color;
+ .apexcharts-tooltip-title {
+ background: $white !important;
+ border-color: $border-color !important;
+ font-weight: 600;
+ }
+ &.apexcharts-theme-dark {
+ .apexcharts-tooltip-text-label,
+ .apexcharts-tooltip-text-value {
+ color: $white;
+ }
+ }
+ }
+ .apexcharts-xaxistooltip,
+ .apexcharts-yaxistooltip {
+ background: $body-bg;
+ border-color: $border-color;
+ &:after,
+ &:before {
+ border-bottom-color: $body-bg;
+ }
+ }
+ .apexcharts-text,
+ .apexcharts-tooltip-text,
+ .apexcharts-datalabel-label,
+ .apexcharts-datalabel {
+ font-family: $font-family-base !important;
+ fill: $body-color;
+ font-weight: 400;
+ filter: none;
+ }
+
+ .apexcharts-pie-label {
+ fill: white;
+ filter: none;
+ }
+
+ .apexcharts-pie {
+ .apexcharts-pie-series .apexcharts-pie-area {
+ stroke-width: 0;
+ }
+ .apexcharts-datalabel-label,
+ .apexcharts-datalabel-value {
+ font-size: 1.5rem;
+ }
+ }
+
+ .apexcharts-marker {
+ box-shadow: none;
+ }
+ .apexcharts-legend-series {
+ & + .apexcharts-legend-series {
+ margin-top: 0.625rem;
+ }
+ .apexcharts-legend-text {
+ margin-left: 0.5rem;
+ color: $body-color !important;
+ font-size: 1rem !important;
+ }
+ }
+ .apexcharts-xcrosshairs,
+ .apexcharts-ycrosshairs,
+ .apexcharts-gridline {
+ stroke: $border-color;
+ }
+}
+.apexcharts-legend.position-bottom {
+ bottom: 3rem;
+}
+
+.dark-layout {
+ .apexcharts-canvas {
+ .apexcharts-xaxis-tick,
+ line {
+ stroke: $theme-dark-border-color;
+ }
+ .apexcharts-heatmap {
+ .apexcharts-heatmap-rect {
+ stroke: $theme-dark-border-color;
+ }
+ }
+ .apexcharts-radialbar {
+ .apexcharts-radialbar-track .apexcharts-radialbar-area {
+ stroke: $theme-dark-body-bg;
+ }
+ }
+ .apexcharts-radar-series {
+ polygon {
+ fill: $theme-dark-body-bg;
+ stroke: $theme-dark-border-color;
+ }
+ }
+ .apexcharts-datalabels-group {
+ .apexcharts-datalabel-value {
+ fill: $white;
+ }
+ }
+ .apexcharts-tooltip {
+ background: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ .apexcharts-tooltip-title {
+ background: $theme-dark-card-bg !important;
+ border-color: $theme-dark-border-color !important;
+ color: $white;
+ }
+ .apexcharts-tooltip-text-label,
+ .apexcharts-tooltip-text-value {
+ color: $white;
+ }
+ }
+ .apexcharts-xaxistooltip,
+ .apexcharts-yaxistooltip {
+ background: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+ &:after,
+ &:before {
+ border-bottom-color: $theme-dark-border-color;
+ }
+ .apexcharts-xaxistooltip-text,
+ .apexcharts-yaxistooltip-text {
+ color: $white;
+ }
+ }
+ .apexcharts-xaxistooltip {
+ .apexcharts-xaxistooltip-text {
+ color: $white;
+ }
+ }
+ .apexcharts-yaxis-label,
+ .apexcharts-xaxis-label,
+ .apexcharts-tooltip-text,
+ .apexcharts-datalabel-label {
+ fill: $theme-dark-body-color;
+ }
+ .apexcharts-marker {
+ stroke: $theme-dark-border-color;
+ }
+ .apexcharts-legend-series {
+ .apexcharts-legend-text {
+ color: $theme-dark-body-color !important;
+ }
+ }
+ .apexcharts-xcrosshairs,
+ .apexcharts-ycrosshairs,
+ .apexcharts-gridline {
+ stroke: $theme-dark-border-color;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-context-menu.scss b/src/@core/scss/base/plugins/extensions/ext-component-context-menu.scss
new file mode 100644
index 0000000..9372d3e
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-context-menu.scss
@@ -0,0 +1,101 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+/********* 右键菜单 *********/
+
+.context-menu-list {
+ margin: 0;
+ padding: $dropdown-padding-y 0;
+ border-radius: $dropdown-border-radius;
+ border: $dropdown-border-width solid $dropdown-border-color;
+ box-shadow: $dropdown-box-shadow;
+ min-width: $dropdown-min-width;
+
+ .context-menu-item {
+ padding: $dropdown-item-padding-y $dropdown-item-padding-x;
+ color: $dropdown-color;
+
+ &.context-menu-submenu:after {
+ border-color: transparent transparent transparent $dropdown-color;
+ }
+
+ &.context-menu-hover,
+ &:hover,
+ &:focus {
+ background-color: $dropdown-link-hover-bg !important;
+ color: $primary;
+
+ &.context-menu-submenu:after {
+ border-color: transparent transparent transparent $primary !important;
+ }
+ }
+
+ &:focus {
+ outline: 0;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .context-menu-list {
+ background-color: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+
+ .context-menu-item {
+ background-color: $theme-dark-body-bg;
+
+ span {
+ color: $theme-dark-body-color;
+ }
+
+ &.context-menu-hover {
+ > span {
+ color: $primary;
+ }
+ }
+
+ &.context-menu-submenu:after {
+ border-color: transparent transparent transparent $theme-dark-body-color;
+ }
+ }
+ }
+}
+
+// RTL 模式
+[data-textdirection='rtl'] {
+ .context-menu-list {
+ z-index: 1031 !important;
+
+ .context-menu-item {
+ &.context-menu-submenu:after {
+ transform: rotate(180deg);
+ top: 1.2rem;
+ right: 1rem;
+ left: auto;
+ border-color: transparent $dropdown-color transparent transparent;
+ }
+
+ &.context-menu-hover {
+ &.context-menu-submenu:after {
+ border-color: transparent $primary transparent transparent !important;
+ }
+ }
+
+ > .context-menu-list {
+ left: 100%;
+ margin-left: 0;
+ }
+ }
+ }
+
+ .dark-layout {
+ .context-menu-list {
+ .context-menu-item {
+ &.context-menu-submenu:after {
+ border-color: transparent $theme-dark-body-color transparent transparent;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-drag-drop.scss b/src/@core/scss/base/plugins/extensions/ext-component-drag-drop.scss
new file mode 100644
index 0000000..6da515a
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-drag-drop.scss
@@ -0,0 +1,51 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+// 可拖动光标-抓取
+.draggable {
+ cursor: grab;
+ .gu-unselectable & {
+ cursor: grabbing;
+ }
+}
+
+// 多个列表
+#multiple-list-group-a,
+#multiple-list-group-b {
+ min-height: 5.714rem;
+}
+
+// 手柄
+#dd-with-handle {
+ .list-group {
+ min-height: 5.714rem;
+ .handle {
+ padding: 0 5px;
+ margin-right: 5px;
+ background-color: rgba($black, 0.1);
+ cursor: move;
+ font-size: 1.2rem;
+ }
+ }
+}
+.gu-mirror {
+ .handle {
+ padding: 0 5px;
+ margin-right: 5px;
+ background-color: rgba($black, 0.1);
+ cursor: move;
+ font-size: 1.2rem;
+ }
+}
+
+// 深色布局
+.dark-layout {
+ // 拖放移动元素
+ .gu-mirror {
+ &:not(.badge):not([class*='col-']) {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ box-shadow: $theme-dark-box-shadow;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-media-player.scss b/src/@core/scss/base/plugins/extensions/ext-component-media-player.scss
new file mode 100644
index 0000000..e401176
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-media-player.scss
@@ -0,0 +1,21 @@
+// ================================================================================================
+// 文件名:ext-component-media-player.scss
+// 描述:用于支持浏览器链接的媒体播放器插件 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+// 删除焦点上的轮廓
+.audio-player {
+ &:focus {
+ outline: 0;
+ }
+}
+.plyr__controls {
+ justify-content: flex-start;
+}
+.plyr__progress {
+ flex-grow: 1;
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-ratings.scss b/src/@core/scss/base/plugins/extensions/ext-component-ratings.scss
new file mode 100644
index 0000000..1f58089
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-ratings.scss
@@ -0,0 +1,57 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.jq-ry-container:not(.multi-color-ratings) {
+ .jq-ry-normal-group {
+ i,
+ svg {
+ fill: $gray-100;
+ }
+ }
+ .jq-ry-rated-group {
+ i,
+ svg {
+ fill: $warning;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .jq-ry-container:not(.multi-color-ratings) {
+ .jq-ry-normal-group {
+ i,
+ svg {
+ fill: $theme-dark-text-muted-color;
+ }
+ }
+ }
+}
+
+// RTL 模式
+[data-textdirection='rtl'] {
+ .jq-ry-container:not(.multi-color-ratings) {
+ .jq-ry-normal-group {
+ i,
+ svg {
+ fill: $warning;
+ }
+ }
+ .jq-ry-rated-group {
+ i,
+ svg {
+ fill: $gray-100;
+ }
+ }
+ }
+ .dark-layout {
+ .jq-ry-container:not(.multi-color-ratings) {
+ .jq-ry-rated-group {
+ i,
+ svg {
+ fill: $theme-dark-text-muted-color;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-sliders.scss b/src/@core/scss/base/plugins/extensions/ext-component-sliders.scss
new file mode 100644
index 0000000..f35db42
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-sliders.scss
@@ -0,0 +1,143 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+$slider_width: 6px;
+$handle-size: 1rem;
+
+.noUi-target {
+ background-color: rgba($primary, 0.12);
+ border-width: 0;
+ box-shadow: none;
+ border-radius: 1rem;
+ &.noUi-connect {
+ box-shadow: none;
+ }
+}
+
+// 水平滑块及尺寸
+.noUi-horizontal {
+ height: $slider_width;
+ .noUi-handle {
+ width: $handle-size;
+ height: $handle-size;
+ cursor: pointer;
+ right: -($handle-size - ($handle-size/7));
+ top: -4px;
+ }
+ .noUi-tooltip {
+ bottom: 135% !important;
+ }
+}
+// 点、标记和值
+.noUi-pips {
+ color: $text-muted;
+}
+.noUi-marker {
+ background: $border-color;
+}
+.noUi-value {
+ font-size: 0.857rem;
+}
+.noUi-marker-horizontal.noUi-marker,
+.noUi-marker-horizontal.noUi-marker-large {
+ height: 8px;
+}
+
+// 滑块手柄样式
+.noUi-handle {
+ box-shadow: none;
+ border: none;
+
+ &:after,
+ &:before {
+ display: none;
+ }
+ border-radius: 50%;
+ background: $white;
+ border: 2px solid $primary;
+}
+
+// 默认选定的幻灯片区域样式
+.noUi-connect {
+ background: $primary;
+ box-shadow: none;
+}
+
+// 工具栏样式
+.noUi-tooltip {
+ transform: translate(-10%, -50%);
+ font-size: 0.857rem;
+ border: none;
+ color: $body-color;
+ background-color: $body-bg;
+ padding: 0.1718rem 0.35rem;
+ font-weight: $font-weight-bold;
+}
+
+// 垂直定制器
+.noUi-vertical {
+ display: inline-block;
+ width: $slider_width;
+
+ .noUi-origin {
+ right: auto;
+ }
+
+ .noUi-handle {
+ width: 1rem;
+ height: 1rem;
+ top: -0.375rem;
+ left: -0.3rem;
+ }
+ .noUi-tooltip {
+ right: 135% !important;
+ }
+}
+
+// 悬停时弹出值
+.hover_val {
+ font: 400 12px Arial;
+ color: $body-color;
+ display: block;
+ margin: 15px 0;
+}
+
+// 删除焦点上的轮廓
+.noUi-handle:focus {
+ outline: 0;
+}
+
+// IE 带输入的滑块特定样式
+_:-ms-lang(x),
+.slider-select {
+ flex: 0 0 10%;
+ max-width: 10%;
+}
+
+// 深色布局
+.dark-layout {
+ .noUi-handle {
+ background-color: $theme-dark-card-bg;
+ }
+ .noUi-tooltip {
+ background-color: $theme-dark-body-bg;
+ color: $theme-dark-body-color;
+ }
+ .noUi-pips,
+ .noUi-value {
+ color: $theme-dark-body-color;
+ }
+ .noUi-marker {
+ background: $theme-dark-border-color;
+ }
+}
+
+// RTL 模式
+[data-textdirection='rtl'] {
+ .noUi-txt-dir-rtl.noUi-horizontal .noUi-origin {
+ right: auto;
+ }
+ .noUi-txt-dir-rtl.noUi-horizontal .noUi-handle {
+ left: -3px;
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-sweet-alerts.scss b/src/@core/scss/base/plugins/extensions/ext-component-sweet-alerts.scss
new file mode 100644
index 0000000..106ef67
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-sweet-alerts.scss
@@ -0,0 +1,124 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.swal2-container {
+ .swal2-popup {
+ border-radius: $card-border-radius;
+ padding: 2rem;
+
+ // 关闭按钮
+ .swal2-close:focus {
+ outline: none;
+ box-shadow: none;
+ }
+
+ // 内容
+ .swal2-content {
+ color: $body-color;
+ }
+
+ // 标题样式
+ .swal2-title {
+ font-size: $h3-font-size;
+ font-weight: $headings-font-family;
+ color: $headings-color;
+ }
+
+ // 移除按钮焦点上的盒子阴影
+ button.swal2-confirm:focus {
+ box-shadow: none;
+ }
+
+ // 输入框
+ input.swal2-input {
+ height: $input-height;
+ font-size: $font-size-base;
+ padding: $input-padding-y $input-padding-x;
+ color: $body-color;
+ border-color: $custom-control-border-color;
+ border-radius: $border-radius;
+ line-height: $line-height-base;
+ &:focus {
+ border-color: $primary !important;
+ box-shadow: $input-focus-box-shadow;
+ }
+ }
+
+ // 步进
+ .swal2-progress-steps {
+ .swal2-progress-step {
+ background-color: $primary;
+ &.swal2-active-progress-step {
+ ~ .swal2-progress-step-line,
+ ~ .swal2-progress-step {
+ background-color: lighten(theme-color('primary'), 15%);
+ }
+ }
+ }
+ .swal2-progress-step-line {
+ background-color: $primary;
+ }
+ }
+
+ // 前置代码
+ pre {
+ min-height: 1.35rem;
+ margin-top: 0.5rem;
+ }
+
+ // 页脚
+ .swal2-footer {
+ border-color: $border-color;
+ color: $body-color;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .swal2-container {
+ .swal2-modal {
+ background-color: $theme-dark-card-bg;
+
+ .swal2-header {
+ .swal2-title {
+ color: $theme-dark-headings-color;
+ }
+
+ .swal2-icon-text {
+ color: inherit;
+ }
+
+ .swal2-success-circular-line-left,
+ .swal2-success-circular-line-right,
+ .swal2-success-fix,
+ .swal2-animate-success-icon {
+ background-color: $theme-dark-card-bg !important;
+ }
+ }
+
+ input.swal2-input {
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+
+ .swal2-content {
+ color: $theme-dark-body-color;
+ }
+
+ pre,
+ code {
+ color: $theme-dark-body-color;
+ }
+ .swal2-input {
+ background-color: $theme-dark-card-bg;
+ }
+
+ // 页脚
+ .swal2-footer {
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-swiper.scss b/src/@core/scss/base/plugins/extensions/ext-component-swiper.scss
new file mode 100644
index 0000000..dc049b3
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-swiper.scss
@@ -0,0 +1,365 @@
+// ================================================================================================
+// 文件名:ext-component-swiper.scss
+// 描述:轮播图插件 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+// 轮播图滑块阴影
+.swiper-container {
+ .swiper-shadow {
+ box-shadow: 2px 8px 10px 0 rgba(25, 42, 70, 0.13) !important;
+ }
+}
+
+// 轮播图分页
+.swiper-pagination {
+ // 圆点分页
+ .swiper-pagination-bullet {
+ &:focus {
+ outline: none;
+ }
+ &.swiper-pagination-bullet-active {
+ background-color: $primary;
+ }
+ }
+
+ // 进度条分页
+ &.swiper-pagination-progressbar {
+ .swiper-pagination-progressbar-fill {
+ background-color: $primary;
+ }
+ }
+}
+
+// 居中幻灯片选项 1
+.swiper-centered-slides {
+ &.swiper-container {
+ .swiper-slide {
+ text-align: center;
+ font-weight: $headings-font-weight;
+ background-color: $white;
+ height: auto;
+ width: auto !important;
+ padding: 2rem 5.5rem;
+ cursor: pointer;
+
+ &.swiper-slide-active {
+ border: 2px solid $primary;
+
+ i,
+ svg {
+ color: $primary;
+ }
+ }
+ }
+ }
+ .swiper-button-next {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ .swiper-button-prev {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23'));
+ }
+ }
+
+ .swiper-button-next,
+ .swiper-button-prev {
+ height: 40px !important;
+ width: 40px !important;
+
+ &:after {
+ border-radius: 50%;
+ background-color: $primary;
+ box-shadow: 0 2px 4px 0 rgba($black, 0.5) !important;
+ background-size: 24px !important;
+ height: 40px !important;
+ width: 40px !important;
+ }
+ }
+
+ // RTL 模式
+ &.swiper-container-rtl {
+ .swiper-button-next {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ .swiper-button-prev {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ }
+}
+
+// 居中幻灯片选项 2
+.swiper-centered-slides-2 {
+ &.swiper-container {
+ .swiper-slide {
+ font-weight: $headings-font-weight;
+ background-color: $swiper-bg;
+ height: auto;
+ width: auto !important;
+ cursor: pointer;
+
+ &.swiper-slide-active {
+ color: $white;
+ background-color: $primary !important;
+ box-shadow: 0 3px 6px 0 rgba($primary, 0.5) !important;
+ }
+ }
+ }
+}
+
+// 3D 立方体效果
+.swiper-cube-effect {
+ &.swiper-container {
+ width: 300px;
+ left: 50%;
+ margin-left: -150px;
+ margin-top: -12px;
+ }
+}
+
+// 3D Coverflow 效果
+.swiper-coverflow {
+ &.swiper-container {
+ .swiper-slide {
+ width: 300px;
+ }
+ }
+}
+
+.gallery-thumbs {
+ padding: 10px 0;
+ background: $black;
+
+ .swiper-slide {
+ opacity: 0.4;
+ }
+
+ .swiper-slide-thumb-active {
+ opacity: 1;
+ }
+}
+
+// 视差引擎效果
+.swiper-parallax {
+ .swiper-slide {
+ padding: 2.67rem 4rem;
+
+ .title {
+ font-size: $h5-font-size;
+ padding: 0.5rem 0;
+ }
+
+ .text {
+ font-size: $font-size-sm;
+ }
+ }
+
+ .parallax-bg {
+ position: absolute;
+ width: 130%;
+ }
+}
+
+.swiper-virtual {
+ &.swiper-container {
+ height: 300px;
+
+ .swiper-slide {
+ // 虚拟滑块
+ font-size: $h3-font-size;
+ background-color: $kbd-bg;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+ }
+}
+
+// 自定义导航按钮图标
+.swiper-button-prev,
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+ background-image: none;
+ color: $white;
+ width: 38px;
+ font-size: $h1-font-size;
+
+ &:focus {
+ outline: none;
+ }
+}
+
+.swiper-button-prev {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ padding-right: 1px;
+ }
+}
+
+.swiper-button-next {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ padding-right: 2px;
+ }
+}
+
+.swiper-container-rtl {
+ .swiper-button-prev {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ }
+ }
+
+ .swiper-button-next {
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $primary), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 44px;
+ color: $body-color;
+ width: 44px;
+ height: 44px;
+ content: '';
+ }
+ }
+}
+
+// MD 屏幕媒体查询
+@media only screen and (max-width: 768px) {
+ //navigation button custom boxicons
+ .swiper-button-prev {
+ font-size: $h4-font-size;
+ top: 55%;
+ &:after {
+ height: 28px;
+ width: 28px;
+ background-size: 24px;
+ }
+ }
+
+ .swiper-button-next {
+ font-size: $h4-font-size;
+ top: 55%;
+ &:after {
+ background-size: 24px;
+ }
+ }
+ .swiper-centered-slides {
+ .swiper-button-next,
+ .swiper-button-prev {
+ &:after {
+ height: 28px;
+ width: 28px;
+ background-size: 18px;
+ }
+ }
+ }
+ // 视差引擎
+ .swiper-parallax {
+ .swiper-slide {
+ padding: 1rem 1.2rem;
+ }
+
+ img {
+ height: 100% !important;
+ }
+ }
+}
+
+// SM 屏幕媒体查询
+@media only screen and (max-width: 576px) {
+ // 居中滑块选项 1
+ .swiper-centered-slides {
+ &.swiper-container {
+ .swiper-slide {
+ padding: 1.6rem 2.5rem;
+
+ i,
+ svg {
+ height: $h5-font-size !important;
+ width: $h5-font-size !important;
+ font-size: $h5-font-size !important;
+ }
+ }
+ }
+ }
+
+ // 立方体
+ .swiper-cube-effect {
+ &.swiper-container {
+ width: 150px;
+ left: 70%;
+ }
+ }
+
+ // 视差引擎
+ .swiper-parallax {
+ .swiper-slide {
+ padding: 1rem 1.3rem;
+ }
+ }
+
+ // 虚拟滑块
+ .swiper-virtual {
+ &.swiper-container {
+ .swiper-slide {
+ font-size: $font-size-base;
+ }
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .swiper-container {
+ &:not(.swiper-parallax) {
+ .swiper-slide {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ &.swiper-centered-slides {
+ .swiper-slide {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ &.swiper-parallax {
+ .swiper-slide * {
+ color: $body-color;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-toastr.scss b/src/@core/scss/base/plugins/extensions/ext-component-toastr.scss
new file mode 100644
index 0000000..37bad44
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-toastr.scss
@@ -0,0 +1,252 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+// 通知容器不透明度
+#toast-container > div {
+ opacity: 1;
+ -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
+ filter: alpha(opacity=100);
+ max-width: none;
+ border-radius: $toast-border-radius;
+}
+
+// 通知容器鼠标悬停阴影
+#toast-container > div,
+#toast-container > div:hover {
+ box-shadow: $toast-box-shadow;
+}
+
+#toast-container > .toast {
+ background-image: none !important;
+}
+// 通知颜色
+.toast {
+ background-color: $white;
+ color: $body-color !important;
+ .toast-close-button {
+ color: $body-color;
+ font-size: 1.75rem;
+ font-weight: $font-weight-normal;
+ top: 0;
+ right: 0;
+ text-shadow: none;
+
+ &:focus {
+ outline: none;
+ }
+ }
+ .toast-title {
+ font-size: $font-size-base;
+ font-weight: $font-weight-bolder;
+ line-height: 1.75;
+ }
+ .toast-progress {
+ opacity: 1;
+ }
+ &:before {
+ content: '';
+ height: 24px;
+ width: 24px;
+ border-radius: 50%;
+ color: $white;
+ position: absolute;
+ left: 1rem;
+ }
+ &:after {
+ content: '';
+ background-size: $font-size-base;
+ background-repeat: no-repeat;
+ position: absolute;
+ left: 1.38rem;
+ top: 1.44rem;
+ width: $font-size-base;
+ height: $font-size-base;
+ }
+}
+
+// 通知插件没有引入 palette.scss,因为只是用了很少的颜色,并且某些类的名称(如:'error')无法在 palette.scss 中找到
+.toast-success {
+ .toast-title {
+ color: $success;
+ }
+ .toast-progress {
+ background-color: $success;
+ }
+ &:before {
+ background-color: $success;
+ }
+ &:after {
+ background-image: url(str-replace(str-replace($check, 'currentColor', $white), '#', '%23'));
+ }
+}
+.toast-error {
+ .toast-title {
+ color: $danger;
+ }
+ .toast-progress {
+ background-color: $danger;
+ }
+ &:before {
+ background-color: $danger;
+ }
+ &:after {
+ background-image: url(str-replace(str-replace($remove, 'currentColor', $white), '#', '%23'));
+ }
+}
+.toast-info {
+ .toast-title {
+ color: $info;
+ }
+ .toast-progress {
+ background-color: $info;
+ }
+ &:before {
+ background-color: $info;
+ }
+ &:after {
+ background-image: url(str-replace(str-replace($infoIcon, 'currentColor', $white), '#', '%23'));
+ }
+}
+.toast-warning {
+ .toast-title {
+ color: $warning;
+ }
+ .toast-progress {
+ background-color: $warning;
+ }
+ &:before {
+ background-color: $warning;
+ }
+ &:after {
+ background-image: url(str-replace(str-replace($warningIcon, 'currentColor', $white), '#', '%23'));
+ }
+}
+
+// 定位对齐
+.toast-top-left {
+ top: 1.3rem;
+ left: $content-padding;
+}
+.toast-top-right {
+ top: 1.3rem;
+ right: $content-padding;
+}
+.toast-top-center,
+.toast-top-full-width {
+ top: 1.3rem;
+}
+.toast-bottom-left {
+ bottom: 1.3rem;
+ left: $content-padding;
+}
+.toast-bottom-right {
+ bottom: 1.3rem;
+ right: $content-padding;
+}
+.toast-bottom-center,
+.toast-bottom-full-width {
+ bottom: 1.3rem;
+}
+
+// 媒体查询
+@media (max-width: 480px) and (min-width: 241px) {
+ #toast-container > .toast {
+ &:after {
+ top: 0.95rem;
+ }
+ .toast-close-button {
+ top: 0;
+ right: -1px;
+ }
+ }
+ #toast-container > div {
+ width: 20rem;
+ }
+ .toast-top-left {
+ left: 0;
+ }
+ #toast-container {
+ &.toast-top-center,
+ &.toast-bottom-center {
+ right: 1rem;
+ > div {
+ width: 20rem !important;
+ }
+ }
+ }
+ .toast-top-full-width,
+ .toast-bottom-full-width {
+ right: 0;
+ left: 0;
+ width: 93%;
+ > div {
+ width: 100%;
+ }
+ }
+ .toast-bottom-left {
+ left: 0.25rem;
+ bottom: 0.75rem;
+ }
+ .toast-bottom-right {
+ right: 2.25rem;
+ bottom: 0.75rem;
+ }
+ .toast-bottom-center,
+ .toast-bottom-full-width {
+ bottom: 0.75rem;
+ }
+ [data-textdirection='rtl'] {
+ #toast-container > div {
+ padding-right: 8px;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ #toast-container > div,
+ #toast-container > div:hover {
+ box-shadow: $theme-dark-box-shadow;
+ }
+ #toast-container {
+ .toast {
+ background-color: $theme-dark-card-bg;
+ color: $theme-dark-body-color !important;
+ .toast-close-button {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+}
+
+[data-textdirection='rtl'] {
+ .toast .toast-close-button {
+ @include media-breakpoint-down(xs) {
+ top: 0.55rem !important;
+ right: 0.5rem !important;
+ }
+ }
+ .toast-top-left {
+ left: 1rem;
+ right: auto;
+ }
+ .toast-top-right {
+ right: 3rem;
+ left: auto;
+ }
+ .toast-bottom-left {
+ left: 1em;
+ right: auto;
+ }
+ .toast-bottom-right {
+ right: 3rem;
+ left: auto;
+ }
+ .toast-top-full-width,
+ .toast-bottom-full-width {
+ toast-container > div {
+ left: 0;
+ right: 0;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-tour.scss b/src/@core/scss/base/plugins/extensions/ext-component-tour.scss
new file mode 100644
index 0000000..a125146
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-tour.scss
@@ -0,0 +1,80 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.shepherd-element {
+ border-radius: $border-radius;
+ width: 350px;
+ &[data-popper-placement='bottom'] {
+ margin-top: 1rem !important;
+ .shepherd-arrow:before {
+ background-color: $primary !important;
+ }
+ }
+ &[data-popper-placement='top'] {
+ margin-bottom: 1rem !important;
+ }
+ &[data-popper-placement='left'] {
+ margin-right: 1rem !important;
+ }
+ &[data-popper-placement='right'] {
+ margin-left: 1rem !important;
+ }
+
+ .shepherd-content {
+ border-radius: $border-radius;
+ // 标题
+ .shepherd-header {
+ background-color: $primary;
+ padding: 0.38rem 1.2rem;
+ border-radius: $border-radius $border-radius 0 0;
+ .shepherd-title {
+ color: $white;
+ font-weight: 500;
+ font-size: 1.1rem;
+ }
+ .shepherd-cancel-icon {
+ color: $white;
+ font-size: 1.7rem;
+
+ &:focus {
+ outline: none;
+ }
+ }
+ }
+
+ // 主体和文本
+ .shepherd-text {
+ color: $body-color;
+ padding: 0.8rem 1.2rem;
+ }
+
+ // 页脚
+ .shepherd-footer {
+ padding: 0 1.2rem 1rem;
+ justify-content: space-between;
+ .shepherd-button {
+ padding: 0.5rem 1.3rem;
+ }
+ }
+ }
+ @include media-breakpoint-down(xs) {
+ width: 300px;
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .shepherd-element {
+ background-color: $theme-dark-card-bg;
+ &:not([data-popper-placement='bottom']) {
+ .shepherd-arrow:before {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ .shepherd-content {
+ .shepherd-text {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/extensions/ext-component-tree.scss b/src/@core/scss/base/plugins/extensions/ext-component-tree.scss
new file mode 100644
index 0000000..409f06a
--- /dev/null
+++ b/src/@core/scss/base/plugins/extensions/ext-component-tree.scss
@@ -0,0 +1,154 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.jstree > .jstree-container-ul .jstree-loading > .jstree-ocl,
+.jstree > .jstree-container-ul .jstree-loading > .jstree-ocl,
+.jstree > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background-image: url('data:image/gif;base64,R0lGODlhEAAQAPMAAP////Dw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaCH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAEcRBIEOg7dWow0AiGMVCbNBhI0IjBqA2jYAgrnEkBMYPNcXymzEDXULhwQFwg4TjiNAKCj1GiBK5RAoFaul6tisItqAkIFgRnyzgpIBhmAWyQoLA5o4FDkWAM5E8TAQcFAAxUA3AlAwUjhxIKYyUKClURACH5BAkKAAAALAAAAAAQABAAAARwEEgQaHm1zjnICIgxDEuySYPhgM0QKtsICAaDLIxBbMGBBwvHxWDIaAYHlQyg+HwmgUDCc9JIEo9CAXaiRAOMw+PBrX69A4ZVEuVNDwNe4CkREBLgxEg2P8YHDwMKeE1sPAUMTCaCa2xqiiiNJ0snEQAh+QQJCgAAACwAAAAAEAAQAAAEchBIECgTtc453ggEEgROsklDc4DiYSjbBzBGEiYGAQxwUJQkgkDgMAwEBuPusTgMBihaEkYJKB4aicIgmCiGDOhpRE4UztQxuTpIZCWjTSDxwMgDMgmjoLD213gaMkdPH3lvAQwwTxR5cm47YnEnMWInEQAh+QQJCgAAACwAAAAAEAAQAAAEcBBIEChjtc45SggH8R3KJg2OFwaPUU4fwCxKqBgPNVDCMwSEwoVgCDAMi0on9TspEAaX5KPwbAa4X0DBSCR2psdi0SBdGOBNK+qgBAYKDWdAzwwEmM2nKeH+6h92GjFbgW+Dego7hHx6TTFuJiaQJhEAIfkECQoAAAAsAAAAABAAEAAABGYQSBBoKbXOOU4IhvEZyiYNhhcGC7l9QEGGjLFQA3UsCuhcK5kI0EkNNANFyMCQfBSeDcpxDAwY2JzJseRdCtpNa0mxHjdK6tmK1UiUIe31OKjCyGXc53OGvup5Vm4TgnmGJoSDExEAIfkECQoAAAAsAAAAABAAEAAABHgQSBCoUrXOGVIIQvEVwyYFhScIIFJy1fAM67AIVBkoyQAyl4JjhyBkFAKMJjA4GByvz8CzCRAYH+nAZwIwDgeCYLvVbBgIxOJBYX42Awej3KZLpgYDIerLfhYGTQYLGRl9HQYHADxVXG8IBgpdWW0AAwYMXVVLGxEAIfkECQoAAAAsAAAAABAAEAAABHMQSBDoGLXOGVQIDPMxwyaBWCIyRMlVgxCoA5FYFjYrF/N0hJ+F9zkNHouD6xPAbAKPBHOq2SQej4NsagIkCA5HgdIsTgYHafFzqQ4UBoPQMi08EAaowZHJYBYGAgZjb086gAN4Lk9MDQYXDTddJwd8FBsRACH5BAkKAAAALAAAAAAQABAAAARxEEgQ6Bi1zhlwUEoQJMMmfRj4PSVXDSE4PAqVdeJ1JUV3CDePplNwFFqi5CYgCCWfJoCiQE08NRvF4/CzeZY0Za6DHCAMvZPHYBAICAimgXADCNAIBKMNgG0GbAMLCwEOBi0bCQYhgx0INVElAVwZGxEAIfkECQoAAAAsAAAAABAAEAAABHMQSBBouHTqe8e4SqVRX+CZjChhpvkJg2VxtJKYQmqV4sU8jNgMMwkEabQRYCBo3pKjQWGasCgQig2MsyQYDMHVgLAQVAINg2NgQDASD4IR8agwsgKDwOFIgJdCEmwIAXwBBw2BEwmJAQgOJgRZSmdTZxoRACH5BAkKAAAALAAAAAAQABAAAARzEEgQaLh06sv5qBr1dYMCSlgwXspgWav3DYwJc2iQCLalnpQW57EoPkKAQWKpcBieBCSNwVPRFq5JgLFKEp69y8PBqAQQhseZsBQcAopDoZJwCQyMA0GxSIg0AwYOAXoBBQ5ZGgoIHwQEKg+JGxQCAmYaEQAh+QQJCgAAACwAAAAAEAAQAAAEbxBIEGi4dOrLe9XU4AWiNgxhV2KBYQijGCil4hqlNdDfVRiJjezyQBgfIMBOQTs0FotCcpkQiRIE1CRQ5SgPrtxF8EhUAg5DIUA4MBmPWYFRoQEYwMJj4AiSTAsEAXoBDFlTWQEPBz5aIGcMdBkTEQAh+QQJCgAAACwAAAAAEAAQAAAEcxBIEGi4dGq1xv2YBigGAgaeNgzAYSRfigWIIQyGEV9eNdQGRkKyq1gYDYXmFBA4CASBiLJaFRBYqQhV/SgOrElA0asECoaO8ZIQKMwuQeBRWCUYKKGPxVEI6g8sIUQOD00FAQmIUwOBhxcMYVsUCTAZExEAOw==');
+}
+
+.jstree .jstree-node,
+.jstree .jstree-icon,
+.jstree .jstree-file,
+.jstree .jstree-folder,
+#jstree-dnd.jstree .jstree-ok,
+#jstree-dnd.jstree .jstree-er,
+.jstree-small .jstree-node,
+.jstree-small .jstree-icon,
+.jstree-small .jstree-file,
+.jstree-small .jstree-folder,
+#jstree-dnd.jstree-small .jstree-ok,
+#jstree-dnd.jstree-small .jstree-er,
+.jstree-large .jstree-node,
+.jstree-large .jstree-icon,
+.jstree-large .jstree-file,
+.jstree-large .jstree-folder,
+#jstree-dnd.jstree-large .jstree-ok,
+#jstree-dnd.jstree-large .jstree-er {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAABgCAYAAABsS6soAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDgtMThUMTg6NTU6MzIrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTA4LTE4VDE5OjI4OjQwKzA1OjMwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTA4LTE4VDE5OjI4OjQwKzA1OjMwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc1N2M4OTEyLWRmYzMtNDM5YS1hYjJjLTcwMGRjNWQxMDkwMyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjRlN2RlN2M1LTZlY2MtMDI0Ny1hN2I0LTJmOTU3NDc3MjAzNiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNhOWQ5OTMyLWFmNmMtNGFkMy1hNTUzLTFlYjczYjRlMWI2ZCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6M2E5ZDk5MzItYWY2Yy00YWQzLWE1NTMtMWViNzNiNGUxYjZkIiBzdEV2dDp3aGVuPSIyMDIwLTA4LTE4VDE4OjU1OjMyKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NzU3Yzg5MTItZGZjMy00MzlhLWFiMmMtNzAwZGM1ZDEwOTAzIiBzdEV2dDp3aGVuPSIyMDIwLTA4LTE4VDE5OjI4OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6MDZg5AAAIR0lEQVR42u2dX4gVVRzHZ0mktWuQEeSLErgW2CIp3SJy6SkoCBZ6U0oQjArpIUVCH4rATUyjoKcEHwJ9CKLAiKg3jYoL/aOCRYNICIVKQW9CS8v2+7nnuuPZmbnjvXPmzJ7z+cCP2XV29rhn9nz2O3/PyNzcXHIzTE1NJXAd7bwR2gfw8/u3b9++oX7/RhAgACxVRIBDbY8ASWAkQCABIkAAIAEiQBIYCRBIgAgQAEiACJAERgIEEiACBA8sl1oldaf5uCwzUn9LXTQf0/6gKeup/S1ZrJZqWau6UuenTh7okgBJgLTvhruljkhtHWDbE1K7pS7Q/lACHJPFmZzV90tNiwRnSYAA1bNB6mepSalzN7HdGqmPzQD9JYD2BxnocxW030+A60V+Z2NKgC0ThbummoCv/5OPBJb+Wa80JAG67P8HpL6T2iT1fQ3b5X6fTqfzgyyXmcrjP1O3ttvtqxW2X7if5f/WMl97SmpC2j5t9s9Q7ZvD3zEj9FXW6oum8va560NkLwmw99dgwnSsbwmmd/x6qbNJ2MTW/00SoCaxMufT9FzdsroEaMnvGtL2SEUCLEp/ZXCaEH0kwN4OUR6V+tHjILR3/LC/bEshAab7X1npsf/njIhd9n+TBDgty6sltllhJORcgFnyq1iA9u/bzbJJBOhqTHpJgHaH+EoiWTu+bgH6ILb+R4BGgEZ21041yPfu5smv4kPgJgvQewL0NQjzdnyMCTD0/keACwLcYvp8wpxqGMuSn7angiQB1ifAOgdh3uCLNQGG3v8IcEGA6cG6Q+pYgfwSEmC9AlT0ZskLngafzwQ46LJKAV7fpw7b79f/LtpHgNkCTPrILwYBRpUAyww+EmB4/Y8AFx8Cl5EfCbBGAdZx+KV3xJ/v8zUx3AYTW/8jwBsvgth/hPLkRwKsSYB1nnvKeh6xR9cM0G4SNrH1P/cBpm6DsW94LpAfCbAGATblZtyYiK3/eRLEug/Qvh2mKCGRAKsXYNOeRIiN2PqfZ4E9PgtMAlwswCY+CxwTsfW/nns8LLVtgG2PS+1Jhn8bS7TtN/xRON4GA8HD+wA9tl/wLsAyOH9fIO8DBIBYIQECQLyQAAGABIgAAYAEiAABgASIAAGABIgAAYAEiAABgASIACv9K5QwN/AIvwZAAgQAIAGSAGkfgAQIAEACJAHSPgAJEACABEgCpH0AEiBAEbwP0G/7JEAESALz2L6+EfmI1NYBtj0htTsZ/o3MMbdPAkSA4BHmBPE4JwgJsJwA65ynomlzYjQhga302P+uf/4lOSvc+Pj4Q6Ojo18nDmaFy8KeLrPdbp9OKpgVjgTYX4Dpjq9jYnJmpYur/5fkvMAiwM11CTBrwnQR4EgEAvSeALXjN0p9aT6vo7ObNi+uzwSo/X8l9bmP/j8VUQKcluXVEtusEAFurEOAWfKLSIBeE2BWx9c9AJsiQd/JL+T+R4BGgPaE6Hnyi+gQ2FsCzOt4HwPQtwR9JMCY+h8BLghwi9nnE+ZUx1iW/LQ9FSQJ0I0A8wafzwEYUxKMrf8R4IIA04N1h9SxAvklJEA3AtT7ks7nrPY5AIcdhL0kN+iyqiRZZpk46P8q2nchQQSYLcCkj/xiECAJMMIkGFv/I8DFh8Bl5EcCdCRA3+egerdhFLE6Cffu99j6HwHeeBHE3u958iMBOhRg3iCso7NbZoC1ctZ3zSF6jOcCQ+x/7gNM3QZj3/BcID8SoGMBZg3CoDt7CUgwxP7nSRDrPkD7dpiihEQCdCtAexDW8SQCxNX/PAvMs8CNTYDpQdik53NjlGCo/a93HRyW2jbAtsel9iTDv40l5vZJgCUECOAK3gfI+wAbnwABAEiAAAAkQAAAEiAAAAkQAIAECABAAgQAIAECAJAAAQBIgAAAJEAAABIgAAAJEACABAgAJEAECAAkQAQIACRABBgi/SYjsollciggATZDgJ1O5xZZ3C61UuqK1OV2uz1b1U+79+hRfSPubebTfw7t3DljrdM35/5rrwuEMtNR2jBHC5AA6xCgkd9dUvuldkm9KPWR1J9VSNAIbq3Ua1L3Sm3Xwa2ik3UtI4gPpD6TOqDtyrrZgPZ1vwnJs2CWPiABuhZgSn67jAB7qIiOiAAvVSS/l0wbyufm47+k7kvmJ4C5J92uCPBSQDs7LUD9s5c30Y1OojOFAIEEWIMAC+Sn/Cb1iAhwqFmpTMJ7IyW/Hp9KvZfMz5q1zlq3VgR4LqB9TQIE8JUAJycnVXSj5tMZkdpMCfk9J/VNn8mbyybAx6R2Sz1eYpN3NQWKAEOaDhABAvhIgEZ+enHjQamnTeLSK4wt1/KzUqAeBr/VR4Iqvzf1EDGwCyEcAgP4SIAiQJXPw1JfmH/S82+vSz1Rh/ysJLhB6mCOBN8xgrwQ4FVgEiCApwS4Rha/W//8rdTmDPnpDPY/VS2/VArUq71HM9pW9Jzg3sRcHUaACBBIgFUIUA+rPsmRTh3Jr3f+cVzq/WTxBY80mk5fDlCCHAIDeEqAy03yOiT1ZMaX/Cr1ggv5pZLfM0Zs60okUZXgdi6CIEAgAQ4twJQE9SLE25YEVX7PujrsNQK8I5m/uLHVWqXn/D6UeiVDzOtFgCE9BYEAAXwkwAIJOk1+KQH2EujzycK9gL0LHheT+Wdk02LWdQcDToAcAgP4eBIkJUF9KuOk1Fcu5WdJUNt9VUqf8Lh+q0tqnabEM2bdHzwKhwCBBFipAPVJkE6no8LR0osMs1W+8KCEBItehpC5LhB4GQKA7wTI67C8weuwAJqQAAEASIAAACRAAAASIAAACRAAgAQIAEACBABY4gkQACAU/gfEuTGqiiEZXwAAAABJRU5ErkJggg==');
+}
+
+@media (max-width: 768px) {
+ #jstree-dnd.jstree-dnd-responsive > .jstree-ok,
+ #jstree-dnd.jstree-dnd-responsive > .jstree-er,
+ .jstree-responsive .jstree-icon,
+ .jstree-responsive .jstree-node,
+ .jstree-responsive .jstree-icon,
+ .jstree-responsive .jstree-node > .jstree-ocl,
+ .jstree-responsive .jstree-themeicon,
+ .jstree-responsive .jstree-checkbox,
+ .jstree-responsive .jstree-file,
+ .jstree-responsive .jstree-folder {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAHgCAMAAACsKhCPAAAAP1BMVEUAAAAzMzMzMzMzMzMzMzMzMzMzMzPS0tL///8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzPt7e0zMzMzMzM8PDx7bmBmAAAAE3RSTlMADv4GXAL9HwH8CFkdIRQKXQZQ61O9/gAABrVJREFUeNrt3euS3CYQhmFiJ5ZydBL2/q81h8o6Y+uE4EN00y//RlqpeGo0ApqGTWmSklOwAhgwYMCAAQMGDBgw4KnByxILvOS8RAL/7ZWJsxevSpzdeEXi7MerEWdHXok4e/IqxAJwznXnKrwCcRZ4j1Vn56q87eKs8B6pzs5VeoeD3+tx99wobyv4/5rcOzfM2wh+rcudc+O8beCva1N+bqC3CfxtfUrPjfS2gLc1Kjs31KsF54JTg73SR/oLy7BX+dL6ArPsFTZLX2imvbqOx1kx5JV1Lb14VYMHN17R8FDm9QBOSq+DR/pCbKcTrYxpKb3Gm6ULsaWBsDZqqfQa7lpeiG0Fs8TgpPQaHR7eCAcYEgtnHpRemyEeddjOfhDvWKy4m8Uw7ZFYczeLgfh9sepuFqda9sS6uy32wSlL77hYf6TlZbH90uotDpDyEC+pJV7aUrzEtHiph/GSS+OlDys7RoABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMuKksSyzwIl5PZR28SNdhZG3mdQewNrEo9xRrU7mXDl6xOCu9mmRI82BR+me+VQaCNQm+S75ZllFgUQq3G7AqSd8z2HYPxOwKMrs9LWdiu2vmDPelFWI/zZJI7AssEDsDt4u9gZvF7sCtYn/gRrFDcJvYI7hJ7BLcIgbMI81Li2aJjgddSwYPDA8JABDiEQXxHIE1QUvHc0t1lQk31cJkGtOlVl9a00+Ii1IevHY8lhQBrEhb8jl4WFIUcHvqoccAQKjk0njpw24KYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDPjkNtJ/Ia6/nxas3iCow5ZDSnBB7bKGKyHnJ7x36tltXykRuMxbXs+OO2lJwKXe0np23TtMAC73ltWz825pzeA73pJ6dt8fTgUuIgjuNxr8tFciFoBV3pLXm23w3V+ddXDpL+6mN7f+zSjw7beqQ3B1e+QU/PqhotV0B379VNNL8AZ+/VjVK3IGfiXW9QLdgmt7vV4f6epevtOXVv2oxmez1BDUctnxOBoUz9q1bAriuexLHwU95h08NAQtnY6W9n/XMw8Pq4O0bsfDe+/tCAEAwO7B8qCb+6jlrGBZ4Nx8IF4+NWJ9qkU++WV+Mk0+vWl9ulQ/gW19QlyfomA95UGfhGI9qUWfZmQ9bSnpE8mMJ6Yd1tHS/eRgPwUwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDDguuF8SikVw1zQje+DOiWTmwL1TBa2BuyeDGgP3T/e1BX4godsU+ImUfZPg2vPewI8suzEIbvwTn+CjX+5U4BfY4bvK3jMNGDBgwIABAwYMGHAUsDrGwDcMGDBgwIDnAIcL4oUN08YJxIebaok3mRZuujTehHi8lId4SS3x0pZSuMS0dNa1nBbspwAGDBgwYMCAAQMGDBgwYMCAAQMG7K2CgAEDBgwYMGDAgAEDBvzI/bqnOgAGDHgEOIcD51+CgT/k72KBP2WR2BFYI/YElohdgfNP0cD5YzRw/hwN3Pw79tMOv5dfg/S0rPwb+6cGDz+8l4+/MVoC7Bz88/ev5fc/pwdrv3F/4A/RwD8CBgw4NNjOflrPgFO0bxgwYMCAAQMGDBgwYMCAAQMGDNgg+FM08GTbPLorgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgD2C18cu8gxOgGOBV8B2wKuNmwIGDBgw4PDg/KasWzYPzvkf8Vpx2eVhk+B/8w/fbtftIG3x68MWwf9lXL6tVZddHDYIrkwyPbjq28P2wJVptQdXbQ6bA9cu1N+/anvYGrgydfrgqp3DxsCVyeIHV+0dtgWuTY6/3oTNJrh+McDelft3swRuWfxQvFWJIXDbYo/SpSN2wNsarkkpttbx2KnhmoRia13LvRquSScePHjY/Dw1LUjJ0q8h4M0LSdaCXC91GwHeVELWgqTrpX0DwJtq6FqQffHgmNamIsIWpKA1fxy8qYqyBTH4DW+qIm1B7P2GN1URtyDW3tL3FkvP0A7fWhw+RU/rzmL4OfrSNxb/TzJaKt/sYNW+Hob3tC7H+6v2dTgu4lG6mcXacktTMa3CzTvWJq+pqGXZZiUN4OPDgyIeRfG6+kf65PCoEE9JfLL6pXV2eFhMqyAeW9ssnR4eF8S7jj9XdjzODw+MWl7G26fLALiaX5gvx+NiPmXCLJ7z+aMZ87T+SFJwQSH1sB94rSuBvuEuX7l/cPcnhm/YOHgF7Acc7i09pgAGDBgwYMAOwX8BjFtKB7+K+X8AAAAASUVORK5CYII=');
+ }
+}
+
+.jstree .jstree-last,
+.jstree > .jstree-no-dots .jstree-node,
+.jstree > .jstree-no-dots .jstree-leaf > .jstree-ocl,
+.jstree .jstree-disabled,
+.jstree .jstree-themeicon-custom:not(.jstree-file):not(.jstree-folder) {
+ background: transparent !important;
+}
+
+// 浅色布局
+.jstree {
+ .jstree-container-ul {
+ .jstree-anchor {
+ color: $body-color;
+ &.jstree-clicked,
+ &.jstree-hovered {
+ background: transparent;
+ box-shadow: none;
+ }
+ }
+ .jstree-node {
+ .jstree-wholerow-clicked {
+ background: rgba($color: $primary, $alpha: 0.1);
+ }
+ .jstree-wholerow-hovered:not(.jstree-wholerow-clicked) {
+ background: transparent;
+ }
+ }
+ }
+}
+
+// 右键菜单样式
+.vakata-context.jstree-contextmenu {
+ background: $white;
+ border: 0;
+ box-shadow: 0px 0px 50px 0px rgba($black, 0.1);
+ li {
+ a {
+ color: $body-color;
+ padding: 0 1.5rem;
+ text-shadow: none;
+ i {
+ display: none;
+ }
+ }
+ &.vakata-context-hover > a {
+ background-color: $body-bg;
+ box-shadow: none;
+ }
+ &.vakata-context-separator {
+ a {
+ margin: 0;
+ border-color: $border-color;
+ }
+ }
+ &.vakata-contextmenu-disabled {
+ a {
+ color: $text-muted;
+ }
+ &.vakata-context-hover a {
+ background-color: transparent !important;
+ cursor: default;
+ }
+ }
+ ul {
+ background: $white;
+ border: 0;
+ box-shadow: 0px 0px 50px 0px rgba($black, 0.1);
+ }
+ }
+ .vakata-contextmenu-sep {
+ display: none;
+ }
+}
+
+// 深色布局
+.dark-layout {
+ // 文件夹图标和文本颜色
+ .jstree {
+ .jstree-container-ul {
+ .jstree-anchor {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+
+ // 右键菜单样式
+ .vakata-context.jstree-contextmenu {
+ background: $theme-dark-card-bg;
+ box-shadow: $theme-dark-box-shadow;
+ li {
+ a {
+ color: $theme-dark-body-color;
+ }
+ &.vakata-context-hover > a {
+ background-color: $theme-dark-body-bg;
+ }
+ &.vakata-context-separator a {
+ border-color: $theme-dark-border-color;
+ }
+ &.vakata-contextmenu-disabled a {
+ color: $theme-dark-text-muted-color;
+ }
+ ul {
+ background: $theme-dark-card-bg;
+ box-shadow: $theme-dark-box-shadow;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/form-file-uploader.scss b/src/@core/scss/base/plugins/forms/form-file-uploader.scss
new file mode 100644
index 0000000..950a83f
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/form-file-uploader.scss
@@ -0,0 +1,103 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.dropzone {
+ min-height: 350px;
+ border: 2px dashed $primary;
+ background: $body-bg;
+ position: relative;
+ // 拖放区域消息自定义
+ .dz-message {
+ font-size: 2rem;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ color: #3366CC;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin: 0;
+ }
+
+ // 拖放区域消息图标
+ .dz-message:before {
+ content: '';
+ background-image: url(str-replace(str-replace($download, 'currentColor', $primary), '#', '%23'));
+ font-size: 80px;
+ position: absolute;
+ top: 14rem;
+ width: 80px;
+ height: 80px;
+ display: inline-block;
+ line-height: 1;
+ z-index: 2;
+ color: $primary;
+ text-indent: 0px;
+ font-weight: normal;
+ -webkit-font-smoothing: antialiased;
+ }
+
+ // 预览文件
+ .dz-preview {
+ background: transparent !important;
+
+ .dz-error-mark,
+ .dz-success-mark {
+ z-index: 10;
+ }
+
+ .dz-image {
+ border-radius: $border-radius;
+ }
+
+ .dz-error-message {
+ background: $danger;
+ &:after {
+ border-bottom: 6px solid $danger;
+ }
+ }
+ }
+
+ // 拖放区域预览和删除图标
+ .dz-preview .dz-remove {
+ font-size: 1.1rem;
+ color: $danger;
+ line-height: 2rem;
+
+ &:before {
+ content: '';
+ background-image: url(str-replace(str-replace($remove, 'currentColor', $danger), '#', '%23'));
+ display: inline-block;
+ line-height: 1;
+ z-index: 2;
+ text-indent: 0px;
+ font-weight: normal;
+ -webkit-font-smoothing: antialiased;
+ }
+
+ &:hover {
+ text-decoration: none;
+ color: darken($danger, 10%);
+ }
+ }
+}
+
+// SM 屏幕下拉 LOGO
+@media (max-width: 576px) {
+ .dropzone {
+ .dz-message {
+ &:before {
+ top: 15rem;
+ }
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .dropzone {
+ background-color: lighten($theme-dark-card-bg, 3%);
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/form-number-input.scss b/src/@core/scss/base/plugins/forms/form-number-input.scss
new file mode 100644
index 0000000..7d99aa7
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/form-number-input.scss
@@ -0,0 +1,155 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+// Touchspin 数字输入(触控输入微调器)
+$bootstrap-touchspin-width: 8.4rem;
+$bootstrap-touchspin-width-lg: 9.375rem;
+$bootstrap-touchspin-width-sm: 6.25rem;
+
+$bootstrap-touchspin-btn-width: 20px;
+$bootstrap-touchspin-btn-height: 20px;
+$bootstrap-touchspin-btn-width-lg: 24px;
+$bootstrap-touchspin-btn-height-lg: 24px;
+$bootstrap-touchspin-btn-width-sm: 16px;
+$bootstrap-touchspin-btn-height-sm: 16px;
+
+// Bootstrap Touchspin
+.bootstrap-touchspin {
+ &.input-group {
+ width: $bootstrap-touchspin-width;
+ align-items: center;
+ .form-control {
+ padding: 5px;
+ height: auto;
+ border: 0;
+ background-color: $body-bg;
+ border-radius: $border-radius !important;
+ text-align: center;
+ font-weight: 500;
+ &:focus {
+ z-index: 1;
+ box-shadow: none;
+ }
+ }
+ }
+
+ .bootstrap-touchspin-injected {
+ margin: 0 !important;
+ &.input-group-prepend {
+ left: 12px;
+ position: relative;
+ }
+ &.input-group-append {
+ right: 12px;
+ position: relative;
+ }
+ .bootstrap-touchspin-down,
+ .bootstrap-touchspin-up {
+ padding: 0;
+ min-width: $bootstrap-touchspin-btn-width;
+ min-height: $bootstrap-touchspin-btn-width;
+ border-radius: $border-radius !important;
+ i,
+ svg {
+ height: 0.8rem;
+ width: 0.8rem;
+ font-size: 0.8rem;
+ position: relative;
+ top: -1px;
+ }
+ }
+ }
+
+ // 禁用 Touchspin
+ &.disabled-touchspin {
+ .bootstrap-touchspin-down,
+ .bootstrap-touchspin-up {
+ background-color: rgba($black, 0.5) !important;
+ cursor: default;
+ opacity: 0.5;
+ }
+ }
+
+ // 大号 Touchspin
+ &.input-group-lg {
+ width: $bootstrap-touchspin-width-lg;
+ .touchspin {
+ &.form-control {
+ height: auto !important;
+ }
+ }
+ .bootstrap-touchspin-down,
+ .bootstrap-touchspin-up {
+ min-width: $bootstrap-touchspin-btn-width-lg;
+ min-height: $bootstrap-touchspin-btn-width-lg;
+ i,
+ svg {
+ height: 1rem;
+ width: 1rem;
+ font-size: 1rem;
+ top: -3px;
+ }
+ }
+ }
+
+ // 小号 Touchspin
+ &.input-group-sm {
+ width: $bootstrap-touchspin-width-sm;
+ .touchspin {
+ &.form-control {
+ height: auto !important;
+ }
+ }
+ .bootstrap-touchspin-injected {
+ .bootstrap-touchspin-down,
+ .bootstrap-touchspin-up {
+ min-width: $bootstrap-touchspin-btn-width-sm;
+ min-height: $bootstrap-touchspin-btn-width-sm;
+ i,
+ svg {
+ height: 0.6rem;
+ width: 0.6rem;
+ font-size: 0.6rem;
+ }
+ }
+ }
+ }
+}
+
+// Touchspin 删除 firefox 的默认箭头
+.bootstrap-touchspin {
+ &.input-group {
+ input[type='number'] {
+ -moz-appearance: textfield;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .bootstrap-touchspin {
+ &.input-group {
+ .form-control {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+
+ &.disabled-touchspin {
+ .bootstrap-touchspin-injected {
+ .bootstrap-touchspin-down,
+ .bootstrap-touchspin-up,
+ .disabled-max-min {
+ background-color: $gray-600 !important;
+ opacity: 1;
+ }
+ }
+ }
+
+ .bootstrap-touchspin-injected {
+ .disabled-max-min {
+ background-color: $gray-600 !important;
+ opacity: 1;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/form-quill-editor.scss b/src/@core/scss/base/plugins/forms/form-quill-editor.scss
new file mode 100644
index 0000000..e5c4563
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/form-quill-editor.scss
@@ -0,0 +1,212 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+// 设置下拉菜单字体
+.ql-toolbar .ql-font span[data-label='Sailec Light']::before {
+ font-family: 'Sailec Light';
+}
+.ql-toolbar .ql-font span[data-label='Sofia Pro']::before {
+ font-family: 'Sofia';
+}
+.ql-toolbar .ql-font span[data-label='Slabo 27px']::before {
+ font-family: 'Slabo 27px';
+}
+.ql-toolbar .ql-font span[data-label='Roboto Slab']::before {
+ font-family: 'Roboto Slab';
+}
+.ql-toolbar .ql-font span[data-label='Inconsolata']::before {
+ font-family: 'Inconsolata';
+}
+.ql-toolbar .ql-font span[data-label='Ubuntu Mono']::before {
+ font-family: 'Ubuntu Mono';
+}
+
+// 设置内容字体
+.ql-font-sofia {
+ font-family: 'Sofia';
+}
+.ql-font-slabo {
+ font-family: 'Slabo 27px';
+}
+.ql-font-roboto {
+ font-family: 'Roboto Slab';
+}
+.ql-font-inconsolata {
+ font-family: 'Inconsolata';
+}
+.ql-font-ubuntu {
+ font-family: 'Ubuntu Mono';
+}
+
+// Quill 富文本编辑器
+.ql-toolbar {
+ border-color: $custom-control-border-color !important;
+ .ql-formats {
+ &:focus,
+ *:focus {
+ outline: 0;
+ }
+ // 按钮和标签悬停
+ .ql-picker-label,
+ button {
+ &:hover,
+ &:focus {
+ color: $primary !important;
+ .ql-stroke {
+ stroke: $primary !important;
+ }
+ .ql-fill {
+ fill: $primary !important;
+ }
+ }
+ &.ql-active {
+ color: $primary !important;
+ }
+ }
+ .ql-picker-item.ql-selected {
+ color: $primary !important;
+ }
+ // quill 下拉项悬停
+ .ql-picker-options {
+ .ql-picker-item:hover {
+ color: $primary !important;
+ }
+ .ql-active {
+ color: $primary !important;
+ }
+ }
+ }
+}
+.ql-bubble {
+ .ql-picker {
+ color: $white !important;
+ }
+ // stroke 选项颜色
+ .ql-stroke {
+ stroke: $white !important;
+ }
+ // fill 选项颜色
+ .ql-fill {
+ fill: $white !important;
+ }
+}
+.ql-container {
+ border-color: $custom-control-border-color !important;
+ font-family: $font-family-monospace;
+}
+.ql-editor {
+ a {
+ color: $primary;
+ }
+}
+// 默认下拉项
+.ql-picker {
+ color: $headings-color !important;
+}
+// stroke 选项颜色
+.ql-stroke {
+ stroke: $headings-color !important;
+}
+.ql-active {
+ .ql-stroke {
+ stroke: $primary !important;
+ }
+ .ql-fill {
+ fill: $primary !important;
+ }
+}
+// fill 选项颜色
+.ql-fill {
+ fill: $headings-color !important;
+}
+// 编辑器圆角
+.ql-toolbar,
+.ql-container {
+ border-top-right-radius: $border-radius;
+ border-top-left-radius: $border-radius;
+}
+.ql-toolbar {
+ + .ql-container,
+ .ql-container + & {
+ // ? 如果容器/工具栏位于另一方下方时添加底部圆角
+ border-bottom-right-radius: $border-radius;
+ border-bottom-left-radius: $border-radius;
+ // ? 如果容器/工具栏位于另一方上方时删除顶部圆角
+ border-top-right-radius: unset;
+ border-top-left-radius: unset;
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .quill-toolbar,
+ .ql-toolbar {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-border-color !important;
+
+ // 工具栏颜色
+ .ql-picker {
+ color: $white !important;
+ }
+
+ .ql-stroke {
+ stroke: $white !important;
+ }
+
+ .ql-fill {
+ fill: $white !important;
+ }
+
+ // 工具栏颜色
+ .ql-picker-options,
+ .ql-picker-label {
+ background-color: $theme-dark-input-bg;
+ .ql-active {
+ color: $primary !important;
+ }
+ }
+ }
+ .ql-active {
+ .ql-stroke {
+ stroke: $primary !important;
+ }
+ .ql-fill {
+ fill: $primary !important;
+ }
+ }
+ .ql-bubble {
+ .ql-toolbar {
+ background: $theme-dark-border-color;
+ border-radius: 2rem;
+ }
+ }
+
+ .ql-container {
+ border-color: $theme-dark-border-color !important;
+ background-color: $theme-dark-input-bg;
+ }
+
+ // 语法颜色
+ .ql-editor {
+ .ql-syntax {
+ background-color: $theme-dark-body-bg;
+ }
+
+ &.ql-blank {
+ &:before {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+}
+
+// RTL 模式
+[data-textdirection='rtl'] {
+ .ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) {
+ i,
+ svg {
+ left: auto !important;
+ right: 0;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/form-validation.scss b/src/@core/scss/base/plugins/forms/form-validation.scss
new file mode 100644
index 0000000..00fb0b8
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/form-validation.scss
@@ -0,0 +1,28 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+// 表单验证
+form {
+ span.error {
+ width: 100%;
+ font-size: 0.857rem;
+ }
+ .error:not(input) {
+ color: $danger;
+ }
+ input.error,
+ input.error:focus {
+ border-color: $danger !important;
+ }
+ textarea.error {
+ border-color: $danger !important;
+ }
+ .select2.error {
+ + .select2-container--classic .select2-selection--single,
+ + .select2-container--default .select2-selection--single,
+ + .select2-container--classic .select2-selection--multiple,
+ + .select2-container--default .select2-selection--multiple {
+ border-color: $danger !important;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/form-wizard.scss b/src/@core/scss/base/plugins/forms/form-wizard.scss
new file mode 100644
index 0000000..ad7b6df
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/form-wizard.scss
@@ -0,0 +1,293 @@
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+$header-padding-y: 1.5rem;
+$header-padding-x: 1.5rem;
+$content-padding-x: 1.5rem;
+$content-padding-y: 1.5rem;
+$trigger-padding-vertical: 1rem;
+$step-box-height: 38px;
+$step-box-width: 38px;
+
+.bs-stepper {
+ background-color: $white;
+ box-shadow: $box-shadow;
+ border-radius: 0.5rem;
+
+ .bs-stepper-header {
+ padding: $header-padding-y $header-padding-x;
+ flex-wrap: wrap;
+ border-bottom: 1px solid rgba($black, 0.08);
+ margin: 0;
+ .line {
+ flex: 0;
+ min-width: auto;
+ min-height: auto;
+ background-color: transparent;
+ margin: 0;
+ color: $body-color;
+ font-size: 1.5rem;
+ }
+ .step {
+ .step-trigger {
+ padding: 0 1.75rem;
+ flex-wrap: nowrap;
+ font-weight: normal;
+ .bs-stepper-box {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: $step-box-width;
+ height: $step-box-height;
+ padding: 0.5em 0;
+ font-weight: 500;
+ color: $gray-100;
+ background-color: rgba($gray-100, 0.12);
+ border-radius: 0.35rem;
+ }
+
+ .bs-stepper-label {
+ text-align: left;
+ margin: 0;
+ margin-top: 0.5rem;
+ margin-left: 1rem;
+
+ .bs-stepper-title {
+ display: inherit;
+ color: $body-color;
+ font-weight: 600;
+ line-height: 1rem;
+ margin-bottom: 0rem;
+ }
+
+ .bs-stepper-subtitle {
+ font-weight: 400;
+ font-size: 0.85rem;
+ color: $text-muted;
+ }
+ }
+
+ &:hover {
+ background-color: transparent;
+ }
+ }
+
+ &.active {
+ .step-trigger {
+ .bs-stepper-box {
+ background-color: $primary;
+ color: $white;
+ box-shadow: 0 3px 6px 0 rgba($primary, 0.4);
+ }
+ .bs-stepper-label {
+ .bs-stepper-title {
+ color: $primary;
+ }
+ }
+ }
+ }
+
+ &.crossed {
+ .step-trigger {
+ .bs-stepper-box {
+ background-color: rgba($color: $primary, $alpha: 0.12);
+ color: $primary !important;
+ }
+ .bs-stepper-label {
+ .bs-stepper-title {
+ color: $text-muted;
+ }
+ }
+ }
+ & + .line {
+ color: $primary;
+ }
+ }
+
+ &:first-child {
+ .step-trigger {
+ padding-left: 0;
+ }
+ }
+ &:last-child {
+ .step-trigger {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+ .bs-stepper-content {
+ padding: $content-padding-y $content-padding-x;
+ .content {
+ margin-left: 0;
+
+ .content-header {
+ margin-bottom: 1rem;
+ }
+ }
+ }
+
+ &.vertical {
+ .bs-stepper-header {
+ border-right: 1px solid $border-color;
+ border-bottom: none;
+ .step {
+ .step-trigger {
+ padding: $trigger-padding-vertical 0;
+ }
+ }
+ .line {
+ display: none;
+ }
+ }
+ .bs-stepper-content {
+ width: 100%;
+ padding-top: 2.5rem;
+ .content {
+ &:not(.active) {
+ display: none;
+ }
+ }
+ }
+
+ &.wizard-icons {
+ .step {
+ text-align: center;
+ }
+ }
+ }
+
+ &.wizard-modern {
+ background-color: transparent;
+ box-shadow: none;
+ .bs-stepper-header {
+ border: none;
+ }
+ .bs-stepper-content {
+ background-color: $white;
+ border-radius: 0.5rem;
+ box-shadow: $box-shadow;
+ }
+ }
+}
+
+.horizontal-wizard,
+.vertical-wizard,
+.modern-horizontal-wizard,
+.modern-vertical-wizard {
+ margin-bottom: 2.2rem;
+}
+
+// 深色布局
+.dark-layout {
+ .bs-stepper {
+ background-color: $theme-dark-card-bg;
+ box-shadow: $theme-dark-box-shadow;
+
+ .bs-stepper-header {
+ border-bottom: 1px solid rgba($theme-dark-border-color, 0.08);
+ .line {
+ color: $theme-dark-body-color;
+ }
+ .step {
+ .step-trigger {
+ .bs-stepper-box {
+ color: $gray-100;
+ }
+
+ .bs-stepper-label {
+ .bs-stepper-title {
+ color: $theme-dark-body-color;
+ }
+
+ .bs-stepper-subtitle {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+
+ &.active {
+ .step-trigger {
+ .bs-stepper-box {
+ background-color: $primary;
+ color: $white;
+ box-shadow: 0 3px 6px 0 rgba($primary, 0.4);
+ }
+ .bs-stepper-label {
+ .bs-stepper-title {
+ color: $primary;
+ }
+ }
+ }
+ }
+
+ &.crossed {
+ .step-trigger {
+ .bs-stepper-label,
+ .bs-stepper-title {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+ }
+ }
+
+ &.vertical {
+ .bs-stepper-header {
+ border-right-color: $theme-dark-border-color;
+ }
+ }
+
+ &.wizard-modern {
+ background-color: transparent;
+ box-shadow: none;
+ .bs-stepper-header {
+ border: none;
+ }
+ .bs-stepper-content {
+ background-color: $theme-dark-card-bg;
+ box-shadow: $theme-dark-box-shadow;
+ }
+ }
+ }
+}
+
+// RTL 模式
+html[data-textdirection='rtl'] {
+ .btn-prev,
+ .btn-next {
+ display: flex;
+ i,
+ svg {
+ transform: rotate(-180deg);
+ }
+ }
+}
+
+// 媒体查询
+@media (max-width: 768px) {
+ .bs-stepper {
+ .bs-stepper-header {
+ flex-direction: column;
+ align-items: flex-start;
+ .step {
+ .step-trigger {
+ padding: 0.5rem 0 !important;
+ flex-direction: row;
+ }
+ }
+ .line {
+ display: none;
+ }
+ }
+ &.vertical {
+ flex-direction: column;
+ .bs-stepper-header {
+ align-items: flex-start;
+ }
+ .bs-stepper-content {
+ padding-top: 1.5rem;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/pickers/form-flat-pickr.scss b/src/@core/scss/base/plugins/forms/pickers/form-flat-pickr.scss
new file mode 100644
index 0000000..4803019
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/pickers/form-flat-pickr.scss
@@ -0,0 +1,191 @@
+@import '../../../bootstrap-extended/include';
+@import '../../../components/include';
+
+.flatpickr-calendar {
+ .flatpickr-day {
+ color: $body-color;
+ &.today {
+ border-color: $primary;
+ &:hover {
+ background: transparent;
+ color: $body-color;
+ }
+ }
+
+ &.selected,
+ &.selected:hover {
+ background: $primary;
+ color: $white;
+ border-color: $primary;
+ }
+
+ &.inRange,
+ &.inRange:hover {
+ background: lighten($color: $primary, $amount: 30%);
+ border-color: lighten($color: $primary, $amount: 30%);
+ box-shadow: -5px 0 0 lighten($color: $primary, $amount: 30%), 5px 0 0 lighten($color: $primary, $amount: 30%);
+ }
+ &.startRange,
+ &.endRange,
+ &.startRange:hover,
+ &.endRange:hover {
+ background: $primary;
+ color: $white;
+ border-color: $primary;
+ }
+
+ &.selected.startRange + .endRange:not(:nth-child(7n + 1)),
+ &.startRange.startRange + .endRange:not(:nth-child(7n + 1)),
+ &.endRange.startRange + .endRange:not(:nth-child(7n + 1)) {
+ box-shadow: -10px 0 0 $primary;
+ }
+
+ &.flatpickr-disabled,
+ &.prevMonthDay,
+ &.nextMonthDay {
+ color: $gray-300;
+ }
+
+ &:hover {
+ background: $gray-50;
+ }
+ }
+ &:after,
+ &:before {
+ display: none;
+ }
+
+ .flatpickr-months {
+ .flatpickr-prev-month,
+ .flatpickr-next-month {
+ top: -5px;
+ &:hover i,
+ &:hover svg {
+ fill: $primary;
+ }
+ }
+ }
+ .flatpickr-current-month span.cur-month {
+ font-weight: 300;
+ }
+}
+
+// 时间选择器悬停和焦点背景颜色
+.flatpickr-time input:hover,
+.flatpickr-time .flatpickr-am-pm:hover,
+.flatpickr-time input:focus,
+.flatpickr-time .flatpickr-am-pm:focus {
+ background: $white;
+}
+
+// 深色布局
+.dark-layout {
+ .flatpickr-calendar {
+ background: $theme-dark-body-bg;
+ border-color: $theme-dark-body-bg;
+ box-shadow: none;
+ .flatpickr-months {
+ i,
+ svg {
+ fill: $theme-dark-body-color;
+ }
+ }
+ .flatpickr-month {
+ color: $theme-dark-body-color;
+ }
+ .flatpickr-weekwrapper .flatpickr-weeks {
+ box-shadow: 1px 0 0 $theme-dark-border-color;
+ }
+ .flatpickr-weekday {
+ color: $theme-dark-body-color;
+ }
+
+ .flatpickr-day {
+ &,
+ &.today:hover {
+ color: $theme-dark-body-color;
+ }
+ &.selected {
+ color: $white;
+ }
+
+ &.prevMonthDay,
+ &.nextMonthDay,
+ &.flatpickr-disabled {
+ color: $gray-700 !important;
+ }
+ &.inRange,
+ &.inRange:hover {
+ background: $theme-dark-card-bg;
+ border-color: $theme-dark-card-bg;
+ box-shadow: -5px 0 0 $theme-dark-card-bg, 5px 0 0 $theme-dark-card-bg;
+ }
+ &:hover:not(.selected):not(.today):not(.startRange):not(.endRange) {
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-card-bg;
+ }
+ }
+
+ .flatpickr-days .flatpickr-day {
+ &:hover:not(.selected):not(.today):not(.startRange):not(.endRange) {
+ background: $theme-dark-card-bg;
+ }
+ }
+
+ .flatpickr-time {
+ border-color: $theme-dark-body-bg !important;
+
+ .numInput,
+ .flatpickr-am-pm {
+ color: $theme-dark-body-color;
+ &:hover {
+ background: $theme-dark-body-bg;
+ }
+ }
+
+ .arrowUp:after {
+ border-bottom-color: $theme-dark-body-color;
+ }
+ .arrowDown:after {
+ border-top-color: $theme-dark-body-color;
+ }
+ }
+ }
+ // 时间选择器悬停和焦点背景颜色
+ .flatpickr-time input:hover,
+ .flatpickr-time .flatpickr-am-pm:hover,
+ .flatpickr-time input:focus,
+ .flatpickr-time .flatpickr-am-pm:focus {
+ background: $theme-dark-body-bg;
+ }
+}
+
+// 仅为 flatpickr 输入框添加背景颜色,因为其默认为只读属性
+.flatpickr-input[readonly],
+.flatpickr-input ~ .form-control[readonly],
+.flatpickr-human-friendly[readonly] {
+ background-color: inherit;
+ opacity: 1 !important;
+}
+
+.flatpickr-weekdays {
+ margin-top: 8px;
+}
+
+.flatpickr-current-month {
+ .flatpickr-monthDropdown-months {
+ -webkit-appearance: none;
+ }
+
+ .flatpickr-monthDropdown-months,
+ .numInputWrapper {
+ font-size: 1.1rem;
+ border-radius: 4px;
+ padding: 2px;
+ transition: all 0.15s ease-out;
+
+ span {
+ display: none;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/pickers/form-pickadate.scss b/src/@core/scss/base/plugins/forms/pickers/form-pickadate.scss
new file mode 100644
index 0000000..1efba85
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/pickers/form-pickadate.scss
@@ -0,0 +1,167 @@
+@import '../../../bootstrap-extended/include';
+@import '../../../components/include';
+
+// remove picker outline
+.picker__holder {
+ outline: none;
+}
+// 根据主题颜色更新选择器颜色
+.picker__day--today:before,
+.picker__button--today:before {
+ border-top: 6px solid $primary;
+}
+.picker__button--clear:before {
+ border-top: 2px solid $danger;
+}
+.picker__day--highlighted,
+.picker__day--highlighted:hover,
+.picker--focused .picker__day--highlighted,
+.picker__list-item--selected,
+.picker__list-item--selected:hover,
+.picker--focused .picker__list-item--selected {
+ background-color: $primary;
+}
+// 更新选择器 svg 图标
+.picker__nav--prev:before,
+.picker__nav--next:before,
+.picker__button--close:before {
+ content: '';
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 18px;
+ color: $body-color;
+ width: 8px;
+ height: 18px;
+}
+.picker__nav--prev:before {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $body-color), '#', '%23'));
+}
+.picker__nav--next:before {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
+}
+.picker__button--close:before {
+ background-image: url(str-replace(str-replace($remove, 'currentColor', $danger), '#', '%23'));
+ height: 10px !important;
+}
+
+// 深色布局
+.dark-layout {
+ // 日期选择器
+ .picker__holder {
+ background-color: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+
+ .picker__header {
+ .picker__month,
+ .picker__year {
+ color: $theme-dark-body-color;
+ }
+
+ .picker__select--year,
+ .picker__select--month {
+ color: $theme-dark-body-color;
+ background-color: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+ }
+
+ .picker__nav--next,
+ .picker__nav--prev {
+ &:hover {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ .picker__frame {
+ border-color: $theme-dark-border-color;
+ }
+
+ .picker__table {
+ thead {
+ tr {
+ .picker__weekday {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+
+ tbody {
+ tr {
+ td {
+ .picker__day {
+ color: $theme-dark-body-color;
+ &.picker__day--selected {
+ color: $white;
+ // color: $theme-dark-body-color;
+ }
+
+ &:hover {
+ background-color: $theme-dark-border-color;
+ // border: 1px solid #4ec6e8;
+ color: $white;
+ }
+
+ &.picker__day--disabled {
+ color: $theme-dark-body-color;
+ opacity: 0.5;
+ background: $theme-dark-card-bg;
+ }
+ }
+
+ .picker__day--today {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ }
+ }
+
+ .picker__footer {
+ .picker__button--today,
+ .picker__button--clear,
+ .picker__button--close {
+ background-color: $theme-dark-body-bg;
+ color: $theme-dark-body-color;
+ &:hover {
+ background-color: $theme-dark-border-color;
+ }
+ }
+ }
+ }
+
+ // 时间选择器
+ .picker--time {
+ .picker__holder {
+ .picker__list {
+ background-color: $theme-dark-body-bg;
+
+ .picker__list-item {
+ &.picker__list-item--selected,
+ &:hover {
+ background-color: $theme-dark-card-bg;
+ }
+
+ &.picker__list-item--disabled {
+ background-color: $theme-dark-card-bg;
+ color: $secondary;
+ opacity: 0.5;
+ }
+ }
+
+ .picker__button--clear {
+ background-color: $theme-dark-body-bg;
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+}
+
+// RTL 模式
+[dir='rtl'] {
+ .picker__nav--prev:before {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
+ }
+ .picker__nav--next:before {
+ background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $body-color), '#', '%23'));
+ }
+}
diff --git a/src/@core/scss/base/plugins/forms/select2/_select2.scss b/src/@core/scss/base/plugins/forms/select2/_select2.scss
new file mode 100644
index 0000000..0c4cee8
--- /dev/null
+++ b/src/@core/scss/base/plugins/forms/select2/_select2.scss
@@ -0,0 +1,318 @@
+// select-2 主题
+.select2-container {
+ width: 100% !important;
+ margin: 0;
+ display: inline-block;
+ position: relative;
+ vertical-align: middle;
+ box-sizing: border-box;
+}
+.select2-container--classic,
+.select2-container--default {
+ &:focus {
+ outline: none;
+ }
+
+ .select2-selection__choice {
+ font-size: 0.9rem;
+ margin-top: 6px !important;
+ }
+ // 单选
+ .select2-selection--single {
+ min-height: 2.714rem;
+ padding: 5px;
+ border: 1px solid $input-border-color;
+ // 焦点边框颜色
+ &:focus {
+ outline: 0;
+ border-color: $primary !important;
+ box-shadow: $input-focus-box-shadow !important;
+ }
+
+ // 带图标的选择
+ .select2-selection__rendered {
+ i,
+ svg {
+ font-size: 1.15rem;
+ height: 1.15rem;
+ width: 1.15rem;
+ margin-right: 0.5rem;
+ }
+ }
+ // 下拉箭头高度
+ .select2-selection__arrow {
+ b {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $input-border-color), '#', '%23'));
+ background-size: 18px 14px, 18px 14px;
+ background-repeat: no-repeat;
+ height: 1rem;
+ padding-right: 1.5rem;
+ margin-left: 0;
+ margin-top: 0;
+ left: -8px;
+ border-style: none;
+ }
+ }
+ }
+ // 当选择容器打开时
+ &.select2-container--open {
+ box-shadow: $dropdown-box-shadow;
+ .select2-selection--single {
+ border-color: $primary !important;
+ outline: 0;
+ }
+ }
+
+ // 当选择容器为焦点时
+ &.select2-container--focus {
+ outline: 0;
+ .select2-selection--multiple {
+ border-color: $primary !important;
+ outline: 0;
+ }
+ }
+
+ // Select2 搜索下拉列表
+ .select2-dropdown {
+ border-color: $input-border-color;
+ }
+ .select2-search--dropdown {
+ padding: 0.5rem;
+ .select2-search__field {
+ outline: none !important;
+ border-radius: $input-border-radius;
+ border-color: $input-border-color;
+ padding: $input-padding-y $input-padding-x;
+ }
+ }
+
+ // 多选
+ .select2-selection--multiple {
+ min-height: 38px !important;
+ border: 1px solid $input-border-color;
+ &:focus {
+ outline: 0;
+ border-color: $primary !important;
+ box-shadow: $input-focus-box-shadow !important;
+ }
+ // 所选项
+ .select2-selection__choice {
+ background-color: $primary !important;
+ border-color: $primary !important;
+ color: $white;
+ padding: 2px 5px;
+ }
+ // 所选项的字体大小
+ .select2-selection__rendered {
+ padding: 0 6px;
+ li {
+ // font-size: 0.9rem;
+ .select2-search__field {
+ margin-top: 7px;
+ }
+ }
+ }
+ .select2-selection__choice__remove {
+ // color: $white !important;
+ float: right;
+ margin-left: 0.7rem;
+ margin-right: 0.5rem;
+ font-size: 0px;
+ display: inline-block;
+ position: relative;
+ line-height: 1rem;
+ &:before {
+ content: '';
+ background-image: url(str-replace(str-replace($remove, 'currentColor', $white), '#', '%23'));
+ background-size: 0.85rem;
+ height: 0.85rem;
+ width: 0.85rem;
+ position: absolute;
+ top: 22%;
+ left: -4px;
+ }
+ }
+ // 选择框带图标的下拉菜单
+ i,
+ svg {
+ position: relative;
+ margin-right: 0.5rem;
+ height: 1.15rem;
+ width: 1.15rem;
+ font-size: 1.15rem;
+ padding-left: 1px;
+ }
+ }
+
+ // Select2 组对齐
+ .select2-results__group {
+ padding: 6px 9px;
+ font-weight: 600;
+ }
+
+ .select2-results__option {
+ padding: 0.428rem 1rem;
+ &[role='group'] {
+ padding: 0;
+ }
+ &[aria-selected='true'] {
+ background-color: $primary !important;
+ color: white !important;
+ }
+ i,
+ svg {
+ height: 1.15rem;
+ width: 1.15rem;
+ font-size: 1.15rem;
+ margin-right: 0.5rem;
+ }
+ }
+
+ .select2-results__option--highlighted {
+ background-color: rgba($primary, 0.12) !important;
+ color: $primary !important;
+ }
+
+ // 加载远程图像大小
+ .select2-result-repository__avatar {
+ img {
+ width: 50px;
+ }
+ }
+
+ // 可选尺寸
+ // ------------------------------
+
+ // 大号单选
+ .select-lg {
+ min-height: $input-height !important;
+ font-size: ($font-size-lg - 0.8);
+ margin-bottom: 0 !important;
+ padding: 0.3rem 0.7rem;
+ &.select2-selection--single {
+ .select2-selection__rendered {
+ padding-top: $input-btn-padding-y-lg - 0.9;
+ // padding-left: 0;
+ }
+
+ .select2-selection__arrow {
+ top: $input-btn-padding-y-lg - 0.8 !important;
+ }
+ }
+
+ // 大号多选
+ &.select2-selection--multiple {
+ padding: 0 0.2rem;
+ .select2-selection__rendered {
+ padding-top: 0 !important;
+ li {
+ font-size: ($font-size-lg - 0.8);
+ .select2-search__field {
+ margin-top: 10px;
+ }
+ }
+ .select2-selection__choice {
+ padding: 5px;
+
+ .select2-selection__choice__remove:before {
+ top: 46%;
+ }
+ }
+ }
+ }
+ }
+ // 小号单选
+ .select-sm {
+ min-height: $input-height-sm !important;
+ padding: 0 $input-padding-y-xs;
+ font-size: $font-size-xs;
+ margin-bottom: 0 !important;
+ line-height: $line-height-xs;
+ // 单选
+ &.select2-selection--single {
+ .select2-selection__arrow {
+ top: -0.3rem !important;
+ }
+ }
+
+ // 小号多选
+ &.select2-selection--multiple {
+ line-height: $line-height-xs - 0.2;
+ .select2-selection__rendered {
+ padding: 3px;
+ li {
+ font-size: $font-size-xs;
+ margin-top: 2px;
+ .select2-search__field {
+ margin-top: 4px;
+ }
+ }
+ }
+ .select2-selection__choice {
+ padding: 0 $input-padding-y-xs;
+ .select2-selection__choice__remove:before {
+ top: 5%;
+ }
+ }
+
+ .select2-search--inline .select2-search__field {
+ margin-top: 0;
+ }
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .select2-container {
+ .select2-selection,
+ .select2-search__field,
+ .select2-selection__placeholder {
+ background: $theme-dark-input-bg;
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+
+ .select2-selection__rendered {
+ color: $theme-dark-body-color;
+ }
+
+ .select2-dropdown {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+
+ .select2-selection--multiple {
+ .select2-selection__choice {
+ background: rgba($primary, 0.12) !important;
+ color: $primary !important;
+ border: none;
+ .select2-selection__choice__remove {
+ color: $primary !important;
+ }
+ }
+ .select2-selection__choice__remove:before {
+ background-image: url(str-replace(str-replace($remove, 'currentColor', $primary), '#', '%23'));
+ }
+ }
+
+ .select2-results__option[aria-disabled='true'] {
+ color: $theme-dark-text-muted-color;
+ }
+
+ .select2-selection__arrow {
+ b {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ .select2-container--disabled {
+ .select2-selection {
+ opacity: 0.5;
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/maps/map-leaflet.scss b/src/@core/scss/base/plugins/maps/map-leaflet.scss
new file mode 100644
index 0000000..33defd9
--- /dev/null
+++ b/src/@core/scss/base/plugins/maps/map-leaflet.scss
@@ -0,0 +1,38 @@
+// ================================================================================================
+// 文件名:map-leaflet.scss
+// 描述:Leaflet 地图插件自定义 SCSS 文件
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+.leaflet-map {
+ height: 400px;
+ z-index: 1;
+}
+
+html[data-textdirection='rtl'] {
+ .leaflet-map {
+ .leaflet-control-container {
+ .leaflet-left {
+ left: 0;
+ right: unset;
+ .leaflet-control-zoom,
+ .leaflet-control-layers {
+ margin-right: 0;
+ margin-left: 10px;
+ }
+ }
+ .leaflet-right {
+ right: 0;
+ left: unset;
+ .leaflet-control-zoom,
+ .leaflet-control-layers {
+ margin-right: 10px;
+ margin-left: 0px;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/plugins/tables/_datatables.scss b/src/@core/scss/base/plugins/tables/_datatables.scss
new file mode 100644
index 0000000..86c18dc
--- /dev/null
+++ b/src/@core/scss/base/plugins/tables/_datatables.scss
@@ -0,0 +1,163 @@
+// ================================================================================================
+// 文件名:datatables.scss
+// 描述:数据表格页面 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+table.dataTable {
+ // 表格宽度和边框合并
+ width: 100% !important;
+ border-collapse: collapse !important;
+ td,
+ th {
+ padding: $table-cell-padding 1.5rem;
+ vertical-align: middle;
+ }
+ thead {
+ // 更改排序图标
+ .sorting,
+ .sorting_asc,
+ .sorting_desc {
+ padding-right: inherit;
+ &:before {
+ background-image: url(str-replace(str-replace($chevron-up, 'currentColor', $table-head-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 12px;
+ color: $body-color;
+ width: 14px;
+ height: 14px;
+ content: '';
+ right: 0.3rem;
+ top: 0.5rem;
+ }
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $table-head-color), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 12px;
+ color: $body-color;
+ width: 14px;
+ height: 14px;
+ content: '';
+ right: 0.3rem;
+ top: 1.3rem;
+ }
+ }
+ }
+
+ // 带有复选框的数据表
+ .dt-checkboxes-cell {
+ .custom-control {
+ padding-left: 0;
+ padding-right: 1.25rem;
+ }
+ }
+}
+
+div.dataTables_wrapper .dt-button-collection {
+ background-color: $dropdown-bg;
+ > div[role='menu'] {
+ text-align: left;
+ box-shadow: 0px 5px 16px -8px;
+ min-width: 8rem;
+ }
+ [class*='buttons-']:focus {
+ outline: 0;
+ }
+}
+
+// 响应 '+' 图标行高
+table.dataTable.dtr-column > tbody > tr > td.control:before,
+table.dataTable.dtr-column > tbody > tr > th.control:before {
+ line-height: 16px;
+}
+
+// 数据表搜索、标签
+div.dataTables_wrapper {
+ div.dataTables_filter,
+ div.dataTables_length {
+ label {
+ margin-top: 1rem;
+ margin-bottom: 0.5rem;
+ }
+ // 数据表选择长度
+ select {
+ background-position: calc(100% - 3px) 11px, calc(100% - 20px) 13px, 100% 0;
+ padding: 0 0.8rem;
+ width: 5rem;
+ margin: 0 0.5rem;
+ }
+ }
+ div.dataTables_filter input {
+ margin-left: 0.75rem;
+ }
+
+ // 数据表分页
+ div.dataTables_paginate {
+ ul.pagination {
+ margin-top: 1rem;
+ margin-bottom: 1.5rem;
+ }
+ }
+
+ // 信息文本颜色
+ .dataTables_info {
+ padding-top: 1.25rem !important;
+ color: $text-muted;
+ }
+}
+
+// 行分组
+tr.group {
+ // 行分组颜色
+ background-color: $table-accent-bg;
+}
+
+// 居中分页
+@media only screen and (max-width: 768px) {
+ div.dataTables_wrapper {
+ div.dataTables_paginate {
+ ul.pagination {
+ justify-content: center;
+ }
+ }
+ }
+
+ div.dataTables_wrapper div.dataTables_info {
+ white-space: inherit;
+ }
+ // SM 屏幕的底部间距
+ div.dt-buttons {
+ justify-content: center;
+ margin-top: 1rem;
+ button {
+ margin-bottom: 0.5rem;
+ }
+ }
+}
+@include media-breakpoint-down(xs) {
+ .dtr-bs-modal {
+ .modal-body {
+ padding-left: 0;
+ padding-right: 0;
+ overflow-x: scroll;
+ }
+ .table.dtr-details {
+ margin: 0 auto 1rem;
+ td {
+ padding-left: 0;
+ padding-right: 0;
+ }
+ tr td:first-child {
+ padding-left: 0.75rem;
+ }
+ }
+ }
+ div.dataTables_wrapper {
+ overflow: scroll;
+ }
+}
diff --git a/src/@core/scss/base/plugins/tables/table-ag-grid.scss b/src/@core/scss/base/plugins/tables/table-ag-grid.scss
new file mode 100644
index 0000000..4b89ec8
--- /dev/null
+++ b/src/@core/scss/base/plugins/tables/table-ag-grid.scss
@@ -0,0 +1,135 @@
+// ================================================================================================
+// 文件名:table-ag-grid.scss
+// 描述:AG Grid 表格插件 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../../bootstrap-extended/include';
+@import '../../components/include';
+
+.aggrid {
+ height: 600px;
+ font-size: 1rem;
+ color: $body-color;
+
+ // 复选框颜色
+ .ag-icon-checkbox-checked,
+ .ag-icon-checkbox-indeterminate {
+ color: $primary !important;
+ }
+
+ // 主体和页脚高度
+ .ag-root-wrapper-body {
+ min-height: calc(100% - 56px);
+ }
+
+ // 标题文字
+ .ag-header-cell-text {
+ font-size: 1rem;
+ font-family: $font-family-sans-serif;
+ }
+
+ // 分页样式
+ .ag-paging-panel {
+ display: block !important;
+ align-items: center;
+ height: 98px;
+
+ .ag-paging-row-summary-panel {
+ display: none;
+ }
+
+ .ag-paging-page-summary-panel {
+ justify-content: center;
+ margin-left: 0;
+ margin-top: 18px;
+
+ [ref='lbCurrent'],
+ [ref='lbTotal'] {
+ color: $white;
+ padding: 0.7rem 0.95rem;
+ border-radius: 0.5rem;
+
+ @include media-breakpoint-down(xs) {
+ margin: 0 0.4rem;
+ }
+ }
+ }
+
+ .ag-paging-button {
+ background-color: $gray-300;
+ border-radius: 50%;
+ padding: 0.5rem 0rem;
+ margin: 0 0.5rem;
+ color: $body-color !important;
+ min-width: 34px;
+
+ @include media-breakpoint-down(xs) {
+ margin-left: 0;
+ margin-right: 0.4rem;
+ }
+
+ .ag-icon {
+ color: $body-color !important;
+ opacity: 1 !important;
+ }
+
+ &.ag-disabled {
+ opacity: 0.5 !important;
+ }
+
+ &:last-child {
+ @include media-breakpoint-down(xs) {
+ margin-right: 0;
+ }
+ }
+ }
+
+ span[ref='lbCurrent'] {
+ background-color: $primary;
+ }
+
+ span[ref='lbTotal'] {
+ background-color: $gray-300;
+ color: $body-color !important;
+ }
+ }
+
+ // 表格滚动条
+ ::-webkit-scrollbar {
+ width: 10px;
+ height: 10px;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: $gray-300;
+ border-radius: 20px;
+ }
+
+ ::-webkit-scrollbar-track {
+ background: $body-bg;
+ border-radius: 20px;
+ }
+}
+
+// 页面过滤器下拉列表
+.filter-btn {
+ padding: 1.2rem !important;
+ border-radius: 5rem;
+ font-size: 0.95rem;
+
+ &:after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $body-color), '#', '%23'));
+ left: 5px;
+ }
+}
+
+// 排序下拉宽度
+.sort-dropdown {
+ .dropdown-menu {
+ min-width: 4rem;
+ }
+}
diff --git a/src/@core/scss/base/plugins/ui/_breakpoints.scss b/src/@core/scss/base/plugins/ui/_breakpoints.scss
new file mode 100644
index 0000000..c12c53b
--- /dev/null
+++ b/src/@core/scss/base/plugins/ui/_breakpoints.scss
@@ -0,0 +1,61 @@
+// 设置
+$debug: false;
+
+// 断点声明
+$usn-x-small: 0px;
+$usn-small: 544px;
+$usn-medium: 768px;
+$usn-large: 992px;
+$usn-x-large: 1200px;
+
+// 创建 SASS 列表以传递媒体查询数据。!!如果断点名称更改,请相应在下列名称中更新
+$mq-sync: xs $usn-x-small, sm $usn-small, md $usn-medium, lg $usn-large, xl $usn-x-large;
+
+// 为 js 构建每个媒体查询
+@each $mq in $mq-sync {
+ @media screen and (min-width: nth($mq, 2)) {
+ head {
+ font-family: '#{nth($mq, 1)} #{nth($mq, 2)}';
+ }
+ body:after {
+ content: '#{nth($mq, 1)} - min-width: #{nth($mq, 2)}';
+ }
+ }
+}
+
+head {
+ // 头部设置 clear 以在 Unison 显示正确设置
+ clear: both;
+ // 存储所有断点的哈希
+ title {
+ font-family: '#{$mq-sync}';
+ }
+}
+
+body:after {
+ display: none;
+}
+
+// 调试样式以查看断点信息
+@if $debug == true {
+ body:after {
+ display: block;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background-color: #000;
+ background-color: rgba($black, 0.8);
+ text-align: center;
+ color: #fff;
+ padding: 10px;
+ z-index: 1000;
+ font-size: 12px;
+ font-family: sans-serif;
+ }
+}
+
+// 隐藏加载仅用于响应注释插件的元素
+*[data-usn-if] {
+ display: none;
+}
diff --git a/src/@core/scss/base/plugins/ui/coming-soon.scss b/src/@core/scss/base/plugins/ui/coming-soon.scss
new file mode 100644
index 0000000..9d09506
--- /dev/null
+++ b/src/@core/scss/base/plugins/ui/coming-soon.scss
@@ -0,0 +1,61 @@
+// 设置
+$debug: false;
+
+// declare breakpoints
+$usn-x-small: 0px;
+$usn-small: 544px;
+$usn-medium: 768px;
+$usn-large: 992px;
+$usn-x-large: 1200px;
+
+// 创建 SASS 列表以传递媒体查询数据。!!如果断点名称更改,请相应在下列名称中更新
+$mq-sync: xs $usn-x-small, sm $usn-small, md $usn-medium, lg $usn-large, xl $usn-x-large;
+
+// 为 js 构建每个媒体查询
+@each $mq in $mq-sync {
+ @media screen and (min-width: nth($mq, 2)) {
+ head {
+ font-family: '#{nth($mq, 1)} #{nth($mq, 2)}';
+ }
+ body:after {
+ content: '#{nth($mq, 1)} - min-width: #{nth($mq, 2)}';
+ }
+ }
+}
+
+head {
+ // 头部设置 clear 以在 Unison 显示正确设置
+ clear: both;
+ // 存储所有断点的哈希
+ title {
+ font-family: '#{$mq-sync}';
+ }
+}
+
+body:after {
+ display: none;
+}
+
+// 调试样式以查看断点信息
+@if $debug == true {
+ body:after {
+ display: block;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background-color: #000;
+ background-color: rgba($black, 0.8);
+ text-align: center;
+ color: #fff;
+ padding: 10px;
+ z-index: 1000;
+ font-size: 12px;
+ font-family: sans-serif;
+ }
+}
+
+// 隐藏加载仅用于响应注释插件的元素
+*[data-usn-if] {
+ display: none;
+}
diff --git a/src/@core/scss/base/themes/bordered-layout.scss b/src/@core/scss/base/themes/bordered-layout.scss
new file mode 100644
index 0000000..0db17c2
--- /dev/null
+++ b/src/@core/scss/base/themes/bordered-layout.scss
@@ -0,0 +1,59 @@
+// ================================================================================================
+// 文件名:bordered-layout.scss
+// 描述:平面线框皮肤布局 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+.bordered-layout {
+ .header-navbar {
+ box-shadow: none;
+ &.floating-nav {
+ border: 1px solid $border-color;
+ }
+ &.fixed-top {
+ border-bottom: 1px solid $border-color;
+ background: $body-bg;
+ }
+ }
+ .main-menu {
+ border-right: 1px solid $border-color;
+ box-shadow: none;
+ &.menu-light .navigation > li {
+ &.open:not(.menu-item-closing),
+ &.sidebar-group-active {
+ > a {
+ background: darken($white, 7%);
+ }
+ }
+ }
+ }
+ .dropdown-menu {
+ border: 1px solid $border-color !important;
+ box-shadow: none;
+ }
+ .main-menu .navigation,
+ .main-menu {
+ background: $body-bg;
+ }
+ .card,
+ .bs-stepper:not(.wizard-modern):not(.checkout-tab-steps),
+ .bs-stepper.wizard-modern .bs-stepper-content {
+ border: 1px solid $border-color;
+ box-shadow: none;
+ }
+
+ .footer {
+ box-shadow: none !important;
+ }
+ .footer-fixed {
+ .footer {
+ border-top: 1px solid $border-color;
+ }
+ }
+}
diff --git a/src/@core/scss/base/themes/dark-layout.scss b/src/@core/scss/base/themes/dark-layout.scss
new file mode 100644
index 0000000..d0cd791
--- /dev/null
+++ b/src/@core/scss/base/themes/dark-layout.scss
@@ -0,0 +1,2383 @@
+// ================================================================================================
+// 文件名:dark-layout.scss
+// 描述:深色皮肤布局 SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+.dark-layout {
+ @at-root body#{&} {
+ color: $theme-dark-body-color;
+ background-color: $theme-dark-body-bg;
+ }
+ body {
+ color: $theme-dark-body-color;
+ background-color: $theme-dark-body-bg;
+ }
+ // 通用元素
+
+ // 标题
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: $theme-dark-headings-color;
+ }
+
+ // 边框颜色
+ .border,
+ .border-top,
+ .border-right,
+ .border-bottom,
+ .border-left {
+ border-color: $theme-dark-border-color !important;
+ }
+
+ // 其他标签
+ a {
+ &:hover {
+ color: $primary;
+ }
+ }
+
+ label {
+ color: $theme-dark-label-color;
+ }
+
+ .btn span {
+ color: inherit;
+ }
+
+ hr {
+ border-color: $theme-dark-border-color;
+ }
+
+ pre {
+ background-color: $theme-dark-body-bg !important;
+ border: 0;
+
+ code {
+ background-color: inherit;
+ text-shadow: none;
+
+ // .operator,
+ .url {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+
+ code {
+ background-color: $theme-dark-body-bg;
+ }
+
+ kbd {
+ background-color: $theme-dark-body-bg;
+ }
+
+ // 深色文本
+ .text-dark {
+ color: $gray-600 !important;
+ }
+
+ .text-muted {
+ color: $theme-dark-text-muted-color !important;
+ }
+
+ .text-body {
+ color: $theme-dark-body-color !important;
+ }
+ .text-body-heading {
+ color: $theme-dark-headings-color;
+ }
+
+ .section-label {
+ color: $theme-dark-text-muted-color;
+ }
+
+ // 阴影
+ .shadow {
+ box-shadow: $theme-dark-box-shadow !important;
+ }
+
+ // 块级页脚
+ .blockquote-footer {
+ color: $theme-dark-text-muted-color;
+ }
+
+ // 主导航栏和符导航栏阴影
+ .header-navbar-shadow {
+ background: linear-gradient(180deg, rgba(22, 29, 49, 0.9) 44%, rgba(22, 29, 49, 0.43) 73%, rgba(22, 29, 49, 0));
+ }
+
+ // 主导航栏深色样式
+ .horizontal-layout {
+ .header-navbar {
+ background-color: $theme-dark-card-bg;
+ }
+ &.navbar-sticky,
+ &.navbar-static {
+ .header-navbar {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+ .navbar-sticky {
+ .header-navbar {
+ &.navbar-shadow {
+ box-shadow: 0 4px 24px 0 rgba($black, 0.75);
+ }
+ }
+ }
+ .header-navbar {
+ background-color: $theme-dark-card-bg;
+
+ .navbar-container {
+ .nav {
+ .nav-item {
+ .nav-link {
+ color: $theme-dark-headings-color;
+ background-color: transparent;
+
+ i,
+ svg {
+ color: $theme-dark-headings-color;
+ }
+
+ &.bookmark-star {
+ i,
+ svg {
+ color: $white !important;
+ }
+ }
+ }
+
+ &.nav-search {
+ .search-input {
+ &.open {
+ background-color: $theme-dark-card-bg;
+
+ .input {
+ border-color: $theme-dark-border-color;
+ }
+
+ .input,
+ .input::placeholder,
+ .search-input-close {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+
+ .bookmark-input {
+ background-color: $theme-dark-card-bg;
+ .form-control {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+
+ .search-list {
+ background-color: $theme-dark-card-bg;
+ li {
+ a {
+ color: $theme-dark-body-color;
+ }
+ }
+
+ .auto-suggestion.current_item {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+
+ li i.ficon,
+ li svg.ficon {
+ color: $theme-dark-body-color;
+ }
+
+ .dropdown-cart,
+ .dropdown-notification {
+ .dropdown-menu.dropdown-menu-media {
+ overflow: hidden;
+
+ .media {
+ border-color: $theme-dark-border-color;
+
+ .media-meta {
+ color: $theme-dark-body-color;
+ }
+
+ &:hover {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ .dropdown-menu-header {
+ border-bottom: 1px solid $theme-dark-border-color;
+ }
+ .dropdown-menu-footer {
+ background-color: $theme-dark-card-bg;
+ border-top: 1px solid $theme-dark-border-color;
+ .dropdown-item {
+ border-color: $theme-dark-border-color;
+
+ &:hover {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ }
+ }
+ .dropdown-cart {
+ &.empty-cart {
+ &:before {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ li {
+ color: $white;
+ }
+ .cart-item {
+ color: $theme-dark-body-color;
+ }
+ .dropdown-header {
+ span {
+ color: $white;
+ }
+ }
+ .media {
+ img {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ .media-heading .cart-item-by {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ .dropdown-notification {
+ .media-body .media-heading {
+ color: $theme-dark-headings-color;
+ }
+ .notification-text {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+ }
+
+ &.navbar-static-top {
+ background-color: transparent !important;
+ }
+
+ &[class*='bg-'] {
+ .navbar-nav {
+ .nav-item {
+ .nav-link {
+ background-color: inherit;
+ }
+ }
+ }
+ }
+ }
+
+ // 带透明卡片的空白页的文本颜色
+ .blank-page {
+ .card.bg-transparent {
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: $theme-dark-card-bg;
+ }
+
+ p {
+ color: $theme-dark-body-bg;
+ }
+ }
+ }
+
+ // 导航菜单
+ .main-menu {
+ background-color: $theme-dark-card-bg;
+
+ .shadow-bottom {
+ background: linear-gradient(
+ 180deg,
+ $theme-dark-card-bg 44%,
+ rgba($theme-dark-card-bg, 0.51) 73%,
+ rgba($theme-dark-card-bg, 0)
+ );
+ }
+
+ &:not(.expanded) {
+ .navigation {
+ .sidebar-group-active {
+ > a {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+ }
+
+ &.menu-dark {
+ .navigation > li.open:not(.menu-item-closing) > a {
+ background-color: $theme-dark-body-bg;
+ }
+ .navigation > li.sidebar-group-active > a {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+
+ .collapse-toggle-icon {
+ color: $primary !important;
+ }
+ }
+
+ // Perfect Scrollbar 滚动条
+ .ps__thumb-x,
+ .ps__thumb-y {
+ background-color: $theme-dark-body-color;
+ }
+ .ps .ps__rail-x.ps--clicking,
+ .ps .ps__rail-x:focus,
+ .ps .ps__rail-x:hover,
+ .ps .ps__rail-y.ps--clicking,
+ .ps .ps__rail-y:focus,
+ .ps .ps__rail-y:hover {
+ background-color: $theme-dark-border-color;
+ }
+
+ .ps__rail-y.ps--clicking .ps__thumb-y,
+ .ps__rail-y:focus > .ps__thumb-y,
+ .ps__rail-y:hover > .ps__thumb-y {
+ background-color: $theme-dark-body-color;
+ }
+
+ // 导航内容
+ .main-menu-content {
+ .navigation-main {
+ background-color: $theme-dark-card-bg;
+
+ .navigation-header {
+ color: $theme-dark-text-muted-color;
+ }
+
+ li {
+ a {
+ color: $theme-dark-headings-color !important;
+ }
+ ul {
+ .open,
+ .sidebar-group-active {
+ > a {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+ }
+
+ .nav-item {
+ i,
+ svg {
+ color: $theme-dark-headings-color;
+ }
+
+ &.open {
+ > a {
+ background-color: $theme-dark-body-bg !important;
+ }
+ }
+
+ a:after {
+ color: $theme-dark-headings-color;
+ }
+
+ .menu-content {
+ background-color: $theme-dark-card-bg;
+
+ .active {
+ .menu-item {
+ color: $white;
+ }
+ }
+ }
+ }
+
+ .active {
+ .menu-title,
+ i,
+ svg {
+ color: $white;
+ }
+ }
+
+ .sidebar-group-active {
+ .menu-content {
+ background-color: $theme-dark-card-bg;
+
+ .active {
+ z-index: 1;
+
+ a {
+ background-color: transparent;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 导航折叠时的激活态颜色
+ .menu-collapsed {
+ .main-menu:not(.expanded) {
+ .navigation-main {
+ li.active {
+ > a {
+ background: $theme-dark-body-bg !important;
+ }
+ }
+ }
+ }
+ }
+
+ /********* 组件 *********/
+
+ // 提示
+ .alert {
+ .alert-heading,
+ p {
+ color: inherit;
+ }
+ .close {
+ text-shadow: none;
+ }
+ &.alert-dark {
+ .alert-heading,
+ .alert-body,
+ p {
+ color: $gray-600;
+ }
+ &.alert-dismissible .close {
+ color: $gray-600 !important;
+ }
+ }
+ }
+
+ // 面包屑
+
+ // 顶部面包屑
+ .content-header-left {
+ .breadcrumbs-top {
+ .content-header-title {
+ color: $theme-dark-headings-color;
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+ // 面包屑深色样式
+ .breadcrumb {
+ .breadcrumb-item {
+ color: $theme-dark-body-color;
+ + .breadcrumb-item::before {
+ color: $theme-dark-body-color;
+ }
+ }
+ &:not([class*='breadcrumb-']) {
+ .breadcrumb-item + .breadcrumb-item {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+
+ // 带 '>' 字图标的面包屑
+ .breadcrumb-chevron {
+ &.breadcrumb {
+ .breadcrumb-item + .breadcrumb-item:before {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+
+ // 折叠
+ [class*='collapse-'] .card:not(:last-of-type) {
+ border-color: $theme-dark-border-color;
+ }
+ // 阴影和边框
+ .collapse-border {
+ .card {
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ // 折叠阴影
+ .collapse-shadow {
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.24);
+ }
+
+ // 折叠边距
+ .collapse-margin {
+ .card {
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.24) !important;
+ }
+ }
+
+ // 如果页锚点标签
+ .collapse-icon {
+ .card-header {
+ a {
+ color: $theme-dark-body-color;
+ }
+ }
+ [data-toggle='collapse'] {
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-up, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+
+ // 按钮
+ .btn {
+ &:not([class*='btn-']) {
+ color: $theme-dark-body-color;
+ }
+
+ &.btn-dark,
+ &.btn-outline-dark,
+ &.btn-flat-dark {
+ color: $gray-600;
+ }
+
+ &.btn-dark {
+ background-color: $dark !important;
+ }
+
+ &.btn-outline-dark {
+ border-color: $dark;
+ color: $gray-600;
+ &:hover:not(.disabled):not(:disabled) {
+ color: $gray-600;
+ }
+ }
+
+ &.btn-flat-dark {
+ &:active,
+ &:focus {
+ background: $dark;
+ }
+ }
+ }
+
+ .btn-group-toggle {
+ label[class*='btn-outline-'] {
+ color: $primary !important;
+ }
+ }
+
+ // 下拉菜单
+ .dropdown-menu {
+ background-color: $theme-dark-card-bg;
+ box-shadow: 0 4px 24px 0 rgba(0, 0, 0, 0.24);
+
+ .dropdown-header {
+ color: $theme-dark-headings-color;
+ }
+
+ .dropdown-item {
+ color: $theme-dark-body-color;
+ &:hover,
+ &:focus {
+ background: $dropdown-link-hover-bg;
+ color: $dropdown-link-hover-color;
+ }
+ &:active,
+ &.active {
+ color: $dropdown-link-active-color;
+ background-color: $dropdown-link-active-bg;
+ }
+ &.disabled,
+ &:disabled {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+ .dropdown-divider {
+ border-color: $theme-dark-border-color;
+ }
+
+ // 模态
+ .modal {
+ .modal-header,
+ .modal-header[class*='bg-'] {
+ // 如果不删除下列 !important,模态标题 'modal-header' 中如果添加 'bg-COLOR' 类则无效
+ // background-color: $theme-dark-card-bg !important;
+ background-color: $theme-dark-body-bg;
+ }
+
+ // 关闭按钮
+ .modal-header .close {
+ text-shadow: none;
+ background-color: $theme-dark-card-bg !important;
+ color: $theme-dark-body-color;
+ box-shadow: 0 3px 8px 0 rgba(11, 10, 25, 0.49) !important;
+ }
+
+ .modal-content,
+ .modal-body,
+ .modal-footer {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ // 分页
+ .pagination {
+ &:not([class*='pagination-']) {
+ .page-item {
+ &.active {
+ background-color: $theme-dark-pagination-bg;
+
+ .page-link {
+ background-color: $primary;
+
+ &:hover {
+ color: $white;
+ }
+ }
+ }
+
+ .page-link {
+ background-color: $theme-dark-pagination-bg;
+ color: $theme-dark-body-color;
+
+ &:hover {
+ color: $primary;
+ }
+ }
+
+ &.prev-item,
+ &.next-item {
+ .page-link:hover {
+ color: $white;
+ }
+ }
+ }
+ }
+
+ &[class*='pagination-'] {
+ .page-item:not(.active) {
+ .page-link {
+ background-color: $theme-dark-pagination-bg;
+ }
+
+ &:not(:hover) {
+ .page-link {
+ color: $white;
+ }
+ }
+ }
+
+ .page-item {
+ &:not(.active) {
+ .page-link:hover {
+ background-color: $theme-dark-pagination-bg;
+ }
+ }
+
+ &.active {
+ background-color: $theme-dark-pagination-bg;
+ }
+ }
+ }
+
+ .page-item {
+ &.prev-item,
+ &.prev {
+ .page-link:before {
+ background-image: url(str-replace(
+ str-replace($chevron-left, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ &.disabled {
+ .page-link {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-left, 'currentColor', $theme-dark-text-muted-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+ &.next-item,
+ &.next {
+ .page-link::after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ &.disabled {
+ .page-link {
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $theme-dark-text-muted-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+ &.disabled {
+ .page-link {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+ }
+
+ // 导航标签
+ .nav-tabs,
+ .nav-pills,
+ .nav-tabs.nav-justified {
+ .nav-item {
+ .nav-link {
+ color: $theme-dark-headings-color;
+ &.active {
+ background-color: $theme-dark-card-bg;
+ color: $primary;
+ }
+
+ &.disabled {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+ }
+
+ // 线框导航
+ .nav.wrap-border {
+ border-color: $theme-dark-border-color;
+ }
+
+ // 胶囊导航
+ .nav-pills {
+ .nav-item {
+ .nav-link {
+ &.active {
+ color: $white;
+ background-color: $primary;
+ }
+ }
+ }
+ }
+
+ // 媒体
+ .media-bordered {
+ .media:not(:first-child) {
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ // 气泡弹窗
+ .popover {
+ &[x-placement='top'] {
+ .arrow {
+ &:before {
+ border-top-color: $theme-dark-border-color;
+ }
+ &:after {
+ border-top-color: $theme-dark-card-bg;
+ }
+ }
+ }
+
+ &[x-placement='left'] {
+ .arrow {
+ &:before {
+ border-left-color: $theme-dark-border-color;
+ }
+ &:after {
+ border-left-color: $theme-dark-card-bg;
+ }
+ }
+ }
+
+ &[x-placement='right'] {
+ .arrow {
+ &:before {
+ border-right-color: $theme-dark-border-color;
+ }
+ &:after {
+ border-right-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ .popover-header {
+ color: $white;
+ }
+
+ .popover-body {
+ background-color: $theme-dark-card-bg;
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+
+ // BS 通知
+ .toast {
+ background-color: rgba($theme-dark-card-bg, 0.85);
+ box-shadow: $theme-dark-box-shadow;
+ color: $theme-dark-body-color;
+
+ .toast-header {
+ background-color: $theme-dark-card-bg;
+ color: $theme-dark-body-color;
+
+ .close {
+ background-color: transparent !important;
+ box-shadow: none !important;
+ text-shadow: none;
+ }
+ }
+ }
+
+ // 列表组
+ .list-group {
+ .list-group-item {
+ &:not([class*='list-group-item-']),
+ &.list-group-item-action {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+
+ &:hover,
+ &:focus {
+ background-color: $theme-dark-body-bg;
+ }
+ &.active,
+ &:active {
+ background-color: $primary;
+ color: $white;
+ }
+ }
+
+ &.active {
+ p,
+ small {
+ color: $white;
+ }
+ }
+
+ &.disabled {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+
+ &.list-group-circle .list-group-item:after {
+ background-image: url(str-replace(str-replace($circle, 'currentColor', $theme-dark-body-color), '#', '%23'));
+ }
+ }
+
+ // 加载器
+ .spinner-border {
+ border-color: currentColor !important;
+ border-right-color: transparent !important;
+ }
+
+ // 头像
+ .avatar {
+ background-color: $theme-dark-body-bg;
+
+ [class*='avatar-status-'] {
+ border-color: $theme-dark-card-bg;
+ }
+ }
+ .avatar-group {
+ .avatar {
+ img,
+ .avatar-content {
+ box-shadow: 0 0 0 2px $theme-dark-card-bg, inset 0 0 0 1px rgba($theme-dark-card-bg, 0.07);
+ }
+ }
+ }
+
+ // 分隔器
+ .divider {
+ .divider-text {
+ color: $theme-dark-body-color;
+
+ &::before,
+ &::after {
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ &.divider-dark {
+ .divider-text {
+ &::before,
+ &::after {
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+ }
+ }
+
+ // 时间线
+ .timeline {
+ .timeline-item {
+ border-color: $theme-dark-border-color;
+
+ .timeline-point:not(.timeline-point-indicator) {
+ background-color: $theme-dark-card-bg;
+ }
+ .timeline-event {
+ .timeline-event-time {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ &:last-of-type:after {
+ background: linear-gradient($theme-dark-border-color, transparent);
+ }
+ }
+ }
+
+ // 卡片
+ .card {
+ background-color: $theme-dark-card-bg;
+ box-shadow: $theme-dark-box-shadow;
+ .card-footer {
+ border-color: $theme-dark-border-color;
+ }
+
+ &.overlay-img-card {
+ .card-img-overlay {
+ span,
+ p,
+ .card-body {
+ color: $white;
+ }
+ }
+ }
+ }
+
+ //--------------- 进阶卡片 ---------------
+
+ // Developer Meetup Card
+ .card-developer-meetup {
+ .meetup-header .meetup-day {
+ border-right-color: $theme-dark-input-border-color;
+ }
+ }
+
+ // 个人资料卡片
+ .card-profile {
+ .profile-image-wrapper .profile-image {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+
+ // 电商卡片
+ .business-card {
+ .business-items .business-item {
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ // App 设计卡片
+ .card-app-design {
+ .design-planning-wrapper .design-planning {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+
+ //--------------- 统计卡片 ---------------
+
+ .card-tiny-line-stats {
+ .apexcharts-series-markers {
+ .apexcharts-marker {
+ stroke: $info;
+ }
+
+ &:last-child {
+ .apexcharts-marker {
+ fill: $theme-dark-card-bg;
+ }
+ }
+ }
+ }
+
+ //-------------- 分析卡片 --------------
+
+ // 营收和预算报告卡片
+ .card-revenue-budget {
+ .revenue-report-wrapper {
+ border-right-color: $theme-dark-border-color;
+ }
+ .budget-wrapper {
+ .apexcharts-series:not(:first-child) {
+ path {
+ stroke: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+
+ // 收入卡片
+ .earnings-card {
+ .apexcharts-canvas .apexcharts-pie {
+ .apexcharts-datalabel-label {
+ fill: $theme-dark-body-color !important;
+ }
+
+ .apexcharts-datalabel-value {
+ fill: $theme-dark-headings-color;
+ }
+ }
+ }
+
+ // 企业表格卡片
+ .card-company-table {
+ .avatar {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+
+ /********** 表单 **********/
+
+ // 输入
+ input.form-control,
+ .custom-file-label,
+ textarea.form-control {
+ background-color: $theme-dark-input-bg;
+ color: $theme-dark-body-color;
+
+ &:not(:focus) {
+ border-color: $theme-dark-input-border-color;
+ }
+
+ &::placeholder {
+ color: $theme-dark-input-placeholder-color;
+ }
+
+ &:disabled,
+ &[readonly='readonly'] {
+ opacity: 0.5;
+ }
+ }
+
+ // 文本区域计数器
+ .char-textarea {
+ &.active {
+ color: $theme-dark-body-color !important;
+ }
+
+ &.max-limit {
+ color: $danger !important;
+ }
+ }
+
+ // 默认文件上传
+ .custom-file-label {
+ &:after {
+ background-color: $theme-dark-body-bg;
+ border-left: 1px solid $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+ }
+
+ // 自定义控件,如复选框、单选框和开关
+ .custom-control-input {
+ &:not(:checked) {
+ ~ .custom-control-label:before {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-input-border-color;
+ }
+ }
+ &:disabled {
+ ~ .custom-control-label:before {
+ background-color: $theme-dark-input-disabled-border-color;
+ border-color: $theme-dark-input-disabled-border-color;
+ }
+ }
+ }
+
+ .custom-switch {
+ .custom-control-input:not(:checked) {
+ ~ .custom-control-label:before {
+ background-color: $theme-dark-switch-bg;
+ }
+ }
+ .custom-control-input:disabled {
+ ~ .custom-control-label:before {
+ background-color: $theme-dark-switch-bg-disabled;
+ }
+ }
+ }
+
+ // 选择
+ select.form-control,
+ .custom-select {
+ background-color: $theme-dark-input-bg;
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-border-color;
+
+ option:checked {
+ background-color: $theme-dark-card-bg;
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ }
+ &:focus {
+ border-color: $primary;
+ }
+ }
+
+ select.form-control {
+ &:not([multiple='multiple']) {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+
+ // 添加覆盖,如:表单验证
+ .was-validated .form-control:invalid,
+ .form-control.is-invalid {
+ border-color: $danger !important;
+ }
+
+ .was-validated .form-control:valid,
+ .form-control.is-valid {
+ border-color: $success !important;
+ }
+
+ // 表单向导
+ .wizard {
+ .steps {
+ ul {
+ .disabled,
+ .done {
+ a {
+ color: $theme-dark-body-color !important;
+
+ &:hover {
+ color: $theme-dark-body-color;
+ }
+
+ .step {
+ background-color: $theme-dark-body-bg !important;
+ color: $white !important;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 输入组
+ .input-group {
+ .input-group-text {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+
+ &:focus-within {
+ .form-control,
+ .input-group-text {
+ border-color: $primary;
+ box-shadow: none;
+ }
+ }
+ }
+
+ // 浮动标签
+ .form-label-group {
+ & > input:not(:focus):not(:placeholder-shown) ~ label,
+ & > textarea:not(:focus):not(:placeholder-shown) ~ label {
+ color: $theme-dark-body-color !important;
+ }
+ }
+
+ .counter-value {
+ color: white;
+ }
+
+ /********** 表格 **********/
+
+ // 表格
+ .table {
+ background-color: $theme-dark-table-bg;
+
+ td,
+ th {
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-border-color !important;
+ }
+
+ .thead,
+ tbody {
+ tr:not([class*='table-']) {
+ th,
+ td {
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+
+ code {
+ background-color: $theme-dark-table-row-bg;
+ }
+ }
+ }
+ }
+
+ thead,
+ tfoot {
+ tr {
+ th {
+ border-color: $theme-dark-border-color;
+ background-color: $theme-dark-table-header-bg;
+ color: $theme-dark-headings-color;
+ }
+ }
+ &.thead-dark th {
+ background-color: $white;
+ color: $dark !important;
+ }
+ }
+
+ // 如果表格没有浅色/深色模式并且 thead 和 tfoot 没有深色的类
+ &:not(.table-dark):not(.table-light) thead:not(.thead-dark) th,
+ &:not(.table-dark):not(.table-light) tfoot:not(.thead-dark) th {
+ background-color: $theme-dark-table-header-bg;
+ }
+
+ // 表格深色样式
+ &.table-dark {
+ background-color: $white;
+ &.table-striped tbody tr:nth-of-type(odd) {
+ background-color: rgba($dark, 0.05);
+ td {
+ background-color: inherit;
+ }
+ }
+ td,
+ th {
+ border-color: #f8f9fa !important;
+ color: $dark !important;
+ background-color: $white;
+ .text-white {
+ color: $dark !important;
+ }
+ }
+ }
+ tbody {
+ tr {
+ &[class*='table-'] {
+ td,
+ th {
+ background-color: unset;
+ }
+ }
+
+ &.table-dark {
+ td,
+ th {
+ color: $white;
+ }
+ }
+
+ &.table-active {
+ td,
+ th {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+
+ // 带线框的表格
+ &.table-bordered {
+ border-color: $theme-dark-border-color;
+ }
+
+ // 表格悬停时行的颜色
+ &.table-hover {
+ tbody {
+ tr {
+ &:hover {
+ background-color: $theme-dark-table-hover-bg;
+ }
+
+ th,
+ td {
+ background-color: unset;
+ }
+ }
+ }
+ }
+
+ // 悬停动画
+ &.table-hover-animation tbody tr {
+ background-color: $theme-dark-table-bg;
+ &:hover {
+ box-shadow: $theme-dark-box-shadow;
+ }
+ }
+
+ // 条纹
+ &.table-striped {
+ tbody {
+ tr {
+ &:nth-of-type(odd) {
+ background-color: $theme-dark-table-striped-bg;
+ }
+ }
+ }
+ }
+ }
+
+ // 数据表
+ .dataTables_wrapper {
+ .dt-buttons {
+ .buttons-copy,
+ .buttons-excel,
+ .buttons-pdf,
+ .buttons-print,
+ .btn-secondary,
+ [class*='buttons-'] {
+ background-color: $theme-dark-body-bg !important;
+ &:active {
+ background-color: $primary !important;
+ color: $white;
+ }
+ }
+ }
+ .dt-button-collection {
+ > div[role='menu'] {
+ box-shadow: $theme-dark-box-shadow;
+ }
+ }
+
+ .table.dataTable {
+ tr {
+ &.group {
+ td {
+ background-color: $theme-dark-table-striped-bg;
+ color: $theme-dark-headings-color;
+ }
+ }
+ }
+
+ // 排序图标更改
+ thead {
+ .sorting,
+ .sorting_asc,
+ .sorting_desc {
+ &:before {
+ background-image: url(str-replace(
+ str-replace($chevron-up, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ &:after {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ .sorting {
+ &:before,
+ &:after {
+ opacity: 0.5;
+ }
+ }
+ .sorting_asc {
+ &:before {
+ opacity: 1;
+ }
+ &:after {
+ opacity: 0.5;
+ }
+ }
+ .sorting_desc {
+ &:after {
+ opacity: 1;
+ }
+ &:before {
+ opacity: 0.5;
+ }
+ }
+ }
+ }
+ }
+
+ // AGGrid 页面按钮
+ .ag-grid-btns {
+ .filter-btn {
+ background-color: transparent !important;
+ }
+ }
+
+ // AGGrid 主体
+ .aggrid {
+ .ag-input-wrapper input {
+ color: $theme-dark-body-color;
+ }
+ }
+ .aggrid,
+ .ag-header {
+ background-color: $theme-dark-card-bg;
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-border-color;
+
+ .ag-row-hover,
+ .ag-row-selected {
+ background-color: $theme-dark-table-hover-bg !important;
+ }
+
+ .ag-icon {
+ color: $theme-dark-input-border-color;
+ }
+ .ag-header-cell.ag-column-hover {
+ background: transparent !important;
+ }
+
+ .ag-header-cell,
+ .ag-cell,
+ .ag-row,
+ .ag-pinned-left-header,
+ .ag-pinned-left-cols-container,
+ .ag-horizontal-left-spacer,
+ .ag-paging-panel,
+ .ag-floating-filter-input {
+ border-color: $theme-dark-border-color !important;
+ color: $theme-dark-body-color;
+ }
+ .ag-cell.ag-cell-inline-editing {
+ border-color: $theme-dark-border-color;
+ background: $theme-dark-body-bg;
+ height: auto;
+ padding-top: 0;
+ }
+
+ .ag-paging-panel {
+ .ag-paging-button {
+ background-color: $theme-dark-body-bg;
+ }
+ .ag-disabled {
+ background: $theme-dark-card-bg;
+ }
+
+ span[ref='lbTotal'] {
+ background-color: $theme-dark-pagination-bg;
+ color: $theme-dark-body-color !important;
+ }
+ }
+
+ ::-webkit-scrollbar-track {
+ background: $theme-dark-body-bg;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: $primary;
+ }
+ }
+
+ /********** 页面 **********/
+
+ // 敬请期待
+ .getting-started {
+ .clockCard {
+ p {
+ color: $theme-dark-body-color !important;
+ }
+ }
+ }
+
+ // 个人主页
+ #user-profile {
+ .profile-header {
+ .navbar {
+ background-color: $theme-dark-card-bg;
+ .navbar-toggler {
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+ }
+
+ // 搜索
+ .search-bar {
+ .form-control {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+
+ // 博客编辑
+ .blog-edit-wrapper {
+ .border {
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+ // 知识库
+ .kb-search-content-info {
+ .kb-search-content {
+ .card-img-top {
+ background-color: #3f4860;
+ }
+ }
+ }
+
+ // 知识库列表组圆圈
+ .list-group-circle {
+ .list-group-item:not([class*='list-group-item-']),
+ .list-group-item-action {
+ &:hover,
+ &:focus,
+ &:active {
+ background-color: transparent !important;
+ }
+ }
+ }
+
+ /********** 应用 **********/
+
+ // 应用通用侧边栏和内容深色样式
+ .content-area-wrapper {
+ border-color: $theme-dark-border-color !important;
+
+ .sidebar {
+ .sidebar-content {
+ background-color: $theme-dark-card-bg !important;
+ }
+ }
+ .app-fixed-search {
+ background-color: $theme-dark-card-bg !important;
+ border-color: $theme-dark-border-color !important;
+ }
+ .content-right {
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+
+ // 邮件应用
+ .email-application {
+ .content-area-wrapper {
+ // 邮件列表
+ .email-app-list {
+ .app-action {
+ border-color: $theme-dark-border-color;
+ background-color: $theme-dark-card-bg;
+ .action-right {
+ .list-inline-item {
+ .dropdown-toggle {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+
+ .email-user-list {
+ .media {
+ border-color: $theme-dark-border-color;
+ background-color: $theme-dark-card-bg;
+
+ &:hover {
+ box-shadow: 0 3px 10px 0 $theme-dark-card-bg;
+ }
+
+ &.selected-row-bg {
+ background-color: rgba($primary, 0.06);
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ .media {
+ .user-details,
+ .mail-message {
+ p,
+ .mail-date {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+
+ .mail-read {
+ background-color: $theme-dark-table-hover-bg;
+ }
+ }
+ }
+
+ // 邮件详情
+ .email-app-details {
+ border-color: $theme-dark-border-color;
+ .email-scroll-area {
+ background-color: $theme-dark-body-bg;
+ }
+
+ .email-detail-header {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+
+ .email-header-right {
+ .list-inline-item {
+ .dropdown-toggle,
+ .action-icon {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+ .email-info-dropup {
+ .dropdown-toggle::after {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $theme-dark-text-muted-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+
+ .mail-message-wrapper,
+ .email-detail-head {
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+
+ // 撰写新邮件
+ #compose-mail {
+ .compose-mail-form-field,
+ .ql-toolbar,
+ .ql-container {
+ border-color: $theme-dark-border-color;
+ }
+ label {
+ color: $theme-dark-body-color;
+ }
+ .modal-body {
+ border-bottom-left-radius: $modal-content-border-radius;
+ border-bottom-right-radius: $modal-content-border-radius;
+ }
+ }
+ }
+ }
+
+ // 聊天应用
+ .chat-application {
+ .content-area-wrapper {
+ border-color: $theme-dark-border-color;
+ }
+ // 左侧边栏
+ .sidebar {
+ .chat-profile-sidebar {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+
+ .sidebar-content {
+ border-color: $theme-dark-border-color;
+
+ .chat-fixed-search {
+ border-color: $theme-dark-border-color;
+ }
+
+ .chat-user-list-wrapper {
+ .chat-users-list {
+ li {
+ &:not(.active):hover {
+ background: $theme-dark-body-bg;
+ }
+ .chat-info .card-text,
+ .chat-time {
+ color: $theme-dark-text-muted-color;
+ }
+ &.active {
+ .chat-info .card-text,
+ .chat-time {
+ color: $white;
+ }
+ }
+ img {
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+ }
+ }
+ }
+ .avatar-border {
+ img {
+ border-color: $theme-dark-border-color;
+ }
+ }
+
+ // 右侧内容
+ .content-right {
+ .chat-app-window {
+ .start-chat-area {
+ background-color: $theme-dark-card-bg;
+
+ .start-chat-icon,
+ .start-chat-text {
+ background: $theme-dark-card-bg;
+ color: $theme-dark-body-color;
+ }
+ }
+ .start-chat-area,
+ .user-chats {
+ background-image: url($chat-bg-dark);
+ background-color: #1e232f;
+ }
+ .user-chats {
+ .divider .divider-text {
+ background: $theme-dark-card-bg;
+ &:before,
+ &:after {
+ border-color: $theme-dark-border-color;
+ }
+ }
+ .avatar img {
+ border-color: $theme-dark-border-color;
+ }
+ }
+ // 对话样式
+ .active-chat {
+ .chat-left {
+ .chat-content {
+ background-color: $theme-dark-card-bg;
+ p {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+
+ .chat-content {
+ p {
+ color: $white;
+ }
+ }
+ // 聊天表单
+ .chat-header .dropdown-toggle {
+ color: $theme-dark-body-color;
+ }
+ .chat-header,
+ .chat-app-form {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+
+ .user-profile-sidebar {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+
+ // 聊天工具深色样式
+ .chat-widget {
+ .user-chats {
+ background-color: $theme-dark-widget-bg !important;
+ }
+ .card-header,
+ .chat-app-form {
+ background-color: $theme-dark-card-bg;
+ }
+ .chat-app-window .user-chats .chat-left .chat-content {
+ background-color: $theme-dark-card-bg !important;
+ color: $theme-dark-body-color !important;
+ }
+ .chat-app-window .user-chats .avatar img {
+ border-color: $theme-dark-body-bg;
+ }
+ }
+
+ // 看板应用
+ .kanban-application {
+ .kanban-wrapper {
+ .kanban-container {
+ .kanban-board {
+ .kanban-board-header {
+ .kanban-title-board {
+ color: $white;
+
+ &:hover,
+ &:focus {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ .kanban-item {
+ background-color: $theme-dark-card-bg;
+ .item-dropdown i.dropdown-toggle,
+ .item-dropdown svg.dropdown-toggle {
+ stroke: $white;
+ }
+ .kanban-title-button {
+ color: $theme-dark-body-color;
+ }
+ i,
+ svg {
+ stroke: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+ }
+ .update-item-sidebar {
+ .nav-tabs .nav-item .nav-link,
+ .tab-content .tab-pane {
+ background-color: transparent;
+ }
+ }
+ }
+ .kanban-item.gu-mirror {
+ background-color: $theme-dark-card-bg;
+ }
+
+ // 待办事项应用
+ .todo-application {
+ .content-area-wrapper {
+ .sidebar {
+ .todo-form {
+ .todo-item-action {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ .content-right {
+ .todo-task-list-wrapper {
+ background-color: $theme-dark-card-bg !important;
+ border-color: $theme-dark-border-color;
+ }
+ .todo-task-list {
+ .todo-item {
+ &:not(:first-child) {
+ border-color: $theme-dark-border-color;
+ }
+ &.completed {
+ .todo-title {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ &:hover {
+ box-shadow: $theme-dark-box-shadow;
+ }
+
+ .todo-item-action {
+ .todo-item-favorite:not(.text-warning) {
+ i,
+ svg {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .todo-item-action {
+ .close {
+ background-color: transparent !important;
+ }
+ }
+ }
+ .todo-item.gu-mirror {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ box-shadow: $theme-dark-box-shadow;
+ &.completed {
+ .todo-title {
+ color: $theme-dark-text-muted-color;
+ }
+ }
+ }
+
+ // 电商应用
+ .ecommerce-application {
+ .ecommerce-card {
+ .btn-light {
+ background-color: $theme-dark-body-bg !important;
+ color: $white;
+ border-color: transparent;
+ }
+ }
+
+ // 主内容
+ .content-right,
+ .content-body {
+ // header items
+ .ecommerce-header-items {
+ .result-toggler {
+ .search-results {
+ color: $theme-dark-headings-color;
+ }
+
+ .shop-sidebar-toggler {
+ i,
+ svg {
+ color: $theme-dark-headings-color;
+ }
+ }
+ }
+ }
+
+ // 网格/列表视图
+ .grid-view,
+ .list-view {
+ .ecommerce-card {
+ .card-body {
+ border-color: $theme-dark-border-color;
+ }
+ .item-options {
+ .wishlist {
+ span {
+ color: $headings-color;
+ }
+ }
+
+ .cart {
+ span {
+ color: $white;
+ }
+ }
+ }
+ }
+ }
+ }
+ .grid-view {
+ .item-name a,
+ .item-price {
+ color: $theme-dark-body-color;
+ }
+ }
+
+ // 心愿单商品
+ .wishlist-items {
+ .ecommerce-card {
+ .move-cart {
+ .move-to-cart {
+ color: $white;
+ }
+ }
+ }
+ }
+
+ // 结算
+ .product-checkout {
+ .checkout-options {
+ .coupons {
+ input {
+ color: $theme-dark-body-color;
+ &::placeholder {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+ }
+ // 商品详情
+ .app-ecommerce-details {
+ .item-features,
+ .swiper-responsive-breakpoints.swiper-container .swiper-slide {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+
+ // 文件管理应用
+ .file-manager-application {
+ .sidebar-file-manager {
+ background-color: $theme-dark-card-bg !important;
+ .jstree {
+ .jstree-container-ul {
+ .jstree-anchor {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ .storage-status {
+ i,
+ svg {
+ color: $theme-dark-body-color !important;
+ }
+ }
+
+ .file-manager-title {
+ color: $theme-dark-label-color;
+ }
+
+ &.show {
+ border: 1px solid $theme-dark-border-color !important;
+ }
+ }
+
+ .content-area-wrapper {
+ border: 1px solid $theme-dark-border-color !important;
+ }
+
+ // 文件管理应用
+ .file-manager-main-content {
+ border: 1px solid $theme-dark-border-color !important;
+
+ .file-manager-app-searchbar {
+ background-color: transparent !important;
+ border-bottom: 1px solid $theme-dark-border-color !important;
+
+ .file-manager-toggler {
+ color: $theme-dark-body-color !important;
+ }
+ }
+
+ .file-manager-content-header,
+ .file-manager-content-body {
+ background-color: $theme-dark-card-bg !important;
+ }
+
+ .file-manager-content-header {
+ border-color: $theme-dark-border-color !important;
+ }
+
+ .file-manager-content-body {
+ .drives {
+ .card {
+ background-color: $theme-dark-table-bg;
+ }
+ }
+
+ .view-container {
+ .file-manager-item {
+ .file-logo-wrapper {
+ background-color: $theme-dark-body-bg !important;
+ }
+ &:not(.selected) {
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+ &:not(.list-view) {
+ .file-manager-item {
+ .file-size,
+ .file-accessed {
+ color: $theme-dark-text-muted-color !important;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ #app-file-manager-info-sidebar {
+ .nav-tabs .nav-link,
+ .tab-content .tab-pane {
+ background-color: transparent;
+ }
+
+ .nav-tabs {
+ .nav-item:not(.active) {
+ .nav-link {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+ }
+
+ // 日历应用
+ .app-calendar {
+ .app-calendar-sidebar {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+
+ .sidebar-content-title {
+ color: $theme-dark-label-color;
+ }
+ .select-all,
+ .input-filter {
+ ~ label {
+ color: $theme-dark-label-color;
+ }
+ }
+ }
+ .fc {
+ .fc-day-today {
+ background: $theme-dark-body-bg !important;
+ background-color: $theme-dark-body-bg !important;
+ }
+
+ .fc-timegrid {
+ .fc-scrollgrid-section {
+ .fc-col-header-cell,
+ .fc-timegrid-axis,
+ .fc-daygrid-day {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ .fc-day-today {
+ background-color: rgba($color: $gray-100, $alpha: 0.12) !important;
+
+ &.fc-col-header-cell {
+ background-color: $theme-dark-card-bg !important;
+ }
+ }
+ }
+ }
+ .fc-popover {
+ background: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ .fc-popover-header {
+ .fc-popover-title,
+ .fc-popover-close {
+ color: $theme-dark-body-color;
+ }
+ }
+ tbody td,
+ thead th {
+ border-color: $theme-dark-border-color;
+ }
+
+ .fc-scrollgrid {
+ border-color: $theme-dark-border-color;
+ }
+
+ .fc-list,
+ th {
+ border-color: $theme-dark-border-color;
+ .fc-list-day-cushion {
+ background: $theme-dark-body-bg;
+ }
+ .fc-list-event:hover td {
+ background-color: $theme-dark-body-bg;
+ }
+ .fc-list-event-time {
+ color: $theme-dark-body-color;
+ }
+ .fc-list-event {
+ td {
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+ }
+ }
+
+ // 账单应用
+ .invoice-list-wrapper {
+ .dataTables_wrapper {
+ .invoice-list-dataTable-header {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ .invoice-data-table {
+ background-color: $theme-dark-card-bg;
+ tbody .selected-row-bg {
+ background-color: $theme-dark-border-color;
+ }
+ td {
+ background-color: inherit;
+ }
+ }
+ }
+ }
+ .invoice-edit,
+ .invoice-add {
+ .invoice-preview-card {
+ .invoice-product-details {
+ background-color: $theme-dark-body-bg;
+ .product-details-border {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+ }
+ .invoice-print {
+ .form-control {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+
+ // 用户应用
+ .app-user-view {
+ .plan-card {
+ border-color: $primary !important;
+ }
+ }
+ .app-user-edit {
+ .form-control.error {
+ border-color: $danger !important;
+ }
+ }
+
+ /********** 界面定制器 **********/
+
+ .customizer {
+ background-color: $theme-dark-card-bg;
+
+ .customizer-close {
+ i,
+ svg {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+
+ .footer-fixed {
+ .footer {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+
+ /********** 水平导航布局 **********/
+
+ .horizontal-layout {
+ &.navbar-sticky .horizontal-menu-wrapper .navbar-horizontal.header-navbar.fixed-top {
+ box-shadow: 0 4px 24px 0 rgba($black, 0.75) !important;
+ }
+ .horizontal-menu-wrapper {
+ background: linear-gradient(
+ to bottom,
+ rgba(37, 43, 71, 0.76) 44%,
+ rgba(56, 53, 53, 0.46) 73%,
+ rgba($white, 0) 100%
+ ) !important;
+ .header-navbar {
+ background: $theme-dark-card-bg !important;
+ &.navbar-shadow {
+ box-shadow: 0 4px 24px 0 rgba($black, 0.75);
+ }
+ &.navbar-horizontal {
+ ul#main-menu-navigation > li:hover:not(.active) > a {
+ background: $theme-dark-body-bg;
+ }
+
+ .active {
+ .nav-link {
+ &.dropdown-toggle::after {
+ background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ }
+
+ .nav-link {
+ &.dropdown-toggle::after {
+ background-image: url(str-replace(
+ str-replace($chevron-down, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ }
+ }
+ }
+ }
+ .main-menu-content {
+ .navbar-nav {
+ .dropdown-submenu {
+ &.show {
+ background-color: $theme-dark-card-bg !important;
+ color: $theme-dark-body-color;
+ }
+ }
+ .dropdown-menu {
+ a {
+ &:hover {
+ color: $theme-dark-headings-color !important;
+ }
+ }
+ .disabled a {
+ color: $theme-dark-text-muted-color;
+ }
+ .dropdown-item {
+ color: $theme-dark-headings-color;
+ }
+ .dropdown-toggle {
+ &::after {
+ background-image: url(str-replace(
+ str-replace($chevron-right, 'currentColor', $theme-dark-body-color),
+ '#',
+ '%23'
+ ));
+ }
+ &:hover,
+ &:active {
+ &::after {
+ background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $white), '#', '%23'));
+ }
+ }
+ }
+ }
+
+ > li.active {
+ > a {
+ > i,
+ > svg {
+ color: $white !important;
+ }
+ }
+
+ .dropdown-menu {
+ li.active > a {
+ background: $theme-dark-body-bg !important;
+ color: $theme-dark-body-color;
+ &:hover {
+ color: $primary !important;
+ }
+ }
+ }
+
+ .dropdown-menu {
+ li.open.active {
+ > a {
+ color: $theme-dark-body-color !important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/base/themes/semi-dark-layout.scss b/src/@core/scss/base/themes/semi-dark-layout.scss
new file mode 100644
index 0000000..b40c05d
--- /dev/null
+++ b/src/@core/scss/base/themes/semi-dark-layout.scss
@@ -0,0 +1,107 @@
+// ================================================================================================
+// 文件名:semi-dark-layout.scss
+// 描述:混合皮肤布局(深色导航 + 浅色内容) SCSS
+// ----------------------------------------------------------------------------------------------
+// 项目:Rexo-UI - VueJS & HTML 网站/后台管理模板
+// 著作人:Albert.Z
+// 官网:http://www.rexotech.cn/
+// ================================================================================================
+
+@import '../bootstrap-extended/include';
+@import '../components/include';
+
+.semi-dark-layout {
+ // 主导航菜单
+ .main-menu {
+ background-color: $theme-dark-card-bg;
+ .shadow-bottom {
+ background: linear-gradient(
+ 180deg,
+ $theme-dark-card-bg 44%,
+ rgba($theme-dark-card-bg, 0.51) 73%,
+ rgba($theme-dark-card-bg, 0)
+ );
+ }
+ &:not(.expanded) {
+ .navigation {
+ .sidebar-group-active {
+ a {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+ }
+ }
+
+ // 导航内容
+ .main-menu-content {
+ .navigation-main {
+ background-color: $theme-dark-card-bg;
+ .navigation-header {
+ color: $theme-dark-text-muted-color;
+ }
+ .nav-item {
+ a {
+ color: $theme-dark-body-color;
+ }
+ &.open {
+ a {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ a:after,
+ a {
+ color: $theme-dark-body-color;
+ }
+ .menu-content {
+ background-color: $theme-dark-card-bg;
+ .active {
+ .menu-item {
+ color: $white;
+ }
+ }
+ li:not(.active) {
+ a {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ }
+ .active {
+ .menu-title,
+ i {
+ color: $white;
+ }
+ }
+ .sidebar-group-active {
+ a {
+ background: $theme-dark-card-bg;
+ border-radius: 4px;
+ }
+ .menu-content {
+ background-color: $theme-dark-card-bg;
+ .active {
+ z-index: 1;
+ a {
+ background-color: transparent;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 导航折叠时的激活态菜单项颜色
+ .menu-collapsed {
+ .main-menu:not(.expanded) {
+ .navigation-main {
+ li.active {
+ > a {
+ background: $theme-dark-body-bg !important;
+ color: $white !important;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/core.scss b/src/@core/scss/core.scss
new file mode 100644
index 0000000..3a788ad
--- /dev/null
+++ b/src/@core/scss/core.scss
@@ -0,0 +1,22 @@
+// 基本样式
+@import 'base/bootstrap';
+@import 'base/bootstrap-extended';
+@import 'base/colors';
+@import 'base/components';
+
+// 模板主题
+@import 'base/themes/dark-layout.scss';
+@import 'base/themes/semi-dark-layout.scss';
+
+// BSV
+$b-table-sort-icon-bg-not-sorted: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Earrows%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-257.000000, -561.000000)' stroke='%23C6C4D0' stroke-width='2'%3E%3Cg id='arrows' transform='translate(258.000000, 562.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+$b-table-sort-icon-bg-ascending: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Eactive-up%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-197.000000, -561.000000)' stroke-width='2'%3E%3Cg id='active-up' transform='translate(198.000000, 562.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)' stroke='%23C6C4D0'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up' stroke='%235E5873'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+$b-table-sort-icon-bg-descending: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Eactive-down%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-227.000000, -561.000000)' stroke-width='2'%3E%3Cg id='active-down' transform='translate(228.000000, 562.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)' stroke='%235E5873'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up' stroke='%23C6C4D0'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+
+$b-table-sort-icon-bg-dark-not-sorted: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Earrow-dark%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-259.000000, -621.000000)' stroke='%23747A88' stroke-width='2'%3E%3Cg id='arrow-dark' transform='translate(260.000000, 622.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+$b-table-sort-icon-bg-dark-ascending: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Eactive-up-dark%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-199.000000, -621.000000)' stroke-width='2'%3E%3Cg id='active-up-dark' transform='translate(200.000000, 622.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)' stroke='%23747A88'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up' stroke='%23B4B7BC'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+$b-table-sort-icon-bg-dark-descending: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Eactive-dow-dark%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-229.000000, -621.000000)' stroke-width='2'%3E%3Cg id='active-dow-dark' transform='translate(230.000000, 622.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)' stroke='%23B4B7BC'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up' stroke='%23747A88'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+@import '~bootstrap-vue/src/index.scss';
+
+// Vue 特定样式
+@import 'vue/index';
diff --git a/src/@core/scss/vue/_animation.scss b/src/@core/scss/vue/_animation.scss
new file mode 100644
index 0000000..c276e0f
--- /dev/null
+++ b/src/@core/scss/vue/_animation.scss
@@ -0,0 +1,40 @@
+// 标签导航动画
+@keyframes tab-panel-slide-in {
+ 0% {
+ opacity: 0;
+ transform: translateX(100%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateX(0%);
+ }
+}
+
+@keyframes tab-panel-slide-up {
+ 0% {
+ opacity: 0;
+ transform: translateY(100%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+}
+
+@keyframes rubberBand {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+ 30% {
+ transform: scale3d(1.25, 0.75, 1);
+ }
+ 50% {
+ transform: scale3d(1.15, 0.85, 1);
+ }
+ 75% {
+ transform: scale3d(1.05, 0.95, 1);
+ }
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
diff --git a/src/@core/scss/vue/_base-extended.scss b/src/@core/scss/vue/_base-extended.scss
new file mode 100644
index 0000000..44a57d1
--- /dev/null
+++ b/src/@core/scss/vue/_base-extended.scss
@@ -0,0 +1,53 @@
+// 禁用 X 轴溢出以避免在路由传输时产生的水平滚动条
+body {
+ overflow-x: hidden;
+}
+
+// 垂直导航菜单
+.nav-item.has-sub {
+ & & li svg {
+ display: none;
+ }
+}
+
+// 副导航栏徽章定位
+.header-navbar .navbar-container ul.navbar-nav li.dropdown-cart .badge.badge-up,
+.header-navbar .navbar-container ul.navbar-nav li.dropdown-notification .badge.badge-up {
+ right: -9px;
+}
+
+// 滚动条样式
+.horizontal-menu {
+ .horizontal-menu-wrapper {
+ .navbar-horizontal {
+ ul.dropdown-menu {
+ &::-webkit-scrollbar {
+ width: 5px;
+ height: 5px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: $gray-500;
+ border-radius: 20px;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: $gray-300;
+ border-radius: 30px;
+ }
+ }
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ // 修复深色水平导航布局的导航栏颜色
+ .horizontal-layout {
+ &.navbar-sticky {
+ .navbar.header-navbar {
+ box-shadow: none;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/_dark-layout.scss b/src/@core/scss/vue/_dark-layout.scss
new file mode 100644
index 0000000..374992b
--- /dev/null
+++ b/src/@core/scss/vue/_dark-layout.scss
@@ -0,0 +1,428 @@
+// 核心变量和混入
+@import '~@core/scss/base/bootstrap-extended/include';
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+body {
+ &.dark-layout {
+ // ------------------------------------------------
+ // 头像组件
+ // ------------------------------------------------
+ .b-avatar {
+ &.badge-secondary {
+ background-color: $theme-dark-body-bg;
+ }
+ .b-avatar-text {
+ span {
+ color: $white;
+ }
+ }
+ .avatar-icon {
+ color: $white;
+ }
+
+ &.avatar-border-2 {
+ img {
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+
+ // 头像组
+ .b-avatar-group {
+ .b-avatar-group-inner {
+ .b-avatar {
+ box-shadow: 0 0 0 2px $theme-dark-card-bg, inset 0 0 0 1px rgba(40, 48, 70, 0.07);
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 徽章
+ // ------------------------------------------------
+ .badge {
+ color: $white;
+ }
+
+ // ------------------------------------------------
+ // 副导航栏
+ // ------------------------------------------------
+ .header-navbar {
+ &.navbar-light {
+ .navbar-brand {
+ color: $white;
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 宽高比组件
+ // ------------------------------------------------
+ .b-aspect {
+ border-color: $theme-dark-border-color;
+ }
+
+ // ------------------------------------------------
+ // 气泡弹窗
+ // ------------------------------------------------
+ .popover.b-popover {
+ // 气泡弹窗顶部定位
+ &.bs-popover-top {
+ .arrow {
+ &::before {
+ border-top-color: $theme-dark-border-color;
+ }
+ &::after {
+ border-top-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ // 气泡弹窗左定位
+ &.bs-popover-left {
+ .arrow {
+ &::before {
+ border-left-color: $theme-dark-border-color;
+ }
+ &::after {
+ border-left-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ // 气泡弹窗右定位
+ &.bs-popover-right {
+ .arrow {
+ &::before {
+ border-right-color: $theme-dark-border-color;
+ }
+ &::after {
+ border-right-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 自定义范围
+ // ------------------------------------------------
+ .custom-range {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-border-color;
+ &:focus {
+ background-color: $theme-dark-input-bg;
+ border-color: $primary;
+ }
+ }
+
+ // ------------------------------------------------
+ // 模态
+ // ------------------------------------------------
+ .modal-content {
+ .modal-header {
+ .close {
+ color: $white;
+ }
+ }
+ .modal-body {
+ color: $white;
+ }
+ }
+
+ // ------------------------------------------------
+ // 开关
+ // ------------------------------------------------
+ .custom-switch.switch-lg,
+ .custom-switch.switch-md {
+ .custom-control-label::before {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+
+ // ------------------------------------------------
+ // 分页
+ // ------------------------------------------------
+ .pagination {
+ .page-item {
+ &.disabled {
+ .page-link {
+ // background-color: ;
+ color: $theme-dark-text-muted-color !important;
+ }
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 通知
+ // ------------------------------------------------
+ .b-toast {
+ .toast {
+ background-color: rgba($theme-dark-body-bg, 0.85);
+ color: $theme-dark-body-color;
+ }
+ }
+
+ // ------------------------------------------------
+ // 日历
+ // ------------------------------------------------
+ .b-calendar-header {
+ output {
+ background: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+ }
+ .b-calendar-grid {
+ &.form-control {
+ background: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+ .b-calendar-grid-caption {
+ color: $theme-dark-body-color;
+ }
+ .small {
+ background: $theme-dark-body-bg;
+ }
+ .bg-light {
+ background-color: $theme-dark-border-color !important;
+ }
+ .table-info {
+ span {
+ color: $black !important;
+ }
+ }
+ }
+ // 悬停颜色
+ .b-calendar-grid-body {
+ .col:not(.table-info) {
+ span.btn.rounded-circle {
+ &:hover {
+ background-color: $theme-dark-card-bg;
+ }
+ }
+ }
+ }
+ // 浅色按钮
+ .btn-light {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ color: $theme-dark-body-color;
+ }
+
+ // ------------------------------------------------
+ // 表格
+ // ------------------------------------------------
+
+ // 表格悬停颜色
+ .table-primary,
+ .table-primary > th,
+ .table-primary > td {
+ .btn-outline-light {
+ &:hover {
+ background-color: $theme-dark-body-bg !important;
+ }
+ }
+ }
+
+ .table.b-table {
+ thead,
+ tfoot {
+ > tr {
+ > [aria-sort='none'] {
+ .dark-layout & {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Earrow-dark%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-259.000000, -621.000000)' stroke='%23747A88' stroke-width='2'%3E%3Cg id='arrow-dark' transform='translate(260.000000, 622.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+ }
+ }
+
+ > [aria-sort='ascending'] {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Eactive-up-dark%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-199.000000, -621.000000)' stroke-width='2'%3E%3Cg id='active-up-dark' transform='translate(200.000000, 622.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)' stroke='%23747A88'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up' stroke='%23B4B7BC'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+ }
+
+ > [aria-sort='descending'] {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='14px' height='26px' viewBox='0 0 14 26' version='1.1'%3E%3Ctitle%3Eactive-dow-dark%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg id='Artboard' transform='translate(-229.000000, -621.000000)' stroke-width='2'%3E%3Cg id='active-dow-dark' transform='translate(230.000000, 622.000000)'%3E%3Cg id='chevron-down' transform='translate(0.000000, 18.000000)' stroke='%23B4B7BC'%3E%3Cpolyline id='Path' points='0 0 6 6 12 0'/%3E%3C/g%3E%3Cg id='chevron-up' stroke='%23747A88'%3E%3Cpolyline id='Path' points='12 6 6 0 0 6'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+ }
+ }
+ }
+ }
+
+ @each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ // table only for dark
+ .b-table {
+ .table-#{$color_name} {
+ color: $body-color !important;
+ td {
+ color: $body-color !important;
+ }
+ }
+ &.table-hover tbody tr th.table-#{$color_name},
+ &.table-hover tbody tr td.table-#{$color_name} {
+ background-color: rgba($color_value, 0.3);
+ color: $white !important;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 时间
+ // ------------------------------------------------
+ .b-time {
+ .b-time-header {
+ .form-control {
+ background-color: $theme-dark-input-bg;
+ }
+ }
+ }
+ .b-time[aria-disabled='true'] output,
+ .b-time[aria-readonly='true'] output,
+ .b-time output.disabled {
+ background-color: $theme-dark-card-bg;
+ }
+
+ // ------------------------------------------------
+ // 数字调节器
+ // ------------------------------------------------
+ .b-form-spinbutton {
+ &.form-control {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-input-border-color;
+ color: $theme-dark-body-color;
+ svg {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 评分
+ // ------------------------------------------------
+ .b-rating {
+ &.form-control {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-input-border-color;
+ color: $theme-dark-body-color;
+ }
+ &.disabled,
+ &:disabled {
+ background-color: $theme-dark-input-disabled-bg;
+ }
+ }
+
+ // ------------------------------------------------
+ // 日期选择器
+ // ------------------------------------------------
+ .b-form-datepicker,
+ .b-form-timepicker {
+ &.form-control {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-input-border-color;
+ }
+ &.is-valid {
+ border-color: $success;
+ }
+ &.is-invalid {
+ border-color: $danger;
+ }
+ }
+
+ // ------------------------------------------------
+ // 时间选择器
+ // ------------------------------------------------
+ .b-time-header {
+ output {
+ border-color: $theme-dark-border-color;
+ bdi {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+
+ // ------------------------------------------------
+ // 标签导航
+ // ------------------------------------------------
+ .b-form-tags {
+ &.form-control {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-input-border-color;
+ color: $theme-dark-body-color;
+ box-shadow: none;
+ .b-form-tags-list {
+ .b-form-tag {
+ .b-form-tag-remove {
+ background-color: transparent !important;
+ box-shadow: none !important;
+ }
+ }
+ }
+ }
+ }
+ .b-form-tags-input {
+ color: $theme-dark-body-color;
+ }
+
+ // ------------------------------------------------
+ // 复选框
+ // ------------------------------------------------
+ .was-validated .custom-control-input:invalid ~ .custom-control-label::before,
+ .custom-control-input.is-invalid ~ .custom-control-label::before {
+ border-color: $danger !important;
+ }
+ .was-validated .custom-control-input:valid ~ .custom-control-label::before,
+ .custom-control-input.is-valid ~ .custom-control-label::before {
+ border-color: $success !important;
+ }
+
+ // ------------------------------------------------
+ // 选择器
+ // ------------------------------------------------
+ .was-validated .custom-select:valid,
+ .custom-select.is-valid {
+ border-color: $success;
+ }
+ .was-validated .custom-select:invalid,
+ .custom-select.is-invalid {
+ border-color: $danger;
+ }
+
+ // ------------------------------------------------
+ // 代码预览
+ // ------------------------------------------------
+ pre {
+ color: $theme-dark-body-color;
+ }
+
+ // ------------------------------------------------
+ // 侧边栏
+ // ------------------------------------------------
+ .b-sidebar {
+ // 侧边栏的浅色过渡手柄
+ &.bg-white {
+ background-color: $theme-dark-card-bg !important;
+ }
+
+ // 应用中标题添加黑色背景
+ .b-sidebar-body {
+ .content-sidebar-header {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+ }
+
+ .horizontal-menu {
+ .horizontal-menu-wrapper {
+ .navbar-horizontal {
+ ul.dropdown-menu {
+ &::-webkit-scrollbar-thumb {
+ background: $theme-dark-body-bg;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: $theme-dark-border-color;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/_index.scss b/src/@core/scss/vue/_index.scss
new file mode 100644
index 0000000..1c54213
--- /dev/null
+++ b/src/@core/scss/vue/_index.scss
@@ -0,0 +1,15 @@
+@import 'animation';
+
+// 基础样式扩展
+@import 'base-extended';
+
+@import 'dark-layout';
+
+@import 'misc';
+
+@import 'rtl';
+
+@import 'transitions';
+
+// Bootstrap Vue 样式
+@import 'bootstrap-vue/index';
diff --git a/src/@core/scss/vue/_misc.scss b/src/@core/scss/vue/_misc.scss
new file mode 100644
index 0000000..f594926
--- /dev/null
+++ b/src/@core/scss/vue/_misc.scss
@@ -0,0 +1,22 @@
+// 扩展应用 BSV 验证样式
+.form-group {
+ &.is-invalid {
+ // Vue Select
+ .v-select {
+ .vs__dropdown-toggle {
+ border-color: $danger;
+ }
+ }
+
+ // Flatpickr
+ .flatpickr-input {
+ border-color: $danger;
+ }
+ }
+}
+
+// 修复工具提示的定位问题(https://github.com/bootstrap-vue/bootstrap-vue/issues/1732)
+// .fix-tooltip-position-top {
+.tooltip {
+ top: 0;
+}
diff --git a/src/@core/scss/vue/_rtl.scss b/src/@core/scss/vue/_rtl.scss
new file mode 100644
index 0000000..68858d4
--- /dev/null
+++ b/src/@core/scss/vue/_rtl.scss
@@ -0,0 +1,159 @@
+@import '~@core/scss/base/bootstrap-extended/include';
+
+// RTL 模式
+[dir='rtl'] {
+ // Perfect scrollbar 禁用 x 轴滚动
+ body .ps__rail-y {
+ right: auto !important;
+ left: 1px !important;
+ }
+
+ // Flatpickr 月份导航箭头
+ .flatpickr-prev-month,
+ .flatpickr-next-month {
+ svg {
+ transform: rotate(180deg);
+ }
+ }
+
+ // 常见问题/定价页面
+ .faq-navigation,
+ .pricing-free-trial {
+ .pricing-trial-img,
+ img {
+ transform: scaleX(-1);
+ }
+ }
+
+ // 宽高比
+ .b-aspect {
+ .b-aspect-sizer {
+ flex-grow: 0 !important;
+ }
+ }
+
+ // 轮播
+ .carousel-control-prev-icon,
+ .carousel-control-next-icon {
+ transform: rotate(180deg);
+ }
+
+ // 3D 立方体效果轮播
+ .swiper-container-cube.swiper-container-rtl {
+ .swiper-slide {
+ transform-origin: 100% 0 !important;
+ }
+ }
+
+ // RTL 模式
+ .swiper-container-rtl {
+ .swiper-button-prev {
+ right: 10px !important;
+ left: auto !important;
+ }
+ .swiper-button-next {
+ left: 10px !important;
+ right: auto !important;
+ }
+ }
+
+ // .swiper-container {
+ // }
+
+ // 下拉菜单块级按钮
+ .dropdown {
+ .btn-block,
+ .btn-block + .dropdown-toggle-split {
+ + .dropdown-menu {
+ left: 0 !important;
+ }
+ }
+ }
+
+ // 分页
+ .pagination .page-item.next-item .page-link,
+ .pagination .page-item .page-link {
+ svg {
+ transform: rotate(180deg);
+ }
+ }
+
+ // 气泡弹窗
+ .popover {
+ right: auto !important;
+ }
+
+ // 进度条
+ .progress-bar-animated {
+ animation: progress-bar-stripes-rtl 40s linear infinite;
+ }
+
+ // 时间
+ .b-time {
+ .b-time-ampm {
+ margin-left: 0.5rem;
+ margin-right: 0;
+ }
+ }
+ .b-form-timepicker {
+ .dropdown-menu {
+ // left: 0 !important;
+ right: 100%;
+ .b-time {
+ .b-time-ampm {
+ margin-right: 0.5rem;
+ margin-left: 0;
+ }
+ }
+ }
+ }
+ .input-group {
+ .input-group-append {
+ .b-form-timepicker {
+ .dropdown-menu {
+ left: 100% !important;
+ right: auto;
+ }
+ }
+ }
+ }
+
+ // 文本域
+ textarea {
+ overflow-x: hidden;
+ }
+
+ // 日历应用
+
+ // 重置'上月/下月'箭头
+ .app-calendar {
+ .fc-header-toolbar {
+ .fc-prev-button,
+ .fc-next-button {
+ transform: rotate(180deg);
+ }
+ }
+ }
+
+ // 日历 UI 修正
+ .fc-direction-rtl .fc-scroller-harness > .fc-scroller {
+ direction: rtl !important;
+ }
+
+ .fc .fc-toolbar .fc-button-group {
+ .fc-dayGridMonth-button:first-child {
+ border-top-left-radius: $border-radius !important;
+ border-bottom-left-radius: $border-radius !important;
+ border-top-right-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+ }
+
+ .fc-listMonth-button:last-child {
+ border-top-right-radius: $border-radius !important;
+ border-bottom-right-radius: $border-radius !important;
+ border-top-left-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ }
+ }
+}
+
diff --git a/src/@core/scss/vue/_transitions.scss b/src/@core/scss/vue/_transitions.scss
new file mode 100644
index 0000000..127787e
--- /dev/null
+++ b/src/@core/scss/vue/_transitions.scss
@@ -0,0 +1,138 @@
+// 缩放淡入淡出
+.zoom-fade-enter-active,
+.zoom-fade-leave-active {
+ transition: transform 0.35s, opacity 0.28s ease-in-out;
+}
+.zoom-fade-enter {
+ transform: scale(0.97);
+ opacity: 0;
+}
+
+.zoom-fade-leave-to {
+ transform: scale(1.03);
+ opacity: 0;
+}
+
+// 淡入淡出规则
+.fade-enter-active,
+.fade-leave-active {
+ transition: opacity 0.28s ease-in-out;
+}
+
+.fade-enter,
+.fade-leave-to {
+ opacity: 0;
+}
+
+// 幻灯片页面
+.slide-fade-enter-active,
+.slide-fade-leave-active {
+ transition: opacity 0.35s, transform 0.4s;
+}
+.slide-fade-enter {
+ opacity: 0;
+ transform: translateX(-30%);
+}
+
+.slide-fade-leave-to {
+ opacity: 0;
+ transform: translateX(30%);
+}
+
+// 缩小
+.zoom-out-enter-active,
+.zoom-out-leave-active {
+ transition: opacity 0.35s ease-in-out, transform 0.45s ease-out;
+}
+.zoom-out-enter,
+.zoom-out-leave-to {
+ opacity: 0;
+ transform: scale(0);
+}
+
+// 底部淡入淡出
+
+// 1倍速
+.fade-bottom-enter-active,
+.fade-bottom-leave-active {
+ transition: opacity 0.3s, transform 0.35s;
+}
+.fade-bottom-enter {
+ opacity: 0;
+ transform: translateY(-8%);
+}
+
+.fade-bottom-leave-to {
+ opacity: 0;
+ transform: translateY(8%);
+}
+
+// 2倍速
+.fade-bottom-2x-enter-active,
+.fade-bottom-2x-leave-active {
+ transition: opacity 0.2s, transform 0.25s;
+}
+.fade-bottom-2x-enter {
+ opacity: 0;
+ transform: translateY(-4%);
+}
+
+.fade-bottom-2x-leave-to {
+ opacity: 0;
+ transform: translateY(4%);
+}
+
+
+// 顶部淡入淡出
+
+// 1倍速
+.fade-top-enter-active,
+.fade-top-leave-active {
+ transition: opacity 0.3s, transform 0.35s;
+}
+.fade-top-enter {
+ opacity: 0;
+ transform: translateY(8%);
+}
+
+.fade-top-leave-to {
+ opacity: 0;
+ transform: translateY(-8%);
+}
+
+// 2倍速
+.fade-top-2x-enter-active,
+.fade-top-2x-leave-active {
+ transition: opacity 0.2s, transform 0.25s;
+}
+.fade-top-2x-enter {
+ opacity: 0;
+ transform: translateY(4%);
+}
+
+.fade-top-2x-leave-to {
+ opacity: 0;
+ transform: translateY(-4%);
+}
+
+// 列表过渡组
+.list-leave-active {
+ position: absolute;
+}
+
+.list-enter,
+.list-leave-to {
+ opacity: 0;
+ transform: translateX(30px);
+}
+
+
+// 列表展开折叠过渡组
+.list-enter-up-leave-active {
+ transition: none !important;
+}
+
+.list-enter-up-enter {
+ opacity: 0;
+ transform: translateY(30px);
+}
diff --git a/src/@core/scss/vue/apps/calendar.scss b/src/@core/scss/vue/apps/calendar.scss
new file mode 100644
index 0000000..6faa38b
--- /dev/null
+++ b/src/@core/scss/vue/apps/calendar.scss
@@ -0,0 +1,18 @@
+@import '~@core/scss/base/bootstrap-extended/include';
+@import '~@core/scss/base/components/include';
+
+@import '~@core/scss/base/pages/app-calendar.scss';
+
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+.fc-sidebarToggle-button {
+ // content: '';
+ background-image: url(str-replace(str-replace($menu, 'currentColor', $body-color), '#', '%23'));
+ width: 25px;
+ height: 25px;
+ margin-right: 0.7rem !important;
+ display: block;
+ background-position: center;
+ background-repeat: no-repeat;
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_alert.scss b/src/@core/scss/vue/bootstrap-vue/_alert.scss
new file mode 100644
index 0000000..7137fa1
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_alert.scss
@@ -0,0 +1,4 @@
+// 提示过渡
+.alert {
+ transition: all 0.25s ease;
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_avatar.scss b/src/@core/scss/vue/bootstrap-vue/_avatar.scss
new file mode 100644
index 0000000..bd907dc
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_avatar.scss
@@ -0,0 +1,66 @@
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+.b-avatar {
+ font-size: 0.857rem;
+ font-weight: 600;
+ color: $white;
+
+ // 头像徽章最小尺寸
+ &.badge-minimal {
+ .b-avatar-badge {
+ min-height: 11px;
+ min-width: 11px;
+ border: 1px solid #fff;
+ }
+ }
+
+ // 带边框头像
+ &.avatar-border-2 {
+ img {
+ border: 2px solid #fff;
+ }
+ }
+}
+
+// 禁用鼠标悬停时头像缩放
+.b-avatar.btn,
+.b-avatar[href] {
+ &:not(:disabled):not(.disabled):hover .b-avatar-img img {
+ transform: scale(1);
+ }
+}
+
+// 添加头像组过渡
+.b-avatar-group {
+ .b-avatar-group-inner {
+ .b-avatar {
+ transition: all 0.25s ease 0s;
+ border-width: 0;
+ box-shadow: 0 0 0 2px $avatar-group-border, inset 0 0 0 1px rgba($black, 0.07);
+ cursor: pointer;
+ &.pull-up:hover {
+ transition: all 0.25s ease 0s;
+ transform: translateY(-4px) scale(1.07);
+ // z-index: 30;
+ }
+ }
+ }
+}
+
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+// 徽章变量颜色
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ .b-avatar {
+ &.badge-light-#{$color_name} {
+ background-color: rgba($color_value, 0.12);
+ color: $color_value;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_badge.scss b/src/@core/scss/vue/bootstrap-vue/_badge.scss
new file mode 100644
index 0000000..c5dbaa6
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_badge.scss
@@ -0,0 +1,16 @@
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ // pill badge
+ a.badge-#{$color_name} {
+ &:focus,
+ &.focus {
+ box-shadow: none;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_button.scss b/src/@core/scss/vue/bootstrap-vue/_button.scss
new file mode 100644
index 0000000..900a493
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_button.scss
@@ -0,0 +1,10 @@
+// 切换按钮激活态盒子阴影
+.btn-group-toggle,
+.btn-group-toggle {
+ :not([class*='btn-outline-']) {
+ &.active,
+ &:active {
+ box-shadow: none;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_calendar.scss b/src/@core/scss/vue/bootstrap-vue/_calendar.scss
new file mode 100644
index 0000000..5bf9ba0
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_calendar.scss
@@ -0,0 +1,30 @@
+.b-calendar {
+ // 日历底部辅助文本颜色
+ .b-calendar-grid-help {
+ color: $body-color !important;
+ }
+ .b-calendar-header {
+ .form-control {
+ line-height: 1.85;
+ }
+ }
+ // 删除日历导航按钮轮廓
+ .b-calendar-inner {
+ .b-calendar-nav {
+ button {
+ border: 0 !important;
+ }
+ }
+ }
+ .btn-outline-light {
+ &:hover {
+ background-color: $gray-200;
+ border-color: $gray-200;
+ }
+ }
+ .table-primary,
+ .table-primary > th,
+ .table-primary > td {
+ background-color: rgba($primary, 0.2);
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_date-picker.scss b/src/@core/scss/vue/bootstrap-vue/_date-picker.scss
new file mode 100644
index 0000000..bcbfa18
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_date-picker.scss
@@ -0,0 +1,24 @@
+.b-form-datepicker,
+.b-form-timepicker {
+ label {
+ line-height: 200%;
+ }
+
+ .btn {
+ &.h-auto {
+ padding: 0.375rem 0.75rem !important;
+ }
+ svg {
+ margin: 0 !important;
+ }
+ }
+ .form-control {
+ min-height: auto !important;
+ }
+ // 小号输入框文字对齐
+ &.form-control-sm {
+ .form-control-sm {
+ line-height: 1.65;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_dropdown.scss b/src/@core/scss/vue/bootstrap-vue/_dropdown.scss
new file mode 100644
index 0000000..138600d
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_dropdown.scss
@@ -0,0 +1,6 @@
+// 下拉菜单圆角
+.dropdown {
+ &.b-dropdown {
+ border-radius: $border-radius;
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_file-input.scss b/src/@core/scss/vue/bootstrap-vue/_file-input.scss
new file mode 100644
index 0000000..2f4e27d
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_file-input.scss
@@ -0,0 +1,27 @@
+.b-form-file {
+ .custom-file-label {
+ height: 100% !important;
+ }
+ // 自定义小号输入框
+ &.b-custom-control-sm {
+ .custom-file-label,
+ .custom-file-label::after {
+ line-height: 22px;
+ }
+
+ .custom-file-label::after {
+ height: 28px;
+ }
+ }
+ // 自定义大号输入框
+ &.b-custom-control-lg {
+ .custom-file-label,
+ .custom-file-label::after {
+ line-height: 23px;
+ }
+
+ .custom-file-label::after {
+ height: 44px;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_index.scss b/src/@core/scss/vue/bootstrap-vue/_index.scss
new file mode 100644
index 0000000..a6087da
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_index.scss
@@ -0,0 +1,29 @@
+@import '~@core/scss/base/bootstrap-extended/include';
+
+@import 'alert';
+@import 'avatar';
+@import 'button';
+@import 'badge';
+@import 'calendar';
+@import 'date-picker';
+@import 'dropdown';
+@import 'file-input';
+@import 'modal';
+@import 'nav';
+@import 'pagination';
+@import 'popover';
+@import 'rating';
+@import 'sidebar';
+@import 'spin-button';
+@import 'switch';
+@import 'table';
+@import 'tag';
+@import 'time';
+@import 'toast';
+@import 'tooltip';
+
+// 验证
+@import 'validation';
+
+// 其他
+@import 'misc';
diff --git a/src/@core/scss/vue/bootstrap-vue/_misc.scss b/src/@core/scss/vue/bootstrap-vue/_misc.scss
new file mode 100644
index 0000000..7c99ac9
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_misc.scss
@@ -0,0 +1,14 @@
+// 单选和复选框
+.input-group-prepend,
+.input-group-append {
+ .input-group-text {
+ .form-check {
+ line-height: 0;
+ }
+ }
+}
+
+// 输入框组修复前置自定义文件标签与输入框高度协调
+.custom-file-label {
+ height: calc(1.65em + 1.4rem + 1px);
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_modal.scss b/src/@core/scss/vue/bootstrap-vue/_modal.scss
new file mode 100644
index 0000000..24acbbb
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_modal.scss
@@ -0,0 +1,9 @@
+// 主题模态
+.modal {
+ // 启用两个页脚按钮之间的间距均分(space between)
+ .modal-footer {
+ > .btn {
+ margin-left: 0.75rem;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_nav.scss b/src/@core/scss/vue/bootstrap-vue/_nav.scss
new file mode 100644
index 0000000..7f5c48b
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_nav.scss
@@ -0,0 +1,8 @@
+// 导航栏下拉菜单背景
+.b-nav-dropdown {
+ .dropdown-toggle {
+ &::after {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236e6b7b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevron-down'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E") !important;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_pagination.scss b/src/@core/scss/vue/bootstrap-vue/_pagination.scss
new file mode 100644
index 0000000..8eb3ed1
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_pagination.scss
@@ -0,0 +1,43 @@
+.page-item {
+ &.prev-item,
+ &.next-item {
+ .page-link {
+ padding: 0.5rem 0;
+
+ &:hover {
+ color: $white;
+ }
+ }
+ }
+}
+
+// 圆点分页
+.pagination {
+ &.b-pagination-pills {
+ .page-item.active {
+ background-color: transparent;
+ }
+ }
+}
+
+.page-item.prev-item {
+ .page-link {
+ &:before {
+ display: none;
+ }
+ svg {
+ transform: translateX(-1px);
+ }
+ }
+}
+
+.page-item.next-item {
+ .page-link {
+ &:after {
+ display: none;
+ }
+ svg {
+ transform: translateX(1px);
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_popover.scss b/src/@core/scss/vue/bootstrap-vue/_popover.scss
new file mode 100644
index 0000000..d1b9a75
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_popover.scss
@@ -0,0 +1,71 @@
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+.popover.b-popover {
+ // 气泡弹窗顶部定位
+ &.bs-popover-top {
+ .arrow {
+ &::before {
+ border-top-color: $border-color;
+ }
+ &::after {
+ border-top-color: $white;
+ }
+ }
+ }
+ // 气泡弹窗左定位
+ &.bs-popover-left {
+ .arrow {
+ &::before {
+ border-left-color: $border-color;
+ }
+ &::after {
+ border-left-color: $white;
+ }
+ }
+ }
+ // 气泡弹窗右定位
+ &.bs-popover-right {
+ .arrow {
+ &::before {
+ border-right-color: $border-color;
+ }
+ &::after {
+ border-right-color: $white;
+ }
+ }
+ }
+}
+
+// 气泡弹窗变量颜色
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ .popover.b-popover {
+ &.b-popover-#{$color_name} {
+ background-color: $white;
+ border-color: $border-color;
+ z-index: 9999;
+ position: relative;
+ .popover-header {
+ background-color: $color_value;
+ border-color: $color_value;
+ color: $white;
+ }
+
+ // 箭头颜色根据变量而变化
+ &.bs-popover-bottom {
+ .arrow {
+ &::before {
+ border-bottom-color: $color_value;
+ }
+ &::after {
+ border-bottom-color: $color_value;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_rating.scss b/src/@core/scss/vue/bootstrap-vue/_rating.scss
new file mode 100644
index 0000000..16b9906
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_rating.scss
@@ -0,0 +1,4 @@
+// 表单控件里的评分焦点上删除盒子阴影
+output.b-rating.form-control:focus {
+ box-shadow: none;
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_sidebar.scss b/src/@core/scss/vue/bootstrap-vue/_sidebar.scss
new file mode 100644
index 0000000..6db6240
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_sidebar.scss
@@ -0,0 +1,27 @@
+.b-sidebar {
+ // 侧边栏宽度
+ &.sidebar-lg {
+ width: 30rem;
+
+ @include media-breakpoint-down(xs) {
+ width: 20rem;
+ }
+ }
+
+ // 固定侧边栏关闭按钮
+ .b-sidebar-header .close {
+ outline: none;
+ }
+
+ // 应用中的侧边栏标题
+ .b-sidebar-body {
+ .content-sidebar-header {
+ background-color: $light;
+ }
+ }
+}
+
+// 更新边栏背景色
+.b-sidebar-backdrop {
+ background-color: rgba($black, 0.75) !important;
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_spin-button.scss b/src/@core/scss/vue/bootstrap-vue/_spin-button.scss
new file mode 100644
index 0000000..f0a4be8
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_spin-button.scss
@@ -0,0 +1,23 @@
+// 重写数值调节器的表单控件样式
+.b-form-spinbutton {
+ &.form-control {
+ padding: 0;
+ &:focus,
+ &.focus {
+ border-color: $primary;
+ box-shadow: none;
+ }
+ &.is-valid,
+ &.is-invalid {
+ padding-right: calc(1.5em + 0.75rem);
+ }
+ .btn-sm {
+ padding: 0.25rem 0.5rem;
+ }
+ }
+ &.form-control-sm {
+ output > bdi {
+ height: 0.9rem;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_switch.scss b/src/@core/scss/vue/bootstrap-vue/_switch.scss
new file mode 100644
index 0000000..087bb5d
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_switch.scss
@@ -0,0 +1,6 @@
+// 堆叠(垂直)开关底边距
+.custom-switch:not(.custom-control-inline) {
+ .custom-control-label {
+ margin-bottom: 0.5rem;
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_table.scss b/src/@core/scss/vue/bootstrap-vue/_table.scss
new file mode 100644
index 0000000..9c3136b
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_table.scss
@@ -0,0 +1,24 @@
+// bs 表格
+.table {
+ &.b-table {
+ &.b-table-selectable {
+ tr {
+ outline: none;
+ }
+ }
+ > tbody {
+ .b-table-row-selected {
+ &.table-active {
+ td {
+ background-color: $table-hover-bg;
+ }
+ }
+ }
+ }
+
+ // 删除焦点轮廓
+ th {
+ outline: none;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_tag.scss b/src/@core/scss/vue/bootstrap-vue/_tag.scss
new file mode 100644
index 0000000..8df19fa
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_tag.scss
@@ -0,0 +1,14 @@
+// 表单标签
+.b-form-tag {
+ margin-right: 0.8rem;
+ .close {
+ opacity: 1;
+ text-shadow: none;
+ vertical-align: middle;
+ display: flex;
+ align-self: center;
+ }
+}
+.b-form-tags-button {
+ width: 80px;
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_time.scss b/src/@core/scss/vue/bootstrap-vue/_time.scss
new file mode 100644
index 0000000..b1ee7c2
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_time.scss
@@ -0,0 +1,35 @@
+// 标题文本居中对齐
+.b-time-header {
+ output > bdi {
+ line-height: 1.85;
+ }
+}
+
+// 更新样式
+.b-time {
+ .bi-circle-fill {
+ height: 10px;
+ width: 10px;
+ fill: $secondary;
+ }
+ .bi-chevron-up {
+ height: 10px;
+ width: 10px;
+ }
+
+ .b-form-spinbutton {
+ + .flex-column:not(.b-time-ampm) {
+ margin-left: 0.4rem;
+ margin-right: 0.4rem;
+ }
+
+ output.border-bottom.border-top {
+ border: none !important;
+ }
+ }
+
+ // 重置悬停时图标的缩放比例
+ .b-form-spinbutton .btn:hover:not(:disabled) > div > .b-icon {
+ transform: scale(1);
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_toast.scss b/src/@core/scss/vue/bootstrap-vue/_toast.scss
new file mode 100644
index 0000000..31e9022
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_toast.scss
@@ -0,0 +1,36 @@
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+
+// 上传根据事件类别的边框颜色
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ .b-toast-#{$color_name} {
+ .toast-header {
+ background-color: $color_value !important;
+ color: $white !important;
+ .close {
+ color: $white;
+ text-shadow: none;
+ }
+ }
+ }
+ }
+ }
+}
+
+.b-toast {
+ &.b-toast-solid {
+ .toast {
+ background-color: $white;
+ color: $body-color;
+ }
+ }
+}
+
+// 关闭按钮垂直对齐
+.toast-header {
+ .close {
+ margin-bottom: 2px !important;
+ }
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_tooltip.scss b/src/@core/scss/vue/bootstrap-vue/_tooltip.scss
new file mode 100644
index 0000000..fd86362
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_tooltip.scss
@@ -0,0 +1,4 @@
+// 工具提示文字颜色
+.tooltip.b-tooltip-warning .tooltip-inner {
+ color: $white;
+}
diff --git a/src/@core/scss/vue/bootstrap-vue/_validation.scss b/src/@core/scss/vue/bootstrap-vue/_validation.scss
new file mode 100644
index 0000000..a6bfd2c
--- /dev/null
+++ b/src/@core/scss/vue/bootstrap-vue/_validation.scss
@@ -0,0 +1,18 @@
+// 验证:有效状态
+.custom-control-input.is-valid {
+ &:not(:disabled):active {
+ ~ .custom-control-label::before {
+ background-color: $success;
+ border-color: $success;
+ }
+ }
+}
+// 无效状态
+.custom-control-input.is-invalid {
+ &:not(:disabled):active {
+ ~ .custom-control-label::before {
+ background-color: $danger;
+ border-color: $danger;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/chart-apex.scss b/src/@core/scss/vue/libs/chart-apex.scss
new file mode 100644
index 0000000..bda17ff
--- /dev/null
+++ b/src/@core/scss/vue/libs/chart-apex.scss
@@ -0,0 +1 @@
+@import '~@core/scss/base/plugins/charts/chart-apex.scss';
diff --git a/src/@core/scss/vue/libs/map-leaflet.scss b/src/@core/scss/vue/libs/map-leaflet.scss
new file mode 100644
index 0000000..d40c001
--- /dev/null
+++ b/src/@core/scss/vue/libs/map-leaflet.scss
@@ -0,0 +1,20 @@
+.vue2leaflet-map {
+ height: 400px;
+ z-index: 1;
+}
+
+html[dir='rtl'] {
+ .leaflet-pane,
+ .leaflet-tile,
+ .leaflet-marker-icon,
+ .leaflet-marker-shadow,
+ .leaflet-tile-container,
+ .leaflet-pane > svg,
+ .leaflet-pane > canvas,
+ .leaflet-zoom-box,
+ .leaflet-image-layer,
+ .leaflet-layer {
+ left: 0;
+ right: unset;
+ }
+}
diff --git a/src/@core/scss/vue/libs/quill.scss b/src/@core/scss/vue/libs/quill.scss
new file mode 100644
index 0000000..dbd1632
--- /dev/null
+++ b/src/@core/scss/vue/libs/quill.scss
@@ -0,0 +1,51 @@
+@import '~@core/scss/base/plugins/forms/form-quill-editor.scss';
+@import '~quill/dist/quill.core.css';
+@import '~quill/dist/quill.snow.css';
+@import '~quill/dist/quill.bubble.css';
+
+// 需要重写一些图标的颜色
+.quill-editor {
+ .ql-toolbar,
+ .ql-editor {
+ a,
+ button:hover,
+ .ql-picker:hover {
+ color: $primary;
+ .ql-fill {
+ fill: $primary;
+ }
+ .ql-stroke {
+ stroke: $primary;
+ }
+ .ql-picker-label:hover {
+ color: $primary;
+ .ql-stroke {
+ stroke: $primary;
+ }
+ }
+ }
+ }
+}
+
+// ? 设置工具栏和容器的圆角
+.quill-editor {
+ // 添加工具栏和容器顶部圆角(根据放置位置移除其中一个)
+ .ql-toolbar,
+ .ql-container {
+ border-top-right-radius: $border-radius;
+ border-top-left-radius: $border-radius;
+ }
+
+ .ql-toolbar {
+ + .ql-container,
+ .ql-container + & {
+ // ? 如果容器/工具栏位于另一方下方时添加底部圆角
+ border-bottom-right-radius: $border-radius;
+ border-bottom-left-radius: $border-radius;
+
+ // ? 如果容器/工具栏位于另一方上方时删除顶部圆角
+ border-top-right-radius: unset;
+ border-top-left-radius: unset;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/swiper.scss b/src/@core/scss/vue/libs/swiper.scss
new file mode 100644
index 0000000..556d2da
--- /dev/null
+++ b/src/@core/scss/vue/libs/swiper.scss
@@ -0,0 +1,8 @@
+@import '~@core/scss/base/plugins/extensions/ext-component-swiper.scss';
+
+// 在 DEMO 中设置活动幻灯片的不透明度
+.swiper-slide {
+ &.swiper-slide-active {
+ opacity: 1;
+ }
+}
diff --git a/src/@core/scss/vue/libs/toastification.scss b/src/@core/scss/vue/libs/toastification.scss
new file mode 100644
index 0000000..eba8da4
--- /dev/null
+++ b/src/@core/scss/vue/libs/toastification.scss
@@ -0,0 +1,51 @@
+// 核心变量和混入
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+
+$vt-toast-min-height: unset;
+$vt-toast-max-height: unset;
+$vt-toast-max-width: 400px;
+
+$vt-color-default: $white;
+$vt-color-info: $white;
+$vt-color-success: $white;
+$vt-color-warning: $white;
+$vt-color-error: $white;
+
+$vt-text-color-default: $primary;
+$vt-text-color-info: $info;
+$vt-text-color-success: $success;
+$vt-text-color-warning: $warning;
+$vt-text-color-error: $danger;
+$vt-font-family: inherit;
+
+// 导入常规的 Vue Toastification 通知样式(或创建自己的样式)
+@import 'vue-toastification/src/scss/_variables';
+@import 'vue-toastification/src/scss/_toastContainer';
+@import 'vue-toastification/src/scss/_toast';
+@import 'vue-toastification/src/scss/_closeButton';
+@import 'vue-toastification/src/scss/_progressBar';
+@import 'vue-toastification/src/scss/_icon';
+@import 'vue-toastification/src/scss/animations/fade';
+
+.#{$vt-namespace}__toast {
+ padding: 1rem;
+ box-shadow: $box-shadow;
+ border-radius: $card-border-radius;
+}
+
+@media only screen and (max-width: 600px) {
+ .Vue-Toastification__container {
+ .Vue-Toastification__toast {
+ width: 90%;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .#{$vt-namespace}__toast {
+ background-color: $theme-dark-card-bg;
+ }
+}
diff --git a/src/@core/scss/vue/libs/tour.scss b/src/@core/scss/vue/libs/tour.scss
new file mode 100644
index 0000000..c862b3a
--- /dev/null
+++ b/src/@core/scss/vue/libs/tour.scss
@@ -0,0 +1,63 @@
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+@import '~vue-tour/dist/vue-tour.css';
+
+.v-tour {
+ .v-step {
+ z-index: 55000;
+ background-color: $white;
+ border-radius: $card-border-radius;
+ filter: drop-shadow(0 0 7px rgba(0, 0, 0, 0.2));
+ min-width: 350px;
+ text-align: left;
+
+ .v-step__arrow {
+ border-color: $primary;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ }
+
+ // 标题
+ .v-step__header {
+ background-color: $primary;
+ border-top-left-radius: $card-border-radius;
+ border-top-right-radius: $card-border-radius;
+ font-weight: 500;
+
+ padding: 0.38rem 1.2rem;
+ margin-bottom: 0;
+ line-height: 2rem;
+ }
+
+ // 内容/主体
+ .v-step__content {
+ color: $body-color;
+ border-bottom-left-radius: $card-border-radius;
+ border-bottom-right-radius: $card-border-radius;
+
+ padding: 1rem 0;
+ margin-bottom: 0;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ .v-step {
+ background-color: $theme-dark-card-bg;
+ }
+}
+
+// RTL 模式
+html[dir='rtl'] {
+ .v-tour {
+ .v-step {
+ .btn {
+ svg {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/tree.scss b/src/@core/scss/vue/libs/tree.scss
new file mode 100644
index 0000000..f0301d3
--- /dev/null
+++ b/src/@core/scss/vue/libs/tree.scss
@@ -0,0 +1,144 @@
+@import '~vue-tree-halower/dist/halower-tree.min.css';
+
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+
+.tree-container {
+ .tag-box-container {
+ .tag {
+ background-color: transparent;
+ .rmNode {
+ color: $danger;
+ background-color: rgba($danger, 0.15);
+ line-height: 1.1;
+ }
+ }
+ }
+
+ .tree-box {
+ position: relative;
+ z-index: 5;
+ background-color: white;
+ padding: 10px;
+ box-shadow: $box-shadow;
+
+ input {
+ margin-bottom: 1rem;
+ height: 2.5rem;
+ }
+ }
+}
+
+.halo-tree {
+ &,
+ .first-node {
+ padding-left: 0;
+ }
+
+ // 在垂直线下方对齐 '-' 图标
+ li::before {
+ left: -11px;
+ }
+
+ .tree-node-el {
+ display: contents;
+ }
+
+ .tree-expand {
+ background: content-box;
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ line-height: 1;
+ }
+
+ .halo-tree {
+ li {
+ padding-left: 26px;
+ }
+ }
+
+ ul {
+ padding-left: 17px !important;
+ }
+
+ > li.first-node.only-node::after {
+ z-index: -10;
+ }
+
+ .box-halfchecked:after {
+ top: -1px;
+ }
+
+ .inputCheck {
+ top: 2px;
+
+ &.box-checked:after {
+ top: -1px;
+ }
+ }
+
+ .node-selected {
+ background-color: #f8f8f8;
+ }
+ .node-title {
+ &:hover {
+ background-color: #f8f8f8;
+ }
+ padding: 3px 6px;
+ margin: 0 4px;
+ }
+
+ // 按钮颜色
+ button.btn-async,
+ button.btn-delete {
+ padding: 0.2rem 0.5rem;
+ border-radius: 4px;
+ font-size: 12px;
+ }
+ button.btn-async {
+ background: rgba($warning, 0.15);
+ }
+
+ button.btn-delete {
+ background: rgba($danger, 0.15);
+ }
+}
+
+.dark-layout {
+ .tree-container,
+ .tree-container .tree-box,
+ .tag-box .tag {
+ border-color: $theme-dark-border-color;
+ }
+
+ .tree-container {
+ .tree-box {
+ background-color: $theme-dark-body-bg;
+
+ input {
+ background-color: $theme-dark-input-bg;
+ border-color: $theme-dark-input-disabled-border-color;
+ }
+ }
+ .tag-box {
+ .tag {
+ background-color: $theme-dark-body-bg !important;
+ }
+ }
+ }
+
+ .halo-tree {
+ .node-title:hover {
+ background-color: transparent;
+ }
+ .node-title {
+ &.node-selected {
+ background-color: $theme-dark-body-bg;
+ border-color: $theme-dark-border-color;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-autosuggest.scss b/src/@core/scss/vue/libs/vue-autosuggest.scss
new file mode 100644
index 0000000..2afc648
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-autosuggest.scss
@@ -0,0 +1,61 @@
+// 核心变量和混入
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+
+// 自定义下拉菜单
+.autosuggest__results-container {
+ position: relative;
+ z-index: 999;
+ .autosuggest__results {
+ position: absolute;
+ background-color: $white;
+ width: 100%;
+ margin-top: 1rem;
+ overflow-y: auto;
+ border-radius: 0.5rem;
+ max-height: 40vh;
+ box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08) !important;
+ ul {
+ padding-left: 0;
+ margin-bottom: 0;
+ li {
+ list-style: none;
+ padding: 0.75rem 1rem;
+ &:hover,
+ &.autosuggest__results-item--highlighted {
+ background: $gray-200;
+ }
+ .detail {
+ line-height: 0.5;
+ }
+ }
+ .autosuggest__results-before {
+ color: $primary;
+ font-weight: 600;
+ }
+ }
+ }
+}
+
+// 深色布局
+body {
+ &.dark-layout {
+ .autosuggest__results-container {
+ .autosuggest__results {
+ background-color: $theme-dark-input-bg;
+ color: $theme-dark-body-color;
+
+ // 鼠标悬停时
+ .autosuggest__results-item--highlighted,
+ .autosuggest__results-item:hover,
+ .autosuggest__results-before:hover {
+ background-color: $theme-dark-table-hover-bg;
+ }
+ .my-suggestion-item {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-context.scss b/src/@core/scss/vue/libs/vue-context.scss
new file mode 100644
index 0000000..6f052e8
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-context.scss
@@ -0,0 +1,39 @@
+@import '~vue-context/src/sass/vue-context';
+
+// 核心变量和混入
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+
+.v-context {
+ &,
+ & ul {
+ box-shadow: $dropdown-box-shadow;
+ border: none;
+ border-radius: $dropdown-border-radius;
+ padding: 0.5rem 0;
+
+ > li {
+ > a {
+ color: $dropdown-link-color;
+ padding: $dropdown-item-padding-y $dropdown-item-padding-x;
+
+ &:hover,
+ &:focus {
+ color: $dropdown-link-hover-color;
+ background-color: $dropdown-link-hover-bg;
+ }
+ }
+ }
+ }
+}
+
+// 深色布局
+body.dark-layout {
+ .v-context {
+ background-color: $theme-dark-body-bg;
+ > li > a {
+ color: $theme-dark-body-color;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-flatpicker.scss b/src/@core/scss/vue/libs/vue-flatpicker.scss
new file mode 100644
index 0000000..c22d591
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-flatpicker.scss
@@ -0,0 +1,14 @@
+@import '~flatpickr/dist/flatpickr.css';
+@import '~@core/scss/base/plugins/forms/pickers/form-flat-pickr.scss';
+
+// RTL 模式
+html[dir='rtl'] {
+ .flatpickr-calendar {
+ .flatpickr-prev-month,
+ .flatpickr-next-month {
+ svg {
+ transform: rotate(180deg);
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-good-table.scss b/src/@core/scss/vue/libs/vue-good-table.scss
new file mode 100644
index 0000000..000862f
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-good-table.scss
@@ -0,0 +1,170 @@
+// 核心变量和混入
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+// good table variable override to change the color of table
+$text-color: $body-color;
+$thead-bg-color-1: transparent;
+$thead-bg-color-2: transparent;
+
+// 排序图标
+.vgt-wrap {
+ .vgt-table {
+ th.sortable {
+ &:before {
+ border-top-color: $border-color;
+ }
+ &:after {
+ border-bottom-color: $border-color;
+ }
+ }
+ thead {
+ th {
+ &.sorting-desc {
+ &::before {
+ border-top-color: $primary;
+ }
+ }
+ &.sorting-asc {
+ &::after {
+ border-bottom-color: $primary;
+ }
+ }
+ }
+ }
+ }
+}
+
+// RTL 模式分页
+.vgt-wrap.rtl {
+ .vgt-table {
+ th.sortable {
+ &::after,
+ &::before {
+ left: 2rem;
+ }
+ }
+ }
+ .pagination {
+ .page-item:last-child:not(.next-item) {
+ .page-link {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-left-radius: 1.428rem;
+ border-bottom-left-radius: 1.428rem;
+ }
+ }
+ .page-item:first-child:not(.prev-item) {
+ .page-link {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: 1.428rem;
+ border-bottom-right-radius: 1.428rem;
+ }
+ }
+ }
+}
+
+// 深色布局
+body {
+ &.dark-layout {
+ .vgt-wrap {
+ .vgt-table {
+ background-color: $theme-dark-card-bg;
+ border-color: $theme-dark-border-color;
+ th,
+ td,
+ tr {
+ border-color: $theme-dark-border-color;
+ background-color: $theme-dark-card-bg;
+ span {
+ color: $theme-dark-body-color;
+ }
+ input {
+ background-color: $theme-dark-input-bg;
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-input-border-color;
+ &::placeholder {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ th.sortable {
+ &::after {
+ border-bottom-color: $theme-dark-body-color;
+ }
+ &::before {
+ border-top-color: $theme-dark-body-color;
+ }
+ }
+ thead th.sorting-desc::before {
+ border-top-color: $primary;
+ }
+ thead th.sorting-asc::after {
+ border-bottom-color: $primary;
+ }
+ }
+ }
+ }
+}
+
+// RTL 模式
+html[dir='rtl'] {
+ .b-pagination {
+ .page-item {
+ &.prev-item {
+ margin-right: 0.3571rem;
+ margin-left: 0;
+ .page-link {
+ svg {
+ transform: rotate(360deg);
+ }
+ }
+ ~ .page-item:nth-child(2):not(.active) {
+ .page-link {
+ border-top-right-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+ border-top-left-radius: 5rem;
+ border-bottom-left-radius: 5rem;
+ }
+ }
+ ~ .page-item:nth-last-child(2):not(.active) {
+ .page-link {
+ border-top-left-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ border-top-right-radius: 5rem;
+ border-bottom-right-radius: 5rem;
+ }
+ }
+ ~ .page-item:nth-child(2) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-left-radius: 5rem;
+ border-bottom-left-radius: 5rem;
+ }
+ ~ .page-item:nth-last-child(2) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: 5rem;
+ border-bottom-right-radius: 5rem;
+ }
+ }
+ &.next-item {
+ margin-right: 0;
+ margin-left: 0.3571rem;
+ .page-link {
+ svg {
+ transform: rotate(360deg);
+ }
+ }
+ }
+ &.active {
+ .page-link {
+ border-top-right-radius: 5rem !important;
+ border-bottom-right-radius: 5rem !important;
+ }
+ }
+ }
+ }
+}
+@import '~vue-good-table/src/styles/style.scss';
diff --git a/src/@core/scss/vue/libs/vue-select.scss b/src/@core/scss/vue/libs/vue-select.scss
new file mode 100644
index 0000000..ac135b1
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-select.scss
@@ -0,0 +1,334 @@
+$options-padding-x: 20px;
+$options-padding-y: 7px;
+
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+@import 'vue-select/src/scss/global/_variables.scss';
+
+// 全局组件变量
+$vs-component-line-height: 1.8;
+$vs-component-placeholder-color: $body-color;
+
+// 激活态
+$vs-state-active-bg: rgba($primary, 0.12);
+$vs-state-active-color: $primary !important;
+
+// 边框
+$vs-border-width: $input-border-width;
+$vs-border-radius: $input-border-radius;
+$vs-border-color: $input-border-color;
+
+// 选择器
+$vs-selected-bg: $primary;
+$vs-selected-border-width: 0;
+
+// 下拉菜单
+$vs-dropdown-box-shadow: 0px 4px 25px 0px rgba(0, 0, 0, 0.1);
+
+@import 'vue-select/src/scss/vue-select.scss';
+
+.vs__open-indicator {
+ fill: none;
+ margin-top: 0.15rem;
+}
+
+// 使输入框的高度和切换图标协调
+.vs__dropdown-toggle {
+ padding: 0.59px 0 4px 0;
+ transition: all 0.25s ease-in-out;
+
+ .vs--single & {
+ padding-left: 6px;
+ }
+}
+
+.vs__dropdown-option--disabled {
+ &.vs__dropdown-option--selected {
+ background: $primary !important;
+ }
+ opacity: 0.5;
+}
+
+// 列表选项颜色
+.vs__dropdown-option {
+ color: $body-color;
+}
+.vs__dropdown-option,
+.vs__no-options {
+ // 只更新 Y 轴填充
+ padding: $options-padding-y $options-padding-x;
+}
+
+// RTL 模式
+.vs__dropdown-option--selected {
+ background-color: $primary;
+ color: $white;
+ position: relative;
+
+ &::after {
+ content: '';
+ height: 1.1rem;
+ width: 1.1rem;
+ display: inline-block;
+ position: absolute;
+
+ // 垂直居中图标
+ top: 50%;
+ transform: translateY(-50%);
+ right: $options-padding-x;
+
+ [dir='rtl'] & {
+ left: $options-padding-x;
+ right: unset;
+ }
+
+ // 图标样式
+ background-image: url(str-replace(str-replace($check, 'currentColor', $white), '#', '%23'));
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 1.1rem;
+ }
+
+ // 基本样式中只在高亮显示获取主色,如果项目被选择时悬停/高亮显示都显示白色
+ &.vs__dropdown-option--highlight {
+ color: $white !important;
+ background-color: $primary !important;
+ }
+}
+
+// 更新清除图标的颜色
+.vs__clear {
+ svg {
+ color: $body-color;
+ }
+}
+
+// 标记的文本选择时的颜色
+.vs__selected {
+ color: $white;
+
+ // 单选选定文本
+ .v-select.vs--single & {
+ color: $body-color;
+ margin-top: 5px;
+
+ // 当焦点在选定选项移动时添加过渡
+ transition: transform 0.2s ease;
+
+ input {
+ padding-left: 0;
+ }
+ }
+
+ // 幻灯片选择项焦点向右滑入(移动占位符)
+ .vs--single.vs--open & {
+ transform: translateX(5px);
+ }
+
+ // 标记关闭图标
+ .vs__deselect {
+ color: inherit;
+ }
+}
+
+// 标记/多选
+.v-select {
+ &:not(.vs--single) {
+ .vs__selected {
+ border-radius: 3px;
+
+ padding: 0 0.6em;
+ font-size: 0.9rem;
+ margin: 5px 2px 2px 5px;
+ }
+
+ .vs__deselect {
+ svg {
+ transform: scale(0.8);
+ vertical-align: text-top;
+ }
+ }
+ }
+}
+
+// 下拉菜单定位
+.vs__dropdown-menu {
+ top: calc(100% + 1rem);
+ border: none;
+ border-radius: 6px;
+ padding: 0;
+}
+
+// 打开下拉列表时的输入样式
+.vs--open .vs__dropdown-toggle {
+ border-color: $input-focus-border-color;
+ border-bottom-color: $input-focus-border-color;
+ border-bottom-left-radius: $vs-border-radius;
+ border-bottom-right-radius: $vs-border-radius;
+ box-shadow: $input-focus-box-shadow;
+}
+
+// 标记样式
+// .v-select:not(.vs--single) {
+// .vs__selected-options {
+// .vs__selected {
+// background-color: $primary;
+// border: none;
+// color: #fff;
+// button {
+// svg {
+// fill: white;
+// }
+// }
+// }
+// }
+// }
+
+// 大号选择器
+.select-size-lg {
+ .vs__selected {
+ font-size: 1rem !important;
+ }
+
+ &.vs--single.vs--open .vs__selected {
+ margin-top: 6px;
+ }
+
+ .vs__dropdown-toggle,
+ .vs__selected {
+ font-size: 1.25rem;
+ }
+
+ .vs__dropdown-toggle {
+ padding: 5px;
+
+ input {
+ margin-top: 0;
+ }
+ }
+
+ .vs__deselect {
+ svg {
+ transform: scale(1) !important;
+ vertical-align: middle !important;
+ }
+ }
+}
+
+// 小号选择器
+.select-size-sm {
+ // 删除默认尺寸的切换填充
+ .vs__dropdown-toggle {
+ padding-bottom: 0;
+
+ padding: 1px;
+ }
+ &.vs--single .vs__dropdown-toggle {
+ padding: 2px;
+ }
+
+ // 设置小号的行高和字体大小
+ .vs__dropdown-toggle,
+ .vs__selected {
+ // line-height: 1.8;
+ font-size: 0.9rem;
+ }
+
+ // 设置关闭/下拉图标定位
+ .vs__actions {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ }
+
+ .vs__deselect {
+ svg {
+ vertical-align: middle !important;
+ }
+ }
+
+ // 删除搜索框顶边距
+ .vs__search {
+ margin-top: 0;
+ }
+
+ // 选择项尺寸
+ &.v-select .vs__selected {
+ padding: 0 0.3rem;
+ font-size: 0.75rem;
+ }
+
+ // 仅设置多选/标记的边距
+ &.v-select:not(.vs--single) .vs__selected {
+ margin: 4px 5px;
+ }
+
+ // 单选中选择项边距
+ &.v-select.vs--single .vs__selected {
+ margin-top: 1px;
+ }
+
+ // 设置当选择时的顶边距
+ &.vs--single.vs--open {
+ .vs__selected {
+ margin-top: 4px;
+ }
+ }
+}
+
+// 深色布局
+.dark-layout {
+ //vue select
+ .vs__dropdown-toggle {
+ background: $theme-dark-input-bg;
+ color: $theme-dark-body-color;
+ border-color: $theme-dark-input-border-color;
+ }
+ .vs__selected-options {
+ input {
+ color: $theme-dark-body-color;
+ &::placeholder {
+ color: $theme-dark-input-placeholder-color;
+ }
+ }
+ }
+ .vs__actions {
+ svg {
+ fill: $theme-dark-input-border-color;
+ }
+ }
+ .vs__dropdown-menu {
+ background: $theme-dark-input-bg;
+ li {
+ color: $theme-dark-body-color;
+ }
+ }
+
+ .v-select {
+ &:not(.vs--single) {
+ .vs__selected {
+ background-color: rgba($primary, 0.12);
+ color: $primary;
+ }
+ }
+
+ // 单选
+ &.vs--single {
+ .vs__selected {
+ color: $theme-dark-body-color !important;
+ }
+ }
+ }
+
+ // 禁用样式
+ .vs--disabled {
+ .vs__dropdown-toggle,
+ .vs__clear,
+ .vs__search,
+ .vs__selected,
+ .vs__open-indicator {
+ background-color: $theme-dark-input-bg;
+ opacity: 0.5;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-slider.scss b/src/@core/scss/vue/libs/vue-slider.scss
new file mode 100644
index 0000000..e78c6a9
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-slider.scss
@@ -0,0 +1,61 @@
+@import '~@core/scss/base/bootstrap-extended/include';
+
+// 调色板
+@import '~@core/scss/base/core/colors/palette-variables.scss';
+@import '~@core/scss/base/components/include';
+
+// 设置组件的主题颜色
+$themeColor: $primary;
+$bgColor: rgba($primary, 0.12);
+$dotShadow: none;
+
+// 导入主题默认样式
+@import '~vue-slider-component/lib/theme/default.scss';
+
+.vue-slider-dot-handle {
+ border: 2px solid $primary;
+}
+
+.vue-slider-dot-tooltip-inner {
+ background-color: $primary;
+ border-color: $primary;
+}
+
+// 根据事件类别的边框颜色
+@each $color_name, $color in $colors {
+ @each $color_type, $color_value in $color {
+ @if $color_type== 'base' {
+ .vue-slider-#{$color_name} {
+ .vue-slider-dot-handle {
+ border: 2px solid $color_value;
+
+ &-focus {
+ box-shadow: 0px 0px 1px 2px rgba($color_value, 0.36);
+ }
+ }
+
+ .vue-slider-process {
+ background-color: $color_value;
+ }
+
+ .vue-slider-rail {
+ background-color: rgba($color_value, 0.12);
+ }
+
+ .vue-slider-dot-tooltip-inner {
+ background-color: $color_value;
+ border-color: $color_value;
+ }
+ }
+ }
+ }
+}
+
+// 深色布局
+body {
+ &.dark-layout {
+ .vue-slider-dot-handle {
+ background-color: $theme-dark-body-bg;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-sweetalert.scss b/src/@core/scss/vue/libs/vue-sweetalert.scss
new file mode 100644
index 0000000..8253530
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-sweetalert.scss
@@ -0,0 +1,12 @@
+@import '~@core/scss/base/plugins/extensions/ext-component-sweet-alerts.scss';
+@import '~sweetalert2/dist/sweetalert2.min.css';
+
+// RTL 模式
+html[dir='rtl'] {
+ .swal2-rtl {
+ .swal2-close {
+ left: 0;
+ right: auto;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/libs/vue-wizard.scss b/src/@core/scss/vue/libs/vue-wizard.scss
new file mode 100644
index 0000000..ff3f2a6
--- /dev/null
+++ b/src/@core/scss/vue/libs/vue-wizard.scss
@@ -0,0 +1,419 @@
+// 核心变量和混入
+@import '~@core/scss/base/bootstrap-extended/include';
+// 重写用户变量
+@import '~@core/scss/base/components/include';
+@import 'vue-select/src/scss/vue-select.scss';
+
+// 简单的数字向导
+.vue-form-wizard {
+ background-color: $white;
+ box-shadow: 0px 4px 25px 0px rgba($black, 0.1);
+ border-radius: 0.5rem;
+ padding-bottom: 0;
+ .wizard-header {
+ padding: 0;
+ margin: 0;
+ }
+ .title {
+ color: $gray-400;
+ }
+ .wizard-navigation {
+ .wizard-progress-with-circle {
+ display: none;
+ }
+ .wizard-nav {
+ padding: 1.42rem 1.42rem 2.14rem 1.42rem;
+ border-bottom: 1px solid rgba($color: $black, $alpha: 0.08);
+ padding-bottom: 0;
+ li {
+ flex-grow: 0;
+ flex: inherit;
+ margin-right: 3rem;
+ padding-bottom: 2rem;
+ &.active {
+ a {
+ color: $primary;
+ .wizard-icon-circle {
+ .wizard-icon-container {
+ .wizard-icon {
+ color: $white;
+ font-size: 1rem;
+ }
+ }
+ }
+ .checked {
+ box-shadow: 0 3px 6px 0 rgba(105, 108, 255, 0.4);
+ }
+ }
+ }
+ .wizard-icon-circle {
+ width: 2.71rem;
+ height: 2.71rem;
+ margin-right: 1rem;
+ border: none;
+ background-color: $gray-200;
+ border-radius: 6px;
+
+ .wizard-icon-container {
+ border-radius: 6px;
+ }
+ .wizard-icon {
+ font-style: inherit;
+ font-size: 1rem;
+ color: $gray-600;
+ &.feather {
+ font-size: 1.3rem;
+ }
+ }
+ &.checked {
+ background-color: rgba($primary, $alpha: 0.08);
+ .wizard-icon {
+ color: $primary;
+ }
+ }
+ }
+ a {
+ flex-direction: row;
+ .stepTitle {
+ font-size: 1rem;
+ color: $gray-600;
+ font-weight: 600;
+ }
+ .wizard-icon {
+ transition: none !important;
+ }
+ }
+ &:not(:first-child) {
+ a {
+ &::before {
+ content: '\e844';
+ font-family: feather !important;
+ speak: none;
+ font-style: normal;
+ font-weight: 400;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ font-size: 1.14rem;
+ left: -30px;
+ position: absolute;
+ }
+ }
+ }
+ }
+ }
+ }
+ .wizard-card-footer {
+ padding-bottom: 1rem;
+ .wizard-footer-left,
+ .wizard-footer-right {
+ .wizard-btn {
+ padding: 0.786rem 1.5rem;
+ min-width: unset;
+ border-radius: 0.4285rem;
+ }
+ }
+ .wizard-footer-left {
+ .wizard-btn {
+ border: 1px solid $secondary !important;
+ background-color: transparent !important;
+ color: $secondary !important;
+ font-weight: 400;
+ &:hover {
+ background-color: rgba($secondary, 0.04) !important;
+ }
+ &::before {
+ content: '\e843';
+ font-family: feather !important;
+ speak: none;
+ font-style: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ font-size: 1rem;
+ left: -6px;
+ position: relative;
+ }
+ }
+ }
+ .wizard-footer-right {
+ .wizard-btn {
+ font-weight: 400;
+ &:hover {
+ box-shadow: 0 8px 25px -8px $primary;
+ }
+ &::after {
+ content: '\e844';
+ font-family: feather !important;
+ speak: none;
+ font-style: normal;
+ font-weight: 400;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ font-size: 1rem;
+ right: -6px;
+ position: relative;
+ }
+ }
+ }
+ }
+}
+
+// 背景透明的步骤
+.steps-transparent {
+ &.vue-form-wizard {
+ background-color: transparent;
+ box-shadow: none;
+ padding-bottom: 0;
+ .wizard-header {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+ .wizard-navigation .wizard-nav {
+ border: none;
+ min-width: 223px;
+ }
+ }
+ .wizard-tab-content {
+ box-shadow: 0px 4px 25px 0px rgba($black, 0.1);
+ background-color: $white;
+ }
+ .wizard-card-footer {
+ background-color: $white;
+ box-shadow: 0px 4px 25px 0px rgba($black, 0.1);
+ }
+ .wizard-tab-content {
+ border-top-left-radius: 0.5rem;
+ border-top-right-radius: 0.5rem;
+ }
+ .wizard-card-footer {
+ box-shadow: -1px 16px 25px 0px rgba($black, 0.1);
+ // padding-bottom: 2.5rem;
+ border-bottom-left-radius: 0.5rem;
+ border-bottom-right-radius: 0.5rem;
+ }
+}
+
+// 垂直步骤
+.vertical.wizard-vertical {
+ &.vue-form-wizard {
+ .wizard-navigation {
+ .wizard-nav {
+ border-right: 1px solid rgba($color: $black, $alpha: 0.08);
+ border-bottom: none;
+ min-width: 230px;
+ padding-right: 2.5rem;
+ li {
+ margin-right: 0;
+ a {
+ flex-wrap: nowrap;
+ &::before {
+ content: none;
+ }
+ }
+ .stepTitle {
+ max-width: 200px;
+ font-size: 1rem;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ }
+ }
+ }
+ .wizard-tab-content {
+ width: 100%;
+ }
+ .wizard-card-footer {
+ margin-left: 229px;
+ border-left: 1px solid rgba($color: $black, $alpha: 0.08);
+ padding-top: 0;
+ }
+ }
+}
+
+// 垂直透明步骤
+.vertical-steps {
+ &.vue-form-wizard {
+ .wizard-tab-content {
+ width: 100%;
+ }
+ .wizard-card-footer {
+ margin-left: 223px;
+ position: relative;
+ z-index: 9;
+ padding-top: 0;
+ }
+ .wizard-navigation {
+ .wizard-nav {
+ padding-right: 2.5rem;
+ padding-top: 30px;
+ li {
+ margin-right: 0;
+ a {
+ flex-wrap: nowrap;
+ &::before {
+ content: none;
+ }
+ }
+ .stepTitle {
+ max-width: 200px;
+ font-size: 1rem;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ }
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(sm) {
+ .vue-form-wizard {
+ .wizard-navigation {
+ flex-direction: column !important;
+ .wizard-nav.wizard-nav-pills {
+ li:not(:first-child) {
+ a {
+ &::before {
+ content: none;
+ }
+ }
+ }
+ li:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ .wizard-card-footer {
+ margin-left: 0 !important;
+ }
+ &.wizard-vertical.vertical {
+ .wizard-nav.wizard-nav-pills {
+ border-right: none;
+ width: 100%;
+ border-bottom: 1px solid rgba($black, $alpha: 0.08);
+ margin-bottom: 1.9rem;
+ }
+ .wizard-tab-content {
+ margin-left: 0;
+ }
+ }
+ }
+}
+
+@include media-breakpoint-down(md) {
+ .vue-form-wizard {
+ .wizard-nav.wizard-nav-pills {
+ li:not(:first-child) {
+ a {
+ &::before {
+ content: none;
+ }
+ }
+ }
+ }
+ }
+}
+
+// 深色布局
+body {
+ &.dark-layout {
+ // 默认的非透明背景边框
+ .vue-form-wizard:not(.steps-transparent) {
+ background-color: $theme-dark-card-bg;
+ box-shadow: 0px 4px 25px 0px rgba($theme-dark-body-color, 0.1);
+ &.vertical {
+ .wizard-card-footer {
+ border-color: $theme-dark-border-color !important;
+ }
+ }
+ }
+ .vue-form-wizard {
+ // 透明背景的边框
+ &.steps-transparent {
+ .wizard-tab-content,
+ .wizard-card-footer {
+ background-color: $theme-dark-card-bg;
+ box-shadow: 1px 12px 25px 0px rgba($theme-dark-body-color, 0.1);
+ }
+ }
+
+ // 默认向导中的导航栏边框
+ .wizard-navigation {
+ .wizard-nav {
+ border-color: $theme-dark-border-color !important;
+ li {
+ .wizard-icon-circle {
+ background-color: rgba($gray-100, 0.12);
+ &.checked {
+ background-color: rgba($primary, $alpha: 0.08);
+ .wizard-icon {
+ color: $primary;
+ }
+ }
+ }
+ &.active {
+ a {
+ .wizard-icon-circle {
+ .wizard-icon {
+ color: $theme-dark-body-color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 步骤中的箭头图标
+ .wizard-nav {
+ &:not(:first-child) {
+ a {
+ &::before {
+ color: $theme-dark-body-color;
+ }
+ }
+ li.active {
+ a {
+ &::before {
+ color: $primary;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// RTL 模式
+html[dir='rtl'] {
+ .wizard-navigation {
+ .wizard-nav {
+ li {
+ a {
+ &::before {
+ transform: rotate(180deg);
+ }
+ }
+ }
+ }
+ }
+ .vue-form-wizard {
+ .wizard-card-footer {
+ .wizard-footer-left {
+ .wizard-btn::before {
+ right: 0;
+ }
+ }
+ .wizard-footer-right {
+ .wizard-btn::after {
+ left: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/pages/card-analytic.scss b/src/@core/scss/vue/pages/card-analytic.scss
new file mode 100644
index 0000000..b58647c
--- /dev/null
+++ b/src/@core/scss/vue/pages/card-analytic.scss
@@ -0,0 +1 @@
+@import '~@core/scss/base/pages/card-analytics.scss';
diff --git a/src/@core/scss/vue/pages/dashboard-ecommerce.scss b/src/@core/scss/vue/pages/dashboard-ecommerce.scss
new file mode 100644
index 0000000..0a3c3ac
--- /dev/null
+++ b/src/@core/scss/vue/pages/dashboard-ecommerce.scss
@@ -0,0 +1,10 @@
+@import '~@core/scss/base/pages/dashboard-ecommerce.scss';
+
+.card-company-table {
+ td {
+ .b-avatar.badge-light-company {
+ background-color: $body-bg;
+ margin-right: 2rem;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/pages/page-auth.scss b/src/@core/scss/vue/pages/page-auth.scss
new file mode 100644
index 0000000..aeeec6b
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-auth.scss
@@ -0,0 +1,17 @@
+@import '~@core/scss/base/pages/page-auth.scss';
+
+.brand-logo {
+ svg {
+ height: 36px;
+ width: 36px;
+ }
+ h2 {
+ margin-top: 0.25rem;
+ margin-left: 0.8rem;
+ }
+}
+html[dir='rtl'] {
+ svg.feather {
+ transform: rotate(180deg);
+ }
+}
diff --git a/src/@core/scss/vue/pages/page-blog.scss b/src/@core/scss/vue/pages/page-blog.scss
new file mode 100644
index 0000000..cb35d48
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-blog.scss
@@ -0,0 +1 @@
+@import '~@core/scss/base/pages/page-blog.scss';
diff --git a/src/@core/scss/vue/pages/page-faq.scss b/src/@core/scss/vue/pages/page-faq.scss
new file mode 100644
index 0000000..b7ded90
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-faq.scss
@@ -0,0 +1,9 @@
+@import '~@core/scss/base/pages/page-faq.scss';
+
+.faq-navigation {
+ .nav {
+ &.nav-pills {
+ height: 100%;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/pages/page-knowledge-base.scss b/src/@core/scss/vue/pages/page-knowledge-base.scss
new file mode 100644
index 0000000..bdfcb1f
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-knowledge-base.scss
@@ -0,0 +1,22 @@
+@import '~@core/scss/base/pages/page-knowledge-base.scss';
+
+// 列表组中的圆圈焦点/激活态
+.list-group-circle {
+ .list-group-item-action {
+ &:focus,
+ &:active {
+ background-color: transparent;
+ }
+ }
+}
+
+.question-content {
+ ul {
+ li {
+ a {
+ color: inherit;
+ }
+ margin-bottom: 1rem;
+ }
+ }
+}
diff --git a/src/@core/scss/vue/pages/page-misc.scss b/src/@core/scss/vue/pages/page-misc.scss
new file mode 100644
index 0000000..245fb90
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-misc.scss
@@ -0,0 +1,12 @@
+@import '~@core/scss/base/pages/page-misc.scss';
+
+.brand-logo {
+ svg {
+ height: 36px;
+ width: 36px;
+ }
+ h2 {
+ margin-top: 0.25rem;
+ margin-left: 0.8rem;
+ }
+}
diff --git a/src/@core/scss/vue/pages/page-pricing.scss b/src/@core/scss/vue/pages/page-pricing.scss
new file mode 100644
index 0000000..62defbe
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-pricing.scss
@@ -0,0 +1,14 @@
+@import '~@core/scss/base/pages/page-pricing.scss';
+
+.pricing-card {
+ .annual-plan {
+ .plan-price {
+ sup {
+ left: 0;
+ }
+ sub {
+ right: 0;
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/pages/page-profile.scss b/src/@core/scss/vue/pages/page-profile.scss
new file mode 100644
index 0000000..d3878bc
--- /dev/null
+++ b/src/@core/scss/vue/pages/page-profile.scss
@@ -0,0 +1,14 @@
+@import '~@core/scss/base/pages/page-profile.scss';
+
+// 个人主页头部
+#user-profile {
+ .profile-header {
+ .profile-header-nav {
+ .navbar {
+ .navbar-toggler {
+ border: none;
+ }
+ }
+ }
+ }
+}
diff --git a/src/@core/scss/vue/pages/ui-feather.scss b/src/@core/scss/vue/pages/ui-feather.scss
new file mode 100644
index 0000000..ec518cd
--- /dev/null
+++ b/src/@core/scss/vue/pages/ui-feather.scss
@@ -0,0 +1 @@
+@import '~@core/scss/base/pages/ui-feather.scss';
diff --git a/src/@core/utils/filter.js b/src/@core/utils/filter.js
new file mode 100644
index 0000000..c513dfe
--- /dev/null
+++ b/src/@core/utils/filter.js
@@ -0,0 +1,53 @@
+import { isToday } from './utils'
+
+export const kFormatter = num => (num > 999 ? `${(num / 1000).toFixed(1)}k` : num)
+
+export const title = (value, replacer = ' ') => {
+ if (!value) return ''
+ const str = value.toString()
+
+ const arr = str.split(replacer)
+ const capitalizedArray = []
+ arr.forEach(word => {
+ const capitalized = word.charAt(0).toUpperCase() + word.slice(1)
+ capitalizedArray.push(capitalized)
+ })
+ return capitalizedArray.join(' ')
+}
+
+export const avatarText = value => {
+ if (!value) return ''
+ const nameArray = value.split(' ')
+ return nameArray.map(word => word.charAt(0).toUpperCase()).join('')
+}
+
+/**
+ * 根据语言格式化日期和时间
+ * 国际化构造器文档: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
+ * @param {String} value 格式化日期
+ * @param {Object} formatting 要格式化的 Intl (国际化)对象
+ */
+export const formatDate = (value, formatting = { month: 'short', day: 'numeric', year: 'numeric' }) => {
+ if (!value) return value
+ return new Intl.DateTimeFormat('zh-CN', formatting).format(new Date(value))
+}
+
+/**
+ * 返回日期的简短人性化月份表示法
+ * 如果日期是今天也可将日期转换为唯一时间
+ * @param {String} value 格式化日期
+ * @param {Boolean} toTimeForCurrentDay 应转换为时间(如果日期为今天/当前)
+ */
+export const formatDateToMonthShort = (value, toTimeForCurrentDay = true) => {
+ const date = new Date(value)
+ let formatting = { month: 'short', day: 'numeric' }
+
+ if (toTimeForCurrentDay && isToday(date)) {
+ formatting = { hour: 'numeric', minute: 'numeric' }
+ }
+
+ return new Intl.DateTimeFormat('zh-CN', formatting).format(new Date(value))
+}
+
+// 删除所有过滤标签并返回纯文本
+export const filterTags = value => value.replace(/<\/?[^>]+(>|$)/g, '')
diff --git a/src/@core/utils/utils.js b/src/@core/utils/utils.js
new file mode 100644
index 0000000..702f7c6
--- /dev/null
+++ b/src/@core/utils/utils.js
@@ -0,0 +1,73 @@
+import router from '@/router'
+// eslint-disable-next-line object-curly-newline
+import { reactive, getCurrentInstance, watch, toRefs } from '@vue/composition-api'
+
+export const isObject = obj => typeof obj === 'object' && obj !== null
+
+export const isToday = date => {
+ const today = new Date()
+ return (
+ /* eslint-disable operator-linebreak */
+ date.getDate() === today.getDate() &&
+ date.getMonth() === today.getMonth() &&
+ date.getFullYear() === today.getFullYear()
+ /* eslint-enable */
+ )
+}
+
+const getRandomFromArray = array => array[Math.floor(Math.random() * array.length)]
+
+// ? 不包括浅色/深色主题
+// prettier-ignore
+export const getRandomBsVariant = () => getRandomFromArray(['primary', 'secondary', 'success', 'warning', 'danger', 'info'])
+
+export const isDynamicRouteActive = route => {
+ const { route: resolvedRoute } = router.resolve(route)
+ return resolvedRoute.path === router.currentRoute.path
+}
+
+// Vue 路由跳转参考文档: https://betterprogramming.pub/reactive-vue-routes-with-the-composition-api-18c1abd878d1
+export const useRouter = () => {
+ const vm = getCurrentInstance().proxy
+ const state = reactive({
+ route: vm.$route,
+ })
+
+ watch(
+ () => vm.$route,
+ r => {
+ state.route = r
+ },
+ )
+
+ return { ...toRefs(state), router: vm.$router }
+}
+
+/**
+ * This is just enhancement over Object.extend [Gives deep extend]
+ * @param {target} a Object which contains values to be overridden
+ * @param {source} b Object which contains values to override
+ */
+// export const objectExtend = (a, b) => {
+// // Don't touch 'null' or 'undefined' objects.
+// if (a == null || b == null) {
+// return a
+// }
+
+// Object.keys(b).forEach(key => {
+// if (Object.prototype.toString.call(b[key]) === '[object Object]') {
+// if (Object.prototype.toString.call(a[key]) !== '[object Object]') {
+// // eslint-disable-next-line no-param-reassign
+// a[key] = b[key]
+// } else {
+// // eslint-disable-next-line no-param-reassign
+// a[key] = objectExtend(a[key], b[key])
+// }
+// } else {
+// // eslint-disable-next-line no-param-reassign
+// a[key] = b[key]
+// }
+// })
+
+// return a
+// }
diff --git a/src/@core/utils/validations/validations.js b/src/@core/utils/validations/validations.js
new file mode 100644
index 0000000..b611162
--- /dev/null
+++ b/src/@core/utils/validations/validations.js
@@ -0,0 +1,187 @@
+import { extend, localize } from 'vee-validate'
+import {
+ required as rule_required,
+ email as rule_email,
+ min as rule_min,
+ confirmed as rule_confirmed,
+ regex as rule_regex,
+ between as rule_between,
+ alpha as rule_alpha,
+ integer as rule_integer,
+ digits as rule_digits,
+ alpha_dash as rule_alpha_dash,
+ alpha_num as rule_alpha_num,
+ length as rule_length,
+} from 'vee-validate/dist/rules'
+import cn from 'vee-validate/dist/locale/zh_CN.json'
+import ar from 'vee-validate/dist/locale/ar.json'
+import en from 'vee-validate/dist/locale/en.json'
+
+// eslint-disable-next-line object-curly-newline
+import { validatorPositive, validatorUrlValidator, validatorPassword, validatorCreditCard } from './validators'
+
+// ////////////////////////////////////////////////////////
+// 通用
+// ////////////////////////////////////////////////////////
+
+export const required = extend('required', rule_required)
+
+export const email = extend('email', rule_email)
+
+export const min = extend('min', rule_min)
+
+export const confirmed = extend('confirmed', rule_confirmed)
+
+export const regex = extend('regex', rule_regex)
+
+export const between = extend('between', rule_between)
+
+export const alpha = extend('alpha', rule_alpha)
+
+export const integer = extend('integer', rule_integer)
+
+export const digits = extend('digits', rule_digits)
+
+export const alphaDash = extend('alpha_dash', rule_alpha_dash)
+
+export const alphaNum = extend('alpha_num', rule_alpha_num)
+
+export const length = extend('length', rule_length)
+
+export const positive = extend('positive', {
+ validate: validatorPositive,
+ message: '请输入正数!',
+})
+
+export const credit = extend('credit-card', {
+ validate: validatorCreditCard,
+ message: '此信用卡无效!',
+})
+
+export const password = extend('password', {
+ validate: validatorPassword,
+ message: '您的{_field_}必须至少包含一个大写、一个小写、一个特殊字符和一个数字!',
+})
+
+export const url = extend('url', {
+ validate: validatorUrlValidator,
+ message: '请填写有效网址',
+})
+
+// 安装国际化自定义验证信息
+localize({
+ cn: {
+ messages: cn.messages,
+ names: {
+ username: '用户名',
+ email: '邮箱',
+ password: '密码',
+ },
+ fields: {
+ password: {
+ min: '{_field_}太短, 你想被黑吗?',
+ },
+ },
+ },
+ en: {
+ messages: en.messages,
+ names: {
+ email: 'Email',
+ password: 'Password',
+ },
+ fields: {
+ password: {
+ min: '{_field_} is too short, you want to get hacked?',
+ },
+ },
+ },
+ ar: {
+ messages: ar.messages,
+ names: {
+ email: 'البريد الإلكتروني',
+ password: 'كلمة السر',
+ },
+ fields: {
+ password: {
+ min: 'كلمة السر قصيرة جداً سيتم اختراقك',
+ },
+ },
+ },
+})
+// ////////////////////////////////////////////////////////
+// NOTE:
+// Quasar validation for reference only
+// Remove this note once development is finished and make sure to
+// to convert all of them in veevalidate version
+// ////////////////////////////////////////////////////////
+
+// export const required = (val) => {
+// return (val && val.length > 0) || '*Field is required'
+// }
+
+// export const required_obj = (obj) => {
+// if (obj === null || obj === undefined) return '*Field is required'
+// return (Object.entries(obj).length > 0 && obj.constructor === Object) || '*Field is required'
+// }
+
+// export const no_blank_spaces_arr = (arr) => {
+// return arr.every(val => (val.trim() && val.trim().length > 0)) || 'Blank Spaces are not allowed'
+// }
+
+// export const url = val => {
+// // If blank return
+// if (val === undefined || val === null || val.length === 0) return true
+
+// // Used
+// // https://stackoverflow.com/questions/4314741/url-regex-validation
+
+// // Other
+// // https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url
+// // https://www.w3resource.com/javascript-exercises/javascript-regexp-exercise-9.php
+// // https://www.geeksforgeeks.org/how-to-validate-url-using-regular-expression-in-javascript/
+
+// /* eslint-disable no-useless-escape */
+// const re = /^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/
+// /* eslint-enable no-useless-escape */
+// return re.test(val) || 'URL is invalid'
+// }
+
+// export const date = val => {
+
+// // If blank return
+// if (val === undefined || val === null || val.length === 0) return true
+
+// // https://github.com/quasarframework/quasar/blob/dev/ui/src/utils/patterns.js
+// return /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(val) || 'Date is invalid'
+// }
+
+// export const max = (val, max) => {
+
+// // If blank return
+// if (val === undefined || val === null) return true
+
+// return val.length <= max || `More than ${max} characters are not allowed`
+// }
+
+// export const max_arr = (val, max) => {
+// return val.length <= max || `More than ${max} values are not allowed`
+// }
+
+// export const min = (val, min) => {
+
+// // If blank return
+// if (val === undefined || val === null || val.length === 0) return true
+
+// return val.length >= min || `Minimum ${min} characters are required`
+// }
+
+// export const num_range = (val, min, max) => {
+
+// // If blank return
+// if (val === undefined || val === null || val.length === 0) return true
+
+// const msg = 'Value is invalid'
+// if (min === null) return val <= max || msg
+// else if (max === null) return val >= min || msg
+// else return (val >= min && val <= max) || msg
+// }
diff --git a/src/@core/utils/validations/validators.js b/src/@core/utils/validations/validators.js
new file mode 100644
index 0000000..70555e0
--- /dev/null
+++ b/src/@core/utils/validations/validators.js
@@ -0,0 +1,32 @@
+export const validatorPositive = value => {
+ if (value >= 0) {
+ return true
+ }
+ return false
+}
+
+export const validatorPassword = password => {
+ /* eslint-disable no-useless-escape */
+ const regExp = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*()]).{8,}/
+ /* eslint-enable no-useless-escape */
+ const validPassword = regExp.test(password)
+ return validPassword
+}
+
+export const validatorCreditCard = creditnum => {
+ /* eslint-disable no-useless-escape */
+ const cRegExp = /^(?:[3-6][0-9]{14})$/
+ /* eslint-enable no-useless-escape */
+ const validCreditCard = cRegExp.test(creditnum)
+ return validCreditCard
+}
+
+export const validatorUrlValidator = val => {
+ if (val === undefined || val === null || val.length === 0) {
+ return true
+ }
+ /* eslint-disable no-useless-escape */
+ const re = /^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/
+ /* eslint-enable no-useless-escape */
+ return re.test(val)
+}
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..6082745
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/avatars/1-small.png b/src/assets/images/avatars/1-small.png
new file mode 100644
index 0000000..90599d3
Binary files /dev/null and b/src/assets/images/avatars/1-small.png differ
diff --git a/src/assets/images/avatars/1.png b/src/assets/images/avatars/1.png
new file mode 100644
index 0000000..17a32f3
Binary files /dev/null and b/src/assets/images/avatars/1.png differ
diff --git a/src/assets/images/avatars/10-small.png b/src/assets/images/avatars/10-small.png
new file mode 100644
index 0000000..5236e42
Binary files /dev/null and b/src/assets/images/avatars/10-small.png differ
diff --git a/src/assets/images/avatars/10.png b/src/assets/images/avatars/10.png
new file mode 100644
index 0000000..4b60732
Binary files /dev/null and b/src/assets/images/avatars/10.png differ
diff --git a/src/assets/images/avatars/11-small.png b/src/assets/images/avatars/11-small.png
new file mode 100644
index 0000000..e586734
Binary files /dev/null and b/src/assets/images/avatars/11-small.png differ
diff --git a/src/assets/images/avatars/11.png b/src/assets/images/avatars/11.png
new file mode 100644
index 0000000..900b8d7
Binary files /dev/null and b/src/assets/images/avatars/11.png differ
diff --git a/src/assets/images/avatars/12-small.png b/src/assets/images/avatars/12-small.png
new file mode 100644
index 0000000..d7adedc
Binary files /dev/null and b/src/assets/images/avatars/12-small.png differ
diff --git a/src/assets/images/avatars/12.png b/src/assets/images/avatars/12.png
new file mode 100644
index 0000000..217dd24
Binary files /dev/null and b/src/assets/images/avatars/12.png differ
diff --git a/src/assets/images/avatars/13-small.png b/src/assets/images/avatars/13-small.png
new file mode 100644
index 0000000..15281c2
Binary files /dev/null and b/src/assets/images/avatars/13-small.png differ
diff --git a/src/assets/images/avatars/13.png b/src/assets/images/avatars/13.png
new file mode 100644
index 0000000..34a125a
Binary files /dev/null and b/src/assets/images/avatars/13.png differ
diff --git a/src/assets/images/avatars/14-small.png b/src/assets/images/avatars/14-small.png
new file mode 100644
index 0000000..1e2592c
Binary files /dev/null and b/src/assets/images/avatars/14-small.png differ
diff --git a/src/assets/images/avatars/14.png b/src/assets/images/avatars/14.png
new file mode 100644
index 0000000..8cd6628
Binary files /dev/null and b/src/assets/images/avatars/14.png differ
diff --git a/src/assets/images/avatars/15-small.png b/src/assets/images/avatars/15-small.png
new file mode 100644
index 0000000..2aa2099
Binary files /dev/null and b/src/assets/images/avatars/15-small.png differ
diff --git a/src/assets/images/avatars/15.png b/src/assets/images/avatars/15.png
new file mode 100644
index 0000000..aeee798
Binary files /dev/null and b/src/assets/images/avatars/15.png differ
diff --git a/src/assets/images/avatars/16-small.png b/src/assets/images/avatars/16-small.png
new file mode 100644
index 0000000..5dc283c
Binary files /dev/null and b/src/assets/images/avatars/16-small.png differ
diff --git a/src/assets/images/avatars/16.png b/src/assets/images/avatars/16.png
new file mode 100644
index 0000000..54a80dd
Binary files /dev/null and b/src/assets/images/avatars/16.png differ
diff --git a/src/assets/images/avatars/17-small.png b/src/assets/images/avatars/17-small.png
new file mode 100644
index 0000000..489cef1
Binary files /dev/null and b/src/assets/images/avatars/17-small.png differ
diff --git a/src/assets/images/avatars/17.png b/src/assets/images/avatars/17.png
new file mode 100644
index 0000000..506a92e
Binary files /dev/null and b/src/assets/images/avatars/17.png differ
diff --git a/src/assets/images/avatars/18-small.png b/src/assets/images/avatars/18-small.png
new file mode 100644
index 0000000..465c06c
Binary files /dev/null and b/src/assets/images/avatars/18-small.png differ
diff --git a/src/assets/images/avatars/18.png b/src/assets/images/avatars/18.png
new file mode 100644
index 0000000..d85a592
Binary files /dev/null and b/src/assets/images/avatars/18.png differ
diff --git a/src/assets/images/avatars/19-small.png b/src/assets/images/avatars/19-small.png
new file mode 100644
index 0000000..c7461c7
Binary files /dev/null and b/src/assets/images/avatars/19-small.png differ
diff --git a/src/assets/images/avatars/19.png b/src/assets/images/avatars/19.png
new file mode 100644
index 0000000..de93406
Binary files /dev/null and b/src/assets/images/avatars/19.png differ
diff --git a/src/assets/images/avatars/2-small.png b/src/assets/images/avatars/2-small.png
new file mode 100644
index 0000000..fd5c0ce
Binary files /dev/null and b/src/assets/images/avatars/2-small.png differ
diff --git a/src/assets/images/avatars/2.png b/src/assets/images/avatars/2.png
new file mode 100644
index 0000000..c6ccdcd
Binary files /dev/null and b/src/assets/images/avatars/2.png differ
diff --git a/src/assets/images/avatars/20-small.png b/src/assets/images/avatars/20-small.png
new file mode 100644
index 0000000..66e3659
Binary files /dev/null and b/src/assets/images/avatars/20-small.png differ
diff --git a/src/assets/images/avatars/20.png b/src/assets/images/avatars/20.png
new file mode 100644
index 0000000..92bbd23
Binary files /dev/null and b/src/assets/images/avatars/20.png differ
diff --git a/src/assets/images/avatars/21-small.png b/src/assets/images/avatars/21-small.png
new file mode 100644
index 0000000..ea01d35
Binary files /dev/null and b/src/assets/images/avatars/21-small.png differ
diff --git a/src/assets/images/avatars/21.png b/src/assets/images/avatars/21.png
new file mode 100644
index 0000000..ab9a4af
Binary files /dev/null and b/src/assets/images/avatars/21.png differ
diff --git a/src/assets/images/avatars/22-small.png b/src/assets/images/avatars/22-small.png
new file mode 100644
index 0000000..5bbb9c8
Binary files /dev/null and b/src/assets/images/avatars/22-small.png differ
diff --git a/src/assets/images/avatars/22.png b/src/assets/images/avatars/22.png
new file mode 100644
index 0000000..f9a798a
Binary files /dev/null and b/src/assets/images/avatars/22.png differ
diff --git a/src/assets/images/avatars/23-small.png b/src/assets/images/avatars/23-small.png
new file mode 100644
index 0000000..20aefdf
Binary files /dev/null and b/src/assets/images/avatars/23-small.png differ
diff --git a/src/assets/images/avatars/23.png b/src/assets/images/avatars/23.png
new file mode 100644
index 0000000..144b884
Binary files /dev/null and b/src/assets/images/avatars/23.png differ
diff --git a/src/assets/images/avatars/24-small.png b/src/assets/images/avatars/24-small.png
new file mode 100644
index 0000000..35c7510
Binary files /dev/null and b/src/assets/images/avatars/24-small.png differ
diff --git a/src/assets/images/avatars/24.png b/src/assets/images/avatars/24.png
new file mode 100644
index 0000000..98d2f91
Binary files /dev/null and b/src/assets/images/avatars/24.png differ
diff --git a/src/assets/images/avatars/3-small.png b/src/assets/images/avatars/3-small.png
new file mode 100644
index 0000000..266f23c
Binary files /dev/null and b/src/assets/images/avatars/3-small.png differ
diff --git a/src/assets/images/avatars/3.png b/src/assets/images/avatars/3.png
new file mode 100644
index 0000000..1818aa6
Binary files /dev/null and b/src/assets/images/avatars/3.png differ
diff --git a/src/assets/images/avatars/4-small.png b/src/assets/images/avatars/4-small.png
new file mode 100644
index 0000000..6c00bd0
Binary files /dev/null and b/src/assets/images/avatars/4-small.png differ
diff --git a/src/assets/images/avatars/4.png b/src/assets/images/avatars/4.png
new file mode 100644
index 0000000..7c19094
Binary files /dev/null and b/src/assets/images/avatars/4.png differ
diff --git a/src/assets/images/avatars/5-small.png b/src/assets/images/avatars/5-small.png
new file mode 100644
index 0000000..c29b6f5
Binary files /dev/null and b/src/assets/images/avatars/5-small.png differ
diff --git a/src/assets/images/avatars/5.png b/src/assets/images/avatars/5.png
new file mode 100644
index 0000000..b32e91c
Binary files /dev/null and b/src/assets/images/avatars/5.png differ
diff --git a/src/assets/images/avatars/6-small.png b/src/assets/images/avatars/6-small.png
new file mode 100644
index 0000000..64e85f0
Binary files /dev/null and b/src/assets/images/avatars/6-small.png differ
diff --git a/src/assets/images/avatars/6.png b/src/assets/images/avatars/6.png
new file mode 100644
index 0000000..db37e1b
Binary files /dev/null and b/src/assets/images/avatars/6.png differ
diff --git a/src/assets/images/avatars/7-small.png b/src/assets/images/avatars/7-small.png
new file mode 100644
index 0000000..46fbc76
Binary files /dev/null and b/src/assets/images/avatars/7-small.png differ
diff --git a/src/assets/images/avatars/7.png b/src/assets/images/avatars/7.png
new file mode 100644
index 0000000..d4aee55
Binary files /dev/null and b/src/assets/images/avatars/7.png differ
diff --git a/src/assets/images/avatars/8-small.png b/src/assets/images/avatars/8-small.png
new file mode 100644
index 0000000..ac94bbc
Binary files /dev/null and b/src/assets/images/avatars/8-small.png differ
diff --git a/src/assets/images/avatars/8.png b/src/assets/images/avatars/8.png
new file mode 100644
index 0000000..66851fa
Binary files /dev/null and b/src/assets/images/avatars/8.png differ
diff --git a/src/assets/images/avatars/9-small.png b/src/assets/images/avatars/9-small.png
new file mode 100644
index 0000000..7c4f90e
Binary files /dev/null and b/src/assets/images/avatars/9-small.png differ
diff --git a/src/assets/images/avatars/9.png b/src/assets/images/avatars/9.png
new file mode 100644
index 0000000..4123871
Binary files /dev/null and b/src/assets/images/avatars/9.png differ
diff --git a/src/assets/images/flags/cn.png b/src/assets/images/flags/cn.png
new file mode 100644
index 0000000..39d647a
Binary files /dev/null and b/src/assets/images/flags/cn.png differ
diff --git a/src/assets/images/flags/en.png b/src/assets/images/flags/en.png
new file mode 100644
index 0000000..129486b
Binary files /dev/null and b/src/assets/images/flags/en.png differ
diff --git a/src/assets/images/icons/angular.svg b/src/assets/images/icons/angular.svg
new file mode 100644
index 0000000..ec18c85
--- /dev/null
+++ b/src/assets/images/icons/angular.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/apple-safari.png b/src/assets/images/icons/apple-safari.png
new file mode 100644
index 0000000..002646c
Binary files /dev/null and b/src/assets/images/icons/apple-safari.png differ
diff --git a/src/assets/images/icons/book.svg b/src/assets/images/icons/book.svg
new file mode 100644
index 0000000..96beb5f
--- /dev/null
+++ b/src/assets/images/icons/book.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/bootstrap.svg b/src/assets/images/icons/bootstrap.svg
new file mode 100644
index 0000000..f1f0737
--- /dev/null
+++ b/src/assets/images/icons/bootstrap.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/brush.svg b/src/assets/images/icons/brush.svg
new file mode 100644
index 0000000..145e16f
--- /dev/null
+++ b/src/assets/images/icons/brush.svg
@@ -0,0 +1,31 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/doc.png b/src/assets/images/icons/doc.png
new file mode 100644
index 0000000..e46b103
Binary files /dev/null and b/src/assets/images/icons/doc.png differ
diff --git a/src/assets/images/icons/drive.png b/src/assets/images/icons/drive.png
new file mode 100644
index 0000000..cf6c768
Binary files /dev/null and b/src/assets/images/icons/drive.png differ
diff --git a/src/assets/images/icons/dropbox.png b/src/assets/images/icons/dropbox.png
new file mode 100644
index 0000000..ac716ea
Binary files /dev/null and b/src/assets/images/icons/dropbox.png differ
diff --git a/src/assets/images/icons/figma.svg b/src/assets/images/icons/figma.svg
new file mode 100644
index 0000000..b843391
--- /dev/null
+++ b/src/assets/images/icons/figma.svg
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/file-icons/doc.png b/src/assets/images/icons/file-icons/doc.png
new file mode 100644
index 0000000..825cfde
Binary files /dev/null and b/src/assets/images/icons/file-icons/doc.png differ
diff --git a/src/assets/images/icons/file-icons/onedrive.png b/src/assets/images/icons/file-icons/onedrive.png
new file mode 100644
index 0000000..22559a1
Binary files /dev/null and b/src/assets/images/icons/file-icons/onedrive.png differ
diff --git a/src/assets/images/icons/file-icons/pdf.png b/src/assets/images/icons/file-icons/pdf.png
new file mode 100644
index 0000000..b2124bf
Binary files /dev/null and b/src/assets/images/icons/file-icons/pdf.png differ
diff --git a/src/assets/images/icons/file-icons/psd.png b/src/assets/images/icons/file-icons/psd.png
new file mode 100644
index 0000000..f80f86c
Binary files /dev/null and b/src/assets/images/icons/file-icons/psd.png differ
diff --git a/src/assets/images/icons/file-icons/sketch.png b/src/assets/images/icons/file-icons/sketch.png
new file mode 100644
index 0000000..b0a4516
Binary files /dev/null and b/src/assets/images/icons/file-icons/sketch.png differ
diff --git a/src/assets/images/icons/google-chrome.png b/src/assets/images/icons/google-chrome.png
new file mode 100644
index 0000000..92de87d
Binary files /dev/null and b/src/assets/images/icons/google-chrome.png differ
diff --git a/src/assets/images/icons/icloud-1.png b/src/assets/images/icons/icloud-1.png
new file mode 100644
index 0000000..1f40ec9
Binary files /dev/null and b/src/assets/images/icons/icloud-1.png differ
diff --git a/src/assets/images/icons/icloud.png b/src/assets/images/icons/icloud.png
new file mode 100644
index 0000000..5143b0d
Binary files /dev/null and b/src/assets/images/icons/icloud.png differ
diff --git a/src/assets/images/icons/internet-explorer.png b/src/assets/images/icons/internet-explorer.png
new file mode 100644
index 0000000..0f7df61
Binary files /dev/null and b/src/assets/images/icons/internet-explorer.png differ
diff --git a/src/assets/images/icons/internet.png b/src/assets/images/icons/internet.png
new file mode 100644
index 0000000..058438f
Binary files /dev/null and b/src/assets/images/icons/internet.png differ
diff --git a/src/assets/images/icons/jpg.png b/src/assets/images/icons/jpg.png
new file mode 100644
index 0000000..834bc8a
Binary files /dev/null and b/src/assets/images/icons/jpg.png differ
diff --git a/src/assets/images/icons/js.png b/src/assets/images/icons/js.png
new file mode 100644
index 0000000..2bc64cd
Binary files /dev/null and b/src/assets/images/icons/js.png differ
diff --git a/src/assets/images/icons/json.png b/src/assets/images/icons/json.png
new file mode 100644
index 0000000..407a94c
Binary files /dev/null and b/src/assets/images/icons/json.png differ
diff --git a/src/assets/images/icons/mozila-firefox.png b/src/assets/images/icons/mozila-firefox.png
new file mode 100644
index 0000000..27c82cc
Binary files /dev/null and b/src/assets/images/icons/mozila-firefox.png differ
diff --git a/src/assets/images/icons/onedrive.png b/src/assets/images/icons/onedrive.png
new file mode 100644
index 0000000..d195389
Binary files /dev/null and b/src/assets/images/icons/onedrive.png differ
diff --git a/src/assets/images/icons/onedrivenew.png b/src/assets/images/icons/onedrivenew.png
new file mode 100644
index 0000000..22559a1
Binary files /dev/null and b/src/assets/images/icons/onedrivenew.png differ
diff --git a/src/assets/images/icons/opera.png b/src/assets/images/icons/opera.png
new file mode 100644
index 0000000..fb16c1e
Binary files /dev/null and b/src/assets/images/icons/opera.png differ
diff --git a/src/assets/images/icons/parachute.svg b/src/assets/images/icons/parachute.svg
new file mode 100644
index 0000000..ceeaef7
--- /dev/null
+++ b/src/assets/images/icons/parachute.svg
@@ -0,0 +1,41 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/pdf.png b/src/assets/images/icons/pdf.png
new file mode 100644
index 0000000..b2124bf
Binary files /dev/null and b/src/assets/images/icons/pdf.png differ
diff --git a/src/assets/images/icons/psd.png b/src/assets/images/icons/psd.png
new file mode 100644
index 0000000..f80f86c
Binary files /dev/null and b/src/assets/images/icons/psd.png differ
diff --git a/src/assets/images/icons/qq.svg b/src/assets/images/icons/qq.svg
new file mode 100644
index 0000000..75479b6
--- /dev/null
+++ b/src/assets/images/icons/qq.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/images/icons/react.svg b/src/assets/images/icons/react.svg
new file mode 100644
index 0000000..697088b
--- /dev/null
+++ b/src/assets/images/icons/react.svg
@@ -0,0 +1,20 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/rocket.svg b/src/assets/images/icons/rocket.svg
new file mode 100644
index 0000000..71bae8a
--- /dev/null
+++ b/src/assets/images/icons/rocket.svg
@@ -0,0 +1,47 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/sketch.png b/src/assets/images/icons/sketch.png
new file mode 100644
index 0000000..b0a4516
Binary files /dev/null and b/src/assets/images/icons/sketch.png differ
diff --git a/src/assets/images/icons/speaker.svg b/src/assets/images/icons/speaker.svg
new file mode 100644
index 0000000..863a947
--- /dev/null
+++ b/src/assets/images/icons/speaker.svg
@@ -0,0 +1,26 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/star.svg b/src/assets/images/icons/star.svg
new file mode 100644
index 0000000..cf6615d
--- /dev/null
+++ b/src/assets/images/icons/star.svg
@@ -0,0 +1,24 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/toolbox.svg b/src/assets/images/icons/toolbox.svg
new file mode 100644
index 0000000..aa28129
--- /dev/null
+++ b/src/assets/images/icons/toolbox.svg
@@ -0,0 +1,28 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/txt.png b/src/assets/images/icons/txt.png
new file mode 100644
index 0000000..3851d50
Binary files /dev/null and b/src/assets/images/icons/txt.png differ
diff --git a/src/assets/images/icons/unknown.png b/src/assets/images/icons/unknown.png
new file mode 100644
index 0000000..825cfde
Binary files /dev/null and b/src/assets/images/icons/unknown.png differ
diff --git a/src/assets/images/icons/vuejs.svg b/src/assets/images/icons/vuejs.svg
new file mode 100644
index 0000000..2b1218b
--- /dev/null
+++ b/src/assets/images/icons/vuejs.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/icons/wechat.svg b/src/assets/images/icons/wechat.svg
new file mode 100644
index 0000000..5553ff9
--- /dev/null
+++ b/src/assets/images/icons/wechat.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/src/assets/images/icons/xls.png b/src/assets/images/icons/xls.png
new file mode 100644
index 0000000..58995d2
Binary files /dev/null and b/src/assets/images/icons/xls.png differ
diff --git a/src/assets/images/logo/favicon.ico b/src/assets/images/logo/favicon.ico
new file mode 100644
index 0000000..427179e
Binary files /dev/null and b/src/assets/images/logo/favicon.ico differ
diff --git a/src/assets/images/logo/logo.png b/src/assets/images/logo/logo.png
new file mode 100644
index 0000000..a856147
Binary files /dev/null and b/src/assets/images/logo/logo.png differ
diff --git a/src/assets/images/logo/logo.svg b/src/assets/images/logo/logo.svg
new file mode 100644
index 0000000..fa2f994
--- /dev/null
+++ b/src/assets/images/logo/logo.svg
@@ -0,0 +1,39 @@
+
diff --git a/src/assets/images/logo/rexo-logo.png b/src/assets/images/logo/rexo-logo.png
new file mode 100644
index 0000000..3c53370
Binary files /dev/null and b/src/assets/images/logo/rexo-logo.png differ
diff --git a/src/assets/images/pages/arrow-down.png b/src/assets/images/pages/arrow-down.png
new file mode 100644
index 0000000..332e388
Binary files /dev/null and b/src/assets/images/pages/arrow-down.png differ
diff --git a/src/assets/images/pages/auth-v1-bottom-bg.png b/src/assets/images/pages/auth-v1-bottom-bg.png
new file mode 100644
index 0000000..73c0f1b
Binary files /dev/null and b/src/assets/images/pages/auth-v1-bottom-bg.png differ
diff --git a/src/assets/images/pages/auth-v1-top-bg.png b/src/assets/images/pages/auth-v1-top-bg.png
new file mode 100644
index 0000000..f37462f
Binary files /dev/null and b/src/assets/images/pages/auth-v1-top-bg.png differ
diff --git a/src/assets/images/pages/calendar-illustration.png b/src/assets/images/pages/calendar-illustration.png
new file mode 100644
index 0000000..1c4d1e5
Binary files /dev/null and b/src/assets/images/pages/calendar-illustration.png differ
diff --git a/src/assets/images/pages/coming-soon-dark.svg b/src/assets/images/pages/coming-soon-dark.svg
new file mode 100644
index 0000000..72dd89c
--- /dev/null
+++ b/src/assets/images/pages/coming-soon-dark.svg
@@ -0,0 +1,265 @@
+
diff --git a/src/assets/images/pages/coming-soon.svg b/src/assets/images/pages/coming-soon.svg
new file mode 100644
index 0000000..74ceca1
--- /dev/null
+++ b/src/assets/images/pages/coming-soon.svg
@@ -0,0 +1,263 @@
+
+
diff --git a/src/assets/images/pages/content-img-1.jpg b/src/assets/images/pages/content-img-1.jpg
new file mode 100644
index 0000000..78f1e2f
Binary files /dev/null and b/src/assets/images/pages/content-img-1.jpg differ
diff --git a/src/assets/images/pages/content-img-2.jpg b/src/assets/images/pages/content-img-2.jpg
new file mode 100644
index 0000000..0393893
Binary files /dev/null and b/src/assets/images/pages/content-img-2.jpg differ
diff --git a/src/assets/images/pages/content-img-3.jpg b/src/assets/images/pages/content-img-3.jpg
new file mode 100644
index 0000000..e140cb9
Binary files /dev/null and b/src/assets/images/pages/content-img-3.jpg differ
diff --git a/src/assets/images/pages/content-img-4.jpg b/src/assets/images/pages/content-img-4.jpg
new file mode 100644
index 0000000..4c05741
Binary files /dev/null and b/src/assets/images/pages/content-img-4.jpg differ
diff --git a/src/assets/images/pages/error-dark.svg b/src/assets/images/pages/error-dark.svg
new file mode 100644
index 0000000..aaf9b9d
--- /dev/null
+++ b/src/assets/images/pages/error-dark.svg
@@ -0,0 +1,287 @@
+
diff --git a/src/assets/images/pages/error.svg b/src/assets/images/pages/error.svg
new file mode 100644
index 0000000..dd2f451
--- /dev/null
+++ b/src/assets/images/pages/error.svg
@@ -0,0 +1,299 @@
+
+
diff --git a/src/assets/images/pages/forgot-password-v2-dark.svg b/src/assets/images/pages/forgot-password-v2-dark.svg
new file mode 100644
index 0000000..c8f6e63
--- /dev/null
+++ b/src/assets/images/pages/forgot-password-v2-dark.svg
@@ -0,0 +1,206 @@
+
diff --git a/src/assets/images/pages/forgot-password-v2.svg b/src/assets/images/pages/forgot-password-v2.svg
new file mode 100644
index 0000000..3c2565e
--- /dev/null
+++ b/src/assets/images/pages/forgot-password-v2.svg
@@ -0,0 +1,207 @@
+
+
diff --git a/src/assets/images/pages/forgot-password.png b/src/assets/images/pages/forgot-password.png
new file mode 100644
index 0000000..ea5998c
Binary files /dev/null and b/src/assets/images/pages/forgot-password.png differ
diff --git a/src/assets/images/pages/kb-image.jpg b/src/assets/images/pages/kb-image.jpg
new file mode 100644
index 0000000..5d5e755
Binary files /dev/null and b/src/assets/images/pages/kb-image.jpg differ
diff --git a/src/assets/images/pages/login-v2-dark.svg b/src/assets/images/pages/login-v2-dark.svg
new file mode 100644
index 0000000..2150040
--- /dev/null
+++ b/src/assets/images/pages/login-v2-dark.svg
@@ -0,0 +1,551 @@
+
diff --git a/src/assets/images/pages/login-v2.svg b/src/assets/images/pages/login-v2.svg
new file mode 100644
index 0000000..3001b0b
--- /dev/null
+++ b/src/assets/images/pages/login-v2.svg
@@ -0,0 +1,558 @@
+
+
diff --git a/src/assets/images/pages/login/facebook.svg b/src/assets/images/pages/login/facebook.svg
new file mode 100644
index 0000000..6227a2e
--- /dev/null
+++ b/src/assets/images/pages/login/facebook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/pages/login/github.svg b/src/assets/images/pages/login/github.svg
new file mode 100644
index 0000000..13678df
--- /dev/null
+++ b/src/assets/images/pages/login/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/pages/login/google.svg b/src/assets/images/pages/login/google.svg
new file mode 100644
index 0000000..2218d96
--- /dev/null
+++ b/src/assets/images/pages/login/google.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/pages/login/twitter.svg b/src/assets/images/pages/login/twitter.svg
new file mode 100644
index 0000000..9ac9e0b
--- /dev/null
+++ b/src/assets/images/pages/login/twitter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/pages/not-authorized-dark.svg b/src/assets/images/pages/not-authorized-dark.svg
new file mode 100644
index 0000000..027ed52
--- /dev/null
+++ b/src/assets/images/pages/not-authorized-dark.svg
@@ -0,0 +1,206 @@
+
diff --git a/src/assets/images/pages/not-authorized.svg b/src/assets/images/pages/not-authorized.svg
new file mode 100644
index 0000000..389aa4e
--- /dev/null
+++ b/src/assets/images/pages/not-authorized.svg
@@ -0,0 +1,207 @@
+
+
diff --git a/src/assets/images/pages/pixinvent-logo.png b/src/assets/images/pages/pixinvent-logo.png
new file mode 100644
index 0000000..63791ee
Binary files /dev/null and b/src/assets/images/pages/pixinvent-logo.png differ
diff --git a/src/assets/images/pages/register-v2-dark.svg b/src/assets/images/pages/register-v2-dark.svg
new file mode 100644
index 0000000..9832fe1
--- /dev/null
+++ b/src/assets/images/pages/register-v2-dark.svg
@@ -0,0 +1,340 @@
+
diff --git a/src/assets/images/pages/register-v2.svg b/src/assets/images/pages/register-v2.svg
new file mode 100644
index 0000000..5b7fdf9
--- /dev/null
+++ b/src/assets/images/pages/register-v2.svg
@@ -0,0 +1,351 @@
+
+
diff --git a/src/assets/images/pages/reset-password-v2-dark.svg b/src/assets/images/pages/reset-password-v2-dark.svg
new file mode 100644
index 0000000..93d65cc
--- /dev/null
+++ b/src/assets/images/pages/reset-password-v2-dark.svg
@@ -0,0 +1,287 @@
+
diff --git a/src/assets/images/pages/reset-password-v2.svg b/src/assets/images/pages/reset-password-v2.svg
new file mode 100644
index 0000000..3082946
--- /dev/null
+++ b/src/assets/images/pages/reset-password-v2.svg
@@ -0,0 +1,299 @@
+
+
diff --git a/src/assets/images/pages/under-maintenance-dark.svg b/src/assets/images/pages/under-maintenance-dark.svg
new file mode 100644
index 0000000..6a33474
--- /dev/null
+++ b/src/assets/images/pages/under-maintenance-dark.svg
@@ -0,0 +1,176 @@
+
diff --git a/src/assets/images/pages/under-maintenance.svg b/src/assets/images/pages/under-maintenance.svg
new file mode 100644
index 0000000..f901d4c
--- /dev/null
+++ b/src/assets/images/pages/under-maintenance.svg
@@ -0,0 +1,178 @@
+
+
diff --git a/src/assets/images/portrait/small/avatar-s-1.jpg b/src/assets/images/portrait/small/avatar-s-1.jpg
new file mode 100644
index 0000000..ccfd8c8
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-1.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-10.jpg b/src/assets/images/portrait/small/avatar-s-10.jpg
new file mode 100644
index 0000000..4b60732
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-10.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-11.jpg b/src/assets/images/portrait/small/avatar-s-11.jpg
new file mode 100644
index 0000000..31dff6e
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-11.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-12.jpg b/src/assets/images/portrait/small/avatar-s-12.jpg
new file mode 100644
index 0000000..d89b639
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-12.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-13.jpg b/src/assets/images/portrait/small/avatar-s-13.jpg
new file mode 100644
index 0000000..d6baaa7
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-13.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-14.jpg b/src/assets/images/portrait/small/avatar-s-14.jpg
new file mode 100644
index 0000000..6068d99
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-14.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-15.jpg b/src/assets/images/portrait/small/avatar-s-15.jpg
new file mode 100644
index 0000000..e3601a0
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-15.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-16.jpg b/src/assets/images/portrait/small/avatar-s-16.jpg
new file mode 100644
index 0000000..512b77b
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-16.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-17.jpg b/src/assets/images/portrait/small/avatar-s-17.jpg
new file mode 100644
index 0000000..4d01133
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-17.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-18.jpg b/src/assets/images/portrait/small/avatar-s-18.jpg
new file mode 100644
index 0000000..c79aac3
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-18.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-19.jpg b/src/assets/images/portrait/small/avatar-s-19.jpg
new file mode 100644
index 0000000..2df90d7
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-19.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-2.jpg b/src/assets/images/portrait/small/avatar-s-2.jpg
new file mode 100644
index 0000000..2c56fa2
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-2.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-20.jpg b/src/assets/images/portrait/small/avatar-s-20.jpg
new file mode 100644
index 0000000..a1b9bef
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-20.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-21.jpg b/src/assets/images/portrait/small/avatar-s-21.jpg
new file mode 100644
index 0000000..ca208d8
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-21.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-22.jpg b/src/assets/images/portrait/small/avatar-s-22.jpg
new file mode 100644
index 0000000..eef3e10
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-22.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-23.jpg b/src/assets/images/portrait/small/avatar-s-23.jpg
new file mode 100644
index 0000000..b69bc0e
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-23.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-24.jpg b/src/assets/images/portrait/small/avatar-s-24.jpg
new file mode 100644
index 0000000..eddd65b
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-24.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-3.jpg b/src/assets/images/portrait/small/avatar-s-3.jpg
new file mode 100644
index 0000000..bec5e3d
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-3.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-4.jpg b/src/assets/images/portrait/small/avatar-s-4.jpg
new file mode 100644
index 0000000..9304631
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-4.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-5.jpg b/src/assets/images/portrait/small/avatar-s-5.jpg
new file mode 100644
index 0000000..98c0977
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-5.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-6.jpg b/src/assets/images/portrait/small/avatar-s-6.jpg
new file mode 100644
index 0000000..db37e1b
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-6.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-7.jpg b/src/assets/images/portrait/small/avatar-s-7.jpg
new file mode 100644
index 0000000..b607866
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-7.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-8.jpg b/src/assets/images/portrait/small/avatar-s-8.jpg
new file mode 100644
index 0000000..b755855
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-8.jpg differ
diff --git a/src/assets/images/portrait/small/avatar-s-9.jpg b/src/assets/images/portrait/small/avatar-s-9.jpg
new file mode 100644
index 0000000..8f5f545
Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-9.jpg differ
diff --git a/src/assets/scss/style.scss b/src/assets/scss/style.scss
new file mode 100644
index 0000000..608c864
--- /dev/null
+++ b/src/assets/scss/style.scss
@@ -0,0 +1,5 @@
+// ================================================================================================
+// 注:在此放置自定义的 SCSS 代码,请注意此文件将覆盖其他所有 SCSS 文件中的相同样式。
+// Rexo-UI 更新时,此处自定义的 SCSS 代码将被删除,请注意检查
+// ================================================================================================
+@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap');
diff --git a/src/assets/scss/variables/_variables-components.scss b/src/assets/scss/variables/_variables-components.scss
new file mode 100644
index 0000000..d2863a6
--- /dev/null
+++ b/src/assets/scss/variables/_variables-components.scss
@@ -0,0 +1,3 @@
+// ================================================================================================
+// 提示:建议使用此文件覆盖组件变量。
+// ================================================================================================
diff --git a/src/assets/scss/variables/_variables.scss b/src/assets/scss/variables/_variables.scss
new file mode 100644
index 0000000..52a24b9
--- /dev/null
+++ b/src/assets/scss/variables/_variables.scss
@@ -0,0 +1,4 @@
+// ================================================================================================
+// 提示:建议使用此文件覆盖 Bootstrap 变量。
+// ================================================================================================
+
diff --git a/src/auth/jwt/useJwt.js b/src/auth/jwt/useJwt.js
new file mode 100644
index 0000000..8307a1a
--- /dev/null
+++ b/src/auth/jwt/useJwt.js
@@ -0,0 +1,5 @@
+import useJwt from '@core/auth/jwt/useJwt'
+import axios from '@axios'
+
+const { jwt } = useJwt(axios, {})
+export default jwt
diff --git a/src/auth/utils.js b/src/auth/utils.js
new file mode 100644
index 0000000..9d6f51a
--- /dev/null
+++ b/src/auth/utils.js
@@ -0,0 +1,24 @@
+import useJwt from '@/auth/jwt/useJwt'
+
+/**
+ *如果用户已登录,则返回
+ *取决于如何在前端应用中存储 token
+ *如果使用 cookies 存储,请更新或重写此功能
+ */
+// eslint-disable-next-line
+export const isUserLoggedIn = () => {
+ return localStorage.getItem('userData') && localStorage.getItem(useJwt.jwtConfig.storageTokenKeyName)
+}
+
+export const getUserData = () => JSON.parse(localStorage.getItem('userData'))
+
+/**
+ * 此功能用于仅用于 DEMO 的导航路由检查角色权限,角色登录后仅用于显示,前端中的其他所有内容都未使用
+ * 在实例开发中建议删除或重写此功能,因为此功能只检查不同用户角色的'导航'权限
+ * @param{String}userRole 用户角色
+ */
+export const getHomeRouteForLoggedInUser = userRole => {
+ if (userRole === '管理员') return '/'
+ if (userRole === '客户') return { name: 'access-control' }
+ return { name: 'auth-login' }
+}
diff --git a/src/global-components.js b/src/global-components.js
new file mode 100644
index 0000000..804ddd5
--- /dev/null
+++ b/src/global-components.js
@@ -0,0 +1,10 @@
+import Vue from 'vue'
+import FeatherIcon from '@core/components/feather-icon/FeatherIcon.vue'
+import flatpickr from 'flatpickr'
+
+const Mandarin = require('flatpickr/dist/l10n/zh').default.zh
+
+flatpickr.localize(Mandarin)
+flatpickr.l10ns.default.firstDayOfWeek = 1
+flatpickr.l10ns.default.time_24hr = true
+Vue.component(FeatherIcon.name, FeatherIcon)
diff --git a/src/layouts/components/Navbar.vue b/src/layouts/components/Navbar.vue
new file mode 100644
index 0000000..ec1631a
--- /dev/null
+++ b/src/layouts/components/Navbar.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Albert Zhang
+
+
管理员
+
+
+
+
+
+
+ 个人资料
+
+
+
+
+ 收件箱
+
+
+
+
+ 任务清单
+
+
+
+
+ 聊天应用
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
diff --git a/src/layouts/full/LayoutFull.vue b/src/layouts/full/LayoutFull.vue
new file mode 100644
index 0000000..b91c505
--- /dev/null
+++ b/src/layouts/full/LayoutFull.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/layouts/horizontal/LayoutHorizontal.vue b/src/layouts/horizontal/LayoutHorizontal.vue
new file mode 100644
index 0000000..03d64a4
--- /dev/null
+++ b/src/layouts/horizontal/LayoutHorizontal.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layouts/vertical/LayoutVertical.vue b/src/layouts/vertical/LayoutVertical.vue
new file mode 100644
index 0000000..f912733
--- /dev/null
+++ b/src/layouts/vertical/LayoutVertical.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/libs/acl/ability.js b/src/libs/acl/ability.js
new file mode 100644
index 0000000..2a5fa3d
--- /dev/null
+++ b/src/libs/acl/ability.js
@@ -0,0 +1,11 @@
+import { Ability } from '@casl/ability'
+import { initialAbility } from './config'
+
+// 从本地存储读取数据
+// * 如果用户已登则自动获取以前的功能
+// ? 如果将用户功能存储到其他非本地存储则可更新此功能
+// ! 任何人都可以更新本地存储数据
+const userData = JSON.parse(localStorage.getItem('userData'))
+const existingAbility = userData ? userData.ability : null
+
+export default new Ability(existingAbility || initialAbility)
diff --git a/src/libs/acl/config.js b/src/libs/acl/config.js
new file mode 100644
index 0000000..e0ede0e
--- /dev/null
+++ b/src/libs/acl/config.js
@@ -0,0 +1,8 @@
+export const initialAbility = [
+ {
+ action: 'read',
+ subject: 'Auth',
+ },
+]
+
+export const _ = undefined
diff --git a/src/libs/acl/index.js b/src/libs/acl/index.js
new file mode 100644
index 0000000..71bd56a
--- /dev/null
+++ b/src/libs/acl/index.js
@@ -0,0 +1,5 @@
+import Vue from 'vue'
+import { abilitiesPlugin } from '@casl/vue'
+import ability from './ability'
+
+Vue.use(abilitiesPlugin, ability)
diff --git a/src/libs/acl/routeProtection.js b/src/libs/acl/routeProtection.js
new file mode 100644
index 0000000..31d2076
--- /dev/null
+++ b/src/libs/acl/routeProtection.js
@@ -0,0 +1,5 @@
+import ability from './ability'
+
+export const canNavigate = to => to.matched.some(route => ability.can(route.meta.action || 'read', route.meta.resource))
+
+export const _ = undefined
diff --git a/src/libs/axios.js b/src/libs/axios.js
new file mode 100644
index 0000000..55d602a
--- /dev/null
+++ b/src/libs/axios.js
@@ -0,0 +1,15 @@
+import Vue from 'vue'
+
+// axios
+import axios from 'axios'
+
+const axiosIns = axios.create({
+// 可在此处添加标题
+// baseURL:'https://some-domain.com/api/', 网址
+// timeout:1000,超时
+// headers:{'Custom-Header':'Rexo'} 标题
+})
+
+Vue.prototype.$http = axiosIns
+
+export default axiosIns
diff --git a/src/libs/clipboard.js b/src/libs/clipboard.js
new file mode 100644
index 0000000..6c1cb2a
--- /dev/null
+++ b/src/libs/clipboard.js
@@ -0,0 +1,5 @@
+import Vue from 'vue'
+import VueClipboard from 'vue-clipboard2'
+
+// 剪贴板
+Vue.use(VueClipboard)
diff --git a/src/libs/i18n/index.js b/src/libs/i18n/index.js
new file mode 100644
index 0000000..cacea8e
--- /dev/null
+++ b/src/libs/i18n/index.js
@@ -0,0 +1,21 @@
+import Vue from 'vue'
+import VueI18n from 'vue-i18n'
+
+Vue.use(VueI18n)
+function loadLocaleMessages() {
+ const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i)
+ const messages = {}
+ locales.keys().forEach(key => {
+ const matched = key.match(/([A-Za-z0-9-_]+)\./i)
+ if (matched && matched.length > 1) {
+ const locale = matched[1]
+ messages[locale] = locales(key)
+ }
+ })
+ return messages
+}
+export default new VueI18n({
+ locale: 'cn',
+ fallbackLocale: 'cn',
+ messages: loadLocaleMessages(),
+})
diff --git a/src/libs/i18n/locales/cn.json b/src/libs/i18n/locales/cn.json
new file mode 100644
index 0000000..7812b5c
--- /dev/null
+++ b/src/libs/i18n/locales/cn.json
@@ -0,0 +1,177 @@
+{
+ "message": {
+ "title": "卡片标题",
+ "text": "从明天起,做一个幸福的人 喂马,劈柴,周游世界 从明天起,关心粮食和蔬菜 我有一所房子,面朝大海,春暖花开 从明天起,和每一个亲人通信 告诉他们我的幸福 那幸福的闪电告诉我的 我将告诉每一个人 给每一条河每一座山取一个温暖的名字 陌生人,我也为你祝福 愿你有一个灿烂的前程 愿你有情人终成眷属 愿你在尘世获得幸福 我也愿面朝大海,春暖花开",
+ "pagelength": "显示 1 至",
+ "of": "共",
+ "pageText2": "条记录",
+ "seachLabel": "搜索",
+ "SearchPlaceholder": "请输入搜索的内容",
+ "tableHeader": {
+ "name": "姓名",
+ "email": "邮箱",
+ "date": "入职时间",
+ "salary": "月薪",
+ "status": "状态",
+ "action": "操作"
+ }
+ },
+ "Access Control": "访问控制",
+ "Account Settings": "Settings 账户设置",
+ "Add": "Add 添加",
+ "Advance": "Advance 进阶",
+ "Alert": "Alert 提示",
+ "Analytic": "Analytic 分析",
+ "Analytics": "Analytics 分析",
+ "Apex Chart": "Apex 图表",
+ "Apps & Pages": "应用 / 页面",
+ "Apps": "Apps 应用",
+ "Aspect": "Aspect 宽高比",
+ "Authentication": "Auth 认证",
+ "Auto Suggest": "Auto Sug 自动补全",
+ "Avatar": "Avatar 头像",
+ "Badge": "Badge 徽章",
+ "Basic": "Basic 基本",
+ "Blog": "Blog 博客",
+ "Breadcrumb": "Breadcrumb 面包屑",
+ "BS Table": "Bootstrap 表格",
+ "Button Group": "Btn Group 按钮组",
+ "Button Toolbar": "Btn Toolbar 按钮栏",
+ "Button": "Button 按钮",
+ "Calendar": "Calendar 日历",
+ "Card Action": "Action 卡片动作",
+ "Card Actions": "Actions 卡片动作",
+ "Cards": "Cards 卡片",
+ "Carousel": "Carousel 轮播",
+ "Chartjs": "Chartjs 图表",
+ "Charts & Maps": "图表 / 地图",
+ "Charts": "Charts 图表",
+ "Chat": "Chat 聊天",
+ "Checkbox": "Checkbox 复选框",
+ "Checkout": "Checkout 结算",
+ "Clipboard": "Clipboard 剪贴板",
+ "Collapse": "Collapse 折叠",
+ "Collapsed Menu": "折叠导航布局",
+ "Colors": "Colors 颜色",
+ "Coming Soon": "敬请期待页",
+ "Components": "Components 组件",
+ "Context Menu": "Ctx Menu 右键菜单",
+ "Dashboards": "模板",
+ "Date Time Picker": "Flatpickr 日历选择器",
+ "Deactivate Account": "停用账户",
+ "Detail": "Detail 详情",
+ "Details": "Details 详情",
+ "Disabled Menu": "Disabled 禁用菜单",
+ "Documentation": "文档",
+ "Drag & Drop": "Drag & Drop 拖放",
+ "Dropdown": "Dropdown 下拉菜单",
+ "Echart": "Echart 图表",
+ "eCommerce": "eCommerce 电商",
+ "Edit": "Edit 编辑",
+ "Email": "Email 电子邮件",
+ "Embed": "Embed 嵌入",
+ "Error": "错误页",
+ "Extensions": "Extensions 扩展",
+ "Faq": "Faq 常见问题",
+ "Feather": "Feather 羽毛图标",
+ "File Input": "File Input 文件输入",
+ "Forget Password v1": "忘记密码 v1",
+ "Forget Password v2": "忘记密码 v2",
+ "Forgot Password v1": "找回密码 v1",
+ "Forgot Password v2": "找回密码 v2",
+ "Form Datepicker": "Datepicker 日期选择",
+ "Form Layout": "Layout 表单布局",
+ "Form Rating": "Rating 评分",
+ "Form Repeater": "Repeater 表单重复",
+ "Form Tag": "Tag 标签",
+ "Form Timepicker": "Timepicker 时间选择",
+ "Form Validation": "Validation 表单验证",
+ "Form Wizard": "Wizard 表单向导",
+ "Forms & Tables": "表单 / 表格",
+ "Forms Elements": "表单元素",
+ "Good Table": "Good 表格",
+ "I18n": "I18n 多语言",
+ "Image": "Image 图片",
+ "Input Group": "Input Group 输入组",
+ "Input Mask": "Input Mask 输入掩码",
+ "Input": "Input 输入框",
+ "Invoice": "Invoice 账单",
+ "Knowledge Base": "K Base 知识库",
+ "Layout Blank": "空白布局",
+ "Layout Boxed": "盒子布局",
+ "Layout Empty": "空布局",
+ "Leaflet": "Leaflet 地图",
+ "List Group": "List Group 列表组",
+ "List": "List 列表",
+ "Login v1": "登录 v1",
+ "Login v2": "登录 v2",
+ "Mail Templates": "Mail 邮件模板",
+ "Media Objects": "Media 多媒体对象",
+ "Media": "Media 多媒体",
+ "Menu Level 2.1": "菜单层级 2.1",
+ "Menu Level 2.2": "菜单层级 2.2",
+ "Menu Level 3.1": "菜单层级 3.1",
+ "Menu Level 3.2": "菜单层级 3.2",
+ "Menu Levels": "菜单层级",
+ "Miscellaneous": "其他",
+ "Modal": "Modal 模态弹窗",
+ "Nav": "Nav 导航",
+ "Not Authorized": "未经授权页",
+ "Others": "其他",
+ "Overlay": "Overlay 悬浮层",
+ "Page Layouts": "Layouts 页面布局",
+ "Pages": "Pages 页面",
+ "Pagination Nav": "Page Nav 分页导航",
+ "Pagination": "Pagination 分页",
+ "Pill Badge": "Pill Badge 胶囊徽章",
+ "Pill": "Pill 胶囊导航",
+ "Popover": "Popover 气泡弹窗",
+ "Preview": "Preview 预览",
+ "Pricing": "Pricing 定价",
+ "Profile": "Profile 个人主页",
+ "Progress": "Progress 进度条",
+ "Promotional": "促销",
+ "Quill Editor": "Quill 富文本编辑器",
+ "Radio": "Radio 单选框",
+ "Raise Support": "升级支持",
+ "Register v1": "注册 v1",
+ "Register v2": "注册 v2",
+ "Reset Password v1": "重置密码 v1",
+ "Reset Password v2": "重置密码 v2",
+ "Reset Password": "重置密码",
+ "Search": "Search 搜索",
+ "Select": "Select 选择框",
+ "Shop": "Shop 商城",
+ "Sidebar": "Sidebar 侧边栏",
+ "Slider": "Slider 滑块",
+ "Spinbutton": "SpinBtn 数值调节器",
+ "spinner": "Spinner 加载器",
+ "Statistic": "Statistic 统计",
+ "Statistics": "Statistics 统计",
+ "Support": "Support 支持",
+ "Sweet Alert": "Sweet Alert 弹窗警告",
+ "Swiper": "Swiper 轮播图",
+ "Switch": "Switch 开关",
+ "Tab": "Tab 标签导航",
+ "Textarea": "Textarea 文本域",
+ "Time": "Time 时间选择器",
+ "Timeline": "Timeline 时间线",
+ "Toastification": "Toastification 通知",
+ "Toasts": "Toasts 消息通知",
+ "Todo": "Todo 任务清单",
+ "Tooltip": "Tooltip 文字提示",
+ "Tour": "Tour 引导",
+ "Tree": "Tree 树形目录",
+ "Typography": "Typography 排版",
+ "UI Elements": "UI 元素",
+ "Under Maintenance": "维护页",
+ "User Interface": "组件 / 布局",
+ "User": "User 用户",
+ "Verify Email": "验证电子邮件",
+ "Video Player": "视频播放",
+ "View": "View 视图",
+ "Vue Select": "Vue Select 选择框",
+ "Welcome": "欢迎页面",
+ "Wishlist": "Wishlist 心愿单",
+ "Without Menu": "无导航布局"
+}
diff --git a/src/libs/i18n/locales/de.json b/src/libs/i18n/locales/de.json
new file mode 100644
index 0000000..ded9ef7
--- /dev/null
+++ b/src/libs/i18n/locales/de.json
@@ -0,0 +1,181 @@
+{
+ "message": {
+ "title": "Kartentitel",
+ "text": "Kuchen Sesam Schnaps Cupcake Lebkuchen Dänisch Ich liebe Lebkuchen. Apfelkuchen-Torte-Jujuben chupa chups muffin halvah Lutscher. Schokoladenkuchenhaferkuchen Tiramisu-Marzipanzuckerpflaume. Donut süße Kuchen Hafer Kuchen Dragée Obstkuchen Zuckerwatte Zitrone Tropfen.",
+ "pagelength": "Zeige 1 bis",
+ "of": "von",
+ "pageText2": "Einträge",
+ "seachLabel": "Suche",
+ "SearchPlaceholder": "Suche",
+ "tableHeader": {
+ "name": "Name",
+ "email": "Email",
+ "date": "Datum",
+ "salary": "Gehalt",
+ "status": "Status",
+ "action": "Aktion"
+ }
+ },
+ "UI Elements": "UI-Elemente",
+ "Forms & Tables": "Formulare & Tabellen",
+ "Pages": "Seiten",
+ "Charts & Maps": "Diagramme & Karten",
+ "Others": "Andere",
+ "Typography": "Typografie",
+ "Colors": "Colors",
+ "Feather": "Feder",
+ "Cards": "Karten",
+ "Basic": "Basic",
+ "Advance": "Voraus",
+ "Statistic": "Statistik",
+ "Analytic": "Analytisch",
+ "Card Action": "Kartenaktion",
+ "Components": "Komponenten",
+ "Alert": "Aufmerksam",
+ "Aspect": "Aspekt",
+ "Avatar": "Benutzerbild",
+ "Badge": "Abzeichen",
+ "Breadcrumb": "Brotkrume",
+ "Button": "Taste",
+ "Button Group": "Schaltflächengruppe",
+ "Button Toolbar": "Schaltflächensymbolleiste",
+ "Calendar": "Kalender",
+ "Carousel": "Karussell",
+ "Collapse": "Zusammenbruch",
+ "Dropdown": "Dropdown-Liste",
+ "Embed": "Einbetten",
+ "Image": "Bild",
+ "List Group": "Listengruppe",
+ "Media": "Medien",
+ "Modal": "Modal",
+ "Nav": "Nav",
+ "Overlay": "Überlagerung",
+ "Pagination": "Seitennummerierung",
+ "Pagination Nav": "Paginierung Nav",
+ "Pill": "Pille",
+ "Pill Badge": "Pillenabzeichen",
+ "Popover": "Popover",
+ "Progress": "Fortschritt",
+ "Sidebar": "Seitenleiste",
+ "spinner": "Spinner",
+ "Tab": "Tab",
+ "Time": "Zeit",
+ "Toasts": "Toast",
+ "Tooltip": "Tooltip",
+ "Extensions": "Erweiterungen",
+ "Sweet Alert": "Süßer Alarm",
+ "Quill Editor": "Federkiel-Editor",
+ "Drag & Drop": "Ziehen und loslassen",
+ "Swiper": "Swiper",
+ "Clipboard": "Zwischenablage",
+ "Video Player": "Videoplayer",
+ "Context Menu": "Kontextmenü",
+ "Toastification": "Toastifizierung",
+ "I18n": "I18n",
+ "Slider": "Schieberegler",
+ "Tour": "Tour",
+ "Auto Suggest": "Automatisch vorschlagen",
+ "Tree": "Baum",
+ "Date Time Picker": "Datum Uhrzeit Auswahl",
+ "Vue Select": "Vue Wählen",
+ "Forms Elements": "Bildet Elemente",
+ "Select": "Wählen",
+ "Switch": "Schalter",
+ "Checkbox": "Kontrollkästchen",
+ "Radio": "Radio",
+ "Input": "Eingang",
+ "Textarea": "Textbereich",
+ "Spinbutton": "Drehknopf",
+ "Input Group": "Eingabegruppe",
+ "Form Rating": "Formularbewertung",
+ "Form Tag": "Formular-Tag",
+ "Form Datepicker": "Formular Datepicker",
+ "Form Timepicker": "Form Timepicker",
+ "File Input": "Dateieingabe",
+ "Input Mask": "Eingabemaske",
+ "Form Layout": "Formularlayout",
+ "Form Wizard": "Formzauberer",
+ "Form Validation": "Formularvalidierung",
+ "Form Repeater": "Form Repeater",
+ "BS Table": "BS-Tabelle",
+ "Good Table": "Guter Tisch",
+ "Charts": "Diagramme",
+ "Apex Chart": "Apex-Diagramm",
+ "Chartjs": "Chartjs",
+ "Echart": "Echart",
+ "Leaflet": "Flugblatt",
+ "Profile": "Profil",
+ "Account Settings": "Kontoeinstellungen",
+ "Faq": "FAQ",
+ "Knowledge Base": "Wissensbasis",
+ "Pricing": "Preisgestaltung",
+ "Blog": "Blog",
+ "List": "Liste",
+ "Detail": "Detail",
+ "Edit": "Bearbeiten",
+ "Search": "Suche",
+ "Menu Levels": "Menüebenen",
+ "Menu Level2.1": "Menüebene 2.1",
+ "Menu Level2.2": "Menüebene 2.2",
+ "Menu Level3.1": "Menüebene 3.1",
+ "Menu Level3.2": "Menüebene 3.2",
+ "Disabled Menu": "Deaktiviertes Menü",
+ "Support": "Unterstützung",
+ "Raise Support": "Unterstützung erhöhen",
+ "Documentation": "Dokumentation",
+ "Dashboards": "Dashboards",
+ "Apps & Pages": "Apps & Seiten",
+ "Email": "Email",
+ "Chat": "Plaudern",
+ "Todo": "Machen",
+ "Invoice": "Rechnung",
+ "Preview": "Vorschau",
+ "Add": "Hinzufügen",
+ "eCommerce": "E-Commerce",
+ "Shop": "Geschäft",
+ "Details": "Einzelheiten",
+ "Wishlist": "Wunschzettel",
+ "Checkout": "Auschecken",
+ "User": "Nutzer",
+ "View": "Aussicht",
+ "Authentication": "Authentifizierung",
+ "Login v1": "Login v1",
+ "Login v2": "Login v2",
+ "Register v1": "Registrieren Sie v1",
+ "Register v2": "Registrieren Sie v2",
+ "Forget Password v1": "Passwort vergessen v1",
+ "Forget Password v2": "Passwort vergessen v2",
+ "Forgot Password v1": "Passwort vergessen v1",
+ "Forgot Password v2": "Passwort vergessen v2",
+ "Reset Password v1": "Passwort zurücksetzen v1",
+ "Reset Password v2": "Passwort zurücksetzen v2",
+ "Miscellaneous": "Verschiedenes",
+ "Coming Soon": "Kommt bald",
+ "Not Authorized": "Nicht genehmigt",
+ "Under Maintenance": "Wird gewartet",
+ "Error": "Error",
+ "Statistics": "Statistiken",
+ "Analytics": "Analytik",
+ "Card Actions": "Kartenaktionen",
+ "Media Objects": "Medienobjekte",
+ "Timeline": "Zeitleiste",
+ "Access Control": "Zugangskontrolle",
+ "Menu Level 2.1": "Menüebene 2.1",
+ "Menu Level 2.2": "Menüebene 2.2",
+ "Menu Level 3.1": "Menüebene 3.1",
+ "Menu Level 3.2": "Menüebene 3.2",
+ "Apps": "Apps",
+ "User Interface": "Benutzeroberfläche",
+ "Mail Templates": "Mail-Vorlagen",
+ "Welcome": "Herzlich willkommen",
+ "Reset Password": "Passwort zurücksetzen",
+ "Verify Email": "E-Mail bestätigen",
+ "Deactivate Account": "Benutzerkonto deaktivieren",
+ "Promotional": "Werbung",
+ "Page Layouts": "Seitenlayouts",
+ "Collapsed Menu": "Reduziertes Menü",
+ "Layout Boxed": "Layout Boxed",
+ "Without Menu": "Ohne Menü",
+ "Layout Empty": "Layout leer",
+ "Layout Blank": "Layout leer"
+}
diff --git a/src/libs/i18n/locales/en.json b/src/libs/i18n/locales/en.json
new file mode 100644
index 0000000..6907201
--- /dev/null
+++ b/src/libs/i18n/locales/en.json
@@ -0,0 +1,177 @@
+{
+ "message": {
+ "title": "Card Title",
+ "text": "Cake sesame snaps cupcake gingerbread danish I love gingerbread. Apple pie pie jujubes chupa chups muffin halvah lollipop. Chocolate cake oat cake tiramisu marzipan sugar plum. Donut sweet pie oat cake dragée fruitcake cotton candy lemon drops.",
+ "pagelength": "Showing 1 to",
+ "of": "of",
+ "pageText2": "entries",
+ "seachLabel": "Search",
+ "SearchPlaceholder": "Search",
+ "tableHeader": {
+ "name": "Name",
+ "email": "Email",
+ "date": "Date",
+ "salary": "Salary",
+ "status": "Status",
+ "action": "Action"
+ }
+ },
+ "UI Elements": "UI Elements",
+ "Forms & Tables": "Forms & Tables",
+ "Pages": "Pages",
+ "Charts & Maps": "Charts & Maps",
+ "Others": "Others",
+ "Typography": "Typography",
+ "Colors": "Colors",
+ "Feather": "Feather",
+ "Cards": "Cards",
+ "Basic": "Basic",
+ "Advance": "Advance",
+ "Statistic": "Statistic",
+ "Analytic": "Analytic",
+ "Card Action": "Card Action",
+ "Components": "Components",
+ "Alert": "Alert",
+ "Aspect": "Aspect",
+ "Avatar": "Avatar",
+ "Badge": "Badge",
+ "Breadcrumb": "Breadcrumb",
+ "Button": "Button",
+ "Button Group": "Button Group",
+ "Button Toolbar": "Button Toolbar",
+ "Calendar": "Calendar",
+ "Carousel": "Carousel",
+ "Collapse": "Collapse",
+ "Dropdown": "Dropdown",
+ "Embed": "Embed",
+ "Image": "Image",
+ "List Group": "List Group",
+ "Media": "Media",
+ "Modal": "Modal",
+ "Nav": "Nav",
+ "Overlay": "Overlay",
+ "Pagination": "Pagination",
+ "Pagination Nav": "Pagination Nav",
+ "Pill": "Pill",
+ "Pill Badge": "Pill Badge",
+ "Popover": "Popover",
+ "Progress": "Progress",
+ "Sidebar": "Sidebar",
+ "spinner": "spinner",
+ "Tab": "Tab",
+ "Time": "Time",
+ "Toasts": "Toasts",
+ "Tooltip": "Tooltip",
+ "Extensions": "Extensions",
+ "Sweet Alert": "Sweet Alert",
+ "Quill Editor": "Quill Editor",
+ "Drag & Drop": "Drag & Drop",
+ "Swiper": "Swiper",
+ "Clipboard": "Clipboard",
+ "Video Player": "Video Player",
+ "Context Menu": "Context Menu",
+ "Toastification": "Toastification",
+ "I18n": "I18n",
+ "Slider": "Slider",
+ "Tour": "Tour",
+ "Auto Suggest": "Auto Suggest",
+ "Tree": "Tree",
+ "Date Time Picker": "Date Time Picker",
+ "Vue Select": "Vue Select",
+ "Forms Elements": "Forms elements",
+ "Select": "Select",
+ "Switch": "Switch",
+ "Checkbox": "Checkbox",
+ "Radio": "Radio",
+ "Input": "Input",
+ "Textarea": "Textarea",
+ "Spinbutton": "Spinbutton",
+ "Input Group": "Input Group",
+ "Form Rating": "Form Rating",
+ "Form Tag": "Form Tag",
+ "Form Datepicker": "Form Datepicker",
+ "Form Timepicker": "Form Timepicker",
+ "File Input": "File Input",
+ "Input Mask": "Input Mask",
+ "Form Layout": "Form Layout",
+ "Form Wizard": "Form Wizard",
+ "Form Validation": "Form Validation",
+ "Form Repeater": "Form Repeater",
+ "BS Table": "BS Table",
+ "Good Table": "Good Table",
+ "Charts": "Charts",
+ "Apex Chart": "Apex Chart",
+ "Chartjs": "Chartjs",
+ "Echart": "Echart",
+ "Leaflet": "Leaflet",
+ "Profile": "Profile",
+ "Account Settings": "Account Settings",
+ "Faq": "Faq",
+ "Knowledge Base": "Knowledge Base",
+ "Pricing": "Pricing",
+ "Blog": "Blog",
+ "List": "List",
+ "Detail": "Detail",
+ "Edit": "Edit",
+ "Search": "Search",
+ "Menu Levels": "Menu Levels",
+ "Menu Level 2.1": "Menu Level 2.1",
+ "Menu Level 2.2": "Menu Level 2.2",
+ "Menu Level 3.1": "Menu Level 3.1",
+ "Menu Level 3.2": "Menu Level 3.2",
+ "Disabled Menu": "Disabled Menu",
+ "Support": "Support",
+ "Raise Support": "Raise Support",
+ "Documentation": "Documentation",
+ "Dashboards": "Dashboards",
+ "eCommerce": "eCommerce",
+ "Analytics": "Analytics",
+ "Apps & Pages": "Apps & Pages",
+ "Email": "Email",
+ "Chat": "Chat",
+ "Todo": "Todo",
+ "Invoice": "Invoice",
+ "Preview": "Preview",
+ "Add": "Add",
+ "Shop": "Shop",
+ "Details": "Details",
+ "Wishlist": "Wishlist",
+ "Checkout": "Checkout",
+ "User": "User",
+ "View": "View",
+ "Authentication": "Authentication",
+ "Login v1": "Login v1",
+ "Login v2": "Login v2",
+ "Register v1": "Register v1",
+ "Register v2": "Register v2",
+ "Forget Password v1": "Forget Password v1",
+ "Forget Password v2": "Forget Password v2",
+ "Forgot Password v1": "Forgot Password v1",
+ "Forgot Password v2": "Forgot Password v2",
+ "Reset Password v1": "Reset Password v1",
+ "Reset Password v2": "Reset Password v2",
+ "Miscellaneous": "Miscellaneous",
+ "Coming Soon": "Coming Soon",
+ "Not Authorized": "Not Authorized",
+ "Under Maintenance": "Under Maintenance",
+ "Error": "Error",
+ "Statistics": "Statistics",
+ "Card Actions": "Card Actions",
+ "Media Objects": "Media Objects",
+ "Timeline": "Timeline",
+ "Access Control": "Access Control",
+ "Apps": "Apps",
+ "User Interface": "User Interface",
+ "Mail Templates": "Mail Templates",
+ "Welcome": "Welcome",
+ "Reset Password": "Reset Password",
+ "Verify Email": "Verify Email",
+ "Deactivate Account": "Deactivate Account",
+ "Promotional": "Promotional",
+ "Page Layouts": "Page Layouts",
+ "Collapsed Menu": "Collapsed Menu",
+ "Layout Boxed": "Layout Boxed",
+ "Without Menu": "Without Menu",
+ "Layout Empty": "Layout Empty",
+ "Layout Blank": "Layout Blank"
+}
diff --git a/src/libs/i18n/locales/fr.json b/src/libs/i18n/locales/fr.json
new file mode 100644
index 0000000..892ae79
--- /dev/null
+++ b/src/libs/i18n/locales/fr.json
@@ -0,0 +1,181 @@
+{
+ "message": {
+ "title": "Titre de la carte",
+ "text": "Le gâteau au sésame s'enclenche au petit pain au pain d'épices danois J'adore le pain d'épices. Tarte aux pommes et jujubes chupa chups muffin halvah sucette. Tiramisu gâteau au chocolat gâteau d'avoine tiramisu prune sucre. Donut tarte sucrée gâteau à l'avoine dragée gouttes de fruits gâteau au citron en barbe à papa.",
+ "pagelength": "Affichage de 1 à",
+ "of": "de",
+ "pageText2": "entrées",
+ "seachLabel": "Chercher",
+ "SearchPlaceholder": "Chercher",
+ "tableHeader": {
+ "name": "Nom",
+ "email": "Email",
+ "date": "Date",
+ "salary": "Un salaire",
+ "status": "Statut",
+ "action": "action"
+ }
+ },
+ "UI Elements": "ÉLÉMENTS DE L'UI",
+ "Forms & Tables": "Formulaires et tableaux",
+ "Pages": "Des pages",
+ "Charts & Maps": "Graphiques et cartes",
+ "Others": "Autres",
+ "Typography": "Typographie",
+ "Colors": "Colors",
+ "Feather": "Plume",
+ "Cards": "Cartes",
+ "Basic": "De base",
+ "Advance": "Avance",
+ "Statistic": "Statistique",
+ "Analytic": "Analytique",
+ "Card Action": "Action de la carte",
+ "Components": "Composants",
+ "Alert": "Alerte",
+ "Aspect": "Aspect",
+ "Avatar": "Avatar",
+ "Badge": "Badge",
+ "Breadcrumb": "Miette de pain",
+ "Button": "Bouton",
+ "Button Group": "Groupe de boutons",
+ "Button Toolbar": "Barre d'outils des boutons",
+ "Calendar": "Calendrier",
+ "Carousel": "Carrousel",
+ "Collapse": "Effondrer",
+ "Dropdown": "Menu déroulant",
+ "Embed": "Incorporer",
+ "Image": "Image",
+ "List Group": "Groupe de listes",
+ "Media": "Médias",
+ "Modal": "Modal",
+ "Nav": "Nav",
+ "Overlay": "Recouvrir",
+ "Pagination": "Pagination",
+ "Pagination Nav": "Nav de pagination",
+ "Pill": "Pilule",
+ "Pill Badge": "Badge de pilule",
+ "Popover": "Popover",
+ "Progress": "Le progrès",
+ "Sidebar": "Barre latérale",
+ "spinner": "fileur",
+ "Tab": "Languette",
+ "Time": "Temps",
+ "Toasts": "Toasts",
+ "Tooltip": "Info-bulle",
+ "Extensions": "Extensions",
+ "Sweet Alert": "Douce alerte",
+ "Quill Editor": "Éditeur de plumes",
+ "Drag & Drop": "Glisser-déposer",
+ "Swiper": "Swiper",
+ "Clipboard": "Presse-papiers",
+ "Video Player": "Lecteur vidéo",
+ "Context Menu": "Menu contextuel",
+ "Toastification": "Toastification",
+ "I18n": "I18n",
+ "Slider": "Glissière",
+ "Tour": "Tour",
+ "Auto Suggest": "Suggestion automatique",
+ "Tree": "Arbre",
+ "Date Time Picker": "Sélecteur de date et d'heure",
+ "Vue Select": "Vue Select",
+ "Forms Elements": "Éléments de formulaires",
+ "Select": "Sélectionner",
+ "Switch": "Commutateur",
+ "Checkbox": "Case à cocher",
+ "Radio": "Radio",
+ "Input": "Contribution",
+ "Textarea": "Textarea",
+ "Spinbutton": "Bouton tournant",
+ "Input Group": "Groupe d'entrée",
+ "Form Rating": "Évaluation du formulaire",
+ "Form Tag": "Balise de formulaire",
+ "Form Datepicker": "Formulaire Datepicker",
+ "Form Timepicker": "Timepicker de formulaire",
+ "File Input": "Entrée de fichier",
+ "Input Mask": "Masque de saisie",
+ "Form Layout": "Disposition du formulaire",
+ "Form Wizard": "Assistant de formulaire",
+ "Form Validation": "Validation de formulaire",
+ "Form Repeater": "Répéteur de formulaire",
+ "BS Table": "Tableau BS",
+ "Good Table": "Bonne table",
+ "Charts": "Graphiques",
+ "Apex Chart": "Graphique Apex",
+ "Chartjs": "Chartjs",
+ "Echart": "Echart",
+ "Leaflet": "Brochure",
+ "Profile": "Profil",
+ "Account Settings": "Paramètres du compte",
+ "Faq": "FAQ",
+ "Knowledge Base": "Base de connaissances",
+ "Pricing": "Tarification",
+ "Blog": "Blog",
+ "List": "liste",
+ "Detail": "Détail",
+ "Edit": "Éditer",
+ "Search": "Chercher",
+ "Menu Levels": "Niveaux de menu",
+ "Menu Level2.1": "Niveau de menu 2.1",
+ "Menu Level2.2": "Niveau de menu 2.2",
+ "Menu Level3.1": "Niveau de menu 3.1",
+ "Menu Level3.2": "Niveau de menu 3.2",
+ "Disabled Menu": "Menu désactivé",
+ "Support": "Soutien",
+ "Raise Support": "Augmenter le soutien",
+ "Documentation": "Documentation",
+ "Dashboards": "Tableaux de bord",
+ "eCommerce": "commerce électronique",
+ "Analytics": "Analytique",
+ "Apps & Pages": "Applications et pages",
+ "Email": "Email",
+ "Chat": "Bavarder",
+ "Todo": "Faire",
+ "Invoice": "Facture d'achat",
+ "Preview": "Aperçu",
+ "Add": "Ajouter",
+ "Shop": "Boutique",
+ "Details": "Détails",
+ "Wishlist": "Liste de souhaits",
+ "Checkout": "Check-out",
+ "User": "Utilisateur",
+ "View": "Vue",
+ "Authentication": "Authentification",
+ "Login v1": "Connexion v1",
+ "Login v2": "Connexion v2",
+ "Register v1": "S'inscrire v1",
+ "Register v2": "S'inscrire v2",
+ "Forget Password v1": "Oubliez le mot de passe v1",
+ "Forget Password v2": "Oubliez le mot de passe v2",
+ "Forgot Password v1": "Oubliez le mot de passe v1",
+ "Forgot Password v2": "Oubliez le mot de passe v2",
+ "Reset Password v1": "Réinitialiser le mot de passe v1",
+ "Reset Password v2": "Réinitialiser le mot de passe v2",
+ "Miscellaneous": "Divers",
+ "Coming Soon": "Bientôt disponible",
+ "Not Authorized": "Pas autorisé",
+ "Under Maintenance": "En maintenance",
+ "Error": "Erreur",
+ "Statistics": "Statistiques",
+ "Card Actions": "Actions de la carte",
+ "Media Objects": "Objets multimédias",
+ "Timeline": "Chronologie",
+ "Access Control": "Contrôle d'accès",
+ "Menu Level 2.1": "Niveau de menu 2.1",
+ "Menu Level 2.2": "Niveau de menu 2.2",
+ "Menu Level 3.1": "Niveau de menu 3.1",
+ "Menu Level 3.2": "Niveau de menu 3.2",
+ "Apps": "applications",
+ "User Interface": "Interface utilisateur",
+ "Mail Templates": "Modèles de courrier",
+ "Welcome": "Bienvenue",
+ "Reset Password": "réinitialiser le mot de passe",
+ "Verify Email": "Vérifier les courriels",
+ "Deactivate Account": "Désactiver le compte",
+ "Promotional": "Promotionnel",
+ "Page Layouts": "Mises en page",
+ "Collapsed Menu": "Menu réduit",
+ "Layout Boxed": "Disposition encadrée",
+ "Without Menu": "Sans menu",
+ "Layout Empty": "Disposition vide",
+ "Layout Blank": "Mise en page vierge"
+}
diff --git a/src/libs/i18n/locales/pt.json b/src/libs/i18n/locales/pt.json
new file mode 100644
index 0000000..2926dac
--- /dev/null
+++ b/src/libs/i18n/locales/pt.json
@@ -0,0 +1,182 @@
+{
+ "message": {
+ "title": "Título do cartão",
+ "text": "O sésamo do bolo agarra dinamarquês do pão-de-espécie do queque eu amo o pão-de-espécie. Torta de torta de maçã jujuba chupa chups muffin halvah pirulito. Ameixa do açúcar do maçapão do tiramisu do bolo da aveia do bolo de chocolate. Bolo de aveia de torta doce rosquinha dragée fruitcake algodão doce gotas de limão.",
+ "pagelength": "Mostrando 1 para",
+ "of": "do",
+ "pageText2": "entradas",
+ "seachLabel": "Procurar",
+ "SearchPlaceholder": "Procurar",
+ "tableHeader": {
+ "name": "nome",
+ "email": "O email",
+ "date": "Encontro",
+ "salary": "Salário",
+ "status": "Status",
+ "action": "Açao"
+ }
+ },
+ "UI Elements": "Elementos da IU",
+ "Forms & Tables": "Formulários e tabelas",
+ "Pages": "Páginas",
+ "Charts & Maps": "Gráficos e mapas",
+ "Others": "Outras",
+ "Typography": "Tipografia",
+ "Colors": "Cores",
+ "Feather": "Pena",
+ "Cards": "Cartas",
+ "Basic": "Básico",
+ "Advance": "Avançar",
+ "Statistic": "Estatística",
+ "Analytic": "Analítico",
+ "Card Action": "Ação do cartão",
+ "Components": "Componentes",
+ "Alert": "Alerta",
+ "Aspect": "Aspecto",
+ "Avatar": "Avatar",
+ "Badge": "Distintivo",
+ "Breadcrumb": "Migalhas de pão",
+ "Button": "Botão",
+ "Button Group": "Grupo de Botão",
+ "Button Toolbar": "Barra de ferramentas de botões",
+ "Calendar": "Calendário",
+ "Carousel": "Carrossel",
+ "Collapse": "Colapso",
+ "Dropdown": "Suspenso",
+ "Embed": "Embutir",
+ "Image": "Imagem",
+ "List Group": "Grupo de Lista",
+ "Media": "meios de comunicação",
+ "Modal": "Modal",
+ "Nav": "Nav",
+ "Overlay": "Sobreposição",
+ "Pagination": "Paginação",
+ "Pagination Nav": "Nav de paginação",
+ "Pill": "Comprimido",
+ "Pill Badge": "Emblema de comprimido",
+ "Popover": "Dar um pulo",
+ "Progress": "Progresso",
+ "Sidebar": "Barra Lateral",
+ "spinner": "spinner",
+ "Tab": "Aba",
+ "Time": "Tempo",
+ "Toasts": "Torradas",
+ "Tooltip": "Dica de ferramenta",
+ "Extensions": "Extensões",
+ "Sweet Alert": "Alerta Doce",
+ "Quill Editor": "Editor de pena",
+ "Drag & Drop": "Arraste e solte",
+ "Swiper": "Swiper",
+ "Clipboard": "Prancheta",
+ "Video Player": "Video Player",
+ "Context Menu": "Menu contextual",
+ "Toastification": "Toastification",
+ "I18n": "I18n",
+ "Slider": "Slider",
+ "Tour": "Tour",
+ "Auto Suggest": "Sugestão Automática",
+ "Tree": "Árvore",
+ "Date Time Picker": "Selecionador de data e hora",
+ "Vue Select": "Vue Select",
+ "Forms Elements": "Elementos de formulários",
+ "Select": "Selecione",
+ "Switch": "Interruptor",
+ "Checkbox": "Caixa de seleção",
+ "Radio": "Rádio",
+ "Input": "Entrada",
+ "Textarea": "Textarea",
+ "Spinbutton": "Spinbutton",
+ "Input Group": "Grupo de Entrada",
+ "Form Rating": "Avaliação do formulário",
+ "Form Tag": "Tag de formulário",
+ "Form Datepicker": "Selecionador de data do formulário",
+ "Form Timepicker": "Timepicker de formulário",
+ "File Input": "Entrada de arquivo",
+ "Input Mask": "Máscara de entrada",
+ "Form Layout": "Layout do formulário",
+ "Form Wizard": "Assistente de Formulários",
+ "Form Validation": "Validação de Formulário",
+ "Form Repeater": "Repetidor de Formulário",
+ "BS Table": "Mesa BS",
+ "Good Table": "Boa mesa",
+ "Charts": "Gráficos",
+ "ApexChart": "Apex Chart",
+ "Chartjs": "Chartjs",
+ "Echart": "Echart",
+ "Leaflet": "Folheto",
+ "Profile": "Perfil",
+ "Account Settings": "Configurações da conta",
+ "Faq": "Perguntas frequentes",
+ "Knowledge Base": "Base de Conhecimento",
+ "Pricing": "Preços",
+ "Blog": "Blog",
+ "List": "Lista",
+ "Detail": "Detalhe",
+ "Edit": "Editar",
+ "Search": "Pesquisa",
+ "Menu Levels": "Níveis de Menu",
+ "Menu Level2.1": "Nível de Menu 2.1",
+ "Menu Level2.2": "Nível de Menu 2.2",
+ "Menu Level3.1": "Nível de Menu 3.1",
+ "Menu Level3.2": "Nível de Menu 3.2",
+ "Disabled Menu": "Menu Desabilitado",
+ "Support": "Apoio, suporte",
+ "Raise Support": "Levante o Suporte",
+ "Documentation": "Documentação",
+ "Dashboards": "Dashboards",
+ "Apps & Pages": "Aplicativos e páginas",
+ "Email": "O email",
+ "Chat": "Bate-papo",
+ "Todo": "Façam",
+ "Invoice": "Fatura",
+ "Preview": "Antevisão",
+ "Add": "Adicionar",
+ "eCommerce": "comércio eletrônico",
+ "Shop": "fazer compras",
+ "Details": "Detalhes",
+ "Wishlist": "Lista de Desejos",
+ "Checkout": "Verificação de saída",
+ "User": "Do utilizador",
+ "View": "Visão",
+ "Authentication": "Autenticação",
+ "Login v1": "Login v1",
+ "Login v2": "Login v2",
+ "Register v1": "Registrar v1",
+ "Register v2": "Registrar v2",
+ "Forget Password v1": "Esquecer a senha v1",
+ "Forget Password v2": "Esquecer a senha v2",
+ "Forgot Password v1": "Esquecer a senha v1",
+ "Forgot Password v2": "Esquecer a senha v2",
+ "Reset Password v1": "Redefinir senha v1",
+ "Reset Password v2": "Redefinir senha v2",
+ "Miscellaneous": "Diversos",
+ "Coming Soon": "Em breve",
+ "Not Authorized": "Não autorizado",
+ "Under Maintenance": "Em manutenção",
+ "Error": "Erro",
+ "Statistics": "Estatisticas",
+ "Analytics": "Analytics",
+ "Card Actions": "Ações do cartão",
+ "Media Objects": "Objetos de mídia",
+ "Timeline": "Linha do tempo",
+ "Apex Chart": "Apex Chart",
+ "Access Control": "Controle de acesso",
+ "Menu Level 2.1": "Nível de Menu 2.1",
+ "Menu Level 2.2": "Nível de Menu 2.2",
+ "Menu Level 3.1": "Nível de Menu 3.1",
+ "Menu Level 3.2": "Nível de Menu 3.2",
+ "Apps": "Apps",
+ "User Interface": "Interface de usuário",
+ "Mail Templates": "Modelos de Correio",
+ "Welcome": "Bem-vinda",
+ "Reset Password": "Redefinir senha",
+ "Verify Email": "Verificar e-mail",
+ "Deactivate Account": "Desativar conta",
+ "Promotional": "Promocional",
+ "Page Layouts": "Layouts de página",
+ "Collapsed Menu": "Menu recolhido",
+ "Layout Boxed": "Layout em caixa",
+ "Without Menu": "Sem Menu",
+ "Layout Empty": "Layout Vazio",
+ "Layout Blank": "Layout em branco"
+}
diff --git a/src/libs/portal-vue.js b/src/libs/portal-vue.js
new file mode 100644
index 0000000..439021b
--- /dev/null
+++ b/src/libs/portal-vue.js
@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import PortalVue from 'portal-vue'
+
+Vue.use(PortalVue)
diff --git a/src/libs/sweet-alerts.js b/src/libs/sweet-alerts.js
new file mode 100644
index 0000000..da4faad
--- /dev/null
+++ b/src/libs/sweet-alerts.js
@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import VueSweetalert2 from 'vue-sweetalert2'
+
+Vue.use(VueSweetalert2)
diff --git a/src/libs/toastification.js b/src/libs/toastification.js
new file mode 100644
index 0000000..6025dbe
--- /dev/null
+++ b/src/libs/toastification.js
@@ -0,0 +1,15 @@
+import Vue from 'vue'
+import Toast from 'vue-toastification'
+
+// 通知组件样式
+import '@core/scss/vue/libs/toastification.scss'
+
+// ! 如果要使用其他过渡(transition),请确保将其从源文件导入至`src/@core/scss/vue/libs/notification.scss`
+Vue.use(Toast, {
+ hideProgressBar: true,
+ closeOnClick: false,
+ closeButton: false,
+ icon: false,
+ timeout: 3000,
+ transition: 'Vue-Toastification__fade',
+})
diff --git a/src/libs/tour.js b/src/libs/tour.js
new file mode 100644
index 0000000..16926d2
--- /dev/null
+++ b/src/libs/tour.js
@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import VueTour from 'vue-tour'
+
+Vue.use(VueTour)
diff --git a/src/libs/vue-select.js b/src/libs/vue-select.js
new file mode 100644
index 0000000..0638033
--- /dev/null
+++ b/src/libs/vue-select.js
@@ -0,0 +1,14 @@
+import Vue from 'vue'
+import vSelect from 'vue-select'
+
+// 设置默认组件 prop 使其返回到模板组件中
+vSelect.props.components.default = () => ({
+ Deselect: {
+ render: h => h('feather-icon', { props: { size: '14', icon: 'XIcon' } }),
+ },
+ OpenIndicator: {
+ render: h => h('feather-icon', { props: { size: '15', icon: 'ChevronDownIcon' }, class: 'open-indicator' }),
+ },
+})
+
+Vue.component(vSelect)
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..1979300
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,35 @@
+import Vue from 'vue'
+import { ToastPlugin, ModalPlugin } from 'bootstrap-vue'
+import VueCompositionAPI from '@vue/composition-api'
+
+import router from './router'
+import store from './store'
+import App from './App.vue'
+
+// 全局组件
+import './global-components'
+
+// 第三方插件
+import '@/libs/portal-vue'
+import '@/libs/toastification'
+
+// 插件注册
+Vue.use(ToastPlugin)
+Vue.use(ModalPlugin)
+
+// Composition API
+Vue.use(VueCompositionAPI)
+
+// 导入核心样式
+require('@core/scss/core.scss')
+
+// 导入通用样式
+require('@/assets/scss/style.scss')
+
+Vue.config.productionTip = false
+
+new Vue({
+ router,
+ store,
+ render: h => h(App),
+}).$mount('#app')
diff --git a/src/navigation/horizontal/index.js b/src/navigation/horizontal/index.js
new file mode 100644
index 0000000..5b4c5d9
--- /dev/null
+++ b/src/navigation/horizontal/index.js
@@ -0,0 +1,28 @@
+export default [
+ {
+ header: 'Pages',
+ icon: 'FileIcon',
+ children: [
+ {
+ title: '主页',
+ route: 'home',
+ icon: 'HomeIcon',
+ },
+ {
+ title: '第二页',
+ route: 'second-page',
+ icon: 'FileIcon',
+ },
+ {
+ title: '登录页',
+ route: 'login',
+ icon: 'LogInIcon',
+ },
+ {
+ title: '错误页',
+ route: 'error-404',
+ icon: 'XIcon',
+ },
+ ],
+ },
+]
diff --git a/src/navigation/vertical/index.js b/src/navigation/vertical/index.js
new file mode 100644
index 0000000..05834bc
--- /dev/null
+++ b/src/navigation/vertical/index.js
@@ -0,0 +1,22 @@
+export default [
+ {
+ title: '主页',
+ route: 'home',
+ icon: 'HomeIcon',
+ },
+ {
+ title: '第二页',
+ route: 'second-page',
+ icon: 'FileIcon',
+ },
+ {
+ title: '登录页',
+ route: 'login',
+ icon: 'LogInIcon',
+ },
+ {
+ title: '错误页',
+ route: 'error-404',
+ icon: 'XIcon',
+ },
+]
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..b73a22f
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,74 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+
+Vue.use(VueRouter)
+
+const router = new VueRouter({
+ mode: 'history',
+ base: process.env.BASE_URL,
+ scrollBehavior() {
+ return { x: 0, y: 0 }
+ },
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: () => import('@/views/Home.vue'),
+ meta: {
+ pageTitle: '主页',
+ breadcrumb: [
+ {
+ text: '主页',
+ active: true,
+ },
+ ],
+ },
+ },
+ {
+ path: '/second-page',
+ name: 'second-page',
+ component: () => import('@/views/SecondPage.vue'),
+ meta: {
+ pageTitle: '第二页',
+ breadcrumb: [
+ {
+ text: '第二页',
+ active: true,
+ },
+ ],
+ },
+ },
+ {
+ path: '/login',
+ name: 'login',
+ component: () => import('@/views/Login.vue'),
+ meta: {
+ layout: 'full',
+ },
+ },
+ {
+ path: '/error-404',
+ name: 'error-404',
+ component: () => import('@/views/error/Error404.vue'),
+ meta: {
+ layout: 'full',
+ },
+ },
+ {
+ path: '*',
+ redirect: 'error-404',
+ },
+ ],
+})
+
+// ? 加载画面
+// 如果不使用加载画面,请删除所有钩子
+router.afterEach(() => {
+ // 删除初始加载
+ const appLoading = document.getElementById('loading-bg')
+ if (appLoading) {
+ appLoading.style.display = 'none'
+ }
+})
+
+export default router
diff --git a/src/store/app-config/index.js b/src/store/app-config/index.js
new file mode 100644
index 0000000..4aa65cb
--- /dev/null
+++ b/src/store/app-config/index.js
@@ -0,0 +1,60 @@
+import { $themeConfig } from '@themeConfig'
+
+export default {
+ namespaced: true,
+ state: {
+ layout: {
+ isRTL: $themeConfig.layout.isRTL,
+ skin: localStorage.getItem('Rexo-skin') || $themeConfig.layout.skin,
+ routerTransition: $themeConfig.layout.routerTransition,
+ type: $themeConfig.layout.type,
+ contentWidth: $themeConfig.layout.contentWidth,
+ menu: {
+ hidden: $themeConfig.layout.menu.hidden,
+ },
+ navbar: {
+ type: $themeConfig.layout.navbar.type,
+ backgroundColor: $themeConfig.layout.navbar.backgroundColor,
+ },
+ footer: {
+ type: $themeConfig.layout.footer.type,
+ },
+ },
+ },
+ getters: {},
+ mutations: {
+ TOGGLE_RTL(state) {
+ state.layout.isRTL = !state.layout.isRTL
+ document.documentElement.setAttribute('dir', state.layout.isRTL ? 'rtl' : 'ltr')
+ },
+ UPDATE_SKIN(state, skin) {
+ state.layout.skin = skin
+
+ // 更新本地存储中的值
+ localStorage.setItem('Rexo-skin', skin)
+
+ // 更新深色布局的 DOM
+ if (skin === 'dark') document.body.classList.add('dark-layout')
+ else if (document.body.className.match('dark-layout')) document.body.classList.remove('dark-layout')
+ },
+ UPDATE_ROUTER_TRANSITION(state, val) {
+ state.layout.routerTransition = val
+ },
+ UPDATE_LAYOUT_TYPE(state, val) {
+ state.layout.type = val
+ },
+ UPDATE_CONTENT_WIDTH(state, val) {
+ state.layout.contentWidth = val
+ },
+ UPDATE_NAV_MENU_HIDDEN(state, val) {
+ state.layout.menu.hidden = val
+ },
+ UPDATE_NAVBAR_CONFIG(state, obj) {
+ Object.assign(state.layout.navbar, obj)
+ },
+ UPDATE_FOOTER_CONFIG(state, obj) {
+ Object.assign(state.layout.footer, obj)
+ },
+ },
+ actions: {},
+}
diff --git a/src/store/app/index.js b/src/store/app/index.js
new file mode 100644
index 0000000..4ee886e
--- /dev/null
+++ b/src/store/app/index.js
@@ -0,0 +1,28 @@
+import { $themeBreakpoints } from '@themeConfig'
+
+export default {
+ namespaced: true,
+ state: {
+ windowWidth: 0,
+ shallShowOverlay: false,
+ },
+ getters: {
+ currentBreakPoint: state => {
+ const { windowWidth } = state
+ if (windowWidth >= $themeBreakpoints.xl) return 'xl'
+ if (windowWidth >= $themeBreakpoints.lg) return 'lg'
+ if (windowWidth >= $themeBreakpoints.md) return 'md'
+ if (windowWidth >= $themeBreakpoints.sm) return 'sm'
+ return 'xs'
+ },
+ },
+ mutations: {
+ UPDATE_WINDOW_WIDTH(state, val) {
+ state.windowWidth = val
+ },
+ TOGGLE_OVERLAY(state, val) {
+ state.shallShowOverlay = val !== undefined ? val : !state.shallShowOverlay
+ },
+ },
+ actions: {},
+}
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..877dbeb
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,18 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+// 模块
+import app from './app'
+import appConfig from './app-config'
+import verticalMenu from './vertical-menu'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+ modules: {
+ app,
+ appConfig,
+ verticalMenu,
+ },
+ strict: process.env.DEV,
+})
diff --git a/src/store/vertical-menu/index.js b/src/store/vertical-menu/index.js
new file mode 100644
index 0000000..302b25a
--- /dev/null
+++ b/src/store/vertical-menu/index.js
@@ -0,0 +1,15 @@
+import { $themeConfig } from '@themeConfig'
+
+export default {
+ namespaced: true,
+ state: {
+ isVerticalMenuCollapsed: $themeConfig.layout.menu.isCollapsed,
+ },
+ getters: {},
+ mutations: {
+ UPDATE_VERTICAL_MENU_COLLAPSED(state, val) {
+ state.isVerticalMenuCollapsed = val
+ },
+ },
+ actions: {},
+}
diff --git a/src/views/Home.vue b/src/views/Home.vue
new file mode 100644
index 0000000..cb9d0db
--- /dev/null
+++ b/src/views/Home.vue
@@ -0,0 +1,53 @@
+
+
+
+ 此 DEMO 为 Rexo-UI Vue + BootstrapVue 版的基础版
+ 请务必阅读
+
+ 开发文档
+ 以了解如何使用模板和详细的开发流程。同时 Rexo-UI 还有
+
+ H5 版
+ 和正在开发的
+
+ Vue 3 + Element-plus 版
+ 。
+
+
+
+
+ 请移步至
+ Rexo-UI 官网
+ 限时特价购买。
+ 常规版包含完整的用户验证(Auth + ACL 鉴权)、界面定制器、i18n 组件多语言国际化、Axios 和多达 200 多种定制页面/卡片/组件。
+
+
+
+
+
+
+
diff --git a/src/views/Login.vue b/src/views/Login.vue
new file mode 100644
index 0000000..3e2b23f
--- /dev/null
+++ b/src/views/Login.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+ Rexo-UI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 欢迎使用 Rexo-UI - VueJS & HTML 网站/后台管理模板 👋
+
+
+ 请登录您的帐户开始体验
+
+
+
+
+
+
+
+
+
+ {{ errors[0] }}
+
+
+
+
+
+
+
+
+ 忘记密码?
+
+
+
+
+
+
+
+
+
+ {{ errors[0] }}
+
+
+
+
+
+
+ 记住我
+
+
+
+
+
+ 登录
+
+
+
+
+
+ 没有帐号?
+
+ 点此注册
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/SecondPage.vue b/src/views/SecondPage.vue
new file mode 100644
index 0000000..fb503d8
--- /dev/null
+++ b/src/views/SecondPage.vue
@@ -0,0 +1,20 @@
+
+
+ Rexo-UI 基础版包含了完整的常规版核心组件代码,可以根据实际开发各种主页、文档、博客、邮件、电商等前端及各种后台 CMS 前端。
+
+
+
+
+
+
diff --git a/src/views/error/Error404.vue b/src/views/error/Error404.vue
new file mode 100644
index 0000000..4000f25
--- /dev/null
+++ b/src/views/error/Error404.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+ Rexo-UI
+
+
+
+
+
+
+ 找不到页面 🕵🏻♀️😖 404
+
+
+ 在此服务器上找不到请求的 URL
+
+
+
+ 返回首页
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/themeConfig.js b/themeConfig.js
new file mode 100644
index 0000000..5bb17ca
--- /dev/null
+++ b/themeConfig.js
@@ -0,0 +1,36 @@
+// 主题颜色(最初为空白,当应用初始化时将从 CSS 变量分配 bootstrap 颜色)
+export const $themeColors = {}
+
+// 主题断点(最初为空白,当应用初始化时将从 CSS 变量分配 bootstrap 断点)
+export const $themeBreakpoints = {}
+
+// 主题配置
+export const $themeConfig = {
+ app: {
+ appName: 'Rexo-UI',
+ // eslint-disable-next-line global-require
+ appLogoImage: require('@/assets/images/logo/logo.svg'),
+ },
+ // 初始布局
+ layout: {
+ isRTL: false,
+ skin: 'light', // 全局皮肤(light, dark, bordered, semi-dark)
+ routerTransition: 'zoom-fade', // 路由转场效果(zoom-fade, slide-fade, fade-bottom, fade, zoom-out, none)
+ type: 'vertical', // 导航布局(vertical, horizontal)
+ contentWidth: 'full', // 内容宽度(full, boxed)
+ menu: {
+ hidden: false,
+ isCollapsed: false,
+ },
+ navbar: {
+ // ? 水平导航布局中,副导航栏样式适用于主导航栏
+ type: 'floating', // 副导航栏样式(static , sticky , floating, hidden)
+ backgroundColor: '', // Bootstrap 颜色选项(如:primary, success 等)
+ },
+ footer: {
+ type: 'static', // 页脚样式(static, sticky, hidden)
+ },
+ customizer: true,
+ enableScrollToTop: true,
+ },
+}
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..c1fe9f7
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,60 @@
+const path = require('path')
+const CompressionPlugin = require('compression-webpack-plugin')
+
+module.exports = {
+ publicPath: '/',
+ lintOnSave: false,
+ css: {
+ loaderOptions: {
+ sass: {
+ sassOptions: {
+ includePaths: ['./node_modules', './src/assets'],
+ },
+ },
+ },
+ },
+ productionSourceMap: false,
+ configureWebpack: {
+ plugins: [
+ new CompressionPlugin({
+ filename: '[path].gz',
+ algorithm: 'gzip',
+ test: /\.js$|\.css$|\.html$/,
+ threshold: 10240,
+ minRatio: 0.8,
+ deleteOriginalAssets: false,
+ }),
+ ],
+ resolve: {
+ alias: {
+ '@themeConfig': path.resolve(__dirname, 'themeConfig.js'),
+ '@core': path.resolve(__dirname, 'src/@core'),
+ '@validations': path.resolve(__dirname, 'src/@core/utils/validations/validations.js'),
+ '@axios': path.resolve(__dirname, 'src/libs/axios'),
+ },
+ },
+ },
+ chainWebpack: config => {
+ config.module
+ .rule('vue')
+ .use('vue-loader')
+ .loader('vue-loader')
+ .tap(options => {
+ // eslint-disable-next-line no-param-reassign
+ options.transformAssetUrls = {
+ img: 'src',
+ image: 'xlink:href',
+ 'b-avatar': 'src',
+ 'b-img': 'src',
+ 'b-img-lazy': ['src', 'blank-src'],
+ 'b-card': 'img-src',
+ 'b-card-img': 'src',
+ 'b-card-img-lazy': ['src', 'blank-src'],
+ 'b-carousel-slide': 'img-src',
+ 'b-embed': 'src',
+ }
+ return options
+ })
+ },
+ transpileDependencies: ['vue-echarts', 'resize-detector'],
+}