commit e9e335d0d1ea77c15b39dd793c8caea99656075e Author: dhji(지대한) Date: Thu May 26 15:04:01 2022 +0900 init clone diff --git a/.env b/.env new file mode 100644 index 0000000..0e64c11 --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +SKIP_PREFLIGHT_CHECK=true +REACT_APP_BASENAME= "" +REACT_APP_HOST = http://control-api.palnet.co.kr/ +REACT_APP_WS_HOST = ws://control-websocket.palnet.co.kr/ws +REACT_APP_IMAGE_HOST = https://palnet-file.s3.ap-northeast-2.amazonaws.com/ diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..69e358d --- /dev/null +++ b/.env.development @@ -0,0 +1,3 @@ +REACT_APP_HOST = http://localhost:8080/ +REACT_APP_WS_HOST = ws://localhost:8081/ws +REACT_APP_IMAGE_HOST = https://palnet-file.s3.ap-northeast-2.amazonaws.com/ diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..aec8d8d --- /dev/null +++ b/.env.production @@ -0,0 +1,3 @@ +REACT_APP_HOST = http://control-api.palntour.com/ +REACT_APP_WS_HOST = ws://control-websocket.palntour.com/ws +REACT_APP_IMAGE_HOST = https://palnet-file.s3.ap-northeast-2.amazonaws.com/ diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0ead438 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,81 @@ +module.exports = { + env: { + node: true, + es6: true, + browser: true + }, + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + ecmaFeatures: { + jsx: true, + modules: true, + experimentalObjectRestSpread: true + } + }, + rules: { + // 'no-console': 'off', + // 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + // // Best Practices + // eqeqeq: 'error', + // 'no-invalid-this': 'error', + // 'no-return-assign': 'error', + // 'no-unused-expressions': ['error', { allowTernary: true }], + // 'no-useless-concat': 'error', + // 'no-useless-return': 'error', + // // Variable + // // 'init-declarations': 'error', + // 'no-use-before-define': 'error', + // // Stylistic Issues + // 'array-bracket-newline': ['error', { multiline: true, minItems: null }], + // 'array-bracket-spacing': 'error', + // 'brace-style': ['error', '1tbs', { allowSingleLine: true }], + // 'block-spacing': 'error', + // 'comma-dangle': 'error', + // 'comma-spacing': 'error', + // 'comma-style': 'error', + // 'computed-property-spacing': 'error', + // 'func-call-spacing': 'error', + // 'implicit-arrow-linebreak': ['error', 'beside'], + // // indent: ['error', 4], + // 'keyword-spacing': 'error', + // 'multiline-ternary': ['error', 'never'], + // // 'no-lonely-if': 'error', + // 'no-mixed-operators': 'error', + // 'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }], + // 'no-tabs': 'error', + // 'no-unneeded-ternary': 'error', + // 'no-whitespace-before-property': 'error', + // 'nonblock-statement-body-position': 'error', + // 'object-property-newline': [ + // 'error', + // { allowAllPropertiesOnSameLine: true } + // ], + // 'quote-props': ['error', 'as-needed'], + // // quotes: ['error', 'prefer-single'], + // semi: ['error', 'never'], + // 'semi-spacing': 'error', + // 'space-before-blocks': 'error', + // // 'space-before-function-paren': 'error', + // 'space-in-parens': 'error', + // 'space-infix-ops': 'error', + // 'space-unary-ops': 'error', + // // ES6 + // 'arrow-spacing': 'error', + // 'no-confusing-arrow': 'error', + // 'no-duplicate-imports': 'error', + // 'no-var': 'error', + // 'object-shorthand': 'error', + // 'prefer-const': 'error', + // 'prefer-template': 'error' + } + + // 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', + // camelcase: ['error', { properties: 'never', ignoreDestructuring: true, ignoreImports: true }] + // } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8d41230 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +.docz +.eslintcache +.vscode + +/react-shell-scripts diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..6e7e18a --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,11 @@ +module.exports = { + singleQuote: true, //인용부호 작은 따옴표 사용 + semi: true, //모든 문법 끝에 세미콜론 추가 + useTabs: false, + tabWidth: 2, //탭 공백 넓이 + trailingComma: 'none', //후행 쉼표 제거 + printWidth: 80, //줄바꿈 넓이 + bracketSpacing: true, // 브라켓 간격 + arrowParens: 'avoid', //arrow function 매개변수 하나일때 괄호 제거 + jsxSingleQuote: true //jsx 인용부호 작은 따옴표 사용 +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..77a8382 Binary files /dev/null and b/README.md differ diff --git a/config-overrides.js b/config-overrides.js new file mode 100644 index 0000000..3aa63f7 --- /dev/null +++ b/config-overrides.js @@ -0,0 +1,38 @@ +const SassRuleRewire = require('react-app-rewire-sass-rule') +const path = require('path') +const rewireAliases = require('react-app-rewire-aliases') + +module.exports = function override(config, env) { + require('react-app-rewire-postcss')(config, { + plugins: loader => [require('postcss-rtl')()] + }) + + config = rewireAliases.aliasesOptions({ + '@src': path.resolve(__dirname, 'src'), + '@assets': path.resolve(__dirname, 'src/@core/assets'), + '@components': path.resolve(__dirname, 'src/@core/components'), + '@layouts': path.resolve(__dirname, 'src/@core/layouts'), + '@store': path.resolve(__dirname, 'src/redux'), + '@styles': path.resolve(__dirname, 'src/@core/scss'), + '@configs': path.resolve(__dirname, 'src/configs'), + '@utils': path.resolve(__dirname, 'src/utility/Utils'), + '@hooks': path.resolve(__dirname, 'src/utility/hooks') + })(config, env) + + config = new SassRuleRewire() + .withRuleOptions({ + test: /\.s[ac]ss$/i, + use: [ + { + loader: 'sass-loader', + options: { + sassOptions: { + includePaths: ['node_modules', 'src/assets'] + } + } + } + ] + }) + .rewire(config, env) + return config +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..059007a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,25576 @@ +{ + "name": "control-web", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" + }, + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "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" + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "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" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + }, + "@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz", + "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-decorators": "^7.12.1" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz", + "integrity": "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz", + "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "requires": { + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz", + "integrity": "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.5.tgz", + "integrity": "sha512-M/fmDX6n0cfHK/NLTcPmrfVAORKDhK8tyjDhyxlUjYyPYYO8FRWwuxBA3WBx8kWN/uBUuwGa3s/0+hQ9JIN3Tg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz", + "integrity": "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.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.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "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/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + } + }, + "@babel/preset-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.12.1" + } + }, + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "requires": { + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "@babel/runtime-corejs3": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", + "requires": { + "core-js-pure": "^3.15.0", + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@casl/ability": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@casl/ability/-/ability-5.2.2.tgz", + "integrity": "sha512-A0GTDWojP72Z4HSgS0pfbtGnhQWbquhn9luAr4Uc/HnqWWib0NvmpXC4//7gsiMUiVYCoFozQ+nG1oeZuhT7Jg==", + "requires": { + "@ucast/mongo2js": "^1.3.0" + } + }, + "@casl/react": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@casl/react/-/react-2.1.1.tgz", + "integrity": "sha512-DD0j40OZ+dcQopRdt1tsFaAZ79a1+HGCuMWvExdRcqrbjXFVnFi2kN26KMtwQuzL5FFiH4fmCADCxW3Xjxhs9A==" + }, + "@choojs/findup": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", + "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "requires": { + "commander": "^2.15.1" + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@csstools/normalize.css": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", + "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" + }, + "@emotion/babel-plugin": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz", + "integrity": "sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "^4.0.3" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@emotion/cache": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", + "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.0.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "^4.0.3" + } + }, + "@emotion/css": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.1.3.tgz", + "integrity": "sha512-RSQP59qtCNTf5NWD6xM08xsQdCZmVYnX/panPYvB6LQAPKQB6GL49Njf0EMbS3CyDtrlWsBcmqBtysFvfWT3rA==", + "requires": { + "@emotion/babel-plugin": "^11.0.0", + "@emotion/cache": "^11.1.3", + "@emotion/serialize": "^1.0.0", + "@emotion/sheet": "^1.0.0", + "@emotion/utils": "^1.0.0" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "requires": { + "@emotion/memoize": "0.7.4" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + } + } + }, + "@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "@emotion/react": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.4.0.tgz", + "integrity": "sha512-4XklWsl9BdtatLoJpSjusXhpKv9YVteYKh9hPKP1Sxl+mswEFoUe0WtmtWjxEjkA51DQ2QRMCNOvKcSlCQ7ivg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/cache": "^11.4.0", + "@emotion/serialize": "^1.0.2", + "@emotion/sheet": "^1.0.1", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.1.tgz", + "integrity": "sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@emotion/utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz", + "integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==" + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + } + } + }, + "@formatjs/intl-listformat": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-1.4.8.tgz", + "integrity": "sha512-WNMQlEg0e50VZrGIkgD5n7+DAMGt3boKi1GJALfhFMymslJb5i+5WzWxyj/3a929Z6MAFsmzRIJjKuv+BxKAOQ==", + "requires": { + "@formatjs/intl-utils": "^2.3.0" + } + }, + "@formatjs/intl-relativetimeformat": { + "version": "4.5.16", + "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-4.5.16.tgz", + "integrity": "sha512-IQ0haY97oHAH5OYUdykNiepdyEWj3SAT+Fp9ZpR85ov2JNiFx+12WWlxlVS8ehdyncC2ZMt/SwFIy2huK2+6/A==", + "requires": { + "@formatjs/intl-utils": "^2.3.0" + } + }, + "@formatjs/intl-unified-numberformat": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz", + "integrity": "sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag==", + "requires": { + "@formatjs/intl-utils": "^2.3.0" + } + }, + "@formatjs/intl-utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz", + "integrity": "sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ==" + }, + "@formatjs/macro": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@formatjs/macro/-/macro-0.2.8.tgz", + "integrity": "sha512-5IBdn5+D8VGdi6Px0M/PidtqzHVrOj3dVJdV+YmWNRaWHdSvBd1wUd0gMcZnQXAxN+RzlGS/ddfOxFkjSlyQuA==" + }, + "@fullcalendar/common": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/common/-/common-5.7.2.tgz", + "integrity": "sha512-0EDKmZBvTUFLvnJ7n6Vo6xMaPVm0jpYq739aSjwFPPXKgbjKFTPbWvLkaDpjJf7YhVebVSOLHbUC1Ky5wXsKvQ==", + "requires": { + "tslib": "^2.0.3" + } + }, + "@fullcalendar/core": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-5.7.2.tgz", + "integrity": "sha512-4yKLUnAEDDIePw9WJuT2sSvLWGrDGBhp20cjBmyxnJ/6eNN1RCex/OjSu7qDNHvzey+ncjlVWsY41bvZwhpfvg==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "preact": "^10.0.5", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/daygrid": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-5.7.2.tgz", + "integrity": "sha512-YHxOv3sLDwBWhb9+JBwQ/25VOJ0/22B6msRijIPbmJt5bljqYCIENQ4OLQ5UxZlkDC0Q9CSBg84oBtZYfW+kEg==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/interaction": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-5.7.2.tgz", + "integrity": "sha512-fnDcwE++0tie6wNVl/ZqUjgOQEekkdmbWH9hmcwE65y2aYMBX4IHE95MjMWVRAy2edahfAmy4xucQs2T0HYYSw==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/list": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-5.7.2.tgz", + "integrity": "sha512-IV3SACoE02vheO3wEHjbaw1TGbjdjXHwD/+OtVOgoCNAxJVd0NI0d7kbIxVIniV2vrDPWkybCS1Abi2QANk3iQ==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/premium-common": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/premium-common/-/premium-common-5.7.2.tgz", + "integrity": "sha512-tehsHwFxxKftCZT8JoJ6t84AOOG+7NpV9kTF/ICQV9ZBDK0S4O2UHwEiGfCY4Iz/l3YW3RVUgrO6S+/p8pnFuw==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/react": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-5.7.0.tgz", + "integrity": "sha512-9JdaN/pZXlUFyUe8H1NHIvEt5UVe2p/sctcfsQbKSPJ9NNTVmK+kk3qfUpOWEho6DYuFRLqYI+VwmeVM5mE8rA==", + "requires": { + "@fullcalendar/common": "~5.7.0", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/scrollgrid": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/scrollgrid/-/scrollgrid-5.7.2.tgz", + "integrity": "sha512-cU0khf72kP7m1cpSYYWSFnLNii36VRlg6Kdix/2mr3BBX74bjFsJfWkWKneO/bZzJgIBvKYehQ/SYiZNC77xuA==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "@fullcalendar/premium-common": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/timegrid": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-5.7.2.tgz", + "integrity": "sha512-FRZRwVtlahljSILexvmhLg2LnFbJVCpeuzAIgdURmRoSDCCDuxoA6Z3l66a/QFp3LcFVbZbg7VjKibyvvB9b9A==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "@fullcalendar/daygrid": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@fullcalendar/timeline": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fullcalendar/timeline/-/timeline-5.7.2.tgz", + "integrity": "sha512-n8FaVuGdIZVztNM8f20/TP0emTS1rfCKFZmXtm566t7u3oKEzDBmgHIHDRgNZafTX1qmCSCP7ANkgi1UKN7E8g==", + "requires": { + "@fullcalendar/common": "~5.7.2", + "@fullcalendar/premium-common": "~5.7.2", + "@fullcalendar/scrollgrid": "~5.7.2", + "tslib": "^2.0.3" + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "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.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@hookform/resolvers": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-1.3.4.tgz", + "integrity": "sha512-K56VLSInXNIT/r14pkzRn1FJclqzGOWqpe3Bf0kz2Hf98ZOmRRFh4fhB7F3ofqCQ03CEQQkV44CTg7ql6nEvEg==" + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + }, + "@hypnosphi/create-react-context": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", + "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", + "requires": { + "gud": "^1.0.0", + "warning": "^4.0.3" + }, + "dependencies": { + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", + "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", + "requires": { + "ansi-html": "^0.0.7", + "error-stack-parser": "^2.0.6", + "html-entities": "^1.2.1", + "native-url": "^0.2.6", + "schema-utils": "^2.6.5", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "@popperjs/core": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.2.tgz", + "integrity": "sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==" + }, + "@react-leaflet/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-1.1.0.tgz", + "integrity": "sha512-zFxMHgfjCi7khRVB7o7H8NoJl36NaezvfcaeEurVXx22lAGHFlTHiSuLOGA4tOiHj+Ep+Lo3uwUGJ3YM9BGkHg==" + }, + "@redux-saga/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", + "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", + "requires": { + "@babel/runtime": "^7.6.3", + "@redux-saga/deferred": "^1.1.2", + "@redux-saga/delay-p": "^1.1.2", + "@redux-saga/is": "^1.1.2", + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0", + "redux": "^4.0.4", + "typescript-tuple": "^2.2.1" + } + }, + "@redux-saga/deferred": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", + "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==" + }, + "@redux-saga/delay-p": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", + "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", + "requires": { + "@redux-saga/symbols": "^1.1.2" + } + }, + "@redux-saga/is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", + "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", + "requires": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "@redux-saga/symbols": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", + "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==" + }, + "@redux-saga/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", + "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==" + }, + "@rollup/plugin-node-resolve": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "requires": { + "@rollup/pluginutils": "^3.0.8", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@stomp/stompjs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@stomp/stompjs/-/stompjs-6.1.0.tgz", + "integrity": "sha512-Bt+whL0V51rSKP35OkgM1yeVu/usunpz5l1VYuoWw8mGsDMNd3W3FpWa4/4eis6QfXO3uteNGfyE21XWn0pGAQ==" + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "requires": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "requires": { + "@babel/types": "^7.12.6" + } + }, + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "requires": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + } + }, + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==" + }, + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.0.tgz", + "integrity": "sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/eslint": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "0.0.49", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz", + "integrity": "sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw==" + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/googlemaps": { + "version": "3.43.3", + "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.43.3.tgz", + "integrity": "sha512-ZWNoz/O8MPEpiajvj7QiqCY8tTLFNqNZ/a+s+zTV58wFVNAvvqV4bdGfnsjTb5Cs4V6wEsLrX8XRhmnyYJ2Tdg==" + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "requires": { + "@types/node": "*" + } + }, + "@types/history": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", + "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==" + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + }, + "@types/http-proxy": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", + "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz", + "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==" + } + } + }, + "@types/invariant": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.34.tgz", + "integrity": "sha512-lYUtmJ9BqUN688fGY1U1HZoWT1/Jrmgigx2loq4ZcJpICECm/Om3V314BxdzypO0u5PORKGMM6x0OXaljV1YFg==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", + "requires": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" + }, + "@types/lodash": { + "version": "4.14.170", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", + "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==" + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" + }, + "@types/node": { + "version": "15.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.1.tgz", + "integrity": "sha512-wF6hazbsnwaW3GhK4jFuw5NaLDQVRQ6pWQUGAUrJzxixFkTaODSiAKMPXuHwPEPkAKQWHAzj6uJ5h+3zU9gQxg==" + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/prettier": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-NVkb4p4YjI8E3O6+1m8I+8JlMpFZwfSbPGdaw0wXuyPRTEz0SLKwBUWNSO7Maoi8tQMPC8JLZNWkrcKPI7/sLA==" + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "@types/react": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.13.tgz", + "integrity": "sha512-D/G3PiuqTfE3IMNjLn/DCp6umjVCSvtZTPdtAFy5+Ved6CsdRvivfKeCzw79W4AatShtU4nGqgvOv5Gro534vQ==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.8.tgz", + "integrity": "sha512-0ohAiJAx1DAUEcY9UopnfwCE9sSMDGnY/oXjWMax6g3RpzmTt2GMyMVAXcbn0mo8XAff0SbQJl2/SBU+hjSZ1A==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-redux": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", + "integrity": "sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "@types/redux-debounced": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@types/redux-debounced/-/redux-debounced-0.2.19.tgz", + "integrity": "sha512-eXOu5x5IdJ2/55mfcdhVkD+cTt9C3+bvngR+dmaM5JgGQKZgMYH8RRQq+ca98eBtuREqEnNQ5c1BFFAcbp4rfg==", + "requires": { + "redux": "^3.6.0" + }, + "dependencies": { + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "requires": { + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" + } + } + } + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + }, + "@types/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A==" + }, + "@types/sockjs-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-r8ENXtljrt8U6knz4fWsiuUVrDk9nkBeJOePWCzUJDRS20MN/OWoZj+gbsPhWSXSXF1aUaS4iAE4xa5jCFW9Dw==" + }, + "@types/sortablejs": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.10.6.tgz", + "integrity": "sha512-QRz8Z+uw2Y4Gwrtxw8hD782zzuxxugdcq8X/FkPsXUa1kfslhGzy13+4HugO9FXNo+jlWVcE6DYmmegniIQ30A==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/stompjs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/stompjs/-/stompjs-2.3.5.tgz", + "integrity": "sha512-0WkL8RlB1uuZt8XJEdnwdFdV5RIFcQw9UhNQfTpiJYcjqC6QQpFqc5YcIrlH+K/843EGJVIaOFANjs7u7bmTlw==", + "requires": { + "@types/node": "*" + } + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==" + }, + "@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/webpack": { + "version": "4.41.30", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.30.tgz", + "integrity": "sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==", + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/webpack-sources": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.1.tgz", + "integrity": "sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ==", + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.1.tgz", + "integrity": "sha512-9yfcNpDaNGQ6/LQOX/KhUFTR1sCKH+PBr234k6hI9XJ0VP5UqGxap0AnNwBnWFk1MNyWBylJH9ZkzBXC+5akZQ==", + "requires": { + "@typescript-eslint/experimental-utils": "4.28.1", + "@typescript-eslint/scope-manager": "4.28.1", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz", + "integrity": "sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q==", + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.1", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/typescript-estree": "4.28.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.1.tgz", + "integrity": "sha512-UjrMsgnhQIIK82hXGaD+MCN8IfORS1CbMdu7VlZbYa8LCZtbZjJA26De4IPQB7XYZbL8gJ99KWNj0l6WD0guJg==", + "requires": { + "@typescript-eslint/scope-manager": "4.28.1", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/typescript-estree": "4.28.1", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz", + "integrity": "sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA==", + "requires": { + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1" + } + }, + "@typescript-eslint/types": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.1.tgz", + "integrity": "sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg==" + }, + "@typescript-eslint/typescript-estree": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz", + "integrity": "sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ==", + "requires": { + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz", + "integrity": "sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg==", + "requires": { + "@typescript-eslint/types": "4.28.1", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@ucast/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@ucast/core/-/core-1.10.0.tgz", + "integrity": "sha512-utMIzLxgsj1VkPTN9Yzt9EaCPWYdF33Pe6fxhsK/jEiMf8M0w/cM4K3Ywc3tZSBn/Cc2YQsx7pVYe8I2NWrBRg==" + }, + "@ucast/js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ucast/js/-/js-3.0.1.tgz", + "integrity": "sha512-sabiuYsM5VUg4EaCwlDxnqcrHPFvbZcXvBu+P/o4pqK2q046RLTdo0bM7iVCn5Ro4HpCiRv3QzxtW8epcluY1g==", + "requires": { + "@ucast/core": "^1.0.0" + } + }, + "@ucast/mongo": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ucast/mongo/-/mongo-2.4.1.tgz", + "integrity": "sha512-l/hc3TxjWO9inBrgM5iMCAcsIeV2DToppRlabQa5xB/6uHYtCXfm3TPaJgr8TU1OFxqPlaXEnNQhaV0sVHGsoQ==", + "requires": { + "@ucast/core": "^1.4.1" + } + }, + "@ucast/mongo2js": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@ucast/mongo2js/-/mongo2js-1.3.2.tgz", + "integrity": "sha512-KNOEs61wxo4VJkVGqwP2a03TKuLx9fLMQgW5HD8Th/mrcuP1SspS4W+kUQD+wB1AA5pOn65hzlHUw5wZBwme0Q==", + "requires": { + "@ucast/core": "^1.6.1", + "@ucast/js": "^3.0.0", + "@ucast/mongo": "^2.4.0" + } + }, + "@uppy/aws-s3": { + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@uppy/aws-s3/-/aws-s3-1.7.12.tgz", + "integrity": "sha512-9Q8EMg1vQlDrmhaLs5UUQn4kAszLa8E2c1c4mD2urkpS/jHofdF4geRRtp4g4/xvBwwtnhzGqPX4dIylvoZICQ==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/utils": "^3.6.2", + "@uppy/xhr-upload": "^1.7.5", + "cuid": "^2.1.1", + "qs-stringify": "^1.1.0", + "url-parse": "^1.4.7" + } + }, + "@uppy/aws-s3-multipart": { + "version": "1.8.18", + "resolved": "https://registry.npmjs.org/@uppy/aws-s3-multipart/-/aws-s3-multipart-1.8.18.tgz", + "integrity": "sha512-m+IJSsDF253igTlQb2vgCTetqd+qgNIBX48i8HGnLj4rBfRd4FjpBpcV7DgfAn7QVOfrQOgOJoz9cGtXdaZ3lA==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/utils": "^3.6.2" + } + }, + "@uppy/companion-client": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-1.10.2.tgz", + "integrity": "sha512-5RmsNF9UBvUqmqQz48SoiLvkpGmvQTgwNM4bJX8xwVozv/6goRpFrsMJGLwqFcHS/9xj6STKOqrM582g8exVwQ==", + "requires": { + "@uppy/utils": "^3.6.2", + "namespace-emitter": "^2.0.1", + "qs-stringify": "^1.1.0", + "url-parse": "^1.4.7" + } + }, + "@uppy/core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@uppy/core/-/core-1.19.2.tgz", + "integrity": "sha512-2aHvUMdH8fs2eFn30LzNZDHCKoUNAyC+MXwM2NQeO858o0gj2R4axZbrheXnpXrI9dB6RGELGIGkS+ZhnjQAmA==", + "requires": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^1.2.7", + "@uppy/utils": "^3.6.2", + "cuid": "^2.1.1", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/dashboard": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@uppy/dashboard/-/dashboard-1.20.2.tgz", + "integrity": "sha512-iYLqQXP0voDZyTrweMUva4w4wHQPfs1vpLPdPlaJT0qplvZEamOO+o9NxQ1Q09Wd44qdYUo4WT1/rHq8AQUFFA==", + "requires": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/informer": "^1.6.6", + "@uppy/provider-views": "^1.12.3", + "@uppy/status-bar": "^1.9.6", + "@uppy/thumbnail-generator": "^1.7.11", + "@uppy/utils": "^3.6.2", + "classnames": "^2.2.6", + "cuid": "^2.1.1", + "is-shallow-equal": "^1.0.1", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "memoize-one": "^5.0.4", + "preact": "8.2.9", + "resize-observer-polyfill": "^1.5.0" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/drag-drop": { + "version": "1.4.30", + "resolved": "https://registry.npmjs.org/@uppy/drag-drop/-/drag-drop-1.4.30.tgz", + "integrity": "sha512-jHNcwy1Gj2Bra170lw/CzAsTa/X12sH6BqUi5puauZCMttq29cTwptxdwx34Utf/s0ssyAq3XCL2Ip9MHLfDpw==", + "requires": { + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/dropbox": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@uppy/dropbox/-/dropbox-1.5.2.tgz", + "integrity": "sha512-DSuLUozHsg72qLzlZ1b1qZ9L9gdKFdtgkd2PURpOAJPRHHNchCQDdkBSPS8aHNAuErDKFxg71DcO3CIzbZ054A==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/provider-views": "^1.12.3", + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/facebook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@uppy/facebook/-/facebook-1.2.2.tgz", + "integrity": "sha512-DoOQJjhy4y4DRK5iKLU9ayub4ao7cAdBd0lOsGTjyFtWzdnK9RcisZ7FDlXe2QK4ekdiFFdnBE3mOYTgYzw3gg==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/provider-views": "^1.12.3", + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/file-input": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@uppy/file-input/-/file-input-1.5.2.tgz", + "integrity": "sha512-EI7IROt2qyGm3EoGDmb4UiWNe/P8YsGAcoCZZqFlTLkBlK7Yen5yxzQ4+KH7jWZYM6BynYnHl18aMdRcDWf/UA==", + "requires": { + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/form": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@uppy/form/-/form-1.3.31.tgz", + "integrity": "sha512-FyhJSJgdYDkLAuMqYo1d7f469PbbU3wrLbyoSDtZTEDBUXeE7b4g3ygqrFhlZsxbpwGvO/ygg2/8z0Dlvt7dBQ==", + "requires": { + "@uppy/utils": "^3.6.2", + "get-form-data": "^2.0.0" + } + }, + "@uppy/golden-retriever": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@uppy/golden-retriever/-/golden-retriever-1.4.2.tgz", + "integrity": "sha512-beMRrXGZ/qdLlKW5vQN8TuXFNoeGdFnBnriKxDHMYGXEo+fKTLTqXDeFgPYqXa337H7sb1StdzCnb8YDYyDPnQ==", + "requires": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/utils": "^3.6.2", + "lodash.throttle": "^4.1.1" + } + }, + "@uppy/google-drive": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@uppy/google-drive/-/google-drive-1.7.2.tgz", + "integrity": "sha512-29w2e36gX4394ly5t+JMhg4WVr2vpo7a46PLHKZlNwbiPKrEqBUyLy/seCxHUH+6qNtrHFIWQoLTwrlMCEOi3w==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/provider-views": "^1.12.3", + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/informer": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@uppy/informer/-/informer-1.6.6.tgz", + "integrity": "sha512-9rZoAqNrKQN/HINnGg8rGnKEliLgc+9/tQQ0f9QcBgRIu/rnbBCTwS+qnGGdjYBdEJTSbHx+U7X9ufjrrjB+CA==", + "requires": { + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/instagram": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@uppy/instagram/-/instagram-1.5.2.tgz", + "integrity": "sha512-hfBfO3P++sI5LNvtpHb6h5Ow/nOu2LgPeIQZ2xaeeQXjDg+wt8oToF25z+LSwXi69QxCh3mPpWNIGbq/N96Cfw==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/provider-views": "^1.12.3", + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/onedrive": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@uppy/onedrive/-/onedrive-1.2.2.tgz", + "integrity": "sha512-o1k2/2Sh4BwxzB0c5iSheTCotoSZXsnIdNDEsnO8WJiSclnody3XUuh+D6O5UeQxCFCFS13KJ6RebLGN8t/srQ==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/provider-views": "^1.12.3", + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/progress-bar": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@uppy/progress-bar/-/progress-bar-1.3.30.tgz", + "integrity": "sha512-MAn20wBMzKc1p9M/Mot4+bV/707EO/DVgoFcvoP8rmA5oZOGMINpvFGR+rUtWQoBFMvKtvs/Wkp8mcR22rCMrw==", + "requires": { + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/provider-views": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@uppy/provider-views/-/provider-views-1.12.3.tgz", + "integrity": "sha512-r2kra3IftmGLeKMEgZbmQM1qXixulWUUzydgpHcZqJOpeNIjJcpspJruYRctrVqaLz/8asw87V4KxDk0U4xGzw==", + "requires": { + "@uppy/utils": "^3.6.2", + "classnames": "^2.2.6", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/react": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/@uppy/react/-/react-1.10.8.tgz", + "integrity": "sha512-FO6PThrYZaEGZd7G3YooHHKsxhZqF6/Euy+jI8CLhROf78Kg0Gr3dURhwaH902NgPrA5Yfa6xRSC1d4etwMktg==", + "requires": { + "@uppy/dashboard": "^1.12.8", + "@uppy/drag-drop": "^1.4.19", + "@uppy/progress-bar": "^1.3.19", + "@uppy/status-bar": "^1.7.6", + "@uppy/utils": "^3.2.3", + "prop-types": "^15.6.1" + } + }, + "@uppy/redux-dev-tools": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@uppy/redux-dev-tools/-/redux-dev-tools-1.3.9.tgz", + "integrity": "sha512-OVugq1AbIZ89nRifl5suv7AiC2uE5Ot4QbaTgoS8l0DwMMRpYKYAOc904Wj9F9cTZhaUBXEmTqKlZgL9NVK3FQ==" + }, + "@uppy/screen-capture": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@uppy/screen-capture/-/screen-capture-1.0.21.tgz", + "integrity": "sha512-4uFWxI7zZcN+JjJyHXM44uglggezpsvZxmn0ax8BM/bK4yZkDOOQuAS2VoJx84Yre2lo6zplTNhbDquX1xGC3g==", + "requires": { + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/status-bar": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/@uppy/status-bar/-/status-bar-1.9.6.tgz", + "integrity": "sha512-U/KPs5SwZ5d4hJFiCNAdriGHSk1Uhrl+iQmpJS8hoM+8r8rPfwScdua2/ehLuH69Ymwp6k7DpK2DU7UG2XZ+ag==", + "requires": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/utils": "^3.6.2", + "classnames": "^2.2.6", + "lodash.throttle": "^4.1.1", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/store-default": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-1.2.7.tgz", + "integrity": "sha512-58IG9yk/i/kYQ9uEwAwMFl1H2V3syOoODrYoFfVHlxaqv+9MkXBg2tHE2gk40iaAIxcCErcPxZkBOvkqzO1SQA==" + }, + "@uppy/store-redux": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@uppy/store-redux/-/store-redux-1.2.8.tgz", + "integrity": "sha512-9lPPQf8lyADjrjNXe7u8j+Pn2MeIlUXANT8vHXy2WnbYX+WL/r7gqNUd8kiKoMksX1E+gA6VH5rmj6ysL9xVvg==", + "requires": { + "cuid": "^2.1.1" + } + }, + "@uppy/thumbnail-generator": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@uppy/thumbnail-generator/-/thumbnail-generator-1.7.11.tgz", + "integrity": "sha512-qo9ZD8ByDMM6gIJ4JPN0V/dWlruYMhmYifhUvDUu0qhPAOTJAqh2hLQ+dlmUXTns8RnDorCXScreICSQ09FuLQ==", + "requires": { + "@uppy/utils": "^3.6.2", + "exifr": "^6.0.0", + "math-log2": "^1.0.1" + } + }, + "@uppy/transloadit": { + "version": "1.6.26", + "resolved": "https://registry.npmjs.org/@uppy/transloadit/-/transloadit-1.6.26.tgz", + "integrity": "sha512-fACQUEBJIHXrDBKoyrbmzDO8rr2CniJqBLQVQgUkMDMyjUiZgUrR1XB+r4j4Vu1ITAl3YH0ibCiWMT2CrFzAtg==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/provider-views": "^1.12.3", + "@uppy/tus": "^1.9.2", + "@uppy/utils": "^3.6.2", + "component-emitter": "^1.2.1", + "socket.io-client": "~2.2.0", + "url-parse": "^1.4.7" + } + }, + "@uppy/tus": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@uppy/tus/-/tus-1.9.2.tgz", + "integrity": "sha512-ejaczrrh6w514XGd3kiDD1PJ8tIgmnV50fuyRwsybDj8HQheKAEu6GsJjxcnctP8NcSx4HNDhazVLPj6+A4p9Q==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/utils": "^3.6.2", + "tus-js-client": "^2.1.1" + } + }, + "@uppy/url": { + "version": "1.5.23", + "resolved": "https://registry.npmjs.org/@uppy/url/-/url-1.5.23.tgz", + "integrity": "sha512-pRmRccuJv2Ad57jPgYckbvozeUhkMouBv2du9+BW9Sr7E5aJPbujwejVOzDcRion7TEH6YvxX1xZoWrXZ/IYOQ==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/utils": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-3.6.2.tgz", + "integrity": "sha512-wGTZma7eywIojfuE1vXlT0fxPSpmCRMkfgFWYc+6TL2FfGqWInmePoB+yal6/M2AnjeKHz6XYMhIpZkjOxFvcw==", + "requires": { + "abortcontroller-polyfill": "^1.4.0", + "lodash.throttle": "^4.1.1" + } + }, + "@uppy/webcam": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@uppy/webcam/-/webcam-1.8.12.tgz", + "integrity": "sha512-tyfpOpigsqYglyDoUoC8sQGPVcP9w12WN8aWVR3WMUbXqSPDAv+bmc1P2RVn0xfxOVgiOkcvKxjyAQ0PU2pBpA==", + "requires": { + "@uppy/utils": "^3.6.2", + "preact": "8.2.9" + }, + "dependencies": { + "preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==" + } + } + }, + "@uppy/xhr-upload": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-1.7.5.tgz", + "integrity": "sha512-Itnc9j9k/PemcmT5KrZ1BEw3pTc6WJg0yyyOcE+hLO8Hjv60Fm7c/I2ZknarOroIjT1WiTSyuxTBPp+9UGkxNA==", + "requires": { + "@uppy/companion-client": "^1.10.2", + "@uppy/utils": "^3.6.2", + "cuid": "^2.1.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "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.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "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.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "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.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "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.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "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.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "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.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "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.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "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.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "apexcharts": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.23.0.tgz", + "integrity": "sha512-1mV6qouuopvYR6UFSXi/Ge4jRMe//zyAN3aK05mAs4Iuet8mA0w31Q6OU6syD77bawt9p3YKNOmNF7OO2u9w0g==", + "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.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "availity-reactstrap-validation-safe": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/availity-reactstrap-validation-safe/-/availity-reactstrap-validation-safe-2.6.1.tgz", + "integrity": "sha512-+vvE4fh848vRgQO+j1v3SSO4b3aHKkBpY/bBI3lgl85YaqnAVTUe7xt07cJsjM8Xv1YBEn4NChsqUR35HWE8RQ==", + "requires": { + "babel-runtime": "^6.26.0", + "classnames": "^2.2.6", + "lodash": "^4.17.10", + "moment": "^2.22.2", + "prop-types": "^15.6.2" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axe-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.3.tgz", + "integrity": "sha512-pXnVMfJKSIWU2Ml4JHP7pZEPIrgBO1Fd3WGx+fPBsS+KRGhE4vxooD8XBGWbQOIVSZsVK7pUDBBkCicNu80yzQ==" + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/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.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.19.0.tgz", + "integrity": "sha512-D+0U4LNPr7WroiBDvWilzTMYPYTuZlbo6BI8YHZtj7wYQS8NkARlP9KBt8IWWHTQJ0q/8oZ0ClPBtKCCkx8cQg==", + "requires": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.3" + } + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "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" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "babel-extract-comments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", + "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "requires": { + "babylon": "^6.18.0" + } + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + } + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", + "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==" + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "babel-plugin-react-intl": { + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-5.1.18.tgz", + "integrity": "sha512-tzzZoGDNQOiHmGFh+NPQJDpC10RbKlfw1CBVfALulqRa6UGkAv5eMs9sirxjhD3HryHPbYZ4x5FNdbzOyG2GJw==", + "requires": { + "@babel/core": "^7.7.2", + "@babel/helper-plugin-utils": "^7.0.0", + "@types/babel__core": "^7.1.3", + "@types/schema-utils": "^1.0.0", + "fs-extra": "^8.1.0", + "intl-messageformat-parser": "^3.6.4", + "schema-utils": "^2.2.0" + } + }, + "babel-plugin-styled-components": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.1.tgz", + "integrity": "sha512-iY11g5orsdBnvWtXKCFBzDyTxZ9jvmkcYCCs5ONlvASYltDRhieCVzeDC7Do0fSW7psAL0zfVoXB3FHz2CkUSg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-module-imports": "^7.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-react-app": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz", + "integrity": "sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg==", + "requires": { + "@babel/core": "7.12.3", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-proposal-decorators": "7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", + "@babel/plugin-proposal-numeric-separator": "7.12.1", + "@babel/plugin-proposal-optional-chaining": "7.12.1", + "@babel/plugin-transform-flow-strip-types": "7.12.1", + "@babel/plugin-transform-react-display-name": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/preset-react": "7.12.1", + "@babel/preset-typescript": "7.12.1", + "@babel/runtime": "7.12.1", + "babel-plugin-macros": "2.8.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + } + }, + "@babel/preset-react": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", + "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.12.1", + "@babel/plugin-transform-react-jsx": "^7.12.1", + "@babel/plugin-transform-react-jsx-development": "^7.12.1", + "@babel/plugin-transform-react-jsx-self": "^7.12.1", + "@babel/plugin-transform-react-jsx-source": "^7.12.1", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "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.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "requires": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "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" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "bootstrap": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.2.tgz", + "integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "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.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "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.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "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.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "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.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "bs-stepper": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/bs-stepper/-/bs-stepper-1.7.0.tgz", + "integrity": "sha512-+DX7UKKgw2GI6ucsSCRd19VHYrxf/8znRCLs1lQVVLxz+h7EqgIOxoHcJ0/QTaaNoR9Cwg78ydo6hXIasyd3LA==" + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "requires": { + "@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" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "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" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, + "can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "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.30001242", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz", + "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "cfb": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz", + "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==", + "requires": { + "adler-32": "~1.2.0", + "crc-32": "~1.2.0", + "printj": "~1.1.2" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "change-emitter": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", + "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + }, + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "check-types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", + "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "chroma-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.0.tgz", + "integrity": "sha512-uiRdh4ZZy+UTPSrAdp8hqEdVb1EllLtTHOt5TMaOjJUvi+O54/83Fc5K2ld1P+TJX+dw5B+8/sCgzI6eaur/lg==", + "requires": { + "cross-env": "^6.0.3" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "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.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cleave.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cleave.js/-/cleave.js-1.6.0.tgz", + "integrity": "sha512-ivqesy3j5hQVG3gywPfwKPbi/7ZSftY/UNp5uphnqjr25yI2CP8FS2ODQPzuLXXnNLi29e2+PgPkkiKUXLs/Nw==" + }, + "clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", + "requires": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + } + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + }, + "combine-errors": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/combine-errors/-/combine-errors-3.0.3.tgz", + "integrity": "sha1-9N9nQAg+VwOjGBEQwrEFUfAD2oY=", + "requires": { + "custom-error-instance": "2.1.1", + "lodash.uniqby": "4.5.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "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": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "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.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==" + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "connected-react-router": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.9.1.tgz", + "integrity": "sha512-BbtB6t0iqAwGwygDenJl9zmlk7vpKWIRSycULmkAOn2RUaF6+bqETprl0qcIqQmY5CTqSwKanaxkLXYWiffAfQ==", + "requires": { + "immutable": "^3.8.1 || ^4.0.0-rc.1", + "lodash.isequalwith": "^4.4.0", + "prop-types": "^15.7.2", + "seamless-immutable": "^7.1.3" + }, + "dependencies": { + "immutable": { + "version": "4.0.0-rc.14", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0-rc.14.tgz", + "integrity": "sha512-pfkvmRKJSoW7JFx0QeYlAmT+kNYvn5j0u7bnpNq4N2RCvHSTlLT208G8jgaquNe+Q8kCPHKOSpxJkyvLDpYq0w==", + "optional": true + } + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "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" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "core-js-compat": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "requires": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "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.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "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-env": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz", + "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==", + "requires": { + "cross-spawn": "^7.0.0" + } + }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "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" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", + "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", + "requires": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "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.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-to-react-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "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": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + }, + "cuid": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz", + "integrity": "sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "custom-error-instance": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/custom-error-instance/-/custom-error-instance-2.1.1.tgz", + "integrity": "sha1-PPY5FIemYppiR+sMoM4ACBt+Nho=" + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "d3-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + }, + "d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "requires": { + "d3-color": "1 - 2" + } + }, + "d3-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-2.0.0.tgz", + "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==" + }, + "d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } + }, + "d3-shape": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-2.1.0.tgz", + "integrity": "sha512-PnjUqfM2PpskbSLTJvAzp2Wv4CZsnAgTfcVRTwW03QR3MkXF8Uo7B1y/lWkAsmbKwuecto++4NlsYcvYpXpTHA==", + "requires": { + "d3-path": "1 - 2" + } + }, + "d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + } + }, + "d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "requires": { + "d3-time": "1 - 2" + } + }, + "damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "date-fns": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", + "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==" + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + }, + "decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "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.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "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": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "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.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-it/-/detect-it-4.0.1.tgz", + "integrity": "sha512-dg5YBTJYvogK1+dA2mBUDKzOWfYZtHVba89SyZUhc4+e3i2tzgjANFg5lDRCd3UOtRcw00vUTMK8LELcMdicug==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "detect-passive-events": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-passive-events/-/detect-passive-events-2.0.3.tgz", + "integrity": "sha512-QN/1X65Axis6a9D8qg8Py9cwY/fkWAmAH/edTbmLMcv4m5dboLJ7LcAi8CfaCON2tjk904KwKX/HTdsHC6yeRg==", + "requires": { + "detect-it": "^4.0.1" + } + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + } + } + }, + "dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "requires": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "requires": { + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "draft-js": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.7.tgz", + "integrity": "sha512-ne7yFfN4sEL82QPQEn80xnADR8/Q6ALVworbC5UOSzOvjffmYfFsr3xSZtxbIirti14R7Y33EZC5rivpLgIbsg==", + "requires": { + "fbjs": "^2.0.0", + "immutable": "~3.7.4", + "object-assign": "^4.1.1" + } + }, + "draftjs-to-html": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/draftjs-to-html/-/draftjs-to-html-0.9.1.tgz", + "integrity": "sha512-fFstE6+IayaVFBEvaFt/wN8vdj8FsTRzij7dy7LI9QIwf5LgfHFi9zSpvCg+feJ2tbYVqHxUkjcibwpsTpgFVQ==" + }, + "draftjs-utils": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/draftjs-utils/-/draftjs-utils-0.10.2.tgz", + "integrity": "sha512-EstHqr3R3JVcilJrBaO/A+01GvwwKmC7e4TCjC7S94ZeMh4IVmf60OuQXtHHpwItK8C2JCi3iljgN5KHkJboUg==" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-bem": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/easy-bem/-/easy-bem-1.1.1.tgz", + "integrity": "sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/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.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "electron-to-chromium": { + "version": "1.3.766", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz", + "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "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.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "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" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + } + } + }, + "eslint-config-airbnb": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", + "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^14.2.1", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true + }, + "eslint-config-react-app": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz", + "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==", + "requires": { + "confusing-browser-globals": "^1.0.10" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-module-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", + "requires": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.8.0.tgz", + "integrity": "sha512-feK1xnUTsMSNTOw9jFw7aVgZl7Ep+ghpta/YEoaV6jbXU6Yso30B7BIj9ObHLzZ5TFJL7D98az080wfykLCrcw==", + "requires": { + "lodash": "^4.17.15", + "string-natural-compare": "^3.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.23.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", + "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.1", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.4.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-jest": { + "version": "24.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", + "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", + "requires": { + "@typescript-eslint/experimental-utils": "^4.0.1" + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", + "requires": { + "@babel/runtime": "^7.11.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^3.1.0", + "language-tags": "^1.0.5" + }, + "dependencies": { + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + } + } + }, + "eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", + "dev": true + }, + "eslint-plugin-testing-library": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", + "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", + "requires": { + "@typescript-eslint/experimental-utils": "^3.10.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + }, + "eslint-webpack-plugin": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz", + "integrity": "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw==", + "requires": { + "@types/eslint": "^7.2.6", + "arrify": "^2.0.1", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "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" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "exifr": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/exifr/-/exifr-6.3.0.tgz", + "integrity": "sha512-NCSOP15py+4QyvD90etFN0QOVj12ygVE8kfEDG8GDc+SXf9YAOxua2x5kGp6WvxbGjufA5C3r/1ZKHOpHbEWFg==" + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "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.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "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.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "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.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "fbjs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-2.0.0.tgz", + "integrity": "sha512-8XA8ny9ifxrAWlyhAbexXcs3rRMtxWcs3M0lctLfB49jRDHiaxj+Mo0XxbwE7nKZYzgCFoq64FS+WFd4IycPPQ==", + "requires": { + "core-js": "^3.6.4", + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-saver": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", + "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" + }, + "filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "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.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatpickr": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.3.tgz", + "integrity": "sha512-007VucCkqNOMMb9ggRLNuJowwaJcyOh4sKAFcdGfahfGc7JQbf94zSzjdBq/wVyHWUEs5o3+idhFZ0wbZMRmVQ==" + }, + "flatted": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", + "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==" + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "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.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-form-data": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-form-data/-/get-form-data-2.0.0.tgz", + "integrity": "sha512-YUpw0aTWeGliifqMYrTohe/YdqVmKLmaNwuscd2WlRNGfba57JHGuuvvv2c6LiZdFys285POVWANTh6SqcwFag==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "google-maps-infobox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-2.0.0.tgz", + "integrity": "sha512-hTuWmWZZSOxf5D/z7l3/hTF1grgRvLG53BEKMdjiKOG+FcK/kH7vqseUeyIU9Zj2ZIqKTOaro0nknxpAuRq4Vw==" + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "optional": true + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "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.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "history": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.0.0.tgz", + "integrity": "sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==", + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "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.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } + }, + "html-to-draftjs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/html-to-draftjs/-/html-to-draftjs-1.5.0.tgz", + "integrity": "sha512-kggLXBNciKDwKf+KYsuE+V5gw4dZ7nHyGMX9m0wy7urzWjKGWyNFetmArRLvRV0VrxKN70WylFsJvMTJx02OBQ==" + }, + "html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "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.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "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" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-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.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + }, + "immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "intl-format-cache": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.3.1.tgz", + "integrity": "sha512-OEUYNA7D06agqPOYhbTkl0T8HA3QKSuwWh1HiClEnpd9vw7N+3XsQt5iZ0GUEchp5CW1fQk/tary+NsbF3yQ1Q==" + }, + "intl-locales-supported": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/intl-locales-supported/-/intl-locales-supported-1.8.12.tgz", + "integrity": "sha512-FJPl7p1LYO/C+LpwlDcvVpq7AeFTdFgwnq1JjdNYKjb51xkIxssXRR8LaA0fJFogjwRRztqw1ahgSJMSZsSFdw==" + }, + "intl-messageformat": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-7.8.4.tgz", + "integrity": "sha512-yS0cLESCKCYjseCOGXuV4pxJm/buTfyCJ1nzQjryHmSehlptbZbn9fnlk1I9peLopZGGbjj46yHHiTAEZ1qOTA==", + "requires": { + "intl-format-cache": "^4.2.21", + "intl-messageformat-parser": "^3.6.4" + } + }, + "intl-messageformat-parser": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz", + "integrity": "sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA==", + "requires": { + "@formatjs/intl-unified-numberformat": "^3.2.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "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.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "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.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-shallow-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shallow-equal/-/is-shallow-equal-1.0.1.tgz", + "integrity": "sha512-lq5RvK+85Hs5J3p4oA4256M1FEffzmI533ikeDHvJd42nouRRx5wBzt36JuviiGe5dIPyHON/d0/Up+PBo6XkQ==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz", + "integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==", + "requires": { + "@jest/core": "^26.6.0", + "import-local": "^3.0.2", + "jest-cli": "^26.6.0" + }, + "dependencies": { + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + } + } + }, + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "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", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + } + } + }, + "jest-circus": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.0.tgz", + "integrity": "sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng==", + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.0", + "@jest/test-result": "^26.6.0", + "@jest/types": "^26.6.0", + "@types/babel__traverse": "^7.0.4", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^26.6.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.0", + "jest-matcher-utils": "^26.6.0", + "jest-message-util": "^26.6.0", + "jest-runner": "^26.6.0", + "jest-runtime": "^26.6.0", + "jest-snapshot": "^26.6.0", + "jest-util": "^26.6.0", + "pretty-format": "^26.6.0", + "stack-utils": "^2.0.2", + "throat": "^5.0.0" + } + }, + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + }, + "jest-resolve": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.0.tgz", + "integrity": "sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ==", + "requires": { + "@jest/types": "^26.6.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.0", + "read-pkg-up": "^7.0.1", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "dependencies": { + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + } + }, + "jest-watch-typeahead": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz", + "integrity": "sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg==", + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^26.0.0", + "jest-watcher": "^26.3.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0" + } + }, + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, + "js-cookie": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.0.tgz", + "integrity": "sha512-oUbbplKuH07/XX2YD2+Q+GMiPpnVXaRz8npE7suhBH9QEkJe2W7mQ6rwuMXHue3fpfcftQwzgyvGzIHyfCSngQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, + "jszip": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz", + "integrity": "sha1-SHqTt2w7/6bLCFzWHrk06r4tKU8=", + "requires": { + "pako": "~0.2.5" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "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.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "leaflet": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", + "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==" + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash._baseiteratee": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash._baseiteratee/-/lodash._baseiteratee-4.7.0.tgz", + "integrity": "sha1-NKm1VDVycnw9sueO2uPA6eZr0QI=", + "requires": { + "lodash._stringtopath": "~4.8.0" + } + }, + "lodash._basetostring": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz", + "integrity": "sha1-kyfJ3FFYhmt/pLnUL0Y45XZt2d8=" + }, + "lodash._baseuniq": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", + "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", + "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" + }, + "lodash._stringtopath": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/lodash._stringtopath/-/lodash._stringtopath-4.8.0.tgz", + "integrity": "sha1-lBvPDmQmbl/B1m/tCmlZVExXaCQ=", + "requires": { + "lodash._basetostring": "~4.12.0" + } + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequalwith": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz", + "integrity": "sha1-Jmcm3dUo+FTyH06pigZWBuD7xrA=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.orderby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz", + "integrity": "sha1-5pfwTOXXhSL1TZM4syuBozk+TrM=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "lodash.uniqby": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.5.0.tgz", + "integrity": "sha1-o6F7v2LutiQPSRhG6XwcTipeHiE=", + "requires": { + "lodash._baseiteratee": "~4.7.0", + "lodash._baseuniq": "~4.6.0" + } + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "marker-clusterer-plus": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/marker-clusterer-plus/-/marker-clusterer-plus-2.1.4.tgz", + "integrity": "sha1-+O/3TVmdqzt9Dj/tUmTqDnBPXWc=" + }, + "markerwithlabel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.2.tgz", + "integrity": "sha512-C/cbm1A0h/u54gwHk5ZJNdUU3V3+1BbCpRPMsMyFA7vF4yL+aB4rWpxACz29TpQ+cTg6/iQroExh0PMSRGtQFg==" + }, + "math-log2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", + "integrity": "sha1-+4lBvl9evol55xjmJzsXjlhpRWU=" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + }, + "mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha1-P4fDHprxpf1IX7nbE0Qosju7e6g=", + "requires": { + "wildcard": "^1.1.0" + } + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "requires": { + "mime-db": "1.48.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "requires": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + } + }, + "mini-css-extract-plugin": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz", + "integrity": "sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA==", + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "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.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "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" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "nanoclone": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" + }, + "nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "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" + } + }, + "native-url": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", + "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", + "requires": { + "querystring": "^0.2.0" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "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.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "nouislider": { + "version": "14.6.2", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-14.6.2.tgz", + "integrity": "sha512-/lJeqJBghNAZS3P2VYrHzm1RM6YJPvvC/1wNpGaHBRX+05wpzUDafrW/ohAYp4kjKhRH8+BJ0vkorCHiMmgTMQ==" + }, + "nouislider-react": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nouislider-react/-/nouislider-react-3.3.8.tgz", + "integrity": "sha512-Le0kUs29iaUEdaO3cdZcc7EXteFNpXVuasxz4F8Z520PUI17sJJAoggiScPu+Nz6vMx0o9SgK0v8bMXcePF20A==", + "requires": { + "nouislider": "^14.5.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + } + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "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.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "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.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + } + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "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.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "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" + } + }, + "perfect-scrollbar": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.1.tgz", + "integrity": "sha512-MrSImINnIh3Tm1hdPT6bji6fmIeRorVEegQvyUnhqko2hDGTHhmjPefHXfxG/Jb8xVbfCwgmUIlIajERGXjVXQ==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/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.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-browser-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", + "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", + "requires": { + "postcss": "^7" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "requires": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "requires": { + "postcss": "^7.0.26" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-font-variant": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", + "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-initial": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", + "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "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": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "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": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "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": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", + "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", + "requires": { + "@csstools/normalize.css": "^10.1.0", + "browserslist": "^4.6.2", + "postcss": "^7.0.17", + "postcss-browser-comments": "^3.0.0", + "sanitize.css": "^10.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "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": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "requires": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-rtl": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/postcss-rtl/-/postcss-rtl-1.5.0.tgz", + "integrity": "sha512-7uQeaMBhAlnu7xgytvTocojFKp08W4FND/xE/ajj/J6ABOGhdDF1mLGzaRrC5/u/Sr71BEUi13xgvs2j8U16AA==", + "requires": { + "rtlcss": "^2.4.0" + } + }, + "postcss-safe-parser": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", + "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", + "requires": { + "postcss": "^8.1.0" + }, + "dependencies": { + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + }, + "postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + } + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-not": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", + "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "preact": { + "version": "10.5.14", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz", + "integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, + "prismjs": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/prismjs/-/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.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "proper-lockfile": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-2.0.1.tgz", + "integrity": "sha1-FZ+wYZPTIAP0s2kd0uwaY0qoDR0=", + "requires": { + "graceful-fs": "^4.1.2", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" + } + } + }, + "property-expr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz", + "integrity": "sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "qs-stringify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/qs-stringify/-/qs-stringify-1.2.1.tgz", + "integrity": "sha512-2N5xGLGZUxpgAYq1fD1LmBSCbxQVsXYt5JU0nU3FuPWO8PlCnKNFQwXkZgyB6mrTdg7IbexX4wxIR403dJw9pw==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", + "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-apexcharts": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.3.6.tgz", + "integrity": "sha512-ahpMOnuw1ZdD3/fkk9MYRLpqYQ66cZz72+he1R00HaT1VcSjfYc9editQDhE2jGRDuxubmaxVcO3z4FtAk5N0w==", + "requires": { + "prop-types": "^15.5.7" + } + }, + "react-app-polyfill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", + "integrity": "sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA==", + "requires": { + "core-js": "^3.6.5", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "whatwg-fetch": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "react-app-rewire-aliases": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/react-app-rewire-aliases/-/react-app-rewire-aliases-0.2.0.tgz", + "integrity": "sha1-71/8AJnuwFJ5lJ+rjUmDwVVqHB4=", + "dev": true + }, + "react-app-rewire-postcss": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-app-rewire-postcss/-/react-app-rewire-postcss-3.0.2.tgz", + "integrity": "sha512-sGjIIzQ4sQE8r2ZeSCokf+hKLxOr5i8J0iAlg0kxwXRdy6bDrPa345EMdYPPzUZQxnZgZIsFL+QyMWtJHulEDg==", + "dev": true, + "requires": { + "postcss-loader": "^3.0.0" + } + }, + "react-app-rewire-sass-rule": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-app-rewire-sass-rule/-/react-app-rewire-sass-rule-2.2.1.tgz", + "integrity": "sha512-vvm8MO2UD31WAaon3EpqI0CWTBCJNzHKTYRWLf4jjXpZyiPql2XUI+Gfd8mFnIcA4Str98Xrtd5VxCzF4X0j0Q==", + "dev": true, + "requires": { + "node-sass": "^4.9.0", + "sass-loader": "^7.0.3" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "sass-loader": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^6.3.0" + } + } + } + }, + "react-app-rewired": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.1.8.tgz", + "integrity": "sha512-wjXPdKPLscA7mn0I1de1NHrbfWdXz4S1ladaGgHVKdn1hTgKK5N6EdGIJM0KrS6bKnJBj7WuqJroDTsPKKr66Q==", + "dev": true, + "requires": { + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "react-chartjs-2": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-2.11.2.tgz", + "integrity": "sha512-hcPS9vmRJeAALPPf0uo02BiD8BDm0HNmneJYTZVR74UKprXOpql+Jy1rVuj93rKw0Jfx77mkcRfXPxTe5K83uw==", + "requires": { + "lodash": "^4.17.19", + "prop-types": "^15.7.2" + } + }, + "react-contexify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-contexify/-/react-contexify-5.0.0.tgz", + "integrity": "sha512-2FIp7lxJ6dtfGr8EZ4uVV5p5TQjd0n2h/JU7PrejNIMiCeZWvSVPFh4lj1ZvjXosglBvP7q5JQQ8yUCdSaMSaw==", + "requires": { + "clsx": "^1.1.1" + } + }, + "react-copy-to-clipboard": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", + "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", + "requires": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + } + }, + "react-country-flag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-country-flag/-/react-country-flag-2.0.1.tgz", + "integrity": "sha512-cZQp+MTQUfSkI++ypDJU6PNgNU2K6Z/9htO4ct4HzvWAs19DoMbnvhzyK31lkBnW1vfx9OkMwskxuaYbEcFjLw==" + }, + "react-csv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-csv/-/react-csv-2.0.3.tgz", + "integrity": "sha512-exyAdFLAxtuM4wNwLYrlKyPYLiJ7e0mv9tqPAd3kq+k1CiJFtznevR3yP0icv5q/y200w+lzNgi7TQn1Wrhu0w==" + }, + "react-data-table-component": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-6.11.2.tgz", + "integrity": "sha512-xoaTVTX4svgY3norL707GSUZJ5Q0FRZ1g2QY5oI5soiNtGMor9yGTXjnMq6mDmL9A4a7lmA+4xntoEEMJMcIvA==", + "requires": { + "deepmerge": "^4.2.2", + "lodash.orderby": "^4.6.0", + "shortid": "^2.2.15" + } + }, + "react-datepicker": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.2.1.tgz", + "integrity": "sha512-0gcvHMnX8rS1fV90PjjsB7MQdsWNU77JeVHf6bbwK9HnFxgwjVflTx40ebKmHV+leqe+f+FgUP9Nvqbe5RGyfA==", + "requires": { + "@popperjs/core": "^2.9.2", + "classnames": "^2.2.6", + "date-fns": "^2.0.1", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.10.0", + "react-popper": "^2.2.5" + }, + "dependencies": { + "react-popper": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz", + "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==", + "requires": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", + "requires": { + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "requires": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "react-dom": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", + "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.1" + } + }, + "react-draft-wysiwyg": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/react-draft-wysiwyg/-/react-draft-wysiwyg-1.14.5.tgz", + "integrity": "sha512-utbJEs91757QXYoBwKRb/4kB3JdswLlj0heUiAeXs/OxZAUISJXxLMFLBIixRlIcUnNkwxOsMikRshDMtWIS3g==", + "requires": { + "classnames": "^2.2.6", + "draftjs-utils": "^0.10.2", + "html-to-draftjs": "^1.5.0", + "linkify-it": "^2.2.0", + "prop-types": "^15.7.2" + } + }, + "react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" + }, + "react-export-excel": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/react-export-excel/-/react-export-excel-0.5.3.tgz", + "integrity": "sha512-J0xKLojhLYEpgptdJWU7o4NljSQxv96yFNLAfa9M0m1jNNiVXBdBSlWCW713MRFl1ECJRhV4CbrjbmvEjEFvWg==", + "requires": { + "file-saver": "1.3.8", + "xlsx": "git+https://github.com/securedeveloper/js-xlsx.git" + }, + "dependencies": { + "adler-32": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.0.tgz", + "integrity": "sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g==", + "requires": { + "printj": "~1.2.2" + } + }, + "codepage": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz", + "integrity": "sha1-Ty5dfAl13ij4hJgFjcta/KtqX3E=", + "requires": { + "commander": "^8.1.0", + "concat-stream": "^2.0.0", + "voc": "^1.2.0" + } + }, + "commander": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.1.0.tgz", + "integrity": "sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "dependencies": { + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + } + } + }, + "file-saver": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", + "integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==" + }, + "frac": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", + "integrity": "sha1-V3Z3t/3L5vr3xGHxgB00E3zaQ1Q=" + }, + "printj": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.2.2.tgz", + "integrity": "sha512-dx9nIry0Z12s5oebhenDCFQjj/IMVotLMbvFP6OJ+C3v+EV30mtYoj6QtaulFo+DbWCbpEeaqcLYMh6CRuVjsA==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "ssf": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", + "integrity": "sha1-udTcahwbz3b4q/qW19dlb7Kr7NY=", + "requires": { + "colors": "0.6.2", + "frac": "0.3.1", + "voc": "^1.2.0" + } + }, + "xlsx": { + "version": "git+https://github.com/securedeveloper/js-xlsx.git#32f550d3b3bdb1b781aabe100683311cd982c98e", + "from": "git+https://github.com/securedeveloper/js-xlsx.git", + "requires": { + "adler-32": "^1.3.0", + "cfb": ">=0.10.0", + "codepage": "~1.3.6", + "commander": "^8.1.0", + "crc-32": "^1.2.0", + "jszip": "2.4.0", + "ssf": "~0.8.1" + } + } + } + }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "react-feather": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/react-feather/-/react-feather-2.0.9.tgz", + "integrity": "sha512-yMfCGRkZdXwIs23Zw/zIWCJO3m3tlaUvtHiXlW+3FH7cIT6fiK1iJ7RJWugXq7Fso8ZaQyUm92/GOOHXvkiVUw==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-flatpickr": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/react-flatpickr/-/react-flatpickr-3.9.1.tgz", + "integrity": "sha512-g3FdnrYfFWOj/cWuPwHhYigpchu8GwAJvUzxUrba20dhrAdW1+dwAQxE+3aGe6eFYhYlTosVYTP8XAefnn5kxg==", + "requires": { + "flatpickr": "^4.5.7", + "prop-types": "^15.5.10" + } + }, + "react-google-maps": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", + "integrity": "sha512-8z5nX9DxIcBCXuEiurmRT1VXVwnzx0C6+3Es6lxB2/OyY2SLax2/LcDu6Aldxnl3HegefTL7NJzGeaKAJ61pOA==", + "requires": { + "babel-runtime": "^6.11.6", + "can-use-dom": "^0.1.0", + "google-maps-infobox": "^2.0.0", + "invariant": "^2.2.1", + "lodash": "^4.16.2", + "marker-clusterer-plus": "^2.1.4", + "markerwithlabel": "^2.0.1", + "prop-types": "^15.5.8", + "recompose": "^0.26.0", + "scriptjs": "^2.5.8", + "warning": "^3.0.0" + } + }, + "react-hook-form": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-6.15.1.tgz", + "integrity": "sha512-bL0LQuQ3OlM3JYfbacKtBPLOHhmgYz8Lj6ivMrvu2M6e1wnt4sbGRtPEPYCc/8z3WDbjrMwfAfLX92OsB65pFA==" + }, + "react-icons": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz", + "integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ==" + }, + "react-indiana-drag-scroll": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-indiana-drag-scroll/-/react-indiana-drag-scroll-2.0.1.tgz", + "integrity": "sha512-xZQXfFf9pHLOL6/AvTFiGZCB4Vu8wO8DjEaO+xRVkSki2bEZSFfS8eeKG0OkTzcYVrXzc5aHAD1Mfl3EG+EFMA==", + "requires": { + "classnames": "^2.2.6", + "debounce": "^1.2.0", + "easy-bem": "^1.1.1" + } + }, + "react-input-autosize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", + "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==", + "requires": { + "prop-types": "^15.5.8" + } + }, + "react-intl": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-3.11.0.tgz", + "integrity": "sha512-W5kc9uCkNRjw4ijZ9cBts5VDtK2DkILKZ1WpqmvVLHZ6EIHMFZkhFs6LQJurN+2msdROfB59gc5K1z8kM0u6/w==", + "requires": { + "@formatjs/intl-listformat": "^1.3.7", + "@formatjs/intl-relativetimeformat": "^4.5.7", + "@formatjs/intl-unified-numberformat": "^3.0.4", + "@formatjs/intl-utils": "^2.0.4", + "@formatjs/macro": "^0.2.6", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/invariant": "^2.2.31", + "hoist-non-react-statics": "^3.3.1", + "intl-format-cache": "^4.2.19", + "intl-locales-supported": "^1.8.4", + "intl-messageformat": "^7.8.2", + "intl-messageformat-parser": "^3.6.2", + "shallow-equal": "^1.2.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "react-leaflet": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-3.1.0.tgz", + "integrity": "sha512-kdZS8NYbYFPmkQr7zSDR2gkKGFeWvkxqoqcmZEckzHL4d5c85dJ2gbbqhaPDpmWWgaRw9O29uA/77qpKmK4mTQ==", + "requires": { + "@react-leaflet/core": "^1.0.2" + } + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-onclickoutside": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.11.2.tgz", + "integrity": "sha512-640486eSwU/t5iD6yeTlefma8dI3bxPXD93hM9JGKyYITAd0P1JFkkcDeyHZRqNpY/fv1YW0Fad9BXr44OY8wQ==" + }, + "react-paginate": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-paginate/-/react-paginate-7.0.0.tgz", + "integrity": "sha512-mzPwHGJfSs79JBGX2V0v/FfQp3yWdz0XRrB9JvsUbJdsxqCt4osk1O669+K8VPQ0Lh9v0lJsnLLoJwnsgdJFng==", + "requires": { + "prop-types": "^15.6.1" + } + }, + "react-perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/react-perfect-scrollbar/-/react-perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-EDJxB57iGF1d3bhMtO9YKTYEutiSEM2RdQRA3bm9fNxG5W5oR7nFtmMaCzsWwW72VMuRufpyLkcgdm2D2gejSQ==", + "requires": { + "perfect-scrollbar": "^1.5.0", + "prop-types": "^15.6.1" + } + }, + "react-player": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.6.2.tgz", + "integrity": "sha512-Wi9DynNSVgddKxac5OzsH0Upk6VRYssvLLGgCRw6vsjzqMX6S5N26WDRNYnLaHykxFNtpPSDc53fXDe52hMaCg==", + "requires": { + "deepmerge": "^4.0.0", + "load-script": "^1.0.0", + "memoize-one": "^5.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.0.1" + } + }, + "react-popper": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", + "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", + "requires": { + "@babel/runtime": "^7.1.2", + "@hypnosphi/create-react-context": "^0.3.1", + "deep-equal": "^1.1.1", + "popper.js": "^1.14.4", + "prop-types": "^15.6.1", + "typed-styles": "^0.0.7", + "warning": "^4.0.2" + }, + "dependencies": { + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "react-rating": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-rating/-/react-rating-2.0.5.tgz", + "integrity": "sha512-uldxgLCe5bzqGX7V+7/bPgQQj2Kok6eiMgTMxjKOhfhnQkFLDlc4TjMlp7gaJFAHWdbiOnqpiShI7z8as6oWtg==", + "requires": { + "@types/lodash": "^4.14.105", + "@types/react": "^16.0.40" + }, + "dependencies": { + "@types/react": { + "version": "16.14.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.10.tgz", + "integrity": "sha512-QadBsMyF6ldjEAXEhsmEW/L0uBDJT8yw7Qoe5sRnEKVrzMkiYoJwqoL5TKJOlArsn/wvIJM/XdVzkdL6+AS64Q==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + } + } + }, + "react-redux": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.2.tgz", + "integrity": "sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==", + "requires": { + "@babel/runtime": "^7.12.1", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" + }, + "react-resize-detector": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-5.2.0.tgz", + "integrity": "sha512-PQAc03J2eyhvaiWgEdQ8+bKbbyGJzLEr70KuivBd1IEmP/iewNakLUMkxm6MWnDqsRPty85pioyg8MvGb0qC8A==", + "requires": { + "lodash": "^4.17.20", + "prop-types": "^15.7.2", + "raf-schd": "^4.0.2", + "resize-observer-polyfill": "^1.5.1" + } + }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + } + } + }, + "react-scripts": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.2.tgz", + "integrity": "sha512-okaWNaGDGtnXyM2CLMUl8gYZnAubgxEulC40FYjsxn5bbj+G/mDINdy24wHz4Vypb/LWtIe8rdBU78k/74v8Mw==", + "requires": { + "@babel/core": "7.12.3", + "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", + "@svgr/webpack": "5.5.0", + "@typescript-eslint/eslint-plugin": "^4.5.0", + "@typescript-eslint/parser": "^4.5.0", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.0", + "babel-loader": "8.1.0", + "babel-plugin-named-asset-import": "^0.3.7", + "babel-preset-react-app": "^10.0.0", + "bfj": "^7.0.2", + "camelcase": "^6.1.0", + "case-sensitive-paths-webpack-plugin": "2.3.0", + "css-loader": "4.3.0", + "dotenv": "8.2.0", + "dotenv-expand": "5.1.0", + "eslint": "^7.11.0", + "eslint-config-react-app": "^6.0.0", + "eslint-plugin-flowtype": "^5.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-testing-library": "^3.9.2", + "eslint-webpack-plugin": "^2.1.0", + "file-loader": "6.1.1", + "fs-extra": "^9.0.1", + "fsevents": "^2.1.3", + "html-webpack-plugin": "4.5.0", + "identity-obj-proxy": "3.0.0", + "jest": "26.6.0", + "jest-circus": "26.6.0", + "jest-resolve": "26.6.0", + "jest-watch-typeahead": "0.6.1", + "mini-css-extract-plugin": "0.11.3", + "optimize-css-assets-webpack-plugin": "5.0.4", + "pnp-webpack-plugin": "1.6.4", + "postcss-flexbugs-fixes": "4.2.1", + "postcss-loader": "3.0.0", + "postcss-normalize": "8.0.1", + "postcss-preset-env": "6.7.0", + "postcss-safe-parser": "5.0.2", + "prompts": "2.4.0", + "react-app-polyfill": "^2.0.0", + "react-dev-utils": "^11.0.2", + "react-refresh": "^0.8.3", + "resolve": "1.18.1", + "resolve-url-loader": "^3.1.2", + "sass-loader": "^10.0.5", + "semver": "7.3.2", + "style-loader": "1.3.0", + "terser-webpack-plugin": "4.2.3", + "ts-pnp": "1.2.0", + "url-loader": "4.1.1", + "webpack": "4.44.2", + "webpack-dev-server": "3.11.0", + "webpack-manifest-plugin": "2.2.0", + "workbox-webpack-plugin": "5.1.4" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "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" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==" + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "sass-loader": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.0.tgz", + "integrity": "sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==", + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "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.3.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": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "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" + } + } + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "react-scroll-up": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/react-scroll-up/-/react-scroll-up-1.3.7.tgz", + "integrity": "sha512-STijjW7R/cc2+6GswZzcBb73sQgtQP5IZnSIeJlKGb2I1WDyc1bl5dbHuPeklDY0OAf3opV2DUHXDYhItZe/cw==", + "requires": { + "detect-passive-events": "^2.0.2", + "object-assign": "^4.0.1", + "prop-types": "^15.5.8", + "tween-functions": "^1.1.0" + } + }, + "react-select": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-4.0.2.tgz", + "integrity": "sha512-BiihrRpRIBBvNqofNZIBpo08Kw8DBHb/kgpIDW4bxgkttk50Sxf0alEIKobns3U7UJXk/CA4rsFUueQEg9Pm5A==", + "requires": { + "@babel/runtime": "^7.4.4", + "@emotion/cache": "^11.0.0", + "@emotion/css": "^11.0.0", + "@emotion/react": "^11.1.1", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-input-autosize": "^3.0.0", + "react-transition-group": "^4.3.0" + } + }, + "react-shepherd": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-shepherd/-/react-shepherd-3.3.0.tgz", + "integrity": "sha512-w9ulB7ILt+uNJpRQmLsdBZSS600UkquDcToOsWGg2xv52FgcbMkGAIFtHAx7beXha/Pu6FFHy0SM67ZqUGWAxA==", + "requires": { + "shepherd.js": "^8.0.0" + } + }, + "react-slidedown": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/react-slidedown/-/react-slidedown-2.4.5.tgz", + "integrity": "sha512-zFDhgqQ1ZLfRr+rQA7p+13OTT/+zUR/+3v3JnwrnXPM8R+1KHhuTNseYHU8jYN3QfxjJXtqve0rgbWCBiFkpiw==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "react-smooth": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.6.tgz", + "integrity": "sha512-B2vL4trGpNSMSOzFiAul9kFAsxTukL9Wyy9EXtkQy3GJr6sZqW9e1nShdVOJ3hRYamPZ94O17r3Q0bjSw3UYtg==", + "requires": { + "lodash": "~4.17.4", + "prop-types": "^15.6.0", + "raf": "^3.4.0", + "react-transition-group": "^2.5.0" + }, + "dependencies": { + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + } + } + }, + "react-sortablejs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-sortablejs/-/react-sortablejs-6.0.0.tgz", + "integrity": "sha512-vzi+TWOnofcYg+dYnC/Iz/ZZkBGG76uM6KaLwuAqBk0349JQxIy3PZizbK0TJdLlK6NnLt4CiEyyQXSSnVYvEw==", + "requires": { + "classnames": "^2.2.6", + "tiny-invariant": "^1.1.0" + } + }, + "react-toastify": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-7.0.3.tgz", + "integrity": "sha512-cxZ5rfurC8LzcZQMTYc8RHIkQTs+BFur18Pzk6Loz6uS8OXUWm6nXVlH/wqglz4Z7UAE8xxcF5mRjfE13487uQ==", + "requires": { + "clsx": "^1.1.1" + } + }, + "react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "reactstrap": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-8.6.0.tgz", + "integrity": "sha512-03/UMbLPR6MhVStVUfCLuKh8xh4JOtNVkRxDB9/uHixN+cEQPOpSYa0K69YyK1/2YdZBs2qS6y0cQkK8NQKBHA==", + "requires": { + "@babel/runtime": "^7.2.0", + "classnames": "^2.2.3", + "prop-types": "^15.5.8", + "react-popper": "^1.3.6", + "react-transition-group": "^2.3.1" + }, + "dependencies": { + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + } + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "recharts": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.0.4.tgz", + "integrity": "sha512-XwFRhyOW6APMKvrCqN8e1IPHAQi7lmrOqp48LKi40NFI8WjFWHgTaTfwBBMsGCnTJSezJEEd/41L3bo/tfevkw==", + "requires": { + "classnames": "^2.2.5", + "d3-interpolate": "^2.0.1", + "d3-scale": "^3.2.3", + "d3-shape": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.19", + "react-resize-detector": "^5.2.0", + "react-smooth": "^1.0.6", + "recharts-scale": "^0.4.2", + "reduce-css-calc": "^2.1.7" + } + }, + "recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "requires": { + "decimal.js-light": "^2.4.1" + } + }, + "recompose": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", + "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "requires": { + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "symbol-observable": "^1.0.4" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-debounced": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/redux-debounced/-/redux-debounced-0.5.0.tgz", + "integrity": "sha512-O2anhB0A6yQZH19uLETFtajcUQLcyiJcgC0hHSoFr5T3hWGtt0C5s6KNnb2RX51MwCh5VCl9ehZTv91F/rsZww==" + }, + "redux-saga": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.3.tgz", + "integrity": "sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==", + "requires": { + "@redux-saga/core": "^1.1.3" + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "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.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "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": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "resolve-url-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", + "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", + "requires": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.36", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "rtlcss": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.6.2.tgz", + "integrity": "sha512-06LFAr+GAPo+BvaynsXRfoYTJvSaWRyOhURCQ7aeI1MKph9meM222F+Zkt3bDamyHHJuGi3VPtiRkpyswmQbGA==", + "requires": { + "@choojs/findup": "^0.2.1", + "chalk": "^2.4.2", + "mkdirp": "^0.5.1", + "postcss": "^6.0.23", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "sanitize.css": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", + "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" + }, + "sass": { + "version": "1.26.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.8.tgz", + "integrity": "sha512-yvtzyrKLGiXQu7H12ekXqsfoGT/aTKeMDyVzCB675k1HYuaj0py63i8Uf4SI9CHXj6apDhpfwbUr3gGOjdpu2Q==", + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "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.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "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.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "screenfull": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.2.tgz", + "integrity": "sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ==" + }, + "scriptjs": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", + "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "seamless-immutable": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.4.tgz", + "integrity": "sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A==", + "optional": true + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "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.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "optional": true + }, + "shepherd.js": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/shepherd.js/-/shepherd.js-8.3.1.tgz", + "integrity": "sha512-IhxZNhnK2m/pNTXudNfYrcwvcZNWkeYngQbQee8nC3xJ2GjeIatGqivhdZAMZ+LeogZvKMakB931d/V534uhrw==", + "requires": { + "@popperjs/core": "^2.9.2", + "deepmerge": "^4.2.2", + "smoothscroll-polyfill": "^0.4.4" + } + }, + "shortid": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", + "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "requires": { + "nanoid": "^2.1.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "smoothscroll-polyfill": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz", + "integrity": "sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "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.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "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.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + } + } + }, + "sortablejs": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.12.0.tgz", + "integrity": "sha512-bPn57rCjBRlt2sC24RBsu40wZsmLkSo2XeqG8k6DC1zru5eObQUIPPZAQG7W2SJ8FZQYq+BEJmvuw1Zxb3chqg==" + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "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.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "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.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "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.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ssf": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz", + "integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==", + "requires": { + "frac": "~1.1.2" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "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.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + } + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", + "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "requires": { + "babel-extract-comments": "^1.0.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + } + }, + "styled-components": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.1.1.tgz", + "integrity": "sha512-1ps8ZAYu2Husx+Vz8D+MvXwEwvMwFv+hqqUwhNlDN5ybg6A+3xyW1ECrAgywhvXapNfXiz79jJyU0x22z0FFTg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "stylis": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz", + "integrity": "sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "requires": { + "svg.js": "^2.0.1" + } + }, + "svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/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.npmjs.org/svg.filter.js/-/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.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "requires": { + "svg.js": "^2.4.0" + } + }, + "svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "requires": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "dependencies": { + "svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "requires": { + "svg.js": "^2.2.5" + } + } + } + }, + "svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "requires": { + "svg.js": "^2.6.5" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "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.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "sweetalert2": { + "version": "10.14.0", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-10.14.0.tgz", + "integrity": "sha512-EBUh4k9qyRRsttm9X9j7WUhLExetvTJpcbp1VTMJCpuI2UwHLesXMIw9M+UeuqBywv0UjNMR5PKH7Qnv65m8rw==" + }, + "sweetalert2-react-content": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sweetalert2-react-content/-/sweetalert2-react-content-3.0.1.tgz", + "integrity": "sha512-VBybIRTIzY2bTkUddcp2wMJ3mp3gfGGX6+BfW2dDrEv6bXM2WtzJpFkM2imFpcPhpkOIf2/J8gLxEu0jBZq0DQ==" + }, + "swiper": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-6.0.4.tgz", + "integrity": "sha512-D+DBxgg81+uocgsvhmdzrpr4GHzhAt2yImArqzunrC80y7+/yCEAq/EJw1VASD+CBFNacF4F8FEIqJMLyDFM0g==", + "requires": { + "dom7": "^3.0.0-alpha.7", + "ssr-window": "^3.0.0-alpha.4" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "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": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "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": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "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.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tus-js-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tus-js-client/-/tus-js-client-2.3.0.tgz", + "integrity": "sha512-I4cSwm6N5qxqCmBqenvutwSHe9ntf81lLrtf6BmLpG2v4wTl89atCQKqGgqvkodE6Lx+iKIjMbaXmfvStTg01g==", + "requires": { + "buffer-from": "^0.1.1", + "combine-errors": "^3.0.3", + "is-stream": "^2.0.0", + "js-base64": "^2.6.1", + "lodash.throttle": "^4.1.1", + "proper-lockfile": "^2.0.1", + "url-parse": "^1.4.3" + }, + "dependencies": { + "buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + } + } + }, + "tween-functions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", + "integrity": "sha1-GuOlDnxguz3vd06scHrLynO7w/8=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-styles": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", + "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typesafe-actions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/typesafe-actions/-/typesafe-actions-5.1.0.tgz", + "integrity": "sha512-bna6Yi1pRznoo6Bz1cE6btB/Yy8Xywytyfrzu/wc+NFW3ZF0I+2iCGImhBsoYYCOWuICtRO4yHcnDlzgo1AdNg==" + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "requires": { + "typescript-logic": "^0.0.0" + } + }, + "typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" + }, + "typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "requires": { + "typescript-compare": "^0.0.2" + } + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "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": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "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.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "uppy": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/uppy/-/uppy-1.21.2.tgz", + "integrity": "sha512-4qkdvtMiVysDjb3p+BoEA9G8wVjXg8Hs2F3IiPzWOArbIfKB2pJf8QhdNgg9o6RuKZeq4wx2ynzk+KP1h6nEtQ==", + "requires": { + "@uppy/aws-s3": "^1.7.0", + "@uppy/aws-s3-multipart": "^1.8.6", + "@uppy/companion-client": "^1.5.4", + "@uppy/core": "^1.13.2", + "@uppy/dashboard": "^1.12.8", + "@uppy/drag-drop": "^1.4.19", + "@uppy/dropbox": "^1.4.16", + "@uppy/facebook": "^1.1.16", + "@uppy/file-input": "^1.4.17", + "@uppy/form": "^1.3.20", + "@uppy/golden-retriever": "^1.3.19", + "@uppy/google-drive": "^1.5.16", + "@uppy/informer": "^1.5.11", + "@uppy/instagram": "^1.4.16", + "@uppy/onedrive": "^1.1.16", + "@uppy/progress-bar": "^1.3.19", + "@uppy/provider-views": "^1.7.7", + "@uppy/redux-dev-tools": "^1.3.5", + "@uppy/screen-capture": "^1.0.8", + "@uppy/status-bar": "^1.7.6", + "@uppy/store-default": "^1.2.4", + "@uppy/store-redux": "^1.2.4", + "@uppy/thumbnail-generator": "^1.6.7", + "@uppy/transloadit": "^1.6.11", + "@uppy/tus": "^1.7.7", + "@uppy/url": "^1.5.11", + "@uppy/webcam": "^1.7.0", + "@uppy/xhr-upload": "^1.6.4" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + } + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "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.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-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.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "voc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", + "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==" + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "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.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "optional": 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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "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" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "optional": 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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "optional": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "optional": 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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "webpack": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", + "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "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.1.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.6.1", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "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" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + } + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "requires": { + "ansi-html": "0.0.7", + "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.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.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.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "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.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "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.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "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.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "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.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "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.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "webpack-manifest-plugin": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", + "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", + "requires": { + "fs-extra": "^7.0.0", + "lodash": ">=3.5 <5", + "object.entries": "^1.1.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "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.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha1-pwIEUwhNjNLv5wup02liY94XEKU=" + }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "wnumb": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/wnumb/-/wnumb-1.2.0.tgz", + "integrity": "sha512-eYut5K/dW7usfk/Mwm6nxBNoTPp/uP7PlXld+hhg7lDtHLdHFnNclywGYM9BRC7Ohd4JhwuHg+vmOUGfd3NhVA==" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "workbox-background-sync": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", + "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-broadcast-update": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", + "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-build": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", + "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", + "requires": { + "@babel/core": "^7.8.4", + "@babel/preset-env": "^7.8.4", + "@babel/runtime": "^7.8.4", + "@hapi/joi": "^15.1.0", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-replace": "^2.3.1", + "@surma/rollup-plugin-off-main-thread": "^1.1.1", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "lodash.template": "^4.5.0", + "pretty-bytes": "^5.3.0", + "rollup": "^1.31.1", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-terser": "^5.3.1", + "source-map": "^0.7.3", + "source-map-url": "^0.4.0", + "stringify-object": "^3.3.0", + "strip-comments": "^1.0.2", + "tempy": "^0.3.0", + "upath": "^1.2.0", + "workbox-background-sync": "^5.1.4", + "workbox-broadcast-update": "^5.1.4", + "workbox-cacheable-response": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-expiration": "^5.1.4", + "workbox-google-analytics": "^5.1.4", + "workbox-navigation-preload": "^5.1.4", + "workbox-precaching": "^5.1.4", + "workbox-range-requests": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4", + "workbox-streams": "^5.1.4", + "workbox-sw": "^5.1.4", + "workbox-window": "^5.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "workbox-cacheable-response": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", + "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-core": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", + "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" + }, + "workbox-expiration": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", + "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-google-analytics": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", + "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", + "requires": { + "workbox-background-sync": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4" + } + }, + "workbox-navigation-preload": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", + "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-precaching": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", + "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-range-requests": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", + "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-routing": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", + "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-strategies": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", + "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", + "requires": { + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" + } + }, + "workbox-streams": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", + "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", + "requires": { + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" + } + }, + "workbox-sw": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", + "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" + }, + "workbox-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ==", + "requires": { + "@babel/runtime": "^7.5.5", + "fast-json-stable-stringify": "^2.0.0", + "source-map-url": "^0.4.0", + "upath": "^1.1.2", + "webpack-sources": "^1.3.0", + "workbox-build": "^5.1.4" + } + }, + "workbox-window": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", + "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "requires": { + "microevent.ts": "~0.1.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==" + }, + "xlsx": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.2.tgz", + "integrity": "sha512-XTqOy7YpCUtGbvCYaCh1t1RsZ/y8cSCbZCOYtqqZ4/EmHkyv+/ghxmCvvR8yc4Tn5fhny+3j7voKwJaRlffNKA==", + "requires": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "ssf": "~0.10.3", + "wmf": "~1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, + "yarn": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.21.1.tgz", + "integrity": "sha512-dQgmJv676X/NQczpbiDtc2hsE/pppGDJAzwlRiADMTvFzYbdxPj2WO4PcNyriSt2c4jsCMpt8UFRKHUozt21GQ==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "yup": { + "version": "0.32.8", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.8.tgz", + "integrity": "sha512-SZulv5FIZ9d5H99EN5tRCRPXL0eyoYxWIP1AacCrjC9d4DfP13J1dROdKGfpfRHT3eQB6/ikBl5jG21smAfCkA==", + "requires": { + "@babel/runtime": "^7.10.5", + "@types/lodash": "^4.14.165", + "lodash": "^4.17.20", + "lodash-es": "^4.17.11", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b292c85 --- /dev/null +++ b/package.json @@ -0,0 +1,151 @@ +{ + "name": "control-web", + "version": "1.0.0", + "private": true, + "dependencies": { + "@casl/ability": "5.2.2", + "@casl/react": "2.1.1", + "@fullcalendar/core": "5.7.2", + "@fullcalendar/daygrid": "5.7.2", + "@fullcalendar/interaction": "5.7.2", + "@fullcalendar/list": "5.7.2", + "@fullcalendar/react": "5.7.0", + "@fullcalendar/timegrid": "5.7.2", + "@fullcalendar/timeline": "5.7.2", + "@hookform/resolvers": "1.3.4", + "@stomp/stompjs": "^6.1.0", + "@types/googlemaps": "^3.43.3", + "@types/history": "^4.7.8", + "@types/jest": "^26.0.23", + "@types/node": "^15.12.2", + "@types/react": "^17.0.11", + "@types/react-dom": "^17.0.7", + "@types/react-redux": "^7.1.16", + "@types/redux-debounced": "^0.2.19", + "@types/sockjs-client": "^1.5.0", + "@types/stompjs": "^2.3.4", + "@uppy/react": "1.10.8", + "animate.css": "4.1.1", + "apexcharts": "3.23.0", + "availity-reactstrap-validation-safe": "2.6.1", + "axios": "0.21.1", + "axios-mock-adapter": "1.19.0", + "babel-plugin-react-intl": "5.1.18", + "bootstrap": "4.5.2", + "bs-stepper": "1.7.0", + "chart.js": "^2.9.4", + "chroma-js": "2.1.0", + "classnames": "2.2.6", + "cleave.js": "1.6.0", + "connected-react-router": "^6.9.1", + "draft-js": "0.11.7", + "draftjs-to-html": "0.9.1", + "eslint-config-airbnb-base": "^14.2.1", + "file-saver": "2.0.2", + "flatpickr": "4.6.3", + "history": "5.0.0", + "html-to-draftjs": "1.5.0", + "http-proxy-middleware": "^2.0.1", + "intl-messageformat": "7.8.4", + "jquery": "3.5.1", + "js-cookie": "^3.0.0", + "jsonwebtoken": "8.5.1", + "jwt-decode": "^3.1.2", + "leaflet": "1.6.0", + "moment": "2.29.1", + "nouislider": "14.6.2", + "nouislider-react": "3.3.8", + "postcss-rtl": "1.5.0", + "prismjs": "1.19.0", + "prop-types": "15.7.2", + "react": "17.0.1", + "react-apexcharts": "1.3.6", + "react-chartjs-2": "^2.9.0", + "react-contexify": "5.0.0", + "react-copy-to-clipboard": "5.0.2", + "react-country-flag": "2.0.1", + "react-csv": "^2.0.3", + "react-data-table-component": "6.11.2", + "react-datepicker": "^4.2.1", + "react-dom": "17.0.1", + "react-draft-wysiwyg": "1.14.5", + "react-export-excel": "^0.5.3", + "react-feather": "~2.0.3", + "react-flatpickr": "3.9.1", + "react-google-maps": "^9.4.5", + "react-hook-form": "6.15.1", + "react-icons": "^4.2.0", + "react-indiana-drag-scroll": "^2.0.1", + "react-intl": "3.11.0", + "react-leaflet": "3.1.0", + "react-paginate": "7.0.0", + "react-perfect-scrollbar": "1.5.5", + "react-player": "2.6.2", + "react-rating": "2.0.5", + "react-redux": "7.2.2", + "react-router-dom": "5.2.0", + "react-scripts": "4.0.2", + "react-scroll-up": "1.3.7", + "react-select": "4.0.2", + "react-shepherd": "3.3.0", + "react-slidedown": "2.4.5", + "react-sortablejs": "6.0.0", + "react-toastify": "7.0.3", + "reactstrap": "8.6.0", + "recharts": "2.0.4", + "redux": "4.0.5", + "redux-debounced": "0.5.0", + "redux-saga": "^1.1.3", + "redux-thunk": "2.3.0", + "sass": "1.26.8", + "screenfull": "5.0.2", + "sortablejs": "1.12.0", + "styled-components": "5.1.1", + "sweetalert2": "10.14.0", + "sweetalert2-react-content": "3.0.1", + "swiper": "6.0.4", + "typesafe-actions": "^5.1.0", + "uppy": "1.21.2", + "webpack": "4.43.0", + "wnumb": "1.2.0", + "xlsx": "0.16.2", + "yarn": "1.21.1", + "yup": "0.32.8" + }, + "scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "test": "react-app-rewired test", + "eject": "react-app-rewired eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "devDependencies": { + "@types/sortablejs": "^1.10.6", + "@typescript-eslint/eslint-plugin": "^4.28.1", + "@typescript-eslint/parser": "^4.28.1", + "eslint": "^7.29.0", + "eslint-config-airbnb": "^18.2.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-import": "^2.23.4", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react": "^7.24.0", + "eslint-plugin-react-hooks": "^1.7.0", + "node-sass": "^4.13.1", + "prettier": "^2.3.1", + "react-app-rewire-aliases": "^0.2.0", + "react-app-rewire-postcss": "^3.0.2", + "react-app-rewire-sass-rule": "^2.1.1", + "react-app-rewired": "^2.1.6", + "sass-loader": "^8.0.2", + "typescript": "^4.3.5" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "homepage": "" +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..2537a8a 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..4984b5e --- /dev/null +++ b/public/index.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + Dron Control System + + +
+ + + diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..1f2f141 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/src/@core/assets/data/locales/de.json b/src/@core/assets/data/locales/de.json new file mode 100644 index 0000000..c32e542 --- /dev/null +++ b/src/@core/assets/data/locales/de.json @@ -0,0 +1,181 @@ +{ + "Dashboards": "Instrumententafel", + "Analytics": "Analytics", + "eCommerce": "eCommerce", + "Apps": "Apps", + "Email": "Email", + "Chat": "Plaudern", + "Todo": "Machen", + "Calendar": "Kalandar", + "Ecommerce": "E-Commerce", + "Shop": "Geschäft", + "Wish List": "Wunschzettel", + "Details": "Einzelheiten", + "Checkout": "Auschecken", + "User": "Benutzerin", + "List": "Liste", + "View": "Aussicht", + "Edit": "Bearbeiten", + "Starter Kit": "Starter Kit", + "1 Column": "1 Spalte", + "2 Columns": "2 Spalten", + "Fixed Navbar": "Feste Navigationsleiste", + "Floating Navbar": "Schwimmende Navigationsleiste", + "Fixed Layout": "Festes Layout", + "Static Layout": "Statisches Layout", + "Dark Layout": "Dunkles Layout", + "Light Layout": "Helles Layout", + "Content": "Inhalt", + "Grid": "Gitter", + "Typography": "Typografie", + "Text Utilities": "Textdienstprogramme", + "Syntax Highlighter": "Syntax Textmarker", + "Helper Classes": "Hilfsklassen", + "Colors": "Farben", + "Icons": "Icons", + "Feather": "Feder", + "UI Elements": "UI-Elemente", + "Card": "Karte", + "Basic": "Basic", + "Advance": "Voraus", + "Statistics": "Statistiken", + "Actions": "Kartenaktionen", + "Table": "Tabelle", + "Reactstrap Tables": "Reactstrap Tabelles", + "React Tables": "React Tabelles", + "DataTable": "Datentabelle", + "Advanced": "Fortgeschrittene", + "Mail Template": "Mail-Vorlage", + "Page Layouts": "Seitenlayouts", + "Collapsed Menu": "Reduziertes Menü", + "Layout Boxed": "Layout Boxed", + "Without Menu": "Ohne Menü", + "Layout Empty": "Layout leer", + "Layout Blank": "Layout leer", + "Components": "Komponenten", + "Alerts": "Warnungen", + "Buttons": "Tasten", + "Breadcrumbs": "Semmelbrösel", + "Carousel": "Karussell", + "Collapse": "Zusammenbruch", + "Dropdowns": "Dropdowns", + "List Group": "Listengruppe", + "Modals": "Modals", + "Pagination": "Seitennummerierung", + "Navs Component": "Navs-Komponente", + "Navbar": "Navbar", + "Tabs Component": "Registerkarten-Komponente", + "Pills Component": "Pillenkomponente", + "Tooltips": "Tooltips", + "Popovers": "Popovers", + "Badges": "Abzeichen", + "Pill Badges": "Pillenabzeichen", + "Progress": "Fortschritt", + "Media Objects": "Medienobjekte", + "Spinner": "Spinner", + "Toasts": "Toast", + "Timeline": "Zeitleiste", + "Extra Components": "Zusätzliche Komponenten", + "Avatar": "Benutzerbild", + "Chips": "Chips", + "Divider": "Teiler", + "Wizard": "Magier", + "Forms & Tables": "Formulare und Tabellen", + "Form Elements": "Formularelemente", + "Select": "Wählen", + "Switch": "Schalter", + "Checkbox": "Kontrollkästchen", + "Radio": "Radio", + "Input": "Eingang", + "Input Groups": "Eingabegruppen", + "Number Input": "Zahleneingabe", + "Textarea": "Textarea", + "Date & Time Picker": "Datums- und Uhrzeitauswahl", + "Input Mask": "Eingabemaske", + "Form Layout": "Formularlayout", + "Form Wizard": "Formzauberer", + "Form Validation": "Formularvalidierung", + "Formik": "Formik", + "Pages": "Seiten", + "Authentication": "Authentifizierung", + "Login v1": "Einloggen v1", + "Login v2": "Einloggen v2", + "Register v1": "Registrieren v1", + "Register v2": "Registrieren 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", + "Coming Soon": "Demnächst", + "Error": "Error", + "Not Authorized": "Nicht berechtigt", + "Maintenance": "Instandhaltung", + "Profile": "Profil", + "Account Settings": "Account Einstellungen", + "Tree": "Baum", + "Miscellaneous": "Sonstiges", + "FAQ": "FAQ", + "Knowledge Base": "Wissensbasis", + "Search": "Suche", + "Invoice": "Rechnung", + "Charts & Maps": "Karten & Pläne", + "Charts": "Diagramme", + "Apex": "Apex", + "ChartJS": "ChartJS", + "Recharts": "Recharts", + "Leaflet Maps": "Leaflet Maps", + "Extensions": "Erweiterungen", + "Sweet Alert": "Süßer Alarm", + "Toastr": "Toastr", + "Sliders": "Schieberegler", + "File Uploader": "Datei-Uploader", + "Editor": "Editor", + "Drag & Drop": "Ziehen und loslassen", + "Tour": "Tour", + "Auto Complete": "Automatisch vervollständigen", + "Clipboard": "Zwischenablage", + "React Player": "Reagieren Player", + "Context Menu": "Kontextmenü", + "Swiper": "Swiper", + "I18n": "I18n", + "React Paginate": "Paginieren reagieren", + "Export": "Export", + "Import": "Importieren", + "Export Selected": "Ausgewählte exportieren", + "Access Control": "Zugangskontrolle", + "Others": "Andere", + "Menu Levels": "Menüebenen", + "Second Level": "zweites Level", + "Second Level 2.1": "zweites Level 2.1", + "Second Level 2.2": "zweites Level 2.2", + "Third Level": "Drittes Level", + "Third Level 3.1": "Drittes Level 3.1", + "Third Level 3.2": "Drittes Level 2.2", + "Disabled Menu": "Deaktiviertes Menü", + "Documentation": "Dokumentation", + "Raise Support": "Unterstützung erhöhen", + "Change Log": "Änderungsprotokoll", + "text": "Kuchen Sesam Snaps Cupcake Lebkuchen dänisch Ich liebe Lebkuchen. Apfelkuchen Jujubes Chupa Chups Muffin Halvah Lutscher. Schokoladenkuchen-Haferkuchen-Tiramisumarzipanzuckerpflaume. Donut süße Torte Haferkuchen Dragée Obstkuchen Zuckerwatte Zitronentropfen.", + "Pricing": "Preisgestaltung", + "Blog": "Blog", + "Detail": "Einzelheiten", + "Form Repeater": "Form Repeater", + "Preview": "Vorschau", + "Add": "Hinzufügen", + "Ratings": "Bewertungen", + "show": "show", + "entries": "einträge", + "search": "suche", + "Prev": "Zurück", + "Next": "Nächster", + "BlockUI": "BlockUI", + "Reactstrap": "Reactstrap", + "Welcome": "Herzlich willkommen", + "Reset Password": "Passwort zurücksetzen", + "Verify Email": "E-Mail bestätigen", + "Deactivate Account": "Benutzerkonto deaktivieren", + "Promotional": "Werbung", + "Apps & Pages": "Apps & Seiten", + "User Interface": "Benutzeroberfläche", + "Misc": "Sonstiges" +} diff --git a/src/@core/assets/data/locales/en.json b/src/@core/assets/data/locales/en.json new file mode 100644 index 0000000..14098f7 --- /dev/null +++ b/src/@core/assets/data/locales/en.json @@ -0,0 +1,179 @@ +{ + "Dashboards": "Dashboards", + "Analytics": "Analytics", + "Apps": "Apps", + "eCommerce": "eCommerce", + "Email": "Email", + "Chat": "Chat", + "Todo": "Todo", + "Calendar": "Calendar", + "Ecommerce": "Ecommerce", + "Shop": "Shop", + "Wish List": "Wish List", + "Details": "Details", + "Checkout": "Checkout", + "User": "User", + "List": "List", + "View": "View", + "Edit": "Edit", + "Starter Kit": "Starter Kit", + "1 Column": "1 Column", + "2 Columns": "2 Columns", + "Fixed Navbar": "Fixed Navbar", + "Floating Navbar": "Floating Navbar", + "Fixed Layout": "Fixed Layout", + "Static Layout": "Static Layout", + "Dark Layout": "Dark Layout", + "Light Layout": "Light Layout", + "UI Elements": "UI Elements", + "Content": "Content", + "Grid": "Grid", + "Typography": "Typography", + "Text Utilities": "Text Utilities", + "Syntax Highlighter": "Syntax Highlighter", + "Colors": "Colors", + "Icons": "Icons", + "Feather": "Feather", + "Card": "Card", + "Basic": "Basic", + "Advance": "Advance", + "Statistics": "Statistics", + "Actions": "Actions", + "Table": "Table", + "Reactstrap Tables": "Reactstrap Tables", + "React Tables": "React Tables", + "DataTable": "DataTable", + "Advanced": "Advanced", + "Mail Template": "Mail Template", + "Page Layouts": "Page Layouts", + "Collapsed Menu": "Collapsed Menu", + "Layout Boxed": "Layout Boxed", + "Without Menu": "Without Menu", + "Layout Empty": "Layout Empty", + "Layout Blank": "Layout Blank", + "Components": "Components", + "Alerts": "Alerts", + "Buttons": "Buttons", + "Breadcrumbs": "Breadcrumbs", + "Carousel": "Carousel", + "Collapse": "Collapse", + "Dropdowns": "Dropdowns", + "List Group": "List Group", + "Modals": "Modals", + "Pagination": "Pagination", + "Navs Component": "Navs Component", + "Navbar": "Navbar", + "Tabs Component": "Tabs Component", + "Pills Component": "Pills Component", + "Tooltips": "Tooltips", + "Popovers": "Popovers", + "Badges": "Badges", + "Pill Badges": "Pill Badges", + "Progress": "Progress", + "Media Objects": "Media Objects", + "Spinner": "Spinner", + "Toasts": "Toasts", + "Timeline": "Timeline", + "Extra Components": "Extra Components", + "Avatar": "Avatar", + "Chips": "Chips", + "Divider": "Divider", + "Wizard": "Wizard", + "Forms & Tables": "Forms & Tables", + "Form Elements": "Form Elements", + "Select": "Select", + "Switch": "Switch", + "Checkbox": "Checkbox", + "Radio": "Radio", + "Input": "Input", + "Input Groups": "Input Groups", + "Number Input": "Number Input", + "Textarea": "Textarea", + "Date & Time Picker": "Date & Time Picker", + "Input Mask": "Input Mask", + "Form Layout": "Form Layout", + "Form Wizard": "Form Wizard", + "Formik": "Formik", + "Form Validation": "Form Validation", + "Pages": "Pages", + "Authentication": "Authentication", + "Login v1": "Login v1", + "Login v2": "Login v2", + "Register v1": "Register v1", + "Register v2": "Register 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", + "Error": "Error", + "Not Authorized": "Not Authorized", + "Maintenance": "Maintenance", + "Extensions": "Extensions", + "Profile": "Profile", + "Account Settings": "Account Settings", + "FAQ": "FAQ", + "Knowledge Base": "Knowledge Base", + "Search": "Search", + "Invoice": "Invoice", + "Charts & Maps": "Charts & Maps", + "Charts": "Charts", + "Apex": "Apex", + "ChartJS": "ChartJS", + "Recharts": "Recharts", + "Leaflet Maps": "Leaflet Maps", + "Sweet Alert": "Sweet Alert", + "Toastr": "Toastr", + "Sliders": "Sliders", + "File Uploader": "File Uploader", + "Editor": "Editor", + "Drag & Drop": "Drag & Drop", + "Tour": "Tour", + "Auto Complete": "Auto Complete", + "Clipboard": "Clipboard", + "React Player": "React Player", + "Swiper": "Swiper", + "Context Menu": "Context Menu", + "Tree": "Tree", + "I18n": "I18n", + "React Paginate": "React Paginate", + "Export": "Export", + "Import": "Import", + "Export Selected": "Export Selected", + "Access Control": "Access Control", + "Others": "Others", + "Menu Levels": "Menu Levels", + "Second Level": "Second Level", + "Second Level 2.1": "Second Level 2.1", + "Second Level 2.2": "Second Level 2.2", + "Third Level 3.1": "Third Level 3.1", + "Third Level 3.2": "Third Level 3.2", + "Disabled Menu": "Disabled Menu", + "Documentation": "Documentation", + "Raise Support": "Raise Support", + "Change Log": "Change Log", + "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.", + "Pricing": "Pricing", + "Blog": "Blog", + "Detail": "Detail", + "Form Repeater": "Form Repeater", + "Preview": "Preview", + "Add": "Add", + "Ratings": "Ratings", + "show": "show", + "entries": "entries", + "search": "search", + "Prev": "Prev", + "Next": "Next", + "BlockUI": "BlockUI", + "Reactstrap": "Reactstrap", + "Welcome": "Welcome", + "Reset Password": "Reset Password", + "Verify Email": "Verify Email", + "Deactivate Account": "Deactivate Account", + "Promotional": "Promotional", + "Apps & Pages": "Apps & Pages", + "User Interface": "User Interface", + "Misc": "Misc" +} diff --git a/src/@core/assets/data/locales/fr.json b/src/@core/assets/data/locales/fr.json new file mode 100644 index 0000000..191f420 --- /dev/null +++ b/src/@core/assets/data/locales/fr.json @@ -0,0 +1,180 @@ +{ + "Dashboards": "Tableau de bord", + "Analytics": "Analytique", + "Apps": "applications", + "eCommerce": "commerce électronique", + "Email": "Email", + "Chat": "Bavarder", + "Todo": "Faire", + "Calendar": "Calandre", + "Ecommerce": "Commerce électronique", + "Shop": "Boutique", + "Wish List": "Liste de souhaits", + "Details": "Détails", + "User": "Utilisatrice", + "List": "liste", + "View": "Vue", + "Edit": "modifier", + "Checkout": "Check-out", + "Starter Kit": "Kit de démarrage", + "1 Column": "1 colonne", + "2 Columns": "2 colonnes", + "Fixed Navbar": "Barre de navigation fixe", + "Floating Navbar": "Barre de navigation flottante", + "Fixed Layout": "Mise en page fixe", + "Static Layout": "Disposition statique", + "Dark Layout": "Mise en page sombre", + "Light Layout": "Mise en lumière", + "UI Elements": "Éléments d'interface utilisateur", + "Content": "Contenu", + "Grid": "la grille", + "Typography": "Typographie", + "Text Utilities": "Utilitaires de texte", + "Syntax Highlighter": "Surligneur de syntaxe", + "Colors": "Couleurs", + "Icons": "Les icônes", + "Feather": "Plume", + "Card": "Carte", + "Basic": "De base", + "Advance": "Avance", + "Statistics": "Statistiques", + "Actions": "Actions de carte", + "Table": "Table", + "Reactstrap Tables": "Tables de réactstrap", + "React Tables": "Tables de réaction", + "DataTable": "DataTable", + "Advanced": "Avancé", + "Mail Template": "Modèle de courrier", + "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", + "Components": "Composants", + "Alerts": "Les alertes", + "Buttons": "Boutons", + "Breadcrumbs": "Chapelure", + "Carousel": "Carrousel", + "Collapse": "Effondrer", + "Dropdowns": "Des listes déroulantes", + "List Group": "Groupe de liste", + "Modals": "Modaux", + "Pagination": "Pagination", + "Navs Component": "Composante navs", + "Navbar": "Barre de navigation", + "Tabs Component": "Composant Onglets", + "Pills Component": "Composant pilules", + "Tooltips": "Info-bulles", + "Popovers": "popovers", + "Badges": "Insignes", + "Pill Badges": "Insignes de pilule", + "Progress": "Le progrès", + "Media Objects": "Objets multimédia", + "Spinner": "Fileur", + "Toasts": "Toasts", + "Timeline": "Chronologie", + "Extra Components": "Composants Extra", + "Avatar": "Avatar", + "Chips": "chips", + "Divider": "Diviseur", + "Wizard": "sorcier", + "Form Elements": "Éléments de formulaire", + "Forms & Tables": "Formulaires et tableaux", + "Select": "Sélectionner", + "Switch": "Commutateur", + "Checkbox": "Case à cocher", + "Radio": "Radio", + "Input": "Contribution", + "Input Groups": "Groupes d'entrée", + "Number Input": "Nombre d'entrée", + "Textarea": "Textarea", + "Date & Time Picker": "Sélecteur de date et heure", + "Input Mask": "Masque de saisie", + "Form Layout": "Disposition du formulaire", + "Form Wizard": "Assistant de formulaire", + "Form Validation": "Validation de formulaire", + "Formik": "Formik", + "Pages": "Des pages", + "Authentication": "Authentification", + "Login v1": "S'identifier v1", + "Login v2": "S'identifier v2", + "Register v1": "S'inscrire v1", + "Register v2": "S'inscrire v2", + "Forgot Password v1": "Mot de passe oublié v1", + "Forgot Password v2": "Mot de passe oublié v2", + "Reset Password v1": "réinitialiser le mot de passe v1", + "Reset Password v2": "réinitialiser le mot de passe v2", + "Coming Soon": "Arrive bientôt", + "Error": "Erreur", + "Not Authorized": "Pas autorisé", + "Maintenance": "Entretien", + "Profile": "Profil", + "Account Settings": "Paramètres du compte", + "FAQ": "FAQ", + "Knowledge Base": "Base de connaissances", + "Search": "Chercher", + "Invoice": "Facture d'achat", + "Charts & Maps": "Graphiques et cartes", + "Charts": "Graphiques", + "Apex": "Sommet", + "ChartJS": "ChartJS", + "Recharts": "Recharts", + "Leaflet Maps": "Leaflet Maps", + "Extensions": "Les extensions", + "Sweet Alert": "Douce alerte", + "Toastr": "Toastr", + "Sliders": "Curseurs", + "File Uploader": "Chargeur de fichiers", + "Editor": "éditeur", + "Swiper": "Swiper", + "Tree": "Arbre", + "Drag & Drop": "Drag & Drop", + "Tour": "Tour", + "Auto Complete": "+Terminé automatiquement", + "Clipboard": "Presse-papiers", + "React Player": "Réagir multimédia", + "Context Menu": "Menu contextuel", + "Miscellaneous": "Divers", + "I18n": "I18n", + "React Paginate": "Réagir Paginer", + "Export": "Exportation", + "Import": "Importation", + "Export Selected": "Exporter la sélection", + "Access Control": "Contrôle d'accès", + "Others": "Autres", + "Menu Levels": "Niveaux de menu", + "Second Level": "Deuxième niveau", + "Second Level 2.1": "Deuxième niveau 2.1", + "Second Level 2.2": "Deuxième niveau 2.2", + "Third Level": "Troisième niveau", + "Third Level 3.1": "Troisième niveau 3.1", + "Third Level 3.2": "Troisième niveau 3.2", + "Disabled Menu": "Menu désactivé", + "Documentation": "Documentation", + "Raise Support": "Augmenter le soutien", + "Change Log": "Changer le journal", + "text": "Gâteau au sésame s'enclenche petit pain au pain d'épices danois J'adore le pain d'épices. Tarte aux pommes jujubes chupa chups muffin halvah lollipop. Gateau au chocolat gateau 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.", + "Pricing": "Tarification", + "Blog": "Blog", + "Detail": "Détails", + "Form Repeater": "Répétiteur de formulaire", + "Preview": "Aperçu", + "Add": "Ajouter", + "Ratings": "Évaluations", + "show": "spectacle", + "entries": "entrées", + "search": "chercher", + "Prev": "Précédente", + "Next": "Prochain", + "BlockUI": "BlockUI", + "Reactstrap": "Reactstrap", + "Welcome": "Welcome", + "Reset Password": "Réinitialiser le mot de passe", + "Verify Email": "Vérifier l'e-mail", + "Deactivate Account": "Désactiver le compte", + "Promotional": "Promotionnel", + "Apps & Pages": "Applications et pages", + "User Interface": "Interface utilisateur", + "Misc": "Divers" +} diff --git a/src/@core/assets/data/locales/pt.json b/src/@core/assets/data/locales/pt.json new file mode 100644 index 0000000..99187fb --- /dev/null +++ b/src/@core/assets/data/locales/pt.json @@ -0,0 +1,181 @@ +{ + "Dashboards": "painel de controle", + "Analytics": "Analytics", + "eCommerce": "comércio eletrônico", + "Apps": "Apps", + "Email": "O email", + "Chat": "Bate-papo", + "Todo": "Façam", + "Calendar": "Calendário", + "Ecommerce": "Comércio eletrônico", + "Shop": "fazer compras", + "Wish List": "Lista de Desejos", + "Details": "Detalhes", + "Checkout": "Confira", + "User": "Do utilizador", + "List": "Lista", + "View": "Visão", + "Edit": "Editar", + "Starter Kit": "Kit iniciante", + "1 Column": "1 coluna", + "2 Columns": "2 colunas", + "Fixed Navbar": "Navbar fixa", + "Floating Navbar": "Navbar flutuante", + "Fixed Layout": "Layout fixo", + "Static Layout": "Layout estático", + "Dark Layout": "Layout escuro", + "Light Layout": "Layout de luz", + "Content": "Conteúdo", + "Grid": "Grade", + "Typography": "Tipografia", + "Text Utilities": "Utilitários de texto", + "Syntax Highlighter": "Marcador de sintaxe", + "Helper Classes": "Classes Auxiliares", + "Colors": "Cores", + "Icons": "Ícones", + "Feather": "Pena", + "UI Elements": "Elementos da interface do usuário", + "Card": "Cartão", + "Basic": "Basic", + "Advance": "Avançar", + "Statistics": "Estatisticas", + "Actions": "Ações do Cartão", + "Table": "Tabela", + "Reactstrap Tables": "Mesa Reactstrap", + "React Tables": "Mesa React", + "DataTable": "Tabela de dados", + "Advanced": "Avançado", + "Mail Template": "Modelo de Correio", + "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", + "Components": "Componentes", + "Alerts": "Alertas", + "Buttons": "Botões", + "Breadcrumbs": "Pão ralado", + "Carousel": "Carrossel", + "Collapse": "Colapso", + "Dropdowns": "Dropdowns", + "List Group": "Grupo de listas", + "Modals": "Modais", + "Pagination": "Paginação", + "Navs Component": "Componente Navs", + "Navbar": "Navbar", + "Tabs Component": "Componente de guias", + "Pills Component": "Componente de comprimidos", + "Tooltips": "Dicas de ferramentas", + "Popovers": "Popovers", + "Badges": "Distintivos", + "Pill Badges": "Emblemas de pílula", + "Progress": "Progresso", + "Media Objects": "Objetos de Mídia", + "Spinner": "Girador", + "Toasts": "Torradas", + "Timeline": "Linha do tempo", + "Extra Components": "Componentes extras", + "Avatar": "Avatar", + "Chips": "Salgadinhos", + "Divider": "Divisor", + "Wizard": "Mago", + "Form Elements": "Elementos do formulário", + "Forms & Tables": "Formulários e tabelas", + "Select": "Selecione", + "Switch": "Interruptor", + "Checkbox": "Caixa de seleção", + "Radio": "Rádio", + "Input": "Entrada", + "Input Groups": "Grupos de entrada", + "Number Input": "Entrada numérica", + "Textarea": "Textarea", + "Date & Time Picker": "Selecionador de data e hora", + "Input Mask": "Máscara de entrada", + "Form Layout": "Layout do formulário", + "Form Wizard": "Assistente de Formulário", + "Form Validation": "Validação de Formulário", + "Formik": "Formik", + "Pages": "Páginas", + "Authentication": "Autenticação", + "Login v1": "Conecte-se v1", + "Login v2": "Conecte-se v2", + "Register v1": "Registro v1", + "Register v2": "Registro v2", + "Forgot Password v1": "Esqueceu a senha v1", + "Forgot Password v2": "Esqueceu a senha v2", + "Reset Password v1": "Redefinir senha v1", + "Reset Password v2": "Redefinir senha v2", + "Coming Soon": "Em breve", + "Error": "Erro", + "Not Authorized": "Não autorizado", + "Maintenance": "Manutenção", + "Profile": "Perfil", + "FAQ": "Perguntas frequentes", + "Knowledge Base": "Base de Conhecimento", + "Search": "Procurar", + "Account Settings": "Configurações da conta", + "Invoice": "Fatura", + "Swiper": "Swiper", + "Miscellaneous": "Diversas", + "Charts & Maps": "Gráficos e Mapas", + "Charts": "Gráficos", + "Apex": "Ápice", + "ChartJS": "ChartJS", + "Recharts": "Recharts", + "Leaflet Maps": "Leaflet Maps", + "Extensions": "Extensões", + "Sweet Alert": "Alerta Doce", + "Toastr": "Toastr", + "Sliders": "Sliders", + "File Uploader": "Uploader de arquivos", + "Editor": "Editor", + "Tree": "árvore", + "Drag & Drop": "Arraste e solte", + "Tour": "Tour", + "Auto Complete": "Autocompletar", + "Clipboard": "Prancheta", + "React Player": "Reagir de mídia", + "Context Menu": "Menu contextual", + "I18n": "I18n", + "React Paginate": "React Paginate", + "Export": "Exportação", + "Import": "Importar", + "Export Selected": "Exportar selecionado", + "Access Control": "Controle de acesso", + "Others": "Outras", + "Menu Levels": "Níveis de Menu", + "Second Level": "Segundo nível", + "Second Level 2.1": "Segundo nível 2.1", + "Second Level 2.2": "Segundo nível 2.2", + "Third Level": "Terceiro nivel", + "Third Level 3.1": "Terceiro nivel 3.1", + "Third Level 3.2": "Terceiro nivel 3.2", + "Disabled Menu": "Menu desativado", + "Documentation": "Documentação", + "Raise Support": "Levantar Suporte", + "Change Log": "Log de alterações", + "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 donut dragée fruitcake algodão doce gotas de limão.", + "Pricing": "Preços", + "Blog": "Blog", + "Detail": "Detalhes", + "Form Repeater": "Repetidor de formulários", + "Preview": "Pré-visualização", + "Add": "Adicionar", + "Ratings": "Avaliações", + "show": "mostrar", + "entries": "entradas", + "search": "procurar", + "Prev": "Anterior", + "Next": "Próximo", + "BlockUI": "BlockUI", + "Reactstrap": "Reactstrap", + "Welcome": "Bem-vinda", + "Reset Password": "Redefinir senha", + "Verify Email": "Verificar e-mail", + "Deactivate Account": "Desativar conta", + "Promotional": "Promocional", + "Apps & Pages": "Aplicativos e páginas", + "User Interface": "Interface de usuário", + "Misc": "Misc" +} 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..4be5505 --- /dev/null +++ b/src/@core/assets/fonts/feather/fonts/feather.svg @@ -0,0 +1,849 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..a3d4aba --- /dev/null +++ b/src/@core/assets/fonts/feather/iconfont.css @@ -0,0 +1,568 @@ + +@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 { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'feather' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -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..40ed293 --- /dev/null +++ b/src/@core/auth/jwt/jwtDefaultConfig.js @@ -0,0 +1,15 @@ +// ** Auth Endpoints +export default { + loginEndpoint: '/jwt/login', + registerEndpoint: '/jwt/register', + refreshEndpoint: '/jwt/refresh-token', + logoutEndpoint: '/jwt/logout', + + // ** This will be prefixed in authorization header with token + // ? e.g. Authorization: Bearer + tokenType: 'Bearer', + + // ** Value of this property will be used as key to store JWT token in storage + 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..2ea1018 --- /dev/null +++ b/src/@core/auth/jwt/jwtService.js @@ -0,0 +1,108 @@ +import axios from 'axios' +import jwtDefaultConfig from './jwtDefaultConfig' + +export default class JwtService { + // ** jwtConfig <= Will be used by this service + jwtConfig = { ...jwtDefaultConfig } + + // ** For Refreshing Token + isAlreadyFetchingAccessToken = false + + // ** For Refreshing Token + subscribers = [] + + constructor(jwtOverrideConfig) { + this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig } + + // ** Request Interceptor + axios.interceptors.request.use( + config => { + // ** Get token from localStorage + const accessToken = this.getToken() + + // ** If token is present add it to request's Authorization Header + if (accessToken) { + // ** eslint-disable-next-line no-param-reassign + config.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}` + } + return config + }, + error => Promise.reject(error) + ) + + // ** Add request/response interceptor + axios.interceptors.response.use( + response => response, + error => { + // ** const { config, response: { status } } = error + const { config, response } = error + const originalRequest = config + + // ** if (status === 401) { + if (response && response.status === 401) { + if (!this.isAlreadyFetchingAccessToken) { + this.isAlreadyFetchingAccessToken = true + this.refreshToken().then(r => { + this.isAlreadyFetchingAccessToken = false + + // ** Update accessToken in localStorage + this.setToken(r.data.accessToken) + this.setRefreshToken(r.data.refreshToken) + + this.onAccessTokenFetched(r.data.accessToken) + }) + } + const retryOriginalRequest = new Promise(resolve => { + this.addSubscriber(accessToken => { + // ** Make sure to assign accessToken according to your response. + // ** Check: https://pixinvent.ticksy.com/ticket/2413870 + // ** Change Authorization header + originalRequest.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}` + resolve(this.axios(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 axios.post(this.jwtConfig.loginEndpoint, ...args) + } + + register(...args) { + return axios.post(this.jwtConfig.registerEndpoint, ...args) + } + + refreshToken() { + return axios.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..7a0e4be --- /dev/null +++ b/src/@core/auth/jwt/useJwt.js @@ -0,0 +1,11 @@ +// ** JWT Service Import +import JwtService from './jwtService' + +// ** Export Service as useJwt +export default function useJwt(jwtOverrideConfig) { + const jwt = new JwtService(jwtOverrideConfig) + + return { + jwt + } +} diff --git a/src/@core/components/app-collapse/index.js b/src/@core/components/app-collapse/index.js new file mode 100644 index 0000000..f4d6eac --- /dev/null +++ b/src/@core/components/app-collapse/index.js @@ -0,0 +1,120 @@ +// ** React Imports +import { useState } from 'react' + +// ** Third Party Components +import Proptypes from 'prop-types' +import classnames from 'classnames' +import { ChevronUp } from 'react-feather' +import { Collapse, Card, CardHeader, CardBody, CardTitle } from 'reactstrap' + +const AppCollapse = props => { + // ** Props + const { data, type, accordion, active, toggle, titleKey, contentKey, className } = props + + /** + ** If accordion is true then return only one active index else return an Array + */ + const defaultActive = () => { + if (accordion) { + return active + } else { + return [...active] + } + } + + // ** State + const [openCollapse, setOpenCollapse] = useState(defaultActive()) + + // ** Function to handle Collapse Toggle + const handleCollapseToggle = id => { + if (accordion) { + if (id === openCollapse) { + setOpenCollapse(null) + } else { + setOpenCollapse(id) + } + } else { + const arr = openCollapse, + index = arr.indexOf(id) + if (arr.includes(id)) { + arr.splice(index, 1) + setOpenCollapse([...arr]) + } else { + arr.push(id) + setOpenCollapse([...arr]) + } + } + } + + // ** Function to render collapse + const renderData = () => { + return data.map((item, index) => { + const title = titleKey ? item[titleKey] : item.title, + content = contentKey ? item[contentKey] : item.content + + return ( + + handleCollapseToggle(index) + } + : { + onClick: () => handleCollapseToggle(index) + })} + /*eslint-enable */ + > + {title} + + + + {content} + + + ) + }) + } + + return ( +
+ {renderData()} +
+ ) +} + +export default AppCollapse + +// ** PropTypes +AppCollapse.propTypes = { + data: Proptypes.array.isRequired, + accordion: Proptypes.bool, + type: Proptypes.oneOf(['shadow', 'border', 'margin']), + active: Proptypes.oneOfType([Proptypes.array, Proptypes.number]), + titleKey: Proptypes.string, + contentKey: Proptypes.string, + className: Proptypes.string +} + +// ** Default Props +AppCollapse.defaultProps = { + active: [], + toggle: 'click' +} diff --git a/src/@core/components/autocomplete/autocomplete.scss b/src/@core/components/autocomplete/autocomplete.scss new file mode 100644 index 0000000..64395bf --- /dev/null +++ b/src/@core/components/autocomplete/autocomplete.scss @@ -0,0 +1,85 @@ +// Component: Autocomplete +// ======================================================================== + +@import '../../scss/base/bootstrap-extended/include'; +@import '../../scss/base/components/include'; + +$autocomplete-active-color: #f1f1f1; + +.autocomplete-container { + position: relative; + .autocomplete-search { + height: 100%; + width: 100%; + background-color: $white; + &:focus { + box-shadow: none; + } + } + .suggestions-list { + z-index: 998; + list-style: none; + padding-left: 0; + border-radius: 0.5rem; + max-height: 450px; + height: auto; + width: 100%; + position: absolute; + margin-top: 0.5rem; + list-style-type: none; + background-color: $white; + box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08); + .suggestion-item { + padding: 0.9rem 1rem; + color: $body-color; + line-height: 1 !important; + a { + color: $body-color; + } + &.suggestion-title { + font-size: 0.85rem; + color: $text-muted; + text-transform: uppercase; + letter-spacing: 0.6px; + margin-top: 0.75rem; + margin-bottom: 0; + } + &.active, + &:hover:not(.suggestion-title-wrapper):not(.no-result) { + background-color: $autocomplete-active-color; + color: $body-color; + } + + &:hover:not(.suggestion-title-wrapper):not(.no-result) { + cursor: pointer; + } + } + &.open-up { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.5rem; + } + } +} + +// Dark +.dark-layout { + .autocomplete-container { + .suggestions-list { + background-color: $theme-dark-card-bg; + .suggestion-item { + color: $theme-dark-body-color !important; + &.suggestion-title-wrapper { + color: $theme-dark-text-muted-color; + } + &:not(.suggestion-title-wrapper) { + &.active, + &:hover { + background-color: $theme-dark-body-bg !important; + } + } + } + } + } +} diff --git a/src/@core/components/autocomplete/index.js b/src/@core/components/autocomplete/index.js new file mode 100644 index 0000000..0ec1e8a --- /dev/null +++ b/src/@core/components/autocomplete/index.js @@ -0,0 +1,354 @@ +// ** React Imports +import { Fragment, useEffect, useState, useRef } from 'react' +import ReactDOM from 'react-dom' +import { useHistory } from 'react-router-dom' + +// ** Third Party Components +import PropTypes from 'prop-types' +import classnames from 'classnames' +import { AlertCircle } from 'react-feather' +import PerfectScrollbar from 'react-perfect-scrollbar' + +// ** Custom Hooks +import { useOnClickOutside } from '@hooks/useOnClickOutside' + +// ** Styles +import '@styles/base/bootstrap-extended/_include.scss' +import './autocomplete.scss' + +const Autocomplete = props => { + // ** Refs + const container = useRef(null) + const inputElRef = useRef(null) + const suggestionsListRef = useRef(null) + + // ** States + const [focused, setFocused] = useState(false) + const [activeSuggestion, setActiveSuggestion] = useState(0) + const [showSuggestions, setShowSuggestions] = useState(false) + const [userInput, setUserInput] = useState(props.value ? props.value : '') + + // ** Vars + const history = useHistory() + let filteredData = [] + + // ** Suggestion Item Click Event + const onSuggestionItemClick = (url, e) => { + setActiveSuggestion(0) + setShowSuggestions(false) + setUserInput(filteredData[activeSuggestion][props.filterKey]) + if (url !== undefined && url !== null) { + history.push(url) + } + + if (props.onSuggestionClick) { + props.onSuggestionClick(url, e) + } + } + + // ** Suggestion Hover Event + const onSuggestionItemHover = index => { + setActiveSuggestion(index) + } + + // ** Input On Change Event + const onChange = e => { + const userInput = e.currentTarget.value + setActiveSuggestion(0) + setShowSuggestions(true) + setUserInput(userInput) + if (e.target.value < 1) { + setShowSuggestions(false) + } + } + + // ** Input Click Event + const onInputClick = e => { + e.stopPropagation() + } + + // ** Input's Keydown Event + const onKeyDown = e => { + const filterKey = props.filterKey + const suggestionList = ReactDOM.findDOMNode(suggestionsListRef.current) + + // ** User pressed the up arrow + if (e.keyCode === 38 && activeSuggestion !== 0) { + setActiveSuggestion(activeSuggestion - 1) + + if (e.target.value.length > -1 && suggestionList !== null && activeSuggestion <= filteredData.length / 2) { + suggestionList.scrollTop = 0 + } + } else if (e.keyCode === 40 && activeSuggestion < filteredData.length - 1) { + // ** User pressed the down arrow + setActiveSuggestion(activeSuggestion + 1) + + if (e.target.value.length > -1 && suggestionList !== null && activeSuggestion >= filteredData.length / 2) { + suggestionList.scrollTop = suggestionList.scrollHeight + } + } else if (e.keyCode === 27) { + // ** User Pressed ESC + setShowSuggestions(false) + setUserInput('') + } else if (e.keyCode === 13 && showSuggestions) { + // ** User Pressed ENTER + onSuggestionItemClick(filteredData[activeSuggestion].link, e) + setUserInput(filteredData[activeSuggestion][filterKey]) + setShowSuggestions(false) + } else { + return + } + + // ** Custom Keydown Event + if (props.onKeyDown !== undefined && props.onKeyDown !== null) { + props.onKeyDown(e, userInput) + } + } + + // ** Function To Render Grouped Suggestions + const renderGroupedSuggestion = arr => { + const { filterKey, customRender } = props + + const renderSuggestion = (item, i) => { + if (!customRender) { + const suggestionURL = item.link !== undefined && item.link !== null ? item.link : null + return ( +
  • onSuggestionItemClick(suggestionURL, e)} + onMouseEnter={() => { + onSuggestionItemHover(filteredData.indexOf(item)) + }} + > + {item[filterKey]} +
  • + ) + } else if (customRender) { + return customRender( + item, + i, + filteredData, + activeSuggestion, + onSuggestionItemClick, + onSuggestionItemHover, + userInput + ) + } else { + return null + } + } + + return arr.map((item, i) => { + return renderSuggestion(item, i) + }) + } + + // ** Function To Render Ungrouped Suggestions + const renderUngroupedSuggestions = () => { + const { filterKey, suggestions, customRender, suggestionLimit } = props + + filteredData = [] + const sortSingleData = suggestions + .filter(i => { + const startCondition = i[filterKey].toLowerCase().startsWith(userInput.toLowerCase()), + includeCondition = i[filterKey].toLowerCase().includes(userInput.toLowerCase()) + if (startCondition) { + return startCondition + } else if (!startCondition && includeCondition) { + return includeCondition + } else { + return null + } + }) + .slice(0, suggestionLimit) + filteredData.push(...sortSingleData) + if (sortSingleData.length) { + return sortSingleData.map((suggestion, index) => { + const suggestionURL = suggestion.link !== undefined && suggestion.link !== null ? suggestion.link : null + if (!customRender) { + return ( +
  • onSuggestionItemClick(suggestionURL, e)} + onMouseEnter={() => onSuggestionItemHover(filteredData.indexOf(suggestion))} + > + {suggestion[filterKey]} +
  • + ) + } else if (customRender) { + return customRender( + suggestion, + index, + filteredData, + activeSuggestion, + onSuggestionItemClick, + onSuggestionItemHover, + userInput + ) + } else { + return null + } + }) + } else { + return ( +
  • + No Result +
  • + ) + } + } + + // ** Function To Render Suggestions + const renderSuggestions = () => { + const { filterKey, grouped, filterHeaderKey, suggestions } = props + + // ** Checks if suggestions are grouped or not. + if (grouped === undefined || grouped === null || !grouped) { + return renderUngroupedSuggestions() + } else { + filteredData = [] + return suggestions.map(suggestion => { + const sortData = suggestion.data + .filter(i => { + const startCondition = i[filterKey].toLowerCase().startsWith(userInput.toLowerCase()), + includeCondition = i[filterKey].toLowerCase().includes(userInput.toLowerCase()) + if (startCondition) { + return startCondition + } else if (!startCondition && includeCondition) { + return includeCondition + } else { + return null + } + }) + .slice(0, suggestion.searchLimit) + + filteredData.push(...sortData) + return ( + +
  • +
    {suggestion[filterHeaderKey]}
    +
  • + {sortData.length ? ( + renderGroupedSuggestion(sortData) + ) : ( +
  • + No Result +
  • + )} +
    + ) + }) + } + } + + //** ComponentDidMount + useEffect(() => { + if (props.defaultSuggestions && focused) { + setShowSuggestions(true) + } + }, [focused, props.defaultSuggestions]) + + //** ComponentDidUpdate + useEffect(() => { + const textInput = ReactDOM.findDOMNode(inputElRef.current) + + // ** For searchbar focus + if (textInput !== null && props.autoFocus) { + inputElRef.current.focus() + } + + // ** If user has passed default suggestions & focus then show default suggestions + if (props.defaultSuggestions && focused) { + setShowSuggestions(true) + } + + // ** Function to run on user passed Clear Input + if (props.clearInput) { + props.clearInput(userInput, setUserInput) + } + + // ** Function on Suggestions Shown + if (props.onSuggestionsShown && showSuggestions) { + props.onSuggestionsShown(userInput) + } + }, [setShowSuggestions, focused, userInput, showSuggestions, props]) + + // ** On External Click Close The Search & Call Passed Function + useOnClickOutside(container, () => { + setShowSuggestions(false) + if (props.externalClick) { + props.externalClick() + } + }) + + let suggestionsListComponent + + if (showSuggestions) { + suggestionsListComponent = ( + + {renderSuggestions()} + + ) + } + + return ( +
    + { + onChange(e) + if (props.onChange) { + props.onChange(e) + } + }} + onKeyDown={e => onKeyDown(e)} + value={userInput} + className={`autocomplete-search ${props.className ? props.className : ''}`} + placeholder={props.placeholder} + onClick={onInputClick} + ref={inputElRef} + onFocus={e => setFocused(true)} + autoFocus={props.autoFocus} + onBlur={e => { + if (props.onBlur) props.onBlur(e) + setFocused(false) + }} + /> + {suggestionsListComponent} +
    + ) +} + +export default Autocomplete + +// ** PropTypes +Autocomplete.propTypes = { + suggestions: PropTypes.array.isRequired, + filterKey: PropTypes.string.isRequired, + defaultValue: PropTypes.string, + wrapperClass: PropTypes.string, + filterHeaderKey: PropTypes.string, + placeholder: PropTypes.string, + suggestionLimit: PropTypes.number, + grouped: PropTypes.bool, + autoFocus: PropTypes.bool, + onKeyDown: PropTypes.func, + onChange: PropTypes.func, + onSuggestionsShown: PropTypes.func, + onSuggestionItemClick: PropTypes.func, + clearInput: PropTypes.func, + externalClick: PropTypes.func +} diff --git a/src/@core/components/avatar-group/index.js b/src/@core/components/avatar-group/index.js new file mode 100644 index 0000000..e445689 --- /dev/null +++ b/src/@core/components/avatar-group/index.js @@ -0,0 +1,65 @@ +// ** React Imports +import { Fragment } from 'react' + +// ** Third Party Components +import Proptypes from 'prop-types' +import classnames from 'classnames' +import { UncontrolledTooltip } from 'reactstrap' + +// ** Custom Components +import Avatar from '@components/avatar' + +const AvatarGroup = props => { + // ** Props + const { data, tag, className } = props + + // ** Conditional Tag + const Tag = tag ? tag : 'div' + + // ** Render Data + const renderData = () => { + return data.map((item, i) => { + const ItemTag = item.tag ? item.tag : 'div' + return ( + + {item.title ? ( + + {item.title} + + ) : null} + {!item.meta ? ( + + ) : null} + {item.meta ? {item.meta} : null} + + ) + }) + } + + return ( + + {renderData()} + + ) +} + +export default AvatarGroup + +// ** PropTypes +AvatarGroup.propTypes = { + data: Proptypes.array.isRequired, + tag: Proptypes.oneOfType([Proptypes.func, Proptypes.string]) +} diff --git a/src/@core/components/avatar/index.js b/src/@core/components/avatar/index.js new file mode 100644 index 0000000..e72b7e6 --- /dev/null +++ b/src/@core/components/avatar/index.js @@ -0,0 +1,155 @@ +// ** React Imports +import { forwardRef } from 'react' + +// ** Third Party Components +import Proptypes from 'prop-types' +import { Badge } from 'reactstrap' +import classnames from 'classnames' + +const Avatar = forwardRef((props, ref) => { + // ** Props + const { + color, + className, + imgClassName, + initials, + size, + badgeUp, + content, + icon, + badgeColor, + badgeText, + img, + imgHeight, + imgWidth, + status, + tag: Tag, + contentStyles, + ...rest + } = props + + // ** Function to extract initials from content + const getInitials = str => { + const results = [] + const wordArray = str.split(' ') + wordArray.forEach(e => { + results.push(e[0]) + }) + return results.join('') + } + + return ( + + {img === false || img === undefined ? ( + + {initials ? getInitials(content) : content} + + {icon ? icon : null} + {badgeUp ? ( + + {badgeText ? badgeText : '0'} + + ) : null} + + ) : ( + avatarImg + )} + {status ? ( + + ) : null} + + ) +}) + +export default Avatar + +// ** PropTypes +Avatar.propTypes = { + imgClassName: Proptypes.string, + className: Proptypes.string, + src: Proptypes.string, + tag: Proptypes.oneOfType([Proptypes.func, Proptypes.string]), + badgeUp: Proptypes.bool, + content: Proptypes.string, + icon: Proptypes.node, + contentStyles: Proptypes.object, + badgeText: Proptypes.string, + imgHeight: Proptypes.oneOfType([Proptypes.string, Proptypes.number]), + imgWidth: Proptypes.oneOfType([Proptypes.string, Proptypes.number]), + size: Proptypes.oneOf(['sm', 'lg', 'xl']), + status: Proptypes.oneOf(['online', 'offline', 'away', 'busy']), + badgeColor: Proptypes.oneOf([ + 'primary', + 'secondary', + 'success', + 'danger', + 'info', + 'warning', + 'dark', + 'light-primary', + 'light-secondary', + 'light-success', + 'light-danger', + 'light-info', + 'light-warning', + 'light-dark' + ]), + color: Proptypes.oneOf([ + 'primary', + 'secondary', + 'success', + 'danger', + 'info', + 'warning', + 'dark', + 'light-primary', + 'light-secondary', + 'light-success', + 'light-danger', + 'light-info', + 'light-warning', + 'light-dark' + ]), + initials(props) { + if (props['initials'] && props['content'] === undefined) { + return new Error('content prop is required with initials prop.') + } + if (props['initials'] && typeof props['content'] !== 'string') { + return new Error('content prop must be a string.') + } + if (typeof props['initials'] !== 'boolean' && props['initials'] !== undefined) { + return new Error('initials must be a boolean!') + } + } +} + +// ** Default Props +Avatar.defaultProps = { + tag: 'div' +} diff --git a/src/@core/components/breadcrumbs/index.js b/src/@core/components/breadcrumbs/index.js new file mode 100644 index 0000000..5a37bab --- /dev/null +++ b/src/@core/components/breadcrumbs/index.js @@ -0,0 +1,92 @@ +// ** React Imports +import { Link } from 'react-router-dom' + +// ** Third Party Components +import Proptypes from 'prop-types' +import { Grid, CheckSquare, MessageSquare, Mail, Calendar } from 'react-feather' +import { + Breadcrumb, + BreadcrumbItem, + UncontrolledButtonDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle +} from 'reactstrap' + +const BreadCrumbs = props => { + // ** Props + const { breadCrumbTitle, breadCrumbParent, breadCrumbParent2, breadCrumbParent3, breadCrumbActive } = props + + return ( +
    +
    +
    +
    + {breadCrumbTitle ?

    {breadCrumbTitle}

    : ''} +
    + + + Home + + + {breadCrumbParent} + + {breadCrumbParent2 ? ( + + {breadCrumbParent2} + + ) : ( + '' + )} + {breadCrumbParent3 ? ( + + {breadCrumbParent3} + + ) : ( + '' + )} + + {breadCrumbActive} + + +
    +
    +
    +
    +
    +
    + + + + + + + + Todo + + + + Chat + + + + Email + + + + Calendar + + + +
    +
    +
    + ) +} +export default BreadCrumbs + +// ** PropTypes +BreadCrumbs.propTypes = { + breadCrumbTitle: Proptypes.string.isRequired, + breadCrumbActive: Proptypes.string.isRequired +} diff --git a/src/@core/components/card-actions/index.js b/src/@core/components/card-actions/index.js new file mode 100644 index 0000000..8ab73b6 --- /dev/null +++ b/src/@core/components/card-actions/index.js @@ -0,0 +1,132 @@ +// ** React Imports +import { Fragment, useState, useEffect } from 'react' + +// ** Third Party Components +import PropTypes from 'prop-types' +import classnames from 'classnames' +import UiLoader from '@components/ui-loader' +import { ChevronDown, RotateCw, X } from 'react-feather' +import { Card, CardHeader, CardTitle, Collapse, Spinner } from 'reactstrap' + +const CardActions = props => { + // ** Props + const { title, actions, children, collapseIcon, reloadIcon, removeIcon, endReload } = props + + // ** States + const [reload, setReload] = useState(false) + const [collapse, setCollapse] = useState(true) + const [visibility, setVisibility] = useState(true) + + /** + ** If custom icon is defined then consider that else default icons + */ + const Icons = { + collapse: collapseIcon ? collapseIcon : ChevronDown, + remove: removeIcon ? removeIcon : X, + reload: reloadIcon ? reloadIcon : RotateCw + } + + // ** Action to call + const callAction = action => { + switch (action) { + case 'collapse': + return setCollapse(!collapse) + case 'remove': + return setVisibility(false) + case 'reload': + return setReload(true) + default: + } + } + + // ** Renders card actions + const renderIcons = () => { + /** + ** IF: user passes array of actions then loop through them & render all of the actions + ** ELSE: render single action + */ + + if (Array.isArray(actions)) { + return actions.map((action, i) => { + const Tag = Icons[action] + return ( + callAction(action)} + /> + ) + }) + } else { + const Tag = Icons[actions] + return callAction(actions)} /> + } + } + + // ** Ends reload + const removeReload = () => { + setReload(false) + } + + // ** If user passes endReload function call it. + useEffect(() => { + if (reload) { + endReload(removeReload) + } + }) + + // ** If user passes collapse action then return as Wrapper else return + const CollapseWrapper = actions === 'collapse' || actions.includes('collapse') ? Collapse : Fragment + + // ** If user passes reload action then return as Wrapper else return + const BlockUiWrapper = actions === 'reload' || actions.includes('reload') ? UiLoader : Fragment + + return ( + + + + {title} +
    {renderIcons()}
    +
    + + {children} + +
    +
    + ) +} + +export default CardActions + +// ** PropTypes +CardActions.propTypes = { + title: PropTypes.string.isRequired, + collapseIcon: PropTypes.any, + removeIcon: PropTypes.any, + reloadIcon: PropTypes.any, + actions: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]).isRequired, + endReload(props) { + // ** User passes reload action and doesn't pass endReload then return Error + if ( + (props['actions'] === 'reload' && props['endReload'] === undefined) || + (props['actions'].includes('reload') && props['endReload'] === undefined) + ) { + return new Error('Please provide a function to end reload!') + } + } +} diff --git a/src/@core/components/card-snippet/index.js b/src/@core/components/card-snippet/index.js new file mode 100644 index 0000000..d00288f --- /dev/null +++ b/src/@core/components/card-snippet/index.js @@ -0,0 +1,51 @@ +// ** React Imports +import { Fragment, useState } from 'react' + +// ** Third Party Components +import PropTypes from 'prop-types' +import { Code } from 'react-feather' +import { Card, CardHeader, CardBody, CardTitle, Collapse } from 'reactstrap' + +const CardSnippet = props => { + // ** Props + const { title, children, noBody, code, iconCode } = props + + // ** State + const [isOpen, setIsOpen] = useState(false) + + // ** If user passes custom icon then render that else render default icon + const IconCode = iconCode ? iconCode : + + // ** To toggle collapse + const toggle = () => setIsOpen(!isOpen) + + // ** If user passes noBody then return else return + const Wrapper = noBody ? Fragment : CardBody + + return ( + + + {title} +
    + {IconCode} +
    +
    + {children} + + {code} + +
    + ) +} + +export default CardSnippet + +// ** PropTypes +CardSnippet.propTypes = { + className: PropTypes.string, + title: PropTypes.string.isRequired, + children: PropTypes.any, + code: PropTypes.node, + iconCode: PropTypes.node, + noBody: PropTypes.bool +} diff --git a/src/@core/components/customizer/index.js b/src/@core/components/customizer/index.js new file mode 100644 index 0000000..3893791 --- /dev/null +++ b/src/@core/components/customizer/index.js @@ -0,0 +1,357 @@ +// ** React Imports +import { useState } from 'react' + +// ** Third Party Components +import Select from 'react-select' +import classnames from 'classnames' +import { Settings, X } from 'react-feather' +import { CustomInput, FormGroup } from 'reactstrap' +import PerfectScrollbar from 'react-perfect-scrollbar' +import { selectThemeColors } from '@utils' + +// ** Styles +import '@styles/react/libs/react-select/_react-select.scss' + +const Customizer = props => { + // ** Props + const { + skin, + setSkin, + isRtl, + setIsRtl, + layout, + setLayout, + navbarType, + setNavbarType, + footerType, + setFooterType, + navbarColor, + setNavbarColor, + isHidden, + setIsHidden, + contentWidth, + setContentWidth, + menuCollapsed, + setMenuCollapsed, + transition, + setTransition + } = props + + // ** State + const [openCustomizer, setOpenCustomizer] = useState(false) + + // ** Toggles Customizer + const handleToggle = e => { + e.preventDefault() + setOpenCustomizer(!openCustomizer) + } + + // ** Render Layout Skin Options + const renderSkinsRadio = () => { + const skinsArr = [ + { + name: 'light', + label: 'Light', + checked: skin === 'light' + }, + { + name: 'bordered', + label: 'Bordered', + checked: skin === 'bordered' + }, + { + name: 'dark', + label: 'Dark', + checked: skin === 'dark' + }, + { + name: 'semi-dark', + label: 'Semi Dark', + checked: skin === 'semi-dark' + } + ] + + return skinsArr.map((radio, index) => { + const marginCondition = index !== skinsArr.length - 1 + + if (layout === 'HorizontalLayout' && radio.name === 'semi-dark') { + return null + } + + return ( + setSkin(radio.name)} + className={classnames({ 'mr-1': marginCondition })} + /> + ) + }) + } + + // ** Render Navbar Colors Options + const renderNavbarColors = () => { + const colorsArr = ['white', 'primary', 'secondary', 'success', 'danger', 'info', 'warning', 'dark'] + + return colorsArr.map(color => ( +
  • setNavbarColor(color)} + >
  • + )) + } + + // ** Render Navbar Type Options + const renderNavbarTypeRadio = () => { + const navbarTypeArr = [ + { + name: 'floating', + label: 'Floating', + checked: navbarType === 'floating' + }, + { + name: 'sticky', + label: 'Sticky', + checked: navbarType === 'sticky' + }, + { + name: 'static', + label: 'Static', + checked: navbarType === 'static' + }, + { + name: 'hidden', + label: 'Hidden', + checked: navbarType === 'hidden' + } + ] + + return navbarTypeArr.map((radio, index) => { + const marginCondition = index !== navbarTypeArr.length - 1 + + if (layout === 'HorizontalLayout' && radio.name === 'hidden') { + return null + } + + return ( + setNavbarType(radio.name)} + className={classnames({ 'mr-1': marginCondition })} + /> + ) + }) + } + + // ** Render Footer Type Options + const renderFooterTypeRadio = () => { + const footerTypeArr = [ + { + name: 'sticky', + label: 'Sticky', + checked: footerType === 'sticky' + }, + { + name: 'static', + label: 'Static', + checked: footerType === 'static' + }, + { + name: 'hidden', + label: 'Hidden', + checked: footerType === 'hidden' + } + ] + + return footerTypeArr.map((radio, index) => { + const marginCondition = index !== footerTypeArr.length - 1 + + return ( + setFooterType(radio.name)} + className={classnames({ 'mr-1': marginCondition })} + /> + ) + }) + } + + // ** Router Transition Options + const transitionOptions = [ + { value: 'fadeIn', label: 'Fade' }, + { value: 'fadeInLeft', label: 'Fade In Left' }, + { value: 'zoomIn', label: 'Zoom In' }, + { value: 'none', label: 'None' } + ] + + // ** Get Current Transition + const transitionValue = transitionOptions.find(i => i.value === transition) + + return ( +
    + + + + +
    +

    Theme Customizer

    +

    Customize & Preview in Real Time

    + + + +
    + +
    + +
    + +

    Skin

    +
    {renderSkinsRadio()}
    +
    + + +

    Content Width

    +
    + setContentWidth('full')} + /> + setContentWidth('boxed')} + /> +
    +
    + + +
    +

    RTL

    + setIsRtl(!isRtl)} /> +
    +
    + + +
    +

    Router Transition

    + + setInputVisibility(!inputVisibility)}> + {renderIcon()} + + + + ) +} + +export default InputPasswordToggle + +// ** PropTypes +InputPasswordToggle.propTypes = { + hideIcon: PropTypes.node, + showIcon: PropTypes.node, + visible: PropTypes.bool, + className: PropTypes.string, + placeholder: PropTypes.string, + iconSize: PropTypes.number, + inputClassName: PropTypes.string, + label(props, propName, componentName) { + // ** If label is defined and htmlFor is undefined throw error + if (props[propName] && props['htmlFor'] === 'undefined') { + throw new Error('htmlFor prop is required when label prop is present') + } + }, + htmlFor(props, propName, componentName) { + // ** If htmlFor is defined and label is undefined throw error + if (props[propName] && props['label'] === 'undefined') { + throw new Error('label prop is required when htmlFor prop is present') + } + } +} + +// ** Default Props +InputPasswordToggle.defaultProps = { + visible: false +} diff --git a/src/@core/components/number-input/index.js b/src/@core/components/number-input/index.js new file mode 100644 index 0000000..0e9492b --- /dev/null +++ b/src/@core/components/number-input/index.js @@ -0,0 +1,205 @@ +// ** React Imports +import PropTypes from 'prop-types' +import classnames from 'classnames' +import { Plus, Minus } from 'react-feather' +import { useState, useEffect } from 'react' +import { InputGroup, InputGroupAddon, Input, Button } from 'reactstrap' + +// ** Styles +import './number-input.scss' + +// ** Keycode Vars +const KEYCODE_UP = 38 +const KEYCODE_DOWN = 40 + +const NumberInput = props => { + // ** Props + const { + min, + max, + step, + size, + wrap, + value, + style, + upIcon, + disabled, + readonly, + onChange, + downIcon, + vertical, + className, + onDecrement, + onIncrement, + inputClassName, + ...rest + } = props + + // ** State + const [count, setCount] = useState(value || min) + + // ** Handle btn down click + const handleDecrement = () => { + if (!disabled && !readonly) { + // ** If count is equals or smaller than min then return and do nothing + if (!wrap && count <= min) { + return + } + + // ** Returns the decreased count based on wrap & and min prop + const countCondition = () => { + if (count - step < min) { + if (wrap) { + return max + } else { + return min + } + } else { + return count - step + } + } + + setCount(countCondition()) + + if (onDecrement) { + onIncrement(count) + } + } + } + + // ** Handle btn up click + const handleIncrement = () => { + if (!disabled && !readonly) { + // ** If count is equals or larger than min then return and do nothing + if (!wrap && count >= max) { + return + } + + // ** Returns the Increased count based on wrap & and max prop + const countCondition = () => { + if (count + step > max) { + if (wrap) { + return min + } else { + return max + } + } else { + return count + step + } + } + + setCount(countCondition()) + + if (onIncrement) { + onIncrement(count) + } + } + } + + // ** Handle input change + const handleInputChange = e => { + setCount(Number(e.target.value)) + } + + // ** Handle Arrow Up & Down + const handleKeyDown = e => { + e.preventDefault() + if (!readonly) { + if (e.keyCode === KEYCODE_UP) { + handleIncrement() + } + if (e.keyCode === KEYCODE_DOWN) { + handleDecrement() + } + } + } + + // ** UseEffect based on user passed onChange + useEffect(() => { + if (onChange) { + onChange(count) + } + }, [count]) + + return ( + + + + + + + + + + ) +} + +export default NumberInput + +// ** Default Props +NumberInput.defaultProps = { + min: 1, + step: 1, + wrap: false, + max: Infinity, + disabled: false, + readonly: false, + downIcon: , + upIcon: +} + +// ** PropTypes +NumberInput.propTypes = { + wrap: PropTypes.bool, + min: PropTypes.number, + max: PropTypes.number, + step: PropTypes.number, + value: PropTypes.number, + style: PropTypes.object, + vertical: PropTypes.bool, + disabled: PropTypes.bool, + readonly: PropTypes.bool, + onChange: PropTypes.func, + upIcon: PropTypes.element, + downIcon: PropTypes.element, + className: PropTypes.string, + onDecrement: PropTypes.func, + onIncrement: PropTypes.func, + inputClassName: PropTypes.string, + size: PropTypes.oneOf(['sm', 'lg']) +} diff --git a/src/@core/components/number-input/number-input.scss b/src/@core/components/number-input/number-input.scss new file mode 100644 index 0000000..fe03f79 --- /dev/null +++ b/src/@core/components/number-input/number-input.scss @@ -0,0 +1,153 @@ +// Component: Number Input +// ======================================================================== + +@import '../../scss/base/bootstrap-extended/include'; +@import '../../scss/base/components/include'; + +.number-input { + border-radius: $border-radius; + text-align: center; + border: 1px solid $custom-control-border-color; + overflow: hidden; + + .form-control { + text-align: center; + padding: 0 0.25rem; + border-color: $custom-control-border-color; + + ::-webkit-outer-spin-button, + ::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + } + -moz-appearance: textfield; + } + + &:focus, + &:active, + &:focus-within { + outline: 0; + box-shadow: none; + border-color: $primary; + + .form-control { + box-shadow: none; + border-color: $custom-control-border-color !important; + } + } + + &:not(.vertical-number-input) { + .form-control { + border-top: 0; + border-bottom: 0; + } + } + + &.disabled, + &.readonly { + &:focus, + &:active, + &:focus-within { + outline: 0; + box-shadow: none; + border-color: $custom-control-border-color; + } + .btn { + background-color: $input-disabled-bg; + opacity: 1; + } + } + + &.vertical-number-input { + display: inline-flex; + flex-direction: column; + width: auto; + max-width: 3rem; + + .input-group-prepend, + .input-group-append { + margin-right: 0; + margin-left: 0; + + .btn { + width: 100%; + } + } + + .input-group-prepend .btn { + border-bottom-left-radius: 0; + border-top-right-radius: $btn-border-radius; + } + + .input-group-append .btn { + border-bottom-left-radius: $btn-border-radius; + border-top-right-radius: 0; + } + + .form-control { + border-left: 0; + border-right: 0; + width: 100%; + padding-left: 0.5rem; + padding-right: 0.5rem; + font-size: 0.85rem; + } + + &-sm { + max-width: 2.5rem; + .form-control { + padding-left: 0.25rem; + padding-right: 0.25rem; + font-size: 0.75rem; + } + } + + &-lg { + max-width: 3.5rem; + .form-control { + font-size: 1rem; + } + } + } +} + +.dark-layout { + .number-input { + border-color: $theme-dark-input-border-color; + + .input-group-prepend, + .input-group-append { + button:not(.disabled) { + svg { + stroke: $theme-dark-body-color; + } + } + } + + &:focus, + &:active, + &:focus-within { + border-color: $primary !important; + + .form-control { + border-color: $theme-dark-input-border-color !important; + } + } + + &:not(.disabled), + &:not(.readonly) { + &:focus, + &:active, + &:focus-within { + border-color: $theme-dark-input-border-color; + } + } + + &.disabled, + &.readonly { + .btn { + background-color: $theme-dark-input-disabled-border-color; + } + } + } +} diff --git a/src/@core/components/repeater/index.js b/src/@core/components/repeater/index.js new file mode 100644 index 0000000..bd893dd --- /dev/null +++ b/src/@core/components/repeater/index.js @@ -0,0 +1,33 @@ +// ** Third Party Components +import PropTypes from 'prop-types' + +const Repeater = props => { + // ** Props + const { count, tag, component, children, ...rest } = props + + // ** Custom Tag + const Tag = tag + + // ** Default Items + const items = [] + + // ** Loop passed count times and push it in items Array + for (let i = 0; i < count; i++) { + items.push(children(i)) + } + + return {items} +} + +// ** PropTypes +Repeater.propTypes = { + count: PropTypes.number.isRequired, + tag: PropTypes.string.isRequired +} + +// ** Default Props +Repeater.defaultProps = { + tag: 'div' +} + +export default Repeater diff --git a/src/@core/components/ripple-button/index.js b/src/@core/components/ripple-button/index.js new file mode 100644 index 0000000..fda6ec1 --- /dev/null +++ b/src/@core/components/ripple-button/index.js @@ -0,0 +1,75 @@ +// ** React Imports +import { useState, useEffect } from 'react' + +// ** Third Party Components +import { Button } from 'reactstrap' +import classnames from 'classnames' + +// ** Styles +import './ripple-button.scss' + +const RippleButton = ({ className, children, onClick, ...rest }) => { + // ** States + const [mounted, setMounted] = useState(false) + const [isRippling, setIsRippling] = useState(false) + const [coords, setCoords] = useState({ x: -1, y: -1 }) + + // ** Toggle mounted on mount & unmount + useEffect(() => { + setMounted(true) + return () => setMounted(false) + }, []) + + // ** Check for coords and set ripple + useEffect(() => { + if (mounted) { + if (coords.x !== -1 && coords.y !== -1) { + setIsRippling(true) + setTimeout(() => setIsRippling(false), 500) + } else { + setIsRippling(false) + } + } + }, [coords]) + + // ** Reset Coords on ripple end + useEffect(() => { + if (mounted) { + if (!isRippling) setCoords({ x: -1, y: -1 }) + } + }, [isRippling]) + + return ( + + ) +} + +// ** PropTypes +RippleButton.propTypes = { + ...Button.propTypes +} + +Button.Ripple = RippleButton diff --git a/src/@core/components/ripple-button/ripple-button.scss b/src/@core/components/ripple-button/ripple-button.scss new file mode 100644 index 0000000..799822c --- /dev/null +++ b/src/@core/components/ripple-button/ripple-button.scss @@ -0,0 +1,36 @@ +// Component: Ripple Button +// ======================================================================== + +@import '../../scss/base/bootstrap-extended/include'; +@import '../../scss/base/components/include'; + +.waves-effect { + position: relative; + overflow: hidden; + .waves-ripple { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + opacity: 0; + width: 0; + height: 0; + border-radius: 50%; + background: rgba($color: $white, $alpha: 0.5); + animation: ripple-effect 0.4s ease; + } +} + +@keyframes ripple-effect { + 0% { + opacity: 0; + } + 25% { + opacity: 1; + } + 100% { + width: 200%; + padding-bottom: 200%; + opacity: 0; + } +} diff --git a/src/@core/components/sidebar/index.js b/src/@core/components/sidebar/index.js new file mode 100644 index 0000000..ea78d94 --- /dev/null +++ b/src/@core/components/sidebar/index.js @@ -0,0 +1,89 @@ +// ** Third Party Components +import { X } from 'react-feather' +import Proptypes from 'prop-types' +import classnames from 'classnames' +import { Modal, ModalHeader, ModalBody } from 'reactstrap' + +const Sidebar = props => { + // ** Props + const { + width, + open, + toggleSidebar, + size, + bodyClassName, + contentClassName, + wrapperClassName, + headerClassName, + className, + title, + children, + closeBtn, + ...rest + } = props + + // ** If user passes custom close btn render that else default close btn + const renderCloseBtn = closeBtn ? closeBtn : + + return ( + + +
    + {title} +
    +
    + + {children} + +
    + ) +} + +export default Sidebar + +// ** PropTypes +Sidebar.propTypes = { + title: Proptypes.string.isRequired, + open: Proptypes.bool.isRequired, + toggleSidebar: Proptypes.func.isRequired, + size: Proptypes.oneOf(['sm', 'lg']), + className: Proptypes.string, + bodyClassName: Proptypes.string, + contentClassName: Proptypes.string, + wrapperClassName: Proptypes.string, + children: Proptypes.any.isRequired, + width: Proptypes.oneOfType([Proptypes.number, Proptypes.string]) +} diff --git a/src/@core/components/spinner/Fallback-spinner.js b/src/@core/components/spinner/Fallback-spinner.js new file mode 100644 index 0000000..578d6d7 --- /dev/null +++ b/src/@core/components/spinner/Fallback-spinner.js @@ -0,0 +1,17 @@ +// ** Logo +import logo from '@src/assets/images/logo/logo.png' + +const SpinnerComponent = () => { + return ( +
    + logo +
    +
    +
    +
    +
    +
    + ) +} + +export default SpinnerComponent diff --git a/src/@core/components/spinner/Loading-spinner.js b/src/@core/components/spinner/Loading-spinner.js new file mode 100644 index 0000000..08da3c3 --- /dev/null +++ b/src/@core/components/spinner/Loading-spinner.js @@ -0,0 +1,13 @@ +const ComponentSpinner = () => { + return ( +
    +
    +
    +
    +
    +
    +
    + ) +} + +export default ComponentSpinner diff --git a/src/@core/components/statistics-card/index.js b/src/@core/components/statistics-card/index.js new file mode 100644 index 0000000..668345e --- /dev/null +++ b/src/@core/components/statistics-card/index.js @@ -0,0 +1,52 @@ +// ** Third Party Components +import Proptypes from 'prop-types' +import classnames from 'classnames' +import Chart from 'react-apexcharts' +import { Card, CardBody } from 'reactstrap' + +const StatisticsCards = props => { + // ** Props + const { className, hideChart, iconRight, iconBg, icon, stat, statTitle, options, series, type, height } = props + + return ( + + +
    +
    +
    {icon}
    +
    +
    +
    +

    {stat}

    +

    {statTitle}

    +
    +
    + {!hideChart && } +
    + ) +} +export default StatisticsCards + +// ** PropTypes +StatisticsCards.propTypes = { + className: Proptypes.string, + hideChart: Proptypes.bool, + iconRight: Proptypes.bool, + iconBg: Proptypes.string, + icon: Proptypes.node.isRequired, + stat: Proptypes.string.isRequired, + statTitle: Proptypes.string.isRequired, + options: Proptypes.object, + series: Proptypes.array, + type: Proptypes.string, + height: Proptypes.string +} diff --git a/src/@core/components/timeline/index.js b/src/@core/components/timeline/index.js new file mode 100644 index 0000000..b10ba88 --- /dev/null +++ b/src/@core/components/timeline/index.js @@ -0,0 +1,76 @@ +// ** Third Party Components +import Proptypes from 'prop-types' +import classnames from 'classnames' + +const Timeline = props => { + // ** Props + const { data, tag, className } = props + + // ** Custom Tagg + const Tag = tag ? tag : 'ul' + + return ( + + {data.map((item, i) => { + const ItemTag = item.tag ? item.tag : 'li' + + return ( + + + {item.icon ? item.icon : null} + +
    +
    +
    {item.title}
    + {item.meta ? ( + + {item.meta} + + ) : null} +
    +

    + {item.content} +

    + {item.customContent ? item.customContent : null} +
    +
    + ) + })} +
    + ) +} + +export default Timeline + +// ** PropTypes +Timeline.propTypes = { + data: Proptypes.array.isRequired, + className: Proptypes.string, + tag: Proptypes.string +} diff --git a/src/@core/components/ui-loader/index.js b/src/@core/components/ui-loader/index.js new file mode 100644 index 0000000..1170578 --- /dev/null +++ b/src/@core/components/ui-loader/index.js @@ -0,0 +1,45 @@ +// ** Third Party Components +import { Fragment } from 'react' +import Proptypes from 'prop-types' +import classnames from 'classnames' +import { Spinner } from 'reactstrap' + +import './ui-loader.scss' + +const UILoader = props => { + const { children, blocking, loader, className, tag, overlayColor } = props + + const Tag = tag + + return ( + + {children} + {blocking ? ( + +
    +
    {loader}
    +
    + ) : null} +
    + ) +} + +export default UILoader + +UILoader.defaultProps = { + tag: 'div', + blocking: false, + loader: +} + +UILoader.propTypes = { + tag: Proptypes.string, + loader: Proptypes.any, + className: Proptypes.string, + overlayColor: Proptypes.string, + blocking: Proptypes.bool.isRequired +} diff --git a/src/@core/components/ui-loader/ui-loader.scss b/src/@core/components/ui-loader/ui-loader.scss new file mode 100644 index 0000000..882f441 --- /dev/null +++ b/src/@core/components/ui-loader/ui-loader.scss @@ -0,0 +1,35 @@ +// Component: UI Loader +// ======================================================================== + +@import '../../scss/base/bootstrap-extended/include'; +@import '../../scss/base/components/include'; + +.ui-loader { + position: relative; + + &.show { + // background-color: rgba($color: $black, $alpha: 0.3); + .overlay { + content: ''; + position: absolute; + width: 100%; + height: 100%; + top: 0; + background-color: rgba($color: $black, $alpha: 0.3); + } + + > :first-child, + code { + background-color: initial; + } + } + + .loader { + position: absolute; + top: 50%; + left: 50%; + height: 50%; + margin-top: -1rem; + margin-left: -1rem; + } +} diff --git a/src/@core/components/widgets/stats/ChartOptions.js b/src/@core/components/widgets/stats/ChartOptions.js new file mode 100644 index 0000000..60e0d5c --- /dev/null +++ b/src/@core/components/widgets/stats/ChartOptions.js @@ -0,0 +1,104 @@ +// ** Area Chart Common Options +export const areaChartOptions = { + chart: { + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + grid: { + show: false + }, + colors: ['#7367F0'], + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 2.5 + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 0.9, + opacityFrom: 0.7, + opacityTo: 0.5, + stops: [0, 80, 100] + } + }, + xaxis: { + labels: { + show: false + }, + axisBorder: { + show: false + } + }, + yaxis: { + labels: { + show: false + } + }, + tooltip: { + x: { show: false } + } +} + +// ** Line Chart Common Options +export const lineChartOptions = { + chart: { + toolbar: { + show: false + }, + sparkline: { + enabled: true + }, + dropShadow: { + enabled: true, + top: 5, + left: 0, + blur: 4, + opacity: 0.1 + } + }, + grid: { + show: false + }, + colors: ['#7367F0'], + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 5 + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 1, + gradientToColors: ['#A9A2F6'], + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100, 100, 100] + } + }, + + xaxis: { + labels: { + show: false + }, + axisBorder: { + show: false + } + }, + yaxis: { + labels: { + show: false + } + }, + tooltip: { + x: { show: false } + } +} diff --git a/src/@core/components/widgets/stats/StatsHorizontal.js b/src/@core/components/widgets/stats/StatsHorizontal.js new file mode 100644 index 0000000..c72535d --- /dev/null +++ b/src/@core/components/widgets/stats/StatsHorizontal.js @@ -0,0 +1,32 @@ +// ** Third Party Components +import PropTypes from 'prop-types' +import { Card, CardBody } from 'reactstrap' + +const StatsHorizontal = ({ icon, color, stats, statTitle, className, ...rest }) => { + return ( + + +
    +
    +

    {stats}

    +

    {statTitle}

    +
    +
    +
    {icon}
    +
    +
    +
    +
    + ) +} + +export default StatsHorizontal + +// ** PropTypes +StatsHorizontal.propTypes = { + icon: PropTypes.element.isRequired, + color: PropTypes.string.isRequired, + stats: PropTypes.string.isRequired, + statTitle: PropTypes.string.isRequired, + className: PropTypes.string +} diff --git a/src/@core/components/widgets/stats/StatsVertical.js b/src/@core/components/widgets/stats/StatsVertical.js new file mode 100644 index 0000000..db25de5 --- /dev/null +++ b/src/@core/components/widgets/stats/StatsVertical.js @@ -0,0 +1,28 @@ +// ** Third Party Components +import PropTypes from 'prop-types' +import { Card, CardBody } from 'reactstrap' + +const StatsVertical = ({ icon, color, stats, statTitle, className, ...rest }) => { + return ( + + +
    +
    {icon}
    +
    +

    {stats}

    +

    {statTitle}

    +
    +
    + ) +} + +export default StatsVertical + +// ** PropTypes +StatsVertical.propTypes = { + icon: PropTypes.element.isRequired, + color: PropTypes.string.isRequired, + stats: PropTypes.string.isRequired, + statTitle: PropTypes.string.isRequired, + className: PropTypes.string +} diff --git a/src/@core/components/widgets/stats/StatsWithAreaChart.js b/src/@core/components/widgets/stats/StatsWithAreaChart.js new file mode 100644 index 0000000..0863945 --- /dev/null +++ b/src/@core/components/widgets/stats/StatsWithAreaChart.js @@ -0,0 +1,51 @@ +// ** Custom Components +import Avatar from '@components/avatar' + +// ** Third Party Components +import PropTypes from 'prop-types' +import classnames from 'classnames' +import Chart from 'react-apexcharts' +import { Card, CardBody } from 'reactstrap' + +// ** Default Options +import { areaChartOptions } from './ChartOptions' + +const StatsWithAreaChart = props => { + // ** Props + const { icon, color, stats, statTitle, series, options, type, height, className, ...rest } = props + return ( + + + +

    {stats}

    +

    {statTitle}

    +
    + +
    + ) +} + +export default StatsWithAreaChart + +// ** PropTypes +StatsWithAreaChart.propTypes = { + icon: PropTypes.element.isRequired, + color: PropTypes.string.isRequired, + stats: PropTypes.string.isRequired, + statTitle: PropTypes.string.isRequired, + options: PropTypes.object, + series: PropTypes.array.isRequired, + type: PropTypes.string, + height: PropTypes.string, + className: PropTypes.string +} + +// ** Default Props +StatsWithAreaChart.defaultProps = { + options: areaChartOptions, + color: 'primary' +} diff --git a/src/@core/components/widgets/stats/StatsWithLineChart.js b/src/@core/components/widgets/stats/StatsWithLineChart.js new file mode 100644 index 0000000..d54ff89 --- /dev/null +++ b/src/@core/components/widgets/stats/StatsWithLineChart.js @@ -0,0 +1,45 @@ +// ** Custom Components +import Avatar from '@components/avatar' + +// ** Third Party Components +import PropTypes from 'prop-types' +import Chart from 'react-apexcharts' +import { Card, CardHeader, CardText } from 'reactstrap' + +// ** Default Options +import { lineChartOptions } from './ChartOptions' + +const StatsWithLineChart = ({ icon, color, stats, statTitle, series, options, type, height, ...rest }) => { + return ( + + +
    +

    {stats}

    + {statTitle} +
    + +
    + +
    + ) +} + +export default StatsWithLineChart + +// ** PropTypes +StatsWithLineChart.propTypes = { + icon: PropTypes.element.isRequired, + color: PropTypes.string.isRequired, + stats: PropTypes.string.isRequired, + statTitle: PropTypes.string.isRequired, + options: PropTypes.object, + series: PropTypes.array.isRequired, + type: PropTypes.string, + height: PropTypes.string +} + +// ** Default Props +StatsWithLineChart.defaultProps = { + options: lineChartOptions, + color: 'primary' +} diff --git a/src/@core/components/widgets/stats/TinyChartStats.js b/src/@core/components/widgets/stats/TinyChartStats.js new file mode 100644 index 0000000..3e8914f --- /dev/null +++ b/src/@core/components/widgets/stats/TinyChartStats.js @@ -0,0 +1,35 @@ +// ** Third Party Components +import PropTypes from 'prop-types' +import Chart from 'react-apexcharts' +import { Card, CardBody } from 'reactstrap' + +const TinyChartStats = props => { + // ** Props + const { title, stats, options, series, type, height } = props + + return ( + + +
    {title}
    +

    {stats}

    + +
    +
    + ) +} + +export default TinyChartStats + +// ** PropTypes +TinyChartStats.propTypes = { + title: PropTypes.string.isRequired, + stats: PropTypes.string.isRequired, + options: PropTypes.object.isRequired, + series: PropTypes.array.isRequired, + type: PropTypes.string.isRequired +} + +// ** Default Props +TinyChartStats.defaultProps = { + height: 100 +} diff --git a/src/@core/components/wizard/index.js b/src/@core/components/wizard/index.js new file mode 100644 index 0000000..d794b96 --- /dev/null +++ b/src/@core/components/wizard/index.js @@ -0,0 +1,121 @@ +// ** React Imports +import { useEffect, useState, Fragment, forwardRef } from 'react' + +// ** Third Party Components +import Stepper from 'bs-stepper' +import classnames from 'classnames' +import { PropTypes } from 'prop-types' +import { ChevronRight } from 'react-feather' + +// ** Styles +import 'bs-stepper/dist/css/bs-stepper.min.css' +import '../../../@core/scss/base/plugins/forms/form-wizard.scss' + +const Wizard = forwardRef((props, ref) => { + // ** Props + const { type, className, steps, separator, options, instance } = props + + // ** State + const [activeIndex, setActiveIndex] = useState(0) + + // ** Vars + let stepper = null + + // ** Step change listener on mount + useEffect(() => { + stepper = new Stepper(ref.current, options) + + ref.current.addEventListener('shown.bs-stepper', function (event) { + setActiveIndex(event.detail.indexStep) + }) + + if (instance) { + instance(stepper) + } + }, []) + + // ** Renders Wizard Header + const renderHeader = () => { + return steps.map((step, index) => { + return ( + + {index !== 0 && index !== steps.length ?
    {separator}
    : null} +
    index, + active: index === activeIndex + })} + data-target={`#${step.id}`} + > + +
    +
    + ) + }) + } + + // ** Renders Wizard Content + const renderContent = () => { + return steps.map((step, index) => { + return ( +
    + {step.content} +
    + ) + }) + } + + return ( +
    +
    {renderHeader()}
    +
    {renderContent()}
    +
    + ) +}) + +export default Wizard + +// ** Default Props +Wizard.defaultProps = { + type: 'horizontal', + separator: , + options: {} +} + +// ** PropTypes +Wizard.propTypes = { + type: PropTypes.string, + instance: PropTypes.func, + options: PropTypes.object, + className: PropTypes.string, + separator: PropTypes.element, + steps: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + subtitle: PropTypes.string, + icon: PropTypes.any, + content: PropTypes.any.isRequired + }) + ).isRequired +} diff --git a/src/@core/layouts/BlankLayout.js b/src/@core/layouts/BlankLayout.js new file mode 100644 index 0000000..1250625 --- /dev/null +++ b/src/@core/layouts/BlankLayout.js @@ -0,0 +1,35 @@ +// ** React Imports +import { useEffect, useState } from 'react' + +// ** Custom Hooks +import { useSkin } from '@hooks/useSkin' + +const BlankLayout = ({ children, ...rest }) => { + // ** Hooks + const [skin, setSkin] = useSkin() + + // ** States + const [isMounted, setIsMounted] = useState(false) + + //** ComponentDidMount + useEffect(() => { + setIsMounted(true) + return () => setIsMounted(false) + }, []) + + if (!isMounted) { + return null + } + + return ( +
    +
    +
    +
    {children}
    +
    +
    +
    + ) +} + +export default BlankLayout diff --git a/src/@core/layouts/HeaderLayout.js b/src/@core/layouts/HeaderLayout.js new file mode 100644 index 0000000..eebb2e3 --- /dev/null +++ b/src/@core/layouts/HeaderLayout.js @@ -0,0 +1,122 @@ +// ** React Imports +import { useState, useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; + +// ** Store & Actions +import { useSelector, useDispatch } from 'react-redux'; +import { + handleMenuCollapsed, + handleContentWidth, + handleMenuHidden +} from '@store/actions/layout'; + +// ** Third Party Components +import classnames from 'classnames'; +import { ArrowUp } from 'react-feather'; +import ScrollToTop from 'react-scroll-up'; +import { Navbar, Button } from 'reactstrap'; + +// ** Configs +import themeConfig from '@configs/themeConfig'; + +// ** Custom Components +import Customizer from '@components/customizer'; +import FooterComponent from './components/footer'; +import NavbarComponent from './components/navbar'; +import SidebarComponent from './components/menu/vertical-menu'; + +// ** Custom Hooks +import { useRTL } from '@hooks/useRTL'; +import { useSkin } from '@hooks/useSkin'; +import { useNavbarType } from '@hooks/useNavbarType'; +import { useFooterType } from '@hooks/useFooterType'; +import { useNavbarColor } from '@hooks/useNavbarColor'; + +// ** Styles +import '@styles/base/core/menu/menu-types/vertical-menu.scss'; +import '@styles/base/core/menu/menu-types/vertical-overlay-menu.scss'; + +const HeaderLayout = props => { + // ** Props + const { children, navbar, footer, menu, routerProps, currentActiveItem } = + props; + + // ** Hooks + const [skin, setSkin] = useSkin(); + const [navbarColor, setNavbarColor] = useNavbarColor(); + + // ** States + const [isMounted, setIsMounted] = useState(false); + const [menuVisibility, setMenuVisibility] = useState(false); + const [windowWidth, setWindowWidth] = useState(window.innerWidth); + + // ** Store Vars + const layoutStore = useSelector(state => state.layout); + + // ** Update Window Width + const handleWindowWidth = () => { + setWindowWidth(window.innerWidth); + }; + + // ** Vars + const location = useLocation(); + + //** This function will detect the Route Change and will hide the menu on menu item click + useEffect(() => { + if (menuVisibility && windowWidth < 1200) { + setMenuVisibility(false); + } + }, [location]); + + //** Sets Window Size & Layout Props + useEffect(() => { + if (window !== undefined) { + window.addEventListener('resize', handleWindowWidth); + } + }, [windowWidth]); + + //** ComponentDidMount + useEffect(() => { + setIsMounted(true); + return () => setIsMounted(false); + }, []); + + const bgColorCondition = + navbarColor !== '' && navbarColor !== 'light' && navbarColor !== 'white'; + + if (!isMounted) { + return null; + } + return ( +
    +
    +
    + +
    + {navbar ? ( + navbar + ) : ( + + )} +
    +
    +
    {children}
    +
    +
    +
    + ); +}; + +export default HeaderLayout; diff --git a/src/@core/layouts/HorizontalLayout.js b/src/@core/layouts/HorizontalLayout.js new file mode 100644 index 0000000..be51ca1 --- /dev/null +++ b/src/@core/layouts/HorizontalLayout.js @@ -0,0 +1,202 @@ +// ** React Imports +import { useState, useEffect } from 'react' +import { Link } from 'react-router-dom' + +// ** Store & Actions +import { useSelector, useDispatch } from 'react-redux' +import { handleMenuHidden, handleContentWidth } from '@store/actions/layout' + +// ** Third Party Components +import classnames from 'classnames' +import { ArrowUp } from 'react-feather' +import ScrollToTop from 'react-scroll-up' +import { Navbar, NavItem, Button } from 'reactstrap' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +// ** Custom Components +import Customizer from '@components/customizer' +import NavbarComponent from './components/navbar' +import FooterComponent from './components/footer' +import MenuComponent from './components/menu/horizontal-menu' + +// ** Custom Hooks +import { useRTL } from '@hooks/useRTL' +import { useSkin } from '@hooks/useSkin' +import { useNavbarType } from '@hooks/useNavbarType' +import { useFooterType } from '@hooks/useFooterType' +import { useNavbarColor } from '@hooks/useNavbarColor' + +// ** Styles +import '@styles/base/core/menu/menu-types/horizontal-menu.scss' + +const HorizontalLayout = props => { + // ** Props + const { children, navbar, footer, menu, currentActiveItem, routerProps } = props + + // ** Hooks + const [skin, setSkin] = useSkin() + const [isRtl, setIsRtl] = useRTL() + const [navbarType, setNavbarType] = useNavbarType() + const [footerType, setFooterType] = useFooterType() + const [navbarColor, setNavbarColor] = useNavbarColor() + + // ** States + const [isMounted, setIsMounted] = useState(false) + const [navbarScrolled, setNavbarScrolled] = useState(false) + + // ** Store Vars + const dispatch = useDispatch() + const layoutStore = useSelector(state => state.layout) + + // ** Vars + const contentWidth = layoutStore.contentWidth + const isHidden = layoutStore.menuHidden + + // ** Handles Content Width + const setContentWidth = val => dispatch(handleContentWidth(val)) + + // ** Handles Content Width + const setIsHidden = val => dispatch(handleMenuHidden(val)) + + // ** UseEffect Cleanup + const cleanup = () => { + setIsMounted(false) + setNavbarScrolled(false) + } + + //** ComponentDidMount + useEffect(() => { + setIsMounted(true) + window.addEventListener('scroll', function () { + if (window.pageYOffset > 65 && navbarScrolled === false) { + setNavbarScrolled(true) + } + if (window.pageYOffset < 65) { + setNavbarScrolled(false) + } + }) + return () => cleanup() + }, []) + + // ** Vars + const footerClasses = { + static: 'footer-static', + sticky: 'footer-fixed', + hidden: 'footer-hidden' + } + + const navbarWrapperClasses = { + floating: 'navbar-floating', + sticky: 'navbar-sticky', + static: 'navbar-static' + } + + const navbarClasses = { + floating: 'floating-nav', + sticky: 'fixed-top' + } + + const bgColorCondition = navbarColor !== '' && navbarColor !== 'light' && navbarColor !== 'white' + + if (!isMounted) { + return null + } + + return ( +
    + + {!navbar && ( +
    +
      + + + + logo + +

      {themeConfig.app.appName}

      + +
      +
    +
    + )} + +
    + {navbar ? navbar : } +
    +
    + {!isHidden ? ( +
    + + {menu ? menu : } + +
    + ) : null} + + {children} + {themeConfig.layout.customizer === true ? ( + + ) : null} +
    + {footer ? footer : } +
    + + {themeConfig.layout.scrollTop === true ? ( +
    + + + +
    + ) : null} +
    + ) +} +export default HorizontalLayout diff --git a/src/@core/layouts/VerticalLayout.js b/src/@core/layouts/VerticalLayout.js new file mode 100644 index 0000000..43145f8 --- /dev/null +++ b/src/@core/layouts/VerticalLayout.js @@ -0,0 +1,224 @@ +// ** React Imports +import { useState, useEffect } from 'react' +import { useLocation } from 'react-router-dom' + +// ** Store & Actions +import { useSelector, useDispatch } from 'react-redux' +import { handleMenuCollapsed, handleContentWidth, handleMenuHidden } from '@store/actions/layout' + +// ** Third Party Components +import classnames from 'classnames' +import { ArrowUp } from 'react-feather' +import ScrollToTop from 'react-scroll-up' +import { Navbar, Button } from 'reactstrap' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +// ** Custom Components +import Customizer from '@components/customizer' +import FooterComponent from './components/footer' +import NavbarComponent from './components/navbar' +import SidebarComponent from './components/menu/vertical-menu' + +// ** Custom Hooks +import { useRTL } from '@hooks/useRTL' +import { useSkin } from '@hooks/useSkin' +import { useNavbarType } from '@hooks/useNavbarType' +import { useFooterType } from '@hooks/useFooterType' +import { useNavbarColor } from '@hooks/useNavbarColor' + +// ** Styles +import '@styles/base/core/menu/menu-types/vertical-menu.scss' +import '@styles/base/core/menu/menu-types/vertical-overlay-menu.scss' + +const VerticalLayout = props => { + // ** Props + const { children, navbar, footer, menu, routerProps, currentActiveItem } = props + + // ** Hooks + const [skin, setSkin] = useSkin() + const [isRtl, setIsRtl] = useRTL() + const [navbarType, setNavbarType] = useNavbarType() + const [footerType, setFooterType] = useFooterType() + const [navbarColor, setNavbarColor] = useNavbarColor() + + // ** States + const [isMounted, setIsMounted] = useState(false) + const [menuVisibility, setMenuVisibility] = useState(false) + const [windowWidth, setWindowWidth] = useState(window.innerWidth) + + // ** Store Vars + const dispatch = useDispatch() + const layoutStore = useSelector(state => state.layout) + + // ** Update Window Width + const handleWindowWidth = () => { + setWindowWidth(window.innerWidth) + } + + // ** Vars + const location = useLocation() + const contentWidth = layoutStore.contentWidth + const menuCollapsed = layoutStore.menuCollapsed + const isHidden = layoutStore.menuHidden + + // ** Toggles Menu Collapsed + const setMenuCollapsed = val => dispatch(handleMenuCollapsed(val)) + + // ** Handles Content Width + const setContentWidth = val => dispatch(handleContentWidth(val)) + + // ** Handles Content Width + const setIsHidden = val => dispatch(handleMenuHidden(val)) + + //** This function will detect the Route Change and will hide the menu on menu item click + useEffect(() => { + if (menuVisibility && windowWidth < 1200) { + setMenuVisibility(false) + } + }, [location]) + + //** Sets Window Size & Layout Props + useEffect(() => { + if (window !== undefined) { + window.addEventListener('resize', handleWindowWidth) + } + }, [windowWidth]) + + //** ComponentDidMount + useEffect(() => { + setIsMounted(true) + return () => setIsMounted(false) + }, []) + + // ** Vars + const footerClasses = { + static: 'footer-static', + sticky: 'footer-fixed', + hidden: 'footer-hidden' + } + + const navbarWrapperClasses = { + floating: 'navbar-floating', + sticky: 'navbar-sticky', + static: 'navbar-static', + hidden: 'navbar-hidden' + } + + const navbarClasses = { + floating: 'floating-nav', + sticky: 'fixed-top', + static: 'navbar-static-top', + hidden: 'd-none' + } + + const bgColorCondition = navbarColor !== '' && navbarColor !== 'light' && navbarColor !== 'white' + + if (!isMounted) { + return null + } + return ( +
    = 1200, + 'menu-collapsed': menuCollapsed && windowWidth >= 1200, + 'menu-expanded': !menuCollapsed && windowWidth > 1200, + + // Overlay Menu + 'vertical-overlay-menu': windowWidth < 1200, + 'menu-hide': !menuVisibility && windowWidth < 1200, + 'menu-open': menuVisibility && windowWidth < 1200 + } + )} + {...(isHidden ? { 'data-col': '1-column' } : {})} + > + {!isHidden ? ( + + ) : null} + + +
    + {navbar ? navbar : } +
    +
    + {children} + + {/* Vertical Nav Menu Overlay */} +
    setMenuVisibility(false)} + >
    + {/* Vertical Nav Menu Overlay */} + + {themeConfig.layout.customizer === true ? ( + + ) : null} +
    + {footer ? footer : } +
    + + {themeConfig.layout.scrollTop === true ? ( +
    + + + +
    + ) : null} +
    + ) +} + +export default VerticalLayout diff --git a/src/@core/layouts/components/footer/index.js b/src/@core/layouts/components/footer/index.js new file mode 100644 index 0000000..73cfecc --- /dev/null +++ b/src/@core/layouts/components/footer/index.js @@ -0,0 +1,22 @@ +// ** Icons Import +import { Heart } from 'react-feather' + +const Footer = () => { + return ( +

    + + COPYRIGHT © {new Date().getFullYear()}{' '} + + Pixinvent + + , All rights Reserved + + + Hand-crafted & Made with + + +

    + ) +} + +export default Footer diff --git a/src/@core/layouts/components/layout-wrapper/index.js b/src/@core/layouts/components/layout-wrapper/index.js new file mode 100644 index 0000000..81ad7c7 --- /dev/null +++ b/src/@core/layouts/components/layout-wrapper/index.js @@ -0,0 +1,89 @@ +// ** React Imports +import { Fragment, useEffect } from 'react' + +// ** Third Party Components +import classnames from 'classnames' + +// ** Store & Actions +import { useSelector, useDispatch } from 'react-redux' +import { handleContentWidth, handleMenuCollapsed, handleMenuHidden } from '@store/actions/layout' + +// ** Styles +import 'animate.css/animate.css' + +const LayoutWrapper = props => { + // ** Props + const { layout, children, appLayout, wrapperClass, transition, routeMeta } = props + + // ** Store Vars + const dispatch = useDispatch() + const store = useSelector(state => state) + const navbarStore = store.navbar + const contentWidth = store.layout.contentWidth + + //** Vars + const Tag = layout === 'HorizontalLayout' && !appLayout ? 'div' : Fragment + + // ** Clean Up Function + const cleanUp = () => { + if (routeMeta) { + if (routeMeta.contentWidth) { + dispatch(handleContentWidth('full')) + } + if (routeMeta.menuCollapsed) { + dispatch(handleMenuCollapsed(!routeMeta.menuCollapsed)) + } + if (routeMeta.menuHidden) { + dispatch(handleMenuHidden(!routeMeta.menuHidden)) + } + } + } + + // ** ComponentDidMount + useEffect(() => { + if (routeMeta) { + if (routeMeta.contentWidth) { + dispatch(handleContentWidth(routeMeta.contentWidth)) + } + if (routeMeta.menuCollapsed) { + dispatch(handleMenuCollapsed(routeMeta.menuCollapsed)) + } + if (routeMeta.menuHidden) { + dispatch(handleMenuHidden(routeMeta.menuHidden)) + } + } + return () => cleanUp() + }, []) + + return ( +
    +
    +
    +
    + + {children} + +
    +
    + ) +} + +export default LayoutWrapper diff --git a/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuGroup.js b/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuGroup.js new file mode 100644 index 0000000..be67120 --- /dev/null +++ b/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuGroup.js @@ -0,0 +1,117 @@ +// ** React Imports +import { Link, useLocation } from 'react-router-dom' + +// ** Third Party Components +import classnames from 'classnames' +import { Dropdown, DropdownMenu, DropdownToggle } from 'reactstrap' + +// ** Utils +import { isNavGroupActive } from '@layouts/utils' + +// ** Horizontal Menu Items Component +import HorizontalNavMenuItems from './HorizontalNavMenuItems' + +const HorizontalNavMenuGroup = props => { + // ** Props + const { + item, + submenu, + groupActive, + onMouseEnter, + onMouseLeave, + openDropdown, + setGroupActive, + activeItem, + setActiveItem, + routerProps, + setOpenDropdown, + currentActiveItem + } = props + + // ** URL Var + const currentURL = useLocation().pathname + + // ** Dropdown menu modifiers + const menuModifiers = { + setMaxHeight: { + enabled: true, + fn: data => { + const pageHeight = window.innerHeight, + ddTop = data.instance.reference.getBoundingClientRect().top, + ddHeight = data.popper.height + let maxHeight, stylesObj + + // ** Calculate and set height + if (pageHeight - ddTop - ddHeight - 28 < 1) { + maxHeight = pageHeight - ddTop - 25 + stylesObj = { + maxHeight, + overflowY: 'auto' + } + } + + const ddRef = data.instance.popper.getBoundingClientRect() + + // ** If there is not space left to open sub menu open it to the right + if (ddRef.left + ddRef.width - (window.innerWidth - 16) >= 0) { + data.instance.popper.closest('.dropdown').classList.add('openLeft') + } + + return { + ...data, + styles: { + ...stylesObj + } + } + } + } + } + return ( + onMouseEnter(item.id)} + onMouseEnter={() => onMouseEnter(item.id)} + onMouseLeave={() => onMouseLeave(item.id)} + > + e.preventDefault()} + > + {item.icon} + {item.title} + + + + + + ) +} + +export default HorizontalNavMenuGroup diff --git a/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuItems.js b/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuItems.js new file mode 100644 index 0000000..3a5b70f --- /dev/null +++ b/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuItems.js @@ -0,0 +1,23 @@ +// ** Menu Components Imports +import HorizontalNavMenuLink from './HorizontalNavMenuLink'; +import HorizontalNavMenuGroup from './HorizontalNavMenuGroup'; +import { resolveHorizontalNavMenuItemComponent as resolveNavItemComponent } from '@layouts/utils'; + +const HorizontalNavMenuItems = props => { + // ** Components Object + const Components = { + HorizontalNavMenuGroup, + HorizontalNavMenuLink + }; + + // ** Render Nav Items + const RenderNavItems = props.items.map((item, index) => { + const TagName = Components[resolveNavItemComponent(item)]; + + return ; + }); + + return RenderNavItems; +}; + +export default HorizontalNavMenuItems; diff --git a/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuLink.js b/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuLink.js new file mode 100644 index 0000000..5e2fe17 --- /dev/null +++ b/src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuLink.js @@ -0,0 +1,101 @@ +// ** React Imports +import { useEffect } from 'react'; +import { NavLink, useLocation } from 'react-router-dom'; + +// ** Horizontal menu items array +import navigation from '@src/navigation/horizontal'; + +// ** Third Party Components +import classnames from 'classnames'; + +// 추후 서버 통신을 통한 메뉴 구성 필요. +import basis from '@src/navigation/basis'; + +// ** Utils +import { isNavLinkActive, search, getAllParents } from '@layouts/utils'; + +const HorizontalNavMenuLink = ({ + item, + setOpenDropdown, + setGroupActive, + activeItem, + setActiveItem, + routerProps, + currentActiveItem, + isChild +}) => { + // ** Conditional Link Tag, if item has newTab or externalLink props use tag else use NavLink + const LinkTag = item.externalLink ? 'a' : NavLink; + + // ** URL Vars + const location = useLocation(); + const currentURL = location.pathname; + + const navLinkActive = isNavLinkActive(item.navLink, currentURL, routerProps); + + // ** Get parents of current items + const searchParents = (basis, currentURL) => { + const parents = search(basis, currentURL, routerProps); // Search for parent object + const allParents = getAllParents(parents, 'id'); // Parents Object to Parents Array + allParents.pop(); + return allParents; + }; + + // ** Remove all items from OpenDropdown array + const resetOpenDropdowns = () => setOpenDropdown([]); + + // ** On mount update active group array + useEffect(() => { + if (currentActiveItem !== null) { + setActiveItem(currentActiveItem); + const arr = searchParents(basis, currentURL); + setGroupActive([...arr]); + } + }, [location]); + + return ( +
  • + { + if (!match) { + return false; + } + + if ( + match.url && + match.url !== '' && + match.url === item.navLink + ) { + currentActiveItem = item.navLink; + } + } + })} + /*eslint-enable */ + > + {item.icon} + {item.title} + +
  • + ); +}; + +export default HorizontalNavMenuLink; diff --git a/src/@core/layouts/components/menu/horizontal-menu/index.js b/src/@core/layouts/components/menu/horizontal-menu/index.js new file mode 100644 index 0000000..7a42f04 --- /dev/null +++ b/src/@core/layouts/components/menu/horizontal-menu/index.js @@ -0,0 +1,52 @@ +// ** React Imports +import { useState } from 'react' + +// ** Horizontal Menu Array +import navigation from '@src/navigation/horizontal' + +// ** Horizontal Menu Components +import HorizontalNavMenuItems from './HorizontalNavMenuItems' + +const HorizontalMenu = ({ currentActiveItem, routerProps }) => { + // ** States + const [activeItem, setActiveItem] = useState(null) + const [groupActive, setGroupActive] = useState([]) + const [openDropdown, setOpenDropdown] = useState([]) + + // ** On mouse enter push the ID to openDropdown array + const onMouseEnter = id => { + const arr = openDropdown + arr.push(id) + setOpenDropdown([...arr]) + } + + // ** On mouse leave remove the ID to openDropdown array + const onMouseLeave = id => { + const arr = openDropdown + arr.splice(arr.indexOf(id), 1) + setOpenDropdown([...arr]) + } + + return ( +
    + +
    + ) +} + +export default HorizontalMenu diff --git a/src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js b/src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js new file mode 100644 index 0000000..747eec6 --- /dev/null +++ b/src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js @@ -0,0 +1,65 @@ +// ** React Imports +import { useEffect } from 'react' +import { NavLink } from 'react-router-dom' + +// ** Third Party Components +import { Disc, X, Circle } from 'react-feather' + +// ** Config +import themeConfig from '@configs/themeConfig' + +const VerticalMenuHeader = props => { + // ** Props + const { menuCollapsed, setMenuCollapsed, setMenuVisibility, setGroupOpen, menuHover } = props + + // ** Reset open group + useEffect(() => { + if (!menuHover && menuCollapsed) setGroupOpen([]) + }, [menuHover, menuCollapsed]) + + // ** Menu toggler component + const Toggler = () => { + if (!menuCollapsed) { + return ( + setMenuCollapsed(true)} + /> + ) + } else { + return ( + setMenuCollapsed(false)} + /> + ) + } + } + + return ( +
    +
      +
    • + + + logo + +

      {themeConfig.app.appName}

      +
      +
    • +
    • +
      + + setMenuVisibility(false)} className='toggle-icon icon-x d-block d-xl-none' size={20} /> +
      +
    • +
    +
    + ) +} + +export default VerticalMenuHeader diff --git a/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuGroup.js b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuGroup.js new file mode 100644 index 0000000..465fc9c --- /dev/null +++ b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuGroup.js @@ -0,0 +1,142 @@ +// ** React Imports +import { Link, useLocation } from 'react-router-dom' + +// ** Third Party Components +import classnames from 'classnames' +import { Collapse, Badge } from 'reactstrap' + +// ** Vertical Menu Items Component +import VerticalNavMenuItems from './VerticalNavMenuItems' + +// ** Utils +import { isNavGroupActive, getAllParents } from '@layouts/utils' + +const VerticalNavMenuGroup = ({ + item, + groupActive, + setGroupActive, + activeItem, + setActiveItem, + groupOpen, + setGroupOpen, + parentItem, + menuCollapsed, + menuHover, + routerProps, + currentActiveItem +}) => { + // ** Current Val + const currentURL = useLocation().pathname + + // ** Toggles Open Group + const toggleOpenGroup = (item, parentItem) => { + let openArr = groupOpen + let allParents + + if (parentItem) { + allParents = getAllParents(parentItem, 'id') + allParents.pop() + } + + // ** If user clicked on menu group inside already opened group i.g. when user click on blog group inside pages group + if (groupOpen && allParents && groupOpen[0] === allParents[0]) { + groupOpen.includes(item) ? openArr.splice(openArr.indexOf(item), 1) : openArr.push(item) + } else { + openArr = [] + if (!groupOpen.includes(item)) { + openArr.push(item) + } + } + + // ** Set Open Group + setGroupOpen([...openArr]) + } + + // ** Toggle Active Group + const toggleActiveGroup = (item, parentItem) => { + let activeArr = groupActive + let allParents + + if (parentItem) { + allParents = getAllParents(parentItem, 'id') + activeArr = allParents + } else { + activeArr.includes(item) ? activeArr.splice(activeArr.indexOf(item), 1) : activeArr.push(item) + } + + // ** Set open group removing any activegroup item present in opengroup state + const openArr = groupOpen.filter(val => !activeArr.includes(val)) + setGroupOpen([...openArr]) + + // ** Set Active Group + setGroupActive([...activeArr]) + } + + // ** On Group Item Click + const onCollapseClick = (e, item) => { + if ((groupActive && groupActive.includes(item.id)) || isNavGroupActive(item.children, currentURL, routerProps)) { + toggleActiveGroup(item.id) + } else { + toggleOpenGroup(item.id, parentItem) + } + + e.preventDefault() + } + + // ** Returns condition to add open class + const openClassCondition = id => { + if ((menuCollapsed && menuHover) || menuCollapsed === false) { + if (groupActive.includes(id) || groupOpen.includes(item.id)) { + return true + } + } else if (groupActive.includes(id) && menuCollapsed && menuHover === false) { + return false + } else { + return null + } + } + + return ( +
  • + onCollapseClick(e, item)}> + {item.icon} + {item.title} + + {item.badge && item.badgeText ? ( + + {item.badgeText} + + ) : null} + + + {/* Render Child Recursively Through VerticalNavMenuItems Component */} +
      + + + +
    +
  • + ) +} + +export default VerticalNavMenuGroup diff --git a/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuItems.js b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuItems.js new file mode 100644 index 0000000..9bac715 --- /dev/null +++ b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuItems.js @@ -0,0 +1,27 @@ +// ** Vertical Menu Components +import VerticalNavMenuLink from './VerticalNavMenuLink' +import VerticalNavMenuGroup from './VerticalNavMenuGroup' +import VerticalNavMenuSectionHeader from './VerticalNavMenuSectionHeader' + +// ** Utils +import { resolveVerticalNavMenuItemComponent as resolveNavItemComponent } from '@layouts/utils' + +const VerticalMenuNavItems = props => { + // ** Components Object + const Components = { + VerticalNavMenuSectionHeader, + VerticalNavMenuGroup, + VerticalNavMenuLink + } + + // ** Render Nav Menu Items + const RenderNavItems = props.items.map((item, index) => { + const TagName = Components[resolveNavItemComponent(item)] + + return + }) + + return RenderNavItems +} + +export default VerticalMenuNavItems diff --git a/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuLink.js b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuLink.js new file mode 100644 index 0000000..149c465 --- /dev/null +++ b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuLink.js @@ -0,0 +1,129 @@ +// ** React Imports +// ** Utils +import { getAllParents, search } from '@layouts/utils'; +import analysis from '@src/navigation/analysis'; +//추후 서버 통신으로 데이터 받아와야 함. +import basis from '@src/navigation/basis'; +import statics from '@src/navigation/statics'; +import system from '@src/navigation/system'; +import classnames from 'classnames'; +import { useEffect } from 'react'; +import { matchPath, NavLink, useLocation } from 'react-router-dom'; +// ** Third Party Components +import { Badge } from 'reactstrap'; + +const VerticalNavMenuLink = ({ + item, + groupActive, + setGroupActive, + activeItem, + setActiveItem, + groupOpen, + setGroupOpen, + toggleActiveGroup, + parentItem, + routerProps, + currentActiveItem +}) => { + // ** Conditional Link Tag, if item has newTab or externalLink props use
    tag else use NavLink + const LinkTag = item.externalLink ? 'a' : NavLink; + + // ** URL Vars + const location = useLocation(); + const currentURL = location.pathname; + + const naviData = [...basis, ...statics, ...system, ...analysis]; + + // console.log(naviData); + + // ** To match path + const match = matchPath(currentURL, { + path: `${item.navLink}/:param`, + exact: true, + strict: false + }); + + // ** Search for current item parents + const searchParents = (naviData, currentURL) => { + const parents = search(naviData, currentURL, routerProps); // Search for parent object + const allParents = getAllParents(parents, 'id'); // Parents Object to Parents Array + return allParents; + }; + + // ** URL Vars + const resetActiveGroup = navLink => { + const parents = search(naviData, navLink, match); + toggleActiveGroup(item.id, parents); + }; + + // ** Reset Active & Open Group Arrays + const resetActiveAndOpenGroups = () => { + setGroupActive([]); + setGroupOpen([]); + }; + + // ** Checks url & updates active item + useEffect(() => { + if (currentActiveItem !== null) { + setActiveItem(currentActiveItem); + const arr = searchParents(naviData, currentURL); + setGroupActive([...arr]); + } + }, [location]); + + return ( +
  • + { + if (!match) { + return false; + } + + if ( + match.url && + match.url !== '' && + match.url === item.navLink + ) { + currentActiveItem = item.navLink; + } + } + })} + /*eslint-enable */ + onClick={e => { + if (!item.navLink.length) { + e.preventDefault(); + } + parentItem + ? resetActiveGroup(item.navLink) + : resetActiveAndOpenGroups(); + }} + > + {item.icon} + {item.title} + + {item.badge && item.badgeText ? ( + + {item.badgeText} + + ) : null} + +
  • + ); +}; + +export default VerticalNavMenuLink; diff --git a/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuSectionHeader.js b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuSectionHeader.js new file mode 100644 index 0000000..33ad80b --- /dev/null +++ b/src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuSectionHeader.js @@ -0,0 +1,13 @@ +// ** Third Party Components +import { MoreHorizontal } from 'react-feather' + +const VerticalNavMenuSectionHeader = ({ item, index }) => { + return ( +
  • + {item.header} + +
  • + ) +} + +export default VerticalNavMenuSectionHeader diff --git a/src/@core/layouts/components/menu/vertical-menu/index.js b/src/@core/layouts/components/menu/vertical-menu/index.js new file mode 100644 index 0000000..cf25f00 --- /dev/null +++ b/src/@core/layouts/components/menu/vertical-menu/index.js @@ -0,0 +1,131 @@ +// ** React Imports +import { Fragment, useState, useRef, useEffect } from 'react'; + +// ** Vertical Menu Items Array +import navigation from '@src/navigation/vertical'; + +//추후 서버 통신으로 데이터 받아와야 함. +import basis from '@src/navigation/basis'; +import statics from '@src/navigation/statics'; +import system from '@src/navigation/system'; +import analysis from '@src/navigation/analysis'; + +// ** Third Party Components +import classnames from 'classnames'; +import PerfectScrollbar from 'react-perfect-scrollbar'; + +// ** Vertical Menu Components +import VerticalMenuHeader from './VerticalMenuHeader'; +import VerticalNavMenuItems from './VerticalNavMenuItems'; +import { useSelector } from 'react-redux'; + +const Sidebar = props => { + const { topMenuCd } = useSelector(state => state.menuState); + + useEffect(() => { + console.log('>>>>>>>>>>>>>>', topMenuCd); + navData(); + }, [topMenuCd]); + + const navData = () => { + if (topMenuCd === 'basis') { + return basis; + } else if (topMenuCd === 'system') { + return system; + } else if (topMenuCd === 'statics') { + return statics; + } else if (topMenuCd === 'analysis') { + return analysis; + } + }; + + // ** Props + const { menuCollapsed, routerProps, menu, currentActiveItem, skin } = props; + + // ** States + const [groupOpen, setGroupOpen] = useState([]); + const [groupActive, setGroupActive] = useState([]); + const [activeItem, setActiveItem] = useState(null); + + // ** Menu Hover State + const [menuHover, setMenuHover] = useState(false); + + // ** Ref + const shadowRef = useRef(null); + + // ** Function to handle Mouse Enter + const onMouseEnter = () => { + if (menuCollapsed) { + setMenuHover(true); + } + }; + + // ** Scroll Menu + const scrollMenu = container => { + if (shadowRef && container.scrollTop > 0) { + if (!shadowRef.current.classList.contains('d-block')) { + shadowRef.current.classList.add('d-block'); + } + } else { + if (shadowRef.current.classList.contains('d-block')) { + shadowRef.current.classList.remove('d-block'); + } + } + }; + + return ( + +
    setMenuHover(false)} + > + {menu ? ( + menu + ) : ( + + {/* Vertical Menu Header */} + + {/* Vertical Menu Header Shadow */} +
    + {/* Perfect Scrollbar */} + scrollMenu(container)} + > +
      + +
    +
    +
    + )} +
    +
    + ); +}; + +export default Sidebar; diff --git a/src/@core/layouts/components/navbar/NavbarUser.js b/src/@core/layouts/components/navbar/NavbarUser.js new file mode 100644 index 0000000..f667c51 --- /dev/null +++ b/src/@core/layouts/components/navbar/NavbarUser.js @@ -0,0 +1,117 @@ +// ** Dropdowns Imports +import { Fragment } from 'react'; +// ** Third Party Components +import { Menu, Moon, Sun } from 'react-feather'; +import { useDispatch, useSelector } from 'react-redux'; +import { Nav, NavItem, NavLink } from 'reactstrap'; +import * as Actions from '../../../../modules/menu/actions/menuAction'; +import UserDropdown from './UserDropdown'; + +const NavbarUser = props => { + // ** Props + const { skin, setSkin, setMenuVisibility } = props; + const dispatch = useDispatch(); + + const { topMenuCd } = useSelector(state => state.menuState); + + // ** Function to toggle Theme (Light/Dark) + const ThemeToggler = () => { + if (skin === 'dark') { + return setSkin('light')} />; + } else { + return setSkin('dark')} />; + } + }; + + const handlerTopMenu = type => { + dispatch(Actions.dispatchTopMenu(type)); + }; + + return ( + +
      + + setMenuVisibility(true)} + > + + + +
    + + {/*
    + + + + + +
    */} + {/*
    + + + + + +
    */} + +
      + +
    +
    + ); +}; +export default NavbarUser; diff --git a/src/@core/layouts/components/navbar/UserDropdown.js b/src/@core/layouts/components/navbar/UserDropdown.js new file mode 100644 index 0000000..fbad55b --- /dev/null +++ b/src/@core/layouts/components/navbar/UserDropdown.js @@ -0,0 +1,103 @@ +// ** React Imports +// ** Custom Components +import Avatar from '@components/avatar'; +// ** Default Avatar Image +import defaultAvatar from '@src/assets/images/portrait/small/avatar-s-11.jpg'; +// ** Utils +import { isUserLoggedIn } from '@utils'; +import { useEffect, useState } from 'react'; +import { Power, User } from 'react-feather'; +// ** Store & Actions +import { useDispatch, useSelector } from 'react-redux'; +import { Link, useHistory } from 'react-router-dom'; +// import { handleLogout } from '@store/actions/auth'; +// ** Third Party Components +import { + DropdownItem, + DropdownMenu, + DropdownToggle, + UncontrolledDropdown +} from 'reactstrap'; +import * as Actions from '../../../../modules/account/login/actions/authAction'; + +const UserDropdown = () => { + // ** Store Vars + const dispatch = useDispatch(); + const history = useHistory(); + const { isLogin, user } = useSelector(state => state.authState); + + const handelrLogout = async () => { + dispatch(Actions.logout.request()); + }; + + // useEffect(() => { + // console.log('[ISLOGIN :::::: ] ', isLogin); + // if (isLogin === undefined) { + // return; + // } + + // if (!isLogin) { + // history.push('/account/login'); + // // window.location.href = '/'; + // } + // }, [isLogin]); + + // ** State + const [userData, setUserData] = useState(null); + + //** ComponentDidMount + useEffect(() => { + if (isUserLoggedIn() !== null) { + setUserData(JSON.parse(localStorage.getItem('userData'))); + } + }, []); + + //** Vars + const userAvatar = (userData && userData.avatar) || defaultAvatar; + + return ( + + e.preventDefault()} + > +
    + {user?.memberName} + {user?.authId} +
    + +
    + + e.preventDefault()}> + + Profile + + {/* e.preventDefault()}> + + Inbox + + e.preventDefault()}> + + Tasks + + e.preventDefault()}> + + Chats + */} + + + Logout + + +
    + ); +}; + +export default UserDropdown; diff --git a/src/@core/layouts/components/navbar/index.js b/src/@core/layouts/components/navbar/index.js new file mode 100644 index 0000000..7105db2 --- /dev/null +++ b/src/@core/layouts/components/navbar/index.js @@ -0,0 +1,18 @@ +// ** React Imports +import { Fragment } from 'react' + +// ** Custom Components +import NavbarUser from './NavbarUser' + +const ThemeNavbar = props => { + // ** Props + const { skin, setSkin, setMenuVisibility } = props + + return ( + + + + ) +} + +export default ThemeNavbar diff --git a/src/@core/layouts/utils.js b/src/@core/layouts/utils.js new file mode 100644 index 0000000..83edf98 --- /dev/null +++ b/src/@core/layouts/utils.js @@ -0,0 +1,159 @@ +// ** React Imports +import { useContext } from 'react' +import { AbilityContext } from '@src/utility/context/Can' + +/** + * Return which component to render based on it's data/context + * @param {Object} item nav menu item + */ +export const resolveVerticalNavMenuItemComponent = item => { + if (item.header) return 'VerticalNavMenuSectionHeader' + if (item.children) return 'VerticalNavMenuGroup' + return 'VerticalNavMenuLink' +} + +/** + * Return which component to render based on it's data/context + * @param {Object} item nav menu item + */ +export const resolveHorizontalNavMenuItemComponent = item => { + if (item.children) return 'HorizontalNavMenuGroup' + return 'HorizontalNavMenuLink' +} + +/** + * Check if nav-link is active + * @param {Object} link nav-link object + */ +// export const isNavLinkActive = (link, currentURL, match) => { +// // return currentURL === link || (URLParams && Object.keys(URLParams).length && currentURLFilter === item.navLink) +// const getFirstObjProp = obj => obj[Object.keys(obj)[0]] +// return ( +// currentURL === link || +// (match !== null && match !== undefined && match.url === `${link}/${getFirstObjProp(match.params)}`) +// ) +// } + +export const isNavLinkActive = (link, currentURL, routerProps) => { + return ( + currentURL === link || + (routerProps && routerProps.meta && routerProps.meta.navLink && routerProps.meta.navLink === link) + ) + // return currentURL === link +} + +/** + * Check if nav group is + * @param {Array} children Group children + */ +// export const isNavGroupActive = (children, currentURL, match) => { +// return children.some(child => { +// // If child have children => It's group => Go deeper(recursive) +// if (child.children) { +// return isNavGroupActive(child.children, currentURL, match) +// } +// // else it's link => Check for matched Route +// return isNavLinkActive(child.navLink, currentURL, match) +// }) +// } +export const isNavGroupActive = (children, currentURL, routerProps) => { + return children.some(child => { + // If child have children => It's group => Go deeper(recursive) + if (child.children) { + return isNavGroupActive(child.children, currentURL, routerProps) + } + // else it's link => Check for matched Route + return isNavLinkActive(child.navLink, currentURL, routerProps) + }) +} + +/** + * Search for parent object + * @param {Array} navigation Group children + * @param {string} currentURL current URL + */ +// export const search = (navigation, currentURL, match) => { +// let result +// navigation.some(child => { +// let children +// // If child have children => It's group => Go deeper(recursive) +// if (child.children && (children = search(child.children, currentURL, match))) { +// return (result = { +// id: child.id, +// children +// }) +// } + +// // else it's link => Check for matched Route +// if (isNavLinkActive(child.navLink, currentURL, match)) { +// return (result = { +// id: child.id +// }) +// } +// }) +// return result +// } + +export const search = (navigation, currentURL, routerProps) => { + let result + navigation.some(child => { + let children + // If child have children => It's group => Go deeper(recursive) + if (child.children && (children = search(child.children, currentURL, routerProps))) { + return (result = { + id: child.id, + children + }) + } + + // else it's link => Check for matched Route + if (isNavLinkActive(child.navLink, currentURL, routerProps)) { + return (result = { + id: child.id + }) + } + }) + return result +} + +/** + * Loop through nested object + * @param {object} obj nested object + */ +export const getAllParents = (obj, match) => { + const res = [] + const recurse = (obj, current) => { + for (const key in obj) { + const value = obj[key] + if (value !== undefined) { + if (value && typeof value === 'object') { + recurse(value, key) + } else { + if (key === match) { + res.push(value) + } + } + } + } + } + recurse(obj) + return res +} + +export const canViewMenuGroup = item => { + const ability = useContext(AbilityContext) + // ! This same logic is used in canViewHorizontalNavMenuGroup and canViewHorizontalNavMenuHeaderGroup. So make sure to update logic in them as well + const hasAnyVisibleChild = item.children && item.children.some(i => ability.can(i.action, i.resource)) + + // ** If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible) + // ** Else check for ability using provided resource and action along with checking if has any visible child + if (!(item.action && item.resource)) { + return hasAnyVisibleChild + } + return ability.can(item.action, item.resource) && hasAnyVisibleChild +} + +export const canViewMenuItem = item => { + const ability = useContext(AbilityContext) + return ability.can(item.action, item.resource) +} diff --git a/src/@core/scss/base/bootstrap-extended.scss b/src/@core/scss/base/bootstrap-extended.scss new file mode 100644 index 0000000..89c5f99 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended.scss @@ -0,0 +1,47 @@ +// ================================================================================================ +// File Name: bootstrap-extended.scss +// Description: List of modified Bootstrap files. This is an actual copy of bootstrap.scss +// excluding files that have not been modified. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import 'bootstrap-extended/include'; // Bootstrap includes +@import 'components/include'; // Components includes + +// Custom template mixins +@import 'core/mixins/alert'; // Template custom mixins + +// Core 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'; + +// Components +@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'; + +// Components w/ JavaScript +@import 'bootstrap-extended/modal'; +@import 'bootstrap-extended/popover'; + +// Utility classes +@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..f24e998 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_alert.scss @@ -0,0 +1,56 @@ +// Alerts + +.alert { + font-weight: 500; + border: none; + padding: 0; + // close + &.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; + } + + // For Alert Content + p { + font-weight: 500; + padding: 2px 0; + margin-bottom: 0; + vertical-align: middle; + } + + // For alert heading + .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..636da58 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_badge.scss @@ -0,0 +1,90 @@ +// Badge + +.badge { + color: $white; + &[class*='badge-'] { + [class*='icon-'] { + line-height: 1; + } + + a { + color: $white; + } + + // badge dropdown alignment + .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 + // to align badge over any element + &.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; + } + } +} + +// For fullscreen search +.badge-icon { + i, + svg { + font-size: 100%; + margin-right: 5px; + } +} + +// badge dropup pointer +.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..e44405f --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_breadcrumb.scss @@ -0,0 +1,76 @@ +.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; + } + } +} + +/* Component Specific */ +.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..21bb5df --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_button-group.scss @@ -0,0 +1,59 @@ +// +// Split button dropdowns +// + +.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; +} + +// button group border +.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; + } +} + +// remove first btn group border left +.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; +} + +// remove last btn group border right +.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; +} + +// toggle button +.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..260370c --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_buttons.scss @@ -0,0 +1,67 @@ +// var for box shadow of gradient buttons +// Buttons +.btn { + box-shadow: none; + font-weight: 500; + + // gradient button on hover transition + &[class*='bg-gradient-'] { + transition: all 0.2s ease; + &:hover { + transform: translateY(-2px); + } + } + + // Icon button padding + &.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 icons inside btn + .feather { + vertical-align: bottom; + } +} + +// For Waves Input Padding +.btn.waves-input-wrapper { + padding: 0; +} + +@include media-breakpoint-down(sm) { + .btn-sm-block { + display: block; + width: 100%; + } +} + +// Remove cursor-pointer from button if button is disabled +// * setting it to inherit will auto adept cursor +.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..d879311 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_card.scss @@ -0,0 +1,514 @@ +.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; // Considering sub-title minus margin + } + .card-bordered { + border: $card-border-width solid $card-border-color; + } + .card-img { + object-fit: cover; + } + .card-img-overlay { + border-radius: $card-border-radius; + } + + //fullscreen card + &.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 Column +.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 +.overlay-img-card { + .card-img-overlay, + img { + max-height: 34.64rem; + } +} + +// IE Specific CSS +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + // img-fluid class + .card-body, + .card-content { + min-height: 1px; + } +} + +//--------------- Advance Cards --------------- +//--------------------------------------------- + +// Congratulations Card +.card-congratulations { + background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7)); + color: $white; + + // image on left + .congratulations-img-left { + width: 200px; + position: absolute; + top: 0; + left: 0; + + @include media-breakpoint-down(xs) { + width: 140px; + } + } + // image on right + .congratulations-img-right { + width: 175px; + position: absolute; + top: 0; + right: 0; + + @include media-breakpoint-down(xs) { + width: 140px; + } + } + + .avatar { + margin-bottom: 2rem; + } +} +// congratulation medal card +.congratulation-medal { + position: absolute; + top: 0; + right: 37px; +} + +// Deposits Card +.card-deposits { + .deposits-divider { + margin-top: 1.8rem; + margin-bottom: 1.4rem; + } +} + +// Employee Task Card +.card-employee-task { + .employee-task { + &:not(:last-child) { + margin-bottom: 1.5rem; + } + } +} + +// Developer Meetup Card +.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; + } +} + +// Profile Card +.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; + } + } +} + +// Apply Job Card +.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; + } + } +} + +// Transaction Card +.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; + } + } +} + +// User Timeline Card +.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-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; + } + } + } +} + +// States Card +.card-browser-states { + .browser-states { + margin-top: 2.14rem; + display: flex; + justify-content: space-between; + align-items: center; + } +} + +// App Design Card +.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; + } + } + } +} + +//--------------- Statistics Card --------------- +//------------------------------------------------ + +.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; + } + } + } +} + +//--------------- Analytics Card --------------- +//---------------------------------------------- + +// Chart-dropdown Button +.chart-dropdown { + .btn { + font-size: 1rem; + font-weight: $font-weight-normal; + &:after { + display: none; + } + } +} + +// Revenue Report & Budget Card +.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='Earning'] { + transform: scaleY(0.965); + } + &[seriesName='Expense'] { + 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 +.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 Specific CSS +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + // make icon center in avatar-content + #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..09a369f --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_code.scss @@ -0,0 +1,14 @@ +// Inline 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..6bbf6b3 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_collapse.scss @@ -0,0 +1,140 @@ +// For Collapse And Accordion + +// For collapse-title +[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; + } + } +} + +// For collapse title +.collapse-title { + color: inherit; + &:hover { + color: inherit; + } +} + +// To add a border below collapse/accordion heading +.collapse-default { + .card:first-child { + border-top: 0; + } + .card:last-child { + border-bottom: 0; + } + .card { + border-radius: 0; + } +} + +// For Collapse with border + +.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; + } + } +} + +// For Collapse with shadow +.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; + } +} + +// For Collapse with margin +.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 & Animation +.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..4fa6004 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_dropdown.scss @@ -0,0 +1,255 @@ +// The dropdown menu +.dropdown { + [class*='btn-outline-'].dropdown-toggle.dropdown-toggle-split { + border-left: 0 !important; + } + + // If don't won't dropdown/up arrow + &.no-arrow { + .dropdown-toggle { + &:after { + display: none; + } + i, + svg { + margin-right: 0; + } + } + } +} + +// dropdown menu +.dropdown-menu { + // border: 1px solid rgba($black, 0.05); // border opacity has been reduced to make it look same as vue's dropdown border [component page, list view page] + border-radius: $dropdown-border-radius; + transform: scale(1, 0); + box-shadow: $dropdown-box-shadow; // this according to vue version + + .dropdown-item { + width: auto; + cursor: pointer; + } + + // Dropdown Header + .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; + } + } + + // For DD box shadow on show + .btn { + &.dropdown-toggle { + &:focus { + box-shadow: none; + } + } + } +} + +.dropdown-toggle { + // changed icon caret + + &::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; + top: 1px; + right: 0px; + left: 0.714rem; + padding: 0; + margin: 0; + vertical-align: 0; + } + // arrow size according to toggle sizes + &.btn-lg { + &::after { + background-size: 18px; + } + } + + &.btn-sm { + &::after { + background-size: 14px; + } + } + + &.dropdown-toggle-split { + &:after { + left: 0; + } + } + + // hide default arrow to show custom icon DD + &.nav-hide-arrow { + &::after { + display: none; + } + } + + // Prevent the focus on the dropdown toggle when closing dropdowns + &:focus { + outline: 0; + } +} + +// DropUp +.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 +.dropright { + .dropdown-toggle { + // changed icon dropup caret + &::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 ::before position +.dropdown-menu { + // Dropdown margin according to dropdown position + + &[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 icon +.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; + } + } + } + } +} + +// Dropdown menu animation for Horizontal menu +.horizontal-menu-wrapper .dropdown-menu, +.header-navbar .dropdown-menu { + animation-duration: 0.3s; + animation-fill-mode: both; + animation-name: slideIn; +} + +// Hidden dropdown toggle arrow +.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..5a53512 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_forms.scss @@ -0,0 +1,570 @@ +// +// Labels +// +label { + color: $headings-color; + font-size: $small-font-size; +} + +// placeholder specific scss +.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.56rem; + line-height: 1.75; + } +} + +.valid-tooltip, +.invalid-tooltip { + top: 102%; + left: 5px; +} + +/*************** +* Form Group +***************/ + +// input group !important for overriding the dark style +.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 +.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; + } + } + } +} + +// Text area line height +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; + } +} + +// Used for Card - Check it and remove if not used +.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 layout +.form-horizontal { + .form-group { + @include media-breakpoint-up(sm) { + .label-control { + text-align: right; + } + } + } +} + +// Select Inputs Specific SCSS +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; + } +} + +// For customs-select remove double arrow +.custom-select { + -moz-appearance: none; // For firefox + -webkit-appearance: none; // for chrome +} + +// Custom Checkbox +.custom-checkbox { + .custom-control-label::before, + .custom-control-label::after { + top: 0.07rem; + } + + .custom-control-label::after { + background-size: 57%; + } +} + +// Custom Radio +.custom-radio { + .custom-control-label::before { + top: 0.1rem; + } +} + +// Custom checkbox and radio in common +.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-checkbox when not disabled and active +.custom-control-input:not(:disabled) { + &:active ~ .custom-control-label { + &::before { + background-color: $primary; + border-color: $primary; + } + } +} + +/* Floating label Group */ +.form-label-group { + position: relative; + margin-bottom: $form-group-margin-bottom; + + // Form-Control-Large in Floating Label Group + .form-control-lg { + ~ label { + font-size: $input-font-size; + padding: 1rem; + } + } + + // Form-label + > 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; + } + // form-input + > input, + textarea { + // from-input on focus change label color + &: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; + } + } + // form-label after entering text in input box + &: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; + } + } +} + +/* Switches */ + +.custom-switch { + padding-left: 0; + line-height: 1.7rem; + + .custom-control-label { + padding-left: 3.5rem; + line-height: 1.7rem; + + /* For bg color of switch*/ + &::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; + } + /*For Switch handle*/ + &: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; + } + + /*For Switch text*/ + .switch-text-left, + .switch-text-right, + .switch-icon-left, + .switch-icon-right { + position: absolute; + cursor: pointer; + user-select: none; + line-height: 1.8; + i, + svg { + height: 13px; + width: 13px; + font-size: 13px; + } + } + .switch-text-left, + .switch-icon-left { + left: 6px; + color: $white; + opacity: 0; + transform: translateX(8px); + transition: opacity 0.1s ease, transform 0.15s ease; + } + .switch-text-right, + .switch-icon-right { + right: 13px; + opacity: 1; + transform: translateX(0px); + transition: opacity 0.08s ease, transform 0.15s ease; + } + &:focus { + outline: 0; + } + } + + /*For Switch label*/ + + .switch-label { + padding-left: 1rem; + } + + // after its checked + + .custom-control-input:checked ~ .custom-control-label::before { + box-shadow: none; + } + + /*For Switch Handle Animation*/ + .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 with Counter */ +.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; +} + +/* Number Type Input Box Scss for - Remove arrow on hover */ +input[type='number']::-webkit-inner-spin-button, +input[type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; +} + +// IE Specific CSS +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + // floating Label Group + .form-label-group { + label { + display: none; + } + } + + // Bootstrap Select + select.form-control { + &:not([multiple='multiple']) { + background: none; + } + } +} + +// Date & Time Picker - Form Control Bg color +.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..57a6eab --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_functions.scss @@ -0,0 +1,10 @@ +@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..759af3d --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_helper.scss @@ -0,0 +1,106 @@ +// ================================================================================================ +// File Name: helper.scss +// Description: Helper classes provides template related customization. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Content helpers +// ------------------------- + +// typography page icon with list +.list-style-icons { + padding-left: 10px; + margin-left: 0; + list-style: none; + > li svg, + > li i { + margin-right: 6px; + } +} + +//Pull the element +.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 classes +.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); + } +} + +// Bullets used in application pages +.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 - used in pages and apps +.section-label { + font-size: 0.85rem; + color: $text-muted; + text-transform: uppercase; + letter-spacing: 0.6px; +} + +// Used for table cell fit +.cell-fit { + width: 0.1%; + white-space: nowrap; +} + +// Card match height +.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..ea9344d --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_include.scss @@ -0,0 +1,24 @@ +// ================================================================================================ +// File Name: include.scss +// Description: Common components file to include all theme specific custom components. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Variables +// ------------------------------ + +// Functions +@import 'bootstrap/scss/functions'; // Bootstrap core function +@import 'functions'; // Bootstrap extended function + +// Variables +@import 'scss/variables/variables'; // Bootstrap custom variable override (for user purpose) +@import 'variables'; // Bootstrap extended variable override +@import 'bootstrap/scss/variables'; // Bootstrap core variable + +// Mixins +@import 'bootstrap/scss/mixins'; // Bootstrap core mixins +@import 'mixins'; // Bootstrap extended mixins 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..eec9f40 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_list-group.scss @@ -0,0 +1,101 @@ +/* =============================================================================================== + File Name: list-group.scss + Description: Contain list item, list group related extended SCSS. + ---------------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +================================================================================================*/ + +// Inline list style with pipeline separator + +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 { + .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 with circle for pages like knowledge base + &.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; + } + } + } +} + +// for drag and drop border radius on selected +.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..a03bf49 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_media.scss @@ -0,0 +1,22 @@ +.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..46f5b18 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_mixins.scss @@ -0,0 +1,13 @@ +// =============================================================================================== +// File Name: mixins.scss +// Description: Extended mixins file with new mixins features. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import 'mixins/_type'; //(NEW) + +// Components +@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..0c5a3fb --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_modal.scss @@ -0,0 +1,175 @@ +// Modals + +.modal { + // Modal Header + + .modal-header { + background-color: $body-bg; + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + // close button + + .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); + + // For hover effect of close btn + &:hover, + &:focus, + &:active { + opacity: 1; + outline: none; + transform: translate(5px, 3px); + box-shadow: none; + } + } + } + // Modal Content + .modal-content { + border: none; + // overflow: unset; updated to "visible" as close icon is not visible in IE + overflow: visible; + box-shadow: 0 5px 20px 0 rgba($black, 0.1); + } + + .modal-footer { + padding: $modal-inner-padding; + } + + // modal sticky for apps + &.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 +.modal-xs { + max-width: 300px; +} + +// Modal XL +@media (min-width: 1200px) { + .modal-xl { + margin-left: 3%; + margin-right: 3%; + } +} + +// Slide In Modal // +.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%); + } +} + +// Slide from Right +.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; +} + +// To remove Max-width of XS Modal in Small Screen + +@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..7130cf9 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_nav.scss @@ -0,0 +1,272 @@ +// Component nav and nav/pill tabs + +.nav { + border-radius: 0.25rem; + // for component navs + // to wrap border around nav component + &.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 + &.square-border { + border-radius: 0; + .nav-item { + .nav-link.active { + border-radius: 0; + } + } + } + + // for main menu toggle lock + .modern-nav-toggle { + padding: 0; + margin: 1.571rem 0; + } + + // Dropdown without background need arrow color changes + .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 { + // if icon added inside nav-link + .nav-link { + display: flex; + align-items: center; + justify-content: center; + i, + svg { + margin-right: 0.5rem; + } + } +} +// nav pills +.nav-pills { + margin-bottom: 1rem; + // nav item of nav pill + .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 { + top: 1px; + left: 1px; + } + } + + &.dropdown { + &.show { + .nav-link { + color: $white; + } + .dropdown-item { + &.active { + &:hover { + color: $primary; + } + } + } + } + } + + // Justified Pills + &.nav-justified { + @include nav-justified; + @include nav-tabs-justified; + .nav-link { + display: block; + + &.active { + border: none; + + &:hover, + &:focus { + border: none; + } + } + } + } +} + +// Basic Nav Tabs +.nav-tabs { + margin-bottom: 1rem; + position: relative; + // Basic nav item + .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 { + top: 1px; + left: 1px; + } + } + } + // Justified Tabs + &.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 Tabs Vertical +.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; + } + } + } + } + + // vertical nav left tabs + &.nav-left { + float: left; + display: table; + margin-right: 1rem; + + ~ .tab-content { + .tab-pane { + display: none; + overflow-y: auto; + padding-left: 1rem; + &.active { + display: block; + } + } + } + } + + // vertical right nav tabs + &.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..2201eca --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_navbar.scss @@ -0,0 +1,682 @@ +/* =============================================================================================== + File Name: navbar.scss + Description: Contain header navigation bar, vertical main navigation bar and + horiznotal main navigation bar related SCSS. + ---------------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +================================================================================================*/ + +@function set-navbar-text-color($color) { + @if (lightness($color) > 50) { + @return $white; // Lighter backgorund, return dark color + } @else { + @return $black; // Darker background, return light color + } +} + +.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; + } + + // Apply navbar color as per background + &[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; + } + } + } + } + + //* Navbar modifiers + //*------------------------ + + // floating nav + &.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; + } + + &.floating-nav2 { + position: fixed; + right: 0; + margin: #{$floating-nav-margin} #{$content-padding} 0; + width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2)); + border-radius: $card-border-radius; + z-index: 12; + } + + // static nav + &.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 + } + + // add border to navbar + &.navbar-border { + border-bottom: 1px solid $border-color; + } + + // add shadow to navbar + &.navbar-shadow { + box-shadow: $box-shadow; + } + + &.navbar-dark.navbar-border { + border-bottom: 1px solid $theme-dark-border-color; + } + + // Hide navbar dropdown arrow + &:not(.navbar-horizontal) { + .nav-link { + &.dropdown-toggle::after { + display: none; + } + } + } + + //* Navbar modifiers + //*------------------------ + + .navbar-container { + padding: 0.8rem 1rem; + // Added more horizontal padding above small screen + @include media-breakpoint-up(sm) { + padding: 0.8rem 1.4rem; + } + flex-basis: 100%; + transition: 300ms ease all; + margin-left: 0; + + // Navbar bookmark primary color on hover + .bookmark-wrapper { + // for bookmark z-index + .bookmark-input { + z-index: 1; + } + } + + // Language dd style + .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; // Apply navbar dd position on vertical layouts only (Not for horizontal layout due to hover out issue) + } + } + } + + &.dropdown-language { + .dropdown-menu.dropdown-menu-right { + right: -2px; + } + } + + // Cart & Notification badge + &.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; + } + } + } + + // Cart dropdown + &.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; // Set due to custom 2 line component in navbar + .dropdown-menu { + width: 12rem; + margin-top: 10px; + i, + svg { + height: 16px; + width: 16px; + font-size: 16px; + vertical-align: top; + } + } + } + + // Logged in user dropdown styles + 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); + } + } + + // navbar toggle menu size (display below 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; + } + } + } + + //Navbar notification css + .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; + } + } + } +} + +// Navbar shadow on scroll +.header-navbar-shadow { + display: none; +} + +// Floating Navbar +.navbar-floating { + // Floating nav should have same padding across all screen + .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 colors +.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; + } + } + } +} + +// Media queries for device support +// ========================================= +@include media-breakpoint-down(sm) { + .header-navbar { + // generic navbar dropdown specific + .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; + } + } + } + } + } + + // dark navbar + .navbar-dark { + .navbar-header { + .navbar-nav { + .nav-link { + color: $white; + } + } + } + + .navbar-container { + .navbar-nav { + .nav-link { + color: $gray-600; + } + } + } + } + + // light navbar + .navbar-light { + .navbar-header { + .navbar-nav { + .nav-link { + color: $gray-600; + } + } + } + + .navbar-container { + .navbar-nav { + .nav-link { + color: $gray-600; + } + } + } + } +} + +// For Medium and down: iPad support for navbr + +// navbar static top +@include media-breakpoint-down(lg) { + .header-navbar { + // floating nav width + &.floating-nav { + width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2)); + } + &.navbar-static-top { + left: 0; + width: 100%; + } + } +} + +//For responsive sub nav +@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 screen calc as per updated spacings + margin-left: 1rem; + margin-right: 1.2rem; + } + + .navbar-container ul.navbar-nav li .selected-language { + display: none; + } + } +} + +/* ----------- iPhone 5, 5S iPhone 6----------- */ + +// Set dropdown height as per the screen size +@mixin extend_mobile_specific($menu_height) { + .header-navbar { + .navbar-container { + .show { + .dropdown-menu { + max-height: $menu_height; + } + } + } + } +} + +/* Landscape */ + +@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+ ----------- */ + +/* Landscape */ + +@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); +} + +// for width of navbar in fixed-top +@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..d391d29 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_pagination.scss @@ -0,0 +1,307 @@ +// Pagination + +// default look for page item, first and last item + +.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 and next item separated styles + &.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 and next style + &.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 customization + + .page-link { + border: none; + margin: 0; + margin-left: 0; + font-size: 1rem; + min-width: 2.286rem; + &:focus { + box-shadow: none; + } + + &:hover { + color: $primary; + } + } + + // for active page item + &.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; + } + } + + // if you don't want separated look + + &: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; + } + } +} + +// For Pagination Font sizes +.pagination { + // For Pagination lg + &.pagination-lg { + .page-item { + .page-link { + font-size: $pagination-font-size-lg; + min-width: 2.6rem; + } + } + } + // For Pagination sm + &.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..4463541 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_popover.scss @@ -0,0 +1,45 @@ +// Popovers + +.popover { + box-shadow: $popover-box-shadow; + // popover header style + .popover-header { + @include font-size(1.07rem); + border: 1px solid $popover-header-bg; + } + // popover body style + .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; + } + // popover bottom arrow color like header + &.bs-popover-bottom { + .arrow:after { + border-bottom-color: $popover-header-bg; + } + } +} +// To set arrow border as we have added border to popover-body and popover-header +.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..c8268bd --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_progress.scss @@ -0,0 +1,20 @@ +/*========================================================================================= + File Name: progress.scss + Description: Extended bootstrap progress bar scss. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent + ---------------------------------------------------------------------------------------- +==========================================================================================*/ + +.progress { + // border radius to set for stacked bars + .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..02cbfea --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_reboot.scss @@ -0,0 +1,15 @@ +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..a490309 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_tables.scss @@ -0,0 +1,122 @@ +// ================================================================================================ +// File Name: tables.scss +// Description: Tables pages custom scss +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// table-white-space +.table-white-space { + th, + td { + white-space: nowrap; + } +} + +// table th, td padding +.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; + } + } + } +} +// if we are not using table-light class then also header color should apply +.table:not(.table-dark):not(.table-light) { + thead:not(.thead-dark) th, + tfoot:not(.thead-dark) th { + background-color: $table-head-bg; + } +} +// table inside card, don't need margin bottom +.table-hover { + tbody { + tr { + cursor: pointer; + } + } +} +// Table - hover animation +.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); + } + } + } +} + +// table border radius +.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; + } + } + } +} + +// Contexual table inside card 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 Specific CSS +@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..7990e30 --- /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..5558a4c --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_type.scss @@ -0,0 +1,22 @@ +// ================================================================================================ +// File Name: type.scss +// Description: Type pages custom scss +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// text heading color +.text-body-heading { + color: $headings-color; + &:hover { + color: inherit !important; + } +} +// text body hover color if have link +.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..59e62a5 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_utilities.scss @@ -0,0 +1,465 @@ +// ================================================================================================ +// File Name: utilities.scss +// Description: Utility classes provides color, width, position & background etc.. +// related customization. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Sizes Variable for height and width mixins +$sizes-px: ( + // in 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: ( + // in % + 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; + +//--------------- Text --------------- +//------------------------------------ + +// Font Size +//---------- +//small +.font-small-1 { + font-size: 0.7rem !important; + + // for Feather SVG icons as we are using base size as 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; + } +} +//medium +.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; + } +} +//large +.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 +//---------- +.line-height-1 { + line-height: 1 !important; +} +.line-height-condensed { + line-height: 1.5 !important; +} +.line-height-inherit { + line-height: inherit !important; +} + +// Transform +//---------- +.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); +} + +//-------------- Borders -------------- +//------------------------------------- + +// Border width - 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; +} + +// Border width - 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; +} + +// Shapes radius : Round / Square +.round { + @include border-radius(1.5rem); +} +.square { + @include border-radius(0); +} + +//-------------- Sizing -------------- +//------------------------------------ + +// Width && Height +.fit { + max-width: 100% !important; +} +.half-width { + width: 50% !important; +} +.full-width { + width: 100% !important; +} +.full-height { + height: 100% !important; +} + +// height & width in PX +@each $name, $size in $sizes-px { + .height-#{$name} { + height: $size !important; + } + + .width-#{$name} { + width: $size !important; + } +} + +// height & width in % +@each $name, $size in $sizes-per { + .height-#{$name}-per { + height: $size !important; + } + + .width-#{$name}-per { + width: $size !important; + } +} + +//------------- Position ------------- +//------------------------------------ +.position-top-0 { + top: 0; +} +.position-right-0 { + right: 0; +} +.position-bottom-0 { + bottom: 0; +} +.position-left-0 { + left: 0; +} + +//------------- Overflow ------------- +//------------------------------------ +.overflow-visible { + overflow: visible; +} +.overflow-scroll { + overflow: scroll; +} +.overflow-x-scroll { + overflow: scroll; +} +.overflow-y-scroll { + overflow: scroll; +} + +//-------------- Cursor -------------- +//------------------------------------ +.cursor-pointer { + cursor: pointer; +} +.cursor-move { + cursor: move; +} +.cursor-default { + cursor: default; +} +.cursor-progress { + cursor: progress; +} +.cursor-not-allowed { + cursor: not-allowed; +} + +//-------------- Z-index -------------- +//------------------------------------- +.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 ------------ +//------------------------------------ +.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 -------------- +//------------------------------------- +.outline-none { + outline: none !important; +} + +//-------------- Lists -------------- +//----------------------------------- +.list-style-inside { + list-style: inside; +} +.list-style-circle { + list-style: circle; +} +.list-style-square { + list-style: square; +} + +//--------- Background Image --------- +//------------------------------------ +.bg-cover { + background-size: cover !important; +} +.background-repeat { + background-repeat: repeat !important; +} +.background-no-repeat { + background-repeat: no-repeat !important; +} + +//-------------- Icons -------------- +//----------------------------------- +.icon-bg-circle { + color: $white; + padding: 0.5rem; + border-radius: 50%; +} +.icon-left { + margin-right: 0.5rem; +} +.icon-right { + margin-right: 0.5rem; +} + +// Used for blockUI +.blockOverlay { + z-index: 1050 !important; +} +.blockElement, +.blockPage { + z-index: 1051 !important; +} + +.hidden { + display: none; + visibility: hidden; +} + +a { + &:hover { + cursor: pointer; + } +} + +//Tables +//-------------------------- +.table-middle { + td { + vertical-align: middle; + } +} + +//SVG +//-------------------------- +.fill-current { + fill: currentColor; +} + +//Cursor +//-------------------------- +.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..e8dc986 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/_variables.scss @@ -0,0 +1,499 @@ +// ================================================================================================ +// File Name: variables.scss +// Description: Custom overrides of Bootstrap variables +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Color system + +$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 + +$purple: #7367f0 !default; //$primary +$green: #28c76f !default; //$success +$blue: #00cfe8 !default; //$info +$orange: #ff9f43 !default; //$warning +$red: #ea5455 !default; //$danger + +$primary: $purple !default; +$secondary: #82868b !default; +$info: $blue !default; +$warning: $orange !default; +$light: $gray-50 !default; +$dark: #4b4b4b !default; + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, + xxl: 1440px // Custom xxl size +) !default; +// scss-docs-end container-max-widths + +// 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 +// +// Settings for the `` element. +$body-bg: #f8f8f8 !default; +$body-color: #6e6b7b !default; + +// Links +// +// Style anchor elements. + +$link-color: $primary !default; +$link-hover-color: darken($link-color, 5%) !default; +$link-hover-decoration: none !default; + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-gutter-width: 2rem !default; + +// Components +// +// Define common padding and border radius sizes and more. + +$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; + +// shadow +$box-shadow: 0 4px 24px 0 rgba($black, 0.1) !default; +// Typography + +// +// Font, line-height, and color for body text, headings, and more. + +// stylelint-disable value-keyword-case +$font-family-sans-serif: 'Montserrat', Helvetica, Arial, serif !default; +$font-family-monospace: 'Montserrat', Helvetica, Arial, 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; + +// Tables + +$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: #f3f2f7 !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; // custom + +// Buttons + Forms +$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; + +// Forms +$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; // Extra padding to account for the presence of the background-image based indicator +$custom-select-disabled-bg: $input-disabled-bg !default; +$custom-select-bg-size: 10px 10px !default; // In pixels because image dimensions +$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; + +// Dropdowns +// +// Dropdown menu container and contents. + +$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; // custom + +// Pagination + +$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: #f3f2f7 !default; + +$pagination-hover-color: $primary !default; +$pagination-hover-bg: #f3f2f7 !default; + +$pagination-active-color: $primary !default; + +$pagination-disabled-color: $text-muted !default; +$pagination-disabled-bg: #f3f2f7 !default; + +$pagination-font-size-lg: 1.14rem !default; // custom +$pagination-font-size-sm: 0.857rem !default; // custom + +// Cards +$card-spacer-y: 1.5rem !default; +$card-spacer-x: 1.5rem !default; +$card-border-radius: 0.428rem !default; + +//Alerts + +$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 + +$list-group-border-radius: 0.358rem !default; +$list-group-disabled-color: $text-muted !default; + +// Nav tabs + +$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; + +// navbar + +$floating-nav-margin: 1.3rem; + +// Tooltips + +$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; + +// Popovers + +$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; + +// Toasts + +$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 + +$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; + +// Breadcrumbs + +$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 + +$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; + +// Badges + +$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 +$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; + +// Slide In Modal +$modal-slide-in-width-sm: 25rem !default; // custom +$modal-slide-in-width: 28rem !default; // custom +$modal-slide-in-width-lg: 30rem !default; // custom + +// Close + +$close-font-size: $font-size-base * 2 !default; +$close-font-weight: 400 !default; +$close-color: $headings-color !default; + +// Code + +$code-font-size: 90% !default; +$kbd-bg: #eee !default; + +// Switch +$custom-switch-width: 3rem !default; +$custom-switch-indicator-border-radius: 1rem !default; +$custom-switch-indicator-size: 1rem !default; + +//svg color +$svg-color-light: #626262 !default; + +// SVG icons +// For Breadcrumb +$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 Icons +$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"; + +$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..6a58e05 --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/mixins/_navs.scss @@ -0,0 +1,49 @@ +// Justified nav links +// ------------------------- + +@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; + } + } +} + +// Move borders to anchors instead of bottom of list +// +// Mixin for adding on top the shared `.nav-justified` styles for our tabs +@mixin nav-tabs-justified { + .nav-link { + // Override margin from .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..2af366c --- /dev/null +++ b/src/@core/scss/base/bootstrap-extended/mixins/_type.scss @@ -0,0 +1,31 @@ +// Font weight mixins +// ------------------ +@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..b76cb2c --- /dev/null +++ b/src/@core/scss/base/bootstrap.scss @@ -0,0 +1,11 @@ +// ================================================================================================ +// File Name: bootstrap.scss +// Description: Include bootstrap core from node_modules +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import 'bootstrap-extended/include'; // Bootstrap includes +@import 'bootstrap/scss/bootstrap'; // Bootstrap core diff --git a/src/@core/scss/base/colors.scss b/src/@core/scss/base/colors.scss new file mode 100644 index 0000000..a49b694 --- /dev/null +++ b/src/@core/scss/base/colors.scss @@ -0,0 +1,24 @@ +// ================================================================================================ +// File Name: colors.scss +// Description: Common color file to include color paletter and colors file, its qiore good to +// have all color classes in a separate file as it's quite heavy. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Core +// ------------------------------ + +// Import variables and mixins +@import 'bootstrap/scss/mixins/gradients'; +@import 'core/mixins/hex2rgb'; + +//box shadow for alert's heading +@import 'core/mixins/alert'; + +// Color system, always load last +// ------------------------------ +@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..c512862 --- /dev/null +++ b/src/@core/scss/base/components.scss @@ -0,0 +1,40 @@ +// ================================================================================================ +// File Name: components.scss +// Description: Common components file to includ all theme specific custom components. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import 'bootstrap-extended/include'; // Bootstrap includes +@import 'components/include'; // Components includes + +@import 'core/mixins/transitions'; // Template custom mixins + +// Core +// ------------------------------ +// layouts +@import 'core/layouts/content'; +@import 'core/layouts/sidebar'; +@import 'core/layouts/footer'; +// menu +@import 'core/menu/navigation'; + +// Components +// ------------------------------ +@import 'components/avatar'; +@import 'components/search'; +// @import 'components/chart'; +@import 'components/bootstrap-social'; +@import 'components/demo'; //! Plugins demo styles, remove in real project +@import 'components/customizer'; //! Customizer demo, remove in real project +@import 'components/divider'; +@import 'components/timeline'; + +// Plugins +// ------------------------------ +@import 'plugins/ui/breakpoints'; +@import 'plugins/forms/select2/select2'; +@import 'plugins/tables/datatables'; +@import 'plugins/forms/form-number-input'; // ? globally required for cart dropdown diff --git a/src/@core/scss/base/components/_include.scss b/src/@core/scss/base/components/_include.scss new file mode 100644 index 0000000..f59db10 --- /dev/null +++ b/src/@core/scss/base/components/_include.scss @@ -0,0 +1,13 @@ +// ================================================================================================ +// File Name: include.scss +// Description: Common components file to includ all theme specific custom components. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Overrides user variable +@import 'scss/variables/_variables-components'; // Component custom variable override (for user purpose) +@import 'variables'; // Component variable +@import 'variables-dark'; // Dark variable 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..c997f39 --- /dev/null +++ b/src/@core/scss/base/components/_variables-dark.scss @@ -0,0 +1,53 @@ +// ================================================================================================ +// File Name: variables-dark.scss +// Description: Custom dark theme variables +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// ================================================================================================ +// WARNING: PLEASE DO NOT CHANGE THIS VARIABLE FILE. +// THIS FILE WILL GET OVERWRITTEN WITH EACH VUEXY HTML TEMPLATE RELEASE. +// TIP: +// We suggest you to use this (assets/scss/variables/_variables-components.scss) file for overriding components variables. +// ================================================================================================ + +//Body +$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; + +//Typography +$theme-dark-headings-color: #d0d2d6 !default; +$theme-dark-label-color: #d0d2d6 !default; +$theme-dark-text-muted-color: #676d7d !default; + +//Card +$theme-dark-card-bg: #283046 !default; +$theme-dark-box-shadow: 0 4px 24px 0 rgba($black, 0.24); + +//Input +$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; + +// Switch +$theme-dark-switch-bg: #545a6a; +$theme-dark-switch-bg-disabled: #1b2337; + +//Table +$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..6f89eea --- /dev/null +++ b/src/@core/scss/base/components/_variables.scss @@ -0,0 +1,137 @@ +// ================================================================================================ +// File Name: variables.scss +// Description: Custom component variable +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// ================================================================================================ +// WARNING: PLEASE DO NOT CHANGE THIS VARIABLE FILE. +// THIS FILE WILL GET OVERWRITTEN WITH EACH VUEXY HTML TEMPLATE RELEASE. +// TIP: +// We suggest you to use this (assets/scss/variables/_variables-components.scss) file for overriding components variables. +// ================================================================================================ + +$base-font-size: 14px !default; +$body-direction: ltr !default; // Default ltr, change it to rtl for Right To Left support. +$content-padding: 2rem !default; + +// ------------------------------ +// Colors +// ------------------------------ +$nav-component-border-color: #ddd !default; + +$swiper-bg: #f2f4f4 !default; + +// ------------------------------ +// Navbar +// ------------------------------ +$navbar-height: 4.45rem !default; +$horizontal-menu-height: 4.45rem !default; +$footer-height: 3.35rem !default; + +// ------------------------------ +// Main Menu +// ------------------------------ + +//main menu dark +$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; + +// vertical menu +$menu-expanded-width: 260px !default; +$menu-collapsed-width: 80px !default; + +// ------------------------------ +// Sidebar +// ------------------------------- +$sidebar-width: 260px !default; +$chat-sidebar-width: 360px !default; + +// ------------------------------- +// Avatar +// ------------------------------- + +$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 +// ------------------------------- +$progress-size-xl: 1.14rem !default; +$progress-size-lg: 0.857rem !default; +$progress-size-md: 0.57rem !default; +$progress-size-sm: 0.143rem !default; + +// ------------------------------- +// Form +// ------------------------------- + +// $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 Page Bg Color +// ------------------------------- + +$blank-bg-color: #eff2f7 !default; + +// ------------------------------- +// Data Tables Bg Color +// ------------------------------- + +$datatable-bg-color: #f8f8f8 !default; + +// ------------------------------- +// Switch +// ------------------------------- +$switch-bg-color: #e2e2e2 !default; +$switch-indicator-color: $white !default; + +// ------------------------------- +// Timeline +// ------------------------------- +$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..2015636 --- /dev/null +++ b/src/@core/scss/base/components/avatar.scss @@ -0,0 +1,192 @@ +// ========================================================================================= +// File Name: avatar.scss +// Description: Avatar style. +// ---------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ========================================================================================== + +// Component: Avatar +// ======================================================================== + +// avatar + +.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 + .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 label with basic size + // using in FAQ & other pages + &.avatar-tag { + display: flex; + align-items: center; + justify-content: center; + height: 42px; + width: 42px; + border-radius: $border-radius; + } + + // avatar img + img { + border-radius: 50%; + } + + // Size Modifier + // ======================================================================== + + &.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 SCSS +.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 Group Sizings + .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..185034b --- /dev/null +++ b/src/@core/scss/base/components/bootstrap-social.scss @@ -0,0 +1,316 @@ +$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; + } +} + +// Social button Mixin +@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; +} + +// Social Outline Button Mixin +@mixin btn-social-outline($color-bg) { + border: 1px solid $color-bg !important; + color: $color-bg; +} + +// Social Outline Button Hover Mixin +@mixin btn-hover-outline($color-bg) { + color: darken($color-bg, 20%); + border: 1px solid darken($color-bg, 20%) !important; +} + +// Social button +.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-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-vk { + @include btn-social(#587ea3); +} +.btn-yahoo { + @include btn-social(#720e9e); +} + +// Social Outline button +.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-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-yahoo { + @include btn-social-outline(#720e9e); +} + +// Social Outline hover button +.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-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-yahoo:hover { + @include btn-hover-outline(#720e9e); +} + +// Social Background colors +.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-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-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..e345c50 --- /dev/null +++ b/src/@core/scss/base/components/chart.scss @@ -0,0 +1,35 @@ +// Apex chart Scss + +.apexcharts-canvas { + // Tooltip Color + .apexcharts-tooltip { + color: $body-color !important; + &.apexcharts-theme-dark { + color: $white !important; + } + } + // Toolbar Download Option Color + .apexcharts-toolbar { + .apexcharts-menu { + .apexcharts-menu-item { + color: $body-color; + } + } + } + + // Text font family + .apexcharts-text, + .apexcharts-datalabel { + font-family: $font-family-base !important; + } +} + +// apex charts tooltip +.apexcharts-xaxistooltip { + color: $body-color !important; +} + +// Toolbar Z-index +.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..f6c5984 --- /dev/null +++ b/src/@core/scss/base/components/customizer.scss @@ -0,0 +1,98 @@ +/*========================================================================================= + File Name: customizer.scss + Description: CSS used for demo purpose only. Remove this css from your project. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +.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 height + .customizer-content { + position: relative; + height: 100%; + } + + //customizer close button + .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 icon + .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; + } + + // theme color box styles + .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..cf6f086 --- /dev/null +++ b/src/@core/scss/base/components/demo.scss @@ -0,0 +1,121 @@ +/*========================================================================================= + File Name: demo.scss + Description: CSS used for demo purpose only. Remove this css from your project. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +// Demo content spacing +.demo-inline-spacing { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + & > * { + margin-right: 1.5rem; + margin-top: 1.5rem; + } +} + +// Demo content spacing +.demo-vertical-spacing > * { + margin: 0; + margin-bottom: 1.5rem; + &:last-child { + margin: 0; + } +} + +.demo-spacing-0 > *:last-child { + margin: 0; +} + +// using in icon pages +.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; +} + +// Breadcrumb page alignment 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); + } + } +} + +// Buy now +.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..e678974 --- /dev/null +++ b/src/@core/scss/base/components/divider.scss @@ -0,0 +1,104 @@ +// Divider + +.divider { + display: block; + text-align: center; + overflow: hidden; + white-space: nowrap; + margin: 1rem 0; + + // divider text display prop + + .divider-text { + position: relative; + display: inline-block; + font-size: 0.9375rem; + padding: 0 1rem; + + // divider icon font size + + i, + svg { + height: 1rem; + width: 1rem; + font-size: 1rem; + } + + // divider border + + &:before, + &:after { + content: ''; + position: absolute; + top: 50%; + width: 9999px; + border-top: 1px solid $border-color; + } + + // divider spacing + &:before { + right: 100%; + } + + &:after { + left: 100%; + } + } + + // divider positions config + + &.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 styles + + &.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..f18008a --- /dev/null +++ b/src/@core/scss/base/components/search.scss @@ -0,0 +1,237 @@ +/*========================================================================================= + File Name: search.scss + Description: Search functionality. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +.navbar-container { + a.nav-link-search { + float: left; + } + + .search-input { + width: 0; + float: left; + display: none; + + // select + 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; + } + + // select + + 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); // Reduce width by 10*2 + background: $white; + border: 1px solid rgba($black, 0.2); + + &:focus { + border: 1px solid $primary; + } + } + + .search-list { + position: relative; // To consider outer div width + } + } + + .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-sticky +.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..fbf7367 --- /dev/null +++ b/src/@core/scss/base/components/timeline.scss @@ -0,0 +1,101 @@ +// ========================================================================================= +// File Name: timeline.scss +// Description: Timeline style. +// ---------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ========================================================================================== + +// Component: Timeline +// ======================================================================== + +.timeline { + padding: 0; + margin-bottom: 0; + margin-left: 1rem; + list-style: none; + + // Timeline Item + .timeline-item { + position: relative; + padding-left: 2.5rem; + border-left: 1px solid $timeline-border-color; + + &:not(:last-child) { + padding-bottom: 1.8rem; + } + + // Timeline Point + .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 + &.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%; + } + } + + // Icons + 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..494eb92 --- /dev/null +++ b/src/@core/scss/base/core/colors/_palette.scss @@ -0,0 +1,534 @@ +// ================================================================================================ +// File Name: pallette.scss +// Description: Custom color system styles, includes background, border and text colors +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// ================================================================================================ +// WARNING: PLEASE DO NOT CHANGE THIS VARIABLE FILE. +// THIS FILE WILL GET OVERWRITTEN WITH EACH Vuexy HTML TEMPLATE RELEASE. +// TIP: +// We suggest you to use this (assets/scss/colors/palette.scss) file for overriding color variables. +// ================================================================================================ + +// usage: theme-color("name_of_color", "type_of_color") +// to avoid to repeating map-get($colors, ...) + +@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; +} + +// Color palettes +@import 'palette-variables'; + +// Color Classes +// 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; + } + } + + // Alert + @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; + } + + // closable alert + .close { + color: $color_value !important; + } + } + } + + // bg color lighten for rgba - opacity set + @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; + + // Calendar background, color and border color + &.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; + } + } + } + } + + // avatar with light bg + @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 colors + .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; + } + + // badge glow colors + .bg-#{$color_name}, + .border-#{$color_name}, + .badge-#{$color-name} { + &.badge-glow { + box-shadow: 0px 0px 10px $color_value; + } + } + + // Badge Background Color + @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') { + .badge { + // Badge Light Background + &.badge-light-#{$color_name} { + background-color: rgba($color: $color_value, $alpha: 0.12); + color: $color_value !important; + } + } + } + + // Overlay colors + .overlay-#{$color_name} { + @include bg-opacity($color_value, 0.6); + } + + // Basic buttons + @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; + } + } + } + + // For Btn Flat + @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')); + } + } + } + + // For Btn Relief + @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); + } + } + } + + // Outline buttons + @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; + } + } + } + + // Wave effect + @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% + ); + } + } + } + } + + // Bullet colors for email app + @if ($color_name != 'light' and $color_name != 'black' and $color_name != 'white') { + .bullet { + &.bullet-#{$color_name} { + background-color: $color_value; + } + } + } + + // Modal + @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; + } + } + } + } + } + + // For Pagination + @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; + } + } + } + } + } + } + } + + // For Nav Pills + @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); + } + } + } + } + } + + // Progress Bars + @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; + } + } + } + + // Timeline + @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; + } + } + } + } + } + + // Divider + @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; + } + } + } + } + + // Form Input Elements + // Checkbox & Radio + + // todo: remove it once confirm + input:focus ~ .bg-#{$color_name} { + box-shadow: 0 0 0 0.075rem $white, 0 0 0 0.21rem $color_value !important; + } + + // Custom Checkbox & Radio + @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 Custom Switches + @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; + } + } + } + + // Select2 + @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..4762b36 --- /dev/null +++ b/src/@core/scss/base/core/colors/palette-gradient.scss @@ -0,0 +1,72 @@ +// ================================================================================================ +// File Name: pallette-gradient.scss +// Description: gradient color system styles +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@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; +} + +// Color palettes +@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); + } + // for dark layout + .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..ff352e7 --- /dev/null +++ b/src/@core/scss/base/core/colors/palette-noui.scss @@ -0,0 +1,30 @@ +// ================================================================================================ +// File Name: pallette-noui.scss +// Description: noui color system styles +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Color palettes +@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..9a66156 --- /dev/null +++ b/src/@core/scss/base/core/layouts/_content.scss @@ -0,0 +1,527 @@ +// ================================================================================================ +// File Name: content.scss +// Description: Page content level SCSS for different screen size, layout and device. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Authuseror URL: http://www.themeforest.net//pixinvent +// ================================================================================================ + +// Contest margin left for expanded & collapsed stats width & margin left +// ================================================================================================ + +@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; + // paragraph line-height + 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; // Required in apps + .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; + } + } + } + } + } + + // kanban app uses kanban-wrapper class as not having content-layout so added this class with all the options + // For floating navbar + .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 + ); + } + } + } + } + + //for navbar hidden + .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 + ); + } + } + } + } + + // for static navbar + .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 + ); + } + } + } + } + + // for sticky navbar + .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 search width for sticky and static navbar + .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%; + } + } + } + } + } + } + + // Fixed layout + .footer-fixed { + .content { + &.app-content { + padding-bottom: $footer-height !important; // ? Added extra padding bottom due to fixed footer height + } + } + } + + //Remove left margin for 1 column layout + [data-col='1-column'] { + .header-navbar { + // Custom width for floating nav + &.floating-nav { + width: calc( + 100vw - (100vw - 100%) - calc(#{$content-padding} * 1) + ) !important; // ? override all navbar type width + } + width: 100%; // Full width for other nav options + left: 0 !important; + } + .content, + .footer { + margin-left: 0px !important; + } + + // horizontal layout + &.horizontal-layout { + .header-navbar { + width: 100% !important; + } + .app-content { + padding: calc( + #{$content-padding} + #{$navbar-height} + #{$floating-nav-margin} + ) + #{$content-padding} 0 #{$content-padding} !important; // ? need to check all navbar types case + } + &.footer-fixed { + .app-content { + padding: calc( + #{$content-padding} + #{$navbar-height} + #{$floating-nav-margin} + ) + #{$content-padding} #{$footer-height} #{$content-padding} !important; // ? need to check all navbar types case + } + } + } + } + + /* + * Blank page + */ + + .blank-page { + .content { + margin-left: 0; // not using in both cases + // overflow-x hidden, overflow for y in sm screen issue resolved default + &.app-content { + overflow: overlay; + overflow-x: hidden; + padding: 0 !important; + transition: none; + // remove white space on top by header-navbar-shadow class + .header-navbar-shadow { + display: none; + } + } + } + // blank page content-wrapper + .content-wrapper { + padding: 0 !important; + // content to be in center horizontally and vertically + .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; +} + +/* +* Col 3 layout for detached and general type +*/ + +@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; + } + // Detached sidebar + .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 + } + + // For static navbar + 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 + } + + // For sticky navbar + 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 + } + + // For Hidden navbar + 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; + } + } + } + } +} + +// For Fullscreen 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..68d77a7 --- /dev/null +++ b/src/@core/scss/base/core/layouts/_footer.scss @@ -0,0 +1,78 @@ +// ================================================================================================ +// File Name: Footer.scss +// Description: * Main footer styles. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Stick footer to the bottom of the page +footer { + &.footer { + padding: 0.8rem $content-padding; + min-height: $footer-height; + transition: 300ms ease all; + + // heart icon scss + 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; + } + } + + //shadow & border options + &.footer-shadow { + box-shadow: $box-shadow; + } + &.footer-border { + border-top: 1px solid $border-color; + } +} + +// Fixed Footer +.footer-fixed { + footer { + position: fixed !important; + z-index: 1030; + right: 0; + left: 0; + bottom: 0; + + // Footer Light + &.footer-light { + background: $white; + box-shadow: $box-shadow; + } + // Footer Dark + &.footer-dark { + background: $gray-600; + color: $white; + } + } +} + +//! Fix: If footer is hidden add padding fix to avail card margin bottom +.footer-hidden { + .app-content { + padding-bottom: 0.1px !important; + } +} + +// scroll to Top Footer Button +.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..d29384b --- /dev/null +++ b/src/@core/scss/base/core/layouts/_sidebar.scss @@ -0,0 +1,79 @@ +/*========================================================================================= + File Name: sidebar.scss + Description: content sidebar specific scss. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +// Sidebar base +// ------------------------------ + +// Base +.sidebar { + position: relative; + width: 100%; + height: 100%; + + // For desktop only + @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..0ea30c3 --- /dev/null +++ b/src/@core/scss/base/core/menu/_navigation.scss @@ -0,0 +1,206 @@ +/*========================================================================================= + File Name: navigation.scss + Description: Common mixin for menus, contain dark and light version scss. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +// Import first main menu mixin +@import '../mixins/main-menu-mixin'; + +// Main menu base +//============== +.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; + } + + // menu scroll shadow + .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)); + } + } + + // Native Scrollbar (.menu-native-scroll) + &.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.3rem 1.64rem; + transition: 300ms ease all, background 0s; + .navbar-brand { + display: flex; + align-items: center; + margin-top: 1.35rem; + 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.45rem; + 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; + } + } +} + +// Main Navigation +.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; + } + } + } +} + +// Media queries for small screen devices +// ========================================= +@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..4be23e5 --- /dev/null +++ b/src/@core/scss/base/core/menu/menu-types/horizontal-menu.scss @@ -0,0 +1,589 @@ +/*========================================================================================= + File Name: horizontal-menu.scss + Description: A classic horizontal menu for easy navigation & support all devices. + It support light & dark version, flipped layout, right side icons, borders menu for + item separation. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard TemplateTheme + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import '../../../bootstrap-extended/include'; // Bootstrap includes +@import '../../../components/include'; // Components includes + +// Import first main menu mixin +@import '../../mixins/main-menu-mixin'; + +// Horizontal Menu +//========================= +.horizontal-menu { + // Content Area margin + .content { + margin-left: 0; + &.show-overlay { + .content-overlay { + z-index: 998 !important; + } + } + } + + // Navbar container spacing for all + .navbar.header-navbar { + .navbar-container { + padding: 0.8rem #{$content-padding}; + } + } + + .horizontal-menu-wrapper { + .header-navbar { + min-height: $horizontal-menu-height; + } + } + + footer { + position: static; + } + + //---------------// + // Navbar Header // + //---------------// + .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; + // Navbar- Brand Center - 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% - 56px); // left 50% - branding width + padding: 0; + z-index: 1000; + .navbar-brand { + display: flex; + align-items: center; + margin-right: 0; + font-size: inherit; + .brand-logo img { + max-width: 36px; + } + + // Brand Text Scss + .brand-text { + color: $primary; + padding-left: 1rem; + margin-bottom: 0; + font-weight: 600; + letter-spacing: 0.01rem; + font-size: 1.45rem; + } + } + } + } + + &.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 + &.navbar-floating { + // Horizontal layout navbar shadow position and height fix + .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; + } + } + + // App content area wrapper height + &.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 + &.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); + } + } + + // App content area wrapper height + &.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 + &.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; + // ? Added for angular fix as it adds this class to navbar in hz layout + &.navbar-static-top { + left: 0; + width: 100%; + } + } + } + // App content area wrapper height + &.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 + &.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; + } + } + } + } + } + } + } +} + +// Initially menu & content width for md and down screen +@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) { + // For static navbar + 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; // - 0.8rem to reduce padding in small screen + } +} +// Import vertical-overlay-menu.scss for small screen support +@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..92374a2 --- /dev/null +++ b/src/@core/scss/base/core/menu/menu-types/vertical-menu.scss @@ -0,0 +1,295 @@ +/*========================================================================================= + File Name: vertical-menu.scss + Description: A classic vertical modern style menu with expand and collops support. It support + light & dark version, flipped layout, right side icons, native scroll and borders menu + item separation. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import '../../../bootstrap-extended/include'; // Bootstrap includes +@import '../../../components/include'; // Components includes + +// Import first main menu mixin +@import '../../mixins/main-menu-mixin'; + +// Vertical menu +//========================= +.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; + } + // Sub-menu icon size + .menu-content { + > li > a svg, + > li > a i { + margin-right: 1.45rem; + font-size: 11px; + height: 11px; + width: 11px; + } + } + } + } + + //Vertical menu [Expanded] + &.menu-expanded { + // Main 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); + } + } + } + //Content expanded + .footer { + @include main-menu-width($menu-expanded-width); + } + } + //Vertical menu [Collapsed] + &.menu-collapsed { + //Navbar 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 navbar when menu-collapsed + &.fixed-top { + left: $menu-collapsed-width; + } + } + // Main menu collapsed + .main-menu { + width: $menu-collapsed-width; + + .navbar-header .brand-text, + .modern-nav-toggle { + display: none; + } + + // When menu is collapsed and mouse is not hovered over menu + &: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; + } + } + } + } + + // When menu is collapsed but mouse is hovered over menu + &.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 collapsed + .navigation { + overflow: visible; + > li.navigation-header { + span { + display: none; + } + } + > li { + > a { + text-overflow: inherit; + } + } + } + } + //Brand center content collapsed + .app-content, + .footer { + @include main-menu-width($menu-collapsed-width); + } + .header-navbar { + // Floating-navbar + &.floating-nav { + width: calc(100vw - (100vw - 100%) - 4.4rem - 74px); + } + // Navbar-static-top + &.navbar-static-top { + width: calc(100vw - (100vw - 100%) - 74px); + left: 74px; + } + } + } + + .toggle-icon, + .collapse-toggle-icon { + margin-right: 0.425rem; + &:focus { + outline: none; + } + } + } +} + +// Initially menu & content width for lg and up screen +@include media-breakpoint-up(lg) { + .vertical-layout { + &.vertical-menu-modern { + .main-menu { + width: $menu-expanded-width; + } + } + } +} + +// Initially menu & content width for md and down screen +@include media-breakpoint-down(lg) { + .vertical-layout { + &.vertical-menu-modern { + // not using this class in below < 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; + } + } + } + } +} + +// Initially menu & content width for sm and down screen +@include media-breakpoint-down(sm) { + .vertical-layout { + &.vertical-menu-modern { + // not using this class <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 Specific CSS +@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 for small screen support +@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..bd0134c --- /dev/null +++ b/src/@core/scss/base/core/menu/menu-types/vertical-overlay-menu.scss @@ -0,0 +1,79 @@ +/*========================================================================================= + File Name: vertical-overlay-menu.scss + Description: A overlay style vertical menu with show and hide support. It support + light & dark version, filpped layout, right side icons, native scroll and borders menu + item seperation. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import '../../../bootstrap-extended/include'; // Bootstrap includes +@import '../../../components/include'; // Components includes + +// Import first main menu mixin +@import '../../mixins/main-menu-mixin'; + +// Vertical Overlay Menu +//========================= +.vertical-overlay-menu { + //Content expanded + .content { + @include main-menu-width(0); + } + //Navbar expanded + .navbar { + .navbar-header { + @include menu-navbar-width($menu-expanded-width); + } + } + // Main menu expanded + .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..6e2332e --- /dev/null +++ b/src/@core/scss/base/core/mixins/alert.scss @@ -0,0 +1,5 @@ +// For alert's heading box-shadow + +@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..9fdddf0 --- /dev/null +++ b/src/@core/scss/base/core/mixins/hex2rgb.scss @@ -0,0 +1,4 @@ +@mixin bg-opacity($color, $opacity: 1) { + background: $color; /* The Fallback */ + 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..6e1df8c --- /dev/null +++ b/src/@core/scss/base/core/mixins/main-menu-mixin.scss @@ -0,0 +1,359 @@ +// ========================================================================================= +// File Name: main-menu-mixin.scss +// Description: Common mixin for menus, contain dark and light version scss. +// ---------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +//========================================================================================== + +// Header navbar content and brand expanded & collapsed stats +// spacing and sizing. +// ================================================ + +// Mixins for the menu and navbar position, margin and width change +@mixin main-menu-width($menu-width) { + margin-left: $menu-width; +} +@mixin menu-navbar-width($menu-width) { + float: left; + width: $menu-width; +} +// Mixins for the menu show hide based on 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); +} + +// Mixins for the sub menu arrow +@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); + } + } + } +} +// Used for apps +@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} + ) + ); + // responsive size height + @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} + ) + ); + } + } +} + +// Light & Dark menu mixin +// $theme-color : Menu text color +// $theme-bg : Menu background color +// ================================================ +@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; + } + } + } + + // Menu Item Hover Animation + 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; + top: 1px; + } + } + > 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; + } + //for 2rd level menu + > ul { + display: block; + //for 3rd level menu + .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 content display mixin +// $menu-expanded-width : Expanded menu width +// $menu-collapsed-width: Collapsed menu 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..bb49108 --- /dev/null +++ b/src/@core/scss/base/custom-rtl.scss @@ -0,0 +1,355 @@ +// ================================================================================================ +// File Name: custom-rtl.scss +// Description: RTL support SCSS file. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// Variables +// ------------------------------ + +@import 'bootstrap-extended/include'; // Bootstrap includes +@import 'components/include'; // Components includes + +// Align icons position +.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; + } +} + +// Transformed menu icons +.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 +.horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-toggle::after { + background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $body-color), '#', '%23')); +} + +// Dropdown RTL Changes +.header-navbar .navbar-container ul.nav li.dropdown { + .dropdown-menu { + top: 41px !important; + + &::before { + top: 1px; + } + } +} + +.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 +.input-group { + .dropdown-menu.show { + top: 0 !important; + right: auto !important; + left: 0px !important; + } +} + +// BS Toast +.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; +} + +// Chartist +.chartjs-render-monitor { + margin-right: 1rem; +} + +// Datatable +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-group { + // Avatar Group Sizings + .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 +.breadcrumb:not([class*='breadcrumb-']), +.breadcrumb.breadcrumb-chevron { + .breadcrumb-item + .breadcrumb-item { + &:before { + transform: rotate(180deg); + } + } +} + +// Pagination +.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; + } +} + +// Calendar +.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 changes +.carousel-control-next { + left: auto; + right: 0; +} + +.carousel-control-prev { + left: 0; + right: auto; +} + +// Tooltip +.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 Style +.popover { + right: auto !important; +} + +// Progress +.progress-bar-animated { + animation: progress-bar-stripes 40s linear infinite; +} + +// Perfect scrollbar RTL fix +body .ps__rail-y { + right: auto !important; + left: 1px !important; +} + +// FAQ and Pricing page +.faq-navigation img, +.pricing-free-trial .pricing-trial-img { + transform: scaleX(-1); +} + +.feather-chevron-left, +.feather-chevron-right { + transform: rotate(-180deg) !important; +} + +// Kanban +.kanban-application { + .kanban-container { + .kanban-item { + i, + svg { + margin-right: 0 !important; + margin-left: 0.25rem; + } + } + } +} + +// Invoice List +.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 +.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..958c4d9 --- /dev/null +++ b/src/@core/scss/base/pages/app-calendar.scss @@ -0,0 +1,413 @@ +// Core variables and mixins + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$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; + +// Full calendar styles +.fc { + // Toolbar + .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; + } + } + + // Calendar head & body common + 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; + } + } + .fc-daygrid-day-bottom { + margin-top: 0.3rem; + } + .fc-daygrid-day { + padding: 5px; + .fc-daygrid-day-top { + flex-direction: row; + } + } + + // All Views Event + .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; + } + + // Timegrid + .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; + } + } + + // List View + .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 specific +.app-calendar { + position: relative; + border-radius: $card-border-radius; + margin-bottom: 2rem; + .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; + } + } + } + + // right sidebar area styles + .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 +.event-sidebar { + .select2-selection__choice__remove { + &:before { + top: 40% !important; + } + } +} + +// Horizontal Menu +.horizontal-layout { + .app-calendar { + margin-bottom: 1rem; + } +} + +// Media Queries +@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..181b23c --- /dev/null +++ b/src/@core/scss/base/pages/app-chat-list.scss @@ -0,0 +1,128 @@ +// ================================================================================================ +// File Name: app-chat-area.scss +// Description: SCC file for chat area application page. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +@import '../core/colors/palette-variables'; + +@import 'bootstrap/scss/mixins/_gradients'; +@import 'bootstrap/scss/mixins/gradients'; + +//Variables +$chat-image-back-color: #f2f0f7; +$chat-head-footer-height: 65px; +$chat-widget-head-footer-height: 56px; +$chat-widget-height: 390px; + +// User chat window css +.chat-app-window { + // User chats + .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; + } + } + } + .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; + } + } + + // Chat area css + .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 area left css + .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 form of user area + .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 +.chat-widget { + .card-header { + padding-top: 0.8rem; + padding-bottom: 0.8rem; + } + .chat-app-window { + // User chats + .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..9fb6ab1 --- /dev/null +++ b/src/@core/scss/base/pages/app-chat.scss @@ -0,0 +1,340 @@ +// ================================================================================================ +// File Name: app-chat.scss +// Description: SCC file for chat application page. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +@import '../core/colors/palette-variables'; + +@import 'bootstrap/scss/mixins/_gradients'; +@import 'bootstrap/scss/mixins/gradients'; + +//Variables +$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 admin profile sidebar + .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; + } + + // admin profile header section + .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; + } + } + + // Admin profile scroll area + .profile-sidebar-area { + height: calc(100% - #{$chat-profile-sidebar-head-height}); + position: relative; + padding: 0 2rem 1.5rem; + } + } + + // close icon style for all chat sidebars + .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; + } + } + + // for avatar border + .avatar-border { + img { + border: 2px solid $white; + } + } + + // Main Sidebar Content + .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; + // Close Icon + .sidebar-close-icon { + position: absolute; + right: 0.25rem; + top: 0.25rem; + font-size: 1.25rem; + z-index: 1; + cursor: pointer; + visibility: hidden; + } + // Chat search area + .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; + } + // Sidebar chat list + .chat-user-list-wrapper { + position: relative; + height: calc(100% - #{$chat-head-footer-height}); + width: $chat-sidebar-width; + border-radius: 0; + // Specific alignment for avatar status + .avatar { + height: 42px; + [class*='avatar-status-'] { + right: 1px; + bottom: 1px; + } + } + .contact-list { + .chat-info { + width: calc(100% - 46px); // ? avatar size with 2px border = 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); // ? avatar size with 2px border = 42+2+2 =46px & date area width = 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; + } + } + } + } + + // User chat window css + .chat-app-window { + height: 100%; + + // Before starting chat + .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 right sidebar + .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..1a19452 --- /dev/null +++ b/src/@core/scss/base/pages/app-ecommerce-details.scss @@ -0,0 +1,288 @@ +// ================================================================================================ +// File Name: app-ecommerce-details.scss +// Description: App Ecommerce Details SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// App e-commerce detail style +.ecommerce-application { + .app-ecommerce-details { + .product-img { + width: 600px; + } + // ratings style + .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 + .item-price { + color: $primary; + } + // Common for list-view, checkout and wishlist + .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 feature list + .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; + } + } + } + + // centered slides option-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; + } + } + } + } + + //navigation button custom icons + .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: ''; + } + } + } + + // color options + + .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 + .selected { + // these use for border color only page specific + .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 style + .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..ec39a6d --- /dev/null +++ b/src/@core/scss/base/pages/app-ecommerce.scss @@ -0,0 +1,632 @@ +// ================================================================================================ +// File Name: app-ecommerce.scss +// Description: SCSS file for ecommerce shop, wishlist and checkout page. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$search-bar-height: 48px; + +.ecommerce-application { + .content-body { + position: relative; + } + // To overlay in whole page + .body-content-overlay { + position: fixed !important; + z-index: 12 !important; + } + + // Shop Sidebar + .sidebar-shop { + margin-top: 0.85rem; + width: $sidebar-width; + z-index: 14; + + // for heading + .filter-heading { + margin-bottom: 1.75rem; + } + + // for title + .filter-title { + margin-bottom: 1rem; + margin-top: 2.5rem; + } + + // Sidebar price range and categories list + .price-range, + .categories-list { + li:not(:last-child) { + margin-bottom: 0.75rem; + } + } + + // Sidebar brand list + .brand-list { + li { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.75rem; + } + } + + // Sidebar for slider + .range-slider.noUi-horizontal { + .noUi-handle { + .noUi-tooltip { + opacity: 0; + transform: translate(-50%, -15%); + + &:before { + content: '$ '; + } + } + &:active { + .noUi-tooltip { + opacity: 1; + } + } + } + } + + // for stars in rating + .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; + } + } + } + } + } + + // ratings style + .filled-star { + fill: $warning; + stroke: $warning; + color: $warning; + } + .unfilled-star { + stroke: $gray-100; + color: $gray-100; + } + + // E-commerce shop main content area + + //ecommerce header + .ecommerce-header-items { + display: flex; + justify-content: space-between; + + .result-toggler { + display: flex; + align-items: center; + + // Sidebar toggler + .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 result title + .search-results { + font-weight: $font-weight-bold; + color: $headings-color; + } + } + } + + // Product search bar + .ecommerce-searchbar { + .input-group { + box-shadow: 0 2px 8px 0 rgba($black, 0.14); + border-radius: 0.3rem; + } + } + + // Search bar + .search-product, + .input-group-text { + height: $search-bar-height; + border: none; + font-size: 0.95rem; + padding-left: 1.25rem; + + &::placeholder { + font-size: 0.95rem; + } + } + + // main Products + .ecommerce-card { + &:hover { + transform: translateY(-5px); + box-shadow: 0 4px 25px 0 rgba($black, 0.25); + } + + // ratings + .item-rating { + ul { + margin-bottom: 0; + } + svg, + i { + height: 1.143rem; + width: 1.143rem; + font-size: 1.143rem; + } + } + + // Item name + .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; + } + + // buttons style + .btn-wishlist, + .btn-cart { + span { + vertical-align: text-top; + } + i, + svg { + margin-right: 0.25rem; + vertical-align: text-top; + &.text-danger { + fill: $danger; + } + } + } + } + + // margin for both views + .grid-view, + .list-view { + &:not(.wishlist-items) { + margin-top: 2rem; + } + } + + // Grid View Specific style + .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 Image + .item-img { + padding-top: 0.5rem; + min-height: 15.85rem; + display: flex; + align-items: center; + } + + // Item content wrapper + .item-wrapper { + display: flex; + justify-content: space-between; + align-items: baseline; + } + + // Hiding list view items + .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 + .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 Specific style + .list-view { + display: grid; + grid-template-columns: 1fr; + + .ecommerce-card { + overflow: hidden; + display: grid; + grid-template-columns: 1fr 2fr 1fr; + + // list view image + .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; + } + // List view description + .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; + } + // ratings + .item-rating { + margin-bottom: 0.3rem; + } + } + // Common for list-view, checkout and wishlist + .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; + } + } + + // price and btn area of list view + .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 free tag + .shipping { + margin-top: 0.75rem; + } + // List view btn spacing + .btn-wishlist, + .btn-cart { + margin-top: 1rem; + } + } + } + } + + // for checkout-items and options + // Remove padding from stepper header & content area + .checkout-tab-steps { + .bs-stepper-header, + .bs-stepper-content { + padding: 0; + margin: 0; + } + } + // Checkout items list + .checkout-items { + .ecommerce-card { + .item-img { + img { + width: 200px; + } + } + // adding order as we have updated order for shop list view + .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 button + .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 wizard + + .checkout-tab-steps { + background-color: transparent !important; + box-shadow: none !important; + + .bs-stepper-header { + border: none; + } + } + + // To hide toggler on lg and up and grid view for btn-wishlist and list view for checkout + @include media-breakpoint-up(lg) { + .ecommerce-header-items { + // Hide toggler in > lg screen + .shop-sidebar-toggler { + display: none; + } + } + + // Checkout list view + .product-checkout { + &.list-view { + grid-template-columns: 2fr 1fr; + column-gap: 2rem; + } + } + } +} +// Media queries to change grid columns in different Screens and to hide search results below 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; + } + // overlay style for e-commerce page + .body-content-overlay { + position: fixed; + opacity: 0; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + &.show { + opacity: 1; + } + } + + // Horizontal Menu scss + &.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 { + // removed radius and margin as showing sidebar in full height + .card { + border-radius: 0; + margin: 0; + } + // Sidebar style + .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 for responsive + .grid-view { + grid-template-columns: 1fr 1fr; + } + + // to hide search results + .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 + .list-view { + .ecommerce-card { + grid-template-columns: 1fr; + + .item-img { + padding-top: 2rem; + padding-bottom: 2rem; + } + + // to remove card-body border + .card-body { + border: none; + } + } + } + } +} +@include media-breakpoint-down(xs) { + .ecommerce-application { + // Grid View + .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..fc53084 --- /dev/null +++ b/src/@core/scss/base/pages/app-email.scss @@ -0,0 +1,492 @@ +// ================================================================================================ +// File Name: app-email.scss +// Description: SCC file for email application page. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$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 area starts + .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); // search section height 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: #7367f0; + } + } + } + // Sidebar area ends + + // Right content area common css starts + .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; + } + } + // Right content area common css End + // Sidebar toggle icon + .sidebar-toggle { + cursor: pointer; + float: left; + } + .go-back { + cursor: pointer; + } + + // Email user list area + .email-user-list { + position: relative; + height: calc( + 100% - calc(3.49rem + 3.32rem) + ); // ? search box height (3.49rem) + select all section height (3.32rem) + .email-media-list { + padding: 0; + margin: 0; + // Set delay per List Item + @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; + } + } + // Email avatar style + .avatar { + margin-bottom: 0.65rem; + } + .avatar, + .avatar img { + height: $avatar-size + 8; + width: $avatar-size + 8; + } + + // read email + &.mail-read { + background-color: $email_read; + } + // selected email + &.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; + } + } + } + // Action area of email list section + .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; + } + } + } + } + // On click of mail Details section slide in from right + // Email details section starts + .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 detail scroll area + .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; + } +} + +// Extra small devices (portrait phones, less than 576px) +@include media-breakpoint-down(xs) { + .email-application { + .email-detail-head .mail-meta-item { + display: flex; + justify-content: space-between; + margin-left: 4rem; // Spacing from left according to avatar image + .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 Style +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..52e3ef2 --- /dev/null +++ b/src/@core/scss/base/pages/app-file-manager.scss @@ -0,0 +1,441 @@ +// ================================================================================================ +// File Name: app-file-manager.scss +// Description: SCC file for email application page. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$file-manager-logo-height: 7.5rem; + +// file manager app container +.file-manager-application { + // file manager sidebar styles + .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; + + // styles for card-inner + .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; + } + } + } + + // styles for card inner list + .sidebar-list { + position: relative; + height: calc(100% - 85px); // search section height 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 sidebar on click + &.show { + transition: all 0.25s ease, background 0s !important; + transform: translateX(0) !important; + z-index: 10; + } + } + + // styles for content area wrapper + .content-area-wrapper { + border: 1px solid $border-color; + border-radius: $border-radius-sm; + + .content-right { + .content-wrapper { + padding: 0; + } + } + + // styles for file manger app area + .file-manager-main-content { + border-left: 1px solid $border-color; + height: inherit; + + // styles for searchbar + .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; + } + } + + // styles for main content + .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; + } + } + } + } + } + } + } +} + +// media query for max-width of 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..f7876b5 --- /dev/null +++ b/src/@core/scss/base/pages/app-invoice-list.scss @@ -0,0 +1,96 @@ +// ================================================================================================ +// File Name: app-invoice-list.scss +// Description: Invoice Layout page layouts SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy HTML Admin Template +// Version: 1.0 +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +.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; + } + } + } +} + +// Datatables Responsive Modal +.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..3f586fc --- /dev/null +++ b/src/@core/scss/base/pages/app-invoice-print.scss @@ -0,0 +1,58 @@ +// ================================================================================================ +// File Name: app-invoice-print.scss +// Description: Invoice Layout page layouts SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy HTML Admin Template +// Version: 1.0 +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes + +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..91d13f7 --- /dev/null +++ b/src/@core/scss/base/pages/app-invoice.scss @@ -0,0 +1,166 @@ +// ================================================================================================ +// File Name: app-invoice.scss +// Description: Invoice Layout page layouts SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy HTML Admin Template +// Version: 1.0 +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$product-details-bg: #fcfcfc; +$invoice-spacing: 1.45rem 0; +$invoice-card-body-padding: 2.5rem; + +// Invoice Preview, Edit & Add +.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; + .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 & Add +.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..d5e46df --- /dev/null +++ b/src/@core/scss/base/pages/app-kanban.scss @@ -0,0 +1,156 @@ +// Core variables and mixins + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$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 to prevent add-item btn from touching scrollbar + 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 styles + .add-new-board { + margin-top: 22px; + float: left; + padding: 0 15px; + label { + font-size: 1rem; + font-weight: 700; + margin-bottom: 0; + cursor: pointer; + } + } + + // Update sidebar styles + .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; + } + } +} + +// For when item is being dragged +.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..ade2e5e --- /dev/null +++ b/src/@core/scss/base/pages/app-todo.scss @@ -0,0 +1,300 @@ +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// Todo Application css starts +.todo-application { + // Content area wrapper border + .content-area-wrapper { + border: 1px solid $border-color; + border-radius: $card-border-radius; + + // Sidebar area starts + .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; + + // Sidebar Menu + .todo-app-menu { + width: 100%; + z-index: 3; + .add-task { + padding: 1.5rem; + } + + // Sidebar menu list items + .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: #7367f0; + } + } + } + } + } + // Sidebar area ends + + // Modal editor height + .ql-editor { + padding-bottom: 0; + } + + // Right content area common css starts + .content-right { + width: calc(100% - #{$menu-expanded-width}); + border-left: 1px solid $border-color; + .todo-app-list { + height: inherit; + } + // Todo Fixed search + .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 area + .todo-task-list-wrapper { + position: relative; + height: calc(100% - 3.56rem); // ? search box height (3.49rem) + 1px bottom border till 2 decimals + 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; + } + } + } + } + // When we search, no-results + .no-results { + display: none; + padding: 1.5rem; + text-align: center; + &.show { + display: block; + } + } + } + } + } + // Slide In close btn + .todo-item-action { + .close { + background: transparent !important; + box-shadow: none !important; + position: unset !important; + transform: none !important; + transition: none !important; + } + } + + // Drag & Drop Icon + .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; + } + } + } + + // validation text style + form .error:not(li):not(input) { + color: $danger; + font-size: 85%; + margin-top: 0.25rem; + } +} + +// while dragging task +.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 + .todo-item-action { + display: flex; + align-items: center; + justify-content: space-between; + } + .todo-title { + padding-left: 1rem; + } + &.completed { + .todo-title { + color: $text-muted; + } + } +} + +// Keyframe animation +@-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; + } + } + // ? Responsive Todo list in columns + .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); // ? search box height (48.79px + 1px border = 3.56), horizontal needs 1 decimal point +} 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..1c044db --- /dev/null +++ b/src/@core/scss/base/pages/app-user.scss @@ -0,0 +1,107 @@ +// ================================================================================================ +// File Name: app-users.scss +// Description: Invoice Layout page layouts SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy HTML Admin Template +// Version: 1.0 +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes + +$color-box-size: 2.714rem; + +// User List +.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; + } + } + } +} + +// User View +.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; + } + } + } +} + +// User Edit +.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..eadade7 --- /dev/null +++ b/src/@core/scss/base/pages/dashboard-ecommerce.scss @@ -0,0 +1,66 @@ +// ================================================================================================ +// File Name: aggrid.scss +// Description: SCC file for Aggrid. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// Statistics Card +.card-statistics { + .statistics-body { + padding: 2rem 2.4rem !important; + } + + @include media-breakpoint-down(md) { + .card-header, + .statistics-body { + padding: 1.5rem !important; + } + } +} + +// Company Table Card +.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; + } + } + } +} + +// Browser State Card +.card-browser-states { + .browser-states { + &:first-child { + margin-top: 0; + } + &:not(:first-child) { + margin-top: 1.7rem; + } + } +} + +// Transaction Card +.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..081c443 --- /dev/null +++ b/src/@core/scss/base/pages/page-auth.scss @@ -0,0 +1,106 @@ +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$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; // For v1 scroll for long auth form + .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; // For v2 scroll for long auth form + 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..eef2a3d --- /dev/null +++ b/src/@core/scss/base/pages/page-blog.scss @@ -0,0 +1,63 @@ +// ================================================================================================ +// File Name: blog.scss +// Description: blog related pages layouts SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// blog list +.blog-list-wrapper { + // Truncate blog titles with 2 lines + .blog-title-truncate { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + } + + // Truncate blog content with 3 lines + .blog-content-truncate { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + } +} + +// Blog Detail +.blog-detail-wrapper { + .blog-detail-share .dropdown-menu { + min-width: auto; + } +} + +// Blog Sidebar +.blog-sidebar { + .blog-recent-posts { + img { + object-fit: cover; + } + // below scss is written because recent blog posts' titles are links to other pages + .text-body-heading:hover { + color: $link-hover-color !important; + } + } + + .blog-recent-post-title, + .blog-category-title { + line-height: 23px; + letter-spacing: 0; + } +} + +// Blog Edit +.blog-edit-wrapper { + .border { + border-color: $input-border-color !important; + } +} \ No newline at end of file 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..850b12e --- /dev/null +++ b/src/@core/scss/base/pages/page-coming-soon.scss @@ -0,0 +1,21 @@ +// ================================================================================================ +// File Name: coming-soon.scss +// Description: Coming Soon pages custom scss +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +/*========== Coming Soon Background Image =========*/ + +.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..8511837 --- /dev/null +++ b/src/@core/scss/base/pages/page-faq.scss @@ -0,0 +1,66 @@ +// =============================================================================================== +// File Name: page-faq.scss +// Description: FAQ Page Content SCSS +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// faq search section +.faq-search { + background-size: cover; + background-color: rgba($primary, 0.12) !important; + .faq-search-input { + .input-group { + // remove input group box shadow on inside focus + &:focus-within { + box-shadow: none; + } + } + } +} + +// Contact cards +.faq-contact { + .faq-contact-card { + background-color: rgba($gray-100, 0.12); + } +} + +// make jumbotron card body padding +@include media-breakpoint-up(lg) { + .faq-search { + .card-body { + padding: 8rem !important; + } + } +} + +// make jumbotron card body padding +@include media-breakpoint-only(md) { + .faq-search { + .card-body { + padding: 6rem !important; + } + } +} + +@include media-breakpoint-up(md) { + // faq search input width fixed for medium up screen + .faq-search { + .faq-search-input { + .input-group { + width: 576px; + margin: 0 auto; + } + } + } + // faq navigation fix the navigation section so that vector image not move as per collapse + .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..790e76e --- /dev/null +++ b/src/@core/scss/base/pages/page-knowledge-base.scss @@ -0,0 +1,77 @@ +// =============================================================================================== +// File Name: knowledge-base.scss +// Description: Knowledge Base Page Content SCSS +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +$svg-bg: #fcfcfc; + +// Knowledge-base jumbotron scss +.knowledge-base-bg { + background-size: cover; + background-color: rgba($primary, 0.12) !important; + + // knowledge base search + .kb-search-input { + .input-group { + // remove input group box shadow on inside focus + &: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; + } + } +} +// knowledge base title +.kb-title { + display: flex; + align-items: center; +} + +//search input width fixed for medium up screen +@include media-breakpoint-up(md) { + .knowledge-base-bg { + .kb-search-input { + .input-group { + width: 576px; + margin: 0 auto; + } + } + } +} + +// make jumbotron card body padding +@include media-breakpoint-up(lg) { + .knowledge-base-bg { + .card-body { + padding: 8rem; + } + } +} +// make jumbotron card body padding +@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..8701977 --- /dev/null +++ b/src/@core/scss/base/pages/page-misc.scss @@ -0,0 +1,37 @@ +// ================================================================================================ +// File Name: page-misc.scss +// Description: Coming Soon pages custom scss +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +$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; + align-items: center; + .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..4e1f965 --- /dev/null +++ b/src/@core/scss/base/pages/page-pricing.scss @@ -0,0 +1,100 @@ +// =============================================================================================== +// File Name: pricing.scss +// Description: pricing Page Content SCSS +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// pricing card +.pricing-card { + // card active border + .card { + &.popular { + border: 1px solid $primary; + } + } + // list group circle + .list-group-circle { + font-weight: $font-weight-bold; + color: $headings-color; + } + // plan price value + .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 value + .annual-pricing { + position: absolute; + margin: auto; + left: 0; + right: 0; + } + } +} + +// trial free card +.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; + + // row default margin zero because it cause the horizontal scroll bar + .row { + margin: 0; + } + // content container + .pricing-trial-content { + padding: 0 1rem; + // image + img { + position: relative; + top: -3.1rem; + } + } +} + +// price trial ad card in small screen +@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; + } + } + } +} + +// free trial div margin change on below screen +@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..7d41c12 --- /dev/null +++ b/src/@core/scss/base/pages/page-profile.scss @@ -0,0 +1,146 @@ +// ================================================================================================ +// File Name: page-profile.scss +// Description: Page content different types of users page layouts SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +// User profile Scss +#user-profile { + /*-------------profile header section---------*/ + .profile-header { + overflow: hidden; + + // profile picture container + .profile-img-container { + position: absolute; + bottom: -2rem; + left: 2.14rem; + z-index: 2; + + // profile image + .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 navbar padding + .profile-header-nav { + .navbar { + padding: 0.8rem 1rem; + + // navbar toggle button + .navbar-toggler { + line-height: 0; + } + .profile-tabs { + .nav-item { + i, + svg { + margin-right: 0; + } + } + } + } + } + } + + /*-------- profile info section --------*/ + #profile-info { + // profile star icons + .profile-star { + color: $gray-100; + + i, + svg { + // filled star icons + &.profile-favorite { + fill: $warning; + stroke: $warning; + } + } + } + + // filled heart icons + .profile-likes { + fill: $danger; + stroke: $danger; + } + + // progress-bar height + .profile-polls-info { + .progress { + height: 0.42rem; + } + } + } + + //profile-latest-img - hover effect + .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; + } + } + + // Load More Button - Block UI + .block-element { + .spinner-border { + border-width: 0.14rem; + } + } +} + +// Latest Photo Section - Image size +@include media-breakpoint-down(md) { + #user-profile { + .profile-latest-img { + img { + width: 100%; + } + } + } +} + +@include media-breakpoint-up(md) { + // navbar tabs pills + .profile-header-nav { + .profile-tabs { + width: 100%; + margin-left: 13.2rem; + } + } +} + +// profile img and title +@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..6afcbbe --- /dev/null +++ b/src/@core/scss/base/pages/ui-colors.scss @@ -0,0 +1,25 @@ +// =============================================================================================== +// File Name: colors.scss +// Description: Colors Page Content SCSS +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +.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..7fe836a --- /dev/null +++ b/src/@core/scss/base/pages/ui-feather.scss @@ -0,0 +1,59 @@ +@import '../bootstrap-extended/include'; // Bootstrap includes + +.icon-search-wrapper { + max-width: 300px; + + .feather-search { + height: 1.15rem; + width: 1.15rem; + } +} +#icons-container { + .icon-card { + width: 128px; + } +} + +// Active Card +.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..616d3aa --- /dev/null +++ b/src/@core/scss/base/plugins/charts/chart-apex.scss @@ -0,0 +1,158 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.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..97dcc2c --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-context-menu.scss @@ -0,0 +1,101 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +/********* CONTEXT MENU *********/ + +.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 +.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..53176d6 --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-drag-drop.scss @@ -0,0 +1,51 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +// draggable cursor - grab +.draggable { + cursor: grab; + .gu-unselectable & { + cursor: grabbing; + } +} + +// For Multi List +#multiple-list-group-a, +#multiple-list-group-b { + min-height: 5.714rem; +} + +// For Handle +#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; + } +} + +// Dak Layout +.dark-layout { + // Drag & drop moving element + .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..3d29c1e --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-media-player.scss @@ -0,0 +1,21 @@ +// ================================================================================================ +// File Name: ext-component-media-player.scss +// Description: Media Player SCSS. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +// to remove outline on focus +.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..11afdd8 --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-ratings.scss @@ -0,0 +1,57 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.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 +.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..4ef527c --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-sliders.scss @@ -0,0 +1,145 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +$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; + } +} + +// horizontal slider and it's sizes +.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; + } +} +// pips, marker and value +.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; +} + +// slider handle styles +.noUi-handle { + box-shadow: none; + border: none; + + &:after, + &:before { + display: none; + } + border-radius: 50%; + background: $white; + border: 2px solid $primary; +} + +// default selected slide area style +.noUi-connect { + background: $primary; + box-shadow: none; +} + +// Tooltip style +.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 customization +.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; + } +} + +// for example value of noUI Hover +.hover_val { + font: 400 12px Arial; + color: $body-color; + display: block; + margin: 15px 0; +} + +// to remove outline on focus +.noUi-handle:focus { + outline: 0; +} + +// IE SPECIFIC FOR SLIDER WITH INPUT +_:-ms-lang(x), +.slider-select { + flex: 0 0 10%; + max-width: 10%; +} + +// Dark Layout +// ------------- +.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..8d08283 --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-sweet-alerts.scss @@ -0,0 +1,124 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.swal2-container { + .swal2-popup { + border-radius: $card-border-radius; + padding: 2rem; + + // close button + .swal2-close:focus { + outline: none; + box-shadow: none; + } + + // content + .swal2-content { + color: $body-color; + } + + // header styling + .swal2-title { + font-size: $h3-font-size; + font-weight: $headings-font-family; + color: $headings-color; + } + + // remove box-shadow on focus of buttons + button.swal2-confirm:focus { + box-shadow: none; + } + + // input + 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; + } + } + + // steps + .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 code + pre { + min-height: 1.35rem; + margin-top: 0.5rem; + } + + // footer + .swal2-footer { + border-color: $border-color; + color: $body-color; + } + } +} + +// Dark Layout +.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; + } + + // footer + .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..61e4324 --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-swiper.scss @@ -0,0 +1,367 @@ +/*========================================================================================= + File Name: ext-component-swiper.scss + Description: swiper plugin scss. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +/* Swiper css */ +/* ---------- */ +/* swiper slide shadow */ +.swiper-container { + .swiper-shadow { + box-shadow: 2px 8px 10px 0 rgba(25, 42, 70, 0.13) !important; + } +} + +// swiper pagination +.swiper-pagination { + // bullet pagination + .swiper-pagination-bullet { + &:focus { + outline: none; + } + &.swiper-pagination-bullet-active { + background-color: $primary; + } + } + + // progress bar pagination + &.swiper-pagination-progressbar { + .swiper-pagination-progressbar-fill { + background-color: $primary; + } + } +} + +// centered slides option-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; + } + } + + // For 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')); + } + } + } +} + +// centered slides option-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; + } + } + } +} + +/* cube effect */ +.swiper-cube-effect { + &.swiper-container { + width: 300px; + left: 50%; + margin-left: -150px; + margin-top: -12px; + } +} + +/* swiper coverflow slide width */ +.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; + } +} + +// parallax +.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 { + /* virtual slides */ + font-size: $h3-font-size; + background-color: $kbd-bg; + display: flex; + justify-content: center; + align-items: center; + } + } +} + +//navigation button custom icons +.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: ''; + } + } +} + +// Media query for medium screen +@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; + } + } + } + // parallax + .swiper-parallax { + .swiper-slide { + padding: 1rem 1.2rem; + } + + img { + height: 100% !important; + } + } +} + +// Media query for small screen +@media only screen and (max-width: 576px) { + // centered slides option-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; + } + } + } + } + + // cube effect + .swiper-cube-effect { + &.swiper-container { + width: 150px; + left: 70%; + } + } + + // parallax + .swiper-parallax { + .swiper-slide { + padding: 1rem 1.3rem; + } + } + + // virtual slides + .swiper-virtual { + &.swiper-container { + .swiper-slide { + font-size: $font-size-base; + } + } + } +} + +// Dark Layout +.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..75b449a --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-toastr.scss @@ -0,0 +1,254 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +// Toast container opacity +#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 hover shadow +#toast-container > div, +#toast-container > div:hover { + box-shadow: $toast-box-shadow; +} + +#toast-container > .toast { + background-image: none !important; +} +// Toast colors +.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; + } +} + +// we are using only few colors in toast so not adding in palette.scss +// plugin class name 'error' is also differ then ours so not useful to add in palette +.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')); + } +} + +// position alignments +.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 query + +@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; + } + } +} + +// Toastr Dark Layout +.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..f9d797b --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-tour.scss @@ -0,0 +1,80 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.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; + // header + .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; + } + } + } + + // body or text + .shepherd-text { + color: $body-color; + padding: 0.8rem 1.2rem; + } + + // footer + .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 +.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..53289e0 --- /dev/null +++ b/src/@core/scss/base/plugins/extensions/ext-component-tree.scss @@ -0,0 +1,154 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.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; +} + +// Light Layout +.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; + } + } + } +} + +// Context Menu Styling +.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 +.dark-layout { + // Folder Icons and text colors + .jstree { + .jstree-container-ul { + .jstree-anchor { + color: $theme-dark-body-color; + } + } + } + + // Context Menu Styling + .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..9957e6a --- /dev/null +++ b/src/@core/scss/base/plugins/forms/form-file-uploader.scss @@ -0,0 +1,103 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.dropzone { + min-height: 350px; + border: 2px dashed $primary; + background: $body-bg; + position: relative; + // dropzone message customization + .dz-message { + font-size: 2rem; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + color: #7367f0; + display: flex; + justify-content: center; + align-items: center; + margin: 0; + } + + // dropzone message icon + .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; + } + + // for preview of files + .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; + } + } + } + + // for dropzone preview and remove icon + .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%); + } + } +} + +// For Small Screen drop Logo +@media (max-width: 576px) { + .dropzone { + .dz-message { + &:before { + top: 15rem; + } + } + } +} + +// dark layout +.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..07c1b84 --- /dev/null +++ b/src/@core/scss/base/plugins/forms/form-number-input.scss @@ -0,0 +1,157 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +// Number Inputs (Touch spin) +$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; + } + } + } + + // Disabled Touchspin + &.disabled-touchspin { + .bootstrap-touchspin-down, + .bootstrap-touchspin-up { + background-color: rgba($black, 0.5) !important; + cursor: default; + opacity: 0.5; + } + } + + // Touchspin Large + &.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 Small + &.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; + } + } + } + } +} + +/* Number Type Input Box Scss for Touchspin - Remove arrow for firefox */ +.bootstrap-touchspin { + &.input-group { + input[type='number'] { + -moz-appearance: textfield; + } + } +} + +// Dark layout style +.dark-layout { + // number inputs[touchspin] + .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..3a42e01 --- /dev/null +++ b/src/@core/scss/base/plugins/forms/form-quill-editor.scss @@ -0,0 +1,213 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +/* Set dropdown font-families */ +.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'; +} + +/* Set content font-families */ +.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 Editor +.ql-toolbar { + border-color: $custom-control-border-color !important; + .ql-formats { + &:focus, + *:focus { + outline: 0; + } + // button and label hover + .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 dropdown item hover + .ql-picker-options { + .ql-picker-item:hover { + color: $primary !important; + } + .ql-active { + color: $primary !important; + } + } + } +} +.ql-bubble { + .ql-picker { + color: $white !important; + } + // stroke options color + .ql-stroke { + stroke: $white !important; + } + // fill options color + .ql-fill { + fill: $white !important; + } +} +.ql-container { + border-color: $custom-control-border-color !important; + font-family: $font-family-monospace; +} +.ql-editor { + a { + color: $primary; + } +} +// default picker options +.ql-picker { + color: $headings-color !important; +} +// stroke options color +.ql-stroke { + stroke: $headings-color !important; +} +.ql-active { + .ql-stroke { + stroke: $primary !important; + } + .ql-fill { + fill: $primary !important; + } +} +// fill options color +.ql-fill { + fill: $headings-color !important; +} +// Border rounded for editor +.ql-toolbar, +.ql-container { + border-top-right-radius: $border-radius; + border-top-left-radius: $border-radius; +} +.ql-toolbar { + + .ql-container, + .ql-container + & { + // ? If container/toolbar is below container/toolbar add bottom radius + border-bottom-right-radius: $border-radius; + border-bottom-left-radius: $border-radius; + // ? If container/toolbar is above container/toolbar remove top radius + border-top-right-radius: unset; + border-top-left-radius: unset; + } +} + +// Dark Layout +.dark-layout { + // Quill Editor + .quill-toolbar, + .ql-toolbar { + background-color: $theme-dark-input-bg; + border-color: $theme-dark-border-color !important; + + // toolbar color + .ql-picker { + color: $white !important; + } + + .ql-stroke { + stroke: $white !important; + } + + .ql-fill { + fill: $white !important; + } + + // toolbar options colors + .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; + } + + // syntax color + .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..d45e585 --- /dev/null +++ b/src/@core/scss/base/plugins/forms/form-validation.scss @@ -0,0 +1,27 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +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..8895439 --- /dev/null +++ b/src/@core/scss/base/plugins/forms/form-wizard.scss @@ -0,0 +1,293 @@ +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +$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 +.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 Queries +@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..023b26a --- /dev/null +++ b/src/@core/scss/base/plugins/forms/pickers/form-flat-pickr.scss @@ -0,0 +1,191 @@ +@import '../../../bootstrap-extended/include'; // Bootstrap includes +@import '../../../components/include'; // Components includes + +.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; + } +} + +// Time picker hover & focus bg color +.flatpickr-time input:hover, +.flatpickr-time .flatpickr-am-pm:hover, +.flatpickr-time input:focus, +.flatpickr-time .flatpickr-am-pm:focus { + background: $white; +} + +//Dark layout +.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; + } + } + } + // Time picker hover & focus bg 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; + } +} + +// ? Added bg color for flatpickr input only as it has default readonly attribute +.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..266e755 --- /dev/null +++ b/src/@core/scss/base/plugins/forms/pickers/form-pickadate.scss @@ -0,0 +1,167 @@ +@import '../../../bootstrap-extended/include'; // Bootstrap includes +@import '../../../components/include'; // Components includes + +// remove picker outline +.picker__holder { + outline: none; +} +// Updated picker color as per theme color +.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; +} +// Updated picker svg icons +.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 style +.dark-layout { + // date picker + .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; + } + } + } + } + + // time picker + .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 Style +[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..e52161b --- /dev/null +++ b/src/@core/scss/base/plugins/forms/select2/_select2.scss @@ -0,0 +1,319 @@ +// select-2 Theme +.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; + } + // single select + .select2-selection--single { + min-height: 2.714rem; + padding: 5px; + border: 1px solid $input-border-color; + // Border color on focus + &:focus { + outline: 0; + border-color: $primary !important; + box-shadow: $input-focus-box-shadow !important; + } + + // Select with icons scss + .select2-selection__rendered { + i, + svg { + font-size: 1.15rem; + height: 1.15rem; + width: 1.15rem; + margin-right: 0.5rem; + } + } + // dropdown arrow height + .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; + } + } + } + // when select container open - scss + &.select2-container--open { + box-shadow: $dropdown-box-shadow; + .select2-selection--single { + border-color: $primary !important; + outline: 0; + } + } + + // select container - focus + &.select2-container--focus { + outline: 0; + .select2-selection--multiple { + border-color: $primary !important; + outline: 0; + } + } + + // Select2 Search Dropdown + .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; + } + } + + // multiple select scss + .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; + } + // selected items bg color for multiple selection + .select2-selection__choice { + background-color: $primary !important; + border-color: $primary !important; + color: $white; + padding: 2px 5px; + } + // font -size for selected options + .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; + } + } + // select dropdown menu with icons + i, + svg { + position: relative; + top: 1px; + margin-right: 0.5rem; + height: 1.15rem; + width: 1.15rem; + font-size: 1.15rem; + padding-left: 1px; + } + } + + // Select2 group alignment + .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; + } + + //Loading Remote Data Image Size + .select2-result-repository__avatar { + img { + width: 50px; + } + } + + // Optional sizing + // ------------------------------ + + // Large Single select + .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; + } + } + + // large Multiple select + &.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%; + } + } + } + } + } + // Small Single select + .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; + // Single + &.select2-selection--single { + .select2-selection__arrow { + top: -0.3rem !important; + } + } + + // Small Multiple select + &.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 +.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..66bd3f3 --- /dev/null +++ b/src/@core/scss/base/plugins/maps/map-leaflet.scss @@ -0,0 +1,38 @@ +// ================================================================================================ +// File Name: leaflet.scss +// Description: Leaflet map custom scss +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +.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..95605ed --- /dev/null +++ b/src/@core/scss/base/plugins/tables/_datatables.scss @@ -0,0 +1,163 @@ +// ================================================================================================ +// File Name: datatables.scss +// Description: Datatables pages custom scss +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ +table.dataTable { + // table width & collapse border + width: 100% !important; + border-collapse: collapse !important; + td, + th { + padding: $table-cell-padding 1.5rem; + vertical-align: middle; + } + thead { + // Sorting Icons Change + .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; + } + } + } + + // datatables with checkbox styling + .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; + } +} + +// responsive '+' icon line height +table.dataTable.dtr-column > tbody > tr > td.control:before, +table.dataTable.dtr-column > tbody > tr > th.control:before { + line-height: 16px; +} + +// data table search, labels and +div.dataTables_wrapper { + // data table search, labels + div.dataTables_filter, + div.dataTables_length { + label { + margin-top: 1rem; + margin-bottom: 0.5rem; + } + // for datatable length select + 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; + } + + // pagination + div.dataTables_paginate { + ul.pagination { + margin-top: 1rem; + margin-bottom: 1.5rem; + } + } + + // info text color + .dataTables_info { + padding-top: 1.25rem !important; + color: $text-muted; + } +} + +// row grouping +tr.group { + // row grouping color + background-color: $table-accent-bg; +} + +// pagination in center +@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; + } + // small screen button spacing in bottom + 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..4667054 --- /dev/null +++ b/src/@core/scss/base/plugins/tables/table-ag-grid.scss @@ -0,0 +1,135 @@ +// ================================================================================================ +// File Name: aggrid.scss +// Description: SCC file for Aggrid. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../../bootstrap-extended/include'; // Bootstrap includes +@import '../../components/include'; // Components includes + +.aggrid { + height: 600px; + font-size: 1rem; + color: $body-color; + + // Checkbox Color + .ag-icon-checkbox-checked, + .ag-icon-checkbox-indeterminate { + color: $primary !important; + } + + /*** TABLE BODY HEIGHT - FOOTER HEIGHT ***/ + .ag-root-wrapper-body { + min-height: calc(100% - 56px); + } + + /*** HEADER TEXT ***/ + .ag-header-cell-text { + font-size: 1rem; + font-family: $font-family-sans-serif; + } + + /*** PAGINATION STYLING ***/ + .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; + } + } + + /*** TABLE SCROLLBAR ***/ + ::-webkit-scrollbar { + width: 10px; + height: 10px; + } + + ::-webkit-scrollbar-thumb { + background: $gray-300; + border-radius: 20px; + } + + ::-webkit-scrollbar-track { + background: $body-bg; + border-radius: 20px; + } +} + +/*** PAGE FILTER DROPDOWN ***/ +.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; + } +} + +/*** SORTING DROPDOWN WIDTH ***/ +.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..46e6c1a --- /dev/null +++ b/src/@core/scss/base/plugins/ui/_breakpoints.scss @@ -0,0 +1,64 @@ +// config +$debug: false; + +// declare breakpoints +$usn-x-small: 0px; +$usn-small: 544px; +$usn-medium: 768px; +$usn-large: 992px; +$usn-x-large: 1200px; + +// create sass list to pass media query data +// if a breakpoint name changes, remember to +// update it in the list below as well +$mq-sync: xs $usn-x-small, sm $usn-small, md $usn-medium, lg $usn-large, xl $usn-x-large; + +// build each media query for js ingestion +@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 { + // set clear on head to show Unison is set up correctly + clear: both; + // store hash of all breakpoints + title { + font-family: '#{$mq-sync}'; + } +} + +// debug styles to see breakpoint info +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; + } +} + +// hide elements for conditional loading +// only used for responsive comments plugin +*[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..46e6c1a --- /dev/null +++ b/src/@core/scss/base/plugins/ui/coming-soon.scss @@ -0,0 +1,64 @@ +// config +$debug: false; + +// declare breakpoints +$usn-x-small: 0px; +$usn-small: 544px; +$usn-medium: 768px; +$usn-large: 992px; +$usn-x-large: 1200px; + +// create sass list to pass media query data +// if a breakpoint name changes, remember to +// update it in the list below as well +$mq-sync: xs $usn-x-small, sm $usn-small, md $usn-medium, lg $usn-large, xl $usn-x-large; + +// build each media query for js ingestion +@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 { + // set clear on head to show Unison is set up correctly + clear: both; + // store hash of all breakpoints + title { + font-family: '#{$mq-sync}'; + } +} + +// debug styles to see breakpoint info +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; + } +} + +// hide elements for conditional loading +// only used for responsive comments plugin +*[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..bb7c189 --- /dev/null +++ b/src/@core/scss/base/themes/bordered-layout.scss @@ -0,0 +1,59 @@ +// ================================================================================================ +// File Name: bordered-layout.scss +// Description: SCSS file for Bordered layout. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +.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..9cc042b --- /dev/null +++ b/src/@core/scss/base/themes/dark-layout.scss @@ -0,0 +1,2386 @@ +// ================================================================================================ +// File Name: dark-layout.scss +// Description: SCSS file for dark layout. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +.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; + } + // universal elements + //heading tags + h1, + h2, + h3, + h4, + h5, + h6 { + color: $theme-dark-headings-color; + } + + // border color + .border, + .border-top, + .border-right, + .border-bottom, + .border-left { + border-color: $theme-dark-border-color !important; + } + + // other tags + 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; + } + + // for dark text + .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 + .shadow { + box-shadow: $theme-dark-box-shadow !important; + } + + // blockquote footer + .blockquote-footer { + color: $theme-dark-text-muted-color; + } + + // main navbar and header navbar shadow(generic navbar) + .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)); + } + + // main header navbar dark style + + .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; + } + } + } + } + } + + //Text color for Blank page with transparent card + .blank-page { + .card.bg-transparent { + h1, + h2, + h3, + h4, + h5, + h6 { + color: $theme-dark-card-bg; + } + + p { + color: $theme-dark-body-bg; + } + } + } + + // main menu + .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 + .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 active item color + .menu-collapsed { + .main-menu:not(.expanded) { + .navigation-main { + li.active { + > a { + background: $theme-dark-body-bg !important; + } + } + } + } + } + + /********* COMPONENTS *********/ + // alerts + .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; + } + } + } + + // breadcrumbs + + // Header breadcrumb + .content-header-left { + .breadcrumbs-top { + .content-header-title { + color: $theme-dark-headings-color; + border-color: $theme-dark-border-color; + } + } + } + // Breadcrumb dark style + .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 with Chevron + .breadcrumb-chevron { + &.breadcrumb { + .breadcrumb-item + .breadcrumb-item:before { + background-image: url(str-replace( + str-replace($chevron-right, 'currentColor', $theme-dark-body-color), + '#', + '%23' + )); + } + } + } + + // collapse + + [class*='collapse-'] .card:not(:last-of-type) { + border-color: $theme-dark-border-color; + } + // for shadow and bordered + .collapse-border { + .card { + border-color: $theme-dark-border-color; + } + } + + // Collapse shadow + .collapse-shadow { + box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.24); + } + + // margin collapse + .collapse-margin { + .card { + box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.24) !important; + } + } + + // if there is an anchor tag inside + .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' + )); + } + } + } + + // buttons + .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 + .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 { + .modal-header, + .modal-header[class*='bg-'] { + // why removed !important? Not working if added bg-COLOR class with modal-header + // background-color: $theme-dark-card-bg !important; + background-color: $theme-dark-body-bg; + } + + // close button + .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 + .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-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; + } + } + } + } + + // bordered nav + .nav.wrap-border { + border-color: $theme-dark-border-color; + } + + // nav pills + .nav-pills { + .nav-item { + .nav-link { + &.active { + color: $white; + background-color: $primary; + } + } + } + } + + // media + .media-bordered { + .media:not(:first-child) { + border-color: $theme-dark-border-color; + } + } + + // popover + .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 + .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 { + .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')); + } + } + + // spinners + .spinner-border { + border-color: currentColor !important; + border-right-color: transparent !important; + } + + // avatar + .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 { + .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 { + .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 + .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; + } + } + } + } + + //--------------- Advance Cards --------------- + //--------------------------------------------- + + // Developer Meetup Card + .card-developer-meetup { + .meetup-header .meetup-day { + border-right-color: $theme-dark-input-border-color; + } + } + + // Profile Card + .card-profile { + .profile-image-wrapper .profile-image { + background-color: $theme-dark-body-bg; + } + } + + // Business Card + .business-card { + .business-items .business-item { + border-color: $theme-dark-border-color; + } + } + + // App Design Card + .card-app-design { + .design-planning-wrapper .design-planning { + background-color: $theme-dark-body-bg; + } + } + + //--------------- Statistics Card --------------- + //------------------------------------------------ + + .card-tiny-line-stats { + .apexcharts-series-markers { + .apexcharts-marker { + stroke: $info; + } + + &:last-child { + .apexcharts-marker { + fill: $theme-dark-card-bg; + } + } + } + } + + //-------------- Analytics Cards -------------- + //--------------------------------------------- + + // Revenue Report Card + .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 + .earnings-card { + .apexcharts-canvas .apexcharts-pie { + .apexcharts-datalabel-label { + fill: $theme-dark-body-color !important; + } + + .apexcharts-datalabel-value { + fill: $theme-dark-headings-color; + } + } + } + + // Company Table Card + .card-company-table { + .avatar { + background-color: $theme-dark-body-bg; + } + } + + /********** FORMS **********/ + + // input + 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; + } + } + + // text area counter + .char-textarea { + &.active { + color: $theme-dark-body-color !important; + } + + &.max-limit { + color: $danger !important; + } + } + + // file uploader default + .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 like checkbox, radio and switch + .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 + 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' + )); + } + } + + // Added for override + .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; + } + + // form wizard + .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 groups + .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; + } + } + } + + // floating label + .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 **********/ + + // table + .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; + } + } + + // if table not light/dark and thead not have dark class + &: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 style + &.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 { + // for contextual classes + &[class*='table-'] { + td, + th { + background-color: unset; + } + } + + &.table-dark { + td, + th { + color: $white; + } + } + + &.table-active { + td, + th { + color: $theme-dark-body-color; + } + } + } + } + + // bordered table + &.table-bordered { + border-color: $theme-dark-border-color; + } + + // table hover row color + &.table-hover { + tbody { + tr { + &:hover { + background-color: $theme-dark-table-hover-bg; + } + + th, + td { + background-color: unset; + } + } + } + } + + // hover animation + &.table-hover-animation tbody tr { + background-color: $theme-dark-table-bg; + &:hover { + box-shadow: $theme-dark-box-shadow; + } + } + + // table striped + &.table-striped { + tbody { + tr { + &:nth-of-type(odd) { + background-color: $theme-dark-table-striped-bg; + } + } + } + } + } + + // datatable + .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; + } + } + } + + // Sorting Icons Change + 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 Page Btn + .ag-grid-btns { + .filter-btn { + background-color: transparent !important; + } + } + + // agGrid Main + .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; + } + } + + /********** PAGES **********/ + + // coming soon + .getting-started { + .clockCard { + p { + color: $theme-dark-body-color !important; + } + } + } + + // profile page + #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 page + .search-bar { + .form-control { + background-color: $theme-dark-card-bg; + } + } + + // Blog Edit Page + .blog-edit-wrapper { + .border { + border-color: $theme-dark-border-color !important; + } + } + // Knowledge Base + .kb-search-content-info { + .kb-search-content { + .card-img-top { + background-color: #3f4860; + } + } + } + + // list group circle for kb + .list-group-circle { + .list-group-item:not([class*='list-group-item-']), + .list-group-item-action { + &:hover, + &:focus, + &:active { + background-color: transparent !important; + } + } + } + + /********** APPLICATIONS **********/ + + // App common sidebar and content dark style + .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 + .email-application { + .content-area-wrapper { + // Email list + .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; + } + } + } + + // app email details + .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 { + .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 + .chat-application { + .content-area-wrapper { + border-color: $theme-dark-border-color; + } + // left sidebar + .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; + } + } + + // Right side content area + .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 conversation style + .active-chat { + .chat-left { + .chat-content { + background-color: $theme-dark-card-bg; + p { + color: $theme-dark-body-color; + } + } + } + + .chat-content { + p { + color: $white; + } + } + // Chat form + .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 dark style + .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-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 + .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; + } + } + } + + // E-commerce application + .ecommerce-application { + .ecommerce-card { + .btn-light { + background-color: $theme-dark-body-bg !important; + color: $white; + border-color: transparent; + } + } + + // main content + .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; + } + } + } + } + + // list and grid view + .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 + .wishlist-items { + .ecommerce-card { + .move-cart { + .move-to-cart { + color: $white; + } + } + } + } + + // checkout + .product-checkout { + .checkout-options { + .coupons { + input { + color: $theme-dark-body-color; + &::placeholder { + color: $theme-dark-body-color; + } + } + } + } + } + // Ecommerce details + .app-ecommerce-details { + .item-features, + .swiper-responsive-breakpoints.swiper-container .swiper-slide { + background-color: $theme-dark-body-bg; + } + } + } + + // file manager app + .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 App + .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; + } + } + } + } + } + + // calendar + .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 Application + .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; + } + } + + // Users Application + .app-user-view { + .plan-card { + border-color: $primary !important; + } + } + .app-user-edit { + .form-control.error { + border-color: $danger !important; + } + } + + /********** CUSTOMIZER **********/ + + .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 **********/ + .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..f8b3ad2 --- /dev/null +++ b/src/@core/scss/base/themes/semi-dark-layout.scss @@ -0,0 +1,109 @@ +// ================================================================================================ +// File Name: semi-dark-layout.scss +// Description: SCSS file for semi dark layout. +// ---------------------------------------------------------------------------------------------- +// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template +// Author: PIXINVENT +// Author URL: http://www.themeforest.net/user/pixinvent +// ================================================================================================ + +@import '../bootstrap-extended/include'; // Bootstrap includes +@import '../components/include'; // Components includes + +.semi-dark-layout { + /************ Main Menu **************/ + + // main menu + .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 + .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 active item color + .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..c310edb --- /dev/null +++ b/src/@core/scss/core.scss @@ -0,0 +1,13 @@ +@import './base/bootstrap.scss'; +@import './base/bootstrap-extended.scss'; +@import './base/colors.scss'; +@import './base/components.scss'; + +// Themes +@import './base/themes/dark-layout.scss'; +@import './base/themes/bordered-layout.scss'; +@import './base/themes/semi-dark-layout.scss'; +// @import './base/custom-rtl.scss'; + +// React Specific +@import 'react/index'; diff --git a/src/@core/scss/react/_base-extended.scss b/src/@core/scss/react/_base-extended.scss new file mode 100644 index 0000000..942c370 --- /dev/null +++ b/src/@core/scss/react/_base-extended.scss @@ -0,0 +1,174 @@ +// Layout +// ======================================================================== +body, +#root, +.wrapper { + height: 100%; +} + +// Vertical Menu +// ======================================================================== +.vertical-layout .main-menu { + &.expanded { + .navigation { + li:not(.open) { + & > ul { + display: block !important; + } + } + } + } + .navigation { + li:not(.open) { + a { + &:after { + transform: rotate(0deg) !important; + } + } + } + } +} + +body #root .wrapper .ps__rail-y { + left: auto !important ; + right: 1px !important; +} + +// Horizontal Menu +// ======================================================================== +.horizontal-layout { + &.navbar-static .navbar-scrolled { + background: $white !important; + box-shadow: rgba($black, 0.05) 0px 4px 20px 0px !important; + } + + // Main Navbar + .header-navbar { + .navbar-container { + .dropdown-language, + .dropdown-cart, + .dropdown-notification, + .dropdown-user { + .dropdown-menu { + top: 3rem !important; + } + } + } + } + + // Menu + .horizontal-menu-wrapper { + #main-menu-navigation { + .dropdown { + .dropdown-submenu { + .dropdown-toggle:after { + margin-top: -5px; + } + } + } + } + + .navbar-horizontal { + ul.dropdown-menu { + .nav-item.active > a { + border-bottom: none; + } + + // Scrollbar styles + &::-webkit-scrollbar { + width: 5px; + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background: $gray-500; + border-radius: 20px; + } + + &::-webkit-scrollbar-track { + background: $gray-300; + border-radius: 30px; + } + } + } + } +} + +// Bookmarks search +// ======================================================================== +.header-navbar .navbar-container { + .navbar-nav { + .autocomplete-container .suggestion-item span { + line-height: 1.2; + } + } +} + +// Component Code +// ======================================================================== +.card-snippet { + pre { + margin-top: 0; + border-radius: 0.5rem; + } +} + +// Dashboard Analytics +// ======================================================================= + +.card-congratulations { + .avatar svg { + height: 28px !important; + width: 28px !important; + } +} + +// Card Analytics +// ======================================================================= +.avg-session-progress { + height: 6px; +} + +// Block UI +// ======================================================================== +.block-ui-container { + .block-ui-overlay { + background: rgba($black, 0.6); + } +} + +// React SlideDown +// ======================================================================== +.react-slidedown { + &::-webkit-scrollbar { + width: 0px; + } +} + +// Router Transitions +// ======================================================================== +.animate__animated.animate__zoomIn, +.animate__animated.animate__fadeInLeft { + --animate-duration: 1s; +} + +// App Ecommerce +// ======================================================================== +.ecommerce-application { + .content-wrapper.animate__animated { + animation: none; + } +} + +// Customizer +// ======================================================================== +.customizer { + .react-select { + width: 100%; + max-width: 200px; + + .select__menu { + z-index: 2; + } + } +} diff --git a/src/@core/scss/react/_dark-layout.scss b/src/@core/scss/react/_dark-layout.scss new file mode 100644 index 0000000..58a20e4 --- /dev/null +++ b/src/@core/scss/react/_dark-layout.scss @@ -0,0 +1,72 @@ +@import '../base/bootstrap-extended/include'; +@import '../base/components/include'; + +.dark-layout { + // Autocomplete Navbar + .autocomplete-container { + .suggestions-list { + .suggestion-item { + &.suggestion-title-wrapper h6 { + color: $theme-dark-text-muted-color; + } + } + } + } + + // Ecommerce Application + .ecommerce-application .list-view .ecommerce-card .card-body { + border-right-color: $theme-dark-border-color; + } + + // Pagination Break + .pagination { + .break { + background-color: $theme-dark-pagination-bg; + a { + color: $theme-dark-body-color; + } + } + } + + // Invoice data table + .invoice-list-wrapper header { + background-color: $theme-dark-card-bg; + } + + // BlockUI + .block-ui-container { + .block-ui-overlay { + background: $theme-dark-body-bg; + } + .block-ui-message { + color: $theme-dark-body-color; + } + } + + // Form Control + .form-control { + background-color: transparent; + } + + // Apex Charts + .apexcharts-gridlines-vertical line { + stroke: $theme-dark-border-color; + } + + // Horizontal Menu Scrollbar + .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/react/_index.scss b/src/@core/scss/react/_index.scss new file mode 100644 index 0000000..35a321e --- /dev/null +++ b/src/@core/scss/react/_index.scss @@ -0,0 +1,10 @@ +// Base Extended (General styles which are not added 'base styles') +@import 'base-extended'; + +@import 'dark-layout'; + +@import 'rtl'; + +@import 'reactstrap/index'; + +@import 'app-loader'; diff --git a/src/@core/scss/react/_rtl.scss b/src/@core/scss/react/_rtl.scss new file mode 100644 index 0000000..155bc8f --- /dev/null +++ b/src/@core/scss/react/_rtl.scss @@ -0,0 +1,247 @@ +html[dir='rtl'] { + body .ps__rail-y { + right: auto !important; + left: 1px !important; + } + + // Scroll To Top + .scroll-to-top { + div:first-of-type { + left: auto !important; + right: 30px; + } + } + + // Vertical Menu Item Arrows + .vertical-layout.vertical-menu-modern { + .main-menu .navigation { + li.has-sub { + > a:after { + transform: rotate(-90deg) !important; + } + &:not(.open) { + > a:after { + transform: rotate(-180deg) !important; + } + } + } + } + } + + // Horizontal menu + .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-toggle::after { + background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $body-color), '#', '%23')); + } + + // Breadcrumbs + .breadcrumb:not([class*='breadcrumb-']), + .breadcrumb.breadcrumb-chevron { + .breadcrumb-item + .breadcrumb-item { + &:before { + transform: rotate(180deg); + } + } + } + + // Pagination + .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); + } + } + } + } + &:first-of-type, + &:last-of-type { + .page-link svg { + transform: rotate(180deg); + } + } + } + + // Popover + .popover { + left: auto !important; + } + + // Progress + .progress-bar-animated { + animation: progress-bar-stripes 40s linear infinite; + } + + // Tooltip + .bs-tooltip-left .arrow::before, + .bs-tooltip-auto[x-placement^='left'] .arrow::before { + border-width: 0.4rem 0 0.4rem 0.4rem; + border-right-color: $tooltip-bg; + } + + .bs-tooltip-left .arrow, + .bs-tooltip-auto[x-placement^='left'] .arrow { + left: 0; + right: auto; + + transform: rotate(180deg); + } + + .bs-tooltip-right .arrow::before, + .bs-tooltip-auto[x-placement^='right'] .arrow::before { + border-width: 0.4rem 0.4rem 0.4rem 0; + border-left-color: $tooltip-bg; + } + + .bs-tooltip-right .arrow, + .bs-tooltip-auto[x-placement^='right'] .arrow { + right: 0; + left: auto; + + transform: rotate(180deg); + } + + // App Email + .email-application { + .toggle-cc.mr-1 { + margin-right: 0 !important; + margin-left: 1rem !important; + } + } + + // App Calendar + .app-calendar { + .fc-toolbar { + .fc-prev-button, + .fc-next-button { + transform: rotate(180deg); + } + } + } + + // App Ecommerce + .app-ecommerce-details { + .swiper-button-next { + right: 0; + left: auto; + } + } + + // Invoice List + .invoice-list-table-header { + select { + background-position: calc(100% - (100% - 45px)) 13px, calc(100% - (100% - 20px)) 13px, 0% 0 !important; + } + } + + // TinyMCE + .tox-tinymce { + .tox-editor-header { + direction: ltr; + } + } + + // Apex Charts + .apexcharts-canvas { + .apexcharts-tooltip { + .apexcharts-tooltip-marker { + margin-right: 10px; + margin-left: 0 !important; + } + } + } + + // Context Menu + .react-contexify { + z-index: 1031; + } + + // Swiper + .swiper-button-next { + right: 10px !important; + left: auto !important; + } + + .swiper-button-prev { + left: 10px !important; + right: auto !important; + } + + // Flatpickr + .flatpickr-calendar { + .flatpickr-months { + svg { + transform: rotate(180deg); + } + } + } + + // Wizard + .bs-stepper { + &:not(.vertical) { + .bs-stepper-header .line svg { + transform: rotate(180deg); + } + } + .btn-next svg, + .btn-prev svg { + transform: rotate(180deg); + } + } + + // Datatables + .rdt_Table { + [aria-label='Expand Row'] { + svg { + transform: rotate(180deg); + } + } + } + + #profile-info { + .post { + .post-actions { + .share-post { + span.mr-1 { + margin-right: 0 !important; + } + } + } + } + } +} diff --git a/src/@core/scss/react/app-loader.scss b/src/@core/scss/react/app-loader.scss new file mode 100644 index 0000000..7183090 --- /dev/null +++ b/src/@core/scss/react/app-loader.scss @@ -0,0 +1,77 @@ +.loading { + position: absolute; + left: calc(50% - 35px); + top: 50%; + width: 55px; + height: 55px; + border-radius: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 3px solid transparent; + + &.component-loader { + margin-top: -60px; + } + + .effect-1, + .effect-2 { + position: absolute; + width: 100%; + height: 100%; + border: 3px solid transparent; + border-left: 3px solid rgba(121, 97, 249, 1); + border-radius: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + .effect-1 { + animation: rotate 1s ease infinite; + } + .effect-2 { + animation: rotateOpacity 1s ease infinite 0.1s; + } + .effect-3 { + width: 100%; + height: 100%; + border: 3px solid transparent; + border-left: 3px solid rgba(121, 97, 249, 1); + -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; + } +} +.fallback-logo { + position: absolute; + left: calc(50% - 45px); + top: 40%; +} + +@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/src/@core/scss/react/apps/app-calendar.scss b/src/@core/scss/react/apps/app-calendar.scss new file mode 100644 index 0000000..28a4241 --- /dev/null +++ b/src/@core/scss/react/apps/app-calendar.scss @@ -0,0 +1,49 @@ +// App Calendar +// ======================================================================== +@import '../../base/pages/app-calendar.scss'; + +.event-sidebar { + .badge:empty { + display: inline-block; + } + .react-select { + z-index: 2; + } +} + +html[dir='rtl'] { + .fc { + &.fc-direction-rtl .fc-scroller-harness > .fc-scroller { + direction: ltr !important; + } + .fc-header-toolbar { + .fc-prev-button, + .fc-next-button { + transform: rotate(180deg); + } + } + .fc-toolbar .fc-button-group { + .fc-dayGridMonth-button:first-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; + } + .fc-listMonth-button:last-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-event-main-frame { + flex-direction: row-reverse !important; + } + .fc-popover { + margin-right: 6.2rem; + } + .fc-daygrid-day-bottom { + text-align: left; + } + } +} diff --git a/src/@core/scss/react/apps/app-email.scss b/src/@core/scss/react/apps/app-email.scss new file mode 100644 index 0000000..21acea1 --- /dev/null +++ b/src/@core/scss/react/apps/app-email.scss @@ -0,0 +1,23 @@ +// App Email +// ======================================================================== + +@import '../../base/pages/app-email.scss'; + +// For editor height +.email-application { + #message-editor .rdw-editor-main { + min-height: 17.9rem; + } +} + +html[dir='rtl'] { + .email-application { + .email-app-details .email-detail-header { + .email-header-left .go-back svg, + .email-header-right .email-prev svg, + .email-header-right .email-next svg { + transform: rotate(180deg); + } + } + } +} diff --git a/src/@core/scss/react/apps/app-invoice.scss b/src/@core/scss/react/apps/app-invoice.scss new file mode 100644 index 0000000..dd9ec38 --- /dev/null +++ b/src/@core/scss/react/apps/app-invoice.scss @@ -0,0 +1,20 @@ +// App Invoice +// ======================================================================== + +@import '../../base/pages/app-invoice.scss'; + +.invoice-list-dataTable { + header { + padding-left: 1.5rem; + } +} + +@media (max-width: 482px) { + .invoice-list-dataTable { + header .actions-right { + select { + margin-top: 1rem; + } + } + } +} diff --git a/src/@core/scss/react/apps/app-todo.scss b/src/@core/scss/react/apps/app-todo.scss new file mode 100644 index 0000000..91b9ceb --- /dev/null +++ b/src/@core/scss/react/apps/app-todo.scss @@ -0,0 +1,10 @@ +// App Todo +// ======================================================================== + +@import '../../base/pages/app-todo.scss'; + +.todo-application { + .todo-item[draggable='true'] { + box-shadow: 0 0 10px 0 rgba(24, 28, 33, 0.25); + } +} diff --git a/src/@core/scss/react/apps/app-users.scss b/src/@core/scss/react/apps/app-users.scss new file mode 100644 index 0000000..f89b3fd --- /dev/null +++ b/src/@core/scss/react/apps/app-users.scss @@ -0,0 +1,19 @@ +// Users App +// ======================================================================== + +@import '../../base/pages/app-user.scss'; + +// Users avatar shadow +.users-avatar-shadow { + box-shadow: 2px 4px 14px 0 rgba(34, 41, 47, 0.4); +} + +// User view info +.users-page-view-table .user-info { + div { + padding: 0.5rem; + } + .user-info-title { + min-width: 140px; + } +} diff --git a/src/@core/scss/react/libs/charts/apex-charts.scss b/src/@core/scss/react/libs/charts/apex-charts.scss new file mode 100644 index 0000000..07e9ac6 --- /dev/null +++ b/src/@core/scss/react/libs/charts/apex-charts.scss @@ -0,0 +1,7 @@ +@import '../../../base/plugins/charts/chart-apex.scss'; + +.dark-layout { + .apexcharts-gridlines-vertical line { + stroke: $theme-dark-border-color; + } +} diff --git a/src/@core/scss/react/libs/charts/recharts.scss b/src/@core/scss/react/libs/charts/recharts.scss new file mode 100644 index 0000000..3e7aa93 --- /dev/null +++ b/src/@core/scss/react/libs/charts/recharts.scss @@ -0,0 +1,105 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +.recharts-wrapper { + height: 350px; +} + +// Tooltip +.recharts-tooltip-wrapper { + padding: 0.75rem; + background-color: $white; + border-radius: 5px; + border: 1px solid $border-color; + box-shadow: 2px 2px 6px -4px #999; +} + +// Grid Color +.recharts-cartesian-grid, +.recharts-polar-grid-angle, +.recharts-yAxis, +.recharts-xAxis { + line { + stroke: $border-color; + } +} + +.recharts-polar-grid-concentric { + .recharts-polar-grid-concentric-polygon { + stroke: $border-color; + } +} + +.recharts-polar-radius-axis-line { + stroke: $border-color; +} + +.recharts-cartesian-axis-tick-value tspan, +.recharts-polar-angle-axis-tick-value tspan { + font-size: 0.85rem; + color: $body-color; +} + +// Vertical Tooltip Line +.recharts-curve.recharts-tooltip-cursor { + display: none; +} +.recharts-wrapper.bar-chart { + .recharts-tooltip-cursor { + fill: transparent; + } +} + +// Dark Layout +.dark-layout { + // Tooltip + .recharts-tooltip-wrapper { + padding: 0.75rem; + background-color: $theme-dark-card-bg; + border-radius: 5px; + border: 1px solid $theme-dark-border-color; + box-shadow: 2px 2px 6px -4px #999; + } + + // Grid Color + .recharts-cartesian-grid, + .recharts-polar-grid-angle, + .recharts-yAxis, + .recharts-xAxis { + line { + stroke: $theme-dark-border-color; + } + } + + .recharts-polar-grid-concentric { + .recharts-polar-grid-concentric-polygon { + stroke: $theme-dark-border-color; + } + } + + .recharts-polar-radius-axis-line { + stroke: $theme-dark-border-color; + } + + .recharts-cartesian-axis-line, + .recharts-cartesian-axis-tick-line { + display: none; + } + + .recharts-sector.recharts-radial-bar-background-sector { + fill: $theme-dark-body-bg; + } + + text { + fill: $white; + } + .recharts-sector { + stroke: transparent; + } +} + +html[dir='rtl'] { + .recharts-wrapper { + direction: rtl; + } +} diff --git a/src/@core/scss/react/libs/context-menu/context-menu.scss b/src/@core/scss/react/libs/context-menu/context-menu.scss new file mode 100644 index 0000000..aa4a326 --- /dev/null +++ b/src/@core/scss/react/libs/context-menu/context-menu.scss @@ -0,0 +1,36 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +.react-contexify { + 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; + .react-contexify__item { + .react-contexify__item__content { + padding: $dropdown-item-padding-y $dropdown-item-padding-x; + color: $dropdown-color; + } + &:hover { + > .react-contexify__item__content { + background-color: $dropdown-link-hover-bg !important; + color: $primary; + } + } + } +} + +// Dark Layout +.dark-layout { + .react-contexify { + background-color: $theme-dark-body-bg; + border-color: $theme-dark-border-color; + } + .react-contexify__item { + .react-contexify__item__content { + color: $theme-dark-body-color; + } + } +} diff --git a/src/@core/scss/react/libs/drag-and-drop/drag-and-drop.scss b/src/@core/scss/react/libs/drag-and-drop/drag-and-drop.scss new file mode 100644 index 0000000..6f93b87 --- /dev/null +++ b/src/@core/scss/react/libs/drag-and-drop/drag-and-drop.scss @@ -0,0 +1,21 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; +@import '../../../base/plugins/extensions/ext-component-drag-drop.scss'; + +.sortable-selected { + background-color: $body-bg; +} + +// Dark +.dark-layout { + .sortable-selected { + background-color: $theme-dark-body-bg !important; + } +} + +// RTL +html[dir='rtl'] { + .sortable-row { + flex-direction: row-reverse; + } +} diff --git a/src/@core/scss/react/libs/editor/editor.scss b/src/@core/scss/react/libs/editor/editor.scss new file mode 100644 index 0000000..26f6762 --- /dev/null +++ b/src/@core/scss/react/libs/editor/editor.scss @@ -0,0 +1,71 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +@import '~react-draft-wysiwyg/dist/react-draft-wysiwyg.css'; + +.rdw-editor-wrapper { + .rdw-editor-toolbar { + margin-bottom: 0; + padding: 0.5rem; + padding-bottom: 0; + border-color: $border-color; + border-top-left-radius: $border-radius; + border-top-right-radius: $border-radius; + .rdw-option-wrapper { + border: none; + &.rdw-option-active { + box-shadow: none; + background-color: rgba($color: $primary, $alpha: 0.2); + } + &:hover { + box-shadow: none; + } + } + .rdw-dropdown-wrapper { + border: 1px solid $border-color; + .rdw-dropdown-optionwrapper { + &:hover { + box-shadow: none; + } + } + &:hover { + box-shadow: none; + } + } + .rdw-link-modal, + .rdw-embedded-modal { + height: auto; + } + } + .rdw-editor-main { + min-height: 10rem; + padding: 0.5rem 1.2rem; + border: 1px solid $border-color; + border-bottom-left-radius: $border-radius; + border-bottom-right-radius: $border-radius; + } + .rdw-editor-toolbar ~ .rdw-editor-main { + border-top: none; + } + + &.toolbar-bottom { + display: flex; + flex-direction: column; + .rdw-editor-toolbar { + order: 2; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: $border-radius; + border-bottom-right-radius: $border-radius; + } + .rdw-editor-main { + border-top: 1px solid $border-color; + border-bottom: 0; + border-top-left-radius: $border-radius; + border-top-right-radius: $border-radius; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + order: 1; + } + } +} diff --git a/src/@core/scss/react/libs/file-uploader/file-uploader.scss b/src/@core/scss/react/libs/file-uploader/file-uploader.scss new file mode 100644 index 0000000..a5e6bc4 --- /dev/null +++ b/src/@core/scss/react/libs/file-uploader/file-uploader.scss @@ -0,0 +1,29 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +.uppy-Root { + border-radius: $border-radius; + border-color: $primary; + + &.uppy-DragDrop-container:focus { + box-shadow: none; + } + + .uppy-DragDrop-arrow { + fill: $primary; + } + + .uppy-DragDrop-label { + color: $body-color; + } + + .uppy-DragDrop-browse { + color: $primary; + } +} + +.dark-layout { + .uppy-Root { + background-color: $theme-dark-body-bg; + } +} diff --git a/src/@core/scss/react/libs/flatpickr/flatpickr.scss b/src/@core/scss/react/libs/flatpickr/flatpickr.scss new file mode 100644 index 0000000..1958b0f --- /dev/null +++ b/src/@core/scss/react/libs/flatpickr/flatpickr.scss @@ -0,0 +1,2 @@ +@import '~flatpickr/dist/flatpickr.css'; +@import '../../../base/plugins/forms/pickers/form-flat-pickr'; diff --git a/src/@core/scss/react/libs/maps/map-leaflet.scss b/src/@core/scss/react/libs/maps/map-leaflet.scss new file mode 100644 index 0000000..016d138 --- /dev/null +++ b/src/@core/scss/react/libs/maps/map-leaflet.scss @@ -0,0 +1,37 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; +@import '../../../base/plugins/maps/map-leaflet.scss'; + +.leaflet-map { + [class*='leaflet-control-zoom-'] { + background-color: $white; + &:hover { + color: $black; + } + } +} + +html[dir='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/react/libs/noui-slider/noui-slider.scss b/src/@core/scss/react/libs/noui-slider/noui-slider.scss new file mode 100644 index 0000000..226490d --- /dev/null +++ b/src/@core/scss/react/libs/noui-slider/noui-slider.scss @@ -0,0 +1,23 @@ +@import '~nouislider/distribute/nouislider.css'; +@import '../../../base/plugins/extensions/ext-component-sliders.scss'; +@import '../../../base/core/colors/palette-noui'; + +html[dir='rtl'] .noUi-horizontal { + .noUi-origin { + left: auto !important; + right: 0 !important; + .noUi-handle { + right: -10px; + left: auto; + } + } + .noUi-connects { + .noUi-connect { + left: 0; + transform-origin: 100% 100%; + } + } + .noUi-value-horizontal { + transform: translate(-50%, 50%); + } +} diff --git a/src/@core/scss/react/libs/react-select/_react-select.scss b/src/@core/scss/react/libs/react-select/_react-select.scss new file mode 100644 index 0000000..8986ae8 --- /dev/null +++ b/src/@core/scss/react/libs/react-select/_react-select.scss @@ -0,0 +1,161 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +// InValid Select +.react-select.is-invalid { + .select__control { + border-color: $danger; + } +} + +// Select Control(Input) +.select__control, +.react-select__control { + &.select__control--is-disabled { + border-color: $border-color; + .select__indicator-separator { + background-color: $border-color; + } + } + + &.select__control--is-focused, + &.react-select__control--is-focused { + box-shadow: none; + border-color: $primary; + } + + .select__indicator svg { + cursor: pointer; + } + + .select__indicator-separator { + display: none; + } + .select__single-value { + color: $body-color; + } + + .select__placeholder { + color: $body-color; + } +} + +// Select Menu +.select__menu, +.react-select__menu { + .select__menu-list, + .react-select__menu-list { + .select__option, + .react-select__option { + cursor: pointer; + + &.select__option--is-focused { + background-color: rgba($color: $primary, $alpha: 0.12); + color: $primary; + } + + &.select__option--is-selected { + background-color: $primary; + color: $white; + } + } + } + + .select__menu-list, + .react-select__menu-list { + .select__group { + .select__group-heading { + margin-bottom: 0.5rem; + color: $headings-color; + font-weight: bolder; + font-size: inherit; + } + } + } +} + +// Multi Select +.select__multi-value, +.react-select__multi-value { + color: $white; + border-radius: 3px; + margin: 0 0.7rem 0 0; + + .select__multi-value__label { + color: $white; + font-size: 0.85rem; + border-radius: $border-radius; + padding: 0.26rem 0.6rem; + } + + .select__multi-value__remove { + padding-left: 0; + padding-right: 0.5rem; + + &:hover { + background-color: inherit; + color: inherit; + } + + svg { + height: 0.85rem; + width: 0.85rem; + &:hover { + cursor: pointer; + } + } + } +} + +// Select Borderless +.select-borderless { + .select__control { + border: 0; + .select__indicators { + display: none; + } + } +} + +// Dark Layout +.dark-layout { + .select__control { + background-color: $theme-dark-input-bg; + border-color: $theme-dark-border-color; + + .select__indicator svg { + fill: $theme-dark-body-color; + } + + .select__indicator span, + .select__single-value { + color: $theme-dark-body-color; + } + + .select__multi-value { + background-color: rgba($color: $primary, $alpha: 0.12); + .select__multi-value__label { + color: $primary; + } + } + .select__multi-value__remove { + svg { + fill: $primary; + } + &:hover { + background-color: transparent !important; + } + } + + .select__placeholder { + color: $theme-dark-input-placeholder-color; + } + + &.select__control--is-disabled { + opacity: 0.5; + } + } + .select__menu { + background-color: $theme-dark-card-bg; + } +} diff --git a/src/@core/scss/react/libs/shepherd-tour/shepherd-tour.scss b/src/@core/scss/react/libs/shepherd-tour/shepherd-tour.scss new file mode 100644 index 0000000..0f20efe --- /dev/null +++ b/src/@core/scss/react/libs/shepherd-tour/shepherd-tour.scss @@ -0,0 +1,11 @@ +@import '../../../base/plugins/extensions/ext-component-tour.scss'; + +.shepherd-element { + .shepherd-content { + .shepherd-button { + background: inherit; + color: $primary; + border-radius: $btn-border-radius; + } + } +} diff --git a/src/@core/scss/react/libs/swiper/swiper.scss b/src/@core/scss/react/libs/swiper/swiper.scss new file mode 100644 index 0000000..230392c --- /dev/null +++ b/src/@core/scss/react/libs/swiper/swiper.scss @@ -0,0 +1,11 @@ +@import '~swiper/swiper-bundle.css'; +@import '../../../base/plugins/extensions/ext-component-swiper.scss'; + +html[dir='rtl'] { + .swiper-container-cube .swiper-slide { + transform-origin: 0 100% !important; + } + .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: left top; + } +} diff --git a/src/@core/scss/react/libs/tables/react-dataTable-component.scss b/src/@core/scss/react/libs/tables/react-dataTable-component.scss new file mode 100644 index 0000000..2d976bd --- /dev/null +++ b/src/@core/scss/react/libs/tables/react-dataTable-component.scss @@ -0,0 +1,174 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +.react-dataTable { + border-radius: 0; + .rdt_TableHead { + .rdt_TableHeadRow { + background-color: $table-head-bg; + border-top: 1px solid; + border-color: $border-color; + min-height: 0; + height: 38px; + + .rdt_TableCol { + padding: 0.72rem 1.5rem; + .rdt_TableCol_Sortable { + color: $body-color; + font-weight: bold; + font-style: 0.857rem; + letter-spacing: 0.5px; + text-transform: uppercase; + &:hover { + color: $body-color; + } + } + } + } + } + + .rdt_TableBody { + .rdt_TableRow { + .rdt_TableCell { + height: 53px; + padding: 0.72rem 1.5rem; + + .column-action { + svg { + stroke: $body-color; + } + + .dropdown-item:hover { + svg { + stroke: $primary; + } + } + + .dropdown-item:active { + svg { + stroke: $white; + } + } + } + } + } + } + + .react-paginate { + &.separated-pagination { + .page-item:first-child .page-link, + .page-item:last-child .page-link { + border-radius: 50%; + } + } + } +} + +.rdt_Pagination { + select { + min-width: 30px; + &:focus, + &:active { + outline: 0; + } + } +} + +.dataTable-filter { + max-width: 220px; +} + +.dataTable-select { + width: 5rem; + &:not([multiple='multiple']) { + margin-left: 0.25rem; + margin-right: 0.25rem; + background-position: calc(100% - 12px) 10px, calc(100% - 20px) 12px, 100% 0; + background-size: 10px 10px, 10px 10px; + } +} + +.dark-layout { + .app-user-list { + header { + background-color: $theme-dark-card-bg; + } + } + + .react-dataTable { + .hlidmt { + background-color: $theme-dark-card-bg; + } + .khKjDK { + background-color: $theme-dark-card-bg; + color: $theme-dark-body-color; + } + + .rdt_Table { + background: $theme-dark-table-header-bg; + color: $theme-dark-body-color; + } + .rdt_TableHead { + .rdt_TableHeadRow { + background-color: $theme-dark-table-header-bg; + border-color: $theme-dark-border-color; + .rdt_TableCol { + color: $theme-dark-body-color; + div[role='button'] { + color: $theme-dark-body-color; + } + } + .rdt_TableCol_Sortable, + .rdt_TableCol_Sortable:hover { + color: $theme-dark-headings-color; + svg { + stroke: $theme-dark-headings-color; + } + } + } + } + .rdt_TableBody { + .expandable-content { + background-color: $theme-dark-table-bg; + color: $theme-dark-body-color; + } + .rdt_TableRow { + background-color: $theme-dark-table-bg; + color: $theme-dark-body-color; + border-color: $theme-dark-border-color; + .rdt_TableCell { + color: $theme-dark-body-color; + } + button { + &:hover:not(:disabled) { + background-color: $theme-dark-body-bg; + } + svg { + color: $theme-dark-body-color; + } + } + } + } + .rdt_Pagination { + background-color: $theme-dark-table-bg; + color: $theme-dark-body-color; + + svg { + fill: $theme-dark-body-color; + } + } + } + + .rdt_Pagination { + color: $theme-dark-body-color; + background-color: $theme-dark-card-bg; + button { + svg { + fill: $theme-dark-body-color; + } + &[disabled] svg { + fill: $theme-dark-text-muted-color; + } + } + } +} diff --git a/src/@core/scss/react/libs/toastify/toastify.scss b/src/@core/scss/react/libs/toastify/toastify.scss new file mode 100644 index 0000000..abac116 --- /dev/null +++ b/src/@core/scss/react/libs/toastify/toastify.scss @@ -0,0 +1,135 @@ +@import '~react-toastify/dist/ReactToastify.css'; +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; +@import '../../../base/core/colors/palette-variables'; + +.Toastify__toast { + background-color: $white; + border-radius: $toast-border-radius; + box-shadow: $toast-box-shadow; + padding: 1rem; + .Toastify__toast-body, + .Toastify__close-button { + color: $body-color; + } + + .toastify-header { + padding-bottom: 0.5rem; + display: flex; + justify-content: space-between; + align-items: center; + .title-wrapper { + display: flex; + align-items: center; + + .avatar svg { + height: 0.85rem; + width: 0.85rem; + } + } + .toast-title { + color: $headings-color; + font-weight: 600; + margin-left: 0.75rem; + margin-bottom: 0; + } + } + + .toastify-body { + color: $body-color; + padding-left: 2.3rem; + font-size: 0.85rem; + font-family: $font-family-sans-serif; + } + + .Toastify__close-button { + opacity: 1; + margin-top: 1px; + margin-left: 0.5rem; + svg { + height: 0.85rem; + width: 0.85rem; + fill: $headings-color; + } + &:hover svg { + fill: $headings-color; + } + &:focus { + outline: 0; + } + } + + &.Toastify__toast--default { + .toast-title { + color: $primary; + } + } + + &.Toastify__toast--error { + .toast-title { + color: $danger; + } + .Toastify__progress-bar { + background-color: $danger; + } + } + + @each $color_name, $color in $colors { + @each $color_type, $color_value in $color { + @if $color_type== 'base' { + &.Toastify__toast--#{$color_name} { + .toast-title { + color: $color_value; + } + .Toastify__progress-bar { + background-color: $color_value; + } + } + } + } + } +} + +// Progress Bar +.Toastify__progress-bar { + bottom: 0; + border-top-right-radius: $border-radius; + border-bottom-right-radius: $border-radius; + &.Toastify__progress-bar--default { + background: $primary; + } +} + +// Dark Layout +.dark-layout { + .Toastify__toast { + background-color: $theme-dark-card-bg; + box-shadow: 0 2px 20px 0 rgba($black, 0.3); + .Toastify__toast-body, + .Toastify__close-button { + color: $theme-dark-body-color; + } + + .toastify-body { + color: $theme-dark-body-color; + } + + .Toastify__close-button { + svg { + fill: $theme-dark-body-color; + } + &:hover svg { + fill: $headings-color; + } + } + } +} + +// Media Queries +@media (max-width: 480px) { + .Toastify__toast-container { + .Toastify__toast + .Toastify__toast { + margin-top: 1rem; + } + } +} diff --git a/src/@core/scss/react/pages/page-account-settings.scss b/src/@core/scss/react/pages/page-account-settings.scss new file mode 100644 index 0000000..e5d69e6 --- /dev/null +++ b/src/@core/scss/react/pages/page-account-settings.scss @@ -0,0 +1,44 @@ +// Account Settings +// ======================================================================== + +.account-settings-tab { + box-shadow: none; + .nav-item { + .nav-link.active { + background-color: transparent !important; + transform: translateY(0) !important; + &:after { + left: auto !important; + top: 1.2rem !important; + right: -1.5rem !important; + } + } + } +} + +.account-setting-wrapper { + .account-settings-tab { + .nav-item { + .nav-link { + &.active { + &:after { + top: 100% !important; + left: 0 !important; + } + } + } + } + } +} + +@media (max-width: 576px) { + .account-settings-tab { + .nav-item { + .nav-link.active { + &:after { + display: none; + } + } + } + } +} diff --git a/src/@core/scss/react/pages/page-profile.scss b/src/@core/scss/react/pages/page-profile.scss new file mode 100644 index 0000000..bf57ed5 --- /dev/null +++ b/src/@core/scss/react/pages/page-profile.scss @@ -0,0 +1,24 @@ +// Profile +// ======================================================================= +@import '../../base/bootstrap-extended/include'; +@import '../../base/pages/page-profile'; + +#user-profile { + .profile-load-more { + position: relative; + overflow: hidden; + .ui-loader { + position: unset; + .overlay { + left: 0; + } + .loader { + top: 60%; + } + .spinner-border { + width: 20px; + height: 20px; + } + } + } +} diff --git a/src/@core/scss/react/reactstrap/_carousel.scss b/src/@core/scss/react/reactstrap/_carousel.scss new file mode 100644 index 0000000..d51b3be --- /dev/null +++ b/src/@core/scss/react/reactstrap/_carousel.scss @@ -0,0 +1,11 @@ +// Component App Collapse +// ======================================================================== + +html[dir='rtl'] { + .carousel { + .carousel-control-next-icon, + .carousel-control-prev-icon { + transform: rotate(180deg); + } + } +} diff --git a/src/@core/scss/react/reactstrap/_collapse.scss b/src/@core/scss/react/reactstrap/_collapse.scss new file mode 100644 index 0000000..7215ebe --- /dev/null +++ b/src/@core/scss/react/reactstrap/_collapse.scss @@ -0,0 +1,21 @@ +// Component App Collapse +// ======================================================================== +.app-collapse { + &.card { + .card-header { + padding: 1rem; + } + + svg { + transition: all 300ms linear 0s; + } + .card-header:not(.collapsed) { + svg { + transform: rotate(180deg); + } + } + } + .collapse-title { + max-width: calc(100% - 25px); + } +} diff --git a/src/@core/scss/react/reactstrap/_dropdown.scss b/src/@core/scss/react/reactstrap/_dropdown.scss new file mode 100644 index 0000000..6221b60 --- /dev/null +++ b/src/@core/scss/react/reactstrap/_dropdown.scss @@ -0,0 +1,49 @@ +// Component Dropdown +// ======================================================================== + +// Navbar Dropdowns +.dropdown-notification, +.dropdown-cart { + .dropdown-menu { + left: inherit !important; + } +} + +.dropdown-language { + .country-flag { + height: 18px !important; + width: 18px !important; + } + + .dropdown-menu { + left: auto !important; + } +} + +.dropdown-user { + .dropdown-menu { + left: auto !important; + right: 0; + } +} + +// Global +.dropdown-menu { + .dropdown-item:focus { + outline: 0; + } +} + +// Dropdown Icon +.dropdown-icon-wrapper { + .dropdown-toggle:after { + display: none; + } + .dropdown-menu { + min-width: auto; + .dropdown-item { + padding: 0.5rem 1.1rem; + cursor: pointer; + } + } +} diff --git a/src/@core/scss/react/reactstrap/_index.scss b/src/@core/scss/react/reactstrap/_index.scss new file mode 100644 index 0000000..4f8a7f4 --- /dev/null +++ b/src/@core/scss/react/reactstrap/_index.scss @@ -0,0 +1,9 @@ +@import '../../base/bootstrap-extended/include'; + +@import 'input'; +@import 'toast'; +@import 'switch'; +@import 'dropdown'; +@import 'collapse'; +@import 'carousel'; +@import 'pagination'; diff --git a/src/@core/scss/react/reactstrap/_input.scss b/src/@core/scss/react/reactstrap/_input.scss new file mode 100644 index 0000000..b6370f6 --- /dev/null +++ b/src/@core/scss/react/reactstrap/_input.scss @@ -0,0 +1,23 @@ +// Component Input +// ======================================================================== + +.form-control[readonly] { + opacity: 0.5; +} + +select.form-control[multiple] { + background-image: none !important; +} + +.input-group { + .form-control.is-invalid ~ .input-group-append .input-group-text { + border-color: $danger; + } + &.is-invalid { + .form-control, + .input-group-append .input-group-text, + .input-group-prepend .input-group-text { + border-color: $danger !important; + } + } +} diff --git a/src/@core/scss/react/reactstrap/_pagination.scss b/src/@core/scss/react/reactstrap/_pagination.scss new file mode 100644 index 0000000..b1038cd --- /dev/null +++ b/src/@core/scss/react/reactstrap/_pagination.scss @@ -0,0 +1,39 @@ +// Component Pagination +// ======================================================================== +.pagination { + &.react-paginate { + .page-item.prev, + .page-item.next { + a.page-link:before, + a.page-link:after { + height: 16.5px; + margin-top: 1px; + } + } + &.pagination-sm { + .page-item.prev, + .page-item.next { + a.page-link:before, + a.page-link:after { + height: 15px; + } + } + } + &.pagination-lg { + .page-item.prev, + .page-item.next { + a.page-link:before, + a.page-link:after { + height: 19px; + } + } + } + } + + &.no-navigation { + li:first-of-type, + li:last-of-type { + display: none; + } + } +} diff --git a/src/@core/scss/react/reactstrap/_switch.scss b/src/@core/scss/react/reactstrap/_switch.scss new file mode 100644 index 0000000..4b87161 --- /dev/null +++ b/src/@core/scss/react/reactstrap/_switch.scss @@ -0,0 +1,6 @@ +// Switch +// ======================================================================= +[dir] .custom-control-input:checked ~ .custom-control-label::before { + border-color: $primary; + background-color: $primary; +} diff --git a/src/@core/scss/react/reactstrap/_toast.scss b/src/@core/scss/react/reactstrap/_toast.scss new file mode 100644 index 0000000..35046cb --- /dev/null +++ b/src/@core/scss/react/reactstrap/_toast.scss @@ -0,0 +1,17 @@ +// Component Toast +// ======================================================================== + +.dark-layout { + .card { + .toast { + background-color: rgba($color: $theme-dark-body-bg, $alpha: 0.85); + .toast-header { + background-color: $theme-dark-body-bg; + + .close { + color: $theme-dark-body-color; + } + } + } + } +} diff --git a/src/App.js b/src/App.js new file mode 100644 index 0000000..c719469 --- /dev/null +++ b/src/App.js @@ -0,0 +1,6 @@ +// ** Router Import +import Router from './router/Router' + +const App = props => + +export default App diff --git a/src/App.test.js b/src/App.test.js new file mode 100644 index 0000000..ac31590 --- /dev/null +++ b/src/App.test.js @@ -0,0 +1,8 @@ +import ReactDOM from 'react-dom' +import App from './App' + +it('renders without crashing', () => { + const div = document.createElement('div') + ReactDOM.render(, div) + ReactDOM.unmountComponentAtNode(div) +}) diff --git a/src/apitest.http b/src/apitest.http new file mode 100644 index 0000000..2614d15 --- /dev/null +++ b/src/apitest.http @@ -0,0 +1,164 @@ +@host = http://localhost:8080 +### +# 약관조회 호출 +GET {{host}}/api/acnt/terms/list?siteCd=SANDBOX&langDivCd=KOR HTTP/1.1 +Content-Type: application/json + +### +# SMS 전송 모듈 실행 +GET {{host}}/api/acnt/crtfyhp/register/send?hpno=01099162431 + + +### +# SMS 확인 API +GET {{host}}/api/acnt/crtfyhp/register/confirm?hpno=01099162432&crtfyNo=751390 + +### +#회원 가입 +POST {{host}}/api/acnt/cstmr/register HTTP/1.1 +content-Type: application/json + +{ + "cstrmDivCd" : "MEMBER", + "cstrmStatusCd" : "A", + "userId" : "test1", + "authId" : "USER", + "siteCode" : "SANDBOX", + "memberDivCd" : "PERSON", + "userPswd" : "1234", + "ipinDi" : "", + "ipinCi" : "", + "joinCrtfyCd": "NOCRTFD", + "cntryCd" :"KOR", + "genderCd" : "M", + "memberName" : "사용자", + "brthdyDate" : "1984-01-23", + "email" : "lyhand@naver.com", + "hpno" : "010-9916-2432", + "clncd" : "+82", + "terms" : [ + {"termsSno" : 1 , "agreeYn" : "Y"} , {"termsSno" : 2 , "agreeYn" : "Y" } + ] +} + +### +## 로그인 테스트 +POST {{host}}/api/acnt/jwt/login +content-Type: application/json + +{ + "userId" : "lyhand", + "userPswd" : "kang!469" + +} + +### +GET {{host}}/api/acnt/jwt/profile/46 +Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJseWhhbmQiLCJjc3RtclNubyI6NDYsImV4cCI6MTYyODA1MTcxNCwidXNlcklkIjoibHloYW5kIiwiaWF0IjoxNjI4MDUxNDE0fQ.SFq2bIwKvkk2xeshZ0d4swGM6p_uA_KInVL3L4OZOe_QlfbOyVEgWoruQmXrgZExnWnZyND3qVXb_QU82Fy9PQ +content-Type: application/json + + +### +POST {{host}}/api/acnt/jwt/refresh +content-Type: application/json + +{ + "cstmrSno" : 46, + "refreshToken" : "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJseWhhbmQiLCJjc3RtclNubyI6NDYsImV4cCI6MTYyOTg3OTY5MSwidXNlcklkIjoibHloYW5kIiwiaWF0IjoxNjI4MDY1MjkxfQ.Tc_KvrR65-8OsC_mYufcjCo2E8O-hU7O6H-EipMko4S6XyffXPfKBfrZR8GgvR9Bgn85e6mOdt8-A_i4hulXyQ" + +} + + + +#### +#현대 자동차 테스트 +POST {{host}}/rest/front/sales/save HTTP/1.1 +content-Type: application/json + +{ + "adInfoCjgtAgrYn" : "Y", + "cstmrSno" : 750, + "irdVehlBrandC" : "1", + "vstCd": "01", + "hpCtfnYn" : "Y", + "irdVehlCd" : "A001", + "irdVehlNm" : "뉴 산타페 신형(2020)" +} + +#### +#현대 자동차 테스트 +POST {{host}}/rest/front/sales/save HTTP/1.1 +content-Type: application/json + +{ + "adInfoCjgtAgrYn" : "N", + "cstmrSno" : 750, + "vstCd": "01", + "hpCtfnYn" : "Y" +} + + +### +#code 값 불러오기 테스트 +POST {{host}}/code/list HTTP/1.1 +content-Type: application/json + +{ + "groupCd" : "IRD_VEHL_CD", + "langDivCd" : "ko", + "upperCd" : "G" +} + + +### IF 테스트 +POST {{host}}/rest/front/sales/if +content-Type: application/json + +{ + "ifSno" : 1 +} +### +POST https://devdash.hyundai.com:8065/HiCRM/v10/api/prs/regist +Content-Type: application/json +apiKey : 54afbee2-126d-44c2-a64d-43fa7dbfb76a + +rzW9sHfQ8sUtF5jR1BjOettS9S+tAQ29WIWwkjI5Zh5l+BjeXSykzqUe1snkTZZkitXKBZ4m4U82UuoE1zu87qYHWpaGgfo36SeKt0l9enNNyAcoYqZURX5+9fOBR0pg+NML0KvnDwpztomlMQ1rJxYkj0GXgk1m/fRWLQqIAc4rXBZWmzbqAiHElJz36cGl4SCIxMnnREe9Ipw/p0zVUPKaZ9KbEFFYz2q134vLLEG/QP5L63fjh5hpjBXgs9oKRtktOJRT/2su8kMMR3JWPfwvrDdPsJnzQstm8F1cqzoCN1M+GQVJEfD+MQmlW7kVK0Mc8E+QbkQKU1u+BjHweftOK8JleEJSlI/qZ0yVTcttYslTRSvjwSQc6CeBamd17UfSMLgcY9dze5oQOMJNtyK4ybnTfoJ8EXzdGtV+ln4fqAI23mHsrUy17EjPSl471x7DvQWfO6difiQAXEC730uBmyHmYHTLN5rabH7VbDVmHO2TrZSjU64hXtPQpbBQVjalPnLtoysSVVMA4ntmjX/fPM2Jz9DYK6LtTHS9cgtnhI9sz1xfe5eUdlN6iX5dyJLG0A+7FhZoR39RwcINprmvtL9yekNQgEq3m3qLqGSDDTuyqDEPNBAbkvq+otIshaDiAkjL+P1P8Q18XHVD6jPTuFyil9PbmDczgHbzQHz756WW1y54Ex9Sp2k3hnOBn4hzEaYdLEvXW5CcslgRcogBaPEXEY3nhd6One9hz9Yh+zQD6GE6w/nzu0tLzllJa1p24sE8godUJT/QIykNjR8ZqVoav8evLnKz2gd652sY2PQsBgVRERmoy4MIZTCH4oqa5oOBrGpE4NiMNjqWSw== + +### +POST https://dash.hyundai.com:8065/HiCRM/v10/api/prs/regist +content-Type: application/json +apiKey : 21ce96d8-0550-4cc3-8190-80878cb3e62d + +{"TLM_RCPM_YN":"N", +"SALE_OPTY_ORG_CD":"B37", +"PSN_INFO_CJGT_AGR_YMD":"20210601", +"AD_INFO_CJGT_AGR_YN":"N", +"FRT_DGT_NO":"9916", +"PSN_INFO_CJGT_AGR_YN":"Y", +"EML_RCPM_YN":"N", +"DM_RCPM_YN":"N", +"HP_CTFN_YN":"Y", +"SMS_RCPM_YN":"N", +"REAR_DGT_NO":"2432", +"HLDG_FNH_YMD":"20210701", +"AD_INFO_CJGT_AGR_DTM":null, +"CFGRT_ORG_NM":"송파대로", +"MBCC_NO":"010", +"SALE_OPTY_ORG_NM":"송파대로", +"FAX_RCPM_YN":"N", +"IRD_VEHL_BRAND_C":null, +"CHAN_SCN_CD":"14", +"HLDG_STRT_YMD":"20210601", +"IRD_VEHL_NM":null, +"SEX_CD":"1", +"CSMR_NM":"강찬구", +"CHAN_DTL_SCN_CD":"AA", +"TSRD_CTR_ORG_NM":"B37", +"TYMD":"19840123", +"RGST_DTM":"20210728141243"} + +### +# 히스토리 조회 +GET http://localhost:8080/api/anls/hstry/list?stDate=2021-08-04&endDate=2021-08-06&search1= +content-Type: application/json +authorization: palnet eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJseWhhbmQiLCJjc3RtclNubyI6NDYsImV4cCI6MTYyODE0NTQzNywidXNlcklkIjoibHloYW5kIiwiaWF0IjoxNjI4MTQ1Mzc3fQ.gCmzccoEY_AQcMeOUSNJM85bGR95M-2lKSNcx70RYZSaTyZ35t5YVwIh6jnBcR7ivkrnj52Wg8kIwecWGa2qTQ diff --git a/src/assets/control/icon/drone.png b/src/assets/control/icon/drone.png new file mode 100644 index 0000000..ae48796 Binary files /dev/null and b/src/assets/control/icon/drone.png differ diff --git a/src/assets/css/custom.css b/src/assets/css/custom.css new file mode 100644 index 0000000..20f7107 --- /dev/null +++ b/src/assets/css/custom.css @@ -0,0 +1,720 @@ +@charset "utf-8"; +@import url(http://fonts.googleapis.com/earlyaccess/notosanskr.css); +@font-face {font-family: 'NotoSansKR';font-style: normal;font-weight: 100;src: url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Thin.woff2) format('woff2'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Thin.woff) format('woff'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Thin.otf) format('opentype');} +@font-face {font-family: 'NotoSansKR';font-style: normal;font-weight: 300;src: url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.woff2) format('woff2'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.woff) format('woff'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Light.otf) format('opentype');} +@font-face {font-family: 'NotoSansKR';font-style: normal;font-weight: 400;src: url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.woff2) format('woff2'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.woff) format('woff'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Regular.otf) format('opentype');} +@font-face {font-family: 'NotoSansKR';font-style: normal;font-weight: 500;src: url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.woff2) format('woff2'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.woff) format('woff'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Medium.otf) format('opentype');} +@font-face {font-family: 'NotoSansKR';font-style: normal;font-weight: 700;src: url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.woff2) format('woff2'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.woff) format('woff'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Bold.otf) format('opentype');} +@font-face {font-family: 'NotoSansKR';font-style: normal;font-weight: 900;src: url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Black.woff2) format('woff2'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Black.woff) format('woff'),url(//fonts.gstatic.com/ea/notosanskr/v2/NotoSansKR-Black.otf) format('opentype');} + +@import url('https://fonts.googleapis.com/css2?family=Rubik:wght@300;400;500;600;800;900&display=swap'); + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video, button { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + /* font-family:'Rubik','NotoSansKR',맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial; */ + font-family: 'Rubik', 'NotoSansKR', sans-serif; + font-style: normal; + font-weight:300; + vertical-align: baseline; + letter-spacing: -0.3px; + -webkit-font-smoothing: antialiased; +} +select{ + /* font-family:'Rubik','NotoSansKR',맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial; */ + font-family: 'Rubik', 'NotoSansKR', sans-serif; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1.4; +} +ol, ul { + list-style: none; +} +blockquote, q{ + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +*, :after, :before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html body .content.pal-content .content-wrapper{margin-top:0;} +html body .content.pal-content{min-height:100vh;} +html body .content.pal-content .content-wrapper{min-height:100vh;} +button{border:0;background:transparent;} + +/*레이아웃*/ +.pal-container{background:#ddd;height:100vh;position:relative;} +.map{width:calc(100% - 80px);position:absolute;right:0;} +.left-layer{width:350px;height:100vh;background:#10163A;position:absolute;left:80px;color:#fff;z-index: 999;padding:14px;overflow: auto;} +.right-layer{width:350px;height:100vh;background:#10163A;position:absolute;right:-350px;color:#fff;z-index: 999;padding:14px;transition: 0.5s ease;-webkit-transition: 0.5s ease;overflow:auto;} +.right-layer.active{right:0px;transition: 0.5s ease;-webkit-transition: 0.5s ease;} +.right-layer-btn{width:40px;height:40px;position:absolute;right:0px;top:50%;transform: translateY(-50%);border:0;background:#7367f0;border-top-left-radius:5px;border-bottom-left-radius:5px;transition: 0.5s ease;-webkit-transition: 0.5s ease;} +.right-layer-btn svg{color:#fff;} +.right-menu.active .right-layer-btn{right:350px;transition: 0.5s ease;-webkit-transition: 0.5s ease;} +.layer-content + .layer-content{margin-top:14px;} +.right-menu{position: absolute;right:0;height: 100vh;} + +/*버튼 기본css*/ +.btn{font-size:0.825rem;font-weight:400;} + +/*레이어 상세정보-상단타이틀*/ +.layer-ti{display:flex;margin-bottom:10px;} +.layer-ti h4{flex:1;color:#bbb;font-weight:500;font-size:1rem;} +.btn-icon{background:transparent;color:#bbb;border: 0;padding:0;margin-top: -3px;} +.layer-ti .badge{font-weight:500;font-size:13px;} + +/*레이어 상세정보-검색*/ +.layer-search .input-group .form-control{height:35px;font-size: 0.875rem;color:#b5b5b7;background:#283046;border:1px solid #404656;border-right:0;} +.layer-search .input-group .form-control:focus{border-color:#7367f0;border-right:1px solid #7367f0;border-right:0px;} +.layer-search .input-group .form-control::placeholder{color:#777;} +.layer-search .btn{height:35px;border-top-left-radius:0;border-bottom-left-radius:0;position:relative;background:#283046;border-color:#404656;} +.layer-search .btn:active{background:#7367f0;border:1px solid #7367f0;} +.layer-search .btn svg{position:absolute;left:50%;top:50%;transform: translate(-50%,-50%);} + +/*레이어 상세정보-필터*/ +.layer-filter{background:#283046;border:1px solid #404656;border-radius: 5px;} +.layer-filter-ti{display:flex;align-items: center;} +.layer-filter-ti h4{padding:10px;color:#bbb;font-weight:500;flex:1;} +.layer-filter-ti svg{margin-right:10px;color:#bbb;} +.layer-filter-content .filter-content-box{padding:10px;display:none;} +.layer-filter-content .filter-content-box + .filter-content-box{padding-top:0;} +.layer-filter-content .filter-content-box h5{color:#c3c3c3;font-size:0.9375rem;margin-bottom:10px;font-weight:500;} +.layer-filter.active .layer-filter-ti{border-bottom:1px solid #404656;} +.layer-filter.active .layer-filter-content .filter-content-box{display:block;} +.layer-filter.active .layer-filter-ti svg {transform: rotate(180deg);} + +/*레이어 상세정보-필터-체크박스*/ +.square_check{width:100%;} +.square_check > div{text-align:center;border-top:1px solid #404656;} +.square_check .btn{border:1px solid #404656;border-left:0px;border-radius:0px;font-size: 13px;color:#bbb;font-weight:300;} +.square_check .btn:first-child{border-left:1px solid #404656;} +.square_check .btn.btn-checked{background:#7367f0;color:#fff;font-weight:400;} +.square_check .btn-group, .btn-group-vertical{display:flex;flex-wrap: wrap;} +.square_check .btn-group.box_3n .btn{width:33.333%;padding: 14px 0;} +.box_3n label:nth-child(n+1):nth-child(-n+99999){border-top:0px;} +.box_3n label:nth-child(3n+1){border-left:1px solid #404656;} +.square_check .btn-group.box_2n .btn{width:50%;padding: 14px 0;} +.box_2n label:nth-child(n+1):nth-child(-n+99999){border-top:0px;} +.box_2n label:nth-child(2n+1){border-left:1px solid #404656;} +.square_check .btn-group > .btn:not(:first-child), [dir=ltr] .btn-group > .btn-group:not(:first-child){ + margin-left:0px; +} +.square_check .btn-group > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):first-child, +.square_check .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:#404656!important; +} +.square_check .btn-group > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):last-child, +.square_check .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:#404656!important; +} +/*레이어 상세정보-리스트*/ +.drone-list .layer-content-list{cursor: pointer;} +.layer-content-list{background:#283046;border-radius: 5px;padding:10px;color:#bbb;border: 1px solid #404656;} +.layer-content-list + .layer-content-list{margin-top:14px;} +.layer-content-list dl dt{display:flex;} +.layer-content-list dl dt + dt{margin-top:14px;} +.layer-content-list dl dt div{flex:auto;font-size: 0.875rem;} +.layer-content-list dl dt .list-left-txt{text-align: left;font-weight:500;min-width: 70px;} +.layer-content-list dl dt .list-right-txt{text-align: right;} + +/*레이어 상세정보-드론상세정보*/ +.layer-content-box{background:#283046;border-radius: 5px;color:#bbb; border: 1px solid #404656;} +.layer-content-box .drone-ti{display:flex;align-items: center;font-weight:500; color: #f8c023;padding:10px;} +.layer-content-box .drone-ti img{margin-right:6px;} +.layer-content-box .drone-img img{width:100%;} +.layer-content-box .layer-content-info{padding:10px;} +.layer-content-box dl dt{display:flex;} +.layer-content-box dl dt + dt{margin-top:14px;} +.layer-content-box dl dt div{flex:auto;font-size: 0.875rem;} +.layer-content-box dl dt .list-left-txt{text-align: left;font-weight:500;min-width: 70px;} +.layer-content-box dl dt .list-right-txt{text-align: right;} + + +/* 스크롤바 설정*/ +*::-webkit-scrollbar{width: 6px;height:6px;} +/* 스크롤바 막대 설정*/ +*::-webkit-scrollbar-thumb{height:auto;background-color:#b4b7bd;/* 스크롤바 둥글게 설정*/border-radius: 10px; } +/* 스크롤바 뒷 배경 설정*/ +*::-webkit-scrollbar-track{background-color: rgba(0,0,0,0);} + +/*레이어 상세정보-날씨정보*/ +.layer-weather-table > div{border-radius: 5px;} +.layer-weather-address{font-size: 0.875rem;margin-bottom:10px;} +.layer-weather-address span{display:block;font-weight:400;margin-top:10px;} +.layer-weather-address svg{margin-top:-2px;margin-right:4px;} +.layer-weather-table table{margin:0;} +.layer-weather-table tr th, .layer-weather-table tr td{padding:10px 4px;text-align:center;color:#bbb;} +.layer-weather-table tr th{font-weight:500;border:0;background:#343D55;} +.layer-weather-table tr td{border:0;border-top:1px solid #404656;background:#10163A;font-size:13px;} +.rotate-45{transform:rotate(45deg);} +.rotate-75{transform:rotate(75deg);} +.rotate-90{transform:rotate(90deg);} +.rotate-135{transform:rotate(135deg);} +.rotate-180{transform:rotate(180deg);} +.rotate-225{transform:rotate(225deg);} + +/*tab-menu*/ +.tab-menu ul{display:flex;} +.tab-menu ul li{flex:1;text-align: center;padding:10px 0;font-weight:500;cursor: pointer;} +.tab-menu ul li.active{border-bottom:2px solid #7367f0;} +.tab-content{display:none;} +.tab-content.active{display:block;} +/*날씨상세정보*/ +.layer-weather-box{color:#bbb;} +.layer-weather-box .layer-weather-table table{border:1px solid #404656;} +.layer-weather-box .layer-weather-table thead tr th{border-bottom:1px solid #404656;} +.layer-weather-box .layer-weather-table tr td{border-top:0;} +.layer-weather-box .layer-weather-table table tbody tr:nth-child(2n) td{background:#182444;} + +/*오른쪽레이어*/ +.layer-switch-list dl dt{align-items: center;} +.layer-switch-list dl dt + dt{margin-top:14px;} +.layer-switch-list .custom-control-inline{margin-right:0;} +.layer-switch-list .custom-switch .custom-control-label::before{height:20px;} +.layer-switch-list .custom-switch .custom-control-label:after{left:6px;width:16px;height:16px;} +.layer-switch-list .custom-switch .custom-control-label{height:16px;} +.layer-switch-list .dot-icon{display:inline-block;width:6px;height:6px;border-radius:100%;vertical-align:middle;margin-right:8px;margin-top:-2px;} +.layer-switch-list .dot-icon.color-red{background:#FF3648;} +.layer-switch-list .dot-icon.color-pink{background:#FFA1AA;} +.layer-switch-list .dot-icon.color-orange{background:#FFA800;} +.layer-switch-list .dot-icon.color-brown{background:#A16B00;} +.layer-switch-list .dot-icon.color-purple{background:#AB40FF;} +.layer-switch-list .dot-icon.color-skyblue{background:#009cad;} +.layer-switch-list svg{margin-right:8px;} +.layer-switch-list .custom-switch .custom-control-label:after{top:2px;} +.map-btn .btn-group, .btn-group-vertical{width:100%;} +.map-btn button:hover{box-shadow:none!important;} +.map-btn button{color:#bbb!important;background:#283046!important;border-color:rgba(34, 41, 47, 0.08) !important;} +.map-btn button:focus{color:#7367f0;background:#7367f0!important;color:#fff!important;border-color:rgba(34, 41, 47, 0.08) !important} +.map-btn .btn-primary{background:#7367f0!important;color:#fff!important;} +/* .map-btn .btn-group > .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):first-child, +.map-btn .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;} +.map-btn .btn-group [class*='btn-']:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']){border-left-color:#9489ff!important;} */ +/*left메뉴*/ +h1.logo{width:50px;height:50px;margin:0px auto 60px auto;text-align:center;} +h1.logo img{width:100%;} +h1.logo span{display:block;color:#f4f4f4;font-weight:bold;letter-spacing:2px;font-size:0.9375rem;} +.left-menu{width:80px;height:100vh;background:#283046;padding-top:20px;position:fixed;} +.left-menu-nav, .left-menu-footer{color:#bbb;} +.left-menu-nav li, .left-menu-footer li{margin-top:20px;text-align:center;} +.left-menu-footer{position:absolute;bottom:20px;left:50%;transform: translateX(-50%);} +.socket_on{display:block;width:32px;height:32px;border-radius:100%;background:#28C76F;position: relative;} +.socket_on svg{color:#fff;margin-top:4px;} +.socket_on::after{content:'';display:block;width:10px;height:10px;border:2px solid #ddd;border-radius:100%;background:#28C76F;position: absolute;right:0;bottom:0px;} +.socket_off{display:block;width:32px;height:32px;border-radius:100%;background:#ed1125;position: relative;} +.socket_off svg{color:#fff;margin-top:4px;} +.socket_off::after{content:'';display:block;width:10px;height:10px;border:2px solid #ddd;border-radius:100%;background:#ed1125;position: absolute;right:0;bottom:0px;} +.logout-btn{cursor: pointer;color:#f4f4f4;} +.socket_on svg{animation: rotate-icon 5s linear infinite;transform-origin: 50% 50%;} +@keyframes rotate-icon{100% {transform: rotate(360deg);}} +.left-menu-nav li{margin-top:40px;} +.left-menu-nav li button{color:#f4f4f4;} +.left-menu-nav li button svg{color:#f4f4f4;} +.left-menu-nav li button svg path{fill:#f4f4f4;} + +/*메인-알림*/ +.notice{width:650px;height:45px;overflow:hidden;position:absolute;left:50%;top:20px;transform: translate(-50%,0px);background:#283046;display:flex;font-size:0.9375rem;color:#f4f4f4;padding:0px 20px;border-radius:30px;} +.notice-icon{padding:10px 0;} +.notice-txt .time{margin-right:8px;} +.notice-txt{flex:1;padding:0 10px;} +.notice-txt dl dt{height:45px;padding:12px 0;transition: 0.5s ease;-webkit-transition: 0.5s ease;} +.notice-btn{display:flex;flex-direction: column;} +.notice-btn svg{color:#f4f4f4;} + +/*알림목록*/ +.layer-content-list dl.notice-list dt div.list-ti .list-right-txt{font-weight:500;} +.layer-content-list dl.notice-list dt{flex-direction: column;} +.layer-content-list dl.notice-list dt div.list-ti{display:flex;} +.layer-content-list dl.notice-list dt div.list-txt{margin-top:8px;} + +/*로그인*/ +.login{display:flex;height:100vh;color:#bbb;position:relative;} +.login-logo{position:absolute;top:80px;left:100px;color:#bbb;font-weight:bold;font-size:1.8rem;width: 100%;} +.login-img, .login-form {display: flex;align-items: center;justify-content: center;} +.login-img{flex:1.2;background:#161d31;} +.login-form{background:#283046;width:100%;flex:0.8;flex-direction: column;} +.login-form form{width:100%;padding:0 120px;} +.login-form .form-control{background:transparent;border:1px solid #404656;} +.login-form .form-control:focus{border-color:#7367f0;border-right:1px solid #7367f0;} +.login-form .form-label-group > label{color:#bbb;} +.login-form .form-control-position svg{color:#bbb;} +.login-form .form-control::placeholder{color:#bbb;} +.login-form .vx-checkbox-con .vx-checkbox{border-color: #404656;} +.login-txt{width:100%;margin-bottom:20px;} +.login-txt h2{color:#f4f4f4;font-family: "Montserrat", serif;font-size:1.8rem;font-weight:bold;text-align: center;} +.login-txt p{color:#bbb;font-family: "Montserrat", serif;font-size:1.125rem;font-weight:normal;text-align: center;margin-top:20px;} +.full-btn button{width:100%;margin-bottom:10px;} +.login-link{margin-top:10px;} +@media screen and (max-width:1280px){ + .login-img, .login-form{flex:1;} + .login-form form, .login-txt{padding:0 40px;} +} +@media screen and (max-width:900px){ + .login-img{display:none;} + .login-logo{left:50%;transform: translateX(-50%);text-align: center;} + } + +/*메인 대시보드*/ +.main-dashboard .card{margin-bottom:0px;} +.dashboard-section{margin-top:2rem;} +.menu-page div{height:120px;} +.menu-page div a {width: 100%;height: 100%;padding: 0 20px;word-break: keep-all;font-size: 1.25rem;font-weight: bold;color: rgba(255,255,255,0.8);display: flex;justify-content: center;align-items: center;} +.menu-list01{background:url('../../assets/images/menu001.png')#10163A;background-size:cover;background-position:50% 50%;} +.menu-list02{background:url('../../assets/images/menu002.png')#10163A;background-size:cover;background-position:50% 50%;} +.menu-list03{background:url('../../assets/images/menu003.png')#10163A;background-size:cover;background-position:50% 50%;} +.menu-list04{background:url('../../assets/images/menu004.png')#10163A;background-size:cover;background-position:50% 50%;} +.dashboard-list-ti{font-weight: 500;font-size: 1.285rem;font-size:1.125rem;border-bottom:1px solid #404656;margin:0 1rem;padding:1rem;} +.dashboard-list-ti svg{margin-top:-3px;margin-right:10px;} +.dashboard-list-cont .card{padding:1rem;} +.dashboard-section .card-header svg{color:#bbb;} +.dashboard-chart .card{height:520px;} +.dashboard-chart .card .card-title{margin:10px 0;} +.doughnut-chart-list{display: flex;flex-wrap: wrap;justify-content: space-evenly;margin-top:4rem;margin-bottom:1rem;} +.doughnut-chart-list-ti{display:flex;align-items: center;} +.doughnut-chart-list-ti .ti{font-weight:500;} +.dot-icon{width:8px;height:8px;display:inline-block;background:#ddd;border-radius:100%;margin-right:10px;} +.lineChartPrimary{background-color:#666ee8} +.lineChartDanger{background-color:#ff4961;} +.warningColorShade{background-color:#ffe802;} +.warningLightColor{background-color:#FDAC34;} +.successColorShade{background-color:#28dac6;} +.primaryColorShade{background-color:#836AF9;} +.infoColorShade{background-color:#299AFF;} +.yellowColor{background-color:#ffe800;} +.greyColor{background-color:#4F5D70;} +.blueColor{background-color:#2c9aff;} +.blueLightColor{background-color:#84D0FF;} +.greyLightColor{background-color:#EDF1F4;} + +@media screen and (max-width:990px){ + .dashboard-chart + .dashboard-chart{margin-top:2rem;} + } +@media screen and (max-width:767px){ + .menu-page div a, .dashboard-section .card .card-title{font-size:1.125rem;} + .menu-page > div + div{margin-top:2rem;} + } + +.map-drone-icon{position: absolute;top:300px;left:500px;} +.map-drone-icon.test02{top:400px;left:550px;} +.map-drone-icon.test03{top:500px;left:700px;} +.map-drone-icon.test04{top:600px;left:800px;} +.map-drone-icon.test05{top:600px;left:900px;} +.map-drone-icon.test06{top:450px;left:600px;} +.map-drone-icon img{width:30px;height:30px;} +.map-drone-icon .num{display:block;width:15px;height:15px;border-radius:100%;background:#ff6207;color:#fff;font-size:10px;font-weight:600;position:absolute;left:50%;top:8px;transform: translateX(-50%);text-align:center;} +.map-drone-icon.icon-red .num{background:#ed1125;} +.map-drone-icon.icon-yellow .num{background:#fbff00;color:#000;} +.map-drone-icon.icon-skyblue .num{background:#00e7ff;color:#000;} +.map-drone-icon.icon-pulple .num{background:#e682ff;} +.drone-icon{width:35px;} + +.line-test{display:block;position:absolute;left:564px;top:425px;height:180px;width:3px;background:#ed1125;} +.line-test02{display:block;position:absolute;left:713px;top:525px;height:180px;width:3px;background:#fbff00;} +.line-test03{display:block;position:absolute;left:813px;top:625px;height:180px;width:3px;background:#00e7ff;} +.line-test04{display:block;position:absolute;left:914px;top:625px;height:180px;width:3px;background:#e682ff;} + +/*분석이력-검색조건*/ +.search-cont dl dt + dt{margin-top:-1px;} +.search-box{display:flex;border:1px solid #404656;align-items: center;font-size: 0.875rem;height:50px;} +.search-box input{font-size: 0.875rem;} +.search-list-ti{background:#343D55;min-width:150px;width:150px;text-align:center;height:48px;line-height:48px;font-weight:500;} +.search-list{display:flex;align-items: center;padding:0 20px;width:100%;} +.search-list .calendar-flat{border:1px solid #404656;border-radius: 0.357rem;height: 2.142rem;padding: 0 20px;} +.search-list .calendar-flat input{padding:0px;text-align:center;} +.search-list .calendar-flat:hover{border:1px solid #7367f0;} +.search-list-cont{width:100%;} +.search-list-cont-btn .btn{border-radius:0px;border-color: #404656!important;color:#bbb;} +/* .search-list-cont-btn .btn:focus{background-color: #7367f0!important;color:#fff!important;} */ +.search-list-cont-btn .btn.active{background-color: #7367f0!important;color:#fff!important;} +.search-list-cont .custom-control-label{color:#bbb;font-size: 0.875rem;} +.cont-ti{padding-bottom:10px!important;} +.cont-ti > div{display:flex;justify-content: space-between;align-items: center;} +/* .cont-ti button{margin-right:8px;} */ +.cont-ti h4{font-weight:500;color:#bbb;font-size:1.125rem;} +.pt-14{padding-top:14px;} +.cont-ti .btn svg{margin-top:-4px;margin-right:4px;} +.pal-card-body{padding:0px;} +.table.pal-table {color:#bbb;text-align: center;border-bottom:1px solid #3b4253;} +.table.pal-table tr th{font-size: 0.875rem;font-weight:500;padding: 0.72rem 0.5rem;} +.table.pal-table tr td{font-size: 0.875rem;padding: 0.72rem 0.5rem;} +.table.pal-table .td-link{color:#bbb;text-decoration:underline;cursor: pointer;} +.search-case{font-weight:500;font-size:13px;margin-left:14px;color:#ff9f43 ;background-color:rgba(255, 159, 67, 0.12);padding: 0.3rem 0.5rem;border-radius: 0.358rem;} +.pd-0{padding: 0px!important;} +.search-list-cont .form-group{margin-bottom:0px;justify-content: space-between;} +/* .search-list-cont .form-group input{width:calc(100% - 50px);} */ +.search-list-cont .form-group button{height: 2.142rem;margin:0px;} +.search-list-cont .form-group button svg{margin-top:-7px;} +.search-list-cont .form-label-group > label{font-size:0px;} +@media (max-width: 768px){ + .search-box{display:block;height:auto;} + .search-list-ti{width:100%;height:40px;line-height:40px;} + .search-list{padding: 10px 20px;width:100%;display: block;} + /* .search-list-cont + .search-list-cont{margin-left:0px;} */ + .search-list-cont-btn{width:100%;} + .search-list-cont-btn .btn{width:25%} + .search-list-cont .list-input + .list-input{padding-left:1rem;} + .search-box-date .list-input{flex: 0 0 100%;max-width: 100%;} +} +@media (max-width: 767px){ + .search-list-cont .list-input + .list-input{margin-top:10px;} +} +.tooltip-test{position:absolute;left:500px;top:500px;} +.tooltip-box{background:#283046;padding:10px;border-radius:6px;position:relative;max-width: 180px;} +.tooltip-box div{text-align:left;font-size:13px;color:#bbb;} +.tooltip-ti{border-bottom:1px solid #bbb;padding-bottom:4px;} +.tooltip-ti span, .tooltip-txt .ti{color:#f4f4f4;font-weight:500;display:block;} +.tooltip-txt{padding-top:4px;} +.tooltip-txt-list + .tooltip-txt-list{margin-top:4px;} +.tooltip-box .arrow {position:absolute;bottom:-10px;left:50%;transform: translateX(-50%);display:block;width: 0px;height: 0px;border-top:10px solid #283046;border-bottom:10px solid none;border-right: 10px solid transparent;border-left: 10px solid transparent;} + +/*회원가입*/ +.pal-register .auth-wrapper.auth-v1 .auth-inner{max-width:1200px;} +.pal-register .content-header .sub-txt{display:block;margin-bottom:1rem;} +.pal-register .content-header h5{font-size:1.25rem;font-weight:500;margin-bottom:10px;} +.pal-register .form-border .custom-checkbox{border-bottom:1px solid #404656;padding-bottom:14px;} +.pal-register .terms-box{width:100%;background:#161d31;height:150px;border:1px solid #404656;border-radius:6px;padding:14px;font-size: 0.875rem;margin-top:14px;overflow: auto;} +.pal-register .form-border-terms{border-bottom:1px solid #404656;padding-bottom:14px;} +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +input:-webkit-autofill:active { + transition: background-color 5000s ease-in-out 0s; + -webkit-transition: background-color 9999s ease-out; + -webkit-box-shadow: 0 0 0px 1000px transparent inset !important; + -webkit-text-fill-color: #b4b7bd !important; +} +input:-internal-autofill-selected { + background-color: transparent !important; + background-image: none !important; + color: rgb(0, 0, 0) !important; +} +/* .pal-register .bs-stepper-header{display:none;} */ +.pal-register .app-collapse .card-header{padding:1rem 0;} +.terms-all-check{border-bottom:1px solid #3b4253;padding-bottom:1rem;} +.terms-check{padding:14px 0;border-bottom:1px solid #3b4253;} +.terms-cont{background:#161d31;padding:10px;margin-top:10px;border-radius:6px;font-size: 0.875rem;height:200px;overflow:auto;} +/* .pal-register .form-group label{margin-bottom:0px;} */ +.pal-register .bs-stepper .bs-stepper-header{padding-bottom:0px;} +/* .terms-check .collapse-default .card:last-child{border-bottom:1px solid #3b4253;} +.terms-check .card-body .card-text{height:110px;background:#161d31;padding:10px;font-size: 0.875rem;overflow:auto;border-radius:6px;} +.terms-check [class*='collapse-'] .card .card-body{padding:0 0 1rem 0;} */ +.pal-register input, .pal-register select{font-size: 0.875rem;} +.input-btn{display:flex;flex-wrap: wrap;} +.input-btn [class*='col']{padding:0px;} +.input-btn [class*='col'] + [class*='col']{padding-left:10px;} +@media screen and (max-width:767px){ + .input-btn [class*='col'] + [class*='col']{padding-left:0px;margin-top:10px;} + } + +.input-btn input + input{margin-right:10px;} +.input-btn button{padding:0.5rem;min-width:130px;} +.pal-register .form-label{margin-bottom:4px;font-weight: 400;} +.necessary{vertical-align: middle;margin-right:4px;} +.user-phone-btn{position: absolute;top: -6px;right: 17px;} +.user-phone-btn .time{font-size: 0.875rem;font-weight:400;margin-right:10px;vertical-align: middle;} +.user-phone-btn button{height:25px;line-height:23px;padding:0px 14px;} +.user-phone-btn button span{font-size:13px;} + +/*헤더메뉴*/ +.header-main-menu{margin-bottom:0px;} + +/*팝업창*/ +.modal-title{font-weight:500;font-size:1.125rem;} + +/*기본css 수정*/ +.badge{font-weight:500;} +.form-control-sm{line-height: 1.4;} +.table{margin-bottom:0px;} +.form-group label{margin-bottom:4px;} +.custom-control-inline{align-items: center;} +/* .flatpickr-input{min-width:235px;} */ +.flatpickr-monthDropdown-months{line-height: 1.2!important;} +/*creatable-select*/ +.creatable-select .select__control{border:1px solid #3b4253;padding:0 10px;min-height: 2.142rem;cursor: text;} +.creatable-select .select__menu div div{padding:10px;} +.creatable-select .select__control input{color:#bbb!important;} +/*상세정보*/ +.search-info-box{display:flex;align-items: center;justify-content:center;font-size: 0.875rem;height:auto;width:100%;} +/* @media (max-width: 768px){ + .search-info-box{justify-content:center;} +} */ +.search-info-box .row{width:100%;} +.complete-txt{text-align: center;border-radius:6px;padding:0px 20px 40px 20px;} +.big-txt{font-size:30px;font-weight:200;display:block;margin:20px 0;} +.complete-txt button{width:100%;max-width:200px;margin-top:30px;} +.search-info-ti .ti{font-size:1rem;font-weight:500;margin-bottom: 10px;} +.search-info dl dt + dt{border-top:1px dotted #404656;padding-top:1rem;} +.search-info .final span{font-weight:500;font-size: 0.875rem;} +.mb-10p{margin-bottom:10px;} +/*서브 레프트메뉴*/ +.pal-main-menu-content .pal-navigation-main > li:first-child a{cursor: default;padding-left:8px;/*border-bottom:2px solid #7367f0;*/} +.pal-navigation-main > li:first-child a > span{font-size:1.125rem;font-weight:500;} +.pal-navigation-main li:first-child a > *{transition: none!important;} +.pal-navigation-main li:first-child a:hover > *{transition: none!important;transform: none!important;} +.pal-navigation-main li a{font-size:1rem;} +.pal-navigation-main li .menu-content li a{font-size: 0.875rem;} +.pal-navigation-main li .menu-content li a span{position: relative;padding-left:14px;} +.pal-navigation-main li .menu-content li a span::before{content:'';display:block;width:5px;height:1px;position:absolute;top:50%;left:0px;background:#d0d2d6;} + +/*카드형식 레이아웃*/ +.pal-card{background:#343D55;border-radius:6px;padding:1rem;} +.pal-card-box{background:#283046;padding:20px;border-radius:6px;} +.pal-card-box + .pal-card-box{margin-top:2rem;} +.pal-card-box .card{margin-bottom:0px;} +.pal-card-header{display: flex;min-height:40px;align-items: center;justify-content: space-between;flex-direction: row;margin-bottom:14px;} +.pal-card-header h3{font-size:1.1875rem;font-weight:500;} +.pal-card .card{margin-bottom:0px;} +.search-info{padding:20px;} +.search-info .cont-ti{padding-bottom:14px!important;border-bottom:1px solid #404656;} +.font-sm{font-size: 0.875rem;} +.pal-card-body .form-group label{margin-bottom:4px;} +.count-del-btn button{height: 2.142rem; width: 100%;padding: 0 12px;} +@media screen and (max-width:768px){ + .count-del-btn{margin-top:10px;} + .count-del-btn button span{display:none;} + .count-del-btn button svg{margin:0px!important;} + } +.count-add-btn{padding-left:-10px;} +.count-box{margin-bottom:1rem;} +.count-box .form-label-group{margin-bottom:0px;} +.count-box form + form{margin-top:1rem;} +.count-box .sm-ti{margin-bottom:4px;display: inline-block;} +.sm-ti{font-weight:500;font-size: 14px;} +/*그리드*/ + +.react-dataTable.pal-dateTable{border-bottom:1px solid #3b4253;} +.react-dataTable.pal-dateTable .rdt_TableHead .rdt_TableHeadRow .rdt_TableCol div[role='button'] div{font-size: 0.875rem;font-weight:500;} +.react-dataTable.pal-dateTable .rdt_TableBody .rdt_TableRow{min-height:40px;background: #242b3d !important;} +.react-dataTable.pal-dateTable .rdt_TableBody .rdt_TableRow .rdt_TableCell{height:40px;} +.react-dataTable.pal-dateTable .rdt_TableBody .rdt_TableRow .rdt_TableCell{font-size: 0.875rem;} +.react-dataTable.pal-dateTable .rdt_TableBody .rdt_TableRow .rdt_TableCell .badge.btn{font-size:85%!important;} +.pal-dateTable a{color:#bbb;text-decoration: underline;} + +@media only screen and (min-width: 768px) and (max-width: 1024px){ + .search-list-cont-btn button{font-size:12px;padding:10px 4px;} +} + +.no-dataTable{font-size: 0.875rem;} + +/*메뉴 관리*/ + +.tree-menu {border-radius: 2px;box-shadow: 0 0 50px rgba(0, 0, 0, 0.1);margin-top:1rem;padding:20px;border-radius:6px;background:#161d31;max-height: 610px;overflow: auto;} +.tree-menu-list ul {margin-left:10px;padding-left:20px;border-left: 1px dashed #bbb;} +.tree-menu-list li {color:#bbb;font-size: 14px;font-weight:300;line-height:2rem;} +.tree-menu-list li > div{display:inline-block;} +.tree-menu-list li span{cursor: pointer;} +.tree-menu-list.no-cursor li span{cursor: default;} +.tree-menu-list li a{color:#bbb;} +.tree-menu-list .folder, +.tree-menu-list .folder > a {color: #ddd;font-size:0.9375rem;font-weight: 400;} +.tree-menu-list li:before { +margin-right: 8px; +content: ""; +height: 20px; +vertical-align: middle; +width: 20px; +background-repeat: no-repeat; +display: inline-block; +background-image: url("data:image/svg+xml;utf8,"); +background-position: center 2px; +background-size: 60% auto; +} +.tree-menu-list li.folder:before { +background-image: url("data:image/svg+xml;utf8,"); +background-position: center top; +background-size: 75% auto; +} +.tree-menu-list .custom-checkbox{padding-left:1.8rem;margin-right:0;min-height: 1rem;} +@media screen and (max-width:991px){ + .pal-card-box-many > [class*='col'] + [class*='col']{margin-top:2rem;} + } + +.card-body-tab-cont{padding:20px;} +.card-body-tab-cont .tab-content{display:block;} +.card-body-tab-cont .form-group label{margin-bottom:4px;} + +.modal-box{padding:20px 0;} +.modal-box .ti{font-weight:500;font-size:1.5rem;margin:0 0 20px 0;} +.modal-box .ti svg{margin:0 4px;} + +.input-inline-btn{align-items: flex-end;} +.input-inline-btn button{padding:0.6rem;width:100%;} +.input-inline-btn .time{font-size: 0.875rem;font-weight:400;vertical-align: middle;display:block;text-align:right;margin-bottom:4px;} +@media screen and (min-width:767px){ + .input-inline-btn div:first-child{padding-right:0px;} + } +@media screen and (max-width:768px){ + .input-inline-btn button{margin-top:10px;} + .input-inline-btn .time{position: absolute;top: -58px;right: 17px;} + } +/* .input-inline-btn [class*='col']{padding:0px;} +.input-inline-btn [class*='col'] + [class*='col']{padding-left:10px;} +@media screen and (max-width:767px){ + .input-inline-btn [class*='col'] + [class*='col']{padding-left:0px;margin-top:10px;} + } */ + + +.media-img{width:300px;height:300px;margin: 0px auto;border-radius:6px;} +.media-img img{width:100%;height:100%;border-radius:6px;} +.no-img{width:300px;background:#404656;border-radius:6px;height:300px;display: flex;flex-direction: column;align-items: center;justify-content: center;} +.no-img svg{width:100px;height:100px;} +/* .no-img:after {content: "";display: block;padding-bottom: 100%;} */ +.media-btn-2n > label, .media-btn-2n > button{flex:1;} +@media screen and (max-width:1600px){ + .media-img{width:200px;height:200px;} + .no-img{width:200px;height:200px;} + } + @media screen and (max-width:990px){ + .media-img{width:280px;height:280px;} + .no-img{width:280px;height:280px;} + } + +@media screen and (max-width:768px){ + .pal-media{margin-bottom:1rem;} + } + +.layer-search-form > div + div{margin-top:10px;} +.layer-search-form > div .btn{border-radius:0.358rem;width:100%;} + +/*데이터피커 (달력) 기본 css*/ +.calendar-flat{border:1px solid #404656;background: #283046;border-radius: 0.357rem;height: 2.142rem;padding: 0 20px;} +.calendar-flat input{padding:0px;font-size: 0.875rem;} +.calendar-flat:hover{border:1px solid #7367f0;} + +/*시뮬레이터*/ +.sm-txt{font-size: 0.875rem;color:#bbb;} +.pd-20{padding:20px;} +.simulation-wrap{position:absolute;right:0;bottom:0px;height:auto;width:calc(100% - 430px);z-index: 999;background:#283046;border-left:1px solid #404656;border-bottom:0;overflow:hidden;transition: 0.5s ease;-webkit-transition: 0.5s ease;} +.simulation-wrap.full{width:calc(100% - 80px);transition: 0.5s ease;-webkit-transition: 0.5s ease;} +.simulation-cont{display:flex;width:100%;justify-content:space-between;align-items: center;} +.simulation-slider{width:100%;} +.simulation-ti{display:flex;background: #7367f0;color: #fff; padding: 10px 20px;} +.simulation-ti div{font-size:1rem;font-weight:500;} +.simulation-ti-btn{padding:0;background-color: transparent!important;border:none;margin-right:1rem;} +.simulation-ti-btn:focus{background-color: transparent!important;border:none;} +.simulation-slider-time{display:flex;padding:0 50px 0 20px;} +.simulation-slider-time .noUi-pips{display:none;} +.simulation-slider-time .btn{margin-right:20px;padding:0;width:35px;height:35px;} +.simulation-cont-box{display:flex;flex-direction: column;} +.simulation-cont-box + .simulation-cont-box{margin-left:2rem;} +.simulation-cont-box > div{flex:1;} +.simulation-cont-box-row{display:flex;flex-direction: row;justify-content: space-between;align-items: center;} +.simulation-cont-box span.ti, .simulation-cont-box span.txt{display:block;font-size: 0.875rem;} +.simulation-cont-box span.ti{font-weight:500;} +.simulation-cont-box-info{margin-top:20px;} +.simulation-cont-box-list{flex:1;min-width:100px;flex-direction: column;border:1px solid #82868b;border-radius:6px;} +.simulation-cont-box-list .ti{background:#82868b;display: block;color:#fff;padding:4px 10px;} +.simulation-cont-box-list .txt{padding:4px 10px;} +.simulation-cont-box-list:nth-child(4){min-width:180px;} +.simulation-cont-box-list + .simulation-cont-box-list{margin-left:1rem;} +.drone-info .badge{min-width:180px;display: flex;justify-content: space-between;} +.drone-info .badge + .badge{margin-top:10px;} +.drone-info .badge .txt{display:inline-block;} +.simulation-cont-box .drone-location{justify-content: space-between;align-items: center;text-align:center;} +.drone-location{ flex: 1;text-align: center;} +.drone-location .border-primary{flex: 1;border-radius:6px;} +.drone-location .border-primary .ti{padding:4px 10px;font-size: 0.875rem;background:#7367f0;color:#fff;} +.drone-location .border-primary .txt{padding:4px 10px;} +.drone-location .border-secondary{flex: 1;border-radius:6px;} +.drone-location .border-secondary .ti{padding:4px 10px;font-size: 0.875rem;background:#82868b;color:#fff;} +.drone-location .border-secondary .txt{padding:4px 10px;} +.drone-location .simulation-icon{flex:0.7;} +.simulation-date{height:auto;padding:0 20px;} +.simulation-date-cont{height: auto;display:flex;font-size: 0.875rem;} +.simulation-date-cont-ti{width:100px;position:fixed;background:#283046;border-right:1px solid #404656;} +.simulation-date-cont-ti div{font-weight:500} +.simulation-date-cont-ti div:first-child{color:#ff9f43;font-weight:600;} +.simulation-date-num div:first-child{background-color: rgba(255, 159, 67, 0.12);color: #ff9f43;padding: 0.3rem 0.5rem;text-align: center;border-radius: 0.358rem;display: inline-block;font-weight: 600;line-height: 1;white-space: nowrap;vertical-align: baseline; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, background 0s, border 0s;} +.simulation-date-num{padding:0 0.5rem;text-align:center;font-size:13px;} +.simulation-date-num{border-right:1px solid #404656;} +.simulation-date-cont-ti div, .simulation-date-num div{margin-bottom:4px;} +.simulation-date-num-pd{display: flex;padding-left:100px;} +.simulation-cont-box-img{flex-direction: row;} +.simulation-cont-box-img .img-box{width:130px;height:130px;margin-right:10px;} +.simulation-cont-box-img .img-box img{width:100%;height:100%;} +.simulation-cont-box-img .no-img{max-height:auto;} +.simulation-cont-box-img .no-img svg{width:50px;height:50px;} +.simulation-cont-box-img .badge{min-width:180px;display:flex;justify-content:space-between;} +.simulation-cont-box-img .badge + .badge{margin-top:10px;} +.simulation-icon svg{fill:#5d6373} +.date-num-focus{background:#7367f0;border-radius: 6px;color:#fff;} +.simulation-date-num.date-num-focus div:first-child{background: #ff9f43;color:#fff;} + +.scroll-container {padding-bottom:10px;} +/* +@media screen and (max-width:1400px){ +} +@media screen and (max-width:1024px){ + .simulation-cont{flex-direction: column;} + .drone-info-flex{display:flex;} + .drone-info .badge{flex:1;min-width:auto;} + .drone-info .badge + .badge{margin-top:0px;margin-left:1rem;} + .simulation-cont-box + .simulation-cont-box{margin-left:0px;} + .simulation-cont-box + .simulation-cont-box{margin-left:0px;margin-top:1rem;} + .simulation-cont-box-img{display:flex;} + .simulation-cont-box-list{margin-top: 1rem;min-width:auto;} +} +@media screen and (max-width:768px){ + .simulation-cont-box-list{min-width:auto;} +} */ + +/*datepicker-custom*/ +.datepicker-custom {display: flex;align-items:center;} +.datepicker-custom .react-datepicker{background:#161d31;border-color:#161d31;color:#b4b7bd;font-size:0.875rem;font-weight:400;} +.datepicker-custom .react-datepicker__header{background:transparent;border-color:transparent;color:#b4b7bd;font-size: 1.1rem;font-weight:300;} +.datepicker-custom .react-datepicker__year-read-view--down-arrow, +.datepicker-custom .react-datepicker__month-read-view--down-arrow, +.datepicker-custom .react-datepicker__month-year-read-view--down-arrow, +.datepicker-custom .react-datepicker__navigation-icon::before{border-width: 1px 1px 0 0;top: 12px;} +.datepicker-custom .react-datepicker__navigation:hover *::before {border-color: #7367f0;} +.datepicker-custom .react-datepicker__day--keyboard-selected, +.datepicker-custom .react-datepicker__month-text--keyboard-selected, +.datepicker-custom .react-datepicker__quarter-text--keyboard-selected, +.datepicker-custom .react-datepicker__year-text--keyboard-selected{background:#7367f0;} +.datepicker-custom .react-datepicker__month-text.react-datepicker__month--selected:hover, +.datepicker-custom .react-datepicker__month-text.react-datepicker__month--in-range:hover, +.datepicker-custom .react-datepicker__month-text.react-datepicker__quarter--selected:hover, +.datepicker-custom .react-datepicker__month-text.react-datepicker__quarter--in-range:hover, +.datepicker-custom .react-datepicker__quarter-text.react-datepicker__month--in-range:hover, +.datepicker-custom .react-datepicker__quarter-text.react-datepicker__quarter--selected:hover, +.datepicker-custom .react-datepicker__quarter-text.react-datepicker__quarter--in-range:hover {background-color:#7367f0;color:#b4b7bd;} +.datepicker-custom .react-datepicker__month-text:hover, +.datepicker-custom .react-datepicker__quarter-text:hover {background-color: rgba(57,57,57,0.3);} +.datepicker-custom .react-datepicker__month .react-datepicker__month-text, +.datepicker-custom .react-datepicker__month .react-datepicker__quarter-text{width:40px;height:40px;line-height:40px;border-radius:100%;} +.datepicker-custom .react-datepicker__month .react-datepicker__month-text, +.datepicker-custom .react-datepicker__month .react-datepicker__quarter-text {margin:5px;} +.datepicker-custom .react-datepicker__triangle{display:none;} +.datepicker-border-sm{border:1px solid #404656;padding:0 20px;border-radius:20px;} +.datepicker-border-sm input{width:100px;height:34px;padding:0 0 0 1rem;} + diff --git a/src/assets/css/layout.css b/src/assets/css/layout.css new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/data/locales/de.json b/src/assets/data/locales/de.json new file mode 100644 index 0000000..3252825 --- /dev/null +++ b/src/assets/data/locales/de.json @@ -0,0 +1,3 @@ +{ + "Dashboard": "Instrumententafel" +} diff --git a/src/assets/data/locales/en.json b/src/assets/data/locales/en.json new file mode 100644 index 0000000..745e59a --- /dev/null +++ b/src/assets/data/locales/en.json @@ -0,0 +1,3 @@ +{ + "Dashboard": "Dashboard" +} diff --git a/src/assets/data/locales/fr.json b/src/assets/data/locales/fr.json new file mode 100644 index 0000000..2224965 --- /dev/null +++ b/src/assets/data/locales/fr.json @@ -0,0 +1,3 @@ +{ + "Dashboard": "Tableau de bord" +} diff --git a/src/assets/data/locales/pt.json b/src/assets/data/locales/pt.json new file mode 100644 index 0000000..ca545db --- /dev/null +++ b/src/assets/data/locales/pt.json @@ -0,0 +1,3 @@ +{ + "Dashboard": "painel de controle" +} diff --git a/src/assets/images/airplane-skyblue.png b/src/assets/images/airplane-skyblue.png new file mode 100644 index 0000000..c7b7d54 Binary files /dev/null and b/src/assets/images/airplane-skyblue.png differ diff --git a/src/assets/images/avatars/1-small.png b/src/assets/images/avatars/1-small.png new file mode 100644 index 0000000..406d0ba 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..eeb2fbb 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..099a20d 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..ff3d20a 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..cc1b38e 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..02fce4d 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..4728bfa 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..50e79ad 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..0eddb96 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..07108ce Binary files /dev/null and b/src/assets/images/avatars/13.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..523ee62 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..22945af Binary files /dev/null and b/src/assets/images/avatars/2.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..d926412 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..0382f7d 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..11248cc 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..17c57d2 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..aba8b4a 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..38505ed 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..2f5fe51 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..6d91822 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..9ae7593 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..8874d68 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..e061c7a 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..e264851 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..d23f1cb 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..9c63a9a Binary files /dev/null and b/src/assets/images/avatars/9.png differ diff --git a/src/assets/images/avatars/avatar-blank.png b/src/assets/images/avatars/avatar-blank.png new file mode 100644 index 0000000..6d341bf Binary files /dev/null and b/src/assets/images/avatars/avatar-blank.png differ diff --git a/src/assets/images/complete_img.svg b/src/assets/images/complete_img.svg new file mode 100644 index 0000000..2896bfc --- /dev/null +++ b/src/assets/images/complete_img.svg @@ -0,0 +1,140 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/drone-marker-icon-pulple.png b/src/assets/images/drone-marker-icon-pulple.png new file mode 100644 index 0000000..0cdabcf Binary files /dev/null and b/src/assets/images/drone-marker-icon-pulple.png differ diff --git a/src/assets/images/drone-marker-icon-red.png b/src/assets/images/drone-marker-icon-red.png new file mode 100644 index 0000000..7cb137f Binary files /dev/null and b/src/assets/images/drone-marker-icon-red.png differ diff --git a/src/assets/images/drone-marker-icon-skyblue.png b/src/assets/images/drone-marker-icon-skyblue.png new file mode 100644 index 0000000..e0fa276 Binary files /dev/null and b/src/assets/images/drone-marker-icon-skyblue.png differ diff --git a/src/assets/images/drone-marker-icon-yellow.png b/src/assets/images/drone-marker-icon-yellow.png new file mode 100644 index 0000000..acb65cc Binary files /dev/null and b/src/assets/images/drone-marker-icon-yellow.png differ diff --git a/src/assets/images/drone-marker-icon.png b/src/assets/images/drone-marker-icon.png new file mode 100644 index 0000000..baf6c39 Binary files /dev/null and b/src/assets/images/drone-marker-icon.png differ diff --git a/src/assets/images/drone.jpg b/src/assets/images/drone.jpg new file mode 100644 index 0000000..d0c4559 Binary files /dev/null and b/src/assets/images/drone.jpg differ diff --git a/src/assets/images/drone_black.png b/src/assets/images/drone_black.png new file mode 100644 index 0000000..e734aa9 Binary files /dev/null and b/src/assets/images/drone_black.png differ diff --git a/src/assets/images/drone_icon.svg b/src/assets/images/drone_icon.svg new file mode 100644 index 0000000..b826d98 --- /dev/null +++ b/src/assets/images/drone_icon.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/drone_menu_icon.svg b/src/assets/images/drone_menu_icon.svg new file mode 100644 index 0000000..024afa4 --- /dev/null +++ b/src/assets/images/drone_menu_icon.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/assets/images/drone_yellow.png b/src/assets/images/drone_yellow.png new file mode 100644 index 0000000..2de5026 Binary files /dev/null and b/src/assets/images/drone_yellow.png differ diff --git a/src/assets/images/flags/de.png b/src/assets/images/flags/de.png new file mode 100644 index 0000000..f078fdf Binary files /dev/null and b/src/assets/images/flags/de.png differ diff --git a/src/assets/images/flags/en.png b/src/assets/images/flags/en.png new file mode 100644 index 0000000..4e47eaa Binary files /dev/null and b/src/assets/images/flags/en.png differ diff --git a/src/assets/images/flags/fr.png b/src/assets/images/flags/fr.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/src/assets/images/flags/fr.png differ diff --git a/src/assets/images/flags/pt.png b/src/assets/images/flags/pt.png new file mode 100644 index 0000000..56379a6 Binary files /dev/null and b/src/assets/images/flags/pt.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 @@ + + + angular + + + + + + + + + + + + \ 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..c388a19 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 @@ + + + Book + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 @@ + + + bootstrap + + + + + + + + + + + + + + + \ 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 @@ + + + brush + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..0c6f99b 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..7d9867b 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..113ad07 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 @@ + + + figma + + + + + + + + + + + + + + + + \ 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..2b87843 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..f8307c6 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..a0a85a0 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..c23b160 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..ef378b4 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..c74f4ea 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..1b08872 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..574e2ff 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..b5255a6 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..06290e1 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..bbb619c 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..820262f 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..fee4528 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..5634271 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..d8e950d 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..f8307c6 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..478d211 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 @@ + + + parachute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..a0a85a0 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..c23b160 Binary files /dev/null and b/src/assets/images/icons/psd.png differ 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 @@ + + + react + + + + + + + + + + + + + + + + + \ 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 @@ + + + rocket + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..ef378b4 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 @@ + + + speaker + + + + + + + + + + + + + + + + + + + + + + + \ 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 @@ + + + star + + + + + + + + + + + + + + + + + + + + + \ 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 @@ + + + toolbox + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..080d5b5 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..2b87843 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 @@ + + + vuejs + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/icons/xls.png b/src/assets/images/icons/xls.png new file mode 100644 index 0000000..cde1c31 Binary files /dev/null and b/src/assets/images/icons/xls.png differ diff --git a/src/assets/images/login01.png b/src/assets/images/login01.png new file mode 100644 index 0000000..b67299b Binary files /dev/null and b/src/assets/images/login01.png differ diff --git a/src/assets/images/logo/favicon.ico b/src/assets/images/logo/favicon.ico new file mode 100644 index 0000000..2537a8a 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..f89b776 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..b58355a --- /dev/null +++ b/src/assets/images/logo/logo.svg @@ -0,0 +1,43 @@ + diff --git a/src/assets/images/logo/pal_logo.png b/src/assets/images/logo/pal_logo.png new file mode 100644 index 0000000..5b41990 Binary files /dev/null and b/src/assets/images/logo/pal_logo.png differ diff --git a/src/assets/images/logo/vuexy-logo.png b/src/assets/images/logo/vuexy-logo.png new file mode 100644 index 0000000..d012fb4 Binary files /dev/null and b/src/assets/images/logo/vuexy-logo.png differ diff --git a/src/assets/images/menu001.png b/src/assets/images/menu001.png new file mode 100644 index 0000000..c9f80de Binary files /dev/null and b/src/assets/images/menu001.png differ diff --git a/src/assets/images/menu002.png b/src/assets/images/menu002.png new file mode 100644 index 0000000..8a49763 Binary files /dev/null and b/src/assets/images/menu002.png differ diff --git a/src/assets/images/menu003.png b/src/assets/images/menu003.png new file mode 100644 index 0000000..dbe1366 Binary files /dev/null and b/src/assets/images/menu003.png differ diff --git a/src/assets/images/menu004.png b/src/assets/images/menu004.png new file mode 100644 index 0000000..92d6a17 Binary files /dev/null and b/src/assets/images/menu004.png differ diff --git a/src/assets/images/menu01.png b/src/assets/images/menu01.png new file mode 100644 index 0000000..213cd0d Binary files /dev/null and b/src/assets/images/menu01.png differ diff --git a/src/assets/images/menu02.png b/src/assets/images/menu02.png new file mode 100644 index 0000000..67814a4 Binary files /dev/null and b/src/assets/images/menu02.png differ diff --git a/src/assets/images/menu03.png b/src/assets/images/menu03.png new file mode 100644 index 0000000..74832a6 Binary files /dev/null and b/src/assets/images/menu03.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..232d618 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..2cb5fa1 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..786b10a 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..988b8a1 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..006de52 --- /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..ee51553 --- /dev/null +++ b/src/assets/images/pages/coming-soon.svg @@ -0,0 +1,263 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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..84d3e3a 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..caebb05 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..ab852c3 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..cf3144d 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..2d591ce --- /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..4370f5e --- /dev/null +++ b/src/assets/images/pages/error.svg @@ -0,0 +1,299 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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..5df188c --- /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..10dd1c8 --- /dev/null +++ b/src/assets/images/pages/forgot-password-v2.svg @@ -0,0 +1,207 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/pages/forgot-password.png b/src/assets/images/pages/forgot-password.png new file mode 100644 index 0000000..fd896af 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..17ff1ff 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..ac8c90d --- /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..cc1cb9d --- /dev/null +++ b/src/assets/images/pages/login-v2.svg @@ -0,0 +1,558 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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..a17e5a4 --- /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..a2f19d6 --- /dev/null +++ b/src/assets/images/pages/not-authorized.svg @@ -0,0 +1,207 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/pages/pixinvent-logo.png b/src/assets/images/pages/pixinvent-logo.png new file mode 100644 index 0000000..f796184 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..c795fa1 --- /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..48b7e97 --- /dev/null +++ b/src/assets/images/pages/register-v2.svg @@ -0,0 +1,351 @@ + + + Group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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..a7b406a --- /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..62f9976 --- /dev/null +++ b/src/assets/images/pages/reset-password-v2.svg @@ -0,0 +1,299 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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..430adea --- /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..8861fdc --- /dev/null +++ b/src/assets/images/pages/under-maintenance.svg @@ -0,0 +1,178 @@ + + + Illustration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/pal_logo.png b/src/assets/images/pal_logo.png new file mode 100644 index 0000000..5b41990 Binary files /dev/null and b/src/assets/images/pal_logo.png differ 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..a805eec 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..a530830 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..87281ee 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..7fe7185 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..a1ea7a6 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..fdb5338 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..2827784 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..5e0fdff 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..c0fb00e 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..662b82f 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..066d8af 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..f865a79 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..aef7381 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..a805eec 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..f865a79 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..8b240d3 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..6a1882b 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-25.jpg b/src/assets/images/portrait/small/avatar-s-25.jpg new file mode 100644 index 0000000..35f3bfd Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-25.jpg differ diff --git a/src/assets/images/portrait/small/avatar-s-26.jpg b/src/assets/images/portrait/small/avatar-s-26.jpg new file mode 100644 index 0000000..a05d68c Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-26.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..8b240d3 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..6a1882b 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..35f3bfd 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..a05d68c 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..f6d6793 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..6cee846 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..042c2db Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-9.jpg differ diff --git a/src/assets/images/simulation_arrow.svg b/src/assets/images/simulation_arrow.svg new file mode 100644 index 0000000..528fbc1 --- /dev/null +++ b/src/assets/images/simulation_arrow.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/scss/style-rtl.scss b/src/assets/scss/style-rtl.scss new file mode 100644 index 0000000..7e523c4 --- /dev/null +++ b/src/assets/scss/style-rtl.scss @@ -0,0 +1,11 @@ +/*================================================================================ + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Version: 2.0 + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +================================================================================ + +NOTE: +------ +PLACE HERE YOUR OWN SCSS CODES AND IF NEEDED, OVERRIDE THE STYLES FROM THE OTHER STYLESHEETS. +WE WILL RELEASE FUTURE UPDATES SO IN ORDER TO NOT OVERWRITE YOUR STYLES IT'S BETTER LIKE THIS. */ diff --git a/src/assets/scss/style.scss b/src/assets/scss/style.scss new file mode 100644 index 0000000..7e523c4 --- /dev/null +++ b/src/assets/scss/style.scss @@ -0,0 +1,11 @@ +/*================================================================================ + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Version: 2.0 + Author: PIXINVENT + Author URL: http://www.themeforest.net/user/pixinvent +================================================================================ + +NOTE: +------ +PLACE HERE YOUR OWN SCSS CODES AND IF NEEDED, OVERRIDE THE STYLES FROM THE OTHER STYLESHEETS. +WE WILL RELEASE FUTURE UPDATES SO IN ORDER TO NOT OVERWRITE YOUR STYLES IT'S BETTER LIKE THIS. */ diff --git a/src/assets/scss/variables/_variables-components.scss b/src/assets/scss/variables/_variables-components.scss new file mode 100644 index 0000000..64cf550 --- /dev/null +++ b/src/assets/scss/variables/_variables-components.scss @@ -0,0 +1,3 @@ +// ================================================================================================ +// ? TIP: It is recommended to use this file for overriding component variables. +// ================================================================================================ diff --git a/src/assets/scss/variables/_variables.scss b/src/assets/scss/variables/_variables.scss new file mode 100644 index 0000000..7a659f9 --- /dev/null +++ b/src/assets/scss/variables/_variables.scss @@ -0,0 +1,3 @@ +// ================================================================================================ +// ? TIP: It is recommended to use this file for overriding bootstrap variables. +// ================================================================================================ diff --git a/src/auth/jwt/useJwt.js b/src/auth/jwt/useJwt.js new file mode 100644 index 0000000..696a7c1 --- /dev/null +++ b/src/auth/jwt/useJwt.js @@ -0,0 +1,6 @@ +// ** Core JWT Import +import useJwt from '@src/@core/auth/jwt/useJwt' + +const { jwt } = useJwt({}) + +export default jwt diff --git a/src/auth/utils.js b/src/auth/utils.js new file mode 100644 index 0000000..aa66aed --- /dev/null +++ b/src/auth/utils.js @@ -0,0 +1,27 @@ +import useJwt from '@src/@core/auth/jwt/useJwt' + +/** + * Return if user is logged in + * This is completely up to you and how you want to store the token in your frontend application + * e.g. If you are using cookies to store the application please update this function + */ +// eslint-disable-next-line arrow-body-style +export const isUserLoggedIn = () => { + return localStorage.getItem('userData') && localStorage.getItem(useJwt.jwtConfig.storageTokenKeyName) +} + +export const getUserData = () => JSON.parse(localStorage.getItem('userData')) + +/** + * This function is used for demo purpose route navigation + * In real app you won't need this function because your app will navigate to same route for each users regardless of ability + * Please note role field is just for showing purpose it's not used by anything in frontend + * We are checking role just for ease + * NOTE: If you have different pages to navigate based on user ability then this function can be useful. However, you need to update it. + * @param {String} userRole Role of user + */ +export const getHomeRouteForLoggedInUser = userRole => { + if (userRole === 'admin') return '/' + if (userRole === 'client') return { name: 'access-control' } + return { name: 'auth-login' } +} diff --git a/src/basis.http b/src/basis.http new file mode 100644 index 0000000..0050f30 --- /dev/null +++ b/src/basis.http @@ -0,0 +1,279 @@ +@host = http://localhost:8080 +@auth = palnet eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJseWhhbmQiLCJjc3RtclNubyI6NDYsImV4cCI6MTYzMDY2ODI4MiwidXNlcklkIjoibHloYW5kIiwiaWF0IjoxNjMwNjUwMjgyfQ.O0hohzuRtqVL7H-7Eq5bPdIbWGHIdf0OAbM2FY6t--zInl-ZjJ4DR4pJc1BfiWGWPp005gL9E5o8gHyDbS0URQ +### +# 나의 그룹 목록 조회 /api/bas/group/mylist +GET {{host}}/api/bas/group/mylist?cstmrSno=47 +Authorization: {{auth}} +### +# 참여 그룹 목록 조회 /api/bas/group/joinlist +GET {{host}}/api/bas/group/joinlist?cstmrSno=46 +Authorization: {{auth}} + +### +# 그룹 상세 조회 /api/bas/group/detail/{id} +GET {{host}}/api/bas/group/detail/PALNET0002 +Authorization: {{auth}} + +### +# 그룹 생성 /api/bas/group/create +POST {{host}}/api/bas/group/create +Authorization: {{auth}} +content-Type: application/json + +{ + "groupId" : "PALNET0003", + "groupNm" : "팔네트웍스", + "groupTypeCd" : "02", + "cstmrSno" : 47 + +} +### +# 그룹 수정 /api/bas/group/update +PUT {{host}}/api/bas/group/update +Authorization: {{auth}} +content-Type: application/json + +{ + "groupId" : "PALNET0001", + "groupNm" : "팔네트웍스2", + "groupTypeCd" : "02" + +} + + +### +# 그룹 삭제 /api/bas/group/delete/{id} +DELETE {{host}}/api/bas/group/delete/PALNET0002 +Authorization: {{auth}} + +### +# 그룹 조회 /api/bas/group/list +GET {{host}}/api/bas/group/list?cstmrSno=47 +Authorization: {{auth}} + +### +# 그룹코드 발급 /api/bas/group/createid +GET {{host}}/api/bas/group/createid +Authorization: {{auth}} + +### +# 참여 그룹 목록 조회 /api/bas/group/join/list +GET {{host}}/api/bas/group/join/list?cstmrSno=46 +Authorization: {{auth}} + + +### +# 가입처리 /api/bas/group/join/create +# // Y : 가입 , N : 탈퇴 , B : 블럭처리 , C : 가입신청 취소 +POST {{host}}/api/bas/group/join/create +Authorization: {{auth}} +content-Type: application/json + +{ + "groupId": "PALNET0003", + "groupAuthCd" : "USER", + "cstmrSno" : 49, + "joinYn" : "Y" + +} + + + +### +# 가입취소/탈퇴 처리 /api/bas/group/join/update +PUT {{host}}/api/bas/group/join/update +Authorization: {{auth}} +content-Type: application/json + +{ + "groupId": "PALNET0003", + "joinYn" : "A" , + "cstmrGroupSno" : 4 +} + + +### +# 승인요청 조회 +GET {{host}}/api/bas/group/aprv/list?cstmrSno=47 +Authorization: {{auth}} + + +### +# 승인 처리/ 승인 취소 처리 +PUT {{host}}/api/bas/group/aprv/update +Authorization: {{auth}} +content-Type: application/json + +{ + "cstmrGroupSno" : 4, + "aprvlYn" : "Y" , + "aprvlUserId" : "lyhandjin" +} + +### +# 그룹사용자 조회 +GET {{host}}/api/bas/group/user/list?cstmrSno=47 +Authorization: {{auth}} + +### +# 사용자 권한 수정 +PUT {{host}}/api/bas/group/user/update +Authorization: {{auth}} +content-Type: application/json + +{ + "cstmrGroupSno" : 4, + "joinYn" : "Y" , + "groupAuthCd" : "ADMIN" + +} + + + +### +# 드론 리스트 조회 +GET {{host}}/api/bas/dron/list?groupId=11111 +Authorization: {{auth}} + +### +# 드론 상세 조회 +GET {{host}}/api/bas/dron/detail/1 +Authorization: {{auth}} + + +### +# 드론 등록 +POST {{host}}/api/bas/dron/create +Authorization: {{auth}} +content-Type: application/json + +{ + "groupId" : "1111" , + "arcrftHght" : 1.111 , + "arcrftLngth" : 1.222, + "arcrftModelNm" : "testModel", + "arcrftTypeCd" : "01" , + "arcrftWdth" : 1.11, + "arcrftWght" : 10.11, + "cameraYn" : "Y" , + "createUserId" : "lyhand", + "insrncYn" : "Y", + "prdctCmpnNm" : "WOW 미래기술", + "prdctNum" : "슈퍼드론", + "takeoffWght" : 40.11, + "updateUserId" : "lyhand", + "imageUrl" : "test", + "wghtTypeCd" : "01", + "idntfNum" : "DRON-000004", + "idntfTypeCd" : "DRON", + "ownerNm" : "강찬구" , + "hpno" : "01099162432", + "telno" : "" +} + +### +# 드론 수정 +PUT {{host}}/api/bas/dron/update +Authorization: {{auth}} +content-Type: application/json + +{ + "groupId" : "1111" , + "arcrftSno" : 3, + "arcrftHght" : 1.111 , + "arcrftLngth" : 1, + "arcrftModelNm" : "testModel", + "arcrftTypeCd" : "01" , + "arcrftWdth" : 1, + "arcrftWght" : 10, + "cameraYn" : "Y" , + "insrncYn" : "Y", + "prdctCmpnNm" : "WOW 미래기술111", + "prdctNum" : "슈퍼드론222", + "takeoffWght" : 40, + "updateUserId" : "lyhand", + "imageUrl" : "test", + "wghtTypeCd" : "01", + "ownerSno" : 13, + "idntfNum" : "DRON-000004", + "newIdntfNum" : "DRON-000001", + "idntfTypeCd" : "DRON", + "ownerNm" : "강찬구2" , + "hpno" : "01099162432", + "telno" : "" +} + +### +# 드론 삭제 +DELETE {{host}}/api/bas/dron/delete/3 +Authorization: {{auth}} + + +### +# 식별장치 등록 +POST {{host}}/api/bas/dron/idntf/create +Authorization: {{auth}} +content-Type: application/json + +[{ + + "idntfNum" : "1111" , + "idntfTypeCd" : "DRON", + "arcrftSno" : 5 +}] + + +### +# 식별 장치 삭제 +DELETE {{host}}/api/bas/dron/idntf/delete/1111 +Authorization: {{auth}} + + + + +### +# 상세조회 +GET {{host}}/api/ctr/cntrl/detail/762c2be1-0eff-480a-8922-83dce90cd07b +Authorization: {{auth}} + + +#### +# 비행 현황 목록 +GET {{host}}/api/anls/smlt/list?stDate=2021-08-04&endDate=2021-08-27 +Authorization: {{auth}} + +### +# 비행 좌표 데이터 조회 +GET {{host}}/api/anls/smlt/hist/0f79d91d-0256-4db4-8327-afae4274fac4 +Authorization: {{auth}} + +### +# 비행 상세 데이터 조회 +GET {{host}}/api/anls/smlt/detail/0f79d91d-0256-4db4-8327-afae4274fac4 +Authorization: {{auth}} + +### +# 비행 통계 데이터 조회 +GET {{host}}/api/anls/smlt/stcs/0f79d91d-0256-4db4-8327-afae4274fac4 +Authorization: {{auth}} + + +### +# 메인대시 보드 일별 통계 +GET {{host}}/api/main/dash/stcs/day?yyyymm=2021-09 +Authorization: {{auth}} + +### +# 메인대시 보드 지역별 통계 +GET {{host}}/api/main/dash/stcs/area?yyyymm=2021-09 +Authorization: {{auth}} + +### +# 참여 그룹 목록 +GET {{host}}/api/main/dash/group/list?cstmrSno=46 +Authorization: {{auth}} + +### +# 기체 목록 조회 +GET {{host}}/api/main/dash/arcrft/list?cstmrSno=46 +Authorization: {{auth}} \ No newline at end of file diff --git a/src/components/account/login/AccountLogin.js b/src/components/account/login/AccountLogin.js new file mode 100644 index 0000000..a0f5433 --- /dev/null +++ b/src/components/account/login/AccountLogin.js @@ -0,0 +1,165 @@ +import { + Button, + Card, + CardBody, + Row, + Col, + Form, + FormGroup, + Input, + Label, + InputGroup, + InputGroupAddon, + InputGroupText +} from 'reactstrap'; +import { Mail, Lock, Check, Facebook, Twitter, GitHub } from 'react-feather'; + +import loginImg from '../../../assets/images/login01.png'; +import { Link } from 'react-router-dom'; + +import '../../../assets/css/custom.css'; +import { useEffect, useState } from 'react'; +import { ErrorModal } from '../../modal/ErrorModal'; +import * as Actions from '../../../modules/account/login/actions/authAction'; +import { useDispatch, useSelector } from 'react-redux'; + +export const AccountLogin = ({ props }) => { + const dispatch = useDispatch(); + const { isLogin, message } = useSelector(state => state.authState); + + const [loginForm, setLoginForm] = useState({ + userId: 'lyhand', + userPswd: 'kang!469' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const handelrChange = e => { + const { name, value } = e.target; + console.log(name); + setLoginForm({ + ...loginForm, + [name]: value + }); + }; + + const onKeyPress = e => { + if (e.key == 'Enter') { + handelrLogin(); + } + }; + + const handelrLogin = () => { + if (!loginForm.userId) { + setModal({ + isOpen: true, + title: '필수값 입력 오류', + desc: '아이디를 입력해주세요' + }); + return; + } else if (!loginForm.userPswd) { + setModal({ + isOpen: true, + title: '필수값 입력 오류', + desc: '비밀번호를 입력해주세요' + }); + return; + } + + dispatch(Actions.login.request(loginForm)); + }; + + useEffect(() => { + if (message) { + setModal({ + isOpen: true, + title: '로그인 실패', + desc: '' + message + }); + } + }, [message]); + + useEffect(() => { + if (isLogin) { + props.history.push('/'); + } + }, [isLogin]); + return ( + <> +
    + + + ); +}; diff --git a/src/components/account/register/AccountRegister.js b/src/components/account/register/AccountRegister.js new file mode 100644 index 0000000..202c2fa --- /dev/null +++ b/src/components/account/register/AccountRegister.js @@ -0,0 +1,67 @@ +import { AccountRegisterForm } from './AccountRegisterForm'; +import { AccountRegisterTerm } from './AccountRegisterTerm'; +import { useRef, useState, useEffect } from 'react'; +import Wizard from '@components/wizard'; +import '@styles/base/pages/page-auth.scss'; +import '../../../assets/css/custom.css'; +import { AccountRegisterComplete } from './AccountRegisterComplete'; + +export const AccountRegister = ({ props }) => { + const [stepper, setStepper] = useState(null); + const ref = useRef(null); + + // console.log(props); + const movePage = url => { + props.history.push(url); + }; + const steps = [ + { + id: 'account-term', + title: '약관동의', + subtitle: 'STEP01', + content: ( + + ) + }, + { + id: 'account-form', + title: '가입정보 입력', + subtitle: 'STEP02', + content: ( + + ) + }, + { + id: 'account-complete', + title: '가입 완료', + subtitle: 'STEP03', + content: ( + + ) + } + ]; + + return ( +
    +
    +
    +
    + setStepper(el)} ref={ref} steps={steps} /> +
    +
    +
    +
    + ); +}; diff --git a/src/components/account/register/AccountRegisterComplete.js b/src/components/account/register/AccountRegisterComplete.js new file mode 100644 index 0000000..764c46e --- /dev/null +++ b/src/components/account/register/AccountRegisterComplete.js @@ -0,0 +1,44 @@ +import * as yup from 'yup'; +import { Fragment, useEffect, useRef, useState } from 'react'; +import classnames from 'classnames'; +import { isObjEmpty } from '@utils'; + +import completeImg from '../../../assets/images/complete_img.svg'; + +import { + Form, + Label, + Input, + FormGroup, + Row, + Col, + Button, + CustomInput, + CardText, + FormFeedback +} from 'reactstrap'; +import AppCollapse from '@components/app-collapse'; +import Select from 'react-select'; +import { selectThemeColors } from '@utils'; + +export const AccountRegisterComplete = ({ stepper, type, movePage }) => { + const handlerLogin = () => { + movePage('/account/login'); + }; + + return ( + +
    + + 환영합니다. 홍길동 님 + + 모든 회원가입절차가 완료되었습니다. 로그인 후 사용해주세요. + + + 로그인 + +
    + {/* ---- 가입인사 끝 */} +
    + ); +}; diff --git a/src/components/account/register/AccountRegisterForm.js b/src/components/account/register/AccountRegisterForm.js new file mode 100644 index 0000000..46de299 --- /dev/null +++ b/src/components/account/register/AccountRegisterForm.js @@ -0,0 +1,634 @@ +import * as yup from 'yup'; +import { Fragment, useEffect, useRef, useState } from 'react'; +import classnames from 'classnames'; +import { isObjEmpty } from '@utils'; +import { useForm } from 'react-hook-form'; +import { ArrowLeft, ArrowRight } from 'react-feather'; +import { yupResolver } from '@hookform/resolvers/yup'; +import { + Form, + Label, + Input, + FormGroup, + Row, + Col, + Button, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + CustomInput, + CardText, + FormFeedback +} from 'reactstrap'; +import { useDispatch, useSelector } from 'react-redux'; +import { accountApi } from '../../../modules/account/register/apis/accountApi'; +import * as Actions from '../../../modules/account/register/actions/accountAction'; + +export const AccountRegisterForm = ({ stepper, type, movePage }) => { + const { agreeTerms } = useSelector(state => state.accountState); + const [minutes_Counter, setMinutes_Counter] = useState('03'); + const [seconds_Counter, setSeconds_Counter] = useState('00'); + const [timer, setTimer] = useState(null); + const [isRunning, setIsRunning] = useState(false); + const [sendCount, setSendCount] = useState(0); + const [isCrtfy, setIsCrtfy] = useState(false); + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + const dispatch = useDispatch(); + + const timerStart = count => { + let minutes, seconds; + + const timer = setInterval(() => { + setIsRunning(true); + minutes = parseInt(count / 60, 10); + seconds = parseInt(count % 60, 10); + minutes = minutes < 10 ? '0' + minutes : minutes; + seconds = seconds < 10 ? '0' + seconds : seconds; + setMinutes_Counter(minutes); + setSeconds_Counter(seconds); + + //타이머 끝 + if (--count < 0) { + clearInterval(timer); + setIsRunning(false); + setValue('crtfyNo', ''); + // setCrtfyNo(''); + } + }, 1000); + + setTimer(timer); + + return () => { + clearInterval(timer); + }; + }; + + const handlerSmsSend = async () => { + const vData = getValues(); + + if (!vData.clncd || !vData.hpno) { + setModal({ + isOpen: true, + title: '인증번호 발송', + desc: '휴대폰 번호를 입력 해주세요.' + }); + return; + } + + if (sendCount >= 3) { + setModal({ + isOpen: true, + title: '인증번호 발송', + desc: '인증번호 발송은 3회 까지만 가능합니다.' + }); + return; + } + + const res = await accountApi.crtfyhp(vData.hpno); + + if (!res.data.result) { + if (res.data.code === -1) { + setModal({ + isOpen: true, + title: '인증번호 발송', + desc: '이미 가입된 휴대폰 입니다. 비밀번호 찾기를 이용해주세요.' + }); + } else { + setModal({ + isOpen: true, + title: '인증번호 발송', + desc: '인증번호 발송을 실패하였습니다.' + }); + } + + return; + } + + // console.log(res); + + if (isRunning) { + clearInterval(timer); + } + + setIsRunning(true); + + setSendCount(sendCount + 1); + timerStart(180); + + // handlerSmsSend(); + }; + + useEffect(() => { + // console.log('isRunning>>>', isRunning); + if (isRunning) { + clearInterval(timer); + } else { + // handlerSmsSend(); + } + + return () => { + clearInterval(timer); + }; + }, []); + + const SignupSchema = yup.object().shape({ + userId: yup.string().trim().required('ID 를 입력해 주세요.'), + // .matches( + // /^[a-z]+[a-z0-9]{5,19}$/g, + // '4자 이상, 20자 미만 영문자 또는 숫자로 입력해주세요.' + // ), + userPswd: yup.string().required('비밀번호 를 입력해 주세요.'), + genderCd: yup.string().required('성별을 선택해 주세요.'), + brthdyDate: yup.string().required('생년월일 을 입력해 주세요.'), + memberName: yup + .string() + .required('이름 을 입력해 주세요.') + .min(3, '최소 2 자 이상 입력 부탁드립니다.') + .max(20, '최대 10 자 이하 입력 부탁드립니다.'), + email: yup.string().required('이메일 을 입력해 주세요.'), + hpno: yup.string().required('휴대폰번호를 입력해주세요.'), + cntryCd: yup.string().required('국가를 선택해주세요.'), + clncd: yup.string().required('국가번호를 선택해주세요.'), + userPswd: yup + .string() + .required('비밀번호를 입력주세요.') + .matches( + /^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[@$!%*#?&])[A-Za-z0-9@$!%*#?&]{8,20}$/, + '8자 이상, 20자 미만 영문자/숫자/특수문자(@$!%*#?&) 조합하여 입력해주세요.' + ), + confirmUserPaswd: yup + .string() + .required('비밀번호 확인을 입력해 주세요.') + .oneOf([yup.ref('userPswd'), null], '비밀번호가 일치하지 않습니다.') + }); + + const { register, getValues, setValue, errors, handleSubmit } = useForm({ + defaultValues: { + userId: '', + userPswd: '', + confirmUserPaswd: '', + cntryCd: 'KOR', + genderCd: '', + memberName: '', + brthdyDate: '', + email: '', + hpno: '', + clncd: '+82', + crtfyNo: '' + }, + resolver: yupResolver(SignupSchema) + }); + + const handlerCancel = async () => { + movePage('/account/login'); + }; + + const onSubmit = async data => { + if (isObjEmpty(errors)) { + if (!isCrtfy) { + setModal({ + isOpen: true, + title: '인증번호 인증', + desc: '휴대폰 인증을 진행해 주세요.' + }); + return false; + } + // dispatch( + // Actions.register.request({ data: data, agreeTerms: agreeTerms }) + // ); + const res = await accountApi.register({ + data: data, + agreeTerms: agreeTerms + }); + + // console.log(res); + + if (res.data?.errCode == -1) { + setModal({ + isOpen: true, + title: '회원가입 실패', + desc: '동일한 아이디가 존재 합니다. 다른 아이디로 가입 신청을 해주세요' + }); + return; + } + // console.log('res>>>', res.data?.err); + + if (res.data?.errCode == 1) { + stepper.next(); + } else { + setModal({ + isOpen: true, + title: '회원가입 실패', + desc: '회원 가입에 실패 하였습니다.' + }); + return; + } + } + }; + + const handlerSmsConfirm = async () => { + const vData = getValues(); + + if (!vData.clncd || !vData.hpno) { + setModal({ + isOpen: true, + title: '인증번호 인증', + desc: '휴대폰 번호를 입력 해주세요.' + }); + + return false; + } + if (!vData.crtfyNo) { + setModal({ + isOpen: true, + title: '인증번호 인증', + desc: '인증번호 를 입력 해주세요.' + }); + return false; + } + + const res = await accountApi.crtfyhpConfirm(vData.hpno, vData.crtfyNo); + + if (!res.data.result) { + setModal({ + isOpen: true, + title: '인증번호 인증', + desc: '인증번호 가 잘못 되었습니다.' + }); + return; + } + setIsRunning(true); + setIsCrtfy(true); + }; + + let hpno = ''; + let brthdyDate = ''; + const onChangeHandler = e => { + // console.log(register); + const { name, value } = e.target; + + if (name == 'brthdyDate') { + const regex = /^[0-9\b]{0,8}$/; + + if (regex.test(value)) { + brthdyDate = value; + // setValue(name, value); + } else { + setValue(name, brthdyDate); + } + } else if (name == 'hpno') { + const regex = /^[0-9\b]{0,11}$/; + + if (regex.test(value)) { + hpno = value; + // setValue(name, value); + } else { + setValue(name, hpno); + } + } + }; + + return ( + +
    + + +
    +
    가입정보입력
    +
    +
    + + +
    + + {errors && errors.memberName && ( + {errors.memberName.message} + )} +
    +
    + + +
    + + {errors && errors.brthdyDate && ( + {errors.brthdyDate.message} + )} +
    +
    + + +
    + + + + + + {errors && errors.userGenderCd && ( + {errors.userGenderCd.message} + )} +
    +
    + + +
    + + + + + {errors && errors.cntryCd && ( + {errors.cntryCd.message} + )} +
    +
    + + +
    + + + + + {errors && errors.clncd && ( + {errors.clncd.message} + )} + + + + {errors && errors.hpno && ( + {errors.hpno.message} + )} + +
    +
    + {/* 발송 버튼을 누르면 남은시간 d-none를 빼주세여~ 그럼나타나여~ */} + + 남은시간 {minutes_Counter}:{seconds_Counter} + + + 인증번호 발송 + +
    +
    + + + {isRunning ? ( + !isCrtfy ? ( +
    + +
    + ) : ( + + ) + ) : ( + + )} +
    + + 인증하기 + +
    +
    + + +
    + + {/* + ID 중복확인 + */} + + {errors && errors.userId && ( + {errors.userId.message} + )} +
    +
    + + + {/*
    */} +
    + + {errors && errors.email && ( + {errors.email.message} + )} + {/* + 이메일 중복확인 + */} +
    + +
    + + + {errors && errors.userPswd && ( + {errors.userPswd.message} + )} +
    +
    + + + {errors && errors.confirmUserPaswd && ( + {errors.confirmUserPaswd.message} + )} +
    + +
    + + 취소 + + + 완료 + +
    + + +
    + setModal({ ...modal, isOpen: !modal.isOpen })} + modalClassName='modal-danger' + className='modal-dialog-centered' + > + setModal({ ...modal, isOpen: !modal.isOpen })} + > + {modal.title} + + {modal.desc} + + {' '} + + +
    + + ); +}; diff --git a/src/components/account/register/AccountRegisterTerm.js b/src/components/account/register/AccountRegisterTerm.js new file mode 100644 index 0000000..afe3425 --- /dev/null +++ b/src/components/account/register/AccountRegisterTerm.js @@ -0,0 +1,239 @@ +import * as yup from 'yup'; +import { Fragment, useEffect, useRef, useState } from 'react'; +import classnames from 'classnames'; +import { isObjEmpty } from '@utils'; +import { useForm } from 'react-hook-form'; +import { ArrowLeft, ArrowRight } from 'react-feather'; +import { yupResolver } from '@hookform/resolvers/yup'; +import { Link } from 'react-router-dom'; +import { + Form, + Label, + Input, + FormGroup, + Row, + Col, + Button, + CustomInput, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + CardText, + FormFeedback +} from 'reactstrap'; +import AppCollapse from '@components/app-collapse'; +import Select from 'react-select'; +import { useDispatch, useSelector } from 'react-redux'; +import * as Actions from '../../../modules/account/register/actions/accountAction'; + +export const AccountRegisterTerm = ({ stepper, type, movePage }) => { + const { termsList } = useSelector(state => state.accountState); + + const [termChecked, setTermCheckd] = useState({ + privacy: false, + privacyId: '', + service: false, + serviceId: '', + all: false + }); + const [openModal, setOpenModal] = useState(false); + const dispatch = useDispatch(); + const [terms, setTerms] = useState({}); + + const handlerCancel = () => { + movePage('/account/login'); + }; + + useEffect(() => { + dispatch( + Actions.termsList.request({ langDivCd: 'KOR', siteCd: 'SANDBOX' }) + ); + }, []); + + useEffect(() => { + console.log('>>>>', termsList?.length); + if (termsList?.length > 0) { + let termObject = { + termServiceId: 0, + termServiceTitle: '', + termServiceDesc: '', + termPrivacyId: 0, + termPrivacyTitle: '', + termPrivacyDesc: '' + }; + + termsList.map(item => { + console.log('>>>>', item); + if (item.termsCtgryCd === 'TERMS_SERVICE') { + (termObject.termServiceId = item.termsSno), + (termObject.termServiceTitle = item.termsTitleNm), + (termObject.termServiceDesc = item.termsCn); + } else if (item.termsCtgryCd === 'TERMS_PRIVACY') { + (termObject.termPrivacyId = item.termsSno), + (termObject.termPrivacyTitle = item.termsTitleNm), + (termObject.termPrivacyDesc = item.termsCn); + } + }); + setTerms(termObject); + } + }, [termsList]); + + const handlerNext = () => { + let agreeTerms = []; + if (!termChecked.privacy && !termChecked.service) { + setOpenModal(true); + return; + } + + if (termChecked.privacy) { + agreeTerms.push({ + termsSno: terms.termPrivacyId, + agreeYn: 'Y' + }); + } + if (termChecked.service) { + agreeTerms.push({ + termsSno: terms.termServiceId, + agreeYn: 'Y' + }); + } + + //개인정보 취급 방침 선택시 + + // if(termChecked.privacy){ + // terms.push({termsSno : '' ,}) + // } + + //서비스 이용약관 선택시 + + dispatch(Actions.agreeTerms(agreeTerms)); + //dispatch 진행 + + stepper.next(); + }; + + const handlerChecked = type => { + if (type === 'all') { + const checked = !termChecked.all; + + setTermCheckd({ privacy: checked, service: checked, all: checked }); + } else if (type === 'privacy') { + if (!termChecked.privacy && termChecked.service) { + handlerChecked('all'); + } else { + setTermCheckd({ + ...termChecked, + all: false, + privacy: !termChecked.privacy + }); + } + } else if (type === 'service') { + if (!termChecked.service && termChecked.privacy) { + handlerChecked('all'); + } else { + setTermCheckd({ + ...termChecked, + all: false, + service: !termChecked.service + }); + } + } + + // console.log(termChecked); + // console.log(!termAll); + // setTermPrivacy(!termAll); + // setTermService(!termAll); + // setTermAll(!termAll); + + // setTermPrivacy(val); + // setTermService(val); + // setTermAll(val); + }; + return ( + <> + + +
    +
    약관동의
    + + 회원가입을 위해 아래의 약관을 확인하시고 필수 항목에 모두 + 동의하셔야 합니다. + +
    +
    + handlerChecked('all')} + label='전체 이용약관에 모두 동의합니다.' + /> +
    + +
    + handlerChecked('service')} + label={terms.termServiceTitle} + /> +
    {terms.termServiceDesc}
    +
    +
    + handlerChecked('privacy')} + label={terms.termPrivacyTitle} + /> +
    {terms.termPrivacyDesc}
    +
    +
    +
    + setOpenModal(!openModal)} + modalClassName='modal-danger' + className='modal-dialog-centered' + > + setOpenModal(!openModal)}> + 약관동의 체크 + + + 약관을 확인하시고 필수 항목에 모두 동의하셔야 합니다. + + + {' '} + + +
    +
    + +
    + + 취소 + + + 다음 + +
    + + ); +}; diff --git a/src/components/analysis/history/AnalysisHistoryDetailGrid.js b/src/components/analysis/history/AnalysisHistoryDetailGrid.js new file mode 100644 index 0000000..01ed336 --- /dev/null +++ b/src/components/analysis/history/AnalysisHistoryDetailGrid.js @@ -0,0 +1,71 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +import { GridDatabase } from '../../crud/grid/GridDatatable'; + +export const AnalysisHistoryDetailGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + + // <> + // + // + // + // + ); +}; diff --git a/src/components/analysis/history/AnalysisHistoryDetailSearch.js b/src/components/analysis/history/AnalysisHistoryDetailSearch.js new file mode 100644 index 0000000..366b132 --- /dev/null +++ b/src/components/analysis/history/AnalysisHistoryDetailSearch.js @@ -0,0 +1,126 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput +} from 'reactstrap'; +import { Calendar } from 'react-feather'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; + +export const AnalysisHistoryDetailSearch = props => { + // const { log } = useSelector(state => state.analysisHistoryState); + // const dispatch = useDispatch(); + // useEffect(() => { + // dispatch(Actions.detail.request(props.id)); + // }, []); + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    시간
    +
    +
    + + +
    + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    비행상태
    +
    + {/*
    + +
    */} +
    + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/analysis/history/AnalysisHistoryDetailStatic.js b/src/components/analysis/history/AnalysisHistoryDetailStatic.js new file mode 100644 index 0000000..d90fc2d --- /dev/null +++ b/src/components/analysis/history/AnalysisHistoryDetailStatic.js @@ -0,0 +1,219 @@ +import { useEffect, useState } from 'react'; +import { Line } from 'react-chartjs-2'; +import { useSelector } from 'react-redux'; +import { + Card, + CardHeader, + CardTitle, + CardBody, + CardSubtitle, + Button, + Row, + Col +} from 'reactstrap'; + +export const AnalysisHistoryDetailStatic = props => { + // const { log } = useSelector(state => state.analysisHistoryState); + + const [chartData, setChartData] = useState({}); + + useEffect(() => { + chartDataInit(); + }, [props.data]); + + const chartDataInit = () => { + let arrElev = []; + let arrSpeed = []; + + props.data?.map(item => { + arrElev.push(item.elev); + arrSpeed.push(item.speed); + }); + console.log(arrSpeed); + setChartData({ + labels: [10, 20, 30, 5000], + + datasets: [ + { + yAxisID: 'Speed', + data: arrSpeed, + // data: [ + // 80.59, 99.59, 82.59, 90.59, 115.59, 115.59, 74.59, 75.59, 130.59, + // 1.5955, 125.59, 90.59, 140.59, 130.59, 1.598 + // ], + label: 'Speed', + borderColor: '#ff4961', + lineTension: 0.5, + pointStyle: 'circle', + backgroundColor: '#ff4961', + fill: false, + pointRadius: 1, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBorderColor: '#fff', + pointHoverBackgroundColor: '#ff4961', + pointShadowOffsetX: 1, + pointShadowOffsetY: 1, + pointShadowBlur: 5, + pointShadowColor: 'rgba(0, 0, 0, 0.25)' + }, + { + yAxisID: 'Altitude', + position: 'right', + data: arrElev, + + label: 'Altitude', + borderColor: '#ffe802', + lineTension: 0.5, + // pointStyle: 'circle', + backgroundColor: '#ffe802', + fill: false, + pointRadius: 1, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBorderColor: '#fff', + pointHoverBackgroundColor: '#ffe802', + pointShadowOffsetX: 1, + pointShadowOffsetY: 1, + pointShadowBlur: 5, + pointShadowColor: 'rgba(0, 0, 0, 0.25)' + } + ] + }); + }; + + const plugins = [ + { + beforeInit(chart) { + chart.legend.afterFit = function () { + this.height += 20; + }; + } + } + ]; + + const options = { + responsive: true, + maintainAspectRatio: false, + backgroundColor: false, + legend: { + position: 'top', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 10 + } + }, + hover: { + mode: 'label' + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: 'rgba(0, 0, 0, 0.25)', + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + layout: { + padding: { + top: -15, + bottom: -25, + left: -15 + } + }, + scales: { + // xAxes: [ + // { + // display: true, + // scaleLabel: { + // display: true + // }, + // // ticks: { + // // stepSize: 50, + // // min: 0, + // // max: 400, + // // fontColor: 'rgba(200, 200, 200, 0.2)' + // // }, + // gridLines: { + // display: true, + // color: 'rgba(200, 200, 200, 0.2)', + // zeroLineColor: 'rgba(200, 200, 200, 0.2)' + // }, + // ticks: { + // fontColor: 'rgba(200, 200, 200, 0.2)' + // } + // } + // ], + yAxes: [ + { + id: 'Speed', + position: 'left', + display: true, + scaleLabel: { + display: true + }, + ticks: { + stepSize: 100, + // min: 0, + // max: 400, + fontColor: 'rgba(200, 200, 200, 0.2)' + }, + gridLines: { + display: true, + color: 'rgba(200, 200, 200, 0.2)', + zeroLineColor: 'rgba(200, 200, 200, 0.2)' + } + }, + { + id: 'Altitude', + position: 'right', + display: true, + scaleLabel: { + display: true + }, + ticks: { + stepSize: 100, + // min: 0, + // max: 400, + fontColor: 'rgba(200, 200, 200, 0.2)' + }, + gridLines: { + display: true, + color: 'rgba(200, 200, 200, 0.2)', + zeroLineColor: 'rgba(200, 200, 200, 0.2)' + } + } + ] + }, + legend: { + position: 'top', + align: 'start', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 9 + } + } + }; + + return ( +
    + + + + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/analysis/history/AnalysisHistoryGrid.js b/src/components/analysis/history/AnalysisHistoryGrid.js new file mode 100644 index 0000000..84863de --- /dev/null +++ b/src/components/analysis/history/AnalysisHistoryGrid.js @@ -0,0 +1,62 @@ +import { GridDatabase } from '../../../components/crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const AnalysisHistoryGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + +
    +
    +
    + +
    + {/*
    + 표시할 데이터가 없습니다. +
    */} + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/analysis/history/AnalysisHistorySearch.js b/src/components/analysis/history/AnalysisHistorySearch.js new file mode 100644 index 0000000..1d23c06 --- /dev/null +++ b/src/components/analysis/history/AnalysisHistorySearch.js @@ -0,0 +1,218 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { Calendar, Search } from 'react-feather'; +import Flatpickr from 'react-flatpickr'; +import { + Button, + ButtonGroup, + Card, + CardBody, + Col, + Input, + Row +} from 'reactstrap'; + +export const AnalysisHistorySearch = props => { + const [isClick, setIsClick] = useState(1); + const [dateType, setDateType] = useState(1); + + useEffect(() => { + props.setParams({ + ...props.params, + stDate: moment().subtract(dateType, 'day').format('YYYY-MM-DD') + }); + }, [dateType]); + + const handlerClickDate = val => { + setDateType(val); + setIsClick(val); + }; + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    일자
    +
    +
    + + +
    + + props.handlerInput('searchDate', val) + } + onKeyPress={props.onKeyPress} + className='form-control flat-picker bg-transparent border-0 shadow-none' + /> + +
    + + + + + + + + + +
    +
    +
    +
    +
    + {/*
    +
    +
    중량
    +
    +
    + + + + + + +
    +
    +
    +
    */} +
    +
    +
    식별번호
    +
    +
    + + + + props.handlerInput('search1', e.target.value) + } + placeholder='식별번호를 입력하세요' + /> + + {/* + + + + + */} + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/analysis/simulation/AnalysisSimulationDetail.js b/src/components/analysis/simulation/AnalysisSimulationDetail.js new file mode 100644 index 0000000..43fe2fc --- /dev/null +++ b/src/components/analysis/simulation/AnalysisSimulationDetail.js @@ -0,0 +1,240 @@ +import { useRTL } from '@hooks/useRTL'; +import '@styles/react/libs/noui-slider/noui-slider.scss'; +import moment from 'moment'; +import React from 'react'; +import { X } from 'react-feather'; +import { AiFillCaretRight, AiOutlinePause } from 'react-icons/ai'; +import ScrollContainer from 'react-indiana-drag-scroll'; +import { Badge, Button } from 'reactstrap'; +import drone_img from '../../../assets/images/drone.jpg'; +import { ReactComponent as Simulation_icon } from '../../../assets/images/simulation_arrow.svg'; +import { IMG_PATH } from '../../../configs/constants'; +import AnalysisSimulatorSlider from './AnalysisSimulatorSlider'; +export const AnalysisSimulationDetail = props => { + const [isRtl, setIsRtl] = useRTL(); + + return ( +
    + {/* 상세메뉴 닫을때 simulation-wrap에 full 클래스추가해주세요! */} +
    +
    + +
    + {props.data?.cntrlStDt + ? moment(props.data?.cntrlStDt).format('YYYY년 MM월 DD일') + : '-'}{' '} + {props.data?.idntfNum ? props.data?.idntfNum : '-'} 비행 Simulation +
    +
    +
    + +
    +
    +
    + {/* + 총 비행거리85.2m + + + 총 비행시간47분24초 + + + 그룹 명팔네트웍스 + + + 운영자 명홍길동 + */} + + 시작일시 + + {props.data?.cntrlStDt + ? moment(props.data?.cntrlStDt).format( + 'MM월DD일 HH:mm:ss' + ) + : '-'} + + + + 종료일시 + + {props.data?.cntrlEndDt + ? moment(props.data?.cntrlEndDt).format( + 'MM월DD일 HH:mm:ss' + ) + : '-'} + + +
    + {/*
    + 총 비행시간 + 47분24초 +
    +
    + 그룹명 + 팔 네트웍스 +
    +
    + 운영자 명 + 홍길동 +
    */} +
    +
    +
    +
    + 시작위치 + + {props.data?.stArea ? props.data?.stArea : '-'} + +
    +
    + +
    +
    + 종료위치 + + {props.data?.endArea ? props.data?.endArea : '-'} + +
    +
    +
    +
    + 시간 + {props.info?.srvrRcvDt} +
    +
    + 속도 + + {props.info?.speed} {props.info?.speedType} + +
    +
    + 고도 + + {props.info?.elev} {props.info?.elevType} + +
    +
    + 좌표(위도/경도) + + {props.info?.lon ? props.info?.lon + ' / ' : '-'} + + {props.info?.lat} + +
    +
    + 헤딩방위각 + {props.info?.heading}° +
    +
    +
    +
    +
    +
    + + {/*
    */} +
    +
    + + 식별번호 + + {' '} + {props.data?.idntfNum ? props.data?.idntfNum : '-'} + + + + 모델명 + + {props.data?.arcrftModelNm + ? props.data?.arcrftModelNm + : '-'} + + +
    +
    +
    +
    +
    +
    +
    + props.setIsPlay(!props.isPlay)} + > + {/* 일시정지 버튼은 d-none 빼고 플레이버튼에 d-none 주시면 바뀝니다 */} + {!props.isPlay ? ( + + ) : ( + + )} + + +
    +
    + +
    +
    +
    +
    시간
    +
    평균 속도
    +
    평균 고도
    +
    배터리 소모량
    +
    +
    +
    + {/*선택시 */} + {/*
    +
    01:00
    +
    0.1m
    +
    1.1m
    +
    100
    +
    */} + {props.stcsList?.map(item => { + return ( +
    +
    {item.timeCd}
    +
    + {item.avrgSpeed} + {item.speedType} +
    +
    + {item.avrgElev} + {item.elevType} +
    +
    {item.maxBttrLvl - item.minBttrLvl}
    +
    + ); + })} +
    +
    +
    +
    +
    +
    + ); +}; diff --git a/src/components/analysis/simulation/AnalysisSimulationMap.js b/src/components/analysis/simulation/AnalysisSimulationMap.js new file mode 100644 index 0000000..7b92ba5 --- /dev/null +++ b/src/components/analysis/simulation/AnalysisSimulationMap.js @@ -0,0 +1,5 @@ +import { NMap } from '../../map/nhn/NMap'; + +export const AnalysisSimulationMap = () => { + return ; +}; diff --git a/src/components/analysis/simulation/AnalysisSimulationMenu.js b/src/components/analysis/simulation/AnalysisSimulationMenu.js new file mode 100644 index 0000000..2341ca2 --- /dev/null +++ b/src/components/analysis/simulation/AnalysisSimulationMenu.js @@ -0,0 +1,44 @@ +import { AiOutlinePoweroff } from 'react-icons/ai'; +import { ReactComponent as DroneMenuIcon } from '../../../assets/images/drone_menu_icon.svg'; +import { useDispatch, useSelector } from 'react-redux'; +import { Sun, Map, Bell } from 'react-feather'; +import logo from '../../../assets/images/pal_logo.png'; + +export const AnalysisSimulationMenu = props => { + return ( +
    +

    + + PAL +

    +
      +
    • + +
    • + {/*
    • + +
    • +
    • + +
    • */} +
    +
      +
    • + console.log(333)} + /> +
    • + + {/* socket_off = 클래스명 변경시 빨간색! 접속이 원할하지않을때 */} +
    +
    + ); +}; diff --git a/src/components/analysis/simulation/AnalysisSimulationReport.js b/src/components/analysis/simulation/AnalysisSimulationReport.js new file mode 100644 index 0000000..4966b8b --- /dev/null +++ b/src/components/analysis/simulation/AnalysisSimulationReport.js @@ -0,0 +1,112 @@ +import moment from 'moment'; +import React from 'react'; +import { Calendar, X } from 'react-feather'; +import Flatpickr from 'react-flatpickr'; +import { Button, Input, InputGroup } from 'reactstrap'; + +export const AnalysisSimulationReport = props => { + // console.log(props.params); + console.log(11111111111111); + return ( +
    +
    +
    +

    비행 Simulation

    + +
    +
    +
    + 검색하실 날짜 정보 또는 드론 식별번호를 입력해주세요. +
    +
    +
    + props.handlerInput('searchDate', val)} + className='form-control flat-picker bg-transparent border-0 shadow-none' + /> + +
    +
    +
    + + props.setFilterId(`${e.target.value}`)} + /> + +
    +
    + +
    +
    +
    +
    + {props.count === 0 ? ( +
    표시할 데이터가 없습니다.
    + ) : ( + props.data?.map(item => { + // console.log(item); + // console.log( + // item.idntfNum, + // ':::', + // item.idntfNum.indexOf(props.filterId) + // ); + // console.log(item.idntfNum.indexOf(props.filterId)); + if (item.idntfNum && item.idntfNum.indexOf(props.filterId) != -1) { + return ( +
    props.handlerDetail(item.cntrlId)} + key={item.cntrlId} + > +
    +
    +
    식별번호
    +
    {item.idntfNum}
    +
    +
    +
    일자
    +
    + {moment(item.cntrlStDt).format('YYYY년MM월DD일')} +
    +
    +
    +
    시작 위치
    +
    {item.stArea}
    +
    +
    +
    시작/종료 시간
    +
    + {moment(item.cntrlStDt).format('HH:mm')} + {' '}/{' '} + {moment(item.cntrlEndDt).format('HH:mm')} +
    +
    + {/*
    +
    총 비행거리/시간
    +
    ddd
    +
    */} +
    +
    + ); + } + }) + )} +
    +
    + ); +}; diff --git a/src/components/analysis/simulation/AnalysisSimulatorSlider.js b/src/components/analysis/simulation/AnalysisSimulatorSlider.js new file mode 100644 index 0000000..c809f4c --- /dev/null +++ b/src/components/analysis/simulation/AnalysisSimulatorSlider.js @@ -0,0 +1,73 @@ +import Nouislider from 'nouislider-react'; +import { useEffect } from 'react'; + +const AnalysisSimulatorSlider = ({ + direction, + count, + playCount, + setSliderCount +}) => { + const colorOptions = { + start: [playCount ? playCount : 0], + // connect: true, + behaviour: 'drag', + animate: false, + tooltips: true, + range: { + min: 0, + max: count ? count : 1 + }, + format: { + // 'to' the formatted value. Receives a number. + to: function (value) { + return Math.round(value); + }, + // 'from' the formatted value. + // Receives a string, should return a number. + from: function (value) { + return Math.round(value); + } + }, + pips: { + mode: 'range', + // stepped: true, + density: 3 + }, + onChange: e => { + setSliderCount(e); + }, + direction + }; + + useEffect(() => { + console.log(playCount); + }, [playCount]); + return ( +
    + {/*
    Default / Primary Color Slider
    */} + {/* */} + + {/* +
    Secondary Color Slider
    + + +
    Success Color Slider
    + + +
    Danger Color Slider
    + + +
    warning Color Slider
    + + +
    info Color Slider
    + */} +
    + ); +}; + +export default AnalysisSimulatorSlider; diff --git a/src/components/basis/dron/BasisDronForm.js b/src/components/basis/dron/BasisDronForm.js new file mode 100644 index 0000000..02c7e74 --- /dev/null +++ b/src/components/basis/dron/BasisDronForm.js @@ -0,0 +1,389 @@ +import classnames from 'classnames'; +import React from 'react'; +import { + Card, + CardBody, + Col, + FormFeedback, + FormGroup, + Input, + Label, + Row +} from 'reactstrap'; +import { ARCTFT_TYPE_CD, WGHT_TYPE_CD } from '../../../configs/constants'; + +export const BasisDronForm = props => { + return ( + + + + +
    +
    +
    +

    상세정보

    +
    +
    + {props.type === 'update' ? ( + 최종 수정일자 : {props.updateDt} + ) : null} +
    +
    + +
    +
    +
    +

    그룹정보 정보

    +
    +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +

    기체 정보

    +
    +
    + + + + + + {props.errors && props.errors.prdctNum && ( + + {props.errors.prdctNum.message} + + )} + + + + + + + {props.errors && props.errors.arcrftModelNm && ( + + {props.errors.arcrftModelNm.message} + + )} + + + + + + + + {/* CDNOT 코드연동 필요 */} + {ARCTFT_TYPE_CD.map(item => { + return ( + + ); + })} + + {props.errors && props.errors.arcrftTypeCd && ( + + {props.errors.arcrftTypeCd.message} + + )} + + + + + + + {/* CDNOT 코드연동 필요 */} + + {WGHT_TYPE_CD.map(item => { + return ( + + ); + })} + + {props.errors && props.errors.wghtTypeCd && ( + + {props.errors.wghtTypeCd.message} + + )} + + + + + + + + + + + {props.errors && props.errors.cameraYn && ( + + {props.errors.cameraYn.message} + + )} + + + + + + + + + + {props.errors && props.errors.insrncYn && ( + + {props.errors.insrncYn.message} + + )} + + + + + + + + {props.errors && props.errors.prdctCmpnNm && ( + + {props.errors.prdctCmpnNm.message} + + )} + + + +
    +
    +
    +
    +

    운영자 정보

    +
    +
    + + + + + + {props.errors && props.errors.ownerNm && ( + + {props.errors.ownerNm.message} + + )} + + + + + + + {props.errors && props.errors.hpno && ( + + {props.errors.hpno.message} + + )} + + + +
    +
    +
    + + {/*
    + + 저장 + + + 삭제 + +
    */} +
    +
    +
    + +
    + ); +}; diff --git a/src/components/basis/dron/BasisDronGrid.js b/src/components/basis/dron/BasisDronGrid.js new file mode 100644 index 0000000..42d7e39 --- /dev/null +++ b/src/components/basis/dron/BasisDronGrid.js @@ -0,0 +1,56 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisDronGrid = props => { + return ( + <> +
    +
    +

    {props.subTitle} 기체목록

    + 검색결과 총 {props.count}건 +
    +
    + + 기체등록 + +
    +
    +
    + +
    + +
    +
    +
    + + ); +}; diff --git a/src/components/basis/dron/BasisDronImage.js b/src/components/basis/dron/BasisDronImage.js new file mode 100644 index 0000000..17cb0fc --- /dev/null +++ b/src/components/basis/dron/BasisDronImage.js @@ -0,0 +1,56 @@ +import React from 'react'; +import { Edit, Image, Trash2 } from 'react-feather'; +import { Button, Label, Media } from 'reactstrap'; + +export const BasisDronImage = props => { + return ( + + +
    + {/* 이미지가 있을때*/} + {/* */} + {/* 이미지가 없을때 */} + {props.img ? ( + + ) : ( +
    + +
    + )} +
    +
    + + 업로드 + + + + + + + 삭제 + + + + +
    + {/*
    이미지 최적 크기 300*300
    */} +
    +
    + ); +}; diff --git a/src/components/basis/dron/BasisDronSearch.js b/src/components/basis/dron/BasisDronSearch.js new file mode 100644 index 0000000..21c2a94 --- /dev/null +++ b/src/components/basis/dron/BasisDronSearch.js @@ -0,0 +1,160 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const BasisDronSearch = props => { + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    식별번호
    +
    +
    + + + + props.handlerInput('search1', e.target.value) + } + placeholder='식별번호를 입력하세요' + /> + + {/* + + + + + */} + +
    +
    +
    +
    +
    +
    +
    모델명
    +
    +
    + + + + props.handlerInput('search1', e.target.value) + } + placeholder='모델명을 입력하세요' + /> + + {/* + + + + + */} + +
    +
    +
    +
    + {/*
    +
    +
    종류
    +
    +
    + + + + props.handlerInput('search1', e.target.value) + } + placeholder='식별번호를 입력하세요' + /> + + +
    +
    +
    +
    */} +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/dron/BasisDronTab.js b/src/components/basis/dron/BasisDronTab.js new file mode 100644 index 0000000..45c9000 --- /dev/null +++ b/src/components/basis/dron/BasisDronTab.js @@ -0,0 +1,94 @@ +import { useState } from 'react'; +import { + Card, + CardBody, + Row, + Col, + Nav, + NavItem, + NavLink, + TabContent, + CardTitle, + CardText, + Button, + TabPane, + Form, + FormGroup, + Label, + Input, + Media +} from 'reactstrap'; +import classnames from 'classnames'; +import { + User, + Info, + Share, + X, + Lock, + Edit, + Trash2, + Image, + UserCheck, + Clipboard, + Settings, + AlertTriangle +} from 'react-feather'; +import { BasisDronForm } from './BasisDronForm'; +import Repeater from '@components/repeater'; +import Avatar from '@components/avatar'; +import drone_img from '../../../assets/images/drone.jpg'; +import { BasisDronImage } from './BasisDronImage'; +import { BasisIdntfForm } from './BasisIdntform'; +import { BasisDronDetailContainer } from '../../../containers/basis/dron/BasisDronDetailContainer'; +import { BasisIdntfContainer } from '../../../containers/basis/dron/BasisIdntfContainer'; +export const BasisDronTab = props => { + const [activeTab, setActiveTab] = useState('1'); + + const toggle = tab => { + if (activeTab !== tab) setActiveTab(tab); + }; + return ( + + + + + + + + + + + + + + + + + + ); +}; diff --git a/src/components/basis/dron/BasisGroupDronGrid.js b/src/components/basis/dron/BasisGroupDronGrid.js new file mode 100644 index 0000000..91b4c21 --- /dev/null +++ b/src/components/basis/dron/BasisGroupDronGrid.js @@ -0,0 +1,48 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisGroupDronGrid = props => { + return ( + <> +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    +
    +
    + +
    + +
    +
    +
    + + ); +}; diff --git a/src/components/basis/dron/BasisIdntform.js b/src/components/basis/dron/BasisIdntform.js new file mode 100644 index 0000000..a212ae9 --- /dev/null +++ b/src/components/basis/dron/BasisIdntform.js @@ -0,0 +1,181 @@ +import React, { useEffect, useState } from 'react'; +import moment from 'moment'; + +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + Form, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; +import { + User, + Info, + Share, + X, + Lock, + Edit, + Trash2, + Image, + UserCheck, + Clipboard, + Settings, + AlertTriangle +} from 'react-feather'; + +import Repeater from '@components/repeater'; + +export const BasisIdntfForm = props => { + return ( + + + + +
    +
    +
    +

    {props.title} 식별장치 정보

    +
    +
    + +
    +
    +
    + + + + + * + 식별번호 + + + + + *장비타입 + + + + + *수정일자 + + + + + {i => ( +
    + + + + + props.handlerInput(e, i)} + value={props.data[i].idntfNum} + readOnly={props.data[i].isSave} + size='sm' + > + + + + + + + + + + + + + + + + + props.deletaData( + props.data[i].isSave, + props.data[i].id + ) + } + outline + > + + 삭제 + + + +
    + )} +
    +
    +
    +
    +
    +
    + + + 추가 + + + 저장 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/basis/group/BaisGroupForm.js b/src/components/basis/group/BaisGroupForm.js new file mode 100644 index 0000000..d56820c --- /dev/null +++ b/src/components/basis/group/BaisGroupForm.js @@ -0,0 +1,129 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; +import { Link, useHistory } from 'react-router-dom'; + +export const BasisGroupForm = props => { + return ( + + + + +
    +
    +
    +

    {props.title} 상세정보

    +
    +
    + {props.groupData.type === 'update' ? ( + 최종 수정일자 : {props.groupData.updateDt} + ) : null} +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + {/* + + + + + + + + */} + +
    +
    +
    + +
    + + 저장 + + {/* + 목록 + */} + + 삭제 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupApprovalGrid.js b/src/components/basis/group/BasisGroupApprovalGrid.js new file mode 100644 index 0000000..3240599 --- /dev/null +++ b/src/components/basis/group/BasisGroupApprovalGrid.js @@ -0,0 +1,61 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisGroupApprovalGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    + {/*
    + + 그룹생성 + +
    */} +
    +
    + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupApprovalSearch.js b/src/components/basis/group/BasisGroupApprovalSearch.js new file mode 100644 index 0000000..4b77371 --- /dev/null +++ b/src/components/basis/group/BasisGroupApprovalSearch.js @@ -0,0 +1,188 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + Label, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const BasisGroupApprovalSearch = props => { + const [isCheckBox, setIsCheckBox] = useState({ + all: true, + yes: false, + no: false + }); + + useEffect(() => { + let aprvYn = ''; + + if (!isCheckBox.all) { + if (isCheckBox.yes) { + aprvYn = 'Y'; + } else if (isCheckBox.no) { + aprvYn = 'N'; + } else { + aprvYn = '-'; + } + } + + props.setParams({ + ...props.params, + aprvYn: aprvYn + }); + }, [isCheckBox]); + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    신청자 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    승인여부
    +
    + {/*
    + +
    */} +
    + + setIsCheckBox({ + all: !isCheckBox.all, + yes: !isCheckBox.all, + no: !isCheckBox.all + }) + } + /> + + setIsCheckBox({ + all: false, + yes: !isCheckBox.yes + }) + } + /> + + setIsCheckBox({ + all: false, + no: !isCheckBox.no + }) + } + /> +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupDetailJoinGrid.js b/src/components/basis/group/BasisGroupDetailJoinGrid.js new file mode 100644 index 0000000..4f1837e --- /dev/null +++ b/src/components/basis/group/BasisGroupDetailJoinGrid.js @@ -0,0 +1,61 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisGroupDetailJoinGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    + {/*
    + + 그룹생성 + +
    */} +
    +
    + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupDetailJoinSearch.js b/src/components/basis/group/BasisGroupDetailJoinSearch.js new file mode 100644 index 0000000..97eae24 --- /dev/null +++ b/src/components/basis/group/BasisGroupDetailJoinSearch.js @@ -0,0 +1,108 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + Label, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const BasisGroupDetailJoinSearch = props => { + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupGrid.js b/src/components/basis/group/BasisGroupGrid.js new file mode 100644 index 0000000..eeb39c9 --- /dev/null +++ b/src/components/basis/group/BasisGroupGrid.js @@ -0,0 +1,61 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisGroupGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + + 그룹생성 + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupJoinGrid.js b/src/components/basis/group/BasisGroupJoinGrid.js new file mode 100644 index 0000000..57848d8 --- /dev/null +++ b/src/components/basis/group/BasisGroupJoinGrid.js @@ -0,0 +1,61 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisGroupJoinGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + + 가입하기 + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupSearch.js b/src/components/basis/group/BasisGroupSearch.js new file mode 100644 index 0000000..2037d16 --- /dev/null +++ b/src/components/basis/group/BasisGroupSearch.js @@ -0,0 +1,96 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const BasisGroupSearch = props => { + const [isClick, setIsClick] = useState(1); + const [dateType, setDateType] = useState(1); + + useEffect(() => { + props.setParams({ + ...props.params, + stDate: moment().subtract(dateType, 'day').format('YYYY-MM-DD') + }); + }, [dateType]); + + const handlerClickDate = val => { + setDateType(val); + setIsClick(val); + }; + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + props.handlerInput('search1', e.target.value) + } + placeholder='그룹명을 입력하세요' + /> + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupUsersGrid.js b/src/components/basis/group/BasisGroupUsersGrid.js new file mode 100644 index 0000000..debc75e --- /dev/null +++ b/src/components/basis/group/BasisGroupUsersGrid.js @@ -0,0 +1,61 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const BasisGroupUsersGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    + {/*
    + + 그룹생성 + +
    */} +
    +
    + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/basis/group/BasisGroupUsersSearch.js b/src/components/basis/group/BasisGroupUsersSearch.js new file mode 100644 index 0000000..8394598 --- /dev/null +++ b/src/components/basis/group/BasisGroupUsersSearch.js @@ -0,0 +1,137 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + Label, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const BasisGroupUsersSearch = props => { + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    사용자 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    + {/*
    +
    +
    권한 명
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    */} +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/crud/excel/ExcelExportButton.js b/src/components/crud/excel/ExcelExportButton.js new file mode 100644 index 0000000..5476241 --- /dev/null +++ b/src/components/crud/excel/ExcelExportButton.js @@ -0,0 +1,20 @@ +import { useEffect } from 'react'; +import { CSVLink, CSVDownload } from 'react-csv'; +import { Button } from 'reactstrap'; +import { File } from 'react-feather'; +export const ExcelExportButton = props => { + // console.log(props); + return ( + + + + 엑셀다운로드 + + + ); +}; diff --git a/src/components/crud/grid/GridDatatable.js b/src/components/crud/grid/GridDatatable.js new file mode 100644 index 0000000..0b1b150 --- /dev/null +++ b/src/components/crud/grid/GridDatatable.js @@ -0,0 +1,30 @@ +import DataTable from 'react-data-table-component'; +import { + MoreVertical, + Edit, + Trash, + Search, + File, + ChevronDown +} from 'react-feather'; +export const GridDatabase = props => { + return props.count <= 0 ? ( +
    표시할 데이터가 없습니다.
    + ) : ( + } + className='react-dataTable pal-dateTable' + // defaultSortField='invoiceId' + // paginationDefaultPage={currentPage} + // paginationComponent={CustomPagination} + data={props.data} + /> + ); +}; diff --git a/src/components/dashboard/DashboardDronList.js b/src/components/dashboard/DashboardDronList.js new file mode 100644 index 0000000..b2cd721 --- /dev/null +++ b/src/components/dashboard/DashboardDronList.js @@ -0,0 +1,35 @@ +import { Plus } from 'react-feather'; +import { Card, CardBody, CardHeader, CardTitle, Table } from 'reactstrap'; + +export const DashboardDronList = props => { + return ( + + + 내 기체 정보 + + + + + + + + + + + + {props.data?.map((item, index) => { + return ( + + + + + ); + })} + +
    제작 번호그룹 명
    {item.prdctNum}{item.createDt}
    +
    +
    + ); +}; diff --git a/src/components/dashboard/DashboardGroupList.js b/src/components/dashboard/DashboardGroupList.js new file mode 100644 index 0000000..98cd0e4 --- /dev/null +++ b/src/components/dashboard/DashboardGroupList.js @@ -0,0 +1,35 @@ +import { Plus } from 'react-feather'; +import { Card, CardBody, CardHeader, CardTitle, Table } from 'reactstrap'; + +export const DashboardGroupList = props => { + return ( + + + 내 그룹 정보 + + + + + + + + + + + + {props.data?.map((item, index) => { + return ( + + + + + ); + })} + +
    그룹 명생성일시
    {item.groupNm}{item.createDt}
    +
    +
    + ); +}; diff --git a/src/components/dashboard/DashboardMenu.js b/src/components/dashboard/DashboardMenu.js new file mode 100644 index 0000000..bb815f8 --- /dev/null +++ b/src/components/dashboard/DashboardMenu.js @@ -0,0 +1,39 @@ +import { Card, Col, Row } from 'reactstrap'; + +export const DashboardMenu = props => { + return ( + + + + window.open('/control', '_blank')}> + 드론 관제 시스템 + + + + + + props.movePage('/analysis/history/list')}> + 비행 이력 현황 + + + + + + props.movePage('/basis/group/index')}> + 기초 정보 관리 + + + + + + window.open('/analysis/simulation/index', '_blank')} + > + 비행 시뮬레이션 + + + + + ); +}; diff --git a/src/components/dashboard/DashboardStcsArea.js b/src/components/dashboard/DashboardStcsArea.js new file mode 100644 index 0000000..2596a69 --- /dev/null +++ b/src/components/dashboard/DashboardStcsArea.js @@ -0,0 +1,168 @@ +import { ko } from 'date-fns/esm/locale'; +import React, { useEffect, useState } from 'react'; +import { Doughnut } from 'react-chartjs-2'; +import DatePicker from 'react-datepicker'; +import 'react-datepicker/dist/react-datepicker.css'; +import { Calendar } from 'react-feather'; +import { Card, CardBody, CardHeader, CardTitle } from 'reactstrap'; +import { useSkin } from '../../utility/hooks/useSkin'; + +export const DashboardStcsArea = props => { + const [chartData, setChartData] = useState({}); + + const [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4'; + + const arrColors = [ + successColorShade, + warningLightColor, + primaryColorShade, + yellowColor, + blueColor + ]; + + const arrColorsClass = [ + 'successColorShade', + 'warningLightColor', + 'primaryColorShade', + 'yellowColor', + 'blueColor' + ]; + + const options = { + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + cutoutPercentage: 60, + legend: { display: false }, + tooltips: { + callbacks: { + // label(tooltipItem, data) { + // const label = data.datasets[0].labels[tooltipItem.index] || '', + // value = data.datasets[0].data[tooltipItem.index]; + // const output = ` ${label} : ${value} %`; + // return output; + // } + }, + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + } + }; + + const chartDataInit = () => { + let arrArea = []; + let arrValue = []; + + props.data?.map(item => { + console.log('>>>>>>>>>>>', props.data); + arrArea.push(item.typeCd); + arrValue.push(item.count); + }); + + setChartData({ + labels: arrArea, + datasets: [ + { + data: arrValue, + backgroundColor: arrColors, + borderWidth: 0, + pointStyle: 'rectRounded' + } + ] + }); + }; + + useEffect(() => { + console.log(props.data); + chartDataInit(); + }, [props.data]); + + return ( + + + TOP5 지역 별 비행횟수 통계 + {/*
    + + +
    */} +
    +
    + + props.setStartDate(date)} + dateFormat='yyy / MMMM' + showMonthYearPicker + showFullMonthYearPicker + showFourColumnMonthYearPicker + className='form-control bg-transparent border-0 shadow-none' + /> +
    +
    +
    + +
    + +
    +
    + {props.data?.map((item, index) => { + return ( +
    +
    + + {item.typeCd} + ({item.count}) +
    + + {/*
    + + 인천광역시 +
    +
    + + 충청북도 +
    +
    + + 세종시 +
    +
    + + 제주도 +
    */} +
    + ); + })} +
    +
    +
    + ); +}; diff --git a/src/components/dashboard/DashboardStcsDay.js b/src/components/dashboard/DashboardStcsDay.js new file mode 100644 index 0000000..682a82a --- /dev/null +++ b/src/components/dashboard/DashboardStcsDay.js @@ -0,0 +1,144 @@ +import { ko } from 'date-fns/esm/locale'; +import React, { useEffect, useState } from 'react'; +import { Bar } from 'react-chartjs-2'; +import DatePicker from 'react-datepicker'; +import 'react-datepicker/dist/react-datepicker.css'; +import { Calendar } from 'react-feather'; +import { Card, CardBody, CardHeader, CardTitle } from 'reactstrap'; +import { useSkin } from '../../utility/hooks/useSkin'; + +export const DashboardStcsDay = props => { + const [chartData, setChartData] = useState({}); + + const [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4'; + + const options = { + elements: { + rectangle: { + borderWidth: 2, + borderSkipped: 'bottom' + } + }, + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + legend: { + display: false + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + scales: { + xAxes: [ + { + display: true, + gridLines: { + display: true, + color: gridLineColor, + zeroLineColor: gridLineColor + }, + scaleLabel: { + display: false + }, + ticks: { + fontColor: labelColor + } + } + ], + yAxes: [ + { + display: true, + gridLines: { + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 1, + // min: 0, + // max: 400, + fontColor: labelColor + } + } + ] + } + }; + + const chartDataInit = () => { + let arrDay = []; + let arrValue = []; + + props.data?.map(item => { + console.log('>>>>>>>>>>>', props.data); + arrDay.push(item.typeCd); + arrValue.push(item.count); + }); + + setChartData({ + labels: arrDay, + + datasets: [ + { + data: arrValue, + backgroundColor: successColorShade, + borderColor: 'transparent', + barThickness: 15 + } + ] + }); + }; + + useEffect(() => { + console.log(props.data); + chartDataInit(); + }, [props.data]); + + return ( + + + 일 별 비행횟수 통계 +
    +
    + + props.setStartDate(date)} + dateFormat='yyy / MMMM' + showMonthYearPicker + showFullMonthYearPicker + showFourColumnMonthYearPicker + className='form-control bg-transparent border-0 shadow-none' + /> +
    +
    +
    + +
    + +
    +
    +
    + ); +}; diff --git a/src/components/layout/CustomDetailLayout.js b/src/components/layout/CustomDetailLayout.js new file mode 100644 index 0000000..5851a84 --- /dev/null +++ b/src/components/layout/CustomDetailLayout.js @@ -0,0 +1,70 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label, + Breadcrumb, + BreadcrumbItem +} from 'reactstrap'; + +import { useHistory } from 'react-router-dom'; + +import { + MoreVertical, + Edit, + Trash, + Search, + File, + ArrowLeftCircle, + X +} from 'react-feather'; +import { MessageErrorModal } from '../message/MessageErrorModal'; +import { MessageInfoModal } from '../message/MessageInfoModal'; + +export const CustomDetailLayout = ({ children, ...props }) => { + const history = useHistory(); + const handlerClose = () => { + history.goBack(); + }; + return ( +
    +
    +
    +

    {props.title}

    +
    +
    + + + +
    +
    + + {children} + + +
    + ); +}; diff --git a/src/components/layout/CustomMainLayout.js b/src/components/layout/CustomMainLayout.js new file mode 100644 index 0000000..ca8df6c --- /dev/null +++ b/src/components/layout/CustomMainLayout.js @@ -0,0 +1,17 @@ +import { MessageErrorModal } from '../message/MessageErrorModal'; +import { MessageInfoModal } from '../message/MessageInfoModal'; + +export const CustomMainLayout = ({ children, ...props }) => { + return ( +
    +
    +
    +

    {props.title}

    +
    +
    + {children} + + +
    + ); +}; diff --git a/src/components/map/MapControl.js b/src/components/map/MapControl.js new file mode 100644 index 0000000..787819d --- /dev/null +++ b/src/components/map/MapControl.js @@ -0,0 +1,10 @@ +import React from 'react'; +import { GoogleCustomMap } from './google/GoogleMap'; +import { NaverCustomMap } from './naver/NaverMap'; + +export const MapControl = props => { + // console.log('```````````````````````'); + return ( + <>{props.mapType === 'google' ? : } + ); +}; diff --git a/src/components/map/geojson/airArea.json b/src/components/map/geojson/airArea.json new file mode 100644 index 0000000..8a58b77 --- /dev/null +++ b/src/components/map/geojson/airArea.json @@ -0,0 +1,5629 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.965554, 37.61354, 0], + [126.960926, 37.61124, 0], + [126.956293, 37.608865, 0], + [126.951108, 37.604756, 0], + [126.948874, 37.602449, 0], + [126.946903, 37.599997, 0], + [126.945208, 37.597417, 0], + [126.943804, 37.594731, 0], + [126.942701, 37.591957, 0], + [126.941906, 37.589118, 0], + [126.941528, 37.585398, 0], + [126.941357, 37.582133, 0], + [126.9417, 37.578732, 0], + [126.942701, 37.574703, 0], + [126.943804, 37.571929, 0], + [126.945208, 37.569243, 0], + [126.946903, 37.566663, 0], + [126.948874, 37.564211, 0], + [126.951108, 37.561904, 0], + [126.953587, 37.55976, 0], + [126.956293, 37.557795, 0], + [126.959204, 37.556025, 0], + [126.962299, 37.554462, 0], + [126.965554, 37.55312, 0], + [126.968944, 37.552007, 0], + [126.972443, 37.551132, 0], + [126.976026, 37.550503, 0], + [126.981182, 37.550021, 0], + [126.986996, 37.550124, 0], + [126.990634, 37.550503, 0], + [126.995258, 37.551246, 0], + [126.999893, 37.552471, 0], + [127.004361, 37.554462, 0], + [127.007456, 37.556025, 0], + [127.010367, 37.557795, 0], + [127.013073, 37.55976, 0], + [127.015552, 37.561904, 0], + [127.017786, 37.564211, 0], + [127.019757, 37.566663, 0], + [127.021452, 37.569243, 0], + [127.022856, 37.571929, 0], + [127.023959, 37.574703, 0], + [127.024754, 37.577542, 0], + [127.025233, 37.580425, 0], + [127.025393, 37.58333, 0], + [127.025233, 37.586235, 0], + [127.024754, 37.589118, 0], + [127.023754, 37.593016, 0], + [127.022038, 37.59628, 0], + [127.019757, 37.599997, 0], + [127.017786, 37.602449, 0], + [127.014313, 37.606072, 0], + [127.010367, 37.608865, 0], + [127.006073, 37.611104, 0], + [127.00264, 37.612736, 0], + [126.997716, 37.614653, 0], + [126.994217, 37.615528, 0], + [126.990634, 37.616157, 0], + [126.986996, 37.616536, 0], + [126.98333, 37.616663, 0], + [126.979664, 37.616536, 0], + [126.976026, 37.616157, 0], + [126.972443, 37.615528, 0], + [126.968944, 37.614653, 0], + [126.965554, 37.61354, 0] + ] + ] + }, + "properties": { "name": "P73", "description": "서울도심 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.893847, 37.558374, 0], + [126.907326, 37.546054, 0], + [126.928797, 37.543284, 0], + [126.940853, 37.536742, 0], + [126.956415, 37.523686, 0], + [126.962547, 37.521829, 0], + [126.974069, 37.535605, 0], + [126.98629, 37.53486, 0], + [127.002227, 37.524393, 0], + [127.009951, 37.529994, 0], + [127.017809, 37.540036, 0], + [127.036712, 37.541093, 0], + [127.054451, 37.535074, 0], + [127.059139, 37.540584, 0], + [127.063576, 37.546102, 0], + [127.068043, 37.552607, 0], + [127.071648, 37.560364, 0], + [127.073536, 37.566623, 0], + [127.074817, 37.570578, 0], + [127.075939, 37.577916, 0], + [127.075939, 37.586486, 0], + [127.075081, 37.594648, 0], + [127.073193, 37.601584, 0], + [127.070548, 37.609254, 0], + [127.065811, 37.617223, 0], + [127.060661, 37.624565, 0], + [127.054113, 37.631811, 0], + [127.048535, 37.636635, 0], + [127.042448, 37.641055, 0], + [127.035898, 37.645038, 0], + [127.028935, 37.648554, 0], + [127.021611, 37.651575, 0], + [127.010193, 37.655014, 0], + [126.998047, 37.657463, 0], + [126.98513, 37.658548, 0], + [126.976204, 37.658004, 0], + [126.969681, 37.65746, 0], + [126.960411, 37.656101, 0], + [126.949244, 37.654079, 0], + [126.941616, 37.651575, 0], + [126.934292, 37.648554, 0], + [126.927329, 37.645038, 0], + [126.920779, 37.641055, 0], + [126.914692, 37.636635, 0], + [126.909114, 37.631811, 0], + [126.904088, 37.62662, 0], + [126.899651, 37.621102, 0], + [126.895839, 37.615298, 0], + [126.892679, 37.609254, 0], + [126.890197, 37.603013, 0], + [126.88841, 37.596626, 0], + [126.887332, 37.590139, 0], + [126.886972, 37.583602, 0], + [126.887332, 37.577065, 0], + [126.88841, 37.570578, 0], + [126.890373, 37.564718, 0], + [126.893847, 37.558374, 0] + ] + ] + }, + "properties": { "name": "P73B", "description": "서울도심 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.683323, 37.716663, 0], + [126.883354, 37.633327, 0], + [127.666669, 37.966655, 0], + [128.464535, 38.060707, 0], + [128.516672, 38.066657, 0], + [128.533337, 38.133331, 0], + [128.599993, 38.200006, 0], + [128.601066, 38.213276, 0], + [128.559503, 38.270766, 0], + [128.549998, 38.28818, 0], + [128.550683, 38.303774, 0], + [128.543802, 38.311177, 0], + [128.527866, 38.324159, 0], + [128.528777, 38.334883, 0], + [128.519066, 38.3408, 0], + [128.510833, 38.354392, 0], + [128.512767, 38.368459, 0], + [128.456851, 38.433499, 0], + [128.466955, 38.449947, 0], + [128.437266, 38.486662, 0], + [128.423793, 38.522201, 0], + [128.406567, 38.544104, 0], + [128.410929, 38.555948, 0], + [128.40333, 38.56611, 0], + [128.360025, 38.61249, 0], + [128.317379, 38.589921, 0], + [128.314819, 38.549239, 0], + [128.309665, 38.484755, 0], + [128.312063, 38.472729, 0], + [128.282547, 38.432077, 0], + [128.257141, 38.41809, 0], + [128.217014, 38.376524, 0], + [128.193283, 38.366425, 0], + [128.133382, 38.329157, 0], + [128.109897, 38.329182, 0], + [128.067997, 38.306914, 0], + [128.04693, 38.304994, 0], + [127.98762, 38.315522, 0], + [127.888554, 38.326385, 0], + [127.830734, 38.304486, 0], + [127.790909, 38.329807, 0], + [127.784729, 38.343272, 0], + [127.76619, 38.33627, 0], + [127.743181, 38.335623, 0], + [127.574924, 38.330752, 0], + [127.510757, 38.296404, 0], + [127.471619, 38.313107, 0], + [127.390513, 38.331958, 0], + [127.344004, 38.32087, 0], + [127.302704, 38.31203, 0], + [127.251892, 38.32442, 0], + [127.148895, 38.300715, 0], + [127.139421, 38.307234, 0], + [127.111749, 38.293001, 0], + [127.09124, 38.278494, 0], + [127.081604, 38.27754, 0], + [127.066498, 38.260289, 0], + [127.047958, 38.258132, 0], + [127.021866, 38.231169, 0], + [127.010193, 38.216604, 0], + [126.988443, 38.208441, 0], + [126.97792, 38.184768, 0], + [126.975861, 38.176132, 0], + [126.962002, 38.157933, 0], + [126.971309, 38.146338, 0], + [126.96697, 38.138978, 0], + [126.909256, 38.11295, 0], + [126.900035, 38.102644, 0], + [126.884537, 38.099442, 0], + [126.876984, 38.085932, 0], + [126.863479, 38.046199, 0], + [126.813126, 37.993998, 0], + [126.725922, 37.955568, 0], + [126.701889, 37.949071, 0], + [126.680603, 37.951237, 0], + [126.679916, 37.924701, 0], + [126.695277, 37.911293, 0], + [126.68747, 37.888402, 0], + [126.692963, 37.840699, 0], + [126.674423, 37.825514, 0], + [126.666305, 37.782716, 0], + [126.659317, 37.778856, 0], + [126.636048, 37.777631, 0], + [126.595297, 37.763353, 0], + [126.572113, 37.763658, 0], + [126.483209, 37.803957, 0], + [126.447144, 37.829853, 0], + [126.427231, 37.840699, 0], + [126.388361, 37.847803, 0], + [126.276856, 37.826057, 0], + [126.222014, 37.822172, 0], + [126.195145, 37.808699, 0], + [126.189652, 37.790795, 0], + [126.202011, 37.746286, 0], + [126.196518, 37.726194, 0], + [126.178665, 37.714245, 0], + [126.125794, 37.713702, 0], + [126.109314, 37.714788, 0], + [126.166675, 37.650008, 0], + [126.683323, 37.716663, 0] + ] + ] + }, + "properties": { "name": "P518", "description": "휴전선 비행금지구역", "type": "0001"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.633339, 38.63334, 0], + [128.366674, 38.633329, 0], + [128.360025, 38.61249, 0], + [128.559503, 38.270766, 0], + [128.783334, 38.366666, 0], + [128.633339, 38.63334, 0] + ] + ] + }, + "properties": { + "name": "P518E", + "description": "휴전선 비행금지구역", + "type": "0001" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [124.14999, 38.000543, 0], + [124.633328, 37.500544, 0], + [125.833337, 37.500547, 0], + [126.166675, 37.650008, 0], + [126.178665, 37.714245, 0], + [126.109314, 37.714788, 0], + [126.074986, 37.710444, 0], + [126.033773, 37.691452, 0], + [125.676042, 37.707184, 0], + [125.631409, 37.688168, 0], + [125.474854, 37.635985, 0], + [125.297011, 37.614776, 0], + [125.142305, 37.627664, 0], + [125.004498, 37.7099, 0], + [124.93927, 37.764201, 0], + [124.909058, 37.820633, 0], + [124.752778, 38, 0], + [124.14999, 38.000543, 0] + ] + ] + }, + "properties": { "name": "P518W", "description": "휴전선 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.265991, 35.334966, 0], + [129.26417, 35.332474, 0], + [129.262622, 35.329861, 0], + [129.261017, 35.32619, 0], + [129.259987, 35.322409, 0], + [129.259366, 35.318618, 0], + [129.259472, 35.314425, 0], + [129.260146, 35.309958, 0], + [129.261019, 35.307145, 0], + [129.262562, 35.303498, 0], + [129.264278, 35.300556, 0], + [129.265823, 35.297894, 0], + [129.269627, 35.294576, 0], + [129.272106, 35.292495, 0], + [129.276123, 35.289628, 0], + [129.280734, 35.287415, 0], + [129.283934, 35.286152, 0], + [129.287257, 35.285121, 0], + [129.290678, 35.28433, 0], + [129.29417, 35.283786, 0], + [129.299126, 35.283182, 0], + [129.302902, 35.283322, 0], + [129.307194, 35.283743, 0], + [129.311762, 35.284836, 0], + [129.31512, 35.285789, 0], + [129.318363, 35.286977, 0], + [129.322643, 35.288647, 0], + [129.326076, 35.291029, 0], + [129.328995, 35.292991, 0], + [129.332041, 35.296072, 0], + [129.335003, 35.299436, 0], + [129.336719, 35.302658, 0], + [129.33876, 35.30624, 0], + [129.33973, 35.309031, 0], + [129.340761, 35.314768, 0], + [129.340496, 35.319047, 0], + [129.339989, 35.323429, 0], + [129.338608, 35.327591, 0], + [129.336496, 35.331632, 0], + [129.334763, 35.334166, 0], + [129.332765, 35.336567, 0], + [129.32951, 35.339774, 0], + [129.32642, 35.342015, 0], + [129.322464, 35.344494, 0], + [129.317493, 35.346916, 0], + [129.312881, 35.348278, 0], + [129.309458, 35.349069, 0], + [129.304447, 35.349716, 0], + [129.298867, 35.349949, 0], + [129.293632, 35.349436, 0], + [129.288357, 35.348563, 0], + [129.284997, 35.347609, 0], + [129.278646, 35.345005, 0], + [129.275703, 35.343374, 0], + [129.271831, 35.340895, 0], + [129.268072, 35.33732, 0], + [129.265991, 35.334966, 0] + ] + ] + }, + "properties": { "name": "P61A 고리", "description": "새울원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.15596, 35.434939, 0], + [129.1436, 35.423749, 0], + [129.128212, 35.406733, 0], + [129.116135, 35.387371, 0], + [129.105542, 35.367368, 0], + [129.09775, 35.339034, 0], + [129.095535, 35.319047, 0], + [129.095535, 35.300556, 0], + [129.100669, 35.281228, 0], + [129.105233, 35.267181, 0], + [129.111278, 35.253512, 0], + [129.118756, 35.240325, 0], + [129.127611, 35.22772, 0], + [129.137774, 35.215792, 0], + [129.149167, 35.204632, 0], + [129.161705, 35.194325, 0], + [129.175291, 35.184948, 0], + [129.189823, 35.176573, 0], + [129.205189, 35.169264, 0], + [129.221273, 35.163074, 0], + [129.237955, 35.158053, 0], + [129.255106, 35.154236, 0], + [129.272598, 35.151653, 0], + [129.290297, 35.150325, 0], + [129.308071, 35.15026, 0], + [129.325784, 35.151459, 0], + [129.343304, 35.153914, 0], + [129.360496, 35.157605, 0], + [129.377231, 35.162504, 0], + [129.393383, 35.168576, 0], + [129.408828, 35.175773, 0], + [129.42345, 35.184041, 0], + [129.437138, 35.193318, 0], + [129.449788, 35.203533, 0], + [129.461304, 35.214609, 0], + [129.471597, 35.226462, 0], + [129.480589, 35.239003, 0], + [129.488211, 35.252135, 0], + [129.494405, 35.265759, 0], + [129.499124, 35.279772, 0], + [129.503403, 35.298875, 0], + [129.504089, 35.317927, 0], + [129.502716, 35.334173, 0], + [129.501343, 35.347056, 0], + [129.496264, 35.361402, 0], + [129.490356, 35.374494, 0], + [129.48349, 35.38849, 0], + [129.476623, 35.401364, 0], + [129.462823, 35.417428, 0], + [129.451443, 35.428618, 0], + [129.438906, 35.438955, 0], + [129.425307, 35.448361, 0], + [129.410752, 35.456764, 0], + [129.395349, 35.4641, 0], + [129.379218, 35.470312, 0], + [129.362481, 35.475353, 0], + [129.345267, 35.479185, 0], + [129.327706, 35.481778, 0], + [129.309935, 35.483112, 0], + [129.292088, 35.483177, 0], + [129.26857, 35.480802, 0], + [129.256714, 35.479509, 0], + [129.239458, 35.475803, 0], + [129.222666, 35.470884, 0], + [129.206466, 35.46479, 0], + [129.190984, 35.457567, 0], + [129.176336, 35.449271, 0], + [129.166946, 35.442771, 0], + [129.15596, 35.434939, 0] + ] + ] + }, + "properties": { "name": "P61B 고리", "description": "새울원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.506149, 35.86457, 0], + [129.493361, 35.86564, 0], + [129.475443, 35.866814, 0], + [129.457467, 35.866716, 0], + [129.439571, 35.865346, 0], + [129.421897, 35.862715, 0], + [129.404568, 35.858843, 0], + [129.387725, 35.853759, 0], + [129.371494, 35.847502, 0], + [129.356001, 35.840121, 0], + [129.341363, 35.831671, 0], + [129.327693, 35.822218, 0], + [129.315094, 35.811833, 0], + [129.303663, 35.800596, 0], + [129.293486, 35.788593, 0], + [129.28464, 35.775915, 0], + [129.277193, 35.76266, 0], + [129.271199, 35.748928, 0], + [129.266706, 35.734824, 0], + [129.263744, 35.720456, 0], + [129.262338, 35.705933, 0], + [129.262496, 35.691366, 0], + [129.264216, 35.676866, 0], + [129.267484, 35.662542, 0], + [129.272275, 35.648504, 0], + [129.278552, 35.634859, 0], + [129.286265, 35.621709, 0], + [129.295357, 35.609156, 0], + [129.305757, 35.597293, 0], + [129.317385, 35.586212, 0], + [129.330154, 35.575995, 0], + [129.343966, 35.566721, 0], + [129.358716, 35.55846, 0], + [129.38118, 35.547871, 0], + [129.399033, 35.541725, 0], + [129.419632, 35.538373, 0], + [129.442421, 35.53424, 0], + [129.460264, 35.53307, 0], + [129.478165, 35.533168, 0], + [129.495988, 35.534532, 0], + [129.513598, 35.537152, 0], + [129.530862, 35.541009, 0], + [129.547649, 35.546074, 0], + [129.563832, 35.552307, 0], + [129.579288, 35.559662, 0], + [129.593901, 35.568083, 0], + [129.607559, 35.577507, 0], + [129.620158, 35.587862, 0], + [129.631603, 35.599069, 0], + [129.641807, 35.611043, 0], + [129.650691, 35.623695, 0], + [129.662704, 35.644463, 0], + [129.668884, 35.661202, 0], + [129.671829, 35.679087, 0], + [129.673004, 35.698013, 0], + [129.673004, 35.713068, 0], + [129.670258, 35.728677, 0], + [129.664764, 35.746512, 0], + [129.657434, 35.764732, 0], + [129.649768, 35.777904, 0], + [129.640713, 35.790485, 0], + [129.630338, 35.802376, 0], + [129.618721, 35.813487, 0], + [129.605951, 35.823734, 0], + [129.592125, 35.833037, 0], + [129.577348, 35.841327, 0], + [129.561734, 35.848539, 0], + [129.545401, 35.854618, 0], + [129.528474, 35.859518, 0], + [129.506149, 35.86457, 0] + ] + ] + }, + "properties": { "name": "P62B", "description": "월성원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.412133, 35.441186, 0], + [126.401471, 35.44091, 0], + [126.391259, 35.438395, 0], + [126.382196, 35.433811, 0], + [126.374899, 35.427472, 0], + [126.369865, 35.41981, 0], + [126.367943, 35.414222, 0], + [126.36724, 35.408447, 0], + [126.36851, 35.399817, 0], + [126.370867, 35.394341, 0], + [126.376491, 35.386957, 0], + [126.381466, 35.382806, 0], + [126.390388, 35.37805, 0], + [126.397048, 35.376001, 0], + [126.407599, 35.374765, 0], + [126.418183, 35.375796, 0], + [126.4249, 35.377715, 0], + [126.431107, 35.380555, 0], + [126.439054, 35.386348, 0], + [126.444892, 35.393621, 0], + [126.448224, 35.401877, 0], + [126.44882, 35.410555, 0], + [126.446641, 35.419063, 0], + [126.441833, 35.426821, 0], + [126.437322, 35.431312, 0], + [126.431922, 35.435096, 0], + [126.42252, 35.439203, 0], + [126.412133, 35.441186, 0] + ] + ] + }, + "properties": { "name": "P63A", "description": "한빛원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.37979, 37.066915, 0], + [129.390646, 37.067309, 0], + [129.401006, 37.06993, 0], + [129.407285, 37.072833, 0], + [129.412837, 37.076562, 0], + [129.417494, 37.081003, 0], + [129.421114, 37.086021, 0], + [129.424369, 37.094295, 0], + [129.424992, 37.100064, 0], + [129.424349, 37.105831, 0], + [129.422461, 37.111422, 0], + [129.419383, 37.116666, 0], + [129.415209, 37.121405, 0], + [129.410067, 37.125493, 0], + [129.404111, 37.128807, 0], + [129.397524, 37.131245, 0], + [129.390506, 37.132735, 0], + [129.379639, 37.133098, 0], + [129.372489, 37.132082, 0], + [129.365669, 37.130091, 0], + [129.359387, 37.127185, 0], + [129.351383, 37.121314, 0], + [129.34556, 37.11399, 0], + [129.342313, 37.105714, 0], + [129.341697, 37.099945, 0], + [129.343139, 37.09135, 0], + [129.345637, 37.085914, 0], + [129.34928, 37.080905, 0], + [129.353957, 37.076478, 0], + [129.362593, 37.071213, 0], + [129.369176, 37.068776, 0], + [129.376189, 37.067288, 0], + [129.37979, 37.066915, 0] + ] + ] + }, + "properties": { "name": "P64A", "description": "한울원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.395219, 36.934245, 0], + [129.431123, 36.938383, 0], + [129.46559, 36.947431, 0], + [129.481957, 36.953717, 0], + [129.512337, 36.969574, 0], + [129.52612, 36.979026, 0], + [129.538823, 36.9894, 0], + [129.55035, 37.000617, 0], + [129.56953, 37.025238, 0], + [129.577037, 37.038454, 0], + [129.583075, 37.052142, 0], + [129.590568, 37.080514, 0], + [129.591965, 37.094982, 0], + [129.59, 37.123935, 0], + [129.586652, 37.138199, 0], + [129.575348, 37.165759, 0], + [129.567477, 37.178845, 0], + [129.547591, 37.20313, 0], + [129.535727, 37.214144, 0], + [129.508608, 37.233493, 0], + [129.493559, 37.241681, 0], + [129.461056, 37.25477, 0], + [129.426183, 37.263157, 0], + [129.408189, 37.265502, 0], + [129.390005, 37.266587, 0], + [129.353629, 37.264953, 0], + [129.335715, 37.262247, 0], + [129.30112, 37.253162, 0], + [129.284704, 37.246851, 0], + [129.25426, 37.230936, 0], + [129.240465, 37.221453, 0], + [129.227764, 37.211047, 0], + [129.216254, 37.199798, 0], + [129.197144, 37.175121, 0], + [129.18969, 37.161881, 0], + [129.179263, 37.134102, 0], + [129.176367, 37.119776, 0], + [129.175319, 37.090793, 0], + [129.177172, 37.076357, 0], + [129.182739, 37.055177, 0], + [129.192026, 37.034582, 0], + [129.209262, 37.00906, 0], + [129.219897, 36.997294, 0], + [129.244798, 36.976197, 0], + [129.258874, 36.967026, 0], + [129.289743, 36.951784, 0], + [129.323445, 36.941049, 0], + [129.350281, 36.935623, 0], + [129.377066, 36.934063, 0], + [129.395219, 36.934245, 0] + ] + ] + }, + "properties": { "name": "P64B", "description": "한울원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.369655, 36.410003, 0], + [127.372742, 36.410093, 0], + [127.375027, 36.410554, 0], + [127.37843, 36.411538, 0], + [127.380039, 36.412205, 0], + [127.382269, 36.41327, 0], + [127.383642, 36.414445, 0], + [127.385578, 36.415913, 0], + [127.387247, 36.41776, 0], + [127.388507, 36.419578, 0], + [127.38965, 36.4218, 0], + [127.390158, 36.423729, 0], + [127.39068, 36.426117, 0], + [127.390418, 36.428081, 0], + [127.390037, 36.430226, 0], + [127.38965, 36.43178, 0], + [127.388584, 36.433688, 0], + [127.387755, 36.434983, 0], + [127.386518, 36.436475, 0], + [127.384476, 36.438452, 0], + [127.382612, 36.439721, 0], + [127.380724, 36.440964, 0], + [127.377977, 36.442034, 0], + [127.375832, 36.442621, 0], + [127.372742, 36.443242, 0], + [127.369828, 36.443392, 0], + [127.368019, 36.443335, 0], + [127.364454, 36.442841, 0], + [127.361584, 36.442138, 0], + [127.35944, 36.44119, 0], + [127.357909, 36.440412, 0], + [127.356469, 36.439531, 0], + [127.354631, 36.437995, 0], + [127.353473, 36.436855, 0], + [127.352657, 36.435854, 0], + [127.350972, 36.433815, 0], + [127.349721, 36.431084, 0], + [127.349224, 36.428672, 0], + [127.348993, 36.426766, 0], + [127.349294, 36.423866, 0], + [127.350216, 36.421052, 0], + [127.350902, 36.419704, 0], + [127.351731, 36.418409, 0], + [127.352829, 36.416586, 0], + [127.355011, 36.414941, 0], + [127.356341, 36.413953, 0], + [127.358666, 36.412442, 0], + [127.360896, 36.411597, 0], + [127.362565, 36.411034, 0], + [127.365189, 36.410369, 0], + [127.367077, 36.410093, 0], + [127.369655, 36.410003, 0] + ] + ] + }, + "properties": { "name": "P65A", "description": "한국원자력 연구원 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.381494, 36.260519, 0], + [127.407761, 36.262546, 0], + [127.434431, 36.268611, 0], + [127.457199, 36.276386, 0], + [127.482988, 36.287454, 0], + [127.502518, 36.299632, 0], + [127.523869, 36.315771, 0], + [127.535291, 36.327, 0], + [127.545458, 36.338987, 0], + [127.554292, 36.351641, 0], + [127.564316, 36.368222, 0], + [127.571869, 36.387571, 0], + [127.57511, 36.406953, 0], + [127.576483, 36.421429, 0], + [127.576282, 36.435946, 0], + [127.57451, 36.450394, 0], + [127.571178, 36.464663, 0], + [127.566311, 36.478643, 0], + [127.559945, 36.492229, 0], + [127.552127, 36.505316, 0], + [127.542918, 36.517806, 0], + [127.529297, 36.533916, 0], + [127.516251, 36.544949, 0], + [127.499771, 36.556533, 0], + [127.478787, 36.568133, 0], + [127.455139, 36.579144, 0], + [127.429481, 36.586008, 0], + [127.402267, 36.592376, 0], + [127.380295, 36.593479, 0], + [127.358, 36.592811, 0], + [127.340009, 36.591352, 0], + [127.322247, 36.588637, 0], + [127.299271, 36.583004, 0], + [127.271672, 36.573211, 0], + [127.251205, 36.563152, 0], + [127.235413, 36.551569, 0], + [127.215231, 36.537366, 0], + [127.203824, 36.526108, 0], + [127.192841, 36.51074, 0], + [127.177507, 36.488162, 0], + [127.171591, 36.474446, 0], + [127.164688, 36.453322, 0], + [127.163026, 36.431552, 0], + [127.163315, 36.412442, 0], + [127.168121, 36.391993, 0], + [127.173486, 36.374373, 0], + [127.181168, 36.354951, 0], + [127.197019, 36.335281, 0], + [127.207575, 36.323515, 0], + [127.21936, 36.312533, 0], + [127.239532, 36.296865, 0], + [127.261152, 36.285095, 0], + [127.285538, 36.274172, 0], + [127.302704, 36.269743, 0], + [127.321243, 36.26476, 0], + [127.345535, 36.2614, 0], + [127.363491, 36.260328, 0], + [127.381494, 36.260519, 0] + ] + ] + }, + "properties": { "name": "P65B", "description": "한국원자력 연구원 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.435471, 35.242254, 0], + [126.462278, 35.247083, 0], + [126.489029, 35.254591, 0], + [126.511472, 35.263993, 0], + [126.526466, 35.271886, 0], + [126.540563, 35.280813, 0], + [126.553657, 35.290709, 0], + [126.565933, 35.305039, 0], + [126.581039, 35.321288, 0], + [126.596146, 35.342015, 0], + [126.602325, 35.356016, 0], + [126.608505, 35.372255, 0], + [126.610565, 35.387371, 0], + [126.613312, 35.403043, 0], + [126.612062, 35.423548, 0], + [126.609649, 35.43798, 0], + [126.605701, 35.452185, 0], + [126.600246, 35.466057, 0], + [126.593325, 35.479487, 0], + [126.584991, 35.492375, 0], + [126.575306, 35.504622, 0], + [126.564344, 35.516134, 0], + [126.552187, 35.526823, 0], + [126.538929, 35.536608, 0], + [126.524671, 35.545414, 0], + [126.50952, 35.553173, 0], + [126.498642, 35.556809, 0], + [126.477012, 35.565322, 0], + [126.459903, 35.56962, 0], + [126.442397, 35.572685, 0], + [126.424629, 35.574496, 0], + [126.406733, 35.575037, 0], + [126.388848, 35.574305, 0], + [126.37111, 35.572305, 0], + [126.353655, 35.569053, 0], + [126.336617, 35.564573, 0], + [126.320126, 35.558901, 0], + [126.304308, 35.552078, 0], + [126.289284, 35.544158, 0], + [126.275169, 35.535201, 0], + [126.26207, 35.525276, 0], + [126.250087, 35.514458, 0], + [126.239311, 35.50283, 0], + [126.229824, 35.490481, 0], + [126.221698, 35.477505, 0], + [126.214994, 35.464002, 0], + [126.209763, 35.450074, 0], + [126.206043, 35.435827, 0], + [126.203862, 35.421371, 0], + [126.203237, 35.406814, 0], + [126.20417, 35.392269, 0], + [126.206654, 35.377845, 0], + [126.210669, 35.363652, 0], + [126.216185, 35.349799, 0], + [126.223157, 35.33639, 0], + [126.231533, 35.323527, 0], + [126.241249, 35.311308, 0], + [126.25223, 35.299825, 0], + [126.264392, 35.289166, 0], + [126.277642, 35.279411, 0], + [126.291881, 35.270635, 0], + [126.306999, 35.262903, 0], + [126.322878, 35.256276, 0], + [126.339406, 35.250801, 0], + [126.356454, 35.24652, 0], + [126.380539, 35.242815, 0], + [126.399765, 35.240572, 0], + [126.421738, 35.241133, 0], + [126.435471, 35.242254, 0] + ] + ] + }, + "properties": { "name": "P63B", "description": "한빛원전 비행금지구역", "type": "0001" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.806602, 37.665342, 0], + [126.803835, 37.631193, 0], + [126.797918, 37.617409, 0], + [126.804616, 37.591766, 0], + [126.806314, 37.568915, 0], + [126.954214, 37.448681, 0], + [127.060124, 37.447895, 0], + [127.112876, 37.542422, 0], + [127.158247, 37.57961, 0], + [127.141384, 37.615876, 0], + [127.133203, 37.640745, 0], + [127.086943, 37.675806, 0], + [127.054827, 37.693242, 0], + [127.029397, 37.701319, 0], + [126.883354, 37.633327, 0], + [126.806602, 37.665342, 0] + ] + ] + }, + "properties": { + "name": "R75", + "description": "국방부(중앙방공통제소/수방사 방공작전통제소)비행 제한구역", + "type": "0002" + } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", "coordinates": [ + [127.759601, 36.449348, 152.1], + [127.756734, 36.451118, 154.85], + [127.75407, 36.453082, 167.68], + [127.751629, 36.455226, 192.58], + [127.749429, 36.457532, 221.69], + [127.747488, 36.459984, 202.52], + [127.745819, 36.462563, 171.99], + [127.744436, 36.465249, 203.55], + [127.74335, 36.468021, 209.87], + [127.742568, 36.470859, 189.05], + [127.742096, 36.473741, 178.53], + [127.741939, 36.476646, 193.8], + [127.742097, 36.47955, 230.4], + [127.742569, 36.482432, 234.84], + [127.743352, 36.48527, 279.86], + [127.74444, 36.488042, 291.94], + [127.745824, 36.490728, 233.25], + [127.747494, 36.493306, 194.28], + [127.749437, 36.495757, 176], + [127.751639, 36.498063, 193.79], + [127.754083, 36.500206, 195.66], + [127.75675, 36.502169, 196.11], + [127.75962, 36.503938, 212.39], + [127.76267, 36.505499, 248.12], + [127.765879, 36.506841, 333.2], + [127.769221, 36.507952, 518.74], + [127.77267, 36.508825, 504.89], + [127.776202, 36.509453, 505.82], + [127.779788, 36.509831, 433.91], + [127.783401, 36.509956, 377.42], + [127.787014, 36.509828, 393.93], + [127.7906, 36.509446, 407.04], + [127.79413, 36.508815, 501.18], + [127.797579, 36.507939, 404.22], + [127.800919, 36.506825, 465.77], + [127.804126, 36.50548, 376.27], + [127.807174, 36.503916, 379.23], + [127.810041, 36.502145, 365.86], + [127.812705, 36.500179, 346.64], + [127.815146, 36.498034, 368.49], + [127.817345, 36.495726, 424.47], + [127.819285, 36.493273, 410.52], + [127.820951, 36.490693, 485.16], + [127.822331, 36.488006, 406.51], + [127.823415, 36.485233, 288.69], + [127.824194, 36.482394, 217.51], + [127.824662, 36.479512, 337.61], + [127.824816, 36.476607, 467.23], + [127.824655, 36.473703, 522.65], + [127.824179, 36.470822, 359.36], + [127.823393, 36.467984, 317.61], + [127.822302, 36.465213, 311.88], + [127.820916, 36.462528, 247.76], + [127.819243, 36.459951, 199.48], + [127.817298, 36.457501, 174.99], + [127.815095, 36.455196, 163.21], + [127.812651, 36.453055, 159.95], + [127.809984, 36.451093, 147.06], + [127.807115, 36.449326, 147.6], + [127.804066, 36.447766, 149.99], + [127.800859, 36.446426, 148.67], + [127.797519, 36.445316, 165.77], + [127.794072, 36.444444, 203.2], + [127.790543, 36.443817, 243.26], + [127.78696, 36.443439, 221.37], + [127.78335, 36.443315, 249.24], + [127.779739, 36.443443, 314.82], + [127.776157, 36.443824, 268.81], + [127.77263, 36.444455, 271.6], + [127.769184, 36.445331, 240.26], + [127.765846, 36.446445, 177.85], + [127.762641, 36.447788, 162.43], + [127.759601, 36.449348, 152.1] + ] + }, + "properties": { "name": "R20", "description": "보은 반경 3.7Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [129.099492, 35.548315, 268.13], + [129.102252, 35.546479, 186.41], + [129.104805, 35.544453, 148.29], + [129.107132, 35.542255, 119.42], + [129.109213, 35.539899, 111.45], + [129.111035, 35.537405, 105.85], + [129.112582, 35.534792, 110.49], + [129.113844, 35.532078, 104.67], + [129.114809, 35.529286, 101.01], + [129.115472, 35.526435, 103.71], + [129.115828, 35.523548, 132.5], + [129.115872, 35.520647, 134.36], + [129.115606, 35.517754, 143.33], + [129.115031, 35.514891, 135.94], + [129.114152, 35.51208, 114.63], + [129.112975, 35.509341, 124.35], + [129.11151, 35.506697, 140.31], + [129.109767, 35.504166, 124.4], + [129.107759, 35.501769, 162.19], + [129.105503, 35.499523, 117.72], + [129.103016, 35.497446, 140.82], + [129.100315, 35.495553, 166.17], + [129.097422, 35.493859, 170.76], + [129.094359, 35.492377, 156.81], + [129.091149, 35.491118, 123.69], + [129.087817, 35.490091, 122.07], + [129.084387, 35.489304, 123.95], + [129.080887, 35.488764, 187.75], + [129.077341, 35.488474, 234.76], + [129.073779, 35.488436, 195.94], + [129.070225, 35.488652, 161.27], + [129.066709, 35.489119, 181.83], + [129.063255, 35.489833, 208.21], + [129.059892, 35.49079, 202.94], + [129.056643, 35.491982, 184.97], + [129.053534, 35.493399, 203.61], + [129.050589, 35.495032, 244.1], + [129.047829, 35.496867, 310.42], + [129.045276, 35.498892, 414.63], + [129.04295, 35.501089, 539.02], + [129.040868, 35.503444, 649.56], + [129.039045, 35.505937, 805.94], + [129.037497, 35.50855, 961.18], + [129.036233, 35.511263, 961.96], + [129.035265, 35.514055, 851.89], + [129.0346, 35.516905, 731.27], + [129.034242, 35.519791, 655.01], + [129.034195, 35.522692, 750.99], + [129.034459, 35.525585, 654.58], + [129.035031, 35.528449, 624.33], + [129.035909, 35.531261, 766.1], + [129.037084, 35.534, 857.78], + [129.038548, 35.536645, 852.75], + [129.040289, 35.539177, 938.24], + [129.042296, 35.541575, 976.14], + [129.044552, 35.543821, 952.54], + [129.04704, 35.545899, 939.22], + [129.049741, 35.547793, 834.62], + [129.052635, 35.549488, 642.33], + [129.055699, 35.550971, 522.72], + [129.058911, 35.552231, 413.08], + [129.062246, 35.553259, 344.14], + [129.065679, 35.554045, 315.6], + [129.069182, 35.554586, 263.38], + [129.07273, 35.554876, 220.55], + [129.076296, 35.554913, 202.62], + [129.079852, 35.554697, 182.8], + [129.083371, 35.554229, 174.84], + [129.086827, 35.553514, 174.24], + [129.090193, 35.552556, 143.96], + [129.093444, 35.551363, 146.97], + [129.096554, 35.549944, 191.75], + [129.099492, 35.548315, 268.13] + ] + }, + "properties": { "name": "R21", "description": "언양 반경 3.7Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.683234, 37.216605, 0], + [128.682118, 36.917125, 0], + [129.049784, 36.917216, 0], + [129.052174, 37.217423, 0], + [128.683234, 37.216605, 0] + ] + ] + }, + "properties": { "name": "R110", "description": "필승 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.683333, 37.633333, 0], + [127.683341, 37.533289, 0], + [127.8, 37.533333, 0], + [127.782774, 37.617603, 0], + [127.732937, 37.650247, 0], + [127.683333, 37.633333, 0] + ] + ] + }, + "properties": { "name": "R10", "description": "매봉 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.7, 35.15, 0], + [126.683301, 35.135438, 0], + [126.688471, 35.129529, 0], + [126.683367, 35.099909, 0], + [126.749886, 35.083009, 0], + [126.766222, 35.133185, 0], + [126.733333, 35.15, 0], + [126.7, 35.15, 0] + ] + ] + }, + "properties": { "name": "R14", "description": "평동 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.647392, 37.409477, 297.32], + [127.655253, 37.405761, 271.8], + [127.662676, 37.401515, 147.38], + [127.669605, 37.396771, 145.62], + [127.675985, 37.391564, 157.25], + [127.681769, 37.385936, 77.98], + [127.686913, 37.379928, 117.87], + [127.691377, 37.373586, 169.27], + [127.695128, 37.366959, 218.33], + [127.698138, 37.360098, 237.61], + [127.700383, 37.353054, 223.02], + [127.701847, 37.345881, 186.23], + [127.702519, 37.338634, 85.32], + [127.702394, 37.331368, 58.07], + [127.701473, 37.324139, 97.89], + [127.699763, 37.317001, 86.47], + [127.697278, 37.310008, 80.28], + [127.694037, 37.303214, 62.02], + [127.690065, 37.296671, 51.73], + [127.685391, 37.290428, 62.12], + [127.680052, 37.284532, 37.31], + [127.674088, 37.279029, 56.45], + [127.667545, 37.27396, 60.76], + [127.660473, 37.269363, 58.61], + [127.652925, 37.265275, 78.09], + [127.644958, 37.261724, 74.95], + [127.636634, 37.258739, 91.82], + [127.628015, 37.256343, 181.92], + [127.619167, 37.254553, 112.83], + [127.610157, 37.253382, 95.32], + [127.601054, 37.252841, 96.31], + [127.591925, 37.252932, 80.98], + [127.582841, 37.253656, 79.86], + [127.573871, 37.255006, 71.09], + [127.565082, 37.256973, 69.81], + [127.556542, 37.259541, 61.57], + [127.548315, 37.262692, 50.81], + [127.540463, 37.266401, 58.04], + [127.533046, 37.270639, 77.15], + [127.526122, 37.275376, 78.77], + [127.519741, 37.280574, 69.58], + [127.513953, 37.286195, 56.01], + [127.508802, 37.292196, 56.73], + [127.504327, 37.298531, 48.85], + [127.500563, 37.305152, 69.37], + [127.497537, 37.312008, 64.39], + [127.495275, 37.319048, 69.58], + [127.493792, 37.326218, 85.3], + [127.4931, 37.333464, 74.89], + [127.493205, 37.34073, 63.04], + [127.494106, 37.347961, 69.88], + [127.495797, 37.355102, 94.87], + [127.498265, 37.362099, 135.73], + [127.501491, 37.368898, 176.17], + [127.505451, 37.375448, 105.59], + [127.510115, 37.381698, 93.56], + [127.515448, 37.387601, 109.39], + [127.521409, 37.393112, 129.15], + [127.527952, 37.398189, 142.15], + [127.535029, 37.402793, 57.93], + [127.542585, 37.40689, 34.99], + [127.550562, 37.410447, 190.15], + [127.558899, 37.413437, 80.84], + [127.567534, 37.415839, 59.76], + [127.5764, 37.417633, 60.31], + [127.585429, 37.418806, 69.99], + [127.594553, 37.419348, 61.79], + [127.603701, 37.419256, 89.07], + [127.612805, 37.418531, 64.98], + [127.621794, 37.417178, 109.43], + [127.6306, 37.415206, 177.95], + [127.639155, 37.412633, 252.75], + [127.647392, 37.409477, 297.32] + ] + }, + "properties": { "name": "R17", "description": "여주 반경 9.26Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.251125, 36.636601, 136.79], + [127.25379, 36.634637, 102.43], + [127.256231, 36.632495, 81.92], + [127.25843, 36.63019, 49.89], + [127.26037, 36.627739, 53.59], + [127.262037, 36.625163, 76.63], + [127.263417, 36.622479, 147.17], + [127.264501, 36.61971, 141.24], + [127.265279, 36.616875, 126.76], + [127.265747, 36.613996, 90.52], + [127.2659, 36.611095, 145.43], + [127.265738, 36.608195, 114.93], + [127.265262, 36.605317, 96.67], + [127.264475, 36.602484, 98.97], + [127.263383, 36.599716, 69.82], + [127.261995, 36.597035, 42.2], + [127.260322, 36.594462, 43.01], + [127.258375, 36.592015, 75.27], + [127.256171, 36.589714, 53.21], + [127.253725, 36.587576, 73.24], + [127.251057, 36.585617, 68.78], + [127.248186, 36.583852, 60.46], + [127.245135, 36.582295, 85.54], + [127.241927, 36.580957, 74.46], + [127.238585, 36.579849, 122.01], + [127.235136, 36.578978, 71.69], + [127.231606, 36.578352, 123.92], + [127.228022, 36.577976, 82.24], + [127.22441, 36.577852, 102.55], + [127.220798, 36.577981, 143.51], + [127.217215, 36.578362, 169.25], + [127.213686, 36.578992, 187.34], + [127.210239, 36.579867, 187.35], + [127.206899, 36.58098, 223.48], + [127.203694, 36.582322, 169.42], + [127.200646, 36.583884, 156.01], + [127.197779, 36.585652, 122.4], + [127.195114, 36.587615, 125.4], + [127.192673, 36.589756, 183.21], + [127.190473, 36.59206, 251.79], + [127.188532, 36.594509, 291.27], + [127.186864, 36.597085, 248.69], + [127.185482, 36.599768, 204.47], + [127.184396, 36.602537, 178.21], + [127.183614, 36.605371, 184.48], + [127.183144, 36.60825, 197.6], + [127.182988, 36.61115, 182.64], + [127.183147, 36.61405, 189.88], + [127.183621, 36.616928, 192.34], + [127.184405, 36.619762, 185.71], + [127.185494, 36.622531, 178.33], + [127.18688, 36.625212, 148.02], + [127.188552, 36.627787, 177.68], + [127.190497, 36.630235, 234.57], + [127.192701, 36.632537, 216.73], + [127.195147, 36.634676, 209.57], + [127.197815, 36.636636, 259.45], + [127.200687, 36.638402, 262.62], + [127.203739, 36.63996, 321.47], + [127.20695, 36.641299, 209.61], + [127.210294, 36.642408, 175.27], + [127.213745, 36.643279, 106.32], + [127.217278, 36.643905, 66.86], + [127.220866, 36.644282, 95.91], + [127.224481, 36.644406, 144.65], + [127.228095, 36.644277, 117.85], + [127.231682, 36.643895, 87.54], + [127.235214, 36.643264, 103.93], + [127.238663, 36.642388, 159.87], + [127.242005, 36.641274, 152.7], + [127.245212, 36.639931, 174.67], + [127.248261, 36.638368, 143.36], + [127.251125, 36.636601, 136.79] + ] + }, + "properties": { "name": "R19", "description": "조치원 반경 3.7Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.227106, 37.336732, 115.22], + [127.224609, 37.338853, 68.07], + [127.222353, 37.341139, 90.25], + [127.220357, 37.343573, 74.78], + [127.218634, 37.346136, 75.26], + [127.217199, 37.348808, 73.78], + [127.216063, 37.351569, 83.69], + [127.215233, 37.354399, 105.98], + [127.214717, 37.357275, 108.83], + [127.214519, 37.360177, 105.33], + [127.214639, 37.36308, 146.39], + [127.215077, 37.365965, 192.35], + [127.21583, 37.368808, 185.15], + [127.216891, 37.371588, 108.15], + [127.218254, 37.374285, 86.97], + [127.219908, 37.376876, 163.17], + [127.221839, 37.379343, 135.68], + [127.224034, 37.381667, 159.11], + [127.226475, 37.38383, 151.91], + [127.229145, 37.385815, 80.68], + [127.232022, 37.387608, 62.57], + [127.235086, 37.389195, 53.1], + [127.238311, 37.390564, 47.16], + [127.241675, 37.391704, 47.68], + [127.245151, 37.392606, 46.94], + [127.248713, 37.393265, 45.57], + [127.252334, 37.393674, 38.09], + [127.255986, 37.393831, 43.32], + [127.259641, 37.393734, 77.14], + [127.263271, 37.393384, 169.46], + [127.266849, 37.392784, 223.66], + [127.270348, 37.391939, 223.75], + [127.273741, 37.390854, 156.53], + [127.277001, 37.389538, 150.35], + [127.280105, 37.388002, 136.73], + [127.283028, 37.386256, 154.64], + [127.285749, 37.384315, 75.59], + [127.288246, 37.382192, 121.41], + [127.290501, 37.379905, 131.65], + [127.292496, 37.37747, 91.48], + [127.294216, 37.374906, 119.95], + [127.295648, 37.372233, 85.52], + [127.296782, 37.369471, 86.27], + [127.297608, 37.366641, 104.17], + [127.298121, 37.363764, 179.99], + [127.298316, 37.360862, 282.72], + [127.298193, 37.357959, 182.96], + [127.297751, 37.355074, 190.2], + [127.296995, 37.352232, 310.15], + [127.295931, 37.349452, 368.69], + [127.294565, 37.346757, 395.97], + [127.29291, 37.344167, 373.02], + [127.290977, 37.341701, 282.17], + [127.288781, 37.339379, 241.54], + [127.286339, 37.337217, 300.46], + [127.283669, 37.335233, 360], + [127.280792, 37.333441, 390.09], + [127.27773, 37.331856, 373.8], + [127.274506, 37.330488, 374.17], + [127.271145, 37.329349, 377.82], + [127.267671, 37.328448, 314.8], + [127.264112, 37.32779, 264.61], + [127.260495, 37.327382, 181.28], + [127.256846, 37.327225, 119.3], + [127.253194, 37.327322, 80.18], + [127.249567, 37.327672, 75.81], + [127.245992, 37.328271, 73.26], + [127.242496, 37.329116, 70.54], + [127.239105, 37.3302, 60.3], + [127.235847, 37.331515, 81.87], + [127.232745, 37.33305, 155.27], + [127.229822, 37.334795, 182.25], + [127.227106, 37.336732, 115.22] + ] + }, + "properties": { "name": "R35", "description": "매산리 반경 3.7Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [128.202574, 36.34834, 432.3], + [128.19698, 36.354038, 440.03], + [128.192023, 36.360106, 357.13], + [128.18774, 36.3665, 276.11], + [128.184165, 36.373169, 169.68], + [128.181326, 36.380064, 117.19], + [128.179242, 36.387132, 102.1], + [128.177932, 36.394319, 73.25], + [128.177405, 36.40157, 57.81], + [128.177665, 36.408831, 55.49], + [128.17871, 36.416046, 58.75], + [128.180533, 36.423161, 62.5], + [128.183121, 36.43012, 52.92], + [128.186452, 36.436871, 51.19], + [128.190503, 36.443363, 52.55], + [128.195243, 36.449546, 57.49], + [128.200635, 36.455373, 62.71], + [128.20664, 36.4608, 69.35], + [128.21321, 36.465784, 58.74], + [128.220296, 36.470289, 80.77], + [128.227844, 36.474279, 71.78], + [128.235797, 36.477725, 65.47], + [128.244093, 36.4806, 58.03], + [128.25267, 36.482881, 60.74], + [128.261462, 36.484553, 58.16], + [128.270403, 36.485601, 52.41], + [128.279422, 36.486018, 90.89], + [128.288453, 36.485801, 104.27], + [128.297426, 36.484951, 77.8], + [128.306272, 36.483474, 94.57], + [128.314924, 36.481383, 100.61], + [128.323316, 36.478693, 173.12], + [128.331384, 36.475425, 155.55], + [128.339065, 36.471603, 82.79], + [128.346303, 36.467257, 134.78], + [128.353041, 36.46242, 99.65], + [128.359229, 36.457128, 79.93], + [128.364819, 36.451423, 71.1], + [128.369768, 36.445347, 69.1], + [128.37404, 36.438947, 73.68], + [128.377601, 36.432272, 69.35], + [128.380425, 36.425373, 65.57], + [128.382491, 36.418301, 58.41], + [128.383783, 36.411112, 51.66], + [128.38429, 36.403859, 47.12], + [128.384011, 36.396599, 46.08], + [128.382947, 36.389386, 44.95], + [128.381106, 36.382274, 48.76], + [128.378502, 36.375319, 54.28], + [128.375156, 36.368573, 76.85], + [128.371093, 36.362088, 79.65], + [128.366345, 36.355912, 147.71], + [128.360947, 36.350093, 245.77], + [128.35494, 36.344674, 388.88], + [128.348371, 36.339697, 344.26], + [128.341289, 36.3352, 194.13], + [128.333749, 36.331217, 145.2], + [128.325807, 36.327778, 90.24], + [128.317523, 36.324909, 59.23], + [128.308962, 36.322632, 65.57], + [128.300187, 36.320965, 78.21], + [128.291265, 36.319919, 61], + [128.282264, 36.319503, 38.37], + [128.273253, 36.31972, 74.02], + [128.264299, 36.320568, 184.28], + [128.255471, 36.322041, 322.63], + [128.246835, 36.324128, 240.96], + [128.238457, 36.326813, 345.76], + [128.230401, 36.330075, 387.82], + [128.222728, 36.33389, 159.85], + [128.215496, 36.338229, 100.01], + [128.20876, 36.343059, 210.09], + [128.202574, 36.34834, 432.3] + ] + }, + "properties": { "name": "R81", "description": "낙동 반경 9.26Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.347694, 35.936361, 0], + [129.331028, 35.869694, 0], + [129.431028, 35.953028, 0], + [129.397722, 35.952813, 0], + [129.347694, 35.936361, 0] + ] + ] + }, + "properties": { "name": "R89", "description": "오천 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.429889, 35.926917, 0], + [129.442865, 35.892515, 0], + [129.474083, 35.894694, 0], + [129.517151, 35.886193, 0], + [129.521278, 35.890528, 0], + [129.454889, 35.92275, 0], + [129.429889, 35.926917, 0] + ] + ] + }, + "properties": { "name": "R90A", "description": "수성-A 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.442865, 35.892515, 0], + [129.461942, 35.836086, 0], + [129.495442, 35.843415, 0], + [129.517151, 35.886193, 0], + [129.473742, 35.895155, 0], + [129.442865, 35.892515, 0] + ] + ] + }, + "properties": { "name": "R90B", "description": "수성-B 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.516667, 36.333333, 0], + [126.183333, 36.216667, 0], + [126.4, 36.033333, 0], + [126.583333, 36.3, 0], + [126.516667, 36.333333, 0] + ] + ] + }, + "properties": { "name": "R97A", "description": "철매-A 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [125.95, 36.233333, 0], + [126.05, 36.2, 0], + [126.366667, 35.883333, 0], + [126.633224, 36.237074, 0], + [126.502111, 36.35625, 0], + [126.245472, 36.36875, 0], + [126.166667, 36.333333, 0], + [125.95, 36.333333, 0], + [125.95, 36.233333, 0] + ] + ] + }, + "properties": { "name": "R97B", "description": "철매-B 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [128.886577, 34.924907, 0], + [128.891234, 34.929284, 0], + [128.89634, 34.933312, 0], + [128.901856, 34.93696, 0], + [128.907738, 34.940199, 0], + [128.913943, 34.943005, 0], + [128.920423, 34.945357, 0], + [128.927129, 34.947237, 0], + [128.934009, 34.94863, 0], + [128.941012, 34.949526, 0], + [128.948083, 34.949917, 0], + [128.955169, 34.949802, 0], + [128.962216, 34.949181, 0], + [128.969169, 34.948058, 0], + [128.975977, 34.946442, 0], + [128.982586, 34.944346, 0], + [128.988947, 34.941785, 0], + [128.995012, 34.938779, 0], + [129.000733, 34.935351, 0], + [129.006067, 34.931527, 0], + [129.010974, 34.927336, 0], + [129.015416, 34.922811, 0], + [129.01936, 34.917985, 0], + [129.022775, 34.912895, 0], + [129.025636, 34.907581, 0], + [129.027922, 34.902082, 0], + [129.029613, 34.896441, 0], + [129.030699, 34.890701, 0], + [129.031171, 34.884905, 0], + [129.031024, 34.879097, 0], + [129.030262, 34.873321, 0], + [129.028889, 34.867622, 0], + [129.026916, 34.862043, 0], + [129.024358, 34.856626, 0], + [129.021235, 34.851413, 0], + [129.017571, 34.846443, 0], + [129.013393, 34.841754, 0], + [129.008733, 34.837381, 0], + [129.003628, 34.833358, 0], + [128.998115, 34.829715, 0], + [128.992237, 34.82648, 0], + [128.986038, 34.823678, 0], + [128.979566, 34.821329, 0], + [128.972869, 34.819452, 0], + [128.965999, 34.818062, 0], + [128.959007, 34.817167, 0], + [128.951947, 34.816776, 0], + [128.944873, 34.816891, 0], + [128.937837, 34.817512, 0], + [128.930894, 34.818633, 0], + [128.924096, 34.820246, 0], + [128.917495, 34.822339, 0], + [128.911141, 34.824896, 0], + [128.905083, 34.827898, 0], + [128.899365, 34.831321, 0], + [128.894032, 34.835141, 0], + [128.889125, 34.839327, 0], + [128.88468, 34.843848, 0], + [128.880732, 34.848669, 0], + [128.87731, 34.853755, 0], + [128.874442, 34.859066, 0], + [128.872148, 34.864561, 0], + [128.870446, 34.8702, 0], + [128.869349, 34.875939, 0], + [128.868866, 34.881735, 0], + [128.869001, 34.887543, 0], + [128.869752, 34.893319, 0], + [128.871115, 34.89902, 0], + [128.873078, 34.904602, 0], + [128.875627, 34.910022, 0], + [128.878743, 34.915239, 0], + [128.882402, 34.920213, 0], + [128.886577, 34.924907, 0] + ] + }, + "properties": { "name": "R100", "description": "남형제도 반경 7.4Km 비행 제한구역", "type": "0002", "tessellate": true} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.154617, 36.679506, 0], + [126.151306, 36.549556, 0], + [126.230472, 36.552333, 0], + [126.199639, 36.67675, 0], + [126.154617, 36.679506, 0] + ] + ] + }, + "properties": { "name": "R108A", "description": "안흥-A 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.154617, 36.679506, 0], + [126.124639, 36.469556, 0], + [126.250472, 36.490389, 0], + [126.199639, 36.67675, 0], + [126.154617, 36.679506, 0] + ] + ] + }, + "properties": { "name": "R108B", "description": "안흥-B 비행 제한구역", "type": "0002"} + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [125.998, 36.636194, 0], + [125.713889, 35.021944, 0], + [126.052194, 34.973361, 0], + [126.297944, 36.569556, 0], + [126.17325, 36.677306, 0], + [125.998, 36.636194, 0] + ] + ] + }, + "properties": { "name": "R108C", "description": "안흥-C 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.154617, 36.679506, 0], + [126.006333, 36.38625, 0], + [126.152139, 36.36125, 0], + [126.197972, 36.67675, 0], + [126.154617, 36.679506, 0] + ] + ] + }, + "properties": { "name": "R108D", "description": "안흥-D 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.154617, 36.679506, 0], + [126.228528, 36.559556, 0], + [126.265194, 36.560111, 0], + [126.265194, 36.615944, 0], + [126.199917, 36.686472, 0], + [126.154617, 36.679506, 0] + ] + ] + }, + "properties": { "name": "R108E", "description": "안흥-E 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.154617, 36.679506, 0], + [125.943833, 36.302917, 0], + [126.009111, 36.28875, 0], + [126.197972, 36.67675, 0], + [126.154617, 36.679506, 0] + ] + ] + }, + "properties": { "name": "R108F", "description": "안흥-F 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.416667, 36.235278, 0], + [126.420833, 36.101944, 0], + [126.638056, 36.106944, 0], + [126.652222, 36.154444, 0], + [126.649444, 36.240556, 0], + [126.416667, 36.235278, 0] + ] + ] + }, + "properties": { "name": "R111", "description": "응촌 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.785278, 37.572222, 0], + [127.803333, 37.533333, 0], + [127.828333, 37.516667, 0], + [127.87, 37.530556, 0], + [127.875556, 37.559722, 0], + [127.861667, 37.572222, 0], + [127.785278, 37.572222, 0] + ] + ] + }, + "properties": { "name": "R114", "description": "비승 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [125.826484, 34.740764, 0], + [125.829562, 34.73397, 0], + [125.831907, 34.72698, 0], + [125.833502, 34.719849, 0], + [125.834335, 34.712631, 0], + [125.834399, 34.705381, 0], + [125.833694, 34.698154, 0], + [125.832226, 34.691005, 0], + [125.830007, 34.683988, 0], + [125.827052, 34.677157, 0], + [125.823385, 34.670564, 0], + [125.819034, 34.664258, 0], + [125.814032, 34.658288, 0], + [125.808417, 34.6527, 0], + [125.802232, 34.647534, 0], + [125.795525, 34.642832, 0], + [125.788345, 34.638627, 0], + [125.780748, 34.634954, 0], + [125.772791, 34.631838, 0], + [125.764536, 34.629304, 0], + [125.756043, 34.627372, 0], + [125.747379, 34.626055, 0], + [125.738608, 34.625364, 0], + [125.729798, 34.625304, 0], + [125.721014, 34.625876, 0], + [125.712324, 34.627074, 0], + [125.703794, 34.628891, 0], + [125.695489, 34.631312, 0], + [125.687471, 34.634319, 0], + [125.679801, 34.637889, 0], + [125.672538, 34.641995, 0], + [125.665737, 34.646605, 0], + [125.659449, 34.651686, 0], + [125.653722, 34.657197, 0], + [125.648601, 34.663098, 0], + [125.644124, 34.669344, 0], + [125.640325, 34.675886, 0], + [125.637233, 34.682676, 0], + [125.634872, 34.689662, 0], + [125.633261, 34.69679, 0], + [125.632411, 34.704007, 0], + [125.632329, 34.711257, 0], + [125.633016, 34.718485, 0], + [125.634467, 34.725636, 0], + [125.636671, 34.732657, 0], + [125.639612, 34.739492, 0], + [125.643267, 34.746091, 0], + [125.647609, 34.752403, 0], + [125.652604, 34.75838, 0], + [125.658216, 34.763976, 0], + [125.6644, 34.769149, 0], + [125.67111, 34.773859, 0], + [125.678296, 34.77807, 0], + [125.685901, 34.78175, 0], + [125.693869, 34.784871, 0], + [125.702138, 34.78741, 0], + [125.710646, 34.789346, 0], + [125.719327, 34.790666, 0], + [125.728115, 34.791358, 0], + [125.736943, 34.791418, 0], + [125.745744, 34.790846, 0], + [125.75445, 34.789645, 0], + [125.762996, 34.787825, 0], + [125.771315, 34.785399, 0], + [125.779345, 34.782387, 0], + [125.787024, 34.778811, 0], + [125.794293, 34.774699, 0], + [125.801098, 34.770081, 0], + [125.807386, 34.764993, 0], + [125.81311, 34.759474, 0], + [125.818226, 34.753567, 0], + [125.822694, 34.747315, 0], + [125.826484, 34.740764, 0] + ] + }, + "properties": { "name": "R117", "description": "자은도 반경 9.26Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.520611, 37.536694, 0], + [127.470446, 37.52053, 0], + [127.470333, 37.511694, 0], + [127.52975, 37.511694, 0], + [127.520611, 37.536694, 0] + ] + ] + }, + "properties": { "name": "R1", "description": "용문 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.23907, 35.788827, 0], + [126.22751, 35.777749, 0], + [126.214807, 35.76753, 0], + [126.201058, 35.758246, 0], + [126.186366, 35.749969, 0], + [126.170845, 35.74276, 0], + [126.154611, 35.736674, 0], + [126.137788, 35.731757, 0], + [126.120503, 35.728047, 0], + [126.102886, 35.725572, 0], + [126.085071, 35.724349, 0], + [126.067193, 35.72439, 0], + [126.049387, 35.725692, 0], + [126.031787, 35.728247, 0], + [126.014527, 35.732035, 0], + [125.997738, 35.737027, 0], + [125.981546, 35.743186, 0], + [125.966074, 35.750464, 0], + [125.95144, 35.758808, 0], + [125.937754, 35.768153, 0], + [125.925121, 35.77843, 0], + [125.913636, 35.789559, 0], + [125.903388, 35.801457, 0], + [125.894455, 35.814034, 0], + [125.886904, 35.827193, 0], + [125.880795, 35.840836, 0], + [125.876173, 35.854858, 0], + [125.873076, 35.869154, 0], + [125.871527, 35.883614, 0], + [125.871539, 35.898128, 0], + [125.873113, 35.912586, 0], + [125.876238, 35.926878, 0], + [125.88089, 35.940894, 0], + [125.887036, 35.954529, 0], + [125.894628, 35.967678, 0], + [125.90361, 35.980241, 0], + [125.913914, 35.992121, 0], + [125.925462, 36.003229, 0], + [125.938165, 36.013478, 0], + [125.951928, 36.022792, 0], + [125.966645, 36.031098, 0], + [125.982204, 36.038334, 0], + [125.998487, 36.044443, 0], + [126.015368, 36.049379, 0], + [126.032719, 36.053104, 0], + [126.050406, 36.05559, 0], + [126.068295, 36.056817, 0], + [126.086249, 36.056777, 0], + [126.104129, 36.055469, 0], + [126.121799, 36.052903, 0], + [126.139124, 36.0491, 0], + [126.155971, 36.044088, 0], + [126.172211, 36.037906, 0], + [126.18772, 36.030601, 0], + [126.202379, 36.022228, 0], + [126.216078, 36.012853, 0], + [126.228711, 36.002546, 0], + [126.240182, 35.991387, 0.69], + [126.250404, 35.97946, 0], + [126.259299, 35.966857, 0], + [126.266801, 35.953675, 0], + [126.272853, 35.940012, 0], + [126.277409, 35.925975, 0], + [126.280435, 35.911669, 0], + [126.28191, 35.897204, 0], + [126.281823, 35.88269, 0], + [126.280175, 35.868238, 0], + [126.27698, 35.853957, 0], + [126.272262, 35.839955, 0], + [126.266059, 35.82634, 0], + [126.258419, 35.813215, 0], + [126.2494, 35.800678, 0], + [126.23907, 35.788827, 0] + ] + }, + "properties": { "name": "R105", "description": "직도 반경 18.52Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", + "coordinates": [ + [126.531181, 35.586883, 23.54], + [126.535032, 35.580315, 62.74], + [126.538164, 35.573498, 0], + [126.540553, 35.566486, 0], + [126.542181, 35.55933, 0], + [126.543037, 35.552087, 0], + [126.543113, 35.54481, 0], + [126.542409, 35.537556, 0.41], + [126.540931, 35.530379, 1.26], + [126.538691, 35.523334, 5.76], + [126.535705, 35.516475, 9.66], + [126.531996, 35.509853, 12.76], + [126.527594, 35.50352, 49.04], + [126.52253, 35.497523, 84.35], + [126.516845, 35.491908, 84.86], + [126.510581, 35.486718, 79.77], + [126.503787, 35.481991, 69.11], + [126.496513, 35.477764, 52.97], + [126.488814, 35.474069, 31.48], + [126.480751, 35.470934, 9.8], + [126.472383, 35.468382, 9.32], + [126.463774, 35.466434, 7.62], + [126.45499, 35.465103, 5.72], + [126.446097, 35.464401, 3.64], + [126.437163, 35.464331, 1.39], + [126.428256, 35.464896, 0], + [126.419442, 35.46609, 0], + [126.41079, 35.467904, 0], + [126.402364, 35.470325, 0], + [126.394228, 35.473335, 0], + [126.386445, 35.47691, 0], + [126.379074, 35.481023, 0], + [126.37217, 35.485644, 0], + [126.365785, 35.490736, 0], + [126.35997, 35.496262, 0], + [126.354767, 35.502179, 0], + [126.350217, 35.508443, 0], + [126.346355, 35.515006, 0], + [126.343209, 35.521817, 0], + [126.340804, 35.528826, 0], + [126.339158, 35.535979, 0], + [126.338284, 35.543221, 0], + [126.33819, 35.550498, 0], + [126.338875, 35.557753, 0], + [126.340335, 35.564932, 0], + [126.34256, 35.571981, 0], + [126.345531, 35.578845, 0], + [126.349227, 35.585472, 0], + [126.35362, 35.591812, 0], + [126.358677, 35.597816, 0], + [126.364358, 35.603438, 0], + [126.370622, 35.608636, 0], + [126.37742, 35.61337, 0], + [126.3847, 35.617605, 0], + [126.392407, 35.621306, 0], + [126.400482, 35.624447, 0], + [126.408864, 35.627004, 0], + [126.417488, 35.628956, 0], + [126.42629, 35.630289, 0], + [126.435201, 35.630993, 0], + [126.444154, 35.631063, 0], + [126.45308, 35.630497, 0.06], + [126.461911, 35.629301, 4.86], + [126.47058, 35.627483, 7.09], + [126.47902, 35.625057, 7.66], + [126.487168, 35.622041, 71.66], + [126.49496, 35.61846, 151.7], + [126.502339, 35.61434, 231.89], + [126.509246, 35.609712, 294.76], + [126.515631, 35.604612, 147.37], + [126.521443, 35.599078, 154.46], + [126.52664, 35.593154, 119.22], + [126.531181, 35.586883, 23.54] + ] + }, + "properties": { "name": "R104", "description": "미여도 반경 9.25Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.444778, 37.370861, 0], + [127.412556, 37.33475, 0], + [127.428667, 37.321972, 0], + [127.473111, 37.36725, 0], + [127.444778, 37.370861, 0] + ] + ] + }, + "properties": { "name": "R122", "description": "천덕봉 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [125.302553, 34.476138, 0], + [125.294924, 34.479825, 0], + [125.287712, 34.484045, 0], + [125.280973, 34.488767, 0], + [125.274758, 34.493955, 0], + [125.269115, 34.49957, 0], + [125.264086, 34.505568, 0], + [125.25971, 34.511904, 0], + [125.25602, 34.518531, 0], + [125.253045, 34.525397, 0], + [125.250807, 34.532451, 0], + [125.249323, 34.539638, 0], + [125.248606, 34.546905, 0], + [125.248659, 34.554195, 0], + [125.249485, 34.561454, 0], + [125.251075, 34.568626, 0], + [125.253419, 34.575656, 0], + [125.256499, 34.582492, 0], + [125.260291, 34.58908, 0], + [125.264766, 34.595371, 0], + [125.269892, 34.601317, 0], + [125.275628, 34.606872, 0], + [125.281931, 34.611995, 0], + [125.288754, 34.616645, 0], + [125.296044, 34.620788, 0], + [125.303745, 34.624391, 0], + [125.3118, 34.627428, 0], + [125.320146, 34.629876, 0], + [125.32872, 34.631715, 0], + [125.337456, 34.632931, 0], + [125.346288, 34.633516, 0], + [125.355148, 34.633464, 0], + [125.36397, 34.632777, 0], + [125.372684, 34.631459, 0], + [125.381225, 34.62952, 0], + [125.389529, 34.626976, 0], + [125.39753, 34.623845, 0], + [125.405169, 34.620152, 0], + [125.412387, 34.615925, 0], + [125.419128, 34.611196, 0], + [125.425343, 34.606001, 0], + [125.430983, 34.600379, 0], + [125.436006, 34.594375, 0], + [125.440373, 34.588032, 0], + [125.444051, 34.5814, 0], + [125.447013, 34.574529, 0], + [125.449236, 34.567472, 0], + [125.450703, 34.560283, 0], + [125.451404, 34.553015, 0], + [125.451333, 34.545725, 0], + [125.45049, 34.538467, 0], + [125.448884, 34.531298, 0], + [125.446525, 34.524271, 0], + [125.443432, 34.51744, 0], + [125.439629, 34.510857, 0], + [125.435145, 34.504572, 0], + [125.430014, 34.498633, 0], + [125.424275, 34.493085, 0], + [125.417972, 34.48797, 0], + [125.411153, 34.483327, 0], + [125.40387, 34.479191, 0], + [125.396178, 34.475593, 0], + [125.388135, 34.472561, 0], + [125.379803, 34.470118, 0], + [125.371244, 34.468283, 0], + [125.362525, 34.467068, 0], + [125.35371, 34.466485, 0], + [125.344868, 34.466536, 0], + [125.336064, 34.467222, 0], + [125.327366, 34.468537, 0], + [125.31884, 34.470471, 0], + [125.31055, 34.473011, 0], + [125.302553, 34.476138, 0] + ] + }, + "properties": { "name": "R125", "description": "흑산도 반경 9.26Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", + "coordinates": [ + [127.307229, 34.903117, 467.12], + [127.308561, 34.903049, 418.61], + [127.309881, 34.902887, 364.81], + [127.311179, 34.902631, 317.22], + [127.312445, 34.902283, 283.77], + [127.313668, 34.901847, 242.02], + [127.314841, 34.901324, 203.83], + [127.315954, 34.900719, 171.78], + [127.316998, 34.900037, 154.22], + [127.317965, 34.899284, 134.34], + [127.318849, 34.898463, 114.47], + [127.319643, 34.897583, 97.68], + [127.320339, 34.89665, 84.38], + [127.320934, 34.89567, 82.68], + [127.321423, 34.894651, 74.25], + [127.321801, 34.893601, 68.15], + [127.322066, 34.892529, 62.6], + [127.322217, 34.891441, 63.12], + [127.322251, 34.890347, 54.2], + [127.322169, 34.889254, 48.12], + [127.321971, 34.888172, 46.93], + [127.321658, 34.887107, 44.62], + [127.321234, 34.88607, 42.84], + [127.320702, 34.885066, 41.63], + [127.320064, 34.884104, 56.91], + [127.319327, 34.883192, 68.21], + [127.318496, 34.882336, 60.26], + [127.317577, 34.881542, 46.99], + [127.316577, 34.880817, 40.61], + [127.315504, 34.880166, 29.14], + [127.314366, 34.879595, 26], + [127.313172, 34.879107, 32.05], + [127.31193, 34.878706, 31.52], + [127.31065, 34.878396, 27.17], + [127.309343, 34.878178, 26.76], + [127.308017, 34.878055, 30.91], + [127.306683, 34.878027, 33.22], + [127.305351, 34.878094, 36.18], + [127.304032, 34.878256, 42.11], + [127.302734, 34.878512, 45.59], + [127.301469, 34.87886, 45.2], + [127.300246, 34.879297, 45.86], + [127.299073, 34.879819, 51.32], + [127.297961, 34.880424, 71.3], + [127.296917, 34.881106, 80.51], + [127.295949, 34.881859, 82.88], + [127.295066, 34.882679, 86.18], + [127.294272, 34.88356, 86.98], + [127.293575, 34.884493, 89.69], + [127.29298, 34.885473, 97.18], + [127.292492, 34.886491, 108.37], + [127.292113, 34.887541, 122.49], + [127.291848, 34.888614, 140.83], + [127.291697, 34.889701, 148.13], + [127.291662, 34.890796, 153.32], + [127.291744, 34.891888, 166.62], + [127.291942, 34.892971, 189.18], + [127.292254, 34.894035, 207.95], + [127.292678, 34.895073, 241.76], + [127.293211, 34.896077, 268.22], + [127.293848, 34.897038, 301.51], + [127.294585, 34.897951, 334.05], + [127.295416, 34.898807, 358.06], + [127.296335, 34.899601, 383.76], + [127.297335, 34.900326, 431.58], + [127.298408, 34.900977, 467.67], + [127.299546, 34.901548, 491.02], + [127.300741, 34.902036, 495.02], + [127.301983, 34.902437, 462.27], + [127.303263, 34.902747, 453.07], + [127.304571, 34.902965, 449.07], + [127.305897, 34.903088, 461.24], + [127.307229, 34.903117, 467.12] + ] + }, + "properties": { "name": "R127", "description": "벌교 반경 1.4Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.668611, 35.349722, 0], + [126.688889, 35.288889, 0], + [126.711111, 35.280278, 0], + [126.709167, 35.351389, 0], + [126.688611, 35.356667, 0], + [126.668611, 35.349722, 0] + ] + ] + }, + "properties": { "name": "R129", "description": "수련산 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.155702, 37.357252, 0], + [126.1542, 37.359899, 0], + [126.152995, 37.36264, 0], + [126.152094, 37.365453, 0], + [126.151505, 37.368319, 0], + [126.151233, 37.371214, 0], + [126.15128, 37.374117, 0], + [126.151644, 37.377006, 0], + [126.152324, 37.379859, 0], + [126.153315, 37.382653, 0], + [126.154608, 37.385369, 0], + [126.156195, 37.387984, 0], + [126.158062, 37.39048, 0], + [126.160196, 37.392837, 0], + [126.162581, 37.395037, 0], + [126.165198, 37.397063, 0], + [126.168027, 37.398901, 0], + [126.171048, 37.400535, 0], + [126.174236, 37.401954, 0], + [126.177569, 37.403147, 0], + [126.181019, 37.404104, 0], + [126.184561, 37.404819, 0], + [126.188169, 37.405286, 0], + [126.191814, 37.405501, 0], + [126.195468, 37.405463, 0], + [126.199105, 37.405172, 0], + [126.202696, 37.40463, 0], + [126.206213, 37.403841, 0], + [126.209631, 37.402812, 0], + [126.212922, 37.40155, 0], + [126.216063, 37.400065, 0], + [126.219028, 37.398368, 0], + [126.221796, 37.396472, 0], + [126.224345, 37.394392, 0], + [126.226656, 37.392143, 0], + [126.228711, 37.389742, 0], + [126.230495, 37.387208, 0], + [126.231995, 37.384561, 0], + [126.233198, 37.381819, 0], + [126.234095, 37.379005, 0], + [126.234681, 37.376139, 0], + [126.23495, 37.373243, 0], + [126.2349, 37.37034, 0], + [126.234533, 37.367452, 0], + [126.233849, 37.3646, 0], + [126.232856, 37.361806, 0], + [126.231561, 37.359091, 0], + [126.229972, 37.356477, 0], + [126.228103, 37.353982, 0], + [126.225968, 37.351626, 0], + [126.223583, 37.349428, 0], + [126.220966, 37.347402, 0], + [126.218137, 37.345566, 0], + [126.215118, 37.343933, 0], + [126.211931, 37.342515, 0], + [126.208601, 37.341323, 0], + [126.205153, 37.340366, 0], + [126.201614, 37.339652, 0], + [126.198009, 37.339186, 0], + [126.194368, 37.338971, 0], + [126.190716, 37.339009, 0], + [126.187083, 37.3393, 0], + [126.183495, 37.339841, 0], + [126.17998, 37.340629, 0], + [126.176565, 37.341657, 0], + [126.173276, 37.342918, 0], + [126.170137, 37.344402, 0], + [126.167173, 37.346098, 0], + [126.164405, 37.347993, 0], + [126.161856, 37.350072, 0], + [126.159544, 37.35232, 0], + [126.157488, 37.354719, 0], + [126.155702, 37.357252, 0] + ] + }, + "properties": { "name": "R133", "description": "초치도 반경 3.7Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.283333, 35.119444, 0], + [129.173611, 35.019444, 0], + [129.236111, 34.972222, 0], + [129.344444, 35.073611, 0], + [129.283333, 35.119444, 0] + ] + ] + }, + "properties": { "name": "R143", "description": "부산KCG 비행 제한구역", "type": "0002" } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.535927, 36.324769, 13.87], + [126.53469, 36.324566, 18.99], + [126.533436, 36.324451, 25.57], + [126.532175, 36.324424, 20.81], + [126.530915, 36.324486, 24.46], + [126.529666, 36.324636, 34.33], + [126.528439, 36.324873, 54.71], + [126.527242, 36.325195, 78.83], + [126.526084, 36.3256, 90.57], + [126.524975, 36.326085, 73.06], + [126.523922, 36.326646, 51.88], + [126.522934, 36.327279, 48.32], + [126.522018, 36.327978, 64.28], + [126.521181, 36.32874, 52.17], + [126.52043, 36.329557, 32.67], + [126.51977, 36.330424, 15.49], + [126.519206, 36.331333, 0.95], + [126.518743, 36.332279, 0.09], + [126.518384, 36.333254, 0], + [126.518132, 36.334251, 0], + [126.517988, 36.335261, 0], + [126.517955, 36.336278, 0], + [126.518031, 36.337293, 0], + [126.518217, 36.338298, 0], + [126.518511, 36.339287, 0], + [126.518911, 36.340252, 0], + [126.519414, 36.341185, 0], + [126.520016, 36.342078, 0], + [126.520712, 36.342927, 0], + [126.521498, 36.343723, 0], + [126.522367, 36.344461, 0], + [126.523312, 36.345135, 0], + [126.524326, 36.34574, 0], + [126.525403, 36.346272, 0], + [126.526532, 36.346726, 0], + [126.527707, 36.347099, 0], + [126.528917, 36.347388, 0], + [126.530154, 36.347591, 0], + [126.531409, 36.347706, 0], + [126.532671, 36.347733, 0], + [126.533931, 36.347672, 0], + [126.53518, 36.347522, 0], + [126.536408, 36.347285, 0], + [126.537605, 36.346962, 0], + [126.538763, 36.346557, 0], + [126.539873, 36.346072, 0], + [126.540926, 36.345511, 0], + [126.541914, 36.344878, 0], + [126.54283, 36.344178, 0], + [126.543666, 36.343417, 0], + [126.544418, 36.342599, 0], + [126.545077, 36.341732, 1.2], + [126.545641, 36.340822, 12.43], + [126.546104, 36.339876, 19.22], + [126.546462, 36.338901, 20.55], + [126.546714, 36.337905, 22.25], + [126.546857, 36.336894, 33.19], + [126.546891, 36.335878, 59.22], + [126.546814, 36.334863, 85.51], + [126.546627, 36.333857, 101.42], + [126.546333, 36.332868, 83.18], + [126.545933, 36.331904, 65.61], + [126.545429, 36.330971, 62.52], + [126.544827, 36.330077, 54.37], + [126.544131, 36.329229, 39.56], + [126.543345, 36.328433, 32.55], + [126.542477, 36.327696, 24.8], + [126.541531, 36.327022, 20.08], + [126.540517, 36.326417, 19.8], + [126.539441, 36.325885, 12.02], + [126.538311, 36.325431, 9.27], + [126.537137, 36.325058, 10.32], + [126.535927, 36.324769, 13.87] + ] + }, + "properties": { "name": "R138", "description": "대천 반경 1.3Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.417877, 36.848243, 170.18], + [127.418676, 36.847451, 186.44], + [127.419385, 36.846606, 178.38], + [127.42, 36.845715, 173.17], + [127.420515, 36.844785, 186.69], + [127.420927, 36.843822, 203.84], + [127.421232, 36.842834, 226.84], + [127.421429, 36.841828, 261.13], + [127.421515, 36.840813, 293.69], + [127.421491, 36.839796, 319.45], + [127.421356, 36.838784, 355.54], + [127.421111, 36.837785, 376.7], + [127.420758, 36.836807, 358.36], + [127.420301, 36.835858, 315.12], + [127.419741, 36.834944, 284.45], + [127.419084, 36.834072, 256.43], + [127.418335, 36.83325, 234.58], + [127.417499, 36.832483, 210.89], + [127.416583, 36.831778, 186.51], + [127.415593, 36.831138, 165.13], + [127.414538, 36.830571, 151.6], + [127.413425, 36.830079, 141.61], + [127.412262, 36.829667, 136.56], + [127.41106, 36.829337, 128.72], + [127.409825, 36.829093, 131.14], + [127.408569, 36.828935, 140.05], + [127.407301, 36.828866, 134.56], + [127.406029, 36.828885, 141.21], + [127.404765, 36.828993, 133.54], + [127.403517, 36.829189, 139.66], + [127.402296, 36.829471, 147.83], + [127.40111, 36.829838, 157.69], + [127.399968, 36.830285, 158.81], + [127.398879, 36.830811, 150.91], + [127.397852, 36.831411, 138.28], + [127.396893, 36.832079, 150.59], + [127.396012, 36.832813, 148.87], + [127.395213, 36.833605, 134.66], + [127.394504, 36.834449, 135.47], + [127.393889, 36.83534, 136.68], + [127.393374, 36.836271, 135.99], + [127.392962, 36.837233, 139.04], + [127.392656, 36.838221, 142.25], + [127.392459, 36.839227, 145.93], + [127.392373, 36.840242, 146.1], + [127.392397, 36.84126, 149.34], + [127.392532, 36.842272, 158.16], + [127.392777, 36.84327, 180.54], + [127.393129, 36.844248, 225.83], + [127.393587, 36.845198, 230.09], + [127.394146, 36.846112, 205.06], + [127.394803, 36.846983, 201.67], + [127.395553, 36.847805, 221.39], + [127.396389, 36.848572, 250.08], + [127.397305, 36.849278, 275.09], + [127.398295, 36.849917, 289.62], + [127.39935, 36.850485, 304.44], + [127.400464, 36.850976, 313.99], + [127.401627, 36.851389, 303.38], + [127.40283, 36.851718, 287.07], + [127.404065, 36.851963, 259.85], + [127.405321, 36.85212, 227.59], + [127.40659, 36.852189, 186.14], + [127.407862, 36.852169, 150.99], + [127.409126, 36.852061, 127.57], + [127.410374, 36.851865, 132.08], + [127.411596, 36.851583, 147.6], + [127.412783, 36.851216, 171.73], + [127.413925, 36.850768, 151.89], + [127.415013, 36.850242, 119.84], + [127.416041, 36.849642, 113.19], + [127.416999, 36.848973, 130.7], + [127.417877, 36.848243, 170.18] + ] + }, + "properties": { "name": "R139", "description": "진천 반경 1.3Km 비행 제한구역", "type": "0002", "tessellate": true } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.404371, 37.380504, 0], + [126.422041, 37.376657, 0], + [126.440282, 37.375304, 0], + [126.458541, 37.376486, 0], + [126.476267, 37.380167, 0], + [126.48476, 37.382913, 0], + [126.492921, 37.386235, 0], + [126.507999, 37.394508, 0], + [126.521044, 37.404733, 0], + [126.526677, 37.410483, 0], + [126.535951, 37.423041, 0], + [126.539521, 37.429753, 0], + [126.54439, 37.443789, 0], + [126.545652, 37.451006, 0], + [126.545781, 37.465564, 0], + [126.544646, 37.472794, 0], + [126.540022, 37.486882, 0], + [126.536567, 37.493633, 0], + [126.527501, 37.506291, 0], + [126.521959, 37.512101, 0], + [126.515799, 37.517506, 0], + [126.501816, 37.526938, 0], + [126.485978, 37.534299, 0], + [126.468765, 37.539364, 0], + [126.450703, 37.54198, 0], + [126.432343, 37.542066, 0], + [126.414243, 37.53962, 0], + [126.396956, 37.534716, 0], + [126.381009, 37.527505, 0], + [126.366886, 37.518205, 0], + [126.355017, 37.5071, 0], + [126.345763, 37.494528, 0], + [126.339404, 37.480872, 0], + [126.336132, 37.466547, 0], + [126.336044, 37.451989, 0], + [126.339141, 37.43764, 0], + [126.345328, 37.423935, 0], + [126.354414, 37.411291, 0], + [126.366124, 37.400092, 0], + [126.372854, 37.395142, 0], + [126.387808, 37.386729, 0], + [126.404371, 37.380504, 0] + ] + ] + }, + "properties": { "name": "인천공항", "description": "인천공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.79345, 37.6385, 0], + [126.77514, 37.637024, 0], + [126.766178, 37.635344, 0], + [126.748978, 37.630161, 0], + [126.733178, 37.62269, 0], + [126.719261, 37.613158, 0], + [126.713142, 37.607708, 0], + [126.702819, 37.595645, 0], + [126.698692, 37.589125, 0], + [126.692664, 37.575357, 0], + [126.689747, 37.560968, 0], + [126.690026, 37.546395, 0], + [126.693492, 37.532083, 0], + [126.700038, 37.518465, 0], + [126.709462, 37.505955, 0], + [126.721479, 37.494932, 0], + [126.735722, 37.48573, 0], + [126.75176, 37.478628, 0], + [126.769106, 37.473842, 0], + [126.787233, 37.471517, 0], + [126.805594, 37.471722, 0], + [126.832359, 37.47674, 0], + [126.848897, 37.483078, 0], + [126.863799, 37.491597, 0], + [126.876614, 37.502038, 0], + [126.886953, 37.514085, 0], + [126.891091, 37.520598, 0], + [126.897151, 37.534356, 0], + [126.899025, 37.541497, 0], + [126.90039, 37.556031, 0], + [126.89855, 37.570531, 0], + [126.89356, 37.584558, 0], + [126.88841, 37.596626, 0], + [126.874821, 37.609512, 0], + [126.86164, 37.619679, 0], + [126.846427, 37.627877, 0], + [126.829644, 37.633856, 0], + [126.811804, 37.637433, 0], + [126.79345, 37.6385, 0] + ] + ] + }, + "properties": { "name": "김포공항", "description": "김포공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.568598160228, 38.0205107614195, 0], + [128.573821, 38.012733, 0], + [128.58518, 38.001227, 0], + [128.598898, 37.991447, 0], + [128.614559, 37.983692, 0], + [128.631689, 37.978195, 0], + [128.649767, 37.975124, 0], + [128.668247, 37.974571, 0], + [128.682992, 37.976167, 0], + [128.686568, 37.976554, 0], + [128.704176, 37.981011, 0], + [128.720537, 37.987809, 0], + [128.735156, 37.99674, 0], + [128.747588, 38.007536, 0], + [128.757456, 38.019867, 0], + [128.764459, 38.03336, 0], + [128.768383, 38.047607, 0], + [128.769106, 38.062173, 0], + [128.764166, 38.083656, 0], + [128.756998, 38.097098, 0], + [128.746971, 38.109355, 0], + [128.734387, 38.120055, 0], + [128.71963, 38.128871, 0], + [128.711574, 38.132487, 0], + [128.694414, 38.137994, 0], + [128.676297, 38.141072, 0], + [128.657775, 38.141625, 0], + [128.639414, 38.139638, 0], + [128.621771, 38.13517, 0], + [128.605386, 38.128359, 0], + [128.590758, 38.11941, 0], + [128.57833, 38.108598, 0], + [128.568481, 38.096252, 0], + [128.561509, 38.082746, 0], + [128.557624, 38.068493, 0], + [128.556944, 38.053925, 0], + [128.559485, 38.039486, 0], + [128.565171, 38.025613, 0], + [128.568598, 38.020511, 0], + [128.568598160228, 38.0205107614195, 0] + ] + ] + }, + "properties": { "name": "양양국제공항", "description": "양양국제공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.514126, 33.591465, 0], + [126.496804, 33.593516, 0], + [126.479317, 33.593028, 0], + [126.462199, 33.590016, 0], + [126.44597, 33.584571, 0], + [126.431126, 33.57686, 0], + [126.418117, 33.567116, 0], + [126.412427, 33.561573, 0], + [126.402893, 33.549355, 0], + [126.396051, 33.535943, 0], + [126.393708, 33.528915, 0], + [126.391267, 33.514483, 0], + [126.391868, 33.499918, 0], + [126.395493, 33.48566, 0], + [126.40203, 33.472144, 0], + [126.411278, 33.45978, 0], + [126.422957, 33.448942, 0], + [126.436712, 33.439959, 0], + [126.452124, 33.433104, 0], + [126.468727, 33.428584, 0], + [126.486017, 33.426537, 0], + [126.50347, 33.427024, 0], + [126.520558, 33.430031, 0], + [126.536762, 33.435466, 0], + [126.551591, 33.443165, 0], + [126.564596, 33.452895, 0], + [126.57538, 33.464358, 0], + [126.583619, 33.477211, 0], + [126.590673, 33.49823, 0], + [126.59163, 33.512782, 0], + [126.589541, 33.527252, 0], + [126.580858, 33.547844, 0], + [126.571625, 33.560221, 0], + [126.559949, 33.571074, 0], + [126.546187, 33.58007, 0], + [126.530756, 33.586937, 0], + [126.514126, 33.591465, 0] + ] + ] + }, + "properties": { "name": "제주국제공항", "description": "제주국제공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.516348, 36.797451, 0], + [127.498228, 36.798888, 0], + [127.480073, 36.797782, 0], + [127.462434, 36.794165, 0], + [127.44585, 36.788147, 0], + [127.430826, 36.779914, 0], + [127.417819, 36.769714, 0], + [127.412198, 36.763972, 0], + [127.402935, 36.751421, 0], + [127.396535, 36.737773, 0], + [127.394472, 36.730665, 0], + [127.392701, 36.716154, 0], + [127.394099, 36.701617, 0], + [127.398624, 36.687496, 0], + [127.406136, 36.674218, 0], + [127.416403, 36.662191, 0], + [127.429117, 36.651772, 0], + [127.44389, 36.643281, 0], + [127.464752, 36.634264, 0], + [127.486772, 36.632011, 0], + [127.50494, 36.631845, 0], + [127.522868, 36.634211, 0], + [127.531573, 36.636323, 0], + [127.548131, 36.642328, 0], + [127.563141, 36.650547, 0], + [127.576147, 36.660731, 0], + [127.586755, 36.672571, 0], + [127.594641, 36.685708, 0], + [127.600708, 36.703109, 0], + [127.601377, 36.714251, 0], + [127.600017, 36.728791, 0], + [127.595527, 36.74292, 0], + [127.588042, 36.756209, 0], + [127.577787, 36.768255, 0], + [127.565073, 36.778689, 0], + [127.550287, 36.787195, 0], + [127.533879, 36.793513, 0], + [127.516348, 36.797451, 0] + ] + ] + }, + "properties": { "name": "청주국제공항", "description": "청주국제공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.403553, 34.90975, 0], + [126.412208, 34.911543, 0], + [126.423111, 34.914652, 0], + [126.432381, 34.918593, 0], + [126.440964, 34.923378, 0], + [126.45089, 34.92924, 0], + [126.457297, 34.934339, 0], + [126.463138, 34.939875, 0], + [126.468369, 34.945808, 0], + [126.47295, 34.952091, 0], + [126.476846, 34.958678, 0], + [126.480027, 34.965518, 0], + [126.48247, 34.972559, 0], + [126.484154, 34.979747, 0], + [126.485068, 34.987029, 0], + [126.485204, 34.994348, 0], + [126.483879, 35.00441, 0], + [126.482506, 35.013127, 0], + [126.479759, 35.020718, 0], + [126.475983, 35.027466, 0], + [126.472893, 35.03337, 0], + [126.467056, 35.040116, 0], + [126.459362, 35.047699, 0], + [126.453134, 35.052952, 0], + [126.44637, 35.057739, 0], + [126.439121, 35.062026, 0], + [126.431443, 35.065779, 0], + [126.423394, 35.068969, 0], + [126.415035, 35.071572, 0], + [126.40643, 35.073569, 0], + [126.397645, 35.074943, 0], + [126.390839, 35.076089, 0], + [126.379803, 35.075789, 0], + [126.370883, 35.075254, 0], + [126.362054, 35.074084, 0], + [126.353383, 35.072288, 0], + [126.344937, 35.069879, 0], + [126.33419, 35.066535, 0], + [126.325607, 35.062039, 0], + [126.319427, 35.058105, 0], + [126.314654, 35.054559, 0], + [126.308247, 35.049453, 0], + [126.302408, 35.043909, 0], + [126.297183, 35.037969, 0], + [126.292611, 35.031679, 0], + [126.288726, 35.025087, 0], + [126.285558, 35.018242, 0], + [126.283132, 35.011197, 0], + [126.281464, 35.004006, 0], + [126.280568, 34.996722, 0], + [126.280451, 34.989403, 0], + [126.281113, 34.982103, 0], + [126.282548, 34.974879, 0], + [126.284746, 34.967784, 0], + [126.28769, 34.960873, 0], + [126.291357, 34.954198, 0], + [126.296768, 34.945614, 0], + [126.303291, 34.939422, 0], + [126.309471, 34.932667, 0], + [126.319381, 34.926064, 0], + [126.326624, 34.921785, 0], + [126.334294, 34.918039, 0], + [126.342332, 34.914855, 0], + [126.350677, 34.912257, 0], + [126.361656, 34.909302, 0], + [126.371612, 34.907895, 0], + [126.380539, 34.907332, 0], + [126.390495, 34.907613, 0], + [126.398392, 34.908176, 0], + [126.403553, 34.90975, 0] + ] + ] + }, + "properties": { "name": "무안국제공항", "description": "무안국제공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.812885, 35.042949, 0], + [126.826172, 35.04349, 0], + [126.839261, 35.046583, 0], + [126.847685, 35.049031, 0], + [126.855817, 35.05207, 0], + [126.863595, 35.055677, 0], + [126.87096, 35.059825, 0], + [126.877857, 35.064482, 0], + [126.884231, 35.069613, 0], + [126.890036, 35.075179, 0], + [126.895227, 35.081138, 0], + [126.899765, 35.087444, 0], + [126.903614, 35.094049, 0], + [126.906745, 35.100904, 0], + [126.909135, 35.107956, 0], + [126.910629, 35.113449, 0], + [126.911316, 35.119347, 0], + [126.911659, 35.125244, 0], + [126.911699, 35.129753, 0], + [126.910997, 35.137049, 0], + [126.909943, 35.142371, 0], + [126.908226, 35.148828, 0], + [126.906166, 35.154161, 0], + [126.903076, 35.160056, 0], + [126.900576, 35.164908, 0], + [126.896167, 35.171276, 0], + [126.891094, 35.177306, 0], + [126.885397, 35.182952, 0], + [126.879119, 35.188169, 0], + [126.872308, 35.19292, 0], + [126.865015, 35.197166, 0], + [126.853981, 35.202428, 0], + [126.846428, 35.205233, 0], + [126.840819, 35.206581, 0], + [126.832187, 35.208531, 0], + [126.823379, 35.209858, 0], + [126.814462, 35.210553, 0], + [126.803169, 35.210563, 0], + [126.796579, 35.210026, 0], + [126.787747, 35.208809, 0], + [126.779079, 35.206968, 0], + [126.770641, 35.204515, 0], + [126.762497, 35.201471, 0], + [126.754709, 35.197857, 0], + [126.747338, 35.193702, 0], + [126.740438, 35.189038, 0], + [126.734063, 35.183899, 0], + [126.728261, 35.178326, 0], + [126.723076, 35.17236, 0], + [126.718547, 35.166047, 0], + [126.71471, 35.159436, 0], + [126.711592, 35.152576, 0], + [126.709218, 35.14552, 0], + [126.707605, 35.138322, 0], + [126.706766, 35.131037, 0], + [126.706707, 35.123719, 0], + [126.707428, 35.116425, 0], + [126.708923, 35.10921, 0], + [126.71118, 35.102129, 0], + [126.714183, 35.095235, 0], + [126.717908, 35.088582, 0], + [126.722327, 35.08222, 0], + [126.727406, 35.076197, 0], + [126.733107, 35.070559, 0], + [126.739385, 35.065349, 0], + [126.746193, 35.060606, 0], + [126.75348, 35.056366, 0], + [126.76119, 35.052662, 0], + [126.769264, 35.049522, 0], + [126.777641, 35.046969, 0], + [126.783943, 35.045457, 0], + [126.795049, 35.043698, 0], + [126.803947, 35.043005, 0], + [126.812885, 35.042949, 0] + ] + ] + }, + "properties": { "name": "광주공항", "description": "광주공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.622837, 35.987045, 0], + [126.613799, 35.987213, 0], + [126.595842, 35.985636, 0], + [126.578498, 35.981558, 0], + [126.562295, 35.975102, 0], + [126.547726, 35.966465, 0], + [126.539841, 35.958, 0], + [126.529891, 35.950013, 0], + [126.521205, 35.937201, 0], + [126.515402, 35.923361, 0], + [126.512656, 35.908916, 0], + [126.513048, 35.894305, 0], + [126.515808, 35.883487, 0], + [126.519468, 35.873043, 0], + [126.527442, 35.859934, 0], + [126.538101, 35.848146, 0], + [126.546707, 35.838968, 0], + [126.558394, 35.833707, 0], + [126.574193, 35.82667, 0], + [126.591257, 35.821962, 0], + [126.60907, 35.819725, 0], + [126.618088, 35.819558, 0], + [126.636008, 35.821131, 0], + [126.65332, 35.825201, 0], + [126.6695, 35.831645, 0], + [126.67701, 35.835698, 0], + [126.690586, 35.845315, 0], + [126.701899, 35.856696, 0], + [126.710606, 35.869495, 0], + [126.716439, 35.883325, 0], + [126.719222, 35.897765, 0], + [126.718867, 35.912378, 0], + [126.715384, 35.926718, 0], + [126.708877, 35.940351, 0], + [126.699542, 35.952861, 0], + [126.687663, 35.963867, 0], + [126.673599, 35.973036, 0], + [126.65778, 35.980086, 0], + [126.64936, 35.982747, 0], + [126.640685, 35.984804, 0], + [126.622837, 35.987045, 0] + ] + ] + }, + "properties": { "name": "군산공항", "description": "군산공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.584572, 34.921971, 0], + [127.578958, 34.920043, 0], + [127.570842, 34.917006, 0], + [127.563081, 34.913401, 0], + [127.555733, 34.909254, 0], + [127.548855, 34.904597, 0], + [127.542499, 34.899466, 0], + [127.536713, 34.8939, 0], + [127.531541, 34.887941, 0], + [127.527022, 34.881635, 0], + [127.523192, 34.87503, 0], + [127.520078, 34.868176, 0], + [127.517705, 34.861125, 0], + [127.51609, 34.853932, 0], + [127.515246, 34.84665, 0], + [127.515178, 34.839336, 0], + [127.515887, 34.832044, 0], + [127.517367, 34.824831, 0], + [127.519607, 34.817752, 0], + [127.52259, 34.810859, 0], + [127.526292, 34.804206, 0], + [127.530686, 34.797843, 0], + [127.535738, 34.791819, 0], + [127.541409, 34.786179, 0], + [127.547657, 34.780966, 0], + [127.554433, 34.77622, 0], + [127.561686, 34.771976, 0], + [127.569361, 34.768267, 0], + [127.5774, 34.765122, 0], + [127.588005, 34.761076, 0], + [127.597618, 34.759384, 0], + [127.607574, 34.758538, 0], + [127.616844, 34.757692, 0], + [127.627487, 34.757974, 0], + [127.638499, 34.760298, 0], + [127.64712, 34.762128, 0], + [127.655514, 34.764568, 0], + [127.663617, 34.767599, 0], + [127.671369, 34.771198, 0], + [127.681046, 34.77546, 0], + [127.685585, 34.779988, 0], + [127.691941, 34.785111, 0], + [127.69773, 34.79067, 0], + [127.702908, 34.796622, 0], + [127.707435, 34.802921, 0], + [127.711277, 34.809521, 0], + [127.714404, 34.81637, 0], + [127.716793, 34.823417, 0], + [127.718424, 34.830608, 0], + [127.719287, 34.837888, 0], + [127.719373, 34.845202, 0], + [127.718682, 34.852495, 0], + [127.717219, 34.85971, 0], + [127.714994, 34.866793, 0], + [127.712026, 34.873691, 0], + [127.708335, 34.880349, 0], + [127.70395, 34.886718, 0], + [127.698905, 34.89275, 0], + [127.691002, 34.900856, 0], + [127.684135, 34.905361, 0], + [127.676926, 34.910429, 0], + [127.668343, 34.914652, 0], + [127.657218, 34.919488, 0], + [127.648863, 34.922052, 0], + [127.63813, 34.923941, 0], + [127.627144, 34.92563, 0], + [127.613694, 34.926106, 0], + [127.6048, 34.925531, 0], + [127.596002, 34.924322, 0], + [127.584572, 34.921971, 0] + ] + ] + }, + "properties": { "name": "여수공항", "description": "여수공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.93158, 35.098362, 0], + [128.940492, 35.098235, 0], + [128.954086, 35.099125, 0], + [128.966834, 35.101647, 0], + [128.978806, 35.105305, 0], + [128.988762, 35.109237, 0], + [128.998598, 35.11459, 0], + [129.005529, 35.119176, 0], + [129.011946, 35.124238, 0], + [129.0178, 35.129738, 0], + [129.023046, 35.135634, 0], + [129.027645, 35.141881, 0], + [129.031561, 35.148433, 0], + [129.034765, 35.155238, 0], + [129.037231, 35.162246, 0], + [129.038941, 35.169402, 0], + [129.039882, 35.176654, 0], + [129.040046, 35.183945, 0], + [129.039433, 35.191219, 0], + [129.038045, 35.198423, 0], + [129.035894, 35.2055, 0], + [129.032996, 35.212397, 0], + [129.029373, 35.219061, 0], + [129.025052, 35.225442, 0], + [129.020066, 35.23149, 0], + [129.014452, 35.237161, 0], + [129.008255, 35.242409, 0], + [129.00152, 35.247197, 0], + [128.994299, 35.251486, 0], + [128.986646, 35.255245, 0], + [128.978622, 35.258444, 0], + [128.970285, 35.261059, 0], + [128.961701, 35.26307, 0], + [128.952935, 35.264463, 0], + [128.944053, 35.265225, 0], + [128.935123, 35.265352, 0], + [128.926214, 35.264842, 0], + [128.914948, 35.263282, 0], + [128.904648, 35.260759, 0], + [128.892129, 35.256588, 0], + [128.884322, 35.253049, 0], + [128.876922, 35.248967, 0], + [128.869987, 35.244374, 0], + [128.861046, 35.237488, 0], + [128.854866, 35.231598, 0], + [128.850059, 35.224868, 0], + [128.84491, 35.217295, 0], + [128.841133, 35.210283, 0], + [128.838341, 35.20126, 0], + [128.836648, 35.194101, 0], + [128.835297, 35.184191, 0], + [128.83564, 35.176334, 0], + [128.837013, 35.166792, 0], + [128.839783, 35.158009, 0], + [128.842696, 35.151116, 0], + [128.846331, 35.144458, 0], + [128.850662, 35.138083, 0], + [128.855655, 35.132042, 0], + [128.861272, 35.126379, 0], + [128.867471, 35.121137, 0], + [128.874203, 35.116357, 0], + [128.881419, 35.112075, 0], + [128.889062, 35.108323, 0], + [128.897076, 35.10513, 0], + [128.905398, 35.10252, 0], + [128.913967, 35.100512, 0], + [128.922716, 35.099123, 0], + [128.93158, 35.098362, 0] + ] + ] + }, + "properties": { "name": "김해국제공항", "description": "김해국제공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.325885, 35.512544, 0], + [129.334653, 35.510984, 0], + [129.343554, 35.510052, 0], + [129.352522, 35.509754, 0], + [129.361487, 35.510092, 0], + [129.370382, 35.511065, 0], + [129.379139, 35.512664, 0], + [129.387692, 35.514878, 0], + [129.395976, 35.51769, 0], + [129.403928, 35.521078, 0], + [129.411488, 35.525017, 0], + [129.420662, 35.53055, 0], + [129.428215, 35.535858, 0], + [129.434395, 35.542284, 0], + [129.440575, 35.549547, 0], + [129.445038, 35.55625, 0], + [129.449071, 35.565034, 0], + [129.451757, 35.572005, 0], + [129.453686, 35.57914, 0], + [129.454843, 35.586385, 0], + [129.455219, 35.593684, 0], + [129.454812, 35.600982, 0], + [129.453623, 35.608224, 0], + [129.451663, 35.615353, 0], + [129.448945, 35.622317, 0], + [129.445491, 35.629061, 0], + [129.441326, 35.635535, 0], + [129.436481, 35.641689, 0], + [129.430995, 35.647476, 0], + [129.424908, 35.652853, 0], + [129.418266, 35.657777, 0], + [129.411121, 35.662212, 0], + [129.403526, 35.666124, 0], + [129.395541, 35.669482, 0], + [129.387224, 35.672262, 0], + [129.378641, 35.674441, 0], + [129.369856, 35.676004, 0], + [129.360936, 35.676939, 0], + [129.354057, 35.6771, 0], + [129.342966, 35.676898, 0], + [129.334053, 35.675924, 0], + [129.325279, 35.674321, 0], + [129.316711, 35.672103, 0], + [129.308413, 35.669285, 0], + [129.300451, 35.665891, 0], + [129.292883, 35.661945, 0], + [129.285768, 35.657478, 0], + [129.279161, 35.652524, 0], + [129.27311, 35.64712, 0], + [129.267663, 35.641308, 0], + [129.262861, 35.635132, 0], + [129.258741, 35.628639, 0], + [129.255332, 35.62188, 0], + [129.251747, 35.61293, 0], + [129.249344, 35.602602, 0], + [129.249254, 35.593219, 0], + [129.24968, 35.585922, 0], + [129.252091, 35.574962, 0], + [129.254494, 35.566305, 0], + [129.259065, 35.557858, 0], + [129.263241, 35.55139, 0], + [129.268093, 35.545243, 0], + [129.273584, 35.539463, 0], + [129.279673, 35.534095, 0], + [129.286313, 35.529178, 0], + [129.293453, 35.52475, 0], + [129.30104, 35.520846, 0], + [129.309014, 35.517494, 0], + [129.317317, 35.51472, 0], + [129.325885, 35.512544, 0] + ] + ] + }, + "properties": { "name": "울산공항", "description": "울산공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.995872, 35.145178, 0], + [127.992525, 35.142573, 0], + [127.987124, 35.136749, 0], + [127.982365, 35.130562, 0], + [127.978283, 35.12406, 0], + [127.974911, 35.117291, 0], + [127.972273, 35.110308, 0], + [127.97039, 35.103163, 0], + [127.969275, 35.09591, 0], + [127.968938, 35.088606, 0], + [127.969379, 35.081306, 0], + [127.970596, 35.074065, 0], + [127.97258, 35.066938, 0], + [127.975314, 35.05998, 0], + [127.978778, 35.053244, 0], + [127.982946, 35.04678, 0], + [127.987785, 35.040637, 0], + [127.993259, 35.034864, 0], + [128.000679, 35.027747, 0], + [128.009949, 35.022124, 0], + [128.018189, 35.017907, 0], + [128.025398, 35.013689, 0], + [128.033981, 35.010596, 0], + [128.045328, 35.008016, 0], + [128.054049, 35.00647, 0], + [128.062902, 35.005551, 0], + [128.071819, 35.005268, 0], + [128.080732, 35.005621, 0], + [128.089574, 35.006609, 0], + [128.098277, 35.008223, 0], + [128.106776, 35.010453, 0], + [128.115006, 35.013279, 0], + [128.122904, 35.016682, 0], + [128.130411, 35.020636, 0], + [128.137469, 35.025109, 0], + [128.144025, 35.030069, 0], + [128.150029, 35.035478, 0], + [128.155436, 35.041295, 0], + [128.160203, 35.047474, 0], + [128.162384, 35.051922, 0], + [128.166847, 35.058386, 0], + [128.168907, 35.064849, 0], + [128.171654, 35.071312, 0], + [128.172684, 35.078618, 0], + [128.17337, 35.086484, 0], + [128.173298, 35.09671, 0], + [128.172098, 35.103953, 0], + [128.170132, 35.111083, 0], + [128.166161, 35.121313, 0], + [128.159803, 35.131258, 0], + [128.152084, 35.140406, 0], + [128.143437, 35.148557, 0], + [128.132172, 35.157249, 0], + [128.122145, 35.161799, 0], + [128.114197, 35.165146, 0], + [128.099899, 35.168757, 0], + [128.088644, 35.171629, 0], + [128.079773, 35.17255, 0], + [128.068314, 35.172966, 0], + [128.053047, 35.17149, 0], + [128.038788, 35.168476, 0], + [128.024025, 35.163985, 0], + [128.012148, 35.157437, 0], + [128.005085, 35.152956, 0], + [127.995872, 35.145178, 0] + ] + ] + }, + "properties": { "name": "사천공항", "description": "사천공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.58711, 35.833938, 0], + [128.593873, 35.829119, 0], + [128.597717, 35.826721, 0], + [128.60321, 35.823102, 0], + [128.611107, 35.819762, 0], + [128.616883, 35.817763, 0], + [128.625269, 35.815107, 0], + [128.633907, 35.813053, 0], + [128.642733, 35.811617, 0], + [128.651679, 35.81081, 0], + [128.665695, 35.810853, 0], + [128.675308, 35.811688, 0], + [128.68731, 35.813916, 0], + [128.695841, 35.816247, 0], + [128.704089, 35.819172, 0], + [128.711993, 35.822668, 0], + [128.719491, 35.826709, 0], + [128.726527, 35.831264, 0], + [128.733047, 35.836298, 0], + [128.739003, 35.841773, 0], + [128.744347, 35.847649, 0], + [128.749041, 35.853879, 0], + [128.753047, 35.860417, 0], + [128.756336, 35.867213, 0], + [128.758882, 35.874215, 0], + [128.760665, 35.881371, 0], + [128.761672, 35.888625, 0], + [128.761895, 35.895922, 0], + [128.761332, 35.903208, 0], + [128.759986, 35.910426, 0], + [128.757869, 35.917522, 0], + [128.754996, 35.924441, 0], + [128.751389, 35.931131, 0], + [128.747075, 35.937541, 0], + [128.742086, 35.943622, 0], + [128.736461, 35.949327, 0], + [128.730242, 35.954614, 0], + [128.723477, 35.959441, 0], + [128.716217, 35.963772, 0], + [128.708518, 35.967574, 0], + [128.700438, 35.970818, 0], + [128.692038, 35.973479, 0], + [128.683384, 35.975537, 0], + [128.674541, 35.976976, 0], + [128.665576, 35.977785, 0], + [128.656557, 35.977958, 0], + [128.644409, 35.976895, 0], + [128.629872, 35.974671, 0], + [128.618317, 35.970782, 0], + [128.60733, 35.966058, 0], + [128.60012, 35.96328, 0], + [128.590606, 35.957292, 0], + [128.584084, 35.95225, 0], + [128.578132, 35.946767, 0], + [128.572793, 35.940884, 0], + [128.568108, 35.934647, 0], + [128.564113, 35.928103, 0], + [128.560839, 35.921302, 0], + [128.558309, 35.914295, 0], + [128.556544, 35.907137, 0], + [128.555555, 35.899881, 0], + [128.555352, 35.892583, 0], + [128.556175, 35.882374, 0], + [128.558579, 35.874307, 0], + [128.562355, 35.865961, 0], + [128.56594, 35.857391, 0], + [128.570265, 35.850988, 0], + [128.575261, 35.844914, 0], + [128.58089, 35.839217, 0], + [128.58711, 35.833938, 0] + ] + ] + }, + "properties": { "name": "대구국제공항", "description": "대구국제공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [129.410019, 35.904346, 0], + [129.414943, 35.903896, 0], + [129.423966, 35.903952, 0], + [129.432949, 35.904643, 0], + [129.441823, 35.905965, 0], + [129.450522, 35.907909, 0], + [129.45898, 35.910458, 0], + [129.467131, 35.913594, 0], + [129.474915, 35.917293, 0], + [129.482272, 35.921527, 0], + [129.489145, 35.926263, 0], + [129.495484, 35.931467, 0], + [129.50124, 35.937098, 0], + [129.506368, 35.943113, 0], + [129.51083, 35.949467, 0], + [129.514591, 35.956111, 0], + [129.517624, 35.962996, 0], + [129.519904, 35.970068, 0], + [129.522286, 35.981062, 0], + [129.522286, 35.989674, 0], + [129.521237, 35.999145, 0], + [129.51961, 36.006334, 0], + [129.517214, 36.013382, 0], + [129.514068, 36.020233, 0], + [129.510194, 36.026837, 0], + [129.505623, 36.033142, 0], + [129.500389, 36.039101, 0], + [129.494532, 36.044668, 0], + [129.488096, 36.049801, 0], + [129.481131, 36.05446, 0], + [129.473689, 36.05861, 0], + [129.465827, 36.06222, 0], + [129.457608, 36.065261, 0], + [129.449089, 36.067711, 0], + [129.434052, 36.07047, 0], + [129.422408, 36.071349, 0], + [129.413366, 36.071294, 0], + [129.401436, 36.070192, 0], + [129.386756, 36.067329, 0], + [129.378284, 36.064775, 0], + [129.37012, 36.061633, 0], + [129.362327, 36.057927, 0], + [129.354964, 36.053686, 0], + [129.348087, 36.048942, 0], + [129.341749, 36.043731, 0], + [129.335997, 36.038092, 0], + [129.330875, 36.03207, 0], + [129.323845, 36.022169, 0], + [129.319656, 36.01217, 0], + [129.317322, 36.001896, 0], + [129.315948, 35.993285, 0], + [129.315605, 35.98523, 0], + [129.316134, 35.976015, 0], + [129.317779, 35.968828, 0], + [129.321098, 35.959667, 0], + [129.325218, 35.950218, 0], + [129.330025, 35.944937, 0], + [129.334488, 35.938822, 0], + [129.340668, 35.932985, 0], + [129.345818, 35.927981, 0], + [129.353027, 35.923254, 0], + [129.360924, 35.917972, 0], + [129.369164, 35.913245, 0], + [129.377747, 35.909908, 0], + [129.388315, 35.907527, 0], + [129.400749, 35.904903, 0], + [129.410019, 35.904346, 0] + ] + ] + }, + "properties": { "name": "포항공항", "description": "포항공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.938881, 37.356241, 0], + [127.94452, 37.355116, 0], + [127.953642, 37.35428, 0], + [127.962822, 37.354077, 0], + [127.971988, 37.354511, 0], + [127.981072, 37.355578, 0], + [127.990006, 37.357269, 0], + [127.99872, 37.359572, 0], + [128.007149, 37.362469, 0], + [128.015229, 37.365939, 0], + [128.025055, 37.370703, 0], + [128.033638, 37.376978, 0], + [128.040504, 37.382434, 0], + [128.048363, 37.39081, 0], + [128.056297, 37.401801, 0], + [128.060417, 37.408074, 0], + [128.063327, 37.417326, 0], + [128.066254, 37.426616, 0], + [128.066597, 37.435067, 0], + [128.06694, 37.444063, 0], + [128.064641, 37.453531, 0], + [128.060417, 37.464231, 0], + [128.055976, 37.474262, 0], + [128.051608, 37.480686, 0], + [128.04655, 37.486783, 0], + [128.04084, 37.492506, 0], + [128.034523, 37.497813, 0], + [128.027646, 37.502662, 0], + [128.017845, 37.507547, 0], + [128.012426, 37.510843, 0], + [128.004199, 37.514113, 0], + [127.995643, 37.516802, 0], + [127.98317, 37.519257, 0], + [127.972183, 37.520619, 0], + [127.959467, 37.521396, 0], + [127.95028, 37.520961, 0], + [127.935791, 37.518712, 0], + [127.923494, 37.515888, 0], + [127.915051, 37.512985, 0], + [127.90696, 37.509508, 0], + [127.899282, 37.505485, 0], + [127.892077, 37.500945, 0], + [127.885399, 37.495925, 0], + [127.879305, 37.490467, 0], + [127.873828, 37.484603, 0], + [127.869016, 37.478381, 0], + [127.864908, 37.471851, 0], + [127.858916, 37.458063, 0], + [127.85614, 37.445971, 0], + [127.855788, 37.436362, 0], + [127.856345, 37.429076, 0], + [127.857699, 37.421857, 0], + [127.85984, 37.414758, 0], + [127.862752, 37.407835, 0], + [127.866411, 37.401139, 0], + [127.872276, 37.392528, 0], + [127.877083, 37.386526, 0], + [127.883263, 37.38107, 0], + [127.891159, 37.375341, 0], + [127.899742, 37.369884, 0], + [127.909967, 37.36461, 0], + [127.918182, 37.361346, 0], + [127.926722, 37.358663, 0], + [127.938881, 37.356241, 0] + ] + ] + }, + "properties": { "name": "원주공항", "description": "원주공항 반경 9.3Km 관제권", "type": "0003" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.914923, 37.834493, 0], + [128.898113, 37.828434, 0], + [128.882895, 37.82016, 0], + [128.86973, 37.809923, 0], + [128.864046, 37.804163, 0], + [128.854688, 37.791581, 0], + [128.848241, 37.777906, 0], + [128.844898, 37.763554, 0], + [128.844758, 37.748961, 0], + [128.847826, 37.734571, 0], + [128.854004, 37.72082, 0], + [128.863105, 37.708126, 0], + [128.87485, 37.696874, 0], + [128.888883, 37.687405, 0], + [128.904778, 37.680006, 0], + [128.922051, 37.674901, 0], + [128.940181, 37.672246, 0], + [128.958618, 37.672119, 0], + [128.976803, 37.674526, 0], + [128.994185, 37.679393, 0], + [129.010239, 37.686573, 0], + [129.024477, 37.695848, 0], + [129.036467, 37.706937, 0], + [129.041502, 37.713059, 0], + [129.049461, 37.726225, 0], + [129.054336, 37.736512, 0], + [129.055705, 37.747515, 0], + [129.055886, 37.762108, 0], + [129.052858, 37.776504, 0], + [129.046712, 37.790265, 0], + [129.037633, 37.802973, 0], + [129.032076, 37.80881, 0], + [129.019138, 37.819226, 0], + [129.011856, 37.823726, 0], + [128.995941, 37.83114, 0], + [128.978636, 37.836255, 0], + [128.969626, 37.837899, 0], + [128.951232, 37.839299, 0], + [128.932811, 37.838152, 0], + [128.914923, 37.834493, 0] + ] + ] + }, + "properties": { "name": "강릉비행장(공군)", "description": "강릉비행장(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.044856, 37.50983, 0], + [127.032079, 37.49931, 0], + [127.025986, 37.490115, 0], + [127.017702, 37.48064, 0], + [127.011733, 37.466821, 0], + [127.00991, 37.459654, 0], + [127.008653, 37.445079, 0], + [127.009229, 37.437782, 0], + [127.012765, 37.423445, 0], + [127.015698, 37.416515, 0], + [127.023783, 37.403393, 0], + [127.034611, 37.391585, 0], + [127.040953, 37.386287, 0], + [127.055253, 37.377105, 0], + [127.063102, 37.373291, 0], + [127.079901, 37.36736, 0], + [127.097739, 37.363834, 0], + [127.10688, 37.36301, 0], + [127.125258, 37.36327, 0], + [127.1433, 37.366059, 0], + [127.152025, 37.368379, 0], + [127.166061, 37.370703, 0], + [127.176222, 37.378815, 0], + [127.190102, 37.388396, 0], + [127.196203, 37.393869, 0], + [127.206495, 37.405976, 0], + [127.210608, 37.412517, 0], + [127.216608, 37.426327, 0], + [127.218451, 37.433491, 0], + [127.219748, 37.448063, 0], + [127.219193, 37.455361, 0], + [127.215694, 37.469704, 0], + [127.212777, 37.476639, 0], + [127.209109, 37.483346, 0], + [127.204514, 37.493928, 0], + [127.193903, 37.501598, 0], + [127.180661, 37.51175, 0], + [127.173253, 37.516101, 0], + [127.157145, 37.523186, 0], + [127.13973, 37.527942, 0], + [127.121535, 37.530225, 0], + [127.103116, 37.529965, 0], + [127.085035, 37.527169, 0], + [127.067843, 37.521924, 0], + [127.052064, 37.514388, 0], + [127.044856, 37.50983, 0] + ] + ] + }, + "properties": { "name": "서울(성남)공항(공군)", "description": "서울(성남)공항(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.944218, 37.308626, 0], + [126.930697, 37.298778, 0], + [126.924799, 37.293188, 0], + [126.914948, 37.28089, 0], + [126.911071, 37.274276, 0], + [126.90556, 37.260368, 0], + [126.903168, 37.24591, 0], + [126.903967, 37.231341, 0], + [126.905559, 37.224154, 0], + [126.911065, 37.210246, 0], + [126.919517, 37.19731, 0], + [126.924771, 37.19133, 0], + [126.937133, 37.180576, 0], + [126.944148, 37.175883, 0], + [126.959578, 37.168041, 0], + [126.97648, 37.162451, 0], + [126.994342, 37.159283, 0], + [127.012621, 37.158632, 0], + [127.021745, 37.159259, 0], + [127.034912, 37.161958, 0], + [127.048226, 37.164883, 0], + [127.064472, 37.171596, 0], + [127.071984, 37.175772, 0], + [127.079012, 37.180453, 0], + [127.091404, 37.191186, 0], + [127.101271, 37.203469, 0], + [127.108314, 37.21693, 0], + [127.112316, 37.23116, 0], + [127.113156, 37.245728, 0], + [127.110804, 37.26019, 0], + [127.106323, 37.270774, 0], + [127.096902, 37.287056, 0], + [127.091655, 37.293043, 0], + [127.079298, 37.303812, 0], + [127.064772, 37.31271, 0], + [127.048521, 37.319465, 0], + [127.03104, 37.32387, 0], + [127.012862, 37.325791, 0], + [127.003684, 37.325799, 0], + [126.9855, 37.32391, 0], + [126.968007, 37.319535, 0], + [126.959687, 37.316455, 0], + [126.944218, 37.308626, 0] + ] + ] + }, + "properties": { "name": "수원비행장(공군)", "description": "수원비행장(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.975488, 37.162112, 0], + [126.96068, 37.153499, 0], + [126.95404, 37.148453, 0], + [126.94254, 37.137077, 0], + [126.937766, 37.130833, 0], + [126.930356, 37.117471, 0], + [126.927774, 37.110454, 0], + [126.924956, 37.096018, 0], + [126.925323, 37.08141, 0], + [126.928864, 37.067075, 0], + [126.931794, 37.060147, 0], + [126.939861, 37.047031, 0], + [126.950655, 37.035232, 0], + [126.956976, 37.02994, 0], + [126.96385, 37.025107, 0], + [126.979042, 37.016963, 0], + [126.999893, 37.009681, 0], + [127.017746, 37.006391, 0], + [127.031787, 37.006541, 0], + [127.04998, 37.008089, 0], + [127.058881, 37.009805, 0], + [127.075956, 37.015056, 0], + [127.091632, 37.022593, 0], + [127.098795, 37.02715, 0], + [127.111499, 37.037667, 0], + [127.121726, 37.049785, 0], + [127.129164, 37.063135, 0], + [127.133585, 37.077313, 0], + [127.135849, 37.088049, 0], + [127.134292, 37.099187, 0], + [127.130788, 37.113528, 0], + [127.124213, 37.127165, 0], + [127.114765, 37.139685, 0], + [127.10905, 37.145404, 0], + [127.095854, 37.155545, 0], + [127.080647, 37.163704, 0], + [127.072431, 37.16696, 0], + [127.055088, 37.171701, 0], + [127.036974, 37.173967, 0], + [127.018641, 37.173689, 0], + [127.000648, 37.170877, 0], + [126.983543, 37.165614, 0], + [126.975488, 37.162112, 0] + ] + ] + }, + "properties": { "name": "오산비행장(주한미군)", "description": "오산비행장(주한미군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.019297, 37.041721, 0], + [127.001527, 37.038427, 0], + [126.984746, 37.032718, 0], + [126.962535, 37.020025, 0], + [126.950357, 37.009186, 0], + [126.940725, 36.996822, 0], + [126.93393, 36.98331, 0], + [126.929481, 36.961794, 0], + [126.930473, 36.947255, 0], + [126.934609, 36.933073, 0], + [126.94176, 36.919681, 0], + [126.951709, 36.907484, 0], + [126.95764, 36.901951, 0], + [126.971193, 36.892227, 0], + [126.986648, 36.88453, 0], + [127.003537, 36.879095, 0], + [127.021347, 36.876085, 0], + [127.03954, 36.875592, 0], + [127.061691, 36.878522, 0], + [127.074873, 36.882141, 0], + [127.090943, 36.888984, 0], + [127.09836, 36.893218, 0], + [127.111673, 36.903152, 0], + [127.117469, 36.908776, 0], + [127.127118, 36.921125, 0], + [127.130898, 36.927757, 0], + [127.136225, 36.941682, 0], + [127.138446, 36.956135, 0], + [127.137494, 36.970676, 0], + [127.134476, 36.981164, 0], + [127.12627, 36.998268, 0], + [127.116339, 37.010479, 0], + [127.108383, 37.020098, 0], + [127.096853, 37.02576, 0], + [127.081381, 37.033471, 0], + [127.073071, 37.036489, 0], + [127.055623, 37.040737, 0], + [127.037514, 37.042498, 0], + [127.019297, 37.041721, 0] + ] + ] + }, + "properties": { "name": "평택비행장(주한미군)", "description": "평택비행장(주한미군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.805046, 36.976962, 0], + [127.811154, 36.971526, 0], + [127.817831, 36.966536, 0], + [127.825025, 36.962029, 0], + [127.832683, 36.95804, 0], + [127.840747, 36.954598, 0], + [127.849154, 36.951731, 0], + [127.857841, 36.94946, 0], + [127.866743, 36.947802, 0], + [127.875792, 36.946769, 0], + [127.884918, 36.94637, 0], + [127.894053, 36.946608, 0], + [127.903128, 36.94748, 0], + [127.912073, 36.94898, 0], + [127.920822, 36.951097, 0], + [127.932014, 36.95483, 0], + [127.940941, 36.958946, 0], + [127.949524, 36.96306, 0], + [127.956047, 36.967724, 0], + [127.963257, 36.972935, 0], + [127.96978, 36.978147, 0], + [127.974587, 36.983358, 0], + [127.979365, 36.990138, 0], + [127.984197, 37.000549, 0], + [127.989349, 37.011052, 0], + [127.990446, 37.02183, 0], + [127.991066, 37.030788, 0], + [127.990668, 37.036425, 0], + [127.989349, 37.047231, 0], + [127.985066, 37.057821, 0], + [127.981665, 37.064603, 0], + [127.977536, 37.071123, 0], + [127.97271, 37.07733, 0], + [127.967223, 37.083178, 0], + [127.961118, 37.088622, 0], + [127.95444, 37.09362, 0], + [127.947244, 37.098133, 0], + [127.939578, 37.102129, 0], + [127.931503, 37.105577, 0], + [127.923082, 37.10845, 0], + [127.914379, 37.110727, 0], + [127.905459, 37.112388, 0], + [127.896391, 37.113423, 0], + [127.887245, 37.113823, 0], + [127.878089, 37.113586, 0], + [127.868995, 37.112712, 0], + [127.860031, 37.111208, 0], + [127.851266, 37.109087, 0], + [127.842767, 37.106364, 0], + [127.834598, 37.10306, 0], + [127.826823, 37.0992, 0], + [127.815971, 37.092978, 0], + [127.808075, 37.086406, 0], + [127.80078, 37.078851, 0], + [127.795783, 37.072731, 0], + [127.791473, 37.066286, 0], + [127.787885, 37.059566, 0], + [127.785045, 37.052621, 0], + [127.782975, 37.045506, 0], + [127.781689, 37.038274, 0], + [127.781199, 37.030979, 0], + [127.781982, 37.021469, 0], + [127.783356, 37.011874, 0], + [127.787164, 37.002292, 0], + [127.791939, 36.993504, 0], + [127.794719, 36.989003, 0], + [127.799554, 36.982802, 0], + [127.803612, 36.978695, 0], + [127.805046, 36.976962, 0] + ] + ] + }, + "properties": { "name": "중원비행장(공군)", "description": "중원비행장(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.473217, 36.788517, 0], + [126.455432, 36.785285, 0], + [126.446872, 36.78275, 0], + [126.430741, 36.775939, 0], + [126.416336, 36.766986, 0], + [126.404094, 36.756164, 0], + [126.398903, 36.750153, 0], + [126.390578, 36.73716, 0], + [126.385198, 36.723206, 0], + [126.382599, 36.712467, 0], + [126.382977, 36.701406, 0], + [126.385459, 36.686937, 0], + [126.391034, 36.673033, 0], + [126.394932, 36.666426, 0], + [126.404801, 36.654153, 0], + [126.414871, 36.647487, 0], + [126.424182, 36.638771, 0], + [126.439584, 36.630988, 0], + [126.456433, 36.625468, 0], + [126.474219, 36.622377, 0], + [126.483295, 36.621775, 0], + [126.501471, 36.62248, 0], + [126.51922, 36.625704, 0], + [126.536004, 36.631351, 0], + [126.551314, 36.639249, 0], + [126.564686, 36.649159, 0], + [126.575713, 36.66078, 0], + [126.58406, 36.67376, 0], + [126.589473, 36.687705, 0], + [126.591785, 36.702192, 0], + [126.590925, 36.716781, 0], + [126.586916, 36.731028, 0], + [126.57988, 36.744501, 0], + [126.570028, 36.756789, 0], + [126.557659, 36.767518, 0], + [126.543149, 36.776362, 0], + [126.526939, 36.783052, 0], + [126.509524, 36.787382, 0], + [126.491433, 36.789223, 0], + [126.473217, 36.788517, 0] + ] + ] + }, + "properties": { "name": "서산비행장(공군)", "description": "서산비행장(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.281662, 36.511568, 0], + [126.288528, 36.510464, 0], + [126.29527, 36.510817, 0], + [126.309471, 36.511016, 0], + [126.320114, 36.512948, 0], + [126.33089, 36.515592, 0], + [126.335907, 36.517086, 0], + [126.34739, 36.521622, 0], + [126.355088, 36.52548, 0], + [126.364403, 36.531433, 0], + [126.369088, 36.534734, 0], + [126.375284, 36.54006, 0], + [126.383286, 36.548535, 0], + [126.389122, 36.556257, 0], + [126.394958, 36.567839, 0], + [126.398533, 36.57908, 0], + [126.400108, 36.591274, 0], + [126.400108, 36.604504, 0], + [126.397024, 36.615235, 0], + [126.394381, 36.62221, 0], + [126.390989, 36.628974, 0], + [126.386875, 36.635474, 0], + [126.378822, 36.645834, 0], + [126.370539, 36.652913, 0], + [126.362, 36.659882, 0], + [126.35273, 36.664839, 0], + [126.343803, 36.66897, 0], + [126.33274, 36.672644, 0], + [126.324097, 36.674902, 0], + [126.315241, 36.676546, 0], + [126.30624, 36.677564, 0], + [126.293335, 36.678057, 0], + [126.283379, 36.676955, 0], + [126.270163, 36.675295, 0], + [126.26147, 36.673164, 0], + [126.253042, 36.670433, 0], + [126.244944, 36.667122, 0], + [126.237238, 36.663257, 0], + [126.229981, 36.658868, 0], + [126.22323, 36.653988, 0], + [126.217035, 36.648654, 0], + [126.211444, 36.642906, 0], + [126.2065, 36.63679, 0], + [126.20224, 36.630351, 0], + [126.197548, 36.621314, 0], + [126.195145, 36.614425, 0], + [126.193085, 36.606433, 0], + [126.192055, 36.597062, 0], + [126.192454, 36.587811, 0], + [126.193567, 36.580576, 0], + [126.195461, 36.573446, 0], + [126.198121, 36.566475, 0], + [126.201527, 36.559717, 0], + [126.205652, 36.553223, 0], + [126.210465, 36.547043, 0], + [126.21593, 36.541223, 0], + [126.222005, 36.535807, 0], + [126.228643, 36.530837, 0], + [126.235794, 36.52635, 0], + [126.243404, 36.522381, 0], + [126.251414, 36.518959, 0], + [126.259765, 36.516111, 0], + [126.268392, 36.513858, 0], + [126.281662, 36.511568, 0] + ] + ] + }, + "properties": { "name": "한서비행장(민간사설)", "description": "한서비행장(민간사설) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.488442, 36.486453, 0], + [127.494488, 36.485928, 0], + [127.503562, 36.485856, 0], + [127.515564, 36.486453, 0], + [127.527237, 36.488661, 0], + [127.538906, 36.491855, 0], + [127.547169, 36.49487, 0], + [127.555075, 36.498451, 0], + [127.562563, 36.502573, 0], + [127.569577, 36.507203, 0], + [127.576063, 36.512306, 0], + [127.581971, 36.517844, 0], + [127.587258, 36.523775, 0], + [127.591882, 36.530053, 0], + [127.597618, 36.54026, 0], + [127.601452, 36.550484, 0], + [127.603455, 36.559842, 0], + [127.604485, 36.568115, 0], + [127.603424, 36.579483, 0], + [127.601395, 36.590171, 0], + [127.596674, 36.600629, 0], + [127.590065, 36.61167, 0], + [127.583331, 36.619651, 0], + [127.577563, 36.62529, 0], + [127.568436, 36.632611, 0], + [127.55691, 36.639498, 0], + [127.545433, 36.644732, 0], + [127.53582, 36.648314, 0], + [127.525864, 36.650792, 0], + [127.514674, 36.652226, 0], + [127.498741, 36.653272, 0], + [127.487465, 36.652441, 0], + [127.478496, 36.651243, 0], + [127.461117, 36.646993, 0], + [127.449989, 36.642529, 0], + [127.440376, 36.638397, 0], + [127.430412, 36.631617, 0], + [127.423926, 36.626505, 0], + [127.415314, 36.618008, 0], + [127.409821, 36.611118, 0], + [127.405701, 36.604228, 0], + [127.401031, 36.595319, 0], + [127.398491, 36.586587, 0], + [127.396774, 36.578868, 0], + [127.396088, 36.570321, 0], + [127.396088, 36.563703, 0], + [127.397118, 36.55543, 0], + [127.399864, 36.547156, 0], + [127.40351, 36.538152, 0], + [127.407274, 36.531513, 0], + [127.411739, 36.525168, 0], + [127.415314, 36.521225, 0], + [127.420464, 36.515431, 0], + [127.42901, 36.508319, 0], + [127.433166, 36.504945, 0], + [127.440033, 36.500529, 0], + [127.45111, 36.495632, 0], + [127.461662, 36.491421, 0], + [127.476537, 36.487971, 0], + [127.488442, 36.486453, 0] + ] + ] + }, + "properties": { "name": "성무비행장(공군)", "description": "성무비행장(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.459222, 36.631456, 0], + [128.459358, 36.6406, 0], + [128.456612, 36.650792, 0], + [128.453024, 36.660117, 0], + [128.449561, 36.666876, 0], + [128.445376, 36.673366, 0], + [128.440501, 36.679539, 0], + [128.434972, 36.685347, 0], + [128.428833, 36.690747, 0], + [128.419189, 36.697604, 0], + [128.407237, 36.704098, 0], + [128.399161, 36.707486, 0], + [128.3852, 36.712192, 0], + [128.373165, 36.714103, 0], + [128.359451, 36.71577, 0], + [128.348808, 36.715219, 0], + [128.336888, 36.714153, 0], + [128.327986, 36.712582, 0], + [128.319289, 36.710395, 0], + [128.310864, 36.707608, 0], + [128.302774, 36.704242, 0], + [128.295082, 36.700323, 0], + [128.287845, 36.695881, 0], + [128.281121, 36.69095, 0], + [128.274958, 36.685567, 0], + [128.269405, 36.679774, 0], + [128.264503, 36.673615, 0], + [128.26029, 36.667136, 0], + [128.256798, 36.660387, 0], + [128.254053, 36.65342, 0], + [128.252076, 36.646287, 0], + [128.250881, 36.639043, 0], + [128.250478, 36.631744, 0], + [128.250961, 36.622692, 0], + [128.252335, 36.614701, 0], + [128.254016, 36.610063, 0], + [128.256747, 36.603093, 0], + [128.260224, 36.59634, 0], + [128.26442, 36.589856, 0], + [128.269303, 36.58369, 0], + [128.272934, 36.579695, 0], + [128.278084, 36.575008, 0], + [128.283234, 36.570597, 0], + [128.290787, 36.565909, 0], + [128.297653, 36.561773, 0], + [128.302557, 36.559168, 0], + [128.310621, 36.555786, 0], + [128.316536, 36.553775, 0], + [128.323059, 36.551845, 0], + [128.331642, 36.549914, 0], + [128.342285, 36.548259, 0], + [128.354671, 36.547886, 0], + [128.363759, 36.548192, 0], + [128.372779, 36.549132, 0], + [128.384171, 36.551293, 0], + [128.393097, 36.5535, 0], + [128.402023, 36.556809, 0], + [128.41198, 36.561497, 0], + [128.421747, 36.567371, 0], + [128.42847, 36.572294, 0], + [128.436356, 36.579695, 0], + [128.445101, 36.589607, 0], + [128.451462, 36.598992, 0], + [128.454552, 36.60726, 0], + [128.456955, 36.614976, 0], + [128.4588, 36.624157, 0], + [128.459222, 36.631456, 0] + ] + ] + }, + "properties": { "name": "예천비행장(공군)", "description": "예천비행장(공군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.671532, 35.059229, 0], + [128.676497, 35.058442, 0], + [128.685348, 35.0574, 0], + [128.694275, 35.056992, 0], + [128.703212, 35.057222, 0], + [128.712091, 35.058089, 0], + [128.720844, 35.059585, 0], + [128.725777, 35.060634, 0], + [128.732987, 35.062882, 0], + [128.740196, 35.06513, 0], + [128.745691, 35.067713, 0], + [128.753294, 35.071567, 0], + [128.760457, 35.075948, 0], + [128.767128, 35.080824, 0], + [128.773255, 35.086156, 0], + [128.778792, 35.091904, 0], + [128.783696, 35.098026, 0], + [128.78793, 35.104473, 0], + [128.792381, 35.113449, 0], + [128.795471, 35.122998, 0], + [128.797599, 35.132517, 0], + [128.798107, 35.139825, 0], + [128.797834, 35.14714, 0], + [128.796783, 35.154409, 0], + [128.794441, 35.163705, 0], + [128.791008, 35.171563, 0], + [128.787231, 35.17886, 0], + [128.782082, 35.186155, 0], + [128.774958, 35.194005, 0], + [128.768992, 35.199465, 0], + [128.764916, 35.202709, 0], + [128.759079, 35.206917, 0], + [128.750839, 35.211685, 0], + [128.740043, 35.216479, 0], + [128.731809, 35.219365, 0], + [128.720284, 35.222624, 0], + [128.71067, 35.223746, 0], + [128.696763, 35.224777, 0], + [128.687807, 35.224546, 0], + [128.670141, 35.222179, 0], + [128.661565, 35.220061, 0], + [128.653248, 35.21734, 0], + [128.645254, 35.214036, 0], + [128.637643, 35.210175, 0], + [128.630474, 35.205787, 0], + [128.623801, 35.200904, 0], + [128.617675, 35.195564, 0], + [128.610763, 35.187839, 0], + [128.605614, 35.180824, 0], + [128.600464, 35.172686, 0], + [128.596717, 35.16354, 0], + [128.594682, 35.156412, 0], + [128.592911, 35.147424, 0], + [128.592911, 35.139844, 0], + [128.593941, 35.129737, 0], + [128.596126, 35.120113, 0], + [128.598721, 35.113109, 0], + [128.602053, 35.106316, 0], + [128.606095, 35.099786, 0], + [128.610816, 35.093569, 0], + [128.616181, 35.087713, 0], + [128.622148, 35.082261, 0], + [128.63205, 35.074965, 0], + [128.643192, 35.068729, 0], + [128.657112, 35.063163, 0], + [128.671532, 35.059229, 0] + ] + ] + }, + "properties": { "name": "진해비행장(해군)", "description": "진해비행장(해군) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.737251, 33.474981, 0], + [126.739646, 33.474836, 0], + [126.731109, 33.476494, 0], + [126.72243, 33.477525, 0], + [126.708756, 33.477559, 0], + [126.696213, 33.476797, 0], + [126.687636, 33.475288, 0], + [126.674423, 33.471831, 0], + [126.663304, 33.467118, 0], + [126.652107, 33.460661, 0], + [126.642342, 33.453969, 0], + [126.636359, 33.448626, 0], + [126.630958, 33.442869, 0], + [126.622238, 33.432301, 0], + [126.618632, 33.423558, 0], + [126.615028, 33.414248, 0], + [126.612968, 33.406224, 0], + [126.612625, 33.399345, 0], + [126.612282, 33.391033, 0], + [126.613616, 33.380376, 0], + [126.615431, 33.373223, 0], + [126.617985, 33.366229, 0], + [126.621259, 33.359448, 0], + [126.625227, 33.35293, 0], + [126.62986, 33.346727, 0], + [126.635122, 33.340884, 0], + [126.640973, 33.335446, 0], + [126.647368, 33.330455, 0], + [126.654259, 33.325948, 0], + [126.661593, 33.321959, 0], + [126.669314, 33.318519, 0], + [126.677364, 33.315655, 0], + [126.685682, 33.313387, 0], + [126.694205, 33.311732, 0], + [126.706009, 33.310159, 0], + [126.720348, 33.310555, 0], + [126.732788, 33.31102, 0], + [126.745967, 33.315068, 0], + [126.758194, 33.318767, 0], + [126.76932, 33.324964, 0], + [126.77632, 33.329352, 0], + [126.782836, 33.334233, 0], + [126.791496, 33.341715, 0], + [126.797676, 33.349458, 0], + [126.803133, 33.357893, 0], + [126.806573, 33.364616, 0], + [126.811066, 33.376699, 0], + [126.813126, 33.389313, 0], + [126.812439, 33.402785, 0], + [126.811066, 33.411669, 0], + [126.805229, 33.425424, 0], + [126.801453, 33.43316, 0], + [126.795483, 33.441462, 0], + [126.790224, 33.447311, 0], + [126.78154, 33.455219, 0], + [126.7733, 33.460661, 0], + [126.76374, 33.466259, 0], + [126.751671, 33.471831, 0], + [126.737251, 33.474981, 0] + ] + ] + }, + "properties": { "name": "정석비행장(민간사설)", "description": "정석비행장(민간사설) 반경 9.3Km 비행장", "type": "0004" } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [127.115577, 37.3849, 0] }, + "properties": { + "name": "탄천 RC비행장", + "description": "경기도 성남시 분당구 수내동 45", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [126.8584, 37.5783, 0] }, + "properties": { + "name": "가양대교 북단 RC 비행장", + "description": "경기 고양시 덕양구 덕은동 520-26 (서울 P-73 공역 비행통제 지역으로서 허가를 받은 후 비행)", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [127.2158, 37.5583, 0] }, + "properties": { + "name": "미사리 RC비행장", + "description": "경기도 하남시 미사동 57-2", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [126.6563, 37.1907, 0] }, + "properties": { + "name": "전곡항 RC비행장", + "description": "경기도 화성시 서신면 전곡리 전곡항 교차로", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [127.1194, 37.5473, 0] }, + "properties": { + "name": "광나루 RC비행장", + "description": "서울특별시 강동구 천호동 351-1 (한강시민공원광나루지구4주차장)", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [126.7482, 37.5334, 0] }, + "properties": { + "name": "계양 경기장 RC비행장", + "description": "인천광역시 계양구 서운동 111 (양궁훈련이 있을 경우 비행을 할 수 없습니다)", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [127.1003, 37.4969, 0] }, + "properties": { + "name": "탄천 유수지 RC비행장", + "description": "서울특별시 송파구 가락동 508", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [126.7595, 37.4023, 0] }, + "properties": { + "name": "포동 RC비행장", + "description": "경기도 시흥시 방산동 779-63", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [127.4066, 37.7206, 0] }, + "properties": { + "name": "신청평대교 RC비행장", + "description": "경기도 가평군 청평면 대성리 산2-1", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "Point", "coordinates": [126.995, 37.1682, 0] }, + "properties": { + "name": "용수교 RC비행장", + "description": "경기도 화성시 정남면 발산리 16-1", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [126.872566, 35.234922, 0] + }, + "properties": { + "name": "광주 하늘사랑 무선모형 비행클럽 RC비행장", + "description": "광주광역시 북구 지야동 682", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [126.891268, 37.419289, 0] + }, + "properties": { + "name": "광명역 RC비행장", + "description": "경기도 안양시 만안구 석수동 안양석수스마트타운", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [126.8775845, 37.5170106, 0] + }, + "properties": { "name": "신정교 RC 비행장", + "description": "경기도 안양시 만안구 석수동 안양석수스마트타운", + "type": "0005" + } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", + "coordinates": [ + [127.023178, 35.729104, 70.42], + [127.022043, 35.728036, 63.26], + [127.020797, 35.727053, 66], + [127.019451, 35.726162, 85.07], + [127.018014, 35.725369, 115.47], + [127.016497, 35.724681, 117.54], + [127.014913, 35.724103, 123.83], + [127.013272, 35.723639, 130.38], + [127.011588, 35.723294, 129.65], + [127.009873, 35.723068, 127.37], + [127.008141, 35.722965, 104.11], + [127.006404, 35.722985, 62.97], + [127.004675, 35.723127, 50.18], + [127.002969, 35.723391, 36.53], + [127.001297, 35.723775, 30.39], + [126.999673, 35.724276, 29], + [126.998109, 35.72489, 27.88], + [126.996617, 35.725612, 26.08], + [126.995208, 35.726436, 24.59], + [126.993893, 35.727358, 23.43], + [126.992681, 35.728369, 21.5], + [126.991583, 35.729462, 19.57], + [126.990606, 35.730628, 18.32], + [126.989758, 35.731859, 17.93], + [126.989046, 35.733145, 17.64], + [126.988474, 35.734477, 17.9], + [126.988048, 35.735844, 18.26], + [126.987769, 35.737236, 18.11], + [126.987642, 35.738643, 17.86], + [126.987666, 35.740053, 17.91], + [126.987841, 35.741456, 19.15], + [126.988166, 35.742842, 21.67], + [126.988639, 35.744199, 24.39], + [126.989256, 35.745517, 27.28], + [126.990012, 35.746787, 30.34], + [126.990901, 35.747999, 33.53], + [126.991918, 35.749143, 36.82], + [126.993053, 35.75021, 35.56], + [126.994299, 35.751194, 31.75], + [126.995645, 35.752085, 28.02], + [126.997083, 35.752878, 29.09], + [126.998599, 35.753566, 33.43], + [127.000185, 35.754144, 40.19], + [127.001826, 35.754608, 41.77], + [127.00351, 35.754954, 57.3], + [127.005226, 35.75518, 74.55], + [127.006959, 35.755283, 87.26], + [127.008697, 35.755263, 106.79], + [127.010426, 35.755121, 134.69], + [127.012133, 35.754856, 165.27], + [127.013805, 35.754472, 196.91], + [127.01543, 35.753971, 225.04], + [127.016994, 35.753357, 246.78], + [127.018487, 35.752635, 293.57], + [127.019896, 35.75181, 282.64], + [127.021212, 35.750888, 309.31], + [127.022423, 35.749877, 343.91], + [127.023521, 35.748784, 413.87], + [127.024497, 35.747617, 422.86], + [127.025345, 35.746386, 375.48], + [127.026057, 35.745099, 302.1], + [127.026628, 35.743767, 245.85], + [127.027054, 35.7424, 226.87], + [127.027331, 35.741008, 235.81], + [127.027458, 35.739601, 235.43], + [127.027433, 35.738191, 222.18], + [127.027257, 35.736788, 203.97], + [127.026931, 35.735403, 188.58], + [127.026458, 35.734046, 153.11], + [127.025841, 35.732727, 110.17], + [127.025084, 35.731458, 93.28], + [127.024194, 35.730247, 81.03], + [127.023178, 35.729104, 70.42] + ] + }, + "properties": { + "name": "구성산 반경 1.8Km", + "description": "전라북도 김제시 금산면 삼봉리 124-1", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [128.423422, 35.735448, 61.15], + [128.422995, 35.735022, 30.47], + [128.422524, 35.734628, 26.59], + [128.422013, 35.734268, 22.84], + [128.421465, 35.733946, 19.23], + [128.420885, 35.733665, 15.79], + [128.420276, 35.733425, 12.55], + [128.419644, 35.733229, 9.54], + [128.418994, 35.733079, 7.2], + [128.41833, 35.732975, 8.1], + [128.417657, 35.732919, 8.97], + [128.416981, 35.73291, 9.8], + [128.416306, 35.732949, 10.39], + [128.415638, 35.733036, 10.41], + [128.414982, 35.73317, 24.05], + [128.414343, 35.73335, 24.8], + [128.413726, 35.733574, 20.13], + [128.413135, 35.733841, 18.43], + [128.412575, 35.734149, 21.29], + [128.41205, 35.734495, 21.21], + [128.411564, 35.734877, 21.28], + [128.411121, 35.735292, 21.12], + [128.410725, 35.735737, 20.74], + [128.410377, 35.736208, 20.14], + [128.410082, 35.736702, 17.03], + [128.409841, 35.737215, 13.26], + [128.409655, 35.737743, 9.54], + [128.409527, 35.738282, 7.98], + [128.409458, 35.738828, 9.16], + [128.409447, 35.739377, 10.56], + [128.409496, 35.739925, 11.09], + [128.409603, 35.740467, 13.07], + [128.409768, 35.740999, 15.75], + [128.409989, 35.741518, 17.6], + [128.410265, 35.742019, 19.2], + [128.410594, 35.742499, 19.78], + [128.410973, 35.742953, 19.27], + [128.4114, 35.74338, 18.79], + [128.411871, 35.743774, 18.33], + [128.412382, 35.744133, 20.08], + [128.41293, 35.744455, 31.43], + [128.413511, 35.744737, 41.66], + [128.414119, 35.744977, 37.94], + [128.414751, 35.745173, 40.36], + [128.415402, 35.745323, 46.83], + [128.416066, 35.745427, 48.15], + [128.416739, 35.745483, 49.38], + [128.417415, 35.745492, 53.29], + [128.41809, 35.745452, 63.09], + [128.418758, 35.745366, 74.22], + [128.419414, 35.745232, 78.43], + [128.420053, 35.745052, 66.9], + [128.42067, 35.744828, 52.04], + [128.421261, 35.744561, 42.52], + [128.421822, 35.744253, 35.95], + [128.422346, 35.743906, 38.33], + [128.422832, 35.743524, 44.87], + [128.423275, 35.743109, 45.76], + [128.423672, 35.742664, 45.91], + [128.424019, 35.742193, 44.45], + [128.424314, 35.741699, 36.55], + [128.424555, 35.741186, 28.89], + [128.424741, 35.740658, 35.1], + [128.424868, 35.740119, 39.29], + [128.424938, 35.739573, 56.98], + [128.424948, 35.739024, 75.28], + [128.4249, 35.738477, 87.78], + [128.424793, 35.737934, 97.41], + [128.424628, 35.737402, 104.3], + [128.424406, 35.736883, 109], + [128.42413, 35.736382, 107.92], + [128.423801, 35.735902, 87.73], + [128.423422, 35.735448, 61.15] + ] + }, + "properties": { + "name": "약산 반경 0.7Km", + "description": "대구광역시 달성군 논공읍 하리 757", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [129.063101, 35.598445, 259.84], + [129.06031, 35.600617, 270.31], + [129.057763, 35.602978, 278.07], + [129.055478, 35.605511, 326.98], + [129.053473, 35.608196, 402.16], + [129.051764, 35.611013, 377.99], + [129.050362, 35.61394, 270.03], + [129.049281, 35.616955, 237.02], + [129.048526, 35.620036, 271.82], + [129.048105, 35.623158, 355.33], + [129.04802, 35.626298, 435.81], + [129.048272, 35.629433, 453.78], + [129.048859, 35.632537, 419.71], + [129.049777, 35.635588, 403.61], + [129.051019, 35.638563, 403.36], + [129.052575, 35.641438, 454.38], + [129.054434, 35.644192, 531.01], + [129.056581, 35.646804, 593.83], + [129.059, 35.649253, 609.72], + [129.061674, 35.651522, 577.54], + [129.06458, 35.653593, 521.73], + [129.067698, 35.65545, 517.45], + [129.071003, 35.657079, 503.15], + [129.07447, 35.658468, 534.27], + [129.078074, 35.659606, 503.39], + [129.081785, 35.660484, 487.77], + [129.085577, 35.661096, 477.95], + [129.089421, 35.661436, 469.79], + [129.093286, 35.661504, 465.79], + [129.097143, 35.661297, 491.96], + [129.100964, 35.660817, 540.98], + [129.104719, 35.660069, 575.48], + [129.108379, 35.659057, 582.74], + [129.111916, 35.657791, 571.09], + [129.115304, 35.656278, 484.89], + [129.118517, 35.654531, 462.29], + [129.121529, 35.652563, 393.03], + [129.124319, 35.650389, 322.53], + [129.126866, 35.648025, 389.32], + [129.129148, 35.645491, 455.78], + [129.13115, 35.642804, 444.16], + [129.132857, 35.639985, 410.05], + [129.134254, 35.637057, 382.27], + [129.135331, 35.63404, 340.9], + [129.136081, 35.630959, 262.61], + [129.136498, 35.627836, 222.92], + [129.136578, 35.624696, 185], + [129.136322, 35.621562, 149.13], + [129.13573, 35.618458, 160.52], + [129.134807, 35.615408, 195.08], + [129.133561, 35.612434, 187.68], + [129.132002, 35.609561, 182.92], + [129.13014, 35.606809, 180.38], + [129.12799, 35.604199, 169.44], + [129.125569, 35.601751, 158.58], + [129.122895, 35.599484, 188.81], + [129.119988, 35.597416, 179.01], + [129.11687, 35.595561, 110.17], + [129.113566, 35.593934, 110.5], + [129.1101, 35.592547, 117.28], + [129.106499, 35.591412, 147.57], + [129.10279, 35.590535, 144.77], + [129.099001, 35.589925, 135.16], + [129.095161, 35.589586, 136.08], + [129.091299, 35.58952, 140.67], + [129.087445, 35.589727, 139.66], + [129.083628, 35.590208, 133.02], + [129.079876, 35.590956, 148.73], + [129.07622, 35.591968, 166.91], + [129.072685, 35.593235, 175.08], + [129.0693, 35.594747, 194.21], + [129.066089, 35.596494, 246.4], + [129.063101, 35.598445, 259.84] + ] + }, + "properties": { + "name": "봉화산 반경 4Km", + "description": "울산광역시 울주군 상북면 궁근정리 산125-2", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", + "coordinates": [ + [127.498239, 35.382618, 655.18], + [127.495257, 35.385181, 577.08], + [127.492559, 35.387947, 527.94], + [127.490168, 35.390893, 529.07], + [127.4881, 35.393998, 491.49], + [127.486372, 35.397238, 569.15], + [127.484997, 35.400589, 641.66], + [127.483985, 35.404024, 628.82], + [127.483345, 35.407518, 501.81], + [127.48308, 35.411045, 451.61], + [127.483194, 35.414577, 397.16], + [127.483685, 35.418087, 447.21], + [127.48455, 35.421549, 395.79], + [127.485782, 35.424937, 347], + [127.487371, 35.428224, 412.8], + [127.489306, 35.431385, 468.03], + [127.491573, 35.434397, 542.71], + [127.494153, 35.437237, 533.95], + [127.497027, 35.439883, 530.82], + [127.500174, 35.442314, 493.74], + [127.503568, 35.444512, 483.9], + [127.507186, 35.446461, 492.73], + [127.510998, 35.448146, 484.75], + [127.514976, 35.449553, 479.91], + [127.51909, 35.450673, 479.06], + [127.523307, 35.451496, 481.77], + [127.527597, 35.452016, 479.62], + [127.531927, 35.452229, 482.38], + [127.536262, 35.452134, 473.24], + [127.540571, 35.451731, 467.55], + [127.54482, 35.451024, 457.84], + [127.548978, 35.450018, 453.48], + [127.553012, 35.44872, 456.74], + [127.556891, 35.447141, 476.03], + [127.560587, 35.445292, 522.32], + [127.56407, 35.443187, 627.13], + [127.567315, 35.440843, 727.06], + [127.570297, 35.438278, 781.82], + [127.572992, 35.43551, 734.29], + [127.575381, 35.432562, 878.64], + [127.577445, 35.429455, 1018.94], + [127.579169, 35.426213, 1102.37], + [127.58054, 35.422861, 1018.87], + [127.581547, 35.419424, 1011.7], + [127.582182, 35.41593, 913.51], + [127.582441, 35.412403, 780.61], + [127.582322, 35.408871, 660.32], + [127.581825, 35.405361, 662.11], + [127.580955, 35.4019, 809.24], + [127.579719, 35.398514, 977.3], + [127.578125, 35.395228, 916.5], + [127.576186, 35.392068, 760.94], + [127.573917, 35.389058, 650.1], + [127.571335, 35.386221, 657.75], + [127.568459, 35.383578, 780.06], + [127.565312, 35.381149, 910.29], + [127.561918, 35.378953, 944.32], + [127.558302, 35.377006, 918.78], + [127.554491, 35.375324, 893.27], + [127.550516, 35.373919, 1024.06], + [127.546405, 35.372801, 926.45], + [127.542191, 35.37198, 1034.51], + [127.537905, 35.371461, 1053.01], + [127.53358, 35.371249, 1056.67], + [127.529249, 35.371345, 1198.64], + [127.524944, 35.371748, 1211.89], + [127.520699, 35.372455, 1037.89], + [127.516546, 35.373462, 882.59], + [127.512515, 35.374759, 778.41], + [127.508639, 35.376338, 682.31], + [127.504946, 35.378186, 698.02], + [127.501465, 35.38029, 707.68], + [127.498239, 35.382618, 655.18] + ] + }, + "properties": { + "name": "덕두산 반경 4.5Km", + "description": "전라북도 남원시 운봉읍 공안리 519-1", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.967629, 34.721124, 242.73], + [127.966062, 34.722156, 194.34], + [127.96461, 34.723297, 129.52], + [127.963284, 34.724536, 74.93], + [127.962094, 34.725867, 45.15], + [127.961051, 34.727277, 77.16], + [127.96016, 34.728757, 110.07], + [127.95943, 34.730294, 149.97], + [127.958866, 34.731879, 108.92], + [127.958472, 34.733497, 75.75], + [127.958251, 34.735138, 31.21], + [127.958205, 34.736788, 25.72], + [127.958334, 34.738436, 75.65], + [127.958638, 34.740067, 89.63], + [127.959113, 34.741671, 100.68], + [127.959757, 34.743235, 147.22], + [127.960564, 34.744747, 152.5], + [127.961528, 34.746195, 187.52], + [127.962643, 34.747568, 215.26], + [127.963898, 34.748857, 248.11], + [127.965286, 34.75005, 230.65], + [127.966795, 34.75114, 299.35], + [127.968414, 34.752117, 364.32], + [127.970131, 34.752975, 391.31], + [127.971932, 34.753706, 393.84], + [127.973804, 34.754306, 424.1], + [127.975732, 34.75477, 478.32], + [127.977702, 34.755093, 541.28], + [127.979699, 34.755274, 602.99], + [127.981708, 34.755312, 663.92], + [127.983713, 34.755205, 629.93], + [127.985699, 34.754955, 591.06], + [127.987651, 34.754564, 565.89], + [127.989554, 34.754035, 589.71], + [127.991393, 34.753371, 602.13], + [127.993156, 34.752578, 558.92], + [127.994827, 34.751662, 466.75], + [127.996395, 34.75063, 423.48], + [127.997847, 34.749489, 382.7], + [127.999172, 34.748249, 400.57], + [128.000361, 34.746918, 356.06], + [128.001405, 34.745508, 319.45], + [128.002294, 34.744028, 310.05], + [128.003024, 34.74249, 258.14], + [128.003587, 34.740905, 246.81], + [128.00398, 34.739286, 267.67], + [128.0042, 34.737646, 253.83], + [128.004245, 34.735995, 175.77], + [128.004115, 34.734348, 138.34], + [128.003811, 34.732716, 103.97], + [128.003334, 34.731113, 113.96], + [128.00269, 34.729549, 165.1], + [128.001882, 34.728038, 226.76], + [128.000917, 34.72659, 257.94], + [127.999802, 34.725217, 236.74], + [127.998546, 34.723929, 181.96], + [127.997159, 34.722736, 109.97], + [127.995649, 34.721647, 67.88], + [127.994031, 34.72067, 37.49], + [127.992315, 34.719812, 9.64], + [127.990514, 34.719081, 0], + [127.988643, 34.718482, 0], + [127.986715, 34.718019, 0.9], + [127.984746, 34.717695, 1.95], + [127.98275, 34.717514, 20.76], + [127.980742, 34.717477, 69.87], + [127.978738, 34.717583, 133.44], + [127.976753, 34.717833, 193.75], + [127.974802, 34.718224, 167.21], + [127.972899, 34.718753, 151.18], + [127.971061, 34.719417, 190.33], + [127.969299, 34.720209, 232.65], + [127.967629, 34.721124, 242.73] + ] + }, + "properties": { + "name": "금산 반경 2.1Km", + "description": "경상남도 남해군 상주면 상주리 산270-14", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.094163, 35.826471, 51.72], + [127.09396, 35.825556, 43.46], + [127.093659, 35.82466, 41.83], + [127.093264, 35.823788, 40.53], + [127.092776, 35.822947, 40.2], + [127.092199, 35.822144, 40.93], + [127.091539, 35.821385, 41.63], + [127.090799, 35.820675, 42.27], + [127.089986, 35.82002, 42.81], + [127.089106, 35.819426, 43.42], + [127.088165, 35.818895, 44.62], + [127.087171, 35.818434, 45.88], + [127.08613, 35.818044, 47.16], + [127.085052, 35.817729, 50.67], + [127.083945, 35.817492, 60.87], + [127.082816, 35.817334, 70.8], + [127.081674, 35.817256, 80.39], + [127.080528, 35.817259, 80.43], + [127.079387, 35.817343, 72.58], + [127.078259, 35.817508, 64.67], + [127.077153, 35.817751, 56.75], + [127.076078, 35.818072, 53.66], + [127.075041, 35.818467, 53.73], + [127.074051, 35.818935, 53.78], + [127.073114, 35.81947, 53.81], + [127.072239, 35.82007, 53.51], + [127.071432, 35.820729, 51.79], + [127.070698, 35.821443, 50.08], + [127.070044, 35.822205, 48.39], + [127.069474, 35.823012, 46.72], + [127.068993, 35.823855, 45.11], + [127.068605, 35.824729, 43.54], + [127.068312, 35.825627, 42.05], + [127.068117, 35.826543, 40.64], + [127.068021, 35.827469, 39.31], + [127.068025, 35.828398, 38.09], + [127.068128, 35.829323, 36.97], + [127.068331, 35.830238, 35.98], + [127.068631, 35.831134, 35.11], + [127.069027, 35.832006, 34.37], + [127.069515, 35.832847, 33.77], + [127.070091, 35.83365, 33.31], + [127.070751, 35.834409, 33], + [127.071491, 35.835119, 34.58], + [127.072304, 35.835774, 36.47], + [127.073185, 35.836369, 38.52], + [127.074126, 35.836899, 40.72], + [127.07512, 35.837361, 43.04], + [127.07616, 35.837751, 45.47], + [127.077239, 35.838065, 47.99], + [127.078347, 35.838303, 50.59], + [127.079476, 35.838461, 53.24], + [127.080618, 35.838539, 55.91], + [127.081764, 35.838536, 58.6], + [127.082906, 35.838451, 61.28], + [127.084034, 35.838287, 63.93], + [127.08514, 35.838043, 66.53], + [127.086215, 35.837722, 100], + [127.087252, 35.837327, 125.26], + [127.088243, 35.836859, 148.13], + [127.089179, 35.836324, 155.09], + [127.090055, 35.835724, 124.41], + [127.090862, 35.835065, 105.54], + [127.091596, 35.834351, 97.24], + [127.09225, 35.833588, 95.28], + [127.092819, 35.832781, 93.63], + [127.0933, 35.831938, 92.3], + [127.093688, 35.831064, 91.29], + [127.09398, 35.830165, 80.82], + [127.094175, 35.82925, 62.83], + [127.094271, 35.828324, 50.18], + [127.094267, 35.827395, 47.65], + [127.094163, 35.826471, 51.72] + ] + }, + "properties": { + "name": "홍산 반경 1.2Km", + "description": "전라북도 전주시 완산구 상림동 23-3", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.707398, 35.356274, 299.98], + [126.704265, 35.358102, 349.1], + [126.70134, 35.360146, 342.03], + [126.698645, 35.362389, 249.86], + [126.696199, 35.364816, 224.18], + [126.694022, 35.367407, 160.02], + [126.692129, 35.370143, 133.25], + [126.690537, 35.373003, 92.48], + [126.689256, 35.375965, 110.69], + [126.688296, 35.379008, 138.4], + [126.687666, 35.382106, 154.49], + [126.687369, 35.385238, 163.23], + [126.687408, 35.388379, 140.49], + [126.687782, 35.391505, 99.09], + [126.68849, 35.394593, 58.67], + [126.689525, 35.397619, 59.23], + [126.690879, 35.400559, 62.5], + [126.692543, 35.403392, 67.38], + [126.694504, 35.406097, 75.13], + [126.696747, 35.408651, 91.44], + [126.699254, 35.411036, 111.06], + [126.702007, 35.413235, 111.47], + [126.704985, 35.415229, 102.69], + [126.708165, 35.417004, 103.79], + [126.711523, 35.418546, 161.25], + [126.715033, 35.419844, 190.92], + [126.718669, 35.420887, 271.6], + [126.722402, 35.421668, 174.23], + [126.726205, 35.422181, 87.84], + [126.730048, 35.422421, 95.55], + [126.733903, 35.422388, 103.7], + [126.737739, 35.422081, 117.71], + [126.741527, 35.421502, 167.18], + [126.74524, 35.420656, 201.33], + [126.748847, 35.41955, 259.71], + [126.752322, 35.418192, 357.55], + [126.755639, 35.416592, 370.1], + [126.758772, 35.414762, 270.87], + [126.761697, 35.412717, 251.35], + [126.764392, 35.410471, 278.92], + [126.766837, 35.408043, 353.73], + [126.769012, 35.40545, 250.86], + [126.770902, 35.402712, 187.79], + [126.772491, 35.399851, 186.29], + [126.773769, 35.396888, 174.09], + [126.774725, 35.393845, 136.85], + [126.775351, 35.390745, 132.66], + [126.775644, 35.387613, 103.96], + [126.775601, 35.384472, 175.67], + [126.775222, 35.381347, 200.2], + [126.774511, 35.37826, 209.5], + [126.773472, 35.375235, 166.37], + [126.772114, 35.372295, 159.12], + [126.770448, 35.369463, 192.34], + [126.768484, 35.366761, 163.01], + [126.76624, 35.364208, 101.98], + [126.763732, 35.361824, 145.71], + [126.760978, 35.359628, 155.08], + [126.758, 35.357636, 94.85], + [126.754821, 35.355863, 92.59], + [126.751465, 35.354322, 125.53], + [126.747957, 35.353026, 133.58], + [126.744323, 35.351984, 191.48], + [126.740593, 35.351205, 269.65], + [126.736793, 35.350693, 214.36], + [126.732953, 35.350453, 170.4], + [126.729102, 35.350487, 208.51], + [126.72527, 35.350795, 233.97], + [126.721484, 35.351373, 259.83], + [126.717775, 35.352219, 341.66], + [126.714171, 35.353325, 473.56], + [126.710698, 35.354683, 379.41], + [126.707398, 35.356274, 299.98] + ] + }, + "properties": { + "name": "고창 반경 4Km", + "description": "전라남도 장성군 북일면 문암리 산236", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.459929, 34.687277, 1.02], + [126.458887, 34.691416, 5.75], + [126.458287, 34.695613, 7], + [126.458135, 34.699837, 6.46], + [126.45843, 34.704057, 5.74], + [126.459173, 34.708239, 3.03], + [126.460356, 34.712351, 0.22], + [126.46197, 34.716364, 0], + [126.464004, 34.720245, 0.18], + [126.466442, 34.723966, 0.93], + [126.469266, 34.727498, 1.62], + [126.472453, 34.730814, 2.23], + [126.475981, 34.733889, 2.55], + [126.479821, 34.7367, 3.06], + [126.483945, 34.739225, 9.37], + [126.488322, 34.741445, 10.9], + [126.492917, 34.743342, 11.68], + [126.497697, 34.744903, 12.27], + [126.502624, 34.746116, 11.33], + [126.507661, 34.746971, 11.58], + [126.512769, 34.747462, 12.68], + [126.51791, 34.747585, 10.64], + [126.523045, 34.747339, 15.96], + [126.528134, 34.746726, 22.19], + [126.533138, 34.745751, 28.71], + [126.53802, 34.744421, 42.66], + [126.542742, 34.742746, 92.44], + [126.547268, 34.740739, 115.5], + [126.551564, 34.738415, 100.32], + [126.555597, 34.735793, 75.38], + [126.559336, 34.732891, 44.57], + [126.562753, 34.729733, 17.78], + [126.565822, 34.726342, 10.07], + [126.568519, 34.722744, 26.27], + [126.570824, 34.718966, 56.56], + [126.57272, 34.715038, 58.21], + [126.574191, 34.710988, 27.31], + [126.575228, 34.706849, 17.06], + [126.575822, 34.702651, 18.25], + [126.575968, 34.698427, 18.42], + [126.575666, 34.694208, 16.65], + [126.574918, 34.690027, 18.87], + [126.57373, 34.685915, 47.07], + [126.572111, 34.681904, 140.34], + [126.570072, 34.678024, 125.1], + [126.567631, 34.674306, 96.36], + [126.564805, 34.670776, 108.45], + [126.561616, 34.667462, 94.57], + [126.558088, 34.664389, 11.04], + [126.554249, 34.661581, 0], + [126.550126, 34.659059, 0], + [126.545752, 34.656841, 0], + [126.541161, 34.654945, 0], + [126.536386, 34.653386, 0], + [126.531464, 34.652175, 0], + [126.526432, 34.651321, 0], + [126.521329, 34.65083, 0], + [126.516194, 34.650708, 0.05], + [126.511066, 34.650953, 0], + [126.505982, 34.651566, 0], + [126.500983, 34.65254, 0], + [126.496106, 34.653868, 0], + [126.491388, 34.655541, 0], + [126.486865, 34.657546, 0], + [126.482572, 34.659867, 0], + [126.478541, 34.662487, 0], + [126.474802, 34.665386, 0], + [126.471384, 34.668542, 0], + [126.468314, 34.671931, 0], + [126.465614, 34.675527, 0], + [126.463305, 34.679303, 0], + [126.461405, 34.683229, 0], + [126.459929, 34.687277, 1.02] + ] + }, + "properties": { "name": "성화대", + "description": "성화대 반경 5.4Km", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.715947, 35.429372, 83.31], + [126.713887, 35.431022, 59.46], + [126.712012, 35.432813, 56.48], + [126.710336, 35.434729, 53.18], + [126.70887, 35.436758, 56.9], + [126.707628, 35.438882, 90.41], + [126.706617, 35.441087, 132.52], + [126.705846, 35.443355, 107.24], + [126.70532, 35.44567, 80.1], + [126.705045, 35.448013, 63.69], + [126.70502, 35.450366, 64.78], + [126.705248, 35.452712, 65.97], + [126.705726, 35.455034, 86.53], + [126.706451, 35.457312, 91.32], + [126.707417, 35.45953, 91.42], + [126.708616, 35.461672, 85.91], + [126.71004, 35.463719, 62.47], + [126.711678, 35.465659, 57.78], + [126.713517, 35.467474, 55.66], + [126.715544, 35.469152, 47.84], + [126.717743, 35.470679, 49.54], + [126.720096, 35.472045, 53.61], + [126.722587, 35.473238, 57.92], + [126.725197, 35.47425, 62.44], + [126.727905, 35.475073, 67.25], + [126.73069, 35.4757, 68.24], + [126.733532, 35.476127, 69.74], + [126.736409, 35.476351, 71.03], + [126.739299, 35.476369, 77.3], + [126.74218, 35.476182, 92.85], + [126.74503, 35.475792, 108.01], + [126.747828, 35.4752, 122.65], + [126.750551, 35.474412, 148.88], + [126.75318, 35.473434, 188.38], + [126.755694, 35.472273, 229.56], + [126.758073, 35.470938, 323.61], + [126.760301, 35.469439, 361.87], + [126.76236, 35.467787, 482.94], + [126.764234, 35.465996, 556.08], + [126.76591, 35.464078, 524.83], + [126.767373, 35.462048, 442.07], + [126.768614, 35.459923, 362.99], + [126.769622, 35.457717, 297.16], + [126.770391, 35.455448, 243.62], + [126.770914, 35.453134, 250.97], + [126.771187, 35.45079, 246.59], + [126.771208, 35.448437, 257.94], + [126.770977, 35.446091, 225.98], + [126.770497, 35.44377, 203.53], + [126.76977, 35.441492, 183.01], + [126.768802, 35.439275, 207.39], + [126.7676, 35.437134, 262.19], + [126.766174, 35.435087, 256.98], + [126.764535, 35.433149, 211.76], + [126.762695, 35.431335, 208.38], + [126.760667, 35.429659, 256.96], + [126.758469, 35.428133, 258.11], + [126.756115, 35.426768, 264.9], + [126.753624, 35.425576, 326.13], + [126.751016, 35.424566, 344.42], + [126.748309, 35.423744, 286.84], + [126.745525, 35.423118, 231.82], + [126.742685, 35.422692, 186.07], + [126.739809, 35.422469, 138.73], + [126.736921, 35.422451, 113.19], + [126.734042, 35.422639, 104.6], + [126.731194, 35.42303, 91.21], + [126.728399, 35.423621, 91.44], + [126.725677, 35.424409, 83.84], + [126.72305, 35.425388, 105.13], + [126.720538, 35.426549, 150.64], + [126.718159, 35.427884, 136.28], + [126.715947, 35.429372, 83.31] + ] + }, + "properties": { "name": "방장산", + "description": "방장산 반경 5.4Km", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [127.155989, 34.582098, 85.26], + [127.153121, 34.585795, 80.12], + [127.150655, 34.589684, 129.1], + [127.148611, 34.593735, 51.74], + [127.147002, 34.597918, 0], + [127.145843, 34.602199, 0], + [127.145141, 34.606548, 0], + [127.144903, 34.61093, 0], + [127.145129, 34.615313, 0], + [127.145819, 34.619663, 0], + [127.146966, 34.623947, 0], + [127.148564, 34.628132, 0], + [127.150598, 34.632187, 0], + [127.153055, 34.636081, 0], + [127.155915, 34.639783, 0], + [127.159157, 34.643266, 0], + [127.162755, 34.646503, 0], + [127.166683, 34.64947, 0], + [127.170911, 34.652144, 0], + [127.175406, 34.654504, 0], + [127.180134, 34.656533, 0], + [127.18506, 34.658215, 0], + [127.190145, 34.659537, 0], + [127.195351, 34.66049, 0], + [127.200638, 34.661065, 0], + [127.205966, 34.661259, 0], + [127.211295, 34.66107, 0], + [127.216583, 34.660499, 0], + [127.22179, 34.659552, 0.25], + [127.226877, 34.658234, 13.25], + [127.231805, 34.656557, 8.54], + [127.236536, 34.654532, 3.49], + [127.241034, 34.652176, 30.59], + [127.245266, 34.649506, 65.41], + [127.249198, 34.646543, 119.55], + [127.2528, 34.643309, 112.86], + [127.256047, 34.639829, 74.12], + [127.258912, 34.636129, 85.91], + [127.261374, 34.632238, 92.34], + [127.263414, 34.628185, 94.89], + [127.265017, 34.624001, 176.57], + [127.26617, 34.619718, 147.94], + [127.266866, 34.615369, 88.62], + [127.267098, 34.610986, 48.01], + [127.266865, 34.606604, 71.75], + [127.26617, 34.602254, 63.42], + [127.265016, 34.597972, 87.93], + [127.263413, 34.593788, 106.35], + [127.261374, 34.589735, 83.89], + [127.258914, 34.585844, 59.13], + [127.256051, 34.582144, 32.4], + [127.252808, 34.578663, 26.35], + [127.249209, 34.575429, 58.73], + [127.245281, 34.572465, 49.08], + [127.241055, 34.569793, 51.06], + [127.236563, 34.567436, 88.73], + [127.231838, 34.565409, 106.71], + [127.226917, 34.563729, 76.4], + [127.221837, 34.562408, 38.5], + [127.216637, 34.561457, 10.59], + [127.211356, 34.560882, 1.13], + [127.206034, 34.560688, 11.86], + [127.200712, 34.560877, 29.24], + [127.195431, 34.561447, 14.29], + [127.190229, 34.562394, 3.69], + [127.185147, 34.56371, 13.65], + [127.180224, 34.565385, 27.05], + [127.175497, 34.567408, 30.05], + [127.171001, 34.569761, 25.62], + [127.166772, 34.572429, 57.94], + [127.16284, 34.575389, 70.74], + [127.159237, 34.578621, 70.26], + [127.155989, 34.582098, 85.26] + ] + }, + "properties": { "name": "고흥", + "description": "고흥 반경 5.4Km", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", + "coordinates": [ + [126.988376, 35.30438, 64.03], + [126.984556, 35.307483, 60.73], + [126.981082, 35.310844, 49.64], + [126.97798, 35.314441, 46.54], + [126.975273, 35.318244, 46.86], + [126.972983, 35.322225, 47.32], + [126.971127, 35.326353, 58.26], + [126.969718, 35.330598, 49.79], + [126.968768, 35.334927, 48.86], + [126.968284, 35.339307, 51.72], + [126.96827, 35.343705, 55.05], + [126.968726, 35.348087, 61.25], + [126.969649, 35.35242, 80.4], + [126.971031, 35.35667, 111.09], + [126.972863, 35.360807, 161.83], + [126.975129, 35.364797, 238.41], + [126.977814, 35.368611, 180.42], + [126.980896, 35.37222, 100.91], + [126.984353, 35.375595, 128.26], + [126.988158, 35.378713, 189.64], + [126.992281, 35.381547, 160.08], + [126.996693, 35.384078, 202.42], + [127.001358, 35.386286, 293.84], + [127.006242, 35.388153, 128.04], + [127.011307, 35.389666, 134.52], + [127.016514, 35.390813, 141.59], + [127.021825, 35.391586, 235.55], + [127.027198, 35.391978, 375.19], + [127.032593, 35.391987, 432.82], + [127.037968, 35.391612, 412.39], + [127.043282, 35.390856, 315.03], + [127.048495, 35.389725, 373.38], + [127.053567, 35.388229, 439.46], + [127.05846, 35.386377, 417.98], + [127.063136, 35.384184, 314.81], + [127.067559, 35.381667, 183.56], + [127.071697, 35.378846, 182.74], + [127.075516, 35.375741, 160.68], + [127.078989, 35.372376, 129.28], + [127.082089, 35.368777, 142.59], + [127.084792, 35.364972, 168.28], + [127.087078, 35.360989, 147.99], + [127.088929, 35.356858, 141.41], + [127.090331, 35.352612, 130.84], + [127.091275, 35.348282, 122.96], + [127.091752, 35.343902, 126.57], + [127.091759, 35.339504, 114.23], + [127.091296, 35.335122, 110.88], + [127.090367, 35.330791, 114.04], + [127.088979, 35.326541, 111.01], + [127.087142, 35.322407, 125.32], + [127.084871, 35.318418, 135.96], + [127.082183, 35.314607, 160.71], + [127.079098, 35.311001, 213.8], + [127.07564, 35.307628, 203.4], + [127.071835, 35.304514, 283.04], + [127.067712, 35.301682, 167.43], + [127.063303, 35.299154, 111.5], + [127.058641, 35.296949, 113.95], + [127.053762, 35.295083, 241.73], + [127.048702, 35.293572, 210.14], + [127.0435, 35.292427, 134.09], + [127.038195, 35.291655, 76.57], + [127.032829, 35.291264, 58.37], + [127.027441, 35.291255, 50.07], + [127.022073, 35.29163, 49.02], + [127.016765, 35.292385, 49.79], + [127.011557, 35.293514, 62.2], + [127.00649, 35.295009, 53.95], + [127.001602, 35.296859, 44.67], + [126.99693, 35.299049, 45.73], + [126.992509, 35.301564, 55.5], + [126.988376, 35.30438, 64.03] + ] + }, + "properties": { + "name": "담양 반경 5.6Km", + "description": "전라남도 담양군 금성면 석현리 590-14", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [126.825527, 33.452855, 176.03], + [126.822889, 33.452767, 186.48], + [126.820251, 33.45287, 197.21], + [126.817635, 33.453165, 208.13], + [126.815058, 33.453649, 217.68], + [126.812543, 33.454318, 221.9], + [126.810106, 33.455168, 225.4], + [126.807768, 33.456191, 227.66], + [126.805545, 33.457381, 220.96], + [126.803456, 33.458728, 208.53], + [126.801514, 33.460221, 211.21], + [126.799736, 33.46185, 214.62], + [126.798135, 33.463603, 211.64], + [126.796723, 33.465464, 209.19], + [126.795511, 33.467422, 206.93], + [126.794508, 33.46946, 203.12], + [126.793722, 33.471563, 197.81], + [126.793158, 33.473715, 189.65], + [126.792822, 33.475901, 181.03], + [126.792715, 33.478102, 173.47], + [126.792838, 33.480303, 169.31], + [126.793191, 33.482486, 166.78], + [126.793771, 33.484635, 163.58], + [126.794573, 33.486734, 158.49], + [126.795592, 33.488767, 157.23], + [126.796819, 33.490718, 151.81], + [126.798246, 33.492572, 146], + [126.799861, 33.494316, 139.84], + [126.801652, 33.495935, 133.75], + [126.803605, 33.497419, 127.72], + [126.805707, 33.498754, 124.97], + [126.807939, 33.499932, 116.61], + [126.810287, 33.500942, 108.07], + [126.812731, 33.501779, 101.53], + [126.815254, 33.502434, 99.78], + [126.817835, 33.502903, 91.87], + [126.820456, 33.503184, 87.12], + [126.823096, 33.503272, 82.69], + [126.825735, 33.503168, 79.26], + [126.828353, 33.502873, 74.02], + [126.830931, 33.502388, 70.03], + [126.833447, 33.501718, 66.42], + [126.835885, 33.500868, 63.21], + [126.838224, 33.499844, 61.29], + [126.840447, 33.498653, 62.94], + [126.842537, 33.497305, 65.12], + [126.844478, 33.495811, 69.67], + [126.846255, 33.494181, 73.44], + [126.847856, 33.492428, 75.89], + [126.849267, 33.490566, 76.14], + [126.850478, 33.488608, 76.52], + [126.851479, 33.486569, 76.3], + [126.852264, 33.484465, 85.15], + [126.852826, 33.482313, 88.71], + [126.853161, 33.480127, 92.17], + [126.853266, 33.477926, 95.86], + [126.85314, 33.475725, 101.49], + [126.852785, 33.473542, 108.56], + [126.852204, 33.471393, 115.7], + [126.8514, 33.469294, 115.2], + [126.85038, 33.467262, 114.21], + [126.849151, 33.465312, 116.83], + [126.847724, 33.463458, 130.32], + [126.846108, 33.461716, 131.77], + [126.844317, 33.460097, 128.21], + [126.842363, 33.458615, 135.08], + [126.840262, 33.45728, 142.79], + [126.83803, 33.456103, 150.61], + [126.835683, 33.455093, 158.35], + [126.833239, 33.454258, 164.64], + [126.830718, 33.453603, 167.59], + [126.828138, 33.453134, 170.91], + [126.825527, 33.452855, 176.03] + ] + }, + "properties": { + "name": "구좌 반경 2.8Km", + "description": "제주특별자치도 제주시 구좌읍 세화리 산6", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { "type": "LineString", + "coordinates": [ + [126.557191, 33.289318, 330.27], + [126.556076, 33.289163, 332.05], + [126.554949, 33.28909, 333.69], + [126.553819, 33.289099, 336.26], + [126.552695, 33.28919, 339.75], + [126.551584, 33.289363, 344.14], + [126.550495, 33.289616, 350.96], + [126.549437, 33.289948, 358.66], + [126.548417, 33.290355, 367.07], + [126.547444, 33.290836, 376.13], + [126.546524, 33.291385, 385.77], + [126.545666, 33.291999, 395.92], + [126.544874, 33.292673, 406.5], + [126.544156, 33.293403, 417.42], + [126.543517, 33.294182, 426.73], + [126.542961, 33.295004, 434.34], + [126.542493, 33.295864, 442.13], + [126.542117, 33.296755, 452.48], + [126.541835, 33.29767, 467.01], + [126.541649, 33.298602, 484.09], + [126.541562, 33.299544, 500.93], + [126.541573, 33.300488, 510.91], + [126.541682, 33.301429, 520.49], + [126.541889, 33.302357, 529.51], + [126.542192, 33.303267, 537.92], + [126.542589, 33.304152, 547.33], + [126.543076, 33.305004, 557.38], + [126.543651, 33.305818, 566.49], + [126.544308, 33.306586, 574.6], + [126.545043, 33.307304, 581.64], + [126.54585, 33.307965, 587.56], + [126.546723, 33.308566, 592.31], + [126.547655, 33.3091, 595.87], + [126.54864, 33.309564, 596.47], + [126.549669, 33.309955, 588.24], + [126.550735, 33.310269, 574.65], + [126.551829, 33.310505, 553.63], + [126.552945, 33.31066, 538.86], + [126.554072, 33.310733, 536.85], + [126.555202, 33.310724, 532.12], + [126.556327, 33.310632, 525.64], + [126.557438, 33.310459, 518.81], + [126.558527, 33.310205, 511.86], + [126.559585, 33.309873, 503.58], + [126.560605, 33.309465, 496.75], + [126.561578, 33.308985, 488.36], + [126.562498, 33.308435, 475.26], + [126.563356, 33.307821, 464.16], + [126.564148, 33.307146, 453.38], + [126.564865, 33.306417, 441.99], + [126.565504, 33.305637, 430.08], + [126.56606, 33.304815, 419.18], + [126.566527, 33.303954, 408.82], + [126.566903, 33.303064, 398.69], + [126.567184, 33.302149, 395.19], + [126.567369, 33.301217, 391.01], + [126.567457, 33.300275, 385.94], + [126.567445, 33.29933, 377.42], + [126.567335, 33.29839, 368.7], + [126.567128, 33.297461, 358.29], + [126.566824, 33.296551, 350.94], + [126.566427, 33.295667, 345.59], + [126.565939, 33.294815, 341.19], + [126.565364, 33.294002, 337.77], + [126.564706, 33.293233, 335.35], + [126.563971, 33.292516, 333.95], + [126.563164, 33.291855, 333.58], + [126.562291, 33.291255, 333.35], + [126.561359, 33.290721, 331.02], + [126.560374, 33.290257, 329.49], + [126.559345, 33.289866, 328.76], + [126.558279, 33.289552, 328.84], + [126.557191, 33.289318, 330.27] + ] + }, + "properties": { "name": "미악산", + "description": "미악산 반경 1.2Km", + "type": "0006", + "tessellate": true + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.383333, 37.502778, 0], + [127.383333, 37.45, 0], + [127.533333, 37.45, 0], + [127.533333, 37.502778, 0], + [127.383333, 37.502778, 0] + ] + ] + }, + "properties": { "name": "양평", + "description": "양평 초경량비행장치", + "type": "0006" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.904722, 36.528056, 0], + [126.9075, 36.468056, 0], + [127.098056, 36.434444, 0], + [127.120278, 36.500556, 0], + [126.962778, 36.5125, 0], + [126.937222, 36.540278, 0], + [126.904722, 36.528056, 0] + ] + ] + }, + "properties": { + "name": "공주", + "description": "초경량비행장치 전용 공역", + "type": "0006" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.555278, 37.237222, 0], + [126.561667, 37.212222, 0], + [126.674722, 37.2125, 0], + [126.774444, 37.220833, 0], + [126.833333, 37.241667, 0], + [126.833333, 37.29, 0], + [126.704167, 37.2975, 0], + [126.555278, 37.237222, 0] + ] + ] + }, + "properties": { + "name": "시화", + "description": "초경량비행장치 전용 공역", + "type": "0006" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [128.391944, 37.369722, 0], + [128.436111, 37.364722, 0], + [128.469444, 37.402778, 0], + [128.405278, 37.443889, 0], + [128.391944, 37.369722, 0] + ] + ] + }, + "properties": { + "name": "장암산", + "description": "초경량비행장치 전용 공역", + "type": "0006" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [127.723333, 34.987778, 0], + [127.794167, 34.9875, 0], + [127.794722, 35.029167, 0], + [127.723611, 35.029722, 0], + [127.723333, 34.987778, 0] + ] + ] + }, + "properties": { + "name": "하동", + "description": "초경량비행장치 전용 공역", + "type": "0006" + } + } + ] +} diff --git a/src/components/map/google/DronMarker.js b/src/components/map/google/DronMarker.js new file mode 100644 index 0000000..baed04a --- /dev/null +++ b/src/components/map/google/DronMarker.js @@ -0,0 +1,24 @@ +import React from 'react'; +import { useEffect, useRef, useState } from 'react'; +import InfoBox from 'react-google-maps/lib/components/addons/InfoBox'; +import Marker from 'react-google-maps/lib/components/Marker'; +import OverlayView from 'react-google-maps/lib/components/OverlayView'; +import dronicon from '../../../assets/control/icon/drone.png'; +import { useDispatch, useSelector } from 'react-redux'; +import { ControlGpData } from '../../../modules/control/gp'; +import { StoreState } from '../../../modules'; + +export const DronMarker = props => { + return ( + alert(11111)} + position={{ lat: props.dronInfo.lat, lng: props.dronInfo.lng }} + > + ); +}; diff --git a/src/components/map/google/GoogleMap.js b/src/components/map/google/GoogleMap.js new file mode 100644 index 0000000..9c2ba00 --- /dev/null +++ b/src/components/map/google/GoogleMap.js @@ -0,0 +1,64 @@ +import React, { useEffect, useState } from 'react'; +import { + GoogleMap, + GroundOverlay, + Marker, + Polyline, + withGoogleMap, + withScriptjs +} from 'react-google-maps'; +import { DronMarker } from './DronMarker'; +// import { StoreState } from '../../../modules'; +import { useSelector } from 'react-redux'; +import SearchBox from 'react-google-maps/lib/components/places/SearchBox'; +import InfoWindow from 'react-google-maps/lib/components/InfoWindow'; + +const MapInit = () => { + const { controlGpList } = useSelector(state => state.controlGpState); + const [bounds, setBounds] = useState(null); + + useEffect(() => { + console.log('GoogleMap >>>>>', controlGpList); + }, [controlGpList]); + const onSearchBoxMounted = () => {}; + + const onPlacesChanged = () => {}; + + return ( + <> + +
    test
    + + {controlGpList?.map(item => ( + // + + ))} +
    + + ); +}; + +const GoogleMapWrapped = withScriptjs(withGoogleMap(MapInit)); + +export const GoogleCustomMap = () => { + const mapProps = { + key: 'AIzaSyDKCsI8cbzgi4es3xCUIhElUm6NRM73QuI', + url: 'https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=drawing,geometryplaces' + }; + + console.log(`${mapProps.url}&key=${mapProps.key}`); + return ( +
    + } + containerElement={
    } + mapElement={
    } + /> +
    + ); +}; diff --git a/src/components/map/naver/NaverMap.js b/src/components/map/naver/NaverMap.js new file mode 100644 index 0000000..3f2aff7 --- /dev/null +++ b/src/components/map/naver/NaverMap.js @@ -0,0 +1,99 @@ +import React, { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; +import dronicon from '../../../assets/control/icon/drone.png'; +import { DronMarker } from './dron/DronMarker'; +import { DronHistory } from './dron/DronHistory'; + +import NaverMapControl from './NaverMapControl'; +import { NaverMapSearch } from './search/NaverMapSearch'; +import { FeatureAirZone } from './feature/FeatureAirZone'; +import geoJson from '../geojson/airArea.json'; +import SensorZone from "./sensor/SensorZone"; + +export const NaverCustomMap = () => { + const naver = window.naver; + let map; + + const [isMapLoad, setIsMapLoad] = useState(false); + const [mapObject, setMapObject] = useState(null); + + let arrMarkers = []; // 마커 배열 + let arrPolyline = []; // 폴리라인 배열 + let features = geoJson.features; + + useEffect(() => { + NaverMapInit(); + // console.log(map); + + // console.log(features); + + // setIsMapLoad(true); + }, []); + + useEffect(() => { + // console.log('==============11111==================', mapObject); + }, [mapObject]); + + const removeArrMarkers = arrData => { + arrMarkers = arrData; + }; + + const test = aaaa => { + console.log(aaaa); + }; + + const NaverMapInit = () => { + const mapOptions = { + center: new naver.maps.LatLng(36.56793936069445, 127.85101412107547), + zoom: 10, + zoomControl: true, + mapTypeId: naver.maps.MapTypeId.HYBRID, + zoomControlOptions: { + position: naver.maps.Position.TOP_LEFT, + + style: naver.maps.ZoomControlStyle.SMALL + } + }; + + // map = ; + setMapObject(new naver.maps.Map('map', mapOptions)); + // naver.maps.Event.addListener(map, 'click', function (e) { + // console.log(e); + // }); + + // naver.maps.Event.addListener(map, 'idle', function (e) { + // console.log(e); + // }); + }; + + return ( + <> +
    + {mapObject != null ? ( + <> + + + + + + + + + + + ) : null} + + {/* */} + + ); +}; diff --git a/src/components/map/naver/NaverMapControl.js b/src/components/map/naver/NaverMapControl.js new file mode 100644 index 0000000..68fb7d7 --- /dev/null +++ b/src/components/map/naver/NaverMapControl.js @@ -0,0 +1,26 @@ +import { useEffect } from 'react'; +import { useSelector } from 'react-redux'; + +const NaverMapControl = props => { + const mapControl = useSelector(state => state.controlMapReducer); + + // useEffect(() => { + // console.log('>>>>', props.map); + // }, []); + useEffect(() => { + // console.log('mapControl>>>>>>>>>>', mapControl); + }, [mapControl]); + + //맵타입 변경 + if (mapControl.mapType === 'NORMAL') { + props.map.setMapTypeId(naver.maps.MapTypeId.NORMAL); + } else if (mapControl.mapType === 'TERRAIN') { + props.map.setMapTypeId(naver.maps.MapTypeId.TERRAIN); + } else if (mapControl.mapType === 'HYBRID') { + props.map.setMapTypeId(naver.maps.MapTypeId.HYBRID); + } + + return null; +}; + +export default NaverMapControl; diff --git a/src/components/map/naver/dron/DronHistory.js b/src/components/map/naver/dron/DronHistory.js new file mode 100644 index 0000000..f83006e --- /dev/null +++ b/src/components/map/naver/dron/DronHistory.js @@ -0,0 +1,63 @@ +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { controlGpHisAction } from '../../../../modules/control/gp'; + +export const DronHistory = props => { + const { controlGpHistory } = useSelector(state => state.controlGpHisState); + const { objectId, isClickObject } = useSelector( + state => state.controlMapReducer + ); + + let naver = props.naver; + let polyline; + let polylinePath = []; + + const dispatch = useDispatch(); + + useEffect(() => { + // console.log('>>>', controlGpHistory); + polylineRemove(); + polylineInit(); + }, [controlGpHistory]); + + useEffect(() => { + if (isClickObject) { + dispatch(controlGpHisAction.request({ id: objectId })); + } else { + polylineRemove(); + } + }, [objectId, isClickObject]); + + const polylineRemove = () => { + if (props.arrPolyline) { + props.arrPolyline.map(item => { + item.setMap(null); + }); + } + }; + const polylineInit = () => { + if (controlGpHistory) { + polyline = new naver.maps.Polyline({ + clickable: false, + strokeColor: '#ff4961', + strokeStyle: 'solid', + strokeOpacity: 5, + strokeWeight: 1.5 + }); + + controlGpHistory.map(item => { + if (item.lat > 0 && item.lng > 0) { + const position = new naver.maps.LatLng(item.lat, item.lng); + polylinePath.push(position); + } + // console.log('>>>>>>>>>>>', item); + }); + + polyline.setPath(polylinePath); + polyline.setMap(props.map); + props.arrPolyline.push(polyline); + } + }; + + return null; +}; diff --git a/src/components/map/naver/dron/DronMarker.js b/src/components/map/naver/dron/DronMarker.js new file mode 100644 index 0000000..a703ff4 --- /dev/null +++ b/src/components/map/naver/dron/DronMarker.js @@ -0,0 +1,167 @@ +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import '../../../../assets/css/custom.css'; +import DronIconPulple from '../../../../assets/images/drone-marker-icon-pulple.png'; +import DronIcon from '../../../../assets/images/drone-marker-icon.png'; +import { controlGpDtlAction } from '../../../../modules/control/gp'; +import { objectClickAction } from '../../../../modules/control/map/actions/controlMapActions'; + +export const DronMarker = props => { + const { controlGpList } = useSelector(state => state.controlGpState); + const { objectId, isClickObject } = useSelector( + state => state.controlMapReducer + ); + const dispatch = useDispatch(); + + let naver = props.naver; + + var contentString = ['
    dddd', '
    '].join(''); + + var infowindow = new naver.maps.InfoWindow({ + content: contentString + }); + + useEffect(() => { + markerInit(); + }, [controlGpList]); + + useEffect(() => { + console.log('>>>>>>>>>>>>>>>>', objectId, isClickObject); + + props.arrMarkers.map(clickMarker => { + if (objectId === clickMarker.id && isClickObject) { + // clickMarker.setIcon(DronIconPulple); + clickMarker.setIcon({ + url: DronIconPulple, + origin: new naver.maps.Point(0, 0), + anchor: new naver.maps.Point(15, 15), + }); + } else { + // clickMarker.setIcon(DronIcon); + clickMarker.setIcon({ + url: DronIcon, + origin: new naver.maps.Point(0, 0), + anchor: new naver.maps.Point(15, 15), + }); + } + }); + // }else{ + + // } + }, [objectId, isClickObject]); + + useEffect(() => { + props.arrMarkers.map(clickMarker => { + if (objectId === clickMarker.id) { + console.log(clickMarker); + props.map.setCenter(clickMarker.getPosition()); + // $('#btn_modal').click(); + props.map.setZoom(13, true); + } + }); + }, [objectId]); + + //마커를 그린다. + const addMarkers = (position, id, controlId) => { + var marker = new naver.maps.Marker({ + position: position, + title: id, + id: id, + controlId: controlId, + icon: { + // content: [ + // '
    dddd
    ', + + // ].join(''), + url: DronIcon, + // size: new naver.maps.Size(50, 50), + origin: new naver.maps.Point(0, 0), + anchor: new naver.maps.Point(15, 15), + } + }); + + marker.setMap(props.map); + + naver.maps.Event.addListener(marker, 'click', function (e) { + handlerDronClick(marker); + }); + + props.arrMarkers.push(marker); + }; + + const handlerDronClick = marker => { + if (marker.getAnimation() != null) { + // marker.setAnimation(null); + // infowindow.close(); + // dispatch(Actions.controlGpHisAction.request(controlGpList)); + } else { + // infowindow.open(props.map, marker); + // marker.setAnimation(naver.maps.Animation.BOUNCE); + } + + // marker.setIcon(DronIconPulple); + // console.log(marker.id); + const markerId = marker.id; + const contorlId = marker.controlId; + console.log('contorlId ::::::::::< ', marker.controlId); + //히스토리 불러오기 + + dispatch(objectClickAction(markerId)); + dispatch(controlGpDtlAction.request(contorlId)); + }; + + //마커를 삭제 한다. + const removeMarkers = marker => { + marker.setMap(null); + }; + + //마커에 위치를 이동한다. + const moveMarkers = (marker, position) => { + // console.log(marker); + marker.setPosition(position); + }; + + //데이터가 없는 마커를 모두 삭제 한다. + const allRemoveMarkers = () => { + if (props.arrMarkers && controlGpList) { + props.arrMarkers.map(marker => { + const isExists = controlGpList.find( + item => item.objectId === marker.id + ); + if (!isExists) { + removeMarkers(marker); + const arrData = props.arrMarkers.filter( + item => item.objectId != marker.id + ); + props.removeArrMarkers(arrData); + } + }); + } + // } + }; + + //마커를 셋팅 한다. + const markerInit = () => { + if (controlGpList) { + allRemoveMarkers(); + controlGpList.map(item => { + const position = new naver.maps.LatLng(item.lat, item.lng); + if (props.arrMarkers) { + const isExists = props.arrMarkers.find( + ele => ele.id === item.objectId + ); + if (isExists) { + moveMarkers(isExists, position); + } else { + // console.log(' ADD >>>', props.arrMarkers); + addMarkers(position, item.objectId, item.controlId); + } + } else { + addMarkers(position, item.objectId, item.controlId); + } + }); + } + }; + + return null; +}; diff --git a/src/components/map/naver/feature/FeatureAirZone.js b/src/components/map/naver/feature/FeatureAirZone.js new file mode 100644 index 0000000..854aced --- /dev/null +++ b/src/components/map/naver/feature/FeatureAirZone.js @@ -0,0 +1,150 @@ +import { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; +import '../../../../assets/css/custom.css'; + +export const FeatureAirZone = props => { + const mapControl = useSelector(state => state.controlMapReducer); + let infoWindow; + + useEffect(() => { + // console.log('>>>>>', mapControl); + featureAirZoneInit(); + featureAirEvent(); + }, [mapControl]); + + useEffect(() => { + // console.log(">>>>>>>>" , props.features) + }, []); + + const infowindowOpen = data => { + const content = + '
    ' + + '
    ' + + '' + + data.title + + '' + + '
    ' + + '
    ' + + '
    ' + + // '설명' + + '' + + data.description + + '' + + '
    ' + + // '
    ' + + // '좌표정보' + + // ''+data.coord+'' + + // '
    ' + + '
    ' + + // '' + + '
    '; + + infoWindow = new props.naver.maps.InfoWindow({ + class: 'tooltip-test', + content: content, + maxWidth: 200, + backgroundColor: '#283046', //박스안쪽영역 컬러 + // borderColor: '#333', //테두리컬러 + // borderWidth: 3, //테두리 굵기 + anchorSize: new props.naver.maps.Size(30, -10), + anchorSkew: false, + anchorColor: '#283046', + + pixelOffset: new props.naver.maps.Point(20, -20) + }); + + infoWindow.open(props.map, data.coord); + }; + + const featureAirZoneInit = () => { + let arrGeoJson = []; + // props.map.data.removeGeoJson(props.geoJson); + // let geoJson = originGeoJson; + let useGeoJson = { type: 'FeatureCollection' }; + useGeoJson.features = props.features; + + props.map.data.removeGeoJson(useGeoJson); + + props.features.map(item => { + if (item.properties.type === '0001' && mapControl.area0001) { + arrGeoJson.push(item); + } else if (item.properties.type === '0002' && mapControl.area0002) { + arrGeoJson.push(item); + } else if (item.properties.type === '0003' && mapControl.area0003) { + arrGeoJson.push(item); + } else if (item.properties.type === '0004' && mapControl.area0004) { + arrGeoJson.push(item); + } else if (item.properties.type === '0005' && mapControl.area0005) { + arrGeoJson.push(item); + } else if (item.properties.type === '0006' && mapControl.area0006) { + arrGeoJson.push(item); + } + }); + + useGeoJson.features = arrGeoJson; + props.map.data.addGeoJson(useGeoJson); + + props.map.data.setStyle(feature => { + var color; + + //0001 비행금지구역 #FF3648 + //0002 비행제한구역 #FFA1AA + //0003 관제권(공항) #FFA800 + //0004 비행장(군사) #A16B00 + //0005 이착륙장(RC비행장) #AB40FF + //0006 초경량비행장치 #009cad + + // 공역 색상 변경 + const type = feature.getProperty('type'); + if (type === '0001') { + color = '#FF3648'; + } else if (type === '0002') { + color = '#FFA1AA'; + } else if (type === '0003') { + color = '#FFA800'; + } else if (type === '0004') { + color = '#A16B00'; + } else if (type === '0005') { + color = '#AB40FF'; + } else if (type === '0006') { + color = '#009cad'; + } + + return { + fillColor: color, + strokeColor: color, + strokeWeight: 0.7, + icon: null + }; + }); + }; + + const featureAirEvent = () => { + props.map.data.addListener('click', function (e) { + // e.feature.setProperty('isColorful', true); + console.log(e.feature.property_name); + }); + + props.map.data.addListener('mouseover', function (e) { + const data = {}; + data.coord = e.coord; + data.title = e.feature.property_name; + data.description = e.feature.property_description; + props.map.data.overrideStyle(e.feature, { + strokeWeight: 3 + // icon: HOME_PATH +'/img/example/pin_spot.png' + }); + + infowindowOpen(data); + }); + + props.map.data.addListener('mouseout', function (e) { + props.map.data.revertStyle(); + + if (infoWindow) { + infoWindow.close(); + } + }); + }; + return null; +}; diff --git a/src/components/map/naver/search/NaverMapSearch.js b/src/components/map/naver/search/NaverMapSearch.js new file mode 100644 index 0000000..b152932 --- /dev/null +++ b/src/components/map/naver/search/NaverMapSearch.js @@ -0,0 +1,25 @@ +import { useEffect } from 'react'; + +export const NaverMapSearch = props => { + useEffect(() => { + console.log('>>>>', props.naver.maps.Service); + props.naver.maps.Service.geocode( + { + address: '산곡동' + }, + function (status, response) { + if (status !== naver.maps.Service.Status.OK) { + return alert('Something wrong!'); + } + + var result = response.result, // 검색 결과의 컨테이너 + items = result.items; // 검색 결과의 배열 + console.log(result); + + // do Something + } + ); + }); + + return null; +}; diff --git a/src/components/map/naver/sensor/SensorZone.js b/src/components/map/naver/sensor/SensorZone.js new file mode 100644 index 0000000..529e7f8 --- /dev/null +++ b/src/components/map/naver/sensor/SensorZone.js @@ -0,0 +1,485 @@ +import React, {useEffect, useState} from 'react'; +import {useSelector} from "react-redux"; + +const SENSOR_RADIUS = '100'; +const SENSOR_RADIUS_DIVISION = '3'; +let lenderCnt = 0; +const SensorZone = (props) => { + const {naver} = props; + // 드론 실시간 정보 + const {controlGpList} = useSelector(state => state.controlGpState); + // 환경지표 타입(dust, co, o3, no2, so2) + const {sensor} = useSelector(state => state.controlMapReducer); + // 센서레이어(환경지표) 관리 + const [circleLayers, setCircleLayers] = useState([]); + const [polilineGroupLayers, setPolilineGroupLayers] = useState({}); + + // console.log('########## SensorZone ###########', lenderCnt, {controlGpList, circleLayer: circleLayers, polilineLayer: polilineGroupLayers}); + + useEffect(() => { + lenderCnt++ + if (!sensor) { + removeSensorLayers(); + } else { + initSensorLayer(); + } + }, [controlGpList, sensor]); + let infoWindow; + // 센서 레이어 Info + const infowindowOpen = data => { + // console.log('data', data) + const content = ` +
    +
    + ${data.title} +
    +
    +
    +
    + ${data.sensor.sensorDust.title}(${data.sensor.sensorDust.text}) + ${data.sensor.sensorDust.value} +
    +
    + ${data.sensor.sensorO3.title}(${data.sensor.sensorO3.text}) + ${data.sensor.sensorO3.value} +
    +
    + ${data.sensor.sensorNo2.title}(${data.sensor.sensorNo2.text}) + ${data.sensor.sensorNo2.value} +
    +
    + ${data.sensor.sensorCo.title}(${data.sensor.sensorCo.text}) + ${data.sensor.sensorCo.value} +
    +
    + ${data.sensor.sensorSo2.title}(${data.sensor.sensorSo2.text}) + ${data.sensor.sensorSo2.value} +
    +
    +
    +
    + `; + + infoWindow = new naver.maps.InfoWindow({ + class: 'tooltip-sensor', + content: content, + maxWidth: 300, + backgroundColor: '#283046', //박스안쪽영역 컬러 + // borderColor: '#333', //테두리컬러 + // borderWidth: 3, //테두리 굵기 + anchorSize: new naver.maps.Size(30, -10), + anchorSkew: false, + anchorColor: '#283046', + + pixelOffset: new naver.maps.Point(20, -20) + }); + + infoWindow.open(props.map, data.coord); + }; + // 센서레이어 초기화 + const initSensorLayer = () => { + emtpyLayerRemove(); + if (controlGpList) { + controlGpList.forEach(controlGp => { + const {controlId, lat, lng, objectId} = controlGp; + let color = undefined; + const sensorData = convtSensorData(controlGp); + if (sensorData) { + if (sensor === 'dust') color = sensorData.sensorDust.color; + else if (sensor === 'co') color = sensorData.sensorCo.color; + else if (sensor === 'so2') color = sensorData.sensorSo2.color; + else if (sensor === 'no2') color = sensorData.sensorNo2.color; + else if (sensor === 'o3') color = sensorData.sensorO3.color; + } + + const position = new naver.maps.LatLng(controlGp.lat, controlGp.lng); + + const polilineLayers = polilineGroupLayers[controlId]; + if (polilineLayers) { + // const prevPosition = polilineLayers[0].position; + // if(!prevPosition.equals(position)){ + movePolilineLayers(polilineLayers, position, color); + // } + } else { + addPolilineLayers(controlId, objectId, position, color); + } + + const circleLayer = circleLayers.find(layer => layer.controlId === controlId); + if (circleLayer) moveCircleLayer(circleLayer, position, color, sensorData); + else addCircleLayer(controlId, objectId, position, color, sensorData); + }); + } + } + + // 센서레이어 생성 + const addSensorLayer = (position, id, controlId, color, sensorData) => { + addPolilineLayers(controlId, id, position, color); + addCircleLayer(controlId, id, position, color, sensorData); + } + // Circle 레이어 생성 + const addCircleLayer = (controlId, id, position, color, sensorData) => { + // console.log({controlId, id, position, color, sensorData}) + const circleLayer = new naver.maps.Circle({ + title: id, + id: id, + controlId: controlId, + clickable: true, + center: position, + radius: SENSOR_RADIUS, + // map: props.map, + strokeColor: color, + strokeOpacity: 1, + strokeWeight: 2, + fillColor: color, + fillOpacity: 0.2, + sensorData: sensorData + }) + // Circle 이벤트 주입 + naver.maps.Event.addListener(circleLayer, 'mouseover', function (e) { + const data = {}; + data.coord = e.coord; + data.title = '환경지표'; + data.controlId = e.overlay.controlId; + data.sensor = e.overlay.sensorData; + e.overlay.setOptions({ + strokeWeight: 5, + fillOpacity: 0.5 + }) + infowindowOpen(data); + }); + naver.maps.Event.addListener(circleLayer, 'mouseout', function (e) { + e.overlay.setOptions({ + strokeWeight: 2, + fillOpacity: 0.2 + }) + // props.map.Event.revertStyle(); + if (infoWindow) { + infoWindow.close(); + } + }); + circleLayer.setMap(props.map) + setCircleLayers(prev => ([...prev, circleLayer])); + + } + const addPolilineLayers = (controlId, id, position, color) => { + // 지도에 적용 및 레이어 관리 추가 + // console.log('addPolilineLayers', controlId) + const polilineLayers = createCircleInGrid(position, id, controlId, color); + polilineLayers.forEach(layer => layer.setMap(props.map)); + setPolilineGroupLayers(prev => ({ + ...prev, + [controlId]: polilineLayers + })); + } + + // 센서레이어 이동 + const moveSensorLayer = (controlId, position, color) => { + const circleLayer = circleLayers.find(layer => layer.controlId === controlId); + moveCircleLayer(circleLayer, position, color); + + const polilineLayers = polilineGroupLayers[controlId]; + movePolilineLayers(polilineLayers, position, color); + } + const moveCircleLayer = (circleLayer, position, color, sensorData) => { + // const circleLayer = circleLayers.find(layer => layer.controlId === controlId); + if (circleLayer) { + circleLayer.sensorData = sensorData; + circleLayer.setOptions({center: position, strokeColor: color, fillColor: color}) + } + } + const movePolilineLayers = (polilineLayers, position, color) => { + const {controlId, id, position: prevPosition} = polilineLayers[0]; + if (prevPosition.equals(position)) { + if (polilineLayers) { + polilineLayers.forEach(layer => layer.setOptions({strokeColor: color})); + } + } else { + if (polilineLayers) { + polilineLayers.forEach(layer => layer.setMap(null)); + } + const newPolilineLayers = createCircleInGrid(position, id, controlId, color); + newPolilineLayers.forEach(layer => layer.setMap(props.map)); + setPolilineGroupLayers(prev => ({ + ...prev, + [controlId]: newPolilineLayers + })); + } + } + + // 센서레이어 제거 + const removeSensorLayer = (controlId) => { + removeCircleLayer(controlId); + removePolilineLayer(controlId); + } + const removeCircleLayer = (controlId) => { + const idx = circleLayers.findIndex(layer => layer.controlId === controlId); + circleLayers[idx].setMap(null); + setCircleLayers(prev => { + prev.splice(idx, 1); + return prev; + }) + } + const removePolilineLayer = (controlId) => { + const polilineLayers = polilineGroupLayers[controlId]; + if (polilineLayers) polilineLayers.forEach(layer => layer.setMap(null)); + setPolilineGroupLayers(prev => { + delete prev[controlId]; + return prev; + }) + } + // 센서레이어 모두 제거 + const removeSensorLayers = () => { + circleLayers.forEach(layer => layer.setMap(null)); + setCircleLayers([]); + const keys = Object.keys(polilineGroupLayers); + keys.forEach((key) => { + polilineGroupLayers[key].forEach(layer => layer.setMap(null)); + }) + setPolilineGroupLayers({}); + } + + // 레이어관리시 새로운 데이터에 없는 좌표 제거 + const emtpyLayerRemove = () => { + setCircleLayers(prev => { + const remainCircleLayers = prev.filter((circleLayer, i) => { + const controlId = circleLayer.controlId; + const findObj = controlGpList.find(controlGp => controlGp.controlId === controlId); + if (findObj) { + return circleLayer; + } else { + circleLayer.setMap(null); + } + }) + return remainCircleLayers; + }) + setPolilineGroupLayers(prev => { + const keys = Object.keys(prev); + const remainPolilineGroupLayer = {}; + keys.forEach((controlId, i) => { + const findObj = controlGpList.find(controlGp => controlGp.controlId === controlId); + if (findObj) { + remainPolilineGroupLayer[controlId] = prev[controlId]; + } else { + const polilineLayers = prev[controlId]; + polilineLayers.forEach(layer => { + layer.setMap(null); + }) + } + }) + return remainPolilineGroupLayer; + }) + } + + // Circle안에 격자 무늬 생성 + const createCircleInGrid = (position, id, controlId, color) => { + // Circle 레이어 안의 격자무늬 + const polilineLayers = []; + for (let i = 0; i <= SENSOR_RADIUS_DIVISION; i++) { + // 각 사분면 각도 + const diff = 90 / SENSOR_RADIUS_DIVISION; + const angleQuadrant1 = diff * i; + const angleQuadrant2 = 180 - (diff * i); + const angleQuadrant3 = 180 + (diff * i); + const angleQuadrant4 = diff * -i; + // 각 사분면 좌표 + const coord1 = new naver.maps.EPSG3857.getDestinationCoord(position, angleQuadrant1, SENSOR_RADIUS); + const coord2 = new naver.maps.EPSG3857.getDestinationCoord(position, angleQuadrant2, SENSOR_RADIUS); + const coord3 = new naver.maps.EPSG3857.getDestinationCoord(position, angleQuadrant3, SENSOR_RADIUS); + const coord4 = new naver.maps.EPSG3857.getDestinationCoord(position, angleQuadrant4, SENSOR_RADIUS); + const polyline12 = new naver.maps.Polyline({ + id, + position, + controlId, + path: [coord1, coord2], + strokeWeight: 0.8, + // strokeWeight: 2, + strokeOpacity: 1, + strokeColor: color, + strokeStyle: 'shortdash' + }) + polilineLayers.push(polyline12); + const polyline23 = new naver.maps.Polyline({ + id, + position, + controlId, + path: [coord2, coord3], + strokeWeight: 0.8, + // strokeWeight: 2, + strokeOpacity: 1, + strokeColor: color, + strokeStyle: 'shortdash' + }) + polilineLayers.push(polyline23); + const polyline34 = new naver.maps.Polyline({ + id, + position, + controlId, + path: [coord3, coord4], + strokeWeight: 0.8, + // strokeWeight: 2, + strokeOpacity: 1, + strokeColor: color, + strokeStyle: 'shortdash' + }) + polilineLayers.push(polyline34); + const polyline41 = new naver.maps.Polyline({ + id, + position, + controlId, + path: [coord4, coord1], + strokeWeight: 0.8, + // strokeWeight: 2, + strokeOpacity: 1, + strokeColor: color, + strokeStyle: 'shortdash' + }) + polilineLayers.push(polyline41); + } + return polilineLayers; + } + + // 환경지표 필요한 데이터로 변환 + const convtSensorData = (sensorData) => { + const r = { + sensorDust: { + title: '미세먼지', + value: '-', + text: '-', + color: undefined + }, + sensorCo: { + title: '일산화탄소', + value: '-', + text: '-', + color: undefined + }, + sensorSo2: { + title: '아황산가스', + value: '-', + text: '-', + color: undefined + }, + sensorNo2: { + title: '이산화질소', + value: '-', + text: '-', + color: undefined + }, + sensorO3: { + title: '오존', + value: '-', + text: '-', + color: undefined + } + } + + // 정수: 미세먼지 || 소수점 1자리 : 일산화탄소 || 소수점 3자리 : 오존, 이산화질소, 아황산가스 + // 좋음 : 파랑, 보통 : 노랑, 나쁨 : 주황, 매우나쁨 : 빨강 + // 미세먼지 : 좋음(0~30) 보통(31~80) 나쁨(81~150) 매우나쁨(151~) + if (sensorData.sensorDust != undefined && sensorData.sensorDust != null) { + const val = r.sensorDust.value = Math.round(sensorData.sensorDust); + if (val <= 30) { + r.sensorDust.text = '좋음'; + r.sensorDust.color = '#37c9ff'; + } else if (val <= 80) { + r.sensorDust.text = '보통'; + r.sensorDust.color = '#ffff44'; + } else if (val <= 150) { + r.sensorDust.text = '나쁨'; + r.sensorDust.color = '#ffa044'; + } else if (val > 150) { + r.sensorDust.text = '매우나쁨'; + r.sensorDust.color = '#ff5959'; + } else { + r.sensorDust.text = '-'; + r.sensorDust.color = '#a1a1a1'; + } + } + // 일산화탄소 : 좋음(0~2) 보통(2.1~9) 나쁨(9.1~15) 매우나쁨(15.1~) + if (sensorData.sensorCo != undefined && sensorData.sensorCo != null) { + const val = r.sensorCo.value = Math.round(sensorData.sensorCo * 10) / 10; + if (val <= 0.2) { + r.sensorCo.text = '좋음'; + r.sensorCo.color = '#37c9ff'; + } else if (val <= 9) { + r.sensorCo.text = '보통'; + r.sensorCo.color = '#ffff44'; + } else if (val <= 15) { + r.sensorCo.text = '나쁨'; + r.sensorCo.color = '#ffa044'; + } else if (val > 15) { + r.sensorCo.text = '매우나쁨'; + r.sensorCo.color = '#ff5959'; + } else { + r.sensorCo.text = '-'; + r.sensorCo.color = '#a1a1a1'; + } + } + // 아황산가스 : 좋음(0~0.02) 보통(0.021~0.05) 나쁨(0.051~0.15) 매우나쁨 (0.151 ~) + if (sensorData.sensorSo2 != undefined && sensorData.sensorSo2 != null) { + const val = r.sensorSo2.value = Math.round(sensorData.sensorSo2 * 1000) / 1000; + if (val <= 0.02) { + r.sensorSo2.text = '좋음'; + r.sensorSo2.color = '#37c9ff'; + } else if (val <= 0.05) { + r.sensorSo2.text = '보통'; + r.sensorSo2.color = '#ffff44'; + } else if (val <= 0.15) { + r.sensorSo2.text = '나쁨'; + r.sensorSo2.color = '#ffa044'; + } else if (val > 0.15) { + r.sensorSo2.text = '매우나쁨'; + r.sensorSo2.color = '#ff5959'; + } else { + r.sensorSo2.text = '-'; + r.sensorSo2.color = '#a1a1a1'; + } + } + // 이산화질소 : 좋음(0~0.03) 보통(0.031~0.06) 나쁨(0.061~0.2) 매우나쁨(0.201~) + if (sensorData.sensorNo2 != undefined && sensorData.sensorNo2 != null) { + const val = r.sensorNo2.value = Math.round(sensorData.sensorNo2 * 1000) / 1000; + if (val <= 0.03) { + r.sensorNo2.text = '좋음'; + r.sensorNo2.color = '#37c9ff'; + } else if (val <= 0.06) { + r.sensorNo2.text = '보통'; + r.sensorNo2.color = '#ffff44'; + } else if (val <= 0.2) { + r.sensorNo2.text = '나쁨'; + r.sensorNo2.color = '#ffa044'; + } else if (val > 0.2) { + r.sensorNo2.text = '매우나쁨'; + r.sensorNo2.color = '#ff5959'; + } else { + r.sensorNo2.text = '-'; + r.sensorNo2.color = '#a1a1a1'; + } + + } + // 오존 : 좋음(0~0.03) 보통(0.031~0.09) 나쁨(0.091~0.15) 매우나쁨(0.151~) + if (sensorData.sensorO3 != undefined && sensorData.sensorO3 != null) { + const val = r.sensorO3.value = Math.round(sensorData.sensorO3 * 1000) / 1000; + if (val <= 0.03) { + r.sensorO3.text = '좋음'; + r.sensorO3.color = '#37c9ff'; + } else if (val <= 0.09) { + r.sensorO3.text = '보통'; + r.sensorO3.color = '#ffff44'; + } else if (val <= 0.15) { + r.sensorO3.text = '나쁨'; + r.sensorO3.color = '#ffa044'; + } else if (val > 0.15) { + r.sensorO3.text = '매우나쁨'; + r.sensorO3.color = '#ff5959'; + } else { + r.sensorO3.text = '-'; + r.sensorO3.color = '#a1a1a1'; + } + } + return r; + } + + return null; +}; + +export default SensorZone; diff --git a/src/components/map/nhn/NMap.js b/src/components/map/nhn/NMap.js new file mode 100644 index 0000000..d5eb224 --- /dev/null +++ b/src/components/map/nhn/NMap.js @@ -0,0 +1,41 @@ +import { useEffect, useState } from 'react'; + +export const NMap = props => { + const naver = window.naver; + + const [mapObject, setMapObject] = useState(null); + + useEffect(() => { + mapInit(); + // console.log(map); + + // console.log(features); + + // setIsMapLoad(true); + }, []); + + const mapInit = () => { + const mapOptions = { + center: new naver.maps.LatLng(36.56793936069445, 127.85101412107547), + zoom: 10, + zoomControl: true, + mapTypeId: naver.maps.MapTypeId.HYBRID, + zoomControlOptions: { + position: naver.maps.Position.TOP_LEFT, + + style: naver.maps.ZoomControlStyle.SMALL + } + }; + + // map = ; + props.setMapObject(new naver.maps.Map('map', mapOptions)); + // naver.maps.Event.addListener(map, 'click', function (e) { + // console.log(e); + // }); + + // naver.maps.Event.addListener(map, 'idle', function (e) { + // console.log(e); + // }); + }; + return
    ; +}; diff --git a/src/components/map/nhn/NMapMarker.js b/src/components/map/nhn/NMapMarker.js new file mode 100644 index 0000000..0f41c6d --- /dev/null +++ b/src/components/map/nhn/NMapMarker.js @@ -0,0 +1,62 @@ +import { useEffect } from 'react'; +import DronIcon from '../../../assets/images//drone-marker-icon.png'; +export const NMapMarker = props => { + const naver = window.naver; + + useEffect(() => { + if (props.selMarker && props.selMarker.setMap) { + props.selMarker.setMap(null); + } + + if (props.data) { + for (let i = 0; i < props.data?.length; i++) { + if (props.data[i].lat > 0 && props.data[i].lon > 0) { + const position = new naver.maps.LatLng( + props.data[i]?.lat, + props.data[i]?.lon + ); + addMarkers(position, props.data[i]?.cntrlId); + + return; + } + } + props.data?.map((item, index) => {}); + } + }, [props.data]); + + useEffect(() => { + // console.log('info>>>:' + props.info.lat); + // console.log(props.selMarker); + + if (props.selMarker && props.selMarker) { + const position = new naver.maps.LatLng(props.info?.lat, props.info?.lon); + props.selMarker?.setPosition(position); + + // moveMarkers(props.selMarker, position); + } + }, [props.info]); + + const addMarkers = (position, id) => { + //이미 지정된 마커 제거 + + var marker = new naver.maps.Marker({ + position: position, + title: id, + id: id, + icon: { + url: DronIcon + } + }); + props.map.setCenter(position); + props.map.setZoom(14); + marker.setMap(props.map); + props.setSelMarker(marker); + }; + + const moveMarkers = (marker, position) => { + // console.log('dddddddddddddddddddd', marker, position); + // marker.setPositon(position); + }; + + return null; +}; diff --git a/src/components/map/nhn/NMapPolyline.js b/src/components/map/nhn/NMapPolyline.js new file mode 100644 index 0000000..676e103 --- /dev/null +++ b/src/components/map/nhn/NMapPolyline.js @@ -0,0 +1,47 @@ +import { useEffect } from 'react'; + +export const NMapPolyline = props => { + const naver = window.naver; + + // console.log(props); + + let polyline; + let polylinePath = []; + + useEffect(() => { + //기존 폴리라인 삭제 처리 + if (props.selPolyline && props.selPolyline.setMap) { + props.selPolyline.setMap(null); + } + + addPolyline(); + }, [props.data]); + + const addPolyline = () => { + if (props.data) { + polyline = new naver.maps.Polyline({ + clickable: false, + strokeColor: '#ff4961', + strokeStyle: 'solid', + strokeOpacity: 5, + strokeWeight: 1.5 + }); + + props.data.map(item => { + if (item.lat > 0 && item.lon > 0) { + const position = new naver.maps.LatLng(item.lat, item.lon); + polylinePath.push(position); + } + // console.log('>>>>>>>>>>>', item); + }); + + polyline.setPath(polylinePath); + + polyline.setMap(props.map); + props.setSelPolyline(polyline); + // props.arrPolyline.push(polyline); + } + }; + + return null; +}; diff --git a/src/components/message/MessageErrorModal.js b/src/components/message/MessageErrorModal.js new file mode 100644 index 0000000..b0e1297 --- /dev/null +++ b/src/components/message/MessageErrorModal.js @@ -0,0 +1,37 @@ +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import * as Actions from '../../modules/comn/message/actions/comnMessageAction'; + +export const MessageErrorModal = props => { + const dispatch = useDispatch(); + + const { isError, errorCode, errorMessage } = useSelector( + state => state.messageState + ); + + // useEffect(() => { + // console.log('isError>>>>>>>>>>>>>', isError); + // }, [isError]); + + return ( +
    + dispatch(Actions.ISNO_ERROR())} + modalClassName='modal-danger' + className='modal-dialog-centered' + > + dispatch(Actions.ISNO_ERROR())}> + 오류 + + {errorMessage} + + + + +
    + ); +}; diff --git a/src/components/message/MessageInfoModal.js b/src/components/message/MessageInfoModal.js new file mode 100644 index 0000000..2683822 --- /dev/null +++ b/src/components/message/MessageInfoModal.js @@ -0,0 +1,47 @@ +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import * as Actions from '../../modules/comn/message/actions/comnMessageAction'; +import { useHistory } from 'react-router-dom'; + +export const MessageInfoModal = props => { + const dispatch = useDispatch(); + const history = useHistory(); + const { isMessage, MessageCode, message, isHistoryBack, isRefresh } = + useSelector(state => state.messageState); + + // useEffect(() => { + // console.log('isError>>>>>>>>>>>>>', isError); + // }, [isError]); + const handlerClose = () => { + dispatch(Actions.ISNO_MESSAGE()); + + if (isHistoryBack) { + history.goBack(); + } + + console.log('IS REFRESH =>>>> ', isRefresh); + if (isRefresh) { + console.log('======= REFRESH ======='); + history.go(0); + } + }; + return ( +
    + + 확인 + {message} + + + + +
    + ); +}; diff --git a/src/components/modal/ConfirmModal.js b/src/components/modal/ConfirmModal.js new file mode 100644 index 0000000..cf67d72 --- /dev/null +++ b/src/components/modal/ConfirmModal.js @@ -0,0 +1,43 @@ +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; + +export const ConfirmModal = props => { + const handlerSubmit = () => { + props.handlerConfirm(); + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }); + }; + return ( +
    + + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }) + } + modalClassName='modal-primary' + className='modal-dialog-centered' + > + + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }) + } + > + {props.modal.title} + + {props.modal.desc} + + + + + + +
    + ); +}; diff --git a/src/components/modal/ErrorModal.js b/src/components/modal/ErrorModal.js new file mode 100644 index 0000000..942d104 --- /dev/null +++ b/src/components/modal/ErrorModal.js @@ -0,0 +1,35 @@ +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; + +export const ErrorModal = props => { + return ( +
    + + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }) + } + modalClassName='modal-danger' + className='modal-dialog-centered' + > + + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }) + } + > + {props.modal.title} + + {props.modal.desc} + + + + +
    + ); +}; diff --git a/src/components/modal/InfoModal.js b/src/components/modal/InfoModal.js new file mode 100644 index 0000000..84b282e --- /dev/null +++ b/src/components/modal/InfoModal.js @@ -0,0 +1,35 @@ +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; + +export const InfoModal = props => { + return ( +
    + + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }) + } + modalClassName='modal-info' + className='modal-dialog-centered' + > + + props.setModal({ ...props.modal, isOpen: !props.modal.isOpen }) + } + > + {props.modal.title} + + {props.modal.desc} + + + + +
    + ); +}; diff --git a/src/components/system/auth/SystemAuthForm.js b/src/components/system/auth/SystemAuthForm.js new file mode 100644 index 0000000..a249067 --- /dev/null +++ b/src/components/system/auth/SystemAuthForm.js @@ -0,0 +1,196 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; +import { Link, useHistory } from 'react-router-dom'; + +export const SystemAuthForm = props => { + const history = useHistory(); + + return ( + + + + +
    +
    +
    +

    그룹관리 상세정보

    +
    +
    + 최종 수정자 : 홍길동 + 최종 수정일자 : 2020-01-01 +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + {/*
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    */} +
    + +
    + + 저장 + + + 목록 + + + 탈퇴 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/system/auth/SystemAuthGrid.js b/src/components/system/auth/SystemAuthGrid.js new file mode 100644 index 0000000..325afdf --- /dev/null +++ b/src/components/system/auth/SystemAuthGrid.js @@ -0,0 +1,61 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const SystemAuthGrid = props => { + return ( +
    + + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + + 권한생성 + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/system/auth/SystemAuthSearch.js b/src/components/system/auth/SystemAuthSearch.js new file mode 100644 index 0000000..d6a7d1e --- /dev/null +++ b/src/components/system/auth/SystemAuthSearch.js @@ -0,0 +1,96 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const SystemAuthSearch = props => { + const [isClick, setIsClick] = useState(1); + const [dateType, setDateType] = useState(1); + + useEffect(() => { + props.setParams({ + ...props.params, + stDate: moment().subtract(dateType, 'day').format('YYYY-MM-DD') + }); + }, [dateType]); + + const handlerClickDate = val => { + setDateType(val); + setIsClick(val); + }; + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    권한명
    +
    +
    + + + + props.handlerInput('search1', e.target.value) + } + placeholder='권한명을 입력하세요' + /> + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/system/code/SystemCodeForm.js b/src/components/system/code/SystemCodeForm.js new file mode 100644 index 0000000..1e68d59 --- /dev/null +++ b/src/components/system/code/SystemCodeForm.js @@ -0,0 +1,114 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; +import { Link, useHistory } from 'react-router-dom'; + +export const SystemCodeForm = props => { + const history = useHistory(); + + return ( + + + + +
    +
    +
    +

    그룹관리 상세정보

    +
    +
    + 최종 수정자 : 홍길동 + 최종 수정일자 : 2020-01-01 +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + + 저장 + + + 목록 + + + 삭제 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/system/code/SystemCodeGrid.js b/src/components/system/code/SystemCodeGrid.js new file mode 100644 index 0000000..fe0a7fd --- /dev/null +++ b/src/components/system/code/SystemCodeGrid.js @@ -0,0 +1,64 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const SystemCodeGrid = props => { + return ( + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + {/* + 코드등록 + */} + + 코드수정 + +
    +
    +
    + +
    + +
    +
    +
    + + ); +}; diff --git a/src/components/system/code/SystemCodeGroupForm.js b/src/components/system/code/SystemCodeGroupForm.js new file mode 100644 index 0000000..3f73f21 --- /dev/null +++ b/src/components/system/code/SystemCodeGroupForm.js @@ -0,0 +1,114 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; +import { Link, useHistory } from 'react-router-dom'; + +export const SystemCodeGroupForm = props => { + const history = useHistory(); + + return ( + + + + +
    +
    +
    +

    그룹관리 상세정보

    +
    +
    + 최종 수정자 : 홍길동 + 최종 수정일자 : 2020-01-01 +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + + 저장 + + + 목록 + + + 삭제 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/system/code/SystemCodeGroupGrid.js b/src/components/system/code/SystemCodeGroupGrid.js new file mode 100644 index 0000000..e968a84 --- /dev/null +++ b/src/components/system/code/SystemCodeGroupGrid.js @@ -0,0 +1,57 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const SystemCodeGroupGrid = props => { + return ( + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    + +
    + + 그룹생성 + +
    +
    +
    + +
    + +
    +
    +
    + + ); +}; diff --git a/src/components/system/code/SystemCodeGroupSearch.js b/src/components/system/code/SystemCodeGroupSearch.js new file mode 100644 index 0000000..5f850a4 --- /dev/null +++ b/src/components/system/code/SystemCodeGroupSearch.js @@ -0,0 +1,118 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + Label, + CustomInput, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const SystemCodeGroupSearch = props => { + const [isClick, setIsClick] = useState(1); + const [dateType, setDateType] = useState(1); + + useEffect(() => { + props.setParams({ + ...props.params, + stDate: moment().subtract(dateType, 'day').format('YYYY-MM-DD') + }); + }, [dateType]); + + const handlerClickDate = val => { + setDateType(val); + setIsClick(val); + }; + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    그룹코드명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/system/code/SystemCodeMultiForm.js b/src/components/system/code/SystemCodeMultiForm.js new file mode 100644 index 0000000..bfecac9 --- /dev/null +++ b/src/components/system/code/SystemCodeMultiForm.js @@ -0,0 +1,145 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Form, + Label +} from 'reactstrap'; +import { Link, useHistory } from 'react-router-dom'; +import Repeater from '@components/repeater'; +import { X, Plus, ArrowLeftCircle } from 'react-feather'; +export const SystemCodeMultiForm = props => { + const history = useHistory(); + const [count, setCount] = useState(1); + + const increaseCount = () => { + setCount(count + 1); + }; + + const deleteForm = e => { + e.preventDefault(); + e.target.closest('form').remove(); + }; + return ( + + + + +
    +
    +
    +

    코드 관리 상세정보

    +
    +
    + 최종 수정자 : 홍길동 + 최종 수정일자 : 2020-01-01 +
    +
    +
    +
    +
    +

    + *필수 입력 항목 +

    +
    +
    + + + {i => ( +
    + + + + + + + + + + + + + + + + + + + + + + + 삭제 + + + +
    + +
    +
    + )} +
    +
    +
    +
    +
    +
    + + + 추가 + + + 저장 + + + 목록 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/system/menu/SystemMenuGrid.js b/src/components/system/menu/SystemMenuGrid.js new file mode 100644 index 0000000..fd8916a --- /dev/null +++ b/src/components/system/menu/SystemMenuGrid.js @@ -0,0 +1,64 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const SystemMenuGrid = props => { + return ( + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + {/* + 코드등록 + */} + + 코드수정 + +
    +
    +
    + +
    + +
    +
    +
    + + ); +}; diff --git a/src/components/system/menu/SystemMenuSearch.js b/src/components/system/menu/SystemMenuSearch.js new file mode 100644 index 0000000..4b6caf8 --- /dev/null +++ b/src/components/system/menu/SystemMenuSearch.js @@ -0,0 +1,118 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + Label, + CustomInput, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const SystemMenuSearch = props => { + const [isClick, setIsClick] = useState(1); + const [dateType, setDateType] = useState(1); + + useEffect(() => { + props.setParams({ + ...props.params, + stDate: moment().subtract(dateType, 'day').format('YYYY-MM-DD') + }); + }, [dateType]); + + const handlerClickDate = val => { + setDateType(val); + setIsClick(val); + }; + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    그룹코드명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/system/user/SystemUserForm.js b/src/components/system/user/SystemUserForm.js new file mode 100644 index 0000000..cc4594b --- /dev/null +++ b/src/components/system/user/SystemUserForm.js @@ -0,0 +1,196 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; +import { Link, useHistory } from 'react-router-dom'; + +export const SystemUserForm = props => { + const history = useHistory(); + + return ( + + + + +
    +
    +
    +

    그룹관리 상세정보

    +
    +
    + 최종 수정자 : 홍길동 + 최종 수정일자 : 2020-01-01 +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + {/*
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    */} +
    + +
    + + 저장 + + + 목록 + + + 탈퇴 + +
    +
    +
    +
    + +
    + ); +}; diff --git a/src/components/system/user/SystemUserGrid.js b/src/components/system/user/SystemUserGrid.js new file mode 100644 index 0000000..37847cc --- /dev/null +++ b/src/components/system/user/SystemUserGrid.js @@ -0,0 +1,64 @@ +import { GridDatabase } from '../../crud/grid/GridDatatable'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup +} from 'reactstrap'; +import { ExcelExportButton } from '../../crud/excel/ExcelExportButton'; + +export const SystemUserGrid = props => { + return ( + +
    +
    +

    {props.title} 목록

    + 검색결과 총 {props.count}건 +
    +
    + {/* + 코드등록 + */} + + 코드수정 + +
    +
    +
    + +
    + +
    +
    +
    + + ); +}; diff --git a/src/components/system/user/SystemUserSearch.js b/src/components/system/user/SystemUserSearch.js new file mode 100644 index 0000000..d6a7bf4 --- /dev/null +++ b/src/components/system/user/SystemUserSearch.js @@ -0,0 +1,118 @@ +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + Label, + CustomInput, + FormGroup +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import { Calendar } from 'react-feather'; +import { useEffect, useState } from 'react'; +import moment from 'moment'; + +export const SystemUserSearch = props => { + const [isClick, setIsClick] = useState(1); + const [dateType, setDateType] = useState(1); + + useEffect(() => { + props.setParams({ + ...props.params, + stDate: moment().subtract(dateType, 'day').format('YYYY-MM-DD') + }); + }, [dateType]); + + const handlerClickDate = val => { + setDateType(val); + setIsClick(val); + }; + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + props.handlerSearch()} + > + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    그룹코드명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + ); +}; diff --git a/src/components/websocket/WebsocketClient.js b/src/components/websocket/WebsocketClient.js new file mode 100644 index 0000000..8e99bc3 --- /dev/null +++ b/src/components/websocket/WebsocketClient.js @@ -0,0 +1,66 @@ +import React, { useEffect, useState } from 'react'; +import { VscLoading } from 'react-icons/vsc'; +import { useDispatch } from 'react-redux'; +import { WS_HOST } from '../../configs/constants'; +import * as Actions from '../../modules/control/gp/actions/controlGpAction'; + +const WebsocketClient = () => { + const dispatch = useDispatch(); + const reConnectionTime = 5000; //5초 + + const [isConnection, setIsConnection] = useState(false); + + useEffect(() => { + connect(); + }, []); + + const connect = () => { + // let websocket = new WebSocket('ws://localhost:8081/ws'); + // console.log('WS_HOST>>>>>>>>>>', WS_HOST); + let websocket = new WebSocket(WS_HOST); + // let websocket = new WebSocket("ws://localhost:8002/test2"); + + websocket.onopen = () => { + setIsConnection(true); + console.log('[Websocket Open] Connection Open'); + }; + + websocket.onmessage = e => { + const data = e.data; + // console.log(data); + const controlGpList = JSON.parse(data); + + // const controlGpList : ControlGpData[] = JSON.parse(messageObject.message); + // console.log(controlGpList); + + dispatch(Actions.controlGpAction.request(controlGpList)); + }; + + websocket.onclose = event => { + setIsConnection(false); + setTimeout(function () { + connect(); + }, reConnectionTime); + + if (event.wasClean) { + console.log('[Websocket Close] Connection Close'); + } else { + console.log('[Websocket Close] Connection Error'); + } + }; + }; + { + /* socket_off = 클래스명 변경시 빨간색! 접속이 원할하지않을때 */ + } + return ( + <> +
  • + + + +
  • + + ); +}; + +export default WebsocketClient; diff --git a/src/configs/constants.js b/src/configs/constants.js new file mode 100644 index 0000000..14ff7e6 --- /dev/null +++ b/src/configs/constants.js @@ -0,0 +1,95 @@ +// 호스트 +export const HOST = process.env.REACT_APP_HOST; +export const WS_HOST = process.env.REACT_APP_WS_HOST; + +export const IMG_PATH = process.env.REACT_APP_IMAGE_HOST; + +// 통신 코드 +export const HTTP_STATUS_CODE = { + OK: '00000' +}; + +export const FORM_PROC_TYPE = { + SELECT: 'R', + CREATE: 'C', + UPDATE: 'U', + DELETE: 'D', + NONE: '' +}; +export const ROLE = { + NONE: 'ROLE_NONE', + USER: 'ROLE_USER', + ADMIN: 'ROLE_ADMIN' +}; + +export const ACCOUNT = { + cstrmDivCd: 'MEMBER', + cstrmStatusCd: 'A', + authId: 'ROLE_USER', + siteCode: 'DRON', + joinCrtfyCd: 'HP_CRTFD' +}; + +export const DUPLATE_MESSAGE = { + message: '이미 존재합니다.', + code: 'DT001' +}; + +export const ERROR_MESSAGE = { + message: '처리중 오류가 발생 하였습니다', + code: '-1' +}; + +export const SAVE_MESSAGE = { + message: '저장을 완료 하였습니다.', + code: '1' +}; + +export const DELETE_MESSAGE = { + message: '삭제를 완료 하였습니다.', + code: '1' +}; + +// 코드 정의 + +export const WGHT_TYPE_CD = [ + { + code: '-250G', + codeNm: '최대이륙중량 250g이하' + }, + { + code: '250G+2KG-', + codeNm: '250g 초과 ~ 2kg이하' + }, + { + code: '2KG+7KG-', + codeNm: '2kg초과 ~ 7kg이하' + }, + { + code: '7KG+25KG-', + codeNm: '7kg초과 ~ 25kg이하' + }, + { + code: '25KG+', + codeNm: '25kg 초과' + } +]; + +export const ARCTFT_TYPE_CD = [ + { + code: '01', + codeNm: '무인 비행기' + }, + { + code: '02', + codeNm: '무인 헬리콥터' + }, + { + code: '03', + codeNm: '무인 멀티콥터' + }, + { + code: '04', + codeNm: '무인 비행선' + } +]; diff --git a/src/configs/themeConfig.js b/src/configs/themeConfig.js new file mode 100644 index 0000000..93b819d --- /dev/null +++ b/src/configs/themeConfig.js @@ -0,0 +1,33 @@ +// You can customize the template with the help of this file + +//Template config options +const themeConfig = { + app: { + appName: 'DRONSYS', + // appLogoImage: require('@src/assets/images/logo/logo.svg').default, + appLogoImage: require('../assets/images/pal_logo.png').default + }, + layout: { + isRTL: false, + skin: 'dark', // light, dark, bordered, semi-dark + routerTransition: 'fadeIn', // fadeIn, fadeInLeft, zoomIn, none or check this for more transition https://animate.style/ + type: 'vertical', // vertical, horizontal + contentWidth: 'full', // full, boxed + menu: { + isHidden: false, + isCollapsed: true + }, + navbar: { + // ? For horizontal menu, navbar type will work for navMenu type + type: 'sticky', // static , sticky , floating, hidden + backgroundColor: 'white' // BS color options [primary, success, etc] + }, + footer: { + type: 'hidden' // static, sticky, hidden + }, + customizer: false, + scrollTop: true // Enable scroll to top button + } +}; + +export default themeConfig; diff --git a/src/containers/analysis/history/AnalysisHistoryContainer.js b/src/containers/analysis/history/AnalysisHistoryContainer.js new file mode 100644 index 0000000..5bbce4f --- /dev/null +++ b/src/containers/analysis/history/AnalysisHistoryContainer.js @@ -0,0 +1,194 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Link } from 'react-router-dom'; +import { AnalysisHistoryGrid } from '../../../components/analysis/history/AnalysisHistoryGrid'; +import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch'; +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; + +export const AnalysisHistoryContainer = props => { + const { data, count, searchParams } = useSelector( + state => state.analysisHistoryState + ); + + const dispatch = useDispatch(); + + const titleName = '비행이력 현황'; + + const [params, setParams] = useState({ + stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), + endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), + search1: '' + }); + + const excelHeaders = [ + { label: '일자', key: 'cntrlStDt' }, + { label: '식별번호', key: 'idntfNum' }, + { label: '시작위치', key: 'stArea' }, + { label: '시작시간', key: 'cntrlStDt' }, + { label: '종료시간', key: 'cntrlEndDt' } + ]; + + const columns = [ + { + name: '일자', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return
    {moment(row?.cntrlStDt).format('YYYY년 MM월DD일')}
    ; + } + }, + + { + name: '식별번호', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {row.idntfNum}
    ; + } + }, + { + name: '시작위치', + selector: 'stArea', + minWidth: '102px', + // sortable: true, + cell: row => { + return
    {row.stArea}
    ; + } + }, + { + name: '시작시간', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {moment(row?.cntrlStDt).format('DD일 HH:mm:ss')}
    ; + } + }, + // { + // name: '종료위치', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + // cell: row => { + // return
    {row.endArea}
    ; + // } + // }, + { + name: '종료시간', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {moment(row?.cntrlEndDt).format('DD일 HH:mm:ss')}
    ; + } + }, + // , + // { + // name: '거리', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + // cell: row => { + // return ( + //
    + // {' '} + // {row.ttlDstnc} + // {row.ttlDstncType} + //
    + // ); + // } + // }, + + // { + // name: '시간', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + // cell: row => { + // return ( + //
    + // {row.ttlTime} {row.ttlTimeType} + //
    + // ); + // } + // }, + { + name: '이력보기', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return ( + 이력보기 + ); + } + } + ]; + + useEffect(() => { + if (data) return; + + if (searchParams) { + setParams({ + stDate: searchParams.stDate, + endDate: searchParams.endDate, + search1: searchParams.search1 + }); + } + + handlerSearch(); + }, []); + + const onKeyPress = e => { + if (e.key == 'Enter') { + handlerSearch(); + } + }; + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + + const handlerSearch = () => { + dispatch(Actions.list.request({ searchParams: params })); + }; + + const handlerInput = (type, val) => { + if (type === 'search1') { + setParams({ ...params, search1: val }); + } + if (type === 'searchDate') { + if (val.length == 2) { + setParams({ + ...params, + stDate: moment(val[0]).format('YYYY-MM-DD'), + endDate: moment(val[1]).format('YYYY-MM-DD') + }); + } + } + }; + + return ( + + + + + ); +}; diff --git a/src/containers/analysis/history/AnalysisHistoryDetailContainer.js b/src/containers/analysis/history/AnalysisHistoryDetailContainer.js new file mode 100644 index 0000000..24ca1f8 --- /dev/null +++ b/src/containers/analysis/history/AnalysisHistoryDetailContainer.js @@ -0,0 +1,157 @@ +import moment from 'moment'; +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useParams } from 'react-router-dom'; +import { AnalysisHistoryDetailGrid } from '../../../components/analysis/history/AnalysisHistoryDetailGrid'; +import { AnalysisHistoryDetailStatic } from '../../../components/analysis/history/AnalysisHistoryDetailStatic'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; + +export const AnalysisHistoryDetailContainer = () => { + const { log, detail } = useSelector(state => state.analysisHistoryState); + + const dispatch = useDispatch(); + const { id } = useParams(); + + const titleName = '비행이력'; + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + dispatch(Actions.detail.request(id)); + }; + + const handlerInput = (type, val) => { + if (type === 'search1') { + setParams({ ...params, search1: val }); + } + if (type === 'searchDate') { + if (val.length == 2) { + setParams({ + ...params, + stDate: moment(val[0]).format('YYYY-MM-DD'), + endDate: moment(val[1]).format('YYYY-MM-DD') + }); + } + } + }; + + const excelHeaders = [ + { label: '시간', key: 'srvrRcvDt' }, + { label: '위도', key: 'lat' }, + { label: '경도', key: 'lon' }, + { label: '헤딩 방위각', key: 'heading' }, + { label: '고도', key: 'elev' }, + { label: '속도', key: 'speed' }, + { label: '배터리잔량', key: 'bttrLvl' }, + { label: '상태', key: 'statusCd' } + ]; + + const columns = [ + { + name: '시간', + + selector: 'cntrlStDate', + cell: row => { + return
    {moment(row?.srvrRcvDt).format('DD일 HH:mm:ss')}
    ; + } + }, + + { + name: '위도', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return
    {row.lat}
    ; + } + }, + { + name: '경도', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return
    {row.lon}
    ; + } + }, + { + name: '헤딩 방위각', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return
    {row.heading}
    ; + } + }, + { + name: '고도', + // selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return ( +
    + {row.elev}  + {row.elevType} +
    + ); + } + }, + { + name: '속도', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return ( +
    + {row.speed}  + {row.speedType} +
    + ); + } + }, + { + name: '배터리잔량', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return
    {row.bttrLvl}
    ; + } + }, + + { + name: '상태', + // selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return
    {row.statusCd}
    ; + } + } + ]; + + return ( + + {/* */} + + + + ); +}; diff --git a/src/containers/analysis/simulator/AnalysisSimulationContainer.js b/src/containers/analysis/simulator/AnalysisSimulationContainer.js new file mode 100644 index 0000000..2add66c --- /dev/null +++ b/src/containers/analysis/simulator/AnalysisSimulationContainer.js @@ -0,0 +1,228 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { AnalysisSimulationDetail } from '../../../components/analysis/simulation/AnalysisSimulationDetail'; +import { AnalysisSimulationMenu } from '../../../components/analysis/simulation/AnalysisSimulationMenu'; +import { AnalysisSimulationReport } from '../../../components/analysis/simulation/AnalysisSimulationReport'; +import { NMap } from '../../../components/map/nhn/NMap'; +import { NMapMarker } from '../../../components/map/nhn/NMapMarker'; +import { NMapPolyline } from '../../../components/map/nhn/NMapPolyline'; +import * as Actions from '../../../modules/analysis/simulation/actions/analysisSimulatorAction'; + +export const AnalysisSimulationContainer = props => { + const { list, count, detail, searchParams, log, stcsList, stcsCount } = + useSelector(state => state.analysisSimulatorState); + + const [oepnReportList, setOpenReportList] = useState(false); + + const [mapObject, setMapObject] = useState(null); + + const [openDetail, setOpenDetail] = useState(false); + + const [selMarker, setSelMarker] = useState(null); + + const [selPolyline, setSelPolyline] = useState(null); + + const [isPlay, setIsPlay] = useState(false); + + const [info, setInfo] = useState(null); + + const [timeCd, setTimeCd] = useState(null); + + const [sliderCount, setSliderCount] = useState(0); + + let playCount = 0; + + const [sliderVal, setSliderVal] = useState({ + maxVal: 0, + minVal: 0 + }); + + const dispatch = useDispatch(); + + const [filterId, setFilterId] = useState(''); + + const [params, setParams] = useState({ + stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), + endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), + search1: '' + }); + + // 시뮬레이션 타이머 + useEffect(() => { + if (isPlay) { + const timer = setInterval(() => { + // console.log('count>>>>', count); + // console.log(log[count]); + + setInfo({ ...log[playCount], playCount: playCount }); + if (log[playCount]?.srvrRcvDt) { + setTimeCd(moment(log[playCount]?.srvrRcvDt).format('HH:mm')); + } + + playCount++; + + if (playCount == log.length) { + playCount = 0; + setIsPlay(false); + clearInterval(timer); + } + }, 1000); + + return () => clearInterval(timer); + } + }, [isPlay]); + + useEffect(() => { + if (oepnReportList) { + if (searchParams) { + setParams({ + stDate: searchParams.stDate, + endDate: searchParams.endDate, + search1: searchParams.search1 + }); + } + + handlerSearch(); + } + }, [oepnReportList]); + + useEffect(() => { + if (sliderCount && sliderCount > 0) { + playCount = sliderCount; + setInfo({ ...log[playCount], playCount: playCount }); + if (log[playCount]?.srvrRcvDt) { + setTimeCd(moment(log[playCount]?.srvrRcvDt).format('HH:mm')); + } + + console.log('sliderCount>>>>', sliderCount); + } + }, [sliderCount]); + + useEffect(() => { + // console.log(log); + // let arrDate = log?.map(date => { + // const dateval = date.srvrRcvDt; + // if (dateval) { + // return Number(moment(dateval).format('DDHHmmss')); + // } else { + // return 0; + // } + // }); + // console.log('arrDate>', arrDate); + // setSliderVal({ + // minVal: Math.min.apply(null, arrDate), + // maxVal: Math.max.apply(null, arrDate) + // }); + // console.log(Math.max.apply(null, moment(formatar rDate))); + // let maxDate = log.map(date => { + // return Math.max(date.srvrRcvDt); + // }); + // let maxDate; + // console.log('minDate :::', minDate, 'maxDate :: ', maxDate); + }, [log]); + + const handlerSearch = () => { + dispatch(Actions.list.request({ searchParams: params })); + }; + + const handlerDetailSearch = id => { + dispatch(Actions.detail.request(id)); + }; + + const handlerLogSearch = id => { + dispatch(Actions.log.request(id)); + }; + + const handlerStcsSearch = id => { + dispatch(Actions.stcs.request(id)); + }; + + const handlerInput = (type, val) => { + if (type === 'search1') { + setParams({ ...params, search1: val }); + } + if (type === 'searchDate') { + if (val.length == 2) { + setParams({ + ...params, + stDate: moment(val[0]).format('YYYY-MM-DD'), + endDate: moment(val[1]).format('YYYY-MM-DD') + }); + } + } + }; + + const handlerDetail = id => { + setOpenReportList(false); + handlerDetailSearch(id); + handlerLogSearch(id); + handlerStcsSearch(id); + setOpenDetail(true); + }; + + const handlerDetailClose = () => { + setOpenDetail(false); + }; + + return ( + // +
    +
    + +
    + + + + {oepnReportList ? ( + + ) : ( +
    + )} + {openDetail ? ( + <> + + + + + ) : ( +
    + )} +
    + ); +}; diff --git a/src/containers/basis/dron/BasisDronContainer.js b/src/containers/basis/dron/BasisDronContainer.js new file mode 100644 index 0000000..14cc747 --- /dev/null +++ b/src/containers/basis/dron/BasisDronContainer.js @@ -0,0 +1,259 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { shallowEqual, useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; +import { Button, Col, Row } from 'reactstrap'; +import { BasisDronGrid } from '../../../components/basis/dron/BasisDronGrid'; +import { BasisGroupDronGrid } from '../../../components/basis/dron/BasisGroupDronGrid'; +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { InfoModal } from '../../../components/modal/InfoModal'; +import * as Actions from '../../../modules/basis/dron/actions/basisDronAction'; +import * as GroupActions from '../../../modules/basis/group/actions/basisGroupAction'; +import { GET_ARCTFT_TYPE_CD } from '../../../utility/CondeUtil'; + +export const BasisDronContainer = props => { + const dispatch = useDispatch(); + const history = useHistory(); + const { joinList, joinListCount } = useSelector(state => state.groupState); + const { selectData } = useSelector(state => state.dronState); + const { list, count } = useSelector(state => state.dronState); + const { user } = useSelector(state => state.authState, shallowEqual); + const [params, setParams] = useState({}); + const titleName = '기체 관리'; + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const columns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + // return selectData; + } + }, + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + + { + name: '', + selector: 'cntrlStDate', + // width: '100px', + sortable: true, + cell: row => { + return selectData?.groupId === row?.groupId ? ( + handlerCancel()} + > + 선택취소 + + ) : ( + + handlerDetail(row?.groupId, row?.groupNm, row?.groupAuthCd) + } + > + 상세보기 + + ); + } + } + ]; + + const dronColumns = [ + { + name: '모델명', + selector: 'arcrftModelNm', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.arcrftModelNm; + } + }, + { + name: '종류', + selector: 'arcrftTypeCd', + minWidth: '102px', + sortable: true, + cell: row => { + return GET_ARCTFT_TYPE_CD(row?.arcrftTypeCd); + } + }, + { + name: '제작사', + selector: 'prdctCmpnNm', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.prdctCmpnNm; + } + }, + + { + name: '운영자 명', + selector: 'ownerNm', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.ownerNm; + } + }, + { + name: '수정일자', + selector: 'updateDt', + minWidth: '102px', + sortable: true, + cell: row => { + return moment(row?.updateDt).format('MM-DD HH:mm'); + } + }, + { + name: '상세보기', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + // console.log(row); + return ( + handlerDetailpage(row.arcrftSno)} + > + 상세보기 + + ); + } + } + ]; + + useEffect(() => { + if (selectData) { + handlerDronSearch(); + } + }, []); + + useEffect(() => { + if (user?.cstmrSno) { + setParams({ + ...params, + cstmrSno: user?.cstmrSno + }); + + dispatch( + GroupActions.JOIN_LIST.request({ + cstmrSno: user?.cstmrSno + }) + ); + } + }, [user]); + + const handlerSearch = () => { + GroupActions.JOIN_LIST.request({ + searchParams: { cstmrSno: user?.cstmrSno } + }); + }; + + const handlerDronSearch = () => { + dispatch(Actions.LIST.request(selectData)); + }; + + const handlerDetail = (groupId, groupNm, groupAuthCd) => { + if (groupAuthCd === 'CREATER' || groupAuthCd === 'ADMIN') { + dispatch(Actions.SELECT({ groupId: groupId, groupNm: groupNm })); + + setParams({ + ...params, + groupId: groupId, + groupNm: groupNm + }); + dispatch(Actions.LIST.request({ groupId: groupId })); + } else { + setModal({ + isOpen: true, + title: '권한 확인', + desc: '기체정보 확인을 위해서는 운영자 권한이 필요합니다. 운영자에게 권한을 부여 받고 다시 시도해주세요.' + }); + } + }; + + const handlerDetailpage = arcrftSno => { + dispatch(Actions.RESET_IDNTF()); // 초기화 진행 + history.push(`/basis/dron/detail/${arcrftSno}`); + }; + + const handlerGroupCreate = () => { + dispatch(Actions.RESET_IDNTF()); // 초기화 진행 + history.push(`/basis/dron/create`); + }; + + const handlerCancel = () => { + dispatch(Actions.SELECT({ groupId: '', groupNm: '' })); + + setParams({ + ...params, + groupId: '', + groupNm: '' + }); + }; + + return ( + + {/* */} +
    + + + + + + {!selectData ? ( +
    + 나의 그룹 목록에서 상세보기를 클릭하세요. +
    + ) : ( + + )} + +
    +
    + +
    + ); +}; diff --git a/src/containers/basis/dron/BasisDronDetailContainer.js b/src/containers/basis/dron/BasisDronDetailContainer.js new file mode 100644 index 0000000..5da5703 --- /dev/null +++ b/src/containers/basis/dron/BasisDronDetailContainer.js @@ -0,0 +1,189 @@ +import { yupResolver } from '@hookform/resolvers/yup'; +import { useEffect, useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; +import { Button, Col, Row } from 'reactstrap'; +import * as yup from 'yup'; +import { BasisDronForm } from '../../../components/basis/dron/BasisDronForm'; +import { BasisDronImage } from '../../../components/basis/dron/BasisDronImage'; +import { IMG_PATH } from '../../../configs/constants'; +import * as Actions from '../../../modules/basis/dron/actions/basisDronAction'; +import { dronAPI } from '../../../modules/basis/dron/apis/basisDronApi'; + +export const BasisDronDetailContainer = props => { + const { detail, selectData } = useSelector(state => state.dronState); + const history = useHistory(); + const { user } = useSelector(state => state.authState); + const [img, setImg] = useState(null); + const [imageUrl, setImageUrl] = useState(''); + const dispatch = useDispatch(); + const titleName = ' 기체 관리'; + const [pageType, setPageType] = useState('create'); + const validationSchema = yup.object().shape({ + arcrftModelNm: yup.string().trim().required('모델명 을 입력해 주세요.'), + arcrftTypeCd: yup.string().trim().required('종류 를 선택해 주세요.'), + cameraYn: yup.string().trim().required('카메라 탑재여부 를 선택해 주세요.'), + insrncYn: yup.string().trim().required('보험가입 여부를 선택해 주세요.'), + prdctCmpnNm: yup.string().trim().required('제작사 를 입력해 주세요.'), + prdctNum: yup.string().trim().required('제작번호 를 입력해 주세요.'), + wghtTypeCd: yup.string().trim().required('중량구분 을 선택해 주세요.'), + ownerNm: yup.string().trim().required('운영자명 을 입력해 주세요.'), + hpno: yup.string().trim().required('운영자 연락처 를 입력해 주세요.') + }); + const { register, getValues, setValue, errors, handleSubmit } = useForm({ + defaultValues: { + groupId: '', + groupNm: '', + arcrftSno: '', + arcrftModelNm: '', + arcrftTypeCd: '01', + cameraYn: 'N', + insrncYn: 'N', + prdctCmpnNm: '', + prdctNum: '', + imageUrl: '', + wghtTypeCd: '', + ownerSno: '', + createDt: '', + createUserId: '', + updateUserId: '', + updateDt: '', + ownerNm: '', + hpno: '' + }, + resolver: yupResolver(validationSchema) + }); + + useEffect(() => { + if (props.id) { + handlerSearch(); + setPageType('update'); + } + // console.log(selectData); + }, []); + + useEffect(() => { + if (!selectData && !detail) { + history.goBack(); + } + if (selectData?.groupId) { + console.log(selectData); + setValue('groupId', selectData?.groupId); + setValue('groupNm', selectData?.groupNm); + } + if (detail?.arcrftSno) { + setValue('arcrftModelNm', detail?.arcrftModelNm); + setValue('arcrftTypeCd', detail?.arcrftTypeCd); + setValue('cameraYn', detail?.cameraYn); + setValue('insrncYn', detail?.insrncYn); + setValue('prdctCmpnNm', detail?.prdctCmpnNm); + setValue('prdctNum', detail?.prdctNum); + setValue('imageUrl', detail?.imageUrl); + setValue('wghtTypeCd', detail?.wghtTypeCd); + setValue('ownerSno', detail?.ownerSno); + setValue('ownerNm', detail?.ownerNm); + setValue('hpno', detail?.hpno); + setValue('updateUserId', detail?.updateUserId); + setValue('updateDt', detail?.updateDt); + + if (detail?.imageUrl) { + setImg(IMG_PATH + detail?.imageUrl); + setImageUrl(detail?.imageUrl); + } + console.log(detail); + } + }, [selectData, detail]); + + const handlerImageChange = e => { + console.log(e.target.files); + const reader = new FileReader(), + files = e.target.files; + saveFileAPI(files[0]); + }; + + const handlerImageDelete = () => { + setImageUrl(''); + setImg(''); + }; + + const saveFileAPI = async file => { + const fileName = await dronAPI.fileupload(file); + setImageUrl(fileName); + setImg(IMG_PATH + fileName); + }; + + const handlerSearch = () => { + dispatch(Actions.DETAIL.request(props.id)); + }; + + const handlerCreate = async data => { + const saveData = { + ...data, + imageUrl: imageUrl, + createUserId: user?.userId, + updateUserId: user?.userId + }; + console.log('createData >>> ', saveData); + dispatch(Actions.CREATE.request(saveData)); + }; + + const handlerUpdate = async data => { + console.log('update >>> ', data); + const saveData = { + ...data, + imageUrl: imageUrl, + arcrftSno: detail.arcrftSno, + ownerSno: detail.ownerSno, + updateUserId: user?.userId + }; + + dispatch(Actions.UPDATE.request(saveData)); + }; + + const handlerDelete = async data => { + dispatch(Actions.DELETE.request(detail.arcrftSno)); + }; + + return ( + + + + + + + + +
    + + 저장 + + + 삭제 + +
    + +
    + ); +}; diff --git a/src/containers/basis/dron/BasisDronTabContainer.js b/src/containers/basis/dron/BasisDronTabContainer.js new file mode 100644 index 0000000..b52531f --- /dev/null +++ b/src/containers/basis/dron/BasisDronTabContainer.js @@ -0,0 +1,14 @@ +import { useParams } from 'react-router-dom'; +import { BasisDronTab } from '../../../components/basis/dron/BasisDronTab'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; + +export const BasisDronTabContainer = () => { + const titleName = '기체정보'; + const { id } = useParams(); + + return ( + + + + ); +}; diff --git a/src/containers/basis/dron/BasisIdntfContainer.js b/src/containers/basis/dron/BasisIdntfContainer.js new file mode 100644 index 0000000..083a3e9 --- /dev/null +++ b/src/containers/basis/dron/BasisIdntfContainer.js @@ -0,0 +1,115 @@ +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Card, CardBody, Col, Row } from 'reactstrap'; +import { BasisIdntfForm } from '../../../components/basis/dron/BasisIdntform'; +import * as Actions from '../../../modules/basis/dron/actions/basisDronAction'; + +export const BasisIdntfContainer = props => { + const { listIdntf, idntfCount, detail, isRefreshIdntf } = useSelector( + state => state.dronState + ); + + const dispatch = useDispatch(); + const [idntfData, setIdntfData] = useState({ + id: '', + idntfNum: '', + idntfTypeCd: 'DRON', + isSave: false + }); + + const [idntDataList, setIdntfDataList] = useState([]); + + useEffect(() => { + console.log('props>', props.id); + + if (props.id) { + handlerSearch(); + } + }, []); + + useEffect(() => { + let newArr = []; + + listIdntf?.map(item => { + newArr.push({ ...item }); + }); + setIdntfDataList(listIdntf); + }, [listIdntf]); + + useEffect(() => { + console.log('isRefreshIdntf>>>>', isRefreshIdntf); + if (isRefreshIdntf) { + console.log(isRefreshIdntf); + handlerSearch(); + } + }, [isRefreshIdntf]); + + const handlerSearch = () => { + dispatch(Actions.IDNTF_LIST.request(props.id)); + }; + + const handlerCreate = async data => { + console.log('idntDataList>>>', idntDataList); + + let saveArr = idntDataList.filter(item => item.isSave === false); + dispatch( + Actions.IDNTF_CREATE.request({ + arcrftSno: detail?.arcrftSno, + data: saveArr + }) + ); + }; + + const handlerDelete = async data => { + dispatch(Actions.IDNTF_DELETE.request(data.arcrftSno)); + }; + + const addData = () => { + console.log('addData'); + + setIdntfDataList([...idntDataList, { ...idntfData, id: Math.random() }]); + }; + + const deletaData = (isSave, id) => { + console.log(isSave, id); + + if (!isSave) { + setIdntfDataList(idntDataList.filter(item => item.id !== id)); + } else { + dispatch(Actions.IDNTF_DELETE.request(id)); + } + }; + + const handlerInput = (event, index) => { + const { name, value } = event.target; + + let newArr = [...idntDataList]; // copying the old datas array + newArr[index] = { ...newArr[index], [name]: value }; + + setIdntfDataList(newArr); + }; + + return !detail ? ( + + + + +
    + 기체정보 등록후 식별장치 등록이 가능 합니다. +
    +
    +
    + +
    + ) : ( + + ); +}; diff --git a/src/containers/basis/group/BasisGroupApprovalContainer.js b/src/containers/basis/group/BasisGroupApprovalContainer.js new file mode 100644 index 0000000..c5bc57f --- /dev/null +++ b/src/containers/basis/group/BasisGroupApprovalContainer.js @@ -0,0 +1,228 @@ +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; +import { Button } from 'reactstrap'; +import { BasisGroupApprovalGrid } from '../../../components/basis/group/BasisGroupApprovalGrid'; +import { BasisGroupApprovalSearch } from '../../../components/basis/group/BasisGroupApprovalSearch'; +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; + +export const BasisGroupApprovalContainer = props => { + const { aprvList, aprvCount } = useSelector(state => state.groupState); + + const { user } = useSelector(state => state.authState); + + const dispatch = useDispatch(); + const history = useHistory(); + + const titleName = '승인관리'; + + const [params, setParams] = useState({ + cstmrSno: user?.cstmrSno + }); + + const [saveData, setSaveData] = useState({ + cstmrGroupSno: '', + aprvlYn: 'N', //가입은 USER 로만 + aprvUserId: '' + }); + + //모달 관련 설정(승인) + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const [modal2, setModal2] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const columns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '신청자 명', + selector: 'memberName', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.memberName; + } + }, + { + name: '신청자 ID', + selector: 'userId', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.userId; + } + }, + + { + name: '승인 여부', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {row.aprvlYn === 'Y' ? '승인' : '미승인'}
    ; + } + }, + { + name: '가입 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + + { + name: '상세보기', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlYn === 'N' ? ( + handlerAprvConfirm(row?.cstmrGroupSno)} + > + 승인처리 + + ) : ( + handlerCancelConfirm(row?.cstmrGroupSno)} + > + 승인취소 + + ); + } + } + ]; + + useEffect(() => { + if (user?.cstmrSno) { + setParams({ + ...params, + cstmrSno: user?.cstmrSno + }); + + dispatch( + Actions.APPROVAL_LIST.request({ + searchParams: { cstmrSno: user?.cstmrSno } + }) + ); + } + }, [user]); + + const onKeyPress = e => { + if (e.key == 'Enter') { + handlerSearch(); + } + }; + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + + const handlerSearch = () => { + dispatch(Actions.APPROVAL_LIST.request({ searchParams: params })); + }; + + const handlerAprvConfirm = cstmrGroupSno => { + setModal({ + isOpen: true, + title: '승인 확인', + desc: '해당 사용자를 승인 처리 하시겠습니까?' + }); + + setSaveData({ + cstmrGroupSno: cstmrGroupSno, + aprvlYn: 'Y', + aprvUserId: user?.userId + }); + }; + + const handlerAprvSave = () => { + dispatch(Actions.APPROVAL_UPDATE.request(saveData)); + }; + + const handlerCancelConfirm = cstmrGroupSno => { + setModal({ + isOpen: true, + title: '승인 취소', + desc: '해당 사용자를 승인취소 처리 하시겠습니까?' + }); + + setSaveData({ + cstmrGroupSno: cstmrGroupSno, + aprvlYn: 'N', + aprvUserId: user?.userId + }); + }; + + const handlerInput = e => { + const { name, value } = e.target; + setParams({ + ...params, + [name]: value + }); + }; + + return ( + + + + + + + + + ); +}; diff --git a/src/containers/basis/group/BasisGroupContainer.js b/src/containers/basis/group/BasisGroupContainer.js new file mode 100644 index 0000000..e50e992 --- /dev/null +++ b/src/containers/basis/group/BasisGroupContainer.js @@ -0,0 +1,212 @@ +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Link, useHistory } from 'react-router-dom'; +import { Button } from 'reactstrap'; +import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid'; +import { BasisGroupJoinGrid } from '../../../components/basis/group/BasisGroupJoinGrid'; +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; + +export const BasisGroupContainer = props => { + const { myList, myListCount, joinList, joinListCount } = useSelector( + state => state.groupState + ); + + const { user } = useSelector(state => state.authState); + + const dispatch = useDispatch(); + const history = useHistory(); + + const [saveParams, setSaveParams] = useState({}); + + const titleName = '나의 그룹'; + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const columns = [ + { + name: '그룹명', + selector: 'groupNm', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'groupId', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '생성 일시', + selector: 'createDt', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.createDt; + } + }, + + { + name: '상세보기', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return 상세보기; + } + } + ]; + + const joinColumns = [ + { + name: '그룹명', + selector: 'groupNm', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'groupId', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '권한등급', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupAuthCd; + } + }, + + { + name: '승인 여부', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {row.aprvlYn === 'Y' ? '승인' : '미승인'}
    ; + } + }, + + { + name: '가입 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + + { + name: '', + selector: 'cntrlStDate', + width: '150px', + cell: row => { + return row?.groupAuthCd === 'CREATER' ? ( +
    -
    + ) : ( + handlerWidthrow(row.cstmrGroupSno)} + > + 탈퇴하기 + + ); + } + } + ]; + + useEffect(() => { + handlerSearch(); + }, [user]); + + const handlerSearch = () => { + if (user?.cstmrSno) { + dispatch(Actions.MY_LIST.request({ cstmrSno: user?.cstmrSno })); + dispatch(Actions.JOIN_LIST.request({ cstmrSno: user?.cstmrSno })); + } + }; + + const handlerGroupCreate = () => { + history.push('/basis/group/create'); + }; + + const handlerWidthrow = cstmrGroupSno => { + setSaveParams({ + cstmrGroupSno: cstmrGroupSno, + joinYn: 'N' + }); + setModal({ + isOpen: true, + title: '탈퇴 확인', + desc: '해당 그룹을 탈퇴 하시겠습니까?' + }); + return; + }; + + const handlerWidthrowConfirm = cstmrGroupSno => { + dispatch(Actions.GROUP_JOIN_UPDATE.request(saveParams)); + }; + + const handlerGroupJoin = () => { + history.push('/basis/group/join/index'); + }; + + return ( + + {/* */} + + + + + + + ); +}; diff --git a/src/containers/basis/group/BasisGroupDetailContainer.js b/src/containers/basis/group/BasisGroupDetailContainer.js new file mode 100644 index 0000000..7904e12 --- /dev/null +++ b/src/containers/basis/group/BasisGroupDetailContainer.js @@ -0,0 +1,88 @@ +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useParams } from 'react-router-dom'; +import { BasisGroupForm } from '../../../components/basis/group/BaisGroupForm'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; +import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; + +export const BasisGroupDetailContainer = () => { + const { groupDetail, newGroupId } = useSelector(state => state.groupState); + + const { user } = useSelector(state => state.authState); + + const [groupData, setGroupData] = useState({ + type: 'create', + groupId: '', + groupNm: '', + groupTypeCd: '' + }); + const dispatch = useDispatch(); + const { id } = useParams(); + const titleName = '그룹 관리'; + + useEffect(() => { + if (id) { + handlerSearch(); + } else { + handlerCreateId(); + } + }, []); + + useEffect(() => { + setGroupData({ + groupId: newGroupId, + groupNm: '', + type: 'create', + cstmrSno: user?.cstmrSno, + groupTypeCd: '02' //단체로 생성 + }); + }, [newGroupId]); + + useEffect(() => { + setGroupData({ + ...groupDetail, + cstmrSno: user?.cstmrSno, + type: 'update' + }); + }, [groupDetail]); + + const handlerCreateId = () => { + dispatch(Actions.GROUP_CREATEID.request()); + }; + const handlerSearch = () => { + dispatch(Actions.GROUP_DETAIL.request(id)); + }; + + const handlerCreate = () => { + dispatch(Actions.GROUP_CREATE.request(groupData)); + }; + + const handlerUpdate = () => { + dispatch(Actions.GROUP_UPDATE.request(groupData)); + }; + const handlerDelete = () => { + dispatch(Actions.GROUP_DELETE.request(groupData.groupId)); + }; + + const handlerInput = e => { + const { name, value } = e.target; + setGroupData({ + ...groupData, + [name]: value + }); + }; + + return ( + + + + ); +}; diff --git a/src/containers/basis/group/BasisGroupDetailJoinContainer.js b/src/containers/basis/group/BasisGroupDetailJoinContainer.js new file mode 100644 index 0000000..b73cc6c --- /dev/null +++ b/src/containers/basis/group/BasisGroupDetailJoinContainer.js @@ -0,0 +1,192 @@ +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; +import { Button } from 'reactstrap'; +import { BasisGroupDetailJoinGrid } from '../../../components/basis/group/BasisGroupDetailJoinGrid'; +import { BasisGroupDetailJoinSearch } from '../../../components/basis/group/BasisGroupDetailJoinSearch'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; + +export const BasisGroupDetailJoinContainer = props => { + const { joinList, joinListCount } = useSelector(state => state.groupState); + + const { user } = useSelector(state => state.authState); + + const dispatch = useDispatch(); + const history = useHistory(); + + const titleName = '그룹가입'; + + const [params, setParams] = useState({ + cstmrSno: user?.cstmrSno + }); + + const [joinData, setJoinData] = useState({ + groupId: '', + groupAuthCd: 'USER', //가입은 USER 로만 + cstmrSno: '' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const onKeyPress = e => { + if (e.key == 'Enter') { + handlerSearch(); + } + }; + + const handlerSearch = () => { + dispatch(Actions.GROUP_JOINLIST.request({ searchParams: params })); + }; + + useEffect(() => { + if (user?.cstmrSno) { + dispatch( + Actions.GROUP_JOINLIST.request({ + searchParams: { cstmrSno: user?.cstmrSno } + }) + ); + } + }, [user]); + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + + const handlerJoin = groupId => { + setJoinData({ + ...joinData, + groupId: groupId, + cstmrSno: user?.cstmrSno + }); + setModal({ + isOpen: true, + title: '가입 확인', + desc: '해당 그룹에 가입을 하시겠습니까?' + }); + return; + }; + + const handlerConfirm = () => { + dispatch(Actions.GROUP_JOIN.request(joinData)); + }; + + const handlerInput = e => { + const { name, value } = e.target; + setParams({ + ...params, + [name]: value + }); + }; + + const columns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '권한등급', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupAuthCd; + } + }, + { + name: '생성일시', + selector: 'createDt', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.createDt; + } + }, + + { + name: '가입 상태', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinYn === 'Y' ? ( + row?.aprvYn === 'N' ? ( +
    미승인
    + ) : ( +
    가입
    + ) + ) : ( +
    미가입
    + ); + } + // return row?.joinYn; + }, + + { + name: '', + selector: 'cntrlStDate', + width: '150px', + sortable: true, + cell: row => { + // return 신청취소; + + return row?.joinYn === 'N' ? ( + handlerJoin(row?.groupId)} + > + 가입하기 + + ) : ( +
    -
    + ); + } + } + ]; + + return ( + + + + + + ); +}; diff --git a/src/containers/basis/group/BasisGroupUsersContainer.js b/src/containers/basis/group/BasisGroupUsersContainer.js new file mode 100644 index 0000000..9ef137c --- /dev/null +++ b/src/containers/basis/group/BasisGroupUsersContainer.js @@ -0,0 +1,220 @@ +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; +import { Button } from 'reactstrap'; +import { BasisGroupUsersGrid } from '../../../components/basis/group/BasisGroupUsersGrid'; +import { BasisGroupUsersSearch } from '../../../components/basis/group/BasisGroupUsersSearch'; +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; + +export const BasisGroupUsersContainer = props => { + const { userList, userCount } = useSelector(state => state.groupState); + + const { user } = useSelector(state => state.authState); + + const dispatch = useDispatch(); + const history = useHistory(); + + const [params, setParams] = useState({ + cstmrSno: user?.cstmrSno + }); + + const titleName = '사용자 관리'; + + const [saveData, setSaveData] = useState({ + cstmrGroupSno: '', + groupAuthCd: '' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + const columns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '사용자 명', + selector: 'memberName', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.memberName; + } + }, + { + name: '사용자 ID', + selector: 'userId', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.userId; + } + }, + + { + name: '권한명', + selector: 'groupAuthCd', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupAuthCd; + } + }, + { + name: '가입 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + { + name: '권한 변경', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupAuthCd === 'ADMIN' ? ( + handlerUserConfirm(row?.cstmrGroupSno)} + > + 사용자로 변경 + + ) : row?.groupAuthCd === 'CREATER' ? ( +
    수정불가
    + ) : ( + handlerAdminConfirm(row?.cstmrGroupSno)} + > + 운영자로 변경 + + ); + } + } + ]; + + useEffect(() => { + if (user?.cstmrSno) { + setParams({ + ...params, + cstmrSno: user?.cstmrSno + }); + + dispatch( + Actions.USER_LIST.request({ + searchParams: { cstmrSno: user?.cstmrSno } + }) + ); + } + }, [user]); + + useEffect(() => { + // console.log('changeParam >>>', params); + }, [params]); + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + dispatch(Actions.USER_LIST.request({ searchParams: params })); + }; + + const handlerAdminConfirm = cstmrGroupSno => { + setModal({ + isOpen: true, + title: '권한 확인', + desc: '해당 사용자를 운영자 권한으로 변경 하시겠습니까?' + }); + + setSaveData({ + cstmrGroupSno: cstmrGroupSno, + joinYn: 'Y', + groupAuthCd: 'ADMIN' + }); + }; + + const onKeyPress = e => { + if (e.key == 'Enter') { + handlerSearch(); + } + }; + + const handlerUserConfirm = cstmrGroupSno => { + setModal({ + isOpen: true, + title: '권한 확인', + desc: '해당 사용자를 사용자 권한으로 변경 하시겠습니까?' + }); + + setSaveData({ + cstmrGroupSno: cstmrGroupSno, + joinYn: 'Y', + groupAuthCd: 'USER' + }); + }; + + const handlerAuthSave = async () => { + dispatch(Actions.USER_UPDATE.request(saveData)); + }; + + const handlerInput = e => { + const { name, value } = e.target; + setParams({ + ...params, + [name]: value + }); + }; + + return ( + + + + + + + ); +}; diff --git a/src/containers/main/dash/MainDashContainer.js b/src/containers/main/dash/MainDashContainer.js new file mode 100644 index 0000000..1b70928 --- /dev/null +++ b/src/containers/main/dash/MainDashContainer.js @@ -0,0 +1,126 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { shallowEqual, useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; +import { Col, Row } from 'reactstrap'; +import { DashboardDronList } from '../../../components/dashboard/DashboardDronList'; +import { DashboardGroupList } from '../../../components/dashboard/DashboardGroupList'; +import { DashboardMenu } from '../../../components/dashboard/DashboardMenu'; +import { DashboardStcsArea } from '../../../components/dashboard/DashboardStcsArea'; +import { DashboardStcsDay } from '../../../components/dashboard/DashboardStcsDay'; +import * as Actions from '../../../modules/main/dash/actions/mainDashAction'; + +export const MainDashContainer = () => { + const dispatch = useDispatch(); + const { stcsDayList, stcsAreaList, groupList, dronList } = useSelector( + state => state.mainDashState + ); + + const history = useHistory(); + + const { user } = useSelector(state => state.authState, shallowEqual); + + const [dayStartDate, setDayStartDate] = useState(new Date()); + + const [areaStartDate, setAreaStartDate] = useState(new Date()); + + const handlerStcsDaySearch = date => { + dispatch( + Actions.STCS_DAY.request({ + yyyymm: moment(date).format('YYYY-MM') + }) + ); + }; + + const handlerStcsAreaSearch = date => { + console.log('22222222222222222222'); + dispatch( + Actions.STCS_AREA.request({ + yyyymm: moment(date).format('YYYY-MM') + }) + ); + }; + + const handlerGroupSearch = () => { + dispatch( + Actions.GROUP_LIST.request({ + cstmrSno: user?.cstmrSno + }) + ); + }; + + const handlerDronSearch = () => { + dispatch( + Actions.DRON_LIST.request({ + cstmrSno: user?.cstmrSno + }) + ); + }; + + const handlerStcsDayParam = date => { + setDayStartDate(date); + handlerStcsDaySearch(date); + }; + + const handlerStcsAreaParam = date => { + setAreaStartDate(date); + handlerStcsAreaSearch(date); + }; + + const handlerDronDetail = () => { + history.push('/basis/dron/index'); + }; + + const handlerGroupDetail = () => { + history.push('/basis/group/index'); + }; + + const movePage = url => { + history.push(url); + }; + useEffect(() => { + handlerStcsDaySearch(dayStartDate); + handlerStcsAreaSearch(areaStartDate); + handlerGroupSearch(); + handlerDronSearch(); + }, []); + + useEffect(() => { + console.log('stcsAreaList>>>>>>>>>>', stcsAreaList); + }, [stcsDayList]); + + return ( +
    + +
    + + + + + + + + + +
    +
    + + + + + + + + +
    +
    + ); +}; diff --git a/src/containers/system/auth/SystemAuthContainer.js b/src/containers/system/auth/SystemAuthContainer.js new file mode 100644 index 0000000..428d022 --- /dev/null +++ b/src/containers/system/auth/SystemAuthContainer.js @@ -0,0 +1,275 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useHistory } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { BasisGroupSearch } from '../../../components/basis/group/BasisGroupSearch'; +import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid'; +import { BasisGroupJoinGrid } from '../../../components/basis/group/BasisGroupJoinGrid'; +import { Badge, Button } from 'reactstrap'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import { SystemAuthSearch } from '../../../components/system/auth/SystemAuthSearch'; +import { SystemAuthGrid } from '../../../components/system/auth/SystemAuthGrid'; + +export const SystemAuthContainer = props => { + const data = [ + { + groupId: 'AAAA', + groupNm: '팔네트웍스', + memberName: '최현식', + groupDivCdNm: '단체', + aprvlYn: 'Y', + groupAuthNm: '운영자', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + }, + { + groupId: 'AAA2', + groupNm: '팔네트웍스2', + memberName: '최현식', + groupDivCdNm: '단체', + groupAuthNm: '사용자', + aprvlYn: 'Y', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + } + ]; + + const count = data.length; + + const dispatch = useDispatch(); + const history = useHistory(); + + const titleName = '권한관리'; + + const [params, setParams] = useState({ + stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), + endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), + search1: '' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + useEffect(() => { + if (data) return; + + if (searchParams) { + setParams({ + stDate: searchParams.stDate, + endDate: searchParams.endDate, + search1: searchParams.search1 + }); + } + + handlerSearch(); + }, []); + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + const handlerSearch = () => { + // dispatch(Actions.list.request({ searchParams: params })); + }; + + const handlerGroupCreate = () => { + history.push('/basis/group/create'); + }; + + const handlerWidthrow = () => { + setModal({ + isOpen: true, + title: '탈퇴 확인', + desc: '해당 그룹을 탈퇴 하시겠습니까?' + }); + return; + }; + + const handlerWidthrowConfirm = () => { + console.log('탈퇴!!!'); + }; + + const handlerGroupJoin = () => { + history.push('/basis/group/join'); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + const columns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '그룹 구분', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupDivCdNm; + } + }, + { + name: '생성 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + + { + name: '상세보기', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return 상세보기; + } + } + ]; + + const joinColumns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '권한등급', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupAuthNm; + } + }, + { + name: '그룹 구분', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupDivCdNm; + } + }, + { + name: '승인 여부', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {row.aprvlYn === 'Y' ? '승인' : '미승인'}
    ; + } + }, + { + name: '승인 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlDt; + } + }, + { + name: '가입 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + + { + name: '', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return ( + + 탈퇴하기 + + ); + } + } + ]; + + return ( + + + + + + ); +}; diff --git a/src/containers/system/auth/SystemAuthDetailContainer.js b/src/containers/system/auth/SystemAuthDetailContainer.js new file mode 100644 index 0000000..6e678fd --- /dev/null +++ b/src/containers/system/auth/SystemAuthDetailContainer.js @@ -0,0 +1,56 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useParams } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { AnalysisHistoryGrid } from '../../../components/analysis/history/AnalysisHistoryGrid'; +import { AnalysisHistoryDetailSearch } from '../../../components/analysis/history/AnalysisHistoryDetailSearch'; +import { AnalysisHistoryDetailGrid } from '../../../components/analysis/history/AnalysisHistoryDetailGrid'; +import { AnalysisHistoryDetailStatic } from '../../../components/analysis/history/AnalysisHistoryDetailStatic'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; +import { + BasisGroupDetail, + BasisGroupForm +} from '../../../components/basis/group/BaisGroupForm'; +import { SystemAuthForm } from '../../../components/system/auth/SystemAuthForm'; + +export const SystemAuthDetailContainer = () => { + const { detail } = useSelector(state => state.analysisHistoryState); + + const dispatch = useDispatch(); + const { id } = useParams(); + + const titleName = '그룹관리'; + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + // dispatch(Actions.detail.request(id)); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + return ( + + + + ); +}; diff --git a/src/containers/system/code/SystemCodeContainer.js b/src/containers/system/code/SystemCodeContainer.js new file mode 100644 index 0000000..9d03bd8 --- /dev/null +++ b/src/containers/system/code/SystemCodeContainer.js @@ -0,0 +1,234 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useHistory } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { BasisGroupSearch } from '../../../components/basis/group/BasisGroupSearch'; +import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid'; +import { BasisGroupJoinGrid } from '../../../components/basis/group/BasisGroupJoinGrid'; +import { Row, Badge, Button } from 'reactstrap'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import { SystemCodeGroupGrid } from '../../../components/system/code/SystemCodeGroupGrid'; +import { SystemCodeGrid } from '../../../components/system/code/SystemCodeGrid'; +import { SystemCodeGroupSearch } from '../../../components/system/code/SystemCodeGroupSearch'; + +export const SystemCodeContainer = props => { + const data = [ + { + groupId: 'AAAA', + groupNm: '팔네트웍스', + memberName: '최현식', + groupDivCdNm: '단체', + aprvlYn: 'Y', + groupAuthNm: '운영자', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + }, + { + groupId: 'AAA2', + groupNm: '팔네트웍스2', + memberName: '최현식', + groupDivCdNm: '단체', + groupAuthNm: '사용자', + aprvlYn: 'Y', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + } + ]; + + const count = data.length; + + const dispatch = useDispatch(); + const history = useHistory(); + + const titleName = '그룹관리'; + + const [params, setParams] = useState({ + stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), + endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), + search1: '' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + useEffect(() => { + if (data) return; + + if (searchParams) { + setParams({ + stDate: searchParams.stDate, + endDate: searchParams.endDate, + search1: searchParams.search1 + }); + } + + handlerSearch(); + }, []); + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + const handlerSearch = () => { + // dispatch(Actions.list.request({ searchParams: params })); + }; + + const handlerGroupCreate = () => { + history.push('/system/code/group/create'); + }; + + const handlerCodeList = () => { + alert('코드 조회'); + // console.log('코드 조회!!!'); + }; + + const handlerCodeDetail = () => { + history.push('/system/code/multi/detail/111'); + }; + + const handlerWidthrow = () => { + setModal({ + isOpen: true, + title: '탈퇴 확인', + desc: '해당 그룹을 탈퇴 하시겠습니까?' + }); + return; + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + const columns = [ + { + name: '코드그룹명', + selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + // minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '생성 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlDt; + } + }, + + { + name: '', + selector: 'cntrlStDate', + width: '100px', + sortable: true, + cell: row => { + return ( + 상세보기 + ); + } + }, + { + name: '', + selector: 'cntrlStDate', + width: '100px', + sortable: true, + cell: row => { + return 코드보기; + } + } + ]; + + const joinColumns = [ + { + name: '코드ID', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '코드 명', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '생성 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlDt; + } + } + ]; + + return ( + + +
    + + + + + +
    + +
    + ); +}; diff --git a/src/containers/system/code/SystemCodeDetailContainer.js b/src/containers/system/code/SystemCodeDetailContainer.js new file mode 100644 index 0000000..1552794 --- /dev/null +++ b/src/containers/system/code/SystemCodeDetailContainer.js @@ -0,0 +1,48 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useParams } from 'react-router-dom'; + +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; + +import { SystemCodeForm } from '../../../components/system/code/SystemCodeForm'; + +export const SystemCodeDetailContainer = () => { + const { detail } = useSelector(state => state.analysisHistoryState); + + const dispatch = useDispatch(); + const { id } = useParams(); + + const titleName = '그룹관리'; + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + // dispatch(Actions.detail.request(id)); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + return ( + + + + ); +}; diff --git a/src/containers/system/code/SystemCodeDetailMultiContainer.js b/src/containers/system/code/SystemCodeDetailMultiContainer.js new file mode 100644 index 0000000..c2ec3e2 --- /dev/null +++ b/src/containers/system/code/SystemCodeDetailMultiContainer.js @@ -0,0 +1,53 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useParams } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { AnalysisHistoryGrid } from '../../../components/analysis/history/AnalysisHistoryGrid'; +import { AnalysisHistoryDetailSearch } from '../../../components/analysis/history/AnalysisHistoryDetailSearch'; +import { AnalysisHistoryDetailGrid } from '../../../components/analysis/history/AnalysisHistoryDetailGrid'; +import { AnalysisHistoryDetailStatic } from '../../../components/analysis/history/AnalysisHistoryDetailStatic'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; +import { BasisGroupDetail } from '../../../components/basis/group/BaisGroupForm'; +import { SystemCodeMultiForm } from '../../../components/system/code/SystemCodeMultiForm'; + +export const SystemCodeDetailMultiContainer = () => { + const { detail } = useSelector(state => state.analysisHistoryState); + + const dispatch = useDispatch(); + const { id } = useParams(); + + const titleName = '그룹관리'; + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + // dispatch(Actions.detail.request(id)); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + return ( + + + + ); +}; diff --git a/src/containers/system/code/SystemCodeGroupDetailContainer.js b/src/containers/system/code/SystemCodeGroupDetailContainer.js new file mode 100644 index 0000000..1ab20cd --- /dev/null +++ b/src/containers/system/code/SystemCodeGroupDetailContainer.js @@ -0,0 +1,48 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useParams } from 'react-router-dom'; + +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; + +import SystemCodeDetail from '../../../views/system/code/SystemCodeDetail'; + +export const SystemCodeGroupDetailContainer = () => { + const { detail } = useSelector(state => state.analysisHistoryState); + + const dispatch = useDispatch(); + const { id } = useParams(); + + const titleName = '그룹관리'; + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + // dispatch(Actions.detail.request(id)); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + return ( + + + + ); +}; diff --git a/src/containers/system/menu/SystemMenuContainer.js b/src/containers/system/menu/SystemMenuContainer.js new file mode 100644 index 0000000..93f1818 --- /dev/null +++ b/src/containers/system/menu/SystemMenuContainer.js @@ -0,0 +1,234 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useHistory } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { BasisGroupSearch } from '../../../components/basis/group/BasisGroupSearch'; +import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid'; +import { BasisGroupJoinGrid } from '../../../components/basis/group/BasisGroupJoinGrid'; +import { Row, Badge, Button } from 'reactstrap'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import { SystemCodeGroupGrid } from '../../../components/system/code/SystemCodeGroupGrid'; +import { SystemCodeGrid } from '../../../components/system/code/SystemCodeGrid'; +import { SystemCodeGroupSearch } from '../../../components/system/code/SystemCodeGroupSearch'; + +export const SystemMenuContainer = props => { + const data = [ + { + groupId: 'AAAA', + groupNm: '팔네트웍스', + memberName: '최현식', + groupDivCdNm: '단체', + aprvlYn: 'Y', + groupAuthNm: '운영자', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + }, + { + groupId: 'AAA2', + groupNm: '팔네트웍스2', + memberName: '최현식', + groupDivCdNm: '단체', + groupAuthNm: '사용자', + aprvlYn: 'Y', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + } + ]; + + const count = data.length; + + const dispatch = useDispatch(); + const history = useHistory(); + + const titleName = '메뉴관리'; + + const [params, setParams] = useState({ + stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), + endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), + search1: '' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + useEffect(() => { + if (data) return; + + if (searchParams) { + setParams({ + stDate: searchParams.stDate, + endDate: searchParams.endDate, + search1: searchParams.search1 + }); + } + + handlerSearch(); + }, []); + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + const handlerSearch = () => { + // dispatch(Actions.list.request({ searchParams: params })); + }; + + const handlerGroupCreate = () => { + history.push('/system/code/group/create'); + }; + + const handlerCodeList = () => { + alert('코드 조회'); + // console.log('코드 조회!!!'); + }; + + const handlerCodeDetail = () => { + history.push('/system/code/multi/detail/111'); + }; + + const handlerWidthrow = () => { + setModal({ + isOpen: true, + title: '탈퇴 확인', + desc: '해당 그룹을 탈퇴 하시겠습니까?' + }); + return; + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + const columns = [ + { + name: '코드그룹명', + selector: 'cntrlStDate', + // minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + // minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '생성 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlDt; + } + }, + + { + name: '', + selector: 'cntrlStDate', + width: '100px', + sortable: true, + cell: row => { + return ( + 상세보기 + ); + } + }, + { + name: '', + selector: 'cntrlStDate', + width: '100px', + sortable: true, + cell: row => { + return 코드보기; + } + } + ]; + + const joinColumns = [ + { + name: '코드ID', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '코드 명', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '생성 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlDt; + } + } + ]; + + return ( + + +
    + + + + + +
    + +
    + ); +}; diff --git a/src/containers/system/user/SystemUserContainer.js b/src/containers/system/user/SystemUserContainer.js new file mode 100644 index 0000000..97ebddb --- /dev/null +++ b/src/containers/system/user/SystemUserContainer.js @@ -0,0 +1,277 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useHistory } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { BasisGroupSearch } from '../../../components/basis/group/BasisGroupSearch'; +import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid'; +import { BasisGroupJoinGrid } from '../../../components/basis/group/BasisGroupJoinGrid'; +import { Badge, Button } from 'reactstrap'; +import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import { SystemAuthSearch } from '../../../components/system/auth/SystemAuthSearch'; +import { SystemAuthGrid } from '../../../components/system/auth/SystemAuthGrid'; +import { SystemUserSearch } from '../../../components/system/user/SystemUserSearch'; +import { SystemUserGrid } from '../../../components/system/user/SystemUserGrid'; + +export const SystemUserContainer = props => { + const data = [ + { + groupId: 'AAAA', + groupNm: '팔네트웍스', + memberName: '최현식', + groupDivCdNm: '단체', + aprvlYn: 'Y', + groupAuthNm: '운영자', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + }, + { + groupId: 'AAA2', + groupNm: '팔네트웍스2', + memberName: '최현식', + groupDivCdNm: '단체', + groupAuthNm: '사용자', + aprvlYn: 'Y', + aprvlDt: '2021-01-01 15:23:24', + joinDt: '2021-01-01 15:23:24' + } + ]; + + const count = data.length; + + const dispatch = useDispatch(); + const history = useHistory(); + + const titleName = '사용자관리'; + + const [params, setParams] = useState({ + stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), + endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), + search1: '' + }); + + //모달 관련 설정 + const [modal, setModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + + useEffect(() => { + if (data) return; + + if (searchParams) { + setParams({ + stDate: searchParams.stDate, + endDate: searchParams.endDate, + search1: searchParams.search1 + }); + } + + handlerSearch(); + }, []); + + useEffect(() => { + console.log('changeParam >>>', params); + }, [params]); + const handlerSearch = () => { + // dispatch(Actions.list.request({ searchParams: params })); + }; + + const handlerGroupCreate = () => { + history.push('/basis/group/create'); + }; + + const handlerWidthrow = () => { + setModal({ + isOpen: true, + title: '탈퇴 확인', + desc: '해당 그룹을 탈퇴 하시겠습니까?' + }); + return; + }; + + const handlerWidthrowConfirm = () => { + console.log('탈퇴!!!'); + }; + + const handlerGroupJoin = () => { + history.push('/basis/group/join'); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + const columns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '그룹 구분', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupDivCdNm; + } + }, + { + name: '생성 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + + { + name: '상세보기', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return 상세보기; + } + } + ]; + + const joinColumns = [ + { + name: '그룹명', + selector: 'cntrlStDate', + minWidth: '102px', + // sortable: true, + cell: row => { + return row?.groupNm; + } + }, + + { + name: '그룹 코드', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '권한등급', + selector: 'idntfNum', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupAuthNm; + } + }, + { + name: '그룹 구분', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupDivCdNm; + } + }, + { + name: '승인 여부', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return
    {row.aprvlYn === 'Y' ? '승인' : '미승인'}
    ; + } + }, + { + name: '승인 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.aprvlDt; + } + }, + { + name: '가입 일시', + selector: 'cntrlStDate', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.joinDt; + } + }, + + { + name: '', + selector: 'cntrlStDate', + // minWidth: '102px', + sortable: true, + cell: row => { + return ( + + 탈퇴하기 + + ); + } + } + ]; + + return ( + + + + + + ); +}; diff --git a/src/containers/system/user/SystemUserDetailContainer.js b/src/containers/system/user/SystemUserDetailContainer.js new file mode 100644 index 0000000..90781d3 --- /dev/null +++ b/src/containers/system/user/SystemUserDetailContainer.js @@ -0,0 +1,57 @@ +import moment from 'moment'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch'; +import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; +import { Link, useParams } from 'react-router-dom'; + +import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; +import { AnalysisHistoryGrid } from '../../../components/analysis/history/AnalysisHistoryGrid'; +import { AnalysisHistoryDetailSearch } from '../../../components/analysis/history/AnalysisHistoryDetailSearch'; +import { AnalysisHistoryDetailGrid } from '../../../components/analysis/history/AnalysisHistoryDetailGrid'; +import { AnalysisHistoryDetailStatic } from '../../../components/analysis/history/AnalysisHistoryDetailStatic'; +import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayout'; +import { + BasisGroupDetail, + BasisGroupForm +} from '../../../components/basis/group/BaisGroupForm'; +import { SystemAuthForm } from '../../../components/system/auth/SystemAuthForm'; +import { SystemUserForm } from '../../../components/system/user/SystemUserForm'; + +export const SystemUserDetailContainer = () => { + const { detail } = useSelector(state => state.analysisHistoryState); + + const dispatch = useDispatch(); + const { id } = useParams(); + + const titleName = '사용자관리'; + + useEffect(() => { + handlerSearch(); + }, []); + + const handlerSearch = () => { + // dispatch(Actions.detail.request(id)); + }; + + const handlerInput = (type, val) => { + // if (type === 'search1') { + // setParams({ ...params, search1: val }); + // } + // if (type === 'searchDate') { + // if (val.length == 2) { + // setParams({ + // ...params, + // stDate: moment(val[0]).format('YYYY-MM-DD'), + // endDate: moment(val[1]).format('YYYY-MM-DD') + // }); + // } + // } + }; + + return ( + + + + ); +}; diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..9948b58 --- /dev/null +++ b/src/index.js @@ -0,0 +1,56 @@ +// ** React Imports +import { Suspense, lazy } from 'react'; +import ReactDOM from 'react-dom'; + +// ** Redux Imports +import { Provider } from 'react-redux'; +import { store } from './redux/storeConfig/store'; + +// ** Toast & ThemeColors Context +import { ToastContainer } from 'react-toastify'; +import { ThemeContext } from './utility/context/ThemeColors'; + +// ** Spinner (Splash Screen) +import Spinner from './@core/components/spinner/Fallback-spinner'; + +// ** Ripple Button +import './@core/components/ripple-button'; + +// ** PrismJS +import 'prismjs'; +import 'prismjs/themes/prism-tomorrow.css'; +import 'prismjs/components/prism-jsx.min'; + +// ** React Perfect Scrollbar +import 'react-perfect-scrollbar/dist/css/styles.css'; + +// ** React Toastify +import '@styles/react/libs/toastify/toastify.scss'; + +// ** Core styles +import './@core/assets/fonts/feather/iconfont.css'; +import './@core/scss/core.scss'; +import './assets/scss/style.scss'; + +// ** Service Worker +import * as serviceWorker from './serviceWorker'; + +// ** Lazy load app +const LazyApp = lazy(() => import('./App')); + +ReactDOM.render( + + }> + + + + + + , + document.getElementById('root') +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/src/index.scss b/src/index.scss new file mode 100644 index 0000000..e43f458 --- /dev/null +++ b/src/index.scss @@ -0,0 +1,2 @@ +@import '../node_modules/prismjs/themes/prism-tomorrow'; +@import './assets/scss/app.scss'; diff --git a/src/layouts/HorizontalLayout.js b/src/layouts/HorizontalLayout.js new file mode 100644 index 0000000..63eb3eb --- /dev/null +++ b/src/layouts/HorizontalLayout.js @@ -0,0 +1,6 @@ +// !Do not remove the Layout import +import Layout from '@layouts/HorizontalLayout' + +const HorizontalLayout = props => {props.children} + +export default HorizontalLayout diff --git a/src/layouts/VerticalLayout.js b/src/layouts/VerticalLayout.js new file mode 100644 index 0000000..804ca96 --- /dev/null +++ b/src/layouts/VerticalLayout.js @@ -0,0 +1,6 @@ +// !Do not remove the Layout import +import Layout from '@layouts/VerticalLayout'; + +const VerticalLayout = props => {props.children}; + +export default VerticalLayout; diff --git a/src/modules/account/login/actions/authAction.ts b/src/modules/account/login/actions/authAction.ts new file mode 100644 index 0000000..d3a734f --- /dev/null +++ b/src/modules/account/login/actions/authAction.ts @@ -0,0 +1,48 @@ +import { AxiosError } from 'axios'; +import { ActionType, createAsyncAction } from 'typesafe-actions'; +import { TokenAccount, UserAccount, UserData } from '../models/authModel'; + +const USERS_LOGIN_REQUEST = 'auth/USERS_LOGIN_REQUEST'; +const USERS_LOGIN_SUCCESS = 'auth/USERS_LOGIN_SUCCESS'; +const USERS_LOGIN_FAILURE = 'auth/USERS_LOGIN_FAILURE'; + +const CHECK_AUTHENCATION_REQUEST = 'auth/CHECK_AUTHENCATION_REQUEST'; +const CHECK_AUTHENCATION_SUCCESS = 'auth/CHECK_AUTHENCATION_SUCCESS'; +const CHECK_AUTHENCATION_FAILURE = 'auth/CHECK_AUTHENCATION_FAILURE'; + +const USERS_LOGOUT_REQUEST = 'auth/USERS_LOGOUT_REQUEST'; +const USERS_LOGOUT_SUCCESS = 'auth/USERS_LOGOUT_SUCCESS'; +const USERS_LOGOUT_FAILURE = 'auth/USERS_LOGOUT_FAILURE'; + +export const login = createAsyncAction( + USERS_LOGIN_REQUEST, + USERS_LOGIN_SUCCESS, + USERS_LOGIN_FAILURE +)(); + +export const check = createAsyncAction( + CHECK_AUTHENCATION_REQUEST, + CHECK_AUTHENCATION_SUCCESS, + CHECK_AUTHENCATION_FAILURE +)(); + +export const logout = createAsyncAction( + USERS_LOGOUT_REQUEST, + USERS_LOGOUT_SUCCESS, + USERS_LOGOUT_FAILURE +)(); + +export const refresh = createAsyncAction( + USERS_LOGOUT_REQUEST, + USERS_LOGOUT_SUCCESS, + USERS_LOGOUT_FAILURE +)(); + +const actions = { + login, + check, + logout, + refresh +}; + +export type AuthAction = ActionType; diff --git a/src/modules/account/login/apis/authApi.ts b/src/modules/account/login/apis/authApi.ts new file mode 100644 index 0000000..33b1f09 --- /dev/null +++ b/src/modules/account/login/apis/authApi.ts @@ -0,0 +1,21 @@ +import axios from '../../../utils/customAxiosUtil'; +import { ResponseUser, UserAccount, TokenAccount } from '../models/authModel'; + +import qs from 'qs'; + +export const authAPI = { + usersLogin: async (data: UserAccount) => { + console.log('>>>>>>>>>>>>>>>>>>>>>', data); + return await axios.post('api/acnt/jwt/login', data); + }, + getUserProfile: async (id: number) => { + return await axios.get(`api/acnt/jwt/profile/${id}`); + }, + + usersLogout: (id: number) => { + return axios.get(`api/acnt/jwt/logout/${id}`); + }, + refreshToken: (data: TokenAccount) => { + return axios.post('api/acnt/jwt/refresh', data); + } +}; diff --git a/src/modules/account/login/models/authModel.ts b/src/modules/account/login/models/authModel.ts new file mode 100644 index 0000000..c2a9eea --- /dev/null +++ b/src/modules/account/login/models/authModel.ts @@ -0,0 +1,58 @@ +export interface UserAccount { + userId: string; + userPswd: string; +} + +export interface TokenAccount { + cstmrSno: number; + refreshToken: string | null; +} + +export interface ResponseUser { + resultData: { + accessToken: string; + refreshToken: string; + expires_in: number; + scope: string | string[]; + jti: string; + usrId: string; + usrNo: number; + role: string; + encodedInfo: string | null; + }; +} + +export interface LoginData { + accessToken: string; + refreshToken: string; + expires_in: number; + exp: string; + scope: string | string[]; + jti: string; + userId: string; + cstmrSno: number; + auth: string; + encodedInfo: string | null; +} + +export interface UserData { + steCd: string; + regDt: string; + mdfcnDt: string; + usrNo: number; + usrJoinCours: string; + usrId: string; + usrNcnm: string; + usrEmlAdres: string; + usrPnt: string; + usrNatCd: string; + usrCpnb: string; + usrAgeCd: string; + usrSexdstn: string; + usrItrtJs: string[]; + usrItrtJsStr: string; + usrArmYn: string; + usrSmsYn: string; + authLevel: string; + authNm: string; +} diff --git a/src/modules/account/login/reducers/authReducer.ts b/src/modules/account/login/reducers/authReducer.ts new file mode 100644 index 0000000..f596393 --- /dev/null +++ b/src/modules/account/login/reducers/authReducer.ts @@ -0,0 +1,76 @@ +// base +import produce from 'immer'; + +import { createReducer } from 'typesafe-actions'; + +// action +import { + AuthAction, + check, + login, + logout, + refresh +} from '../actions/authAction'; + +import { UserData } from '../models/authModel'; + +export interface AuthState { + pageLoading: boolean; + isRefresh: boolean; + isLogin?: boolean; + message: string; + user?: UserData; +} + +// reducers +const initialState: AuthState = { + pageLoading: false, + isLogin: undefined, + isRefresh: false, + user: undefined, + message: '' +}; + +export const authReducer = createReducer(initialState) + .handleAction(login.success, (state, action) => + produce(state, draft => { + draft.isLogin = true; + draft.user = action.payload; + }) + ) + .handleAction(login.request, (state, action) => + produce(state, draft => { + draft.isLogin = false; + draft.message = ''; + }) + ) + .handleAction(login.failure, (state, action) => + produce(state, draft => { + draft.isLogin = false; + draft.message = action.payload; + }) + ) + .handleAction(check.success, (state, action) => + produce(state, draft => { + const { isLogin, user } = action.payload; + draft.isRefresh = false; + draft.isLogin = isLogin; + draft.user = user; + }) + ) + .handleAction(refresh.request, (state, action) => + produce(state, draft => { + draft.isRefresh = true; + }) + ) + .handleAction(refresh.success, (state, action) => + produce(state, draft => { + draft.user = action.payload; + }) + ) + .handleAction(logout.success, state => + produce(state, draft => { + draft.isLogin = false; + draft.user = undefined; + }) + ); diff --git a/src/modules/account/login/sagas/authSaga.ts b/src/modules/account/login/sagas/authSaga.ts new file mode 100644 index 0000000..72ef0ae --- /dev/null +++ b/src/modules/account/login/sagas/authSaga.ts @@ -0,0 +1,133 @@ +// base +import { replace } from 'connected-react-router'; +import decode from 'jwt-decode'; +import { call, put, takeEvery } from 'redux-saga/effects'; +// packages +import { ActionType } from 'typesafe-actions'; +// modules +import * as Actions from '../actions/authAction'; +import { authAPI } from '../apis/authApi'; +import { LoginData } from '../models/authModel'; +import { + cookieStorage, + COOKIE_ACCESS_TOKEN, + COOKIE_REFRESH_TOKEN +} from '../service/cookie'; + +function* userLoginSaga(action: ActionType) { + const param = action.payload; + try { + console.log('=-==================='); + + const { data, errorCode } = yield call(authAPI.usersLogin, param); + console.log('>>>>>11>>>>>>>', data); + + if (errorCode == '-101') { + throw '계정 정보가 찾을수 없습니다. 다시 확인해주세요.'; + } else if (errorCode == '-102') { + throw '비밀번호가 잘못 되었습니다. 다시 확인해주세요.'; + } else if (errorCode == '-103') { + throw '계정 정보가 사용할수 없습 상태입니다. 다시 확인해주세요.'; + } + // access_token 세팅 + cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.accessToken); + cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, data.refreshToken); + + const user = yield call(authAPI.getUserProfile, data.cstmrSno); + + // if (data.userId) { + // cookieStorage.setCookie('SAVE_USR_ID', data.userId); + // } else { + // cookieStorage.removeCookie('SAVE_USR_ID'); + // } + // console.log('user>>>', user); + yield put(Actions.login.success({ ...user.data })); + } catch (error) { + yield put(Actions.login.failure(error)); + + // message.error(error); + } +} + +function* refreshTokenSaga(action: ActionType) { + const param = action.payload; + try { + const { data, errorCode } = yield call(authAPI.refreshToken, param); + console.log('data>>>', data); + console.log('error>>>', errorCode); + + // access_token 세팅 + cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.accessToken); + cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, data.refreshToken); + + const user = yield call(authAPI.getUserProfile, data.cstmrSno); + + yield put(Actions.check.success({ ...user.data })); + } catch (error) { + yield put(Actions.check.failure(error)); + } +} + +function* checkAuthencationSaga() { + try { + const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); + console.log('accessToken>>>>>>>>>>>>>', accessToken); + if (!accessToken) { + yield put( + Actions.check.success({ + isLogin: false + }) + ); + + return; + } + + const decodedToken = decode(accessToken); + + const { data } = yield call(authAPI.getUserProfile, decodedToken.cstmrSno); + + //token 셋팅 + cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, accessToken); + console.log('>>>>>>>>>>>>>>>>>>>>>', data); + + // storageService.session.setItem(STORAGE_SESSION_ICT, user.icToken); + + yield put( + Actions.check.success({ + isLogin: true, + user: data + }) + ); + } catch (error) { + cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN); + + yield put(Actions.check.failure(error)); + } +} + +function* userLogoutSaga() { + const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); + console.log('accessToken', accessToken); + + try { + if (accessToken) { + console.log('dddddddddddddddddddddddddddddddddddd'); + const decodedToken = decode(accessToken); + const res = yield call(authAPI.usersLogout, decodedToken.cstmrSno); + } + yield put(Actions.logout.success()); + cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN); + cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN); + + yield put(replace('/')); + } catch (error) { + yield put(Actions.logout.failure(error)); + } +} + +export function* authSaga() { + yield takeEvery(Actions.login.request, userLoginSaga); + yield takeEvery(Actions.check.request, checkAuthencationSaga); + yield takeEvery(Actions.logout.request, userLogoutSaga); + // yield takeEvery(Actions.refresh.request, refreshTokenSaga); +} diff --git a/src/modules/account/login/service/cookie.ts b/src/modules/account/login/service/cookie.ts new file mode 100644 index 0000000..9d45a0b --- /dev/null +++ b/src/modules/account/login/service/cookie.ts @@ -0,0 +1,20 @@ +import Cookies, { CookieAttributes, CookiesStatic } from 'js-cookie'; + +const CookieStorageBuilder = (cookies: CookiesStatic) => ({ + setCookie: (key: string, value: string, options?: CookieAttributes) => + cookies.set(key, value, { + path: '/', + secure: process.env.NODE_ENV === 'production' ? false : false, + sameSite: 'Lax', + ...options + }), + getCookie: (key: string) => cookies.get(key), + removeCookie: (key: string) => cookies.remove(key) +}); + +export const cookieStorage = CookieStorageBuilder(Cookies); + +const COOKIE_BASE_NAME = 'palnet'; + +export const COOKIE_ACCESS_TOKEN = `${COOKIE_BASE_NAME}_accs`; +export const COOKIE_REFRESH_TOKEN = `${COOKIE_BASE_NAME}_rfrs`; diff --git a/src/modules/account/login/service/jwtTokenUtil.ts b/src/modules/account/login/service/jwtTokenUtil.ts new file mode 100644 index 0000000..ac48141 --- /dev/null +++ b/src/modules/account/login/service/jwtTokenUtil.ts @@ -0,0 +1,89 @@ +import decode from 'jwt-decode'; +import moment from 'moment'; +import { HOST } from '../../../../configs/constants'; +import { store } from '../../../../redux/storeConfig/store'; +import { LoginData } from '../models/authModel'; +import { + cookieStorage, + COOKIE_ACCESS_TOKEN, + COOKIE_REFRESH_TOKEN +} from './cookie'; + +const JWT_FLEFIX = 'palnet '; +export const checkTokenExpired = (token?: string) => { + const decodedToken = decode(token as string); + + // console.log('decodedToken>>>>>>>>>>>>>>>>>>>>>>>', decodedToken); + if (parseInt(decodedToken.exp) < moment().unix()) { + return true; + } + + return false; +}; + +export const getAccessToken = async () => { + let token = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); + + if (!token || token == undefined || token == 'undefined') { + return ''; + } + // console.log('checkTokenExpired>>>>', checkTokenExpired(token)); + if (checkTokenExpired(token)) { + //freshtoken 으로 재발급 진행. + const refreshToken = getRefreshToken(); + // console.log('refreshToken>>', refreshToken); + const isRefresh = store.getState()?.authState?.isRefresh; + // console.log('>>>>>>>>>>>>isRefresh', isRefresh); + if (refreshToken) { + // console.log('33333333333333333333333'); + // if (!store.getState()?.authState?.isRefresh) { + const decodeToken = decode(token as string); + const cstmrSno: number = decodeToken.cstmrSno; + + const { data, errorCode } = await refreshTokenAPI(cstmrSno, refreshToken); + if (errorCode === '-101') { + cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, ''); + } + //REFHRESTH 토큰 넣기 + cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.refreshToken); + token = data.refreshToken; + + // } + } + } + + return JWT_FLEFIX + token; +}; + +const refreshTokenAPI = async (cstmrSno: number, refreshToken: string) => { + const result = await fetch(HOST + 'api/acnt/jwt/refresh', { + method: 'post', + body: JSON.stringify({ + cstmrSno: cstmrSno, + refreshToken: refreshToken + }), + headers: { + 'Content-type': 'application/json; charset=UTF-8' + } + }) + .then(response => response.json()) + .catch(error => { + console.log('>>>>error ', error); + }); + + return result; +}; + +export const getRefreshToken = () => { + const token = cookieStorage.getCookie(COOKIE_REFRESH_TOKEN); + console.log('token::::::::::', token); + if ( + !token || + token == undefined || + token == 'undefined' || + checkTokenExpired(token) + ) + return ''; + + return token; +}; diff --git a/src/modules/account/register/actions/accountAction.ts b/src/modules/account/register/actions/accountAction.ts new file mode 100644 index 0000000..c039846 --- /dev/null +++ b/src/modules/account/register/actions/accountAction.ts @@ -0,0 +1,50 @@ +import { AxiosError } from 'axios'; +import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; +import { DefaultSeachModel } from '../../../models/ComnModel'; +import { + AccountData, + AccountTermsData, + AccountState, + AccountFormData, + AgreeTermsData +} from '../models/accountModel'; + +const REGISTER_REQUEST = 'account/register/REGISTER_REQUEST'; +const REGISTER_SUCCESS = 'account/register/REGISTER_SUCCESS'; +const REGISTER_FAILURE = 'account/register/REGISTER_FAILURE'; + +const TERMS_DISPATCH = 'account/terms/TERMS_DISPATCH'; + +const TERMS_REQUEST = 'account/terms/TERMS_REQUEST'; +const TERMS_SUCCESS = 'account/terms/TERMS_SUCCESS'; +const TERMS_FAILURE = 'account/terms/TERMS_FAILURE'; + +// const CRTFYHP_REQUEST = 'account/crtfyhp/CRTFYHP_REQUEST'; +// const CRTFYHP_SUCCESS = 'account/crtfyhp/CRTFYHP_SUCCESS'; +// const CRTFYHP_FAILURE = 'account/crtfyhp/CRTFYHP_FAILURE'; + +// const CRTFYHP_CONFIRM_REQUEST = 'account/crtfyhp/CRTFYHP_REQUEST'; +// const CRTFYHP_CONFIRM_SUCCESS = 'account/crtfyhp/CRTFYHP_REQUEST'; +// const CRTFYHP_CONFIRM_FAILURE = 'account/crtfyhp/CRTFYHP_REQUEST'; + +export const register = createAsyncAction( + REGISTER_REQUEST, + REGISTER_SUCCESS, + REGISTER_FAILURE +)(); + +export const agreeTerms = createAction(TERMS_DISPATCH)(); + +export const termsList = createAsyncAction( + TERMS_REQUEST, + TERMS_SUCCESS, + TERMS_FAILURE +)(); + +const actions = { + register, + termsList, + agreeTerms +}; + +export type AccountAction = ActionType; diff --git a/src/modules/account/register/apis/accountApi.ts b/src/modules/account/register/apis/accountApi.ts new file mode 100644 index 0000000..d1ddcaa --- /dev/null +++ b/src/modules/account/register/apis/accountApi.ts @@ -0,0 +1,65 @@ +import axios from '../../../utils/customAxiosUtil'; + +import qs from 'qs'; +import { AccountFormData, AccountState } from '../models/accountModel'; +import { DefaultSeachModel } from '../../../models/ComnModel'; +import { ACCOUNT } from '../../../../configs/constants'; +// import { ReponseControlGpHistory } from '../models/controlGpModel'; + +export const accountApi = { + register: async (data: AccountFormData) => { + console.log(data); + const param = { + ...data.data, + ...ACCOUNT, + terms: data.agreeTerms + }; + const res = await axios.post('api/acnt/cstmr/register', param); + console.log(res); + + return res; + }, + + temrsList: async (param: DefaultSeachModel) => { + const queryString = qs.stringify(param, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/acnt/terms/list` + queryString); + }, + crtfyhp: async (hpno: string) => { + return await axios.get(`api/acnt/crtfyhp/register/send?hpno=${hpno}`); + ``; + }, + crtfyhpConfirm: async (hpno: string, crtfyNo: string) => { + return await axios.get( + `api/acnt/crtfyhp/register/confirm?hpno=${hpno}&crtfyNo=${crtfyNo}` + ); + } + + // list: async (data: string) => { + // const queryString = qs.stringify(data, { + // addQueryPrefix: true, + // arrayFormat: 'repeat' + // }); + + // return await axios.get(`/api/anls/hstry/list` + queryString); + // }, + // detail: async (id: string) => { + // return await axios.get(`/api/anls/hstry/detail/${id}`); + // }, + + // log: async (id: string) => { + // return await axios.get(`/api/anls/hstry/log/${id}`); + // } + // getHistory: async (id: string) => { + // if (!id) { + // console.log(' ID is Empty'); + // return null; + // } + // const { data }: ReponseControlGpHistory = await axios.get( + // `api/ctr/cntrl/history/${id}` + // ); + // return data; + // } +}; diff --git a/src/modules/account/register/models/accountModel.ts b/src/modules/account/register/models/accountModel.ts new file mode 100644 index 0000000..600be9a --- /dev/null +++ b/src/modules/account/register/models/accountModel.ts @@ -0,0 +1,62 @@ +// export interface AccountListState { +// data: AnalysisHistoryData[] | undefined; +// detail: AnalysisHistoryData | undefined; +// log: AnalysisHistoryLogData[] | undefined; +// count: number | 0; +// params: string; +// } + +export interface AccountState { + data: AccountData | undefined; + agreeTerms: AgreeTermsData[] | undefined; + termsList: AccountTermsData[] | undefined; + errCode: string | undefined; +} + +export interface AccountFormData { + data: AccountData | undefined; + agreeTerms: AgreeTermsData[] | undefined; +} + +export interface AccountData { + cstrmDivCd: string; + cstrmStatusCd: string; + userId: string; + authId: string; + siteCode: string; + memberDivCd: string; + userPswd: string; + ipinDi: string; + ipinCi: string; + joinCrtfyCd: string; + cntryCd: string; + genderCd: string; + memberName: string; + brthdyDate: string; + email: string; + hpno: string; + clncd: string; +} + +export interface AgreeTermsData { + termsSno: number; + agreeYn: string; +} + +export interface AccountTermsData { + termsSno: number; + siteCd: string; + estbshDate: string; + termsCtgryCd: string; + langDivCd: string; + termsTitleNm: string; + termsCn: string; + simpleCn: string; +} + +export const initResponseAccountData = { + data: undefined, + agreeTerms: undefined, + termsList: undefined, + errCode: undefined +}; diff --git a/src/modules/account/register/reducers/accountReducer.ts b/src/modules/account/register/reducers/accountReducer.ts new file mode 100644 index 0000000..af9a9d3 --- /dev/null +++ b/src/modules/account/register/reducers/accountReducer.ts @@ -0,0 +1,36 @@ +import { createReducer } from 'typesafe-actions'; +import produce from 'immer'; + +import * as Actions from '../actions/accountAction'; +import { + initResponseAccountData, + AccountData, + AccountState +} from '../models/accountModel'; + +export const accountReducer = createReducer< + AccountState, + Actions.AccountAction +>(initResponseAccountData) + // .handleAction(Actions.register.success, (state, action) => + // produce(state, draft => { + // const res = action.payload; + // console.log(res); + // }) + // ) + + .handleAction(Actions.agreeTerms, (state, action) => + produce(state, draft => { + const res = action.payload; + draft.agreeTerms = res; + // draft.terms = res; + }) + ) + .handleAction(Actions.termsList.success, (state, action) => + produce(state, draft => { + const res = action.payload; + draft.termsList = res; + console.log(res); + // draft.terms = res; + }) + ); diff --git a/src/modules/account/register/sagas/accountSaga.ts b/src/modules/account/register/sagas/accountSaga.ts new file mode 100644 index 0000000..b02faa6 --- /dev/null +++ b/src/modules/account/register/sagas/accountSaga.ts @@ -0,0 +1,58 @@ +import { + call, + put, + select, + takeEvery, + takeLatest +} from '@redux-saga/core/effects'; +import { ActionType } from 'typesafe-actions'; + +import * as Actions from '../actions/accountAction'; +import * as Apis from '../apis/accountApi'; +import * as Models from '../models/accountModel'; + +function* register(action: ActionType) { + try { + console.log('-------------------------------'); + + const { data, agreeTerms } = action.payload; + + const res = yield call(Apis.accountApi.register, { data, agreeTerms }); + + const resData = res.data; + console.log('res>>>>', res); + + if (resData.errrCode > 0) { + yield put(Actions.register.success(resData)); + } else { + yield put(Actions.register.failure(resData)); + } + } catch (error) { + yield put(Actions.register.failure(error)); + // yield put(Actions.createNoticeAction.failure(error)); + } +} + +function* temrsList(action: ActionType) { + try { + // console.log("-------------------------------") + + const { langDivCd, siteCd } = action.payload; + + const res = yield call(Apis.accountApi.temrsList, { langDivCd, siteCd }); + + const resData: Models.AccountTermsData[] = res.data; + + console.log('>>>>>>>>>>>', resData); + + yield put(Actions.termsList.success(resData)); + } catch (error) { + yield put(Actions.termsList.failure(error)); + // yield put(Actions.createNoticeAction.failure(error)); + } +} + +export function* accountSaga() { + yield takeEvery(Actions.register.request, register); + yield takeEvery(Actions.termsList.request, temrsList); +} diff --git a/src/modules/analysis/history/actions/analysisHistoryAction.ts b/src/modules/analysis/history/actions/analysisHistoryAction.ts new file mode 100644 index 0000000..921616e --- /dev/null +++ b/src/modules/analysis/history/actions/analysisHistoryAction.ts @@ -0,0 +1,51 @@ +import { AxiosError } from 'axios'; +import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; +import { + AnalysisHistoryData, + AnalysisHistoryLogData, + AnalysisHistoryState +} from '../models/analysisHitoryModel'; + +const LIST_REQUEST = 'anls/hstry/LIST_REQUEST'; +const LIST_SUCCESS = 'anls/hstry/LIST_SUCCESS'; +const LIST_FAILURE = 'anls/hstry/LIST_FAILURE'; + +const LOG_REQUEST = 'anls/hstry/LOG_REQUEST'; +const LOG_SUCCESS = 'anls/hstry/LOG_SUCCESS'; +const LOG_FAILURE = 'anls/hstry/LOG_FAILURE'; + +const DETAIL_REQUEST = 'anls/hstry/DETAIL_REQUEST'; +const DETAIL_SUCCESS = 'anls/hstry/DETAIL_SUCCESS'; +const DETAIL_FAILURE = 'anls/hstry/DETAIL_FAILURE'; + +const DISPATCH_SEARCH = 'amls/hstry/DISPATCH_SEARCH'; + +export const dispatchSearch = + createAction(DISPATCH_SEARCH)<{ searchParams: string }>(); + +export const list = createAsyncAction(LIST_REQUEST, LIST_SUCCESS, LIST_FAILURE)< + AnalysisHistoryState, + { data: AnalysisHistoryData[]; count: number }, + AxiosError +>(); + +export const log = createAsyncAction(LOG_REQUEST, LOG_SUCCESS, LOG_FAILURE)< + string, + { log: AnalysisHistoryLogData[] }, + AxiosError +>(); + +export const detail = createAsyncAction( + DETAIL_REQUEST, + DETAIL_SUCCESS, + DETAIL_FAILURE +)(); + +const actions = { + list, + detail, + log, + dispatchSearch +}; + +export type AnalysisHistoryAction = ActionType; diff --git a/src/modules/analysis/history/apis/annalysisHistoryApi.ts b/src/modules/analysis/history/apis/annalysisHistoryApi.ts new file mode 100644 index 0000000..a783fb4 --- /dev/null +++ b/src/modules/analysis/history/apis/annalysisHistoryApi.ts @@ -0,0 +1,33 @@ +import axios from '../../../utils/customAxiosUtil'; + +import qs from 'qs'; +import { AnalysisHistoryState } from '../models/analysisHitoryModel'; +// import { ReponseControlGpHistory } from '../models/controlGpModel'; + +export const analysisHistory = { + list: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + + return await axios.get(`/api/anls/hstry/list` + queryString); + }, + detail: async (id: string) => { + return await axios.get(`/api/anls/hstry/detail/${id}`); + }, + + log: async (id: string) => { + return await axios.get(`/api/anls/hstry/log/${id}`); + } + // getHistory: async (id: string) => { + // if (!id) { + // console.log(' ID is Empty'); + // return null; + // } + // const { data }: ReponseControlGpHistory = await axios.get( + // `api/ctr/cntrl/history/${id}` + // ); + // return data; + // } +}; diff --git a/src/modules/analysis/history/models/analysisHitoryModel.ts b/src/modules/analysis/history/models/analysisHitoryModel.ts new file mode 100644 index 0000000..c3f1ba9 --- /dev/null +++ b/src/modules/analysis/history/models/analysisHitoryModel.ts @@ -0,0 +1,77 @@ +export interface AnalysisHistoryState { + data: AnalysisHistoryData[] | undefined; + detail: AnalysisHistoryData | undefined; + log: AnalysisHistoryLogData[] | undefined; + count: number | 0; + searchParams: string; + arrSpeed: number[] | undefined; + arrElev: number[] | undefined; +} + +export interface AnalysisHistoryDetailState { + analysisHistoryDetail: AnalysisHistoryData | undefined; +} + +// export interface SearchAnalysisHistory { +// idntfNum: string; +// cntrlStDate: string; +// cntrlEndDate: string; +// } + +export interface AnalysisHistoryData { + cntrlId: string; + idntfNum: string; + statusCd: string; + objectTypeCd: string; + flghtStDt: string; + flghtEndDt: string; + cntrlStDt: Date; + cntrlEndDt: string; + ttlTime: number; + ttlTimeType: string; + ttlDstnc: number; + ttlDstncType: string; + avrgSpeed: number; + avrgSpeedType: string; + bttrCnsmptn: number; + stArea: string; + endArea: string; + createDt: string; + updateDt: string; +} + +export interface AnalysisHistoryLogData { + hstrySno: number; + cntrlId: string; + trmnlId: string; + + mssgTypeCd: string; + statusCd: string; + lat: number; + lon: number; + speed: number; + speedType: string; + heading: number; + elev: number; + elevType: string; + mvDstnc: number; + bttrLvl: number; + bttrVltg: number; + trmnlRcvDt: string; + srvrRcvDt: string; +} + +export interface ReponseAnalysisHistoryData { + data: AnalysisHistoryData[]; + count: number; +} + +export const initResponseAnalysisHistoryData = { + data: undefined, + detail: undefined, + log: undefined, + count: 0, + searchParams: '', + arrSpeed: undefined, + arrElev: undefined +}; diff --git a/src/modules/analysis/history/reducers/analysisHitoryReducer.ts b/src/modules/analysis/history/reducers/analysisHitoryReducer.ts new file mode 100644 index 0000000..bf0273c --- /dev/null +++ b/src/modules/analysis/history/reducers/analysisHitoryReducer.ts @@ -0,0 +1,48 @@ +import { createReducer } from 'typesafe-actions'; +import produce from 'immer'; + +import * as Actions from '../actions/analysisHistoryAction'; +import { + initResponseAnalysisHistoryData, + AnalysisHistoryData, + AnalysisHistoryState +} from '../models/analysisHitoryModel'; + +export const analysisHistoryReducer = createReducer< + AnalysisHistoryState, + Actions.AnalysisHistoryAction +>(initResponseAnalysisHistoryData) + .handleAction(Actions.dispatchSearch, (state, action) => + produce(state, draft => { + const { searchParams } = action.payload; + draft.searchParams = searchParams; + }) + ) + .handleAction(Actions.list.request, (state, action) => + produce(state, draft => { + const { searchParams } = action.payload; + draft.searchParams = searchParams; + }) + ) + .handleAction(Actions.list.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.data = data; + draft.count = count; + }) + ) + .handleAction(Actions.detail.success, (state, action) => + produce(state, draft => { + console.log('>>111>>>', action.payload); + const { detail } = action.payload; + + draft.detail = detail; + }) + ) + .handleAction(Actions.log.success, (state, action) => + produce(state, draft => { + const { log } = action.payload; + + draft.log = log; + }) + ); diff --git a/src/modules/analysis/history/sagas/analysisHistorySaga.ts b/src/modules/analysis/history/sagas/analysisHistorySaga.ts new file mode 100644 index 0000000..24dc987 --- /dev/null +++ b/src/modules/analysis/history/sagas/analysisHistorySaga.ts @@ -0,0 +1,67 @@ +import { + call, + put, + select, + takeEvery, + takeLatest +} from '@redux-saga/core/effects'; +import { ActionType } from 'typesafe-actions'; + +import * as Actions from '../actions/analysisHistoryAction'; +import * as Apis from '../apis/annalysisHistoryApi'; +import * as Models from '../models/analysisHitoryModel'; + +function* listSaga(action: ActionType) { + try { + const { searchParams } = action.payload; + const res = yield call(Apis.analysisHistory.list, searchParams); + const { data, count } = res; + + yield put( + Actions.list.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.list.failure(error)); + } +} + +function* detailSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.analysisHistory.detail, id); + yield put(Actions.log.request(id)); + const { data } = res; + yield put( + Actions.detail.success({ + detail: data + }) + ); + } catch (error) { + yield put(Actions.detail.failure(error)); + } +} + +function* logSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.analysisHistory.log, id); + const { data } = res; + + yield put( + Actions.log.success({ + log: data + }) + ); + } catch (error) { + yield put(Actions.log.failure(error)); + } +} + +export function* analysisHistorySaga() { + yield takeEvery(Actions.list.request, listSaga); + yield takeEvery(Actions.detail.request, detailSaga); + yield takeEvery(Actions.log.request, logSaga); +} diff --git a/src/modules/analysis/simulation/actions/analysisSimulatorAction.ts b/src/modules/analysis/simulation/actions/analysisSimulatorAction.ts new file mode 100644 index 0000000..ce56c5f --- /dev/null +++ b/src/modules/analysis/simulation/actions/analysisSimulatorAction.ts @@ -0,0 +1,63 @@ +import { AxiosError } from 'axios'; +import { ActionType, createAction, createAsyncAction } from 'typesafe-actions'; +import { + AnalysisSimulatorData, + AnalysisSimulatorLogData, + AnalysisSimulatorState, + AnalysisSimulatorStcsData +} from '../models/analysisSimulatorModel'; + +const LIST_REQUEST = 'anls/smlt/LIST_REQUEST'; +const LIST_SUCCESS = 'anls/smlt/LIST_SUCCESS'; +const LIST_FAILURE = 'anls/smlt/LIST_FAILURE'; + +const LOG_REQUEST = 'anls/smlt/LOG_REQUEST'; +const LOG_SUCCESS = 'anls/smlt/LOG_SUCCESS'; +const LOG_FAILURE = 'anls/smlt/LOG_FAILURE'; + +const DETAIL_REQUEST = 'anls/smlt/DETAIL_REQUEST'; +const DETAIL_SUCCESS = 'anls/smlt/DETAIL_SUCCESS'; +const DETAIL_FAILURE = 'anls/smlt/DETAIL_FAILURE'; + +const STATICS_REQUEST = 'anls/smlt/STATICS_REQUEST'; +const STATICS_SUCCESS = 'anls/smlt/STATICS_SUCCESS'; +const STATICS_FAILURE = 'anls/smlt/STATICS_FAILURE'; + +const DISPATCH_SEARCH = 'amls/smlt/DISPATCH_SEARCH'; + +export const dispatchSearch = + createAction(DISPATCH_SEARCH)<{ searchParams: string }>(); + +export const list = createAsyncAction(LIST_REQUEST, LIST_SUCCESS, LIST_FAILURE)< + AnalysisSimulatorState, + { data: AnalysisSimulatorData[]; count: number }, + AxiosError +>(); + +export const log = createAsyncAction(LOG_REQUEST, LOG_SUCCESS, LOG_FAILURE)< + string, + { log: AnalysisSimulatorLogData[] }, + AxiosError +>(); + +export const detail = createAsyncAction( + DETAIL_REQUEST, + DETAIL_SUCCESS, + DETAIL_FAILURE +)(); + +export const stcs = createAsyncAction( + STATICS_REQUEST, + STATICS_SUCCESS, + STATICS_FAILURE +)(); + +const actions = { + list, + detail, + log, + stcs, + dispatchSearch +}; + +export type AnalysisSimulatorAction = ActionType; diff --git a/src/modules/analysis/simulation/apis/annalysisSimulatorApi.ts b/src/modules/analysis/simulation/apis/annalysisSimulatorApi.ts new file mode 100644 index 0000000..c07a5e4 --- /dev/null +++ b/src/modules/analysis/simulation/apis/annalysisSimulatorApi.ts @@ -0,0 +1,30 @@ +import qs from 'qs'; +import axios from '../../../utils/customAxiosUtil'; + +// import { ReponseControlGpHistory } from '../models/controlGpModel'; + +export const analysisSimulator = { + //비행 현황 목록 + list: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + + return await axios.get(`/api/anls/smlt/list` + queryString); + }, + // 비행 이력 데이터 조회 + logList: async (id: string) => { + return await axios.get(`/api/anls/smlt/hist/${id}`); + }, + + //비행 상세 데이터 조회 + detail: async (id: string) => { + return await axios.get(`/api/anls/smlt/detail/${id}`); + }, + + //비행 통계 데이터 조회 + stcsList: async (id: string) => { + return await axios.get(`/api/anls/smlt/stcs/${id}`); + } +}; diff --git a/src/modules/analysis/simulation/models/analysisSimulatorModel.ts b/src/modules/analysis/simulation/models/analysisSimulatorModel.ts new file mode 100644 index 0000000..51cfeba --- /dev/null +++ b/src/modules/analysis/simulation/models/analysisSimulatorModel.ts @@ -0,0 +1,74 @@ +export interface AnalysisSimulatorState { + list: AnalysisSimulatorData[] | undefined; + detail: AnalysisSimulatorData | undefined; + count: number | 0; + log: AnalysisSimulatorLogData[] | undefined; + searchParams: string; + stcsList: AnalysisSimulatorStcsData[] | undefined; + stcsCount: number | 0; +} + +export interface AnalysisSimulatorData { + cntrlId: string; + idntfNum: string; + flghtStDt: Date; + flghtEndDt: Date; + cntrlStDt: Date; + cntrlEndDt: Date; + ttlTime: number; + ttlTimeType: string; + ttlDstnc: number; + ttlDstncType: string; + avrgSpeed: number; + avrgSpeedType: string; + bttrCnsmptn: number; + stArea: string; + endArea: string; + arcrftTypeCd: string; + prdctNum: string; + arcrftModelNm: string; + imageUrl: string; +} + +export interface AnalysisSimulatorLogData { + hstrySno: number; + cntrlId: string; + trmnlId: string; + mssgTypeCd: string; + statusCd: string; + lat: number; + lon: number; + speed: number; + speedType: string; + heading: number; + elev: number; + elevType: string; + mvDstnc: number; + bttrLvl: number; + bttrVltg: number; + trmnlRcvDt: string; + srvrRcvDt: string; +} + +export interface AnalysisSimulatorStcsData { + dateCd: string; + timeCd: string; + avrgSpeed: number; + speedType: string; + avrgElev: number; + elevType: string; + avrgMvDstnc: number; + mvDstncType: string; + minBttrLvl: number; + maxBttrLvl: number; +} + +export const initResponseAnalysisSimulatorData = { + list: undefined, + detail: undefined, + count: 0, + log: undefined, + searchParams: '', + stcsList: undefined, + stcsCount: 0 +}; diff --git a/src/modules/analysis/simulation/reducers/analysisSimulatorReducer.ts b/src/modules/analysis/simulation/reducers/analysisSimulatorReducer.ts new file mode 100644 index 0000000..95b4cd1 --- /dev/null +++ b/src/modules/analysis/simulation/reducers/analysisSimulatorReducer.ts @@ -0,0 +1,56 @@ +import produce from 'immer'; +import { createReducer } from 'typesafe-actions'; +import * as Actions from '../actions/analysisSimulatorAction'; +import { + AnalysisSimulatorState, + initResponseAnalysisSimulatorData +} from '../models/analysisSimulatorModel'; + +export const analysisSimulatorReducer = createReducer< + AnalysisSimulatorState, + Actions.AnalysisSimulatorAction +>(initResponseAnalysisSimulatorData) + .handleAction(Actions.dispatchSearch, (state, action) => + produce(state, draft => { + const { searchParams } = action.payload; + draft.searchParams = searchParams; + }) + ) + .handleAction(Actions.list.request, (state, action) => + produce(state, draft => { + const { searchParams } = action.payload; + draft.searchParams = searchParams; + }) + ) + .handleAction(Actions.list.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.list = data; + draft.count = count; + }) + ) + .handleAction(Actions.detail.success, (state, action) => + produce(state, draft => { + const { data } = action.payload; + draft.detail = data; + }) + ) + .handleAction(Actions.stcs.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.stcsList = data; + draft.stcsCount = count; + }) + ) + + .handleAction(Actions.log.success, (state, action) => + produce(state, draft => { + const { log } = action.payload; + const data = log.sort((p:any, n:any): any => { + const a = p.srvrRcvDt.replace(/[^0-9\.]+/g, ''); + const b = n.srvrRcvDt.replace(/[^0-9\.]+/g, ''); + return a-b; + }) + draft.log = log; + }) + ); diff --git a/src/modules/analysis/simulation/sagas/analysisSimulatorSaga.ts b/src/modules/analysis/simulation/sagas/analysisSimulatorSaga.ts new file mode 100644 index 0000000..b7ab7c1 --- /dev/null +++ b/src/modules/analysis/simulation/sagas/analysisSimulatorSaga.ts @@ -0,0 +1,77 @@ +import { call, put, takeEvery } from '@redux-saga/core/effects'; +import { ActionType } from 'typesafe-actions'; +import * as Actions from '../actions/analysisSimulatorAction'; +import * as Apis from '../apis/annalysisSimulatorApi'; + +function* listSaga(action: ActionType) { + try { + const { searchParams } = action.payload; + const res = yield call(Apis.analysisSimulator.list, searchParams); + const { data, count } = res; + + yield put( + Actions.list.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.list.failure(error)); + } +} + +function* detailSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.analysisSimulator.detail, id); + yield put(Actions.log.request(id)); + const { data } = res; + yield put( + Actions.detail.success({ + data: data + }) + ); + } catch (error) { + yield put(Actions.detail.failure(error)); + } +} + +function* stcsSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.analysisSimulator.stcsList, id); + yield put(Actions.log.request(id)); + const { data, count } = res; + yield put( + Actions.stcs.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.detail.failure(error)); + } +} + +function* logSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.analysisSimulator.logList, id); + const { data } = res; + + yield put( + Actions.log.success({ + log: data + }) + ); + } catch (error) { + yield put(Actions.log.failure(error)); + } +} + +export function* analysisSimulatorSaga() { + yield takeEvery(Actions.list.request, listSaga); + yield takeEvery(Actions.detail.request, detailSaga); + yield takeEvery(Actions.stcs.request, stcsSaga); + yield takeEvery(Actions.log.request, logSaga); +} diff --git a/src/modules/basis/dron/actions/basisDronAction.ts b/src/modules/basis/dron/actions/basisDronAction.ts new file mode 100644 index 0000000..40841a1 --- /dev/null +++ b/src/modules/basis/dron/actions/basisDronAction.ts @@ -0,0 +1,123 @@ +import { AxiosError } from 'axios'; +import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; +import { ErrorModel } from '../../../models/ComnModel'; +import { + initDron, + DronData, + DronState, + SelectData, + IdntfData +} from '../models/basisDronModel'; + +//# 목록 조회 +const LIST_REQUEST = 'basis/dron/LIST_REQUEST'; +const LIST_SUCCESS = 'basis/dron/LIST_SUCCESS'; +const LIST_FAILURE = 'basis/dron/LIST_FAILURE'; + +//# 상세 조회 +const DETAIL_REQUEST = 'basis/dron/DETAIL_REQUEST'; +const DETAIL_SUCCESS = 'basis/dron/DETAIL_SUCCESS'; +const DETAIL_FAILURE = 'basis/dron/DETAIL_FAILURE'; + +//## 생성 +const CREATE_REQUEST = 'basis/dron/CREATE_REQUEST'; +const CREATE_SUCCESS = 'basis/dron/CREATE_SUCCESS'; +const CREATE_FAILURE = 'basis/dron/CREATE_FAILURE'; + +//## 수정 +const UPDATE_REQUEST = 'basis/dron/UPDATE_REQUEST'; +const UPDATE_SUCCESS = 'basis/dron/UPDATE_SUCCESS'; +const UPDATE_FAILURE = 'basis/dron/UPDATE_FAILURE'; + +//## 삭제 +const DELETE_REQUEST = 'basis/dron/DELETE_REQUEST'; +const DELETE_SUCCESS = 'basis/dron/DELETE_SUCCESS'; +const DELETE_FAILURE = 'basis/dron/DELETE_FAILURE'; + +//식별번호 목록 조회 +const IDNTF_LIST_REQUEST = 'basis/idntf/IDNTF_LIST_REQUEST'; +const IDNTF_LIST_SUCCESS = 'basis/idntf/IDNTF_LIST_SUCCESS'; +const IDNTF_LIST_FAILURE = 'basis/idntf/IDNTF_LIST_FAILURE'; + +const DISPATCH_RESET_IDNTF = 'basis/idntf/IDNTF_RESET'; + +//식별번호 생성 + +const IDNTF_CREATE_REQUEST = 'basis/idntf/IDNTF_CREATE_REQUEST'; +const IDNTF_CREATE_SUCCESS = 'basis/idntf/IDNTF_CREATE_SUCCESS'; +const IDNTF_CREATE_FAILURE = 'basis/idntf/IDNTF_CREATE_FAILURE'; + +//식별번호 삭제 +const IDNTF_DELETE_REQUEST = 'basis/idntf/IDNTF_DELETE_REQUEST'; +const IDNTF_DELETE_SUCCESS = 'basis/idntf/IDNTF_DELETE_SUCCESS'; +const IDNTF_DELETE_FAILURE = 'basis/idntf/IDNTF_DELETE_FAILURE'; + +//그룹 선택 +const SELECT_GROUP = 'basis/dron/SELECT_GROUP'; + +export const LIST = createAsyncAction(LIST_REQUEST, LIST_SUCCESS, LIST_FAILURE)< + string, + { data: DronData[]; count: number }, + AxiosError +>(); + +export const IDNTF_LIST = createAsyncAction( + IDNTF_LIST_REQUEST, + IDNTF_LIST_SUCCESS, + IDNTF_LIST_FAILURE +)(); + +export const DETAIL = createAsyncAction( + DETAIL_REQUEST, + DETAIL_SUCCESS, + DETAIL_FAILURE +)(); + +export const RESET_IDNTF = createAction(DISPATCH_RESET_IDNTF)(); + +export const IDNTF_CREATE = createAsyncAction( + IDNTF_CREATE_REQUEST, + IDNTF_CREATE_SUCCESS, + IDNTF_CREATE_FAILURE +)(); + +export const CREATE = createAsyncAction( + CREATE_REQUEST, + CREATE_SUCCESS, + CREATE_FAILURE +)(); + +export const UPDATE = createAsyncAction( + UPDATE_REQUEST, + UPDATE_SUCCESS, + UPDATE_FAILURE +)(); + +export const DELETE = createAsyncAction( + DELETE_REQUEST, + DELETE_SUCCESS, + DELETE_FAILURE +)(); + +export const IDNTF_DELETE = createAsyncAction( + IDNTF_DELETE_REQUEST, + IDNTF_DELETE_SUCCESS, + IDNTF_DELETE_FAILURE +)(); + +export const SELECT = createAction(SELECT_GROUP)(); + +const actions = { + LIST, + DETAIL, + CREATE, + UPDATE, + DELETE, + IDNTF_LIST, + IDNTF_CREATE, + IDNTF_DELETE, + RESET_IDNTF, + SELECT +}; + +export type DronAction = ActionType; diff --git a/src/modules/basis/dron/apis/basisDronApi.ts b/src/modules/basis/dron/apis/basisDronApi.ts new file mode 100644 index 0000000..2390aa1 --- /dev/null +++ b/src/modules/basis/dron/apis/basisDronApi.ts @@ -0,0 +1,67 @@ +import axios from '../../../utils/customAxiosUtil'; + +import qs from 'qs'; +import { DronData, IdntfData } from '../models/basisDronModel'; + +export const dronAPI = { + list: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/dron/list${queryString}`); + }, + + idntfList: async (id: number) => { + return await axios.get(`api/bas/dron/idntf/list/${id}`); + }, + + detail: async (id: number) => { + return await axios.get(`api/bas/dron/detail/${id}`); + }, + + create: async (data: DronData) => { + console.log(data); + const res = await axios.post('api/bas/dron/create', data); + // const res = await axios.post('api/bas/dron/create', data, { + // headers: { 'Content-Type': 'multipart/form-data' } + // }); + console.log(res); + + return res; + }, + idntfCreate: async (data: IdntfData[]) => { + console.log(data); + + const res = await axios.post('api/bas/dron/idntf/create', data); + console.log('res>>>>', res); + + return res; + }, + update: async (data: DronData) => { + console.log(data); + + const res = await axios.put('api/bas/dron/update', data); + console.log(res); + + return res; + }, + delete: async (id: number) => { + return await axios.delete(`api/bas/dron/delete/${id}`); + }, + idntfDelete: async (id: string) => { + return await axios.delete(`api/bas/dron/idntf/delete/${id}`); + }, + fileupload: async (file: any) => { + let form = new FormData(); + form.append('file', file); + + // const res = await axios.post('api/file/upload', form, { + // headers: { 'Content-Type': 'multipart/form-data' } + // }); + const res = await axios.post('api/file/upload', form); + console.log(res); + + return res; + } +}; diff --git a/src/modules/basis/dron/models/basisDronModel.ts b/src/modules/basis/dron/models/basisDronModel.ts new file mode 100644 index 0000000..4116a48 --- /dev/null +++ b/src/modules/basis/dron/models/basisDronModel.ts @@ -0,0 +1,68 @@ +import { ErrorModel } from '../../../models/ComnModel'; + +export interface DronState { + list: DronData[] | undefined; + count: number | 0; + detail: DronData | undefined; + searchParams: string | ''; + selectData: SelectData | undefined; + listIdntf: IdntfData[] | undefined; + idntfCount: number | 0; + isRefreshIdntf: boolean | false; +} + +export interface SelectData { + groupId: string; + groupNm: string; +} + +export interface DronData { + groupId: string; + arcrftSno: number; + arcrftHght: number; + arcrftLngth: number; + arcrftModelNm: string; + arcrftTypeCd: string; + arcrftWdth: number; + arcrftWght: number; + cameraYn: string; + createDt: Date; + createUserId: string; + insrncYn: string; + prdctCmpnNm: string; + prdctDate: Date; + prdctNum: string; + takeoffWght: number; + updateDt: Date; + updateUserId: string; + imageUrl: string; + wghtTypeCd: string; + idntfNum: string; + newIdntfNum: string; + idntfTypeCd: string; + ownerSno: number; + ownerNm: string; + hpno: string; + telno: string; + useYn: string; + file: FileList; +} + +export interface IdntfData { + idntfNum: string; + newIdntfNum: string; + isSave: boolean; + updateDt: Date; + createDt: Date; +} + +export const initDron = { + list: undefined, + count: 0, + detail: undefined, + searchParams: '', + selectData: undefined, + listIdntf: undefined, + idntfCount: 0, + isRefreshIdntf: false +}; diff --git a/src/modules/basis/dron/reducers/basisDronReducer.ts b/src/modules/basis/dron/reducers/basisDronReducer.ts new file mode 100644 index 0000000..1867493 --- /dev/null +++ b/src/modules/basis/dron/reducers/basisDronReducer.ts @@ -0,0 +1,55 @@ +import { createReducer } from 'typesafe-actions'; +import produce from 'immer'; + +import * as Actions from '../actions/basisDronAction'; +import { DronState, initDron } from '../models/basisDronModel'; + +export const dronReducer = createReducer( + initDron +) + .handleAction(Actions.LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.list = data; + draft.count = count; + }) + ) + .handleAction(Actions.IDNTF_LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.listIdntf = data; + draft.isRefreshIdntf = false; + draft.idntfCount = count; + }) + ) + .handleAction(Actions.SELECT, (state, action) => + produce(state, draft => { + const selectData = action.payload; + draft.selectData = selectData; + }) + ) + .handleAction(Actions.IDNTF_CREATE.success, (state, action) => + produce(state, draft => { + draft.isRefreshIdntf = true; + }) + ) + .handleAction(Actions.IDNTF_DELETE.success, (state, action) => + produce(state, draft => { + draft.isRefreshIdntf = true; + }) + ) + .handleAction(Actions.RESET_IDNTF, (state, action) => + produce(state, draft => { + draft.detail = undefined; + draft.listIdntf = undefined; + draft.isRefreshIdntf = false; + draft.idntfCount = 0; + }) + ) + + .handleAction(Actions.DETAIL.success, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.detail = data; + }) + ); diff --git a/src/modules/basis/dron/sagas/basisDronSaga.ts b/src/modules/basis/dron/sagas/basisDronSaga.ts new file mode 100644 index 0000000..7cad8cb --- /dev/null +++ b/src/modules/basis/dron/sagas/basisDronSaga.ts @@ -0,0 +1,309 @@ +import { call, put, takeEvery } from '@redux-saga/core/effects'; +import { ActionType } from 'typesafe-actions'; +import { + DELETE_MESSAGE, + DUPLATE_MESSAGE, + ERROR_MESSAGE, + SAVE_MESSAGE +} from '../../../../configs/constants'; +import * as MessageActions from '../../../comn/message/actions/comnMessageAction'; +import * as Actions from '../actions/basisDronAction'; +import * as Apis from '../apis/basisDronApi'; + +function* listSaga(action: ActionType) { + try { + const params = action.payload; + const res = yield call(Apis.dronAPI.list, params); + const { data, count, errorCode, errorMessage } = res; + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put( + Actions.LIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.LIST.failure(error)); + } +} + +function* listIdntfSaga(action: ActionType) { + try { + const params = action.payload; + console.log('params>>>>', params); + const res = yield call(Apis.dronAPI.idntfList, params); + const { data, count, errorCode, errorMessage } = res; + + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + + let dataArr = new Array(); + + data?.map(item => { + console.log('item>? ', item); + dataArr.push({ ...item, isSave: true, id: item?.idntfNum }); + }); + + console.log('>>>>>>>>>>>>>>>>>>>>>dataArr', dataArr); + + yield put( + Actions.IDNTF_LIST.success({ + data: dataArr, + count: count + }) + ); + } catch (error) { + yield put(Actions.IDNTF_LIST.failure(error)); + } +} + +function* detailSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.dronAPI.detail, id); + + const { data } = res; + yield put(Actions.DETAIL.success(data)); + } catch (error) { + yield put(Actions.DETAIL.failure(error)); + } +} + +function* createSaga(action: ActionType) { + try { + const detail = action.payload; + + const res = yield call(Apis.dronAPI.create, detail); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + if (data.errorCode === 'DT002') { + yield put( + MessageActions.IS_ERROR({ + errorCode: DUPLATE_MESSAGE.code, + errorMessage: '제작번호 ' + DUPLATE_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + } else { + throw Error; + } + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_CREATE.failure(error)); + } +} + +function* createIdntfSaga( + action: ActionType +) { + try { + const detail = action.payload; + + console.log('detail>>>:', detail); + const res = yield call(Apis.dronAPI.idntfCreate, detail); + console.log(res); + const { data } = res; + console.log('data:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', data.result); + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + yield put(Actions.IDNTF_CREATE.success(data)); + } else { + console.log('errorCode >>> ', data.errorCode); + if (data.errorCode === 'DT002') { + yield put( + MessageActions.IS_ERROR({ + errorCode: DUPLATE_MESSAGE.code, + errorMessage: '식별번호가 ' + DUPLATE_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + } else { + throw Error; + } + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_CREATE.failure(error)); + } +} + +function* updateSaga(action: ActionType) { + try { + const detail = action.payload; + const res = yield call(Apis.dronAPI.update, detail); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + if (data.errorCode === 'DT002') { + yield put( + MessageActions.IS_ERROR({ + errorCode: DUPLATE_MESSAGE.code, + errorMessage: '제작번호 ' + DUPLATE_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + } else { + throw Error; + } + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_UPDATE.failure(error)); + } +} + +function* deleteSaga(action: ActionType) { + try { + const id = action.payload; + const res = yield call(Apis.dronAPI.delete, id); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: DELETE_MESSAGE.code, + message: DELETE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_DELETE.failure(error)); + } +} + +function* deleteIdntfSaga( + action: ActionType +) { + try { + const id = action.payload; + const res = yield call(Apis.dronAPI.idntfDelete, id); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: DELETE_MESSAGE.code, + message: DELETE_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + yield put(Actions.IDNTF_DELETE.success(data)); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_DELETE.failure(error)); + } +} + +export function* dronSaga() { + yield takeEvery(Actions.LIST.request, listSaga); + yield takeEvery(Actions.IDNTF_LIST.request, listIdntfSaga); + yield takeEvery(Actions.DETAIL.request, detailSaga); + yield takeEvery(Actions.CREATE.request, createSaga); + yield takeEvery(Actions.IDNTF_CREATE.request, createIdntfSaga); + yield takeEvery(Actions.UPDATE.request, updateSaga); + yield takeEvery(Actions.DELETE.request, deleteSaga); + yield takeEvery(Actions.IDNTF_DELETE.request, deleteIdntfSaga); +} diff --git a/src/modules/basis/group/actions/basisGroupAction.ts b/src/modules/basis/group/actions/basisGroupAction.ts new file mode 100644 index 0000000..d56524c --- /dev/null +++ b/src/modules/basis/group/actions/basisGroupAction.ts @@ -0,0 +1,194 @@ +import { AxiosError } from 'axios'; +import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; +import { ErrorModel } from '../../../models/ComnModel'; +import { + initGroup, + GroupData, + JoinGroupData, + AprvGroupData, + UserGroupData, + GroupState +} from '../models/basisGroupModel'; + +//# 나의 그룹 목록 조회 +const MY_LIST_REQUEST = 'basis/group/MY_LIST_REQUEST'; +const MY_LIST_SUCCESS = 'basis/group/MY_LIST_SUCCESS'; +const MY_LIST_FAILURE = 'basis/group/MY_LIST_FAILURE'; + +//# 참여 그룹 목록 조회 +const JOIN_LIST_REQUEST = 'basis/group/JOIN_LIST_REQUEST'; +const JOIN_LIST_SUCCESS = 'basis/group/JOIN_LIST_SUCCESS'; +const JOIN_LIST_FAILURE = 'basis/group/JOIN_LIST_FAILURE'; + +//# 그룹 상세 조회 +const GROUP_DETAIL_REQUEST = 'basis/group/GROUP_DETAIL_REQUEST'; +const GROUP_DETAIL_SUCCESS = 'basis/group/GROUP_DETAIL_SUCCESS'; +const GROUP_DETAIL_FAILURE = 'basis/group/GROUP_DETAIL_FAILURE'; + +//## 그룹 생성 +const GROUP_CREATE_REQUEST = 'basis/group/GROUP_CREATE_REQUEST'; +const GROUP_CREATE_SUCCESS = 'basis/group/GROUP_CREATE_SUCCESS'; +const GROUP_CREATE_FAILURE = 'basis/group/GROUP_CREATE_FAILURE'; + +//## 그룹수정 +const GROUP_UPDATE_REQUEST = 'basis/group/GROUP_UPDATE_REQUEST'; +const GROUP_UPDATE_SUCCESS = 'basis/group/GROUP_UPDATE_SUCCESS'; +const GROUP_UPDATE_FAILURE = 'basis/group/GROUP_UPDATE_FAILURE'; + +//## 그룹 삭제 +const GROUP_DELETE_REQUEST = 'basis/group/GROUP_DELETE_REQUEST'; +const GROUP_DELETE_SUCCESS = 'basis/group/GROUP_DELETE_SUCCESS'; +const GROUP_DELETE_FAILURE = 'basis/group/GROUP_DELETE_FAILURE'; + +//## 그룹 전체 조회 +const GROUP_LIST_REQUEST = 'basis/group/GROUP_LIST_REQUEST'; +const GROUP_LIST_SUCCESS = 'basis/group/GROUP_LIST_SUCCESS'; +const GROUP_LIST_FAILURE = 'basis/group/GROUP_LIST_FAILURE'; + +//# 그룹코드 발급 +const GROUP_CREATEID_REQUEST = 'basis/group/GROUP_CREATEID_REQUEST'; +const GROUP_CREATEID_SUCCESS = 'basis/group/GROUP_CREATEID_SUCCESS'; +const GROUP_CREATEID_FAILURE = 'basis/group/GROUP_CREATEID_FAILURE'; + +//# 참여가능 그룹 목록 조회 +const GROUP_JOINLIST_REQUEST = 'basis/group/GROUP_JOINLIST_REQUEST'; +const GROUP_JOINLIST_SUCCESS = 'basis/group/GROUP_JOINLIST_SUCCESS'; +const GROUP_JOINLIST_FAILURE = 'basis/group/GROUP_JOINLIST_FAILURE'; + +//# 그룹 가입처리 +const GROUP_JOIN_REQUEST = 'basis/group/GROUP_JOIN_REQUEST'; +const GROUP_JOIN_SUCCESS = 'basis/group/GROUP_JOIN_SUCCESS'; +const GROUP_JOIN_FAILURE = 'basis/group/GROUP_JOIN_FAILURE'; + +//# 그룹 가입 탈퇴 / 취소 처리 +const GROUP_JOIN_UPDATE_REQUEST = 'basis/group/GROUP_JOIN_UPDATE_REQUEST'; +const GROUP_JOIN_UPDATE_SUCCESS = 'basis/group/GROUP_JOIN_UPDATE_SUCCESS'; +const GROUP_JOIN_UPDATE_FAILURE = 'basis/group/GROUP_JOIN_UPDATE_FAILURE'; + +//# 승인요청 조회 +const APPROVAL_LIST_REQUEST = 'basis/group/APPROVAL_LIST_REQUEST'; +const APPROVAL_LIST_SUCCESS = 'basis/group/APPROVAL_LIST_SUCCESS'; +const APPROVAL_LIST_FAILURE = 'basis/group/APPROVAL_LIST_FAILURE'; + +//# 승인처리 / 취소 처리 +const APPROVAL_UPDATE_REQUEST = 'basis/group/APPROVAL_UPDATE_REQUEST'; +const APPROVAL_UPDATE_SUCCESS = 'basis/group/APPROVAL_UPDATE_SUCCESS'; +const APPROVAL_UPDATE_FAILURE = 'basis/group/APPROVAL_UPDATE_FAILURE'; + +//# 그룹사용자 조회 +const USER_LIST_REQUEST = 'basis/group/USER_LIST_REQUEST'; +const USER_LIST_SUCCESS = 'basis/group/USER_LIST_SUCCESS'; +const USER_LIST_FAILURE = 'basis/group/USER_LIST_FAILURE'; + +//# 사용자 권한 수정 / 블럭 처리 +const USER_UPDATE_REQUEST = 'basis/group/USER_UPDATE_REQUEST'; +const USER_UPDATE_SUCCESS = 'basis/group/USER_UPDATE_SUCCESS'; +const USER_UPDATE_FAILURE = 'basis/group/USER_UPDATE_FAILURE'; + +export const MY_LIST = createAsyncAction( + MY_LIST_REQUEST, + MY_LIST_SUCCESS, + MY_LIST_FAILURE +)(); + +export const JOIN_LIST = createAsyncAction( + JOIN_LIST_REQUEST, + JOIN_LIST_SUCCESS, + JOIN_LIST_FAILURE +)(); + +export const GROUP_DETAIL = createAsyncAction( + GROUP_DETAIL_REQUEST, + GROUP_DETAIL_SUCCESS, + GROUP_DETAIL_FAILURE +)(); + +export const GROUP_CREATE = createAsyncAction( + GROUP_CREATE_REQUEST, + GROUP_CREATE_SUCCESS, + GROUP_CREATE_FAILURE +)(); +export const GROUP_UPDATE = createAsyncAction( + GROUP_UPDATE_REQUEST, + GROUP_UPDATE_SUCCESS, + GROUP_UPDATE_FAILURE +)(); +export const GROUP_DELETE = createAsyncAction( + GROUP_DELETE_REQUEST, + GROUP_DELETE_SUCCESS, + GROUP_DELETE_FAILURE +)(); + +export const GROUP_LIST = createAsyncAction( + GROUP_LIST_REQUEST, + GROUP_LIST_SUCCESS, + GROUP_LIST_FAILURE +)(); + +export const GROUP_CREATEID = createAsyncAction( + GROUP_CREATEID_REQUEST, + GROUP_CREATEID_SUCCESS, + GROUP_CREATEID_FAILURE +)(); + +export const GROUP_JOINLIST = createAsyncAction( + GROUP_JOINLIST_REQUEST, + GROUP_JOINLIST_SUCCESS, + GROUP_JOINLIST_FAILURE +)(); + +export const GROUP_JOIN = createAsyncAction( + GROUP_JOIN_REQUEST, + GROUP_JOIN_SUCCESS, + GROUP_JOIN_FAILURE +)(); + +export const GROUP_JOIN_UPDATE = createAsyncAction( + GROUP_JOIN_UPDATE_REQUEST, + GROUP_JOIN_UPDATE_SUCCESS, + GROUP_JOIN_UPDATE_FAILURE +)(); + +export const APPROVAL_LIST = createAsyncAction( + APPROVAL_LIST_REQUEST, + APPROVAL_LIST_SUCCESS, + APPROVAL_LIST_FAILURE +)(); + +export const APPROVAL_UPDATE = createAsyncAction( + APPROVAL_UPDATE_REQUEST, + APPROVAL_UPDATE_SUCCESS, + APPROVAL_UPDATE_FAILURE +)(); + +export const USER_LIST = createAsyncAction( + USER_LIST_REQUEST, + USER_LIST_SUCCESS, + USER_LIST_FAILURE +)(); + +export const USER_UPDATE = createAsyncAction( + USER_UPDATE_REQUEST, + USER_UPDATE_SUCCESS, + USER_UPDATE_FAILURE +)(); + +const actions = { + MY_LIST, + JOIN_LIST, + GROUP_DETAIL, + GROUP_CREATE, + GROUP_UPDATE, + GROUP_DELETE, + GROUP_LIST, + GROUP_CREATEID, + GROUP_JOINLIST, + GROUP_JOIN, + GROUP_JOIN_UPDATE, + APPROVAL_LIST, + APPROVAL_UPDATE, + USER_LIST, + USER_UPDATE +}; + +export type GroupAction = ActionType; diff --git a/src/modules/basis/group/apis/basisGroupApi.ts b/src/modules/basis/group/apis/basisGroupApi.ts new file mode 100644 index 0000000..ae6413d --- /dev/null +++ b/src/modules/basis/group/apis/basisGroupApi.ts @@ -0,0 +1,112 @@ +import axios from '../../../utils/customAxiosUtil'; + +import qs from 'qs'; +import { + AprvGroupData, + GroupData, + JoinGroupData, + UserGroupData +} from '../models/basisGroupModel'; +// import { ReponseControlGpHistory } from '../models/controlGpModel'; + +export const groupAPI = { + listMyGroup: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/group/mylist${queryString}`); + }, + listMyGroupJoin: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/group/joinlist${queryString}`); + }, + detailGroup: async (id: string) => { + return await axios.get(`api/bas/group/detail/${id}`); + }, + createGroup: async (data: GroupData) => { + console.log(data); + + const res = await axios.post('api/bas/group/create', data); + console.log(res); + + return res; + }, + updateGroup: async (data: GroupData) => { + console.log(data); + + const res = await axios.put('api/bas/group/update', data); + console.log(res); + + return res; + }, + deleteGroup: async (id: string) => { + return await axios.delete(`api/bas/group/delete/${id}`); + }, + listGroup: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/group/list${queryString}`); + }, + createid: async () => { + return await axios.get('api/bas/group/createid'); + }, + listGroupJoin: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/group/join/list${queryString}`); + }, + createJoinGroup: async (data: JoinGroupData) => { + console.log(data); + + const res = await axios.post('api/bas/group/join/create', data); + console.log(res); + + return res; + }, + updateJoinGroup: async (data: JoinGroupData) => { + console.log(data); + + const res = await axios.put('api/bas/group/join/update', data); + console.log(res); + + return res; + }, + listGroupAprv: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/group/aprv/list${queryString}`); + }, + updateAprvGroup: async (data: AprvGroupData) => { + console.log(data); + + const res = await axios.put('api/bas/group/aprv/update', data); + console.log(res); + + return res; + }, + listGroupUser: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/bas/group/user/list${queryString}`); + }, + updateUser: async (data: UserGroupData) => { + console.log(data); + + const res = await axios.put('api/bas/group/user/update', data); + console.log(res); + + return res; + } +}; diff --git a/src/modules/basis/group/models/basisGroupModel.ts b/src/modules/basis/group/models/basisGroupModel.ts new file mode 100644 index 0000000..c11b492 --- /dev/null +++ b/src/modules/basis/group/models/basisGroupModel.ts @@ -0,0 +1,97 @@ +import { ErrorModel } from '../../../models/ComnModel'; + +export interface GroupState { + myList: GroupData[] | undefined; + myListCount: number | 0; + groupDetail: GroupData | undefined; + joinList: JoinGroupData[] | undefined; + joinListCount: number | 0; + groupList: GroupData[] | undefined; + groupCount: number | 0; + aprvList: AprvGroupData[] | undefined; + aprvCount: number | 0; + userList: UserGroupData[] | undefined; + userCount: number | 0; + groupId: string | ''; + newGroupId: String | ''; + searchParams: string | ''; + error: ErrorModel | undefined; +} + +export interface GroupSearchData { + groupId: string; + groupNm: string; +} + +export interface GroupData { + groupId: string; + groupNm: string; + groupTypeCd: string; + cstmrSno: number; + createDt: Date; + updateDt: Date; +} + +export interface JoinGroupData { + cstmrGroupSno: number; + groupId: string; + groupNm: string; + groupTypeCd: string; + cstmrSno: number; + aprvlYn: string; + joinYn: string; + joinDt: Date; + aprvlDt: Date; + groupAuthCd: string; +} + +export interface AprvGroupData { + cstmrGroupSno: number; + groupId: string; + groupNm: string; + groupTypeCd: string; + cstmrSno: number; + aprvlYn: string; + joinYn: string; + memberName: string; + userId: string; + aprvlDt: Date; + joinDt: Date; + groupAuthCd: string; + aprvlUserId: String; +} + +export interface UserGroupData { + cstmrGroupSno: number; + groupId: string; + groupNm: string; + groupTypeCd: string; + cstmrSno: number; + aprvlYn: string; + joinYn: string; + memberName: string; + userId: string; + aprvlDt: Date; + joinDt: Date; + groupAuthCd: string; + aprvlUserId: String; +} + +export const initGroup = { + myList: undefined, + myListCount: 0, + myDetail: undefined, + groupDetail: undefined, + joinList: undefined, + joinListCount: 0, + groupList: undefined, + groupCount: 0, + aprvList: undefined, + aprvCount: 0, + userList: undefined, + userCount: 0, + groupId: '', + newGroupId: '', + searchParams: '', + error: undefined +}; diff --git a/src/modules/basis/group/reducers/basisGroupReducer.ts b/src/modules/basis/group/reducers/basisGroupReducer.ts new file mode 100644 index 0000000..cb5c6af --- /dev/null +++ b/src/modules/basis/group/reducers/basisGroupReducer.ts @@ -0,0 +1,65 @@ +import { createReducer } from 'typesafe-actions'; +import produce from 'immer'; + +import * as Actions from '../actions/basisGroupAction'; +import { GroupState, initGroup } from '../models/basisGroupModel'; + +export const groupReducer = createReducer( + initGroup +) + .handleAction(Actions.MY_LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.myList = data; + draft.myListCount = count; + }) + ) + .handleAction(Actions.JOIN_LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.joinList = data; + draft.joinListCount = count; + }) + ) + .handleAction(Actions.GROUP_CREATEID.success, (state, action) => + produce(state, draft => { + const result = action.payload; + console.log('>>>', result); + + draft.newGroupId = result; + }) + ) + .handleAction(Actions.GROUP_DETAIL.success, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.groupDetail = data; + }) + ) + .handleAction(Actions.GROUP_LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.groupList = data; + draft.groupCount = count; + }) + ) + .handleAction(Actions.GROUP_JOINLIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.joinList = data; + draft.joinListCount = count; + }) + ) + .handleAction(Actions.APPROVAL_LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.aprvList = data; + draft.aprvCount = count; + }) + ) + .handleAction(Actions.USER_LIST.success, (state, action) => + produce(state, draft => { + const { data, count } = action.payload; + draft.userList = data; + draft.userCount = count; + }) + ); diff --git a/src/modules/basis/group/sagas/basisGroupSaga.ts b/src/modules/basis/group/sagas/basisGroupSaga.ts new file mode 100644 index 0000000..413b265 --- /dev/null +++ b/src/modules/basis/group/sagas/basisGroupSaga.ts @@ -0,0 +1,443 @@ +import { + call, + put, + select, + takeEvery, + takeLatest +} from '@redux-saga/core/effects'; +import { AiFillCodeSandboxCircle } from 'react-icons/ai'; +import { ActionType } from 'typesafe-actions'; + +import * as Actions from '../actions/basisGroupAction'; +import * as MessageActions from '../../../comn/message/actions/comnMessageAction'; +import * as Apis from '../apis/basisGroupApi'; +import * as Models from '../models/basisGroupModel'; +import { goBack } from 'connected-react-router'; +import { useDispatch } from 'react-redux'; +import { + DELETE_MESSAGE, + ERROR_MESSAGE, + SAVE_MESSAGE +} from '../../../../configs/constants'; + +function* listMyGroupSaga(action: ActionType) { + try { + const params = action.payload; + const res = yield call(Apis.groupAPI.listMyGroup, params); + const { data, count, errorCode, errorMessage } = res; + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put( + Actions.MY_LIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.MY_LIST.failure(error)); + } +} + +function* listMyJoinSaga(action: ActionType) { + try { + const params = action.payload; + + const res = yield call(Apis.groupAPI.listMyGroupJoin, params); + console.log(res); + const { data, count, errorCode, errorMessage } = res; + + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + + yield put( + Actions.JOIN_LIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.JOIN_LIST.failure(error)); + } +} + +function* createIdSaga( + action: ActionType +) { + try { + const params = action.payload; + + const { data } = yield call(Apis.groupAPI.createid); + + console.log(data); + yield put(Actions.GROUP_CREATEID.success(data.result)); + } catch (error) { + yield put(Actions.GROUP_CREATEID.failure(error)); + } +} + +function* detailGroupSaga( + action: ActionType +) { + try { + const id = action.payload; + const res = yield call(Apis.groupAPI.detailGroup, id); + + const { data } = res; + yield put(Actions.GROUP_DETAIL.success(data)); + } catch (error) { + yield put(Actions.GROUP_DETAIL.failure(error)); + } +} + +function* createGroupSaga( + action: ActionType +) { + try { + const groupDetail = action.payload; + const res = yield call(Apis.groupAPI.createGroup, groupDetail); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_CREATE.failure(error)); + } +} + +function* updateGroupSaga( + action: ActionType +) { + try { + const groupDetail = action.payload; + const res = yield call(Apis.groupAPI.updateGroup, groupDetail); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_UPDATE.failure(error)); + } +} + +function* deleteGroupSaga( + action: ActionType +) { + try { + const groupId = action.payload; + const res = yield call(Apis.groupAPI.deleteGroup, groupId); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: DELETE_MESSAGE.code, + message: DELETE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_DELETE.failure(error)); + } +} + +function* listGroupSaga(action: ActionType) { + try { + const { searchParams } = action.payload; + const res = yield call(Apis.groupAPI.listGroup, searchParams); + const { data, count } = res; + + yield put( + Actions.GROUP_LIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.GROUP_LIST.failure(error)); + } +} + +function* groupJoinListSaga( + action: ActionType +) { + try { + const { searchParams } = action.payload; + const res = yield call(Apis.groupAPI.listGroupJoin, searchParams); + const { data, count } = res; + + yield put( + Actions.GROUP_JOINLIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.GROUP_JOINLIST.failure(error)); + } +} + +function* createJoinGroupSaga( + action: ActionType +) { + try { + const groupDetail = action.payload; + const res = yield call(Apis.groupAPI.createJoinGroup, groupDetail); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_UPDATE.failure(error)); + } +} + +function* updateJoinGroupSaga( + action: ActionType +) { + try { + const groupDetail = action.payload; + const res = yield call(Apis.groupAPI.updateJoinGroup, groupDetail); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: false, + isRefresh: true + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_UPDATE.failure(error)); + } +} + +function* aprvListSaga( + action: ActionType +) { + try { + const { searchParams } = action.payload; + console.log('searchParams>>> ', searchParams); + const res = yield call(Apis.groupAPI.listGroupAprv, searchParams); + const { data, count } = res; + + yield put( + Actions.APPROVAL_LIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.APPROVAL_LIST.failure(error)); + } +} + +function* updateAprvSaga( + action: ActionType +) { + try { + const saveData = action.payload; + const res = yield call(Apis.groupAPI.updateAprvGroup, saveData); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: false, + isRefresh: true + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_UPDATE.failure(error)); + } +} + +function* userListSaga(action: ActionType) { + try { + const { searchParams } = action.payload; + const res = yield call(Apis.groupAPI.listGroupUser, searchParams); + const { data, count } = res; + + yield put( + Actions.USER_LIST.success({ + data: data, + count: count + }) + ); + } catch (error) { + yield put(Actions.USER_LIST.failure(error)); + } +} + +function* updateUserSaga( + action: ActionType +) { + try { + const saveData = action.payload; + const res = yield call(Apis.groupAPI.updateUser, saveData); + + const { data } = res; + + if (data.result) { + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: false, + isRefresh: true + }) + ); + } else { + throw Error; + } + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.GROUP_UPDATE.failure(error)); + } +} + +export function* basGroupSaga() { + yield takeEvery(Actions.MY_LIST.request, listMyGroupSaga); + yield takeEvery(Actions.JOIN_LIST.request, listMyJoinSaga); + yield takeEvery(Actions.GROUP_DETAIL.request, detailGroupSaga); + yield takeEvery(Actions.GROUP_CREATE.request, createGroupSaga); + yield takeEvery(Actions.GROUP_UPDATE.request, updateGroupSaga); + yield takeEvery(Actions.GROUP_DELETE.request, deleteGroupSaga); + yield takeEvery(Actions.GROUP_CREATEID.request, createIdSaga); + yield takeEvery(Actions.GROUP_LIST.request, listGroupSaga); + yield takeEvery(Actions.GROUP_JOINLIST.request, groupJoinListSaga); + yield takeEvery(Actions.APPROVAL_LIST.request, aprvListSaga); + yield takeEvery(Actions.USER_LIST.request, userListSaga); + yield takeEvery(Actions.GROUP_CREATEID.request, createIdSaga); + yield takeEvery(Actions.GROUP_JOIN.request, createJoinGroupSaga); + yield takeEvery(Actions.GROUP_JOIN_UPDATE.request, updateJoinGroupSaga); + yield takeEvery(Actions.APPROVAL_UPDATE.request, updateAprvSaga); + yield takeEvery(Actions.USER_UPDATE.request, updateUserSaga); +} diff --git a/src/modules/comn/message/actions/comnMessageAction.ts b/src/modules/comn/message/actions/comnMessageAction.ts new file mode 100644 index 0000000..e6db6be --- /dev/null +++ b/src/modules/comn/message/actions/comnMessageAction.ts @@ -0,0 +1,31 @@ +import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; + +const DISPATCH_IS_ERROR = 'comn/erorr/DISPATCH_IS_ERROR'; +const DISPATCH_NOT_ERROR = 'comn/erorr/DISPATCH_NOT_ERROR'; + +const DISPATCH_IS_MESSAGE = 'comn/erorr/DISPATCH_IS_MESSAGE'; +const DISPATCH_NOT_MESSAGE = 'comn/erorr/DISPATCH_NOT_MESSAGE'; + +export const IS_MESSAGE = createAction(DISPATCH_IS_MESSAGE)<{ + messageCode: string; + message: string; + isHistoryBack: boolean; + isRefresh: boolean; +}>(); +export const ISNO_MESSAGE = createAction(DISPATCH_NOT_MESSAGE)(); + +export const IS_ERROR = createAction(DISPATCH_IS_ERROR)<{ + errorCode: string; + errorMessage: string; + isHistoryBack: boolean; + isRefresh: boolean; +}>(); +export const ISNO_ERROR = createAction(DISPATCH_NOT_ERROR)(); +const actions = { + IS_MESSAGE, + ISNO_MESSAGE, + IS_ERROR, + ISNO_ERROR +}; + +export type ComnMessageAction = ActionType; diff --git a/src/modules/comn/message/models/comnMessageModel.ts b/src/modules/comn/message/models/comnMessageModel.ts new file mode 100644 index 0000000..3d8c091 --- /dev/null +++ b/src/modules/comn/message/models/comnMessageModel.ts @@ -0,0 +1,21 @@ +export interface MessageState { + messageCode: string; + message: string; + errorMessage: string; + errorCode: string; + isError: boolean; + isMessage: boolean; + isHistoryBack: boolean; + isRefresh: boolean; +} + +export const initMessage = { + messageCode: '', + message: '', + errorMessage: '', + errorCode: '', + isError: false, + isMessage: false, + isHistoryBack: false, + isRefresh: false +}; diff --git a/src/modules/comn/message/reducers/comnMessageReducer.ts b/src/modules/comn/message/reducers/comnMessageReducer.ts new file mode 100644 index 0000000..9e33a2b --- /dev/null +++ b/src/modules/comn/message/reducers/comnMessageReducer.ts @@ -0,0 +1,49 @@ +import { createReducer } from 'typesafe-actions'; +import produce from 'immer'; + +import * as Actions from '../actions/comnMessageAction'; +import { MessageState, initMessage } from '../models/comnMessageModel'; + +export const messageReducer = createReducer< + MessageState, + Actions.ComnMessageAction +>(initMessage) + .handleAction(Actions.IS_MESSAGE, (state, action) => + produce(state, draft => { + const { messageCode, message, isHistoryBack, isRefresh } = action.payload; + draft.messageCode = messageCode; + draft.message = message; + draft.isHistoryBack = isHistoryBack; + draft.isMessage = true; + draft.isRefresh = isRefresh; + }) + ) + .handleAction(Actions.ISNO_MESSAGE, (state, action) => + produce(state, draft => { + draft.messageCode = ''; + draft.message = ''; + // draft.isHistoryBack = false; + draft.isMessage = false; + }) + ) + + .handleAction(Actions.IS_ERROR, (state, action) => + produce(state, draft => { + const { errorCode, errorMessage, isHistoryBack, isRefresh } = + action.payload; + draft.errorCode = errorCode; + draft.errorMessage = errorMessage; + draft.isHistoryBack = isHistoryBack; + draft.isError = true; + draft.isRefresh = isRefresh; + }) + ) + .handleAction(Actions.ISNO_ERROR, (state, action) => + produce(state, draft => { + // const {errorCode , errorMessage} = action.payload; + draft.errorCode = ''; + draft.errorMessage = ''; + // draft.isHistoryBack = false; + draft.isError = false; + }) + ); diff --git a/src/modules/control/gp/actions/controlGpAction.ts b/src/modules/control/gp/actions/controlGpAction.ts new file mode 100644 index 0000000..a91c0db --- /dev/null +++ b/src/modules/control/gp/actions/controlGpAction.ts @@ -0,0 +1,58 @@ +import { AxiosError } from 'axios'; +import { ActionType, createAsyncAction } from 'typesafe-actions'; +import { + ControlDetailData, + ControlGpData, + ControlGpDtlState, + ControlGpHisState, + ControlGpState +} from '../models/controlGpModel'; + +const CONTROL_GP_REQUEST = 'control/gp/CONTROL_GP_REQUEST'; +const CONTROL_GP_SUCCESS = 'control/gp/CONTROL_GP_SUCCESS'; +const CONTROL_GP_FAILURE = 'control/gp/CONTROL_GP_FAILURE'; + +const CONTROL_GP_HIS_REQUEST = 'control/gp/CONTROL_GP_HIS_REQUEST'; +const CONTROL_GP_HIS_SUCCESS = 'control/gp/CONTROL_GP_HIS_SUCCESS'; +const CONTROL_GP_HIS_FAILURE = 'control/gp/CONTROL_GP_HIS_FAILURE'; + +const CONTROL_GP_DTL_REQUEST = 'control/gp/CONTROL_GP_DTL_REQUEST'; +const CONTROL_GP_DTL_SUCCESS = 'control/gp/CONTROL_GP_DTL_SUCCESS'; +const CONTROL_GP_DTL_FAILURE = 'control/gp/CONTROL_GP_DTL_FAILURE'; + +const CONTROL_GP_RTDTL_REQUEST = 'control/gp/CONTROL_GP_RTDTL_REQUEST'; +const CONTROL_GP_RTDTL_SUCCESS = 'control/gp/CONTROL_GP_RTDTL_SUCCESS'; +const CONTROL_GP_RTDTL_FAILURE = 'control/gp/CONTROL_GP_RTDTL_FAILURE'; + +export const controlGpAction = createAsyncAction( + CONTROL_GP_REQUEST, + CONTROL_GP_SUCCESS, + CONTROL_GP_FAILURE +)(); + +export const controlGpHisAction = createAsyncAction( + CONTROL_GP_HIS_REQUEST, + CONTROL_GP_HIS_SUCCESS, + CONTROL_GP_HIS_FAILURE +)<{ id: string }, ControlGpHisState, AxiosError>(); + +export const controlGpDtlAction = createAsyncAction( + CONTROL_GP_DTL_REQUEST, + CONTROL_GP_DTL_SUCCESS, + CONTROL_GP_DTL_FAILURE +)(); + +export const controlGpRtDtlAction = createAsyncAction( + CONTROL_GP_RTDTL_REQUEST, + CONTROL_GP_RTDTL_SUCCESS, + CONTROL_GP_RTDTL_FAILURE +)(); + +const actions = { + controlGpAction, + controlGpHisAction, + controlGpDtlAction, + controlGpRtDtlAction +}; + +export type ControlGpAction = ActionType; diff --git a/src/modules/control/gp/apis/controlGpApi.ts b/src/modules/control/gp/apis/controlGpApi.ts new file mode 100644 index 0000000..020c5f2 --- /dev/null +++ b/src/modules/control/gp/apis/controlGpApi.ts @@ -0,0 +1,19 @@ +import axios from '../../../utils/customAxiosUtil'; +import { ReponseControlGpHistory } from '../models/controlGpModel'; + +export const controlGpApi = { + getHistory: async (id: string) => { + if (!id) { + console.log(' ID is Empty'); + return null; + } + const { data }: ReponseControlGpHistory = await axios.get( + `api/ctr/cntrl/history/${id}` + ); + + return data; + }, + getDetail: async (id: string) => { + return await axios.get(`api/ctr/cntrl/detail/${id}`); + } +}; diff --git a/src/modules/control/gp/index.ts b/src/modules/control/gp/index.ts new file mode 100644 index 0000000..bf918a1 --- /dev/null +++ b/src/modules/control/gp/index.ts @@ -0,0 +1,4 @@ +export * from './actions/controlGpAction'; +export * from './models/controlGpModel'; +export * from './reducers/controlGpReducer'; +export * from './sagas/controlGpSaga'; diff --git a/src/modules/control/gp/models/controlGpModel.ts b/src/modules/control/gp/models/controlGpModel.ts new file mode 100644 index 0000000..2ba5c42 --- /dev/null +++ b/src/modules/control/gp/models/controlGpModel.ts @@ -0,0 +1,90 @@ +export interface ControlGpState { + controlGpList: ControlGpData[] | undefined; +} + +export interface ControlGpHisState { + controlGpHistory: ControlGpHistoryData[] | undefined; +} + +export interface ControlGpDtlState { + controlGpDetail: ControlGpDtlData | undefined; + controlDetail: ControlDetailData | undefined; +} + +export interface ControlGpHistoryData { + objectId: String; + lat: number; + lng: number; +} + +export interface ControlDetailData { + cntrlId: string; + cntrlStDt: Date; + cntrlEndDt: Date; + arcrftSno: number; + prdctNum: string; + prdctCmpnNm: string; + wghtTypeCd: string; + imageUrl: string; + arcrftTypeCd: string; + arcrftModelNm: string; + cameraYn: string; + insrncYn: string; + stAreaNm: string; + ownerNm: string; + hpno: string; + telno: string; +} + +export interface ControlGpDtlData { + messageTypeCd: string; + controlId: string; + objectTypeCd: string; + objectId: string; + objectType: string; + betteryLevel: number; + betteryVoltage: number; + lat: number; + lng: number; + elev: number; + elevType: string; + speed: number; + speedType: string; + moveDistance: number; + moveDistanceType: string; + dronStatus: string; + controlStartDt: string; + heading: number; +} + +export interface ControlGpData { + messageTypeCd: string; + controlId: string; + objectTypeCd: string; + objectId: string; + objectType: string; + betteryLevel: number; + betteryVoltage: number; + moveDistance: number; + moveDistanceType: string; + lat: number; + lng: number; + elev: number; + elevType: string; + speed: number; + speedType: string; + dronStatus: string; + controlStartDt: string; + heading: number; +} + +export interface ReponseControlGpHistory { + data: ControlGpHistoryData[]; +} + +export const initiaResponseControlGpData = { + controlGpList: undefined, + controlGpDetail: undefined, + controlGpHistory: undefined, + controlDetail: undefined +}; diff --git a/src/modules/control/gp/reducers/controlGpReducer.ts b/src/modules/control/gp/reducers/controlGpReducer.ts new file mode 100644 index 0000000..0bfa794 --- /dev/null +++ b/src/modules/control/gp/reducers/controlGpReducer.ts @@ -0,0 +1,56 @@ +import produce from 'immer'; +import { createReducer } from 'typesafe-actions'; +import { + ControlGpAction, + controlGpAction, + controlGpDtlAction, + controlGpHisAction, + controlGpRtDtlAction +} from '../actions/controlGpAction'; +import { + ControlDetailData, + ControlGpDtlState, + ControlGpHisState, + ControlGpState, + initiaResponseControlGpData +} from '../models/controlGpModel'; + +export const controlGpReducer = createReducer( + initiaResponseControlGpData +).handleAction(controlGpAction.success, (state, action) => + produce(state, draft => { + const { controlGpList } = action.payload; + draft.controlGpList = controlGpList; + }) +); + +export const controlGpHisReducer = createReducer< + ControlGpHisState, + ControlGpAction +>(initiaResponseControlGpData).handleAction( + controlGpHisAction.success, + (state, action) => + produce(state, draft => { + const { controlGpHistory } = action.payload; + draft.controlGpHistory = controlGpHistory; + }) +); + +export const controlGpDtlReducer = createReducer< + ControlGpDtlState, + ControlGpAction +>(initiaResponseControlGpData) + .handleAction(controlGpRtDtlAction.success, (state, action) => + produce(state, draft => { + const { controlGpDetail } = action.payload; + + draft.controlGpDetail = controlGpDetail; + }) + ) + .handleAction(controlGpDtlAction.success, (state, action) => + produce(state, draft => { + const data: ControlDetailData = action.payload; + + draft.controlDetail = data; + }) + ); diff --git a/src/modules/control/gp/sagas/controlGpSaga.ts b/src/modules/control/gp/sagas/controlGpSaga.ts new file mode 100644 index 0000000..2d54802 --- /dev/null +++ b/src/modules/control/gp/sagas/controlGpSaga.ts @@ -0,0 +1,98 @@ +import { call, put, select, takeEvery } from '@redux-saga/core/effects'; +import { ActionType } from 'typesafe-actions'; +import * as Actions from '../actions/controlGpAction'; +import { controlGpApi } from '../apis/controlGpApi'; + +function* getControlGpSaga( + action: ActionType +) { + try { + // console.log("-------------------------------") + const data = action.payload; + + // console.log(">>>>>>>>>>>" , data?.length); + + yield put( + Actions.controlGpAction.success({ + controlGpList: data + }) + ); + + const state = yield select(); + + const { objectId, isClickObject } = state.controlMapReducer; + let detailData; + + if (objectId && isClickObject) { + //History 호출 + yield put(Actions.controlGpHisAction.request({ id: objectId })); + //상세 정보에서 실시간 데이터 호출 + data.map(item => { + if (item.objectId === objectId) { + detailData = item; + } + }); + + yield put(Actions.controlGpRtDtlAction.request(detailData)); + } + } catch (error) { + yield put(Actions.controlGpAction.failure(error)); + } +} + +function* getControlGpHistorySaga( + action: ActionType +) { + try { + const { id } = action.payload; + + const data = yield call(controlGpApi.getHistory, id); + // console.log('>>>>>>>1111>>>>> ', rsponse); + yield put( + Actions.controlGpHisAction.success({ + controlGpHistory: data + }) + ); + } catch (error) { + yield put(Actions.controlGpHisAction.failure(error)); + } +} + +function* controlGpRtDtlSaga( + action: ActionType +) { + try { + const controlGpDetail = action.payload; + + // console.log(controlGpDetail); + yield put( + Actions.controlGpRtDtlAction.success({ + controlDetail: undefined, + controlGpDetail: controlGpDetail + }) + ); + } catch (error) { + yield put(Actions.controlGpRtDtlAction.failure(error)); + } +} + +function* controlDtlSaga( + action: ActionType +) { + try { + const controlId = action.payload; + + const { data } = yield call(controlGpApi.getDetail, controlId); + console.log('data>>>>>>>>>>>>>>>>>>>>>', data); + yield put(Actions.controlGpDtlAction.success(data)); + } catch (error) { + yield put(Actions.controlGpRtDtlAction.failure(error)); + } +} + +export function* controlGpSaga() { + yield takeEvery(Actions.controlGpAction.request, getControlGpSaga); + yield takeEvery(Actions.controlGpHisAction.request, getControlGpHistorySaga); + yield takeEvery(Actions.controlGpRtDtlAction.request, controlGpRtDtlSaga); + yield takeEvery(Actions.controlGpDtlAction.request, controlDtlSaga); +} diff --git a/src/modules/control/map/actions/controlMapActions.ts b/src/modules/control/map/actions/controlMapActions.ts new file mode 100644 index 0000000..e12c54b --- /dev/null +++ b/src/modules/control/map/actions/controlMapActions.ts @@ -0,0 +1,16 @@ +// 지도 타입 변경 Action +export const mapTypeChangeAction = (value: any) => dispatch => + dispatch({ type: 'MAP_TYPE_CHANGE', value }); + +// 드론체 클릭 시 Action +export const objectClickAction = (value: any) => dispatch => + dispatch({ type: 'OBJECT_CLICK', value }); + +export const objectUnClickAction = () => dispatch => + dispatch({ type: 'OBEJCT_UN_CLICK' }); + +export const areaClickAction = (value: any) => dispatch => + dispatch({ type: 'AREA_CLICK', value }); + +export const sensorClickAction = (value: any) => dispatch => + dispatch({type: 'SENSOR_CLICK', value}) diff --git a/src/modules/control/map/reducers/controlMapReducer.ts b/src/modules/control/map/reducers/controlMapReducer.ts new file mode 100644 index 0000000..8993e04 --- /dev/null +++ b/src/modules/control/map/reducers/controlMapReducer.ts @@ -0,0 +1,73 @@ +// ** Initial State +const initialState = { + mapType: 'HYBRID', + objectId: null, + isClickObject: false, + area0001: true, // 비행금지 구역 + area0002: true, // 비행제한 구역 + area0003: true, // 관제권(공항) + area0004: true, // 비행장(군사) + area0005: true, // 이착륙장(RC비행장) + area0006: true, // 초경량비행장치 + sensor: 'dust' +}; + +const controlReducerReducer = (state = initialState, action) => { + switch (action.type) { + case 'MAP_TYPE_CHANGE': + return {...state, mapType: action.value}; + + case 'OBJECT_CLICK': + return {...state, objectId: action.value, isClickObject: true}; + + case 'OBEJCT_UN_CLICK': + return {...state, isClickObject: false}; + + case 'AREA_CLICK': + if (action.value === '0001') { + return { + ...state, + area0001: !state.area0001 + }; + } else if (action.value === '0002') { + return { + ...state, + area0002: !state.area0002 + }; + } else if (action.value === '0003') { + return { + ...state, + area0003: !state.area0003 + }; + } else if (action.value === '0004') { + return { + ...state, + area0004: !state.area0004 + }; + } else if (action.value === '0005') { + return { + ...state, + area0005: !state.area0005 + }; + } else if (action.value === '0006') { + return { + ...state, + area0006: !state.area0006 + }; + } else { + return { + state + }; + } + case 'SENSOR_CLICK': + return { + ...state, + sensor: action.value + } + break; + default: + return state; + } +}; + +export default controlReducerReducer; diff --git a/src/modules/index.ts b/src/modules/index.ts new file mode 100644 index 0000000..c9c5152 --- /dev/null +++ b/src/modules/index.ts @@ -0,0 +1,39 @@ +// base +import { combineReducers } from 'redux'; +import { all, fork } from 'redux-saga/effects'; +import { controlGpReducer, controlGpSaga, ControlGpState } from './control/gp'; + + +import auth from "../redux/reducers/auth/"; + + + +export interface StoreState { + controlGpState : ControlGpState; +} + +export function* saga() { + yield all([ + fork(controlGpSaga), + + ]); +} + +const reducer = combineReducers({ + auth : auth, + controlGpState: controlGpReducer, + +}) + +// const reducer = (history: History) => +// combineReducers({ +// router: connectRouter(history), +// controlGpState: controlGpReducer, +// comnAuthState : comnAuthReducer, +// // customizerState : customizerReducer, +// }); + + + +export default reducer; + diff --git a/src/modules/main/dash/actions/mainDashAction.ts b/src/modules/main/dash/actions/mainDashAction.ts new file mode 100644 index 0000000..3bdcea7 --- /dev/null +++ b/src/modules/main/dash/actions/mainDashAction.ts @@ -0,0 +1,57 @@ +import { AxiosError } from 'axios'; +import { ActionType, createAsyncAction } from 'typesafe-actions'; +import { + DronListData, + GroupListData, + StcsAreaData, + StcsDayData +} from '../models/mainDashModel'; + +const STCS_DAY_REQUEST = 'main/dash/STCS_DAY_REQUEST'; +const STCS_DAY_SUCCESS = 'main/dash/STCS_DAY_SUCCESS'; +const STCS_DAY_FAILURE = 'main/dash/STCS_DAY_FAILURE'; + +const STCS_AREA_REQUEST = 'main/dash/STCS_AREA_REQUEST'; +const STCS_AREA_SUCCESS = 'main/dash/STCS_AREA_SUCCESS'; +const STCS_AREA_FAILURE = 'main/dash/STCS_AREA_FAILURE'; + +const GROUP_LIST_REQUEST = 'main/dash/GROUP_LIST_REQUEST'; +const GROUP_LIST_SUCCESS = 'main/dash/GROUP_LIST_SUCCESS'; +const GROUP_LIST_FAILURE = 'main/dash/GROUP_LIST_FAILURE'; + +const DRON_LIST_REQUEST = 'main/dash/DRON_LIST_REQUEST'; +const DRON_LIST_SUCCESS = 'main/dash/DRON_LIST_SUCCESS'; +const DRON_LIST_FAILURE = 'main/dash/DRON_LIST_FAILURE'; + +export const STCS_DAY = createAsyncAction( + STCS_DAY_REQUEST, + STCS_DAY_SUCCESS, + STCS_DAY_FAILURE +)(); + +export const STCS_AREA = createAsyncAction( + STCS_AREA_REQUEST, + STCS_AREA_SUCCESS, + STCS_AREA_FAILURE +)(); + +export const GROUP_LIST = createAsyncAction( + GROUP_LIST_REQUEST, + GROUP_LIST_SUCCESS, + GROUP_LIST_FAILURE +)(); + +export const DRON_LIST = createAsyncAction( + DRON_LIST_REQUEST, + DRON_LIST_SUCCESS, + DRON_LIST_FAILURE +)(); + +const actions = { + STCS_DAY, + STCS_AREA, + GROUP_LIST, + DRON_LIST +}; + +export type MainDashAction = ActionType; diff --git a/src/modules/main/dash/apis/mainDashApi.ts b/src/modules/main/dash/apis/mainDashApi.ts new file mode 100644 index 0000000..7f1b539 --- /dev/null +++ b/src/modules/main/dash/apis/mainDashApi.ts @@ -0,0 +1,35 @@ +import qs from 'qs'; +import axios from '../../../utils/customAxiosUtil'; + +export const mainDashAPI = { + stcsDay: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/main/dash/stcs/day${queryString}`); + }, + stcsArea: async (data: string) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/main/dash/stcs/area${queryString}`); + }, + + groupList: async (data: number) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/main/dash/group/list${queryString}`); + }, + + dronList: async (data: number) => { + const queryString = qs.stringify(data, { + addQueryPrefix: true, + arrayFormat: 'repeat' + }); + return await axios.get(`api/main/dash/arcrft/list${queryString}`); + } +}; diff --git a/src/modules/main/dash/models/mainDashModel.ts b/src/modules/main/dash/models/mainDashModel.ts new file mode 100644 index 0000000..590f795 --- /dev/null +++ b/src/modules/main/dash/models/mainDashModel.ts @@ -0,0 +1,36 @@ +export interface MainDashState { + stcsDayList: StcsDayData[] | undefined; + stcsAreaList: StcsAreaData[] | undefined; + groupList: GroupListData[] | undefined; + dronList: DronListData[] | undefined; +} + +export interface StcsDayData { + typeCd: string; + count: number; +} + +export interface StcsAreaData { + typeCd: string; + count: number; +} + +export interface GroupListData { + groupNm: string; + groupId: string; + joinDt: Date; + createDt: Date; +} + +export interface DronListData { + arcrftModelNm: string; + prdctNum: string; + createDt: Date; +} + +export const initMainDash = { + stcsDayList: undefined, + stcsAreaList: undefined, + groupList: undefined, + dronList: undefined +}; diff --git a/src/modules/main/dash/reducers/mainDashReducer.ts b/src/modules/main/dash/reducers/mainDashReducer.ts new file mode 100644 index 0000000..ad58d67 --- /dev/null +++ b/src/modules/main/dash/reducers/mainDashReducer.ts @@ -0,0 +1,34 @@ +import produce from 'immer'; +import { createReducer } from 'typesafe-actions'; +import * as Actions from '../actions/mainDashAction'; +import { initMainDash, MainDashState } from '../models/mainDashModel'; + +export const mainDahReducer = createReducer< + MainDashState, + Actions.MainDashAction +>(initMainDash) + .handleAction(Actions.STCS_DAY.success, (state, action) => + produce(state, draft => { + const { data } = action.payload; + draft.stcsDayList = data; + }) + ) + .handleAction(Actions.STCS_AREA.success, (state, action) => + produce(state, draft => { + const { data } = action.payload; + draft.stcsAreaList = data; + }) + ) + .handleAction(Actions.GROUP_LIST.success, (state, action) => + produce(state, draft => { + const { data } = action.payload; + draft.groupList = data; + }) + ) + + .handleAction(Actions.DRON_LIST.success, (state, action) => + produce(state, draft => { + const { data } = action.payload; + draft.dronList = data; + }) + ); diff --git a/src/modules/main/dash/sagas/mainDashSaga.ts b/src/modules/main/dash/sagas/mainDashSaga.ts new file mode 100644 index 0000000..8033d45 --- /dev/null +++ b/src/modules/main/dash/sagas/mainDashSaga.ts @@ -0,0 +1,128 @@ +import { call, put, takeEvery } from '@redux-saga/core/effects'; +import { ActionType } from 'typesafe-actions'; +import * as MessageActions from '../../../comn/message/actions/comnMessageAction'; +import * as Actions from '../actions/mainDashAction'; +import * as Apis from '../apis/mainDashApi'; + +function* listStcsDay(action: ActionType) { + try { + const params = action.payload; + const res = yield call(Apis.mainDashAPI.stcsDay, params); + const { data, count, errorCode, errorMessage } = res; + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put( + Actions.STCS_DAY.success({ + data: data + }) + ); + } catch (error) { + yield put(Actions.STCS_DAY.failure(error)); + } +} + +function* listStcsArea(action: ActionType) { + try { + const params = action.payload; + const res = yield call(Apis.mainDashAPI.stcsArea, params); + const { data, count, errorCode, errorMessage } = res; + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put( + Actions.STCS_AREA.success({ + data: data + }) + ); + } catch (error) { + yield put(Actions.STCS_AREA.failure(error)); + } +} + +function* listGroup(action: ActionType) { + try { + const params = action.payload; + const res = yield call(Apis.mainDashAPI.groupList, params); + const { data, count, errorCode, errorMessage } = res; + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put( + Actions.GROUP_LIST.success({ + data: data + }) + ); + } catch (error) { + yield put(Actions.GROUP_LIST.failure(error)); + } +} + +function* listDron(action: ActionType) { + try { + const params = action.payload; + const res = yield call(Apis.mainDashAPI.dronList, params); + const { data, count, errorCode, errorMessage } = res; + console.log('errorCode>>>>>>>>>>>>>>>>>', errorCode); + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생 하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put( + Actions.DRON_LIST.success({ + data: data + }) + ); + } catch (error) { + yield put(Actions.DRON_LIST.failure(error)); + } +} + +export function* mainDashSaga() { + yield takeEvery(Actions.STCS_DAY.request, listStcsDay); + yield takeEvery(Actions.STCS_AREA.request, listStcsArea); + yield takeEvery(Actions.GROUP_LIST.request, listGroup); + yield takeEvery(Actions.DRON_LIST.request, listDron); +} diff --git a/src/modules/menu/actions/menuAction.ts b/src/modules/menu/actions/menuAction.ts new file mode 100644 index 0000000..2cce19d --- /dev/null +++ b/src/modules/menu/actions/menuAction.ts @@ -0,0 +1,13 @@ +import { AxiosError } from 'axios'; +import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; +import { MenuModelState } from '../models/menuModel'; + +const DISPATH_TOP_MENU = 'menu/DISPATH_TOP_MENU'; + +export const dispatchTopMenu = createAction(DISPATH_TOP_MENU)(); + +const actions = { + dispatchTopMenu +}; + +export type MenuAction = ActionType; diff --git a/src/modules/menu/models/menuModel.ts b/src/modules/menu/models/menuModel.ts new file mode 100644 index 0000000..1d0088e --- /dev/null +++ b/src/modules/menu/models/menuModel.ts @@ -0,0 +1,7 @@ +export interface MenuModelState { + topMenuCd: string; +} + +export const initMenuModel = { + topMenuCd: 'basis' +}; diff --git a/src/modules/menu/reducers/menuReducer.ts b/src/modules/menu/reducers/menuReducer.ts new file mode 100644 index 0000000..1043402 --- /dev/null +++ b/src/modules/menu/reducers/menuReducer.ts @@ -0,0 +1,22 @@ +import { createReducer } from 'typesafe-actions'; +import produce from 'immer'; + +import * as Actions from '../actions/menuAction'; +import { MenuModelState, initMenuModel } from '../models/menuModel'; + +export const menuReducer = createReducer( + initMenuModel +).handleAction(Actions.dispatchTopMenu, (state, action) => + produce(state, draft => { + const topMenuCd = action.payload; + draft.topMenuCd = topMenuCd; + }) +); +// .handleAction(Actions.termsList.success, (state, action) => +// produce(state, draft => { +// const res = action.payload; +// draft.termsList = res; +// console.log(res); +// // draft.terms = res; +// }) +// ); diff --git a/src/modules/models/ComnModel.ts b/src/modules/models/ComnModel.ts new file mode 100644 index 0000000..4507f1d --- /dev/null +++ b/src/modules/models/ComnModel.ts @@ -0,0 +1,20 @@ +export interface SearchModel { + stDate: string; + endDate: string; + search1: string; + searchType1: string; +} + +export interface DefaultSeachModel { + siteCd: string; + langDivCd: string; +} + +export interface ResponseModel { + res: []; +} + +export interface ErrorModel { + errorMessage: string; + errorCode: string; +} diff --git a/src/modules/utils/customAxiosUtil.ts b/src/modules/utils/customAxiosUtil.ts new file mode 100644 index 0000000..0ad92fc --- /dev/null +++ b/src/modules/utils/customAxiosUtil.ts @@ -0,0 +1,61 @@ +import axios from 'axios'; +import { HOST } from '../../configs/constants'; +import * as Actions from '../../modules/account/login/actions/authAction'; +import { getAccessToken } from '../account/login/service/jwtTokenUtil'; +import { store } from './../../redux/storeConfig/store'; + +// import { createJWTToken, getToken } from './authenticationUtils'; +// import { logout } from '../utils/authenticationUtils'; + +const clientInstance = axios.create({ + // TODO 추후 proxy 설정 풀고 서버측 cross-origin 해제(security로 가능) + baseURL: HOST +}); + +clientInstance.interceptors.request.use( + async config => { + let accessToken = await getAccessToken(); + + config.headers['Authorization'] = accessToken; + // alert(JSON.stringify(config.headers)); + return config; + }, + error => { + console.log(error); + return Promise.reject(error); + } +); + +clientInstance.interceptors.response.use( + response => { + // console.log('res>>', response); + // if (response.data.errCode < 0) { + // alert('서버 처리중 오류가 발생 하였습니다.'); + // } + + return response.data; + }, + error => { + // console.log('Error >> ', error); + const message = error?.message || ''; + + const name = error?.name || ''; + + // console.log('res>>>>>>>>', error?.response); + // console.log('status>>>>>>>>', error?.response?.status); + + if (error?.response?.status == 401) { + // alert('인증정보가 없습니다. 다시 로그인 해주세요.'); + // window.location.href = '/account/login'; + store.dispatch(Actions.logout.request()); + } else { + console.log('서버 응답에 실패 하였습니다.'); + } + + return Promise.reject(error); + } +); + +// clientInstance.CancelToken = axios.CancelToken; + +export default clientInstance; diff --git a/src/navigation/analysis/index.js b/src/navigation/analysis/index.js new file mode 100644 index 0000000..ac76911 --- /dev/null +++ b/src/navigation/analysis/index.js @@ -0,0 +1,39 @@ +//시스템 관리 메뉴 +export default [ + { + id: 'analysis_001', + title: '비행 이력 시스템', + navLink: '#' + }, + { + id: 'analysis_001_01', + title: '비행이력 관리', + children: [ + { + id: 'analysis_001_01_01', + title: '비행이력 현황', + navLink: '/analysis/history/list' + }, + { + id: 'analysis_001_01_02', + title: '비행 시뮬레이션', + navLink: '/analysis/simulation/index', + newTab: true + // navLink: '/analysis/simulation/index' + } + ], + navLink: '#' + } + // { + // id: 'analysis_001_02', + // title: '분석 관리', + // children: [ + // { + // id: 'analysis_001_02_01', + // title: '비행 분석관리', + // navLink: '#' + // } + // ], + // navLink: '#' + // } +]; diff --git a/src/navigation/basis/index.js b/src/navigation/basis/index.js new file mode 100644 index 0000000..850a6e8 --- /dev/null +++ b/src/navigation/basis/index.js @@ -0,0 +1,49 @@ +//시스템 관리 메뉴 +export default [ + { + id: 'basis_001', + title: '기초 정보관리', + navLink: '#', + type: 'dropdown' + }, + { + id: 'basis_001_01', + type: 'dropdown', + title: '그룹 관리', + children: [ + { + id: 'basis_001_01_01', + type: 'item', + title: '나의 그룹', + navLink: '/basis/group/index' + }, + { + id: 'basis_001_01_02', + type: 'item', + title: '승인 관리', + navLink: '/basis/group/approval/index' + }, + { + id: 'basis_001_01_03', + type: 'item', + title: '사용자 관리', + navLink: '/basis/group/users/index' + } + ], + navLink: '#' + }, + { + id: 'basis_001_02', + type: 'dropdown', + title: '기체 관리', + children: [ + { + id: 'basis_001_02_01', + type: 'item', + title: '기체 목록', + navLink: '/basis/dron/index' + } + ], + navLink: '#' + } +]; diff --git a/src/navigation/horizontal/index.js b/src/navigation/horizontal/index.js new file mode 100644 index 0000000..b94c994 --- /dev/null +++ b/src/navigation/horizontal/index.js @@ -0,0 +1,16 @@ +import { Mail, Home } from 'react-feather' + +export default [ + { + id: 'home', + title: 'Home', + icon: , + navLink: '/home' + }, + { + id: 'secondPage', + title: 'Second Page', + icon: , + navLink: '/second-page' + } +] diff --git a/src/navigation/statics/index.js b/src/navigation/statics/index.js new file mode 100644 index 0000000..cdea670 --- /dev/null +++ b/src/navigation/statics/index.js @@ -0,0 +1,32 @@ +//시스템 관리 메뉴 +export default [ + { + id: 'statics_001', + title: '통계 정보관리', + navLink: '#' + }, + { + id: 'statics_001_01', + title: '비행 통계', + children: [ + { + id: 'statics_001_01_-1', + title: '비행 통계 차트', + navLink: '/sys/code/sample1' + } + ], + navLink: '#' + }, + { + id: 'statics_001_02', + title: '기체 통계', + children: [ + { + id: 'statics_001_02_01', + title: '기체 통계 차트', + navLink: '#' + } + ], + navLink: '#' + } +]; diff --git a/src/navigation/system/index.js b/src/navigation/system/index.js new file mode 100644 index 0000000..4ec2ecc --- /dev/null +++ b/src/navigation/system/index.js @@ -0,0 +1,53 @@ +export default [ + { + id: 'system_001', + title: '시스템 관리', + navLink: '#' + }, + { + id: 'system_001_01', + title: '코드 정보 관리', + children: [ + { + id: 'system_001_01_02', + title: '코드 관리', + navLink: '/system/code/index' + } + ], + navLink: '#' + }, + { + id: 'system_001_02', + title: '메뉴/권한 관리', + children: [ + { + id: 'system_001_02_01', + title: '메뉴 관리', + navLink: '/system/menu/index' + }, + { + id: 'system_001_02_02', + title: '권한 권리', + navLink: '/system/auth/index' + }, + { + id: 'system_001_02_03', + title: '권한 별 메뉴 관리', + navLink: '/system/auth/menu/index' + } + ], + navLink: '#' + }, + { + id: 'system_001_03', + title: '사용자 관리', + children: [ + { + id: 'system_001_03_01', + title: '사용자 관리', + navLink: '/system/user/index' + } + ], + navLink: '#' + } +]; diff --git a/src/navigation/vertical/index.js b/src/navigation/vertical/index.js new file mode 100644 index 0000000..c49575a --- /dev/null +++ b/src/navigation/vertical/index.js @@ -0,0 +1,199 @@ +import { + Mail, + Home, + Copy, + Circle, + Box, + Package, + CheckCircle, + RotateCw +} from 'react-feather'; + +// //기초 정보 관리 메뉴 +// export default [ +// { +// id: 'sub_menu01', +// title: '기초 정보 관리', +// navLink: '#' +// }, +// { +// id: 'menu01_1', +// title: '그룹 관리', +// children: [ +// { +// id: 'menu01_1_1', +// title: '그룹 목록', +// navLink: '/mypage/group/sample1' +// }, +// { +// id: 'menu01_1_2', +// title: '승인 관리', +// navLink: '/mypage/group/sample4' +// }, +// { +// id: 'menu01_1_3', +// title: '관리자 관리', +// navLink: '/mypage/group/sample6' +// } +// ], +// navLink: '#' +// }, +// { +// id: 'menu01_2', +// title: '기체 관리', +// children: [ +// { +// id: 'menu01_2_1', +// title: '기체 등록', +// navLink: '/mypage/group/sample8' +// } +// ], +// navLink: '#' +// }, +// { +// id: 'menu01_3', +// title: '내 정보', +// children: [ +// { +// id: 'menu01_3_1', +// title: '내정보 수정', +// navLink: '/mypage/myinfo/sample1' +// } +// ], +// navLink: '#' +// } +// ] +// //----기초 정보 관리 메뉴 끝 + +//시스템 관리 메뉴 +export default [ + { + id: 'sub_menu02', + title: '시스템 관리', + navLink: '#' + }, + { + id: 'menu02_1', + title: '코드 정보 관리', + children: [ + { + id: 'menu02_1_1', + title: '그룹 코드 관리', + navLink: '/sys/code/sample1' + }, + { + id: 'menu02_1_2', + title: '코드 관리', + navLink: '/sys/code/sample3' + } + ], + navLink: '#' + }, + { + id: 'menu02_2', + title: '메뉴/권한 관리', + children: [ + { + id: 'menu02_2_1', + title: '메뉴 관리', + navLink: '#' + }, + { + id: 'menu02_2_2', + title: '권한 권리', + navLink: '#' + }, + { + id: 'menu02_2_3', + title: '권한 별 메뉴 관리', + navLink: '#' + } + ], + navLink: '#' + }, + { + id: 'menu02_3', + title: '사용자 관리', + children: [ + { + id: 'menu02_3_1', + title: '사용자 관리', + navLink: '#' + }, + { + id: 'menu02_3_2', + title: '관리자 관리', + navLink: '#' + }, + { + id: 'menu02_3_3', + title: '그룹 관리', + navLink: '#' + } + ], + navLink: '#' + } +]; +//----시스템 관리 메뉴 끝 + +// //통계 메뉴 +// export default [ +// { +// id: 'sub_menu03', +// title: '통계', +// navLink: '#' +// }, +// { +// id: 'menu03_1', +// title: '지역 별 통계', +// navLink: '#' +// }, +// { +// id: 'menu03_2', +// title: '사용자 별 통계', +// navLink: '#' +// }, +// { +// id: 'menu03_3', +// title: '그룹 별 통계', +// navLink: '#' +// }, +// { +// id: 'menu03_4', +// title: '드론 별 통계', +// navLink: '#' +// } +// ] +// //----통계 메뉴 끝 + +//분석,이력 시스템 메뉴 +// export default [ +// { +// id: 'sub_menu04', +// title: '분석/이력관리 시스템', +// navLink: '#' +// }, +// { +// id: 'menu04_1', +// title: '비행 이력', +// children: [ +// { +// id: 'menu04_1_1', +// title: '비행 이력 현황', +// navLink: '/history/record/sample1' +// }, +// { +// id: 'menu04_1_2', +// title: '비행 이력 상세', +// navLink: '/history/record/sample2' +// }, +// { +// id: 'menu04_1_3', +// title: '비행 Simulation', +// navLink: '/history/record/sample3' +// } +// ], +// navLink: '#' +// } +// ] +//----분석,이력 시스템 메뉴 끝 diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/redux/actions/auth/index.js b/src/redux/actions/auth/index.js new file mode 100644 index 0000000..097224d --- /dev/null +++ b/src/redux/actions/auth/index.js @@ -0,0 +1,34 @@ +// ** UseJWT import to get config +import useJwt from '@src/auth/jwt/useJwt' + +const config = useJwt.jwtConfig + +// ** Handle User Login +export const handleLogin = data => { + return dispatch => { + dispatch({ + type: 'LOGIN', + data, + config, + [config.storageTokenKeyName]: data[config.storageTokenKeyName], + [config.storageRefreshTokenKeyName]: data[config.storageRefreshTokenKeyName] + }) + + // ** Add to user, accessToken & refreshToken to localStorage + localStorage.setItem('userData', JSON.stringify(data)) + localStorage.setItem(config.storageTokenKeyName, JSON.stringify(data.accessToken)) + localStorage.setItem(config.storageRefreshTokenKeyName, JSON.stringify(data.refreshToken)) + } +} + +// ** Handle User Logout +export const handleLogout = () => { + return dispatch => { + dispatch({ type: 'LOGOUT', [config.storageTokenKeyName]: null, [config.storageRefreshTokenKeyName]: null }) + + // ** Remove user, accessToken & refreshToken from localStorage + localStorage.removeItem('userData') + localStorage.removeItem(config.storageTokenKeyName) + localStorage.removeItem(config.storageRefreshTokenKeyName) + } +} diff --git a/src/redux/actions/layout/index.js b/src/redux/actions/layout/index.js new file mode 100644 index 0000000..9d28e49 --- /dev/null +++ b/src/redux/actions/layout/index.js @@ -0,0 +1,11 @@ +// ** Handles Layout Content Width (full / boxed) +export const handleContentWidth = value => dispatch => dispatch({ type: 'HANDLE_CONTENT_WIDTH', value }) + +// ** Handles Menu Collapsed State (Bool) +export const handleMenuCollapsed = value => dispatch => dispatch({ type: 'HANDLE_MENU_COLLAPSED', value }) + +// ** Handles Menu Hidden State (Bool) +export const handleMenuHidden = value => dispatch => dispatch({ type: 'HANDLE_MENU_HIDDEN', value }) + +// ** Handles RTL (Bool) +export const handleRTL = value => dispatch => dispatch({ type: 'HANDLE_RTL', value }) diff --git a/src/redux/actions/navbar/Index.js b/src/redux/actions/navbar/Index.js new file mode 100644 index 0000000..800b344 --- /dev/null +++ b/src/redux/actions/navbar/Index.js @@ -0,0 +1,26 @@ +import axios from 'axios' + +// ** Get Bookmarks Array from @fakeDB +export const getBookmarks = () => { + return dispatch => { + return axios.get('/api/bookmarks/data').then(response => { + dispatch({ + type: 'GET_BOOKMARKS', + data: response.data.suggestions, + bookmarks: response.data.bookmarks + }) + }) + } +} + +// ** Update & Get Updated Bookmarks Array +export const updateBookmarked = id => { + return dispatch => { + return axios.post('/api/bookmarks/update', { id }).then(() => { + dispatch({ type: 'UPDATE_BOOKMARKED', id }) + }) + } +} + +// ** Handle Bookmarks & Main Search Queries +export const handleSearchQuery = val => dispatch => dispatch({ type: 'HANDLE_SEARCH_QUERY', val }) diff --git a/src/redux/reducers/auth/index.js b/src/redux/reducers/auth/index.js new file mode 100644 index 0000000..df4afd3 --- /dev/null +++ b/src/redux/reducers/auth/index.js @@ -0,0 +1,26 @@ +// ** Initial State +const initialState = { + userData: {} +}; + +const authReducer = (state = initialState, action) => { + switch (action.type) { + case 'LOGIN': + return { + ...state, + userData: action.data, + [action.config.storageTokenKeyName]: + action[action.config.storageTokenKeyName], + [action.config.storageRefreshTokenKeyName]: + action[action.config.storageRefreshTokenKeyName] + }; + case 'LOGOUT': + const obj = { ...action }; + delete obj.type; + return { ...state, userData: {}, ...obj }; + default: + return state; + } +}; + +export default authReducer; diff --git a/src/redux/reducers/layout/index.js b/src/redux/reducers/layout/index.js new file mode 100644 index 0000000..81cfe4b --- /dev/null +++ b/src/redux/reducers/layout/index.js @@ -0,0 +1,35 @@ +// ** ThemeConfig Import +import themeConfig from '@configs/themeConfig' + +// ** Returns Initial Menu Collapsed State +const initialMenuCollapsed = () => { + const item = window.localStorage.getItem('menuCollapsed') + //** Parse stored json or if none return initialValue + return item ? JSON.parse(item) : themeConfig.layout.menu.isCollapsed +} + +// ** Initial State +const initialState = { + isRTL: themeConfig.layout.isRTL, + menuCollapsed: initialMenuCollapsed(), + menuHidden: themeConfig.layout.menu.isHidden, + contentWidth: themeConfig.layout.contentWidth +} + +const layoutReducer = (state = initialState, action) => { + switch (action.type) { + case 'HANDLE_CONTENT_WIDTH': + return { ...state, contentWidth: action.value } + case 'HANDLE_MENU_COLLAPSED': + window.localStorage.setItem('menuCollapsed', action.value) + return { ...state, menuCollapsed: action.value } + case 'HANDLE_MENU_HIDDEN': + return { ...state, menuHidden: action.value } + case 'HANDLE_RTL': + return { ...state, isRTL: action.value } + default: + return state + } +} + +export default layoutReducer diff --git a/src/redux/reducers/navbar/index.js b/src/redux/reducers/navbar/index.js new file mode 100644 index 0000000..8e04be2 --- /dev/null +++ b/src/redux/reducers/navbar/index.js @@ -0,0 +1,46 @@ +// ** Initial State +const initialState = { + suggestions: [], + bookmarks: [], + query: '', + headerMenu: 'basis' +}; + +const navbarReducer = (state = initialState, action) => { + switch (action.type) { + case 'HANDLE_SEARCH_QUERY': + return { ...state, query: action.val }; + case 'GET_BOOKMARKS': + return { + ...state, + suggestions: action.data, + bookmarks: action.bookmarks + }; + case 'UPDATE_BOOKMARKED': + let objectToUpdate; + + // ** find & update object + state.suggestions.find(item => { + if (item.id === action.id) { + item.isBookmarked = !item.isBookmarked; + objectToUpdate = item; + } + }); + case 'CLICK_HEADER_MENU': + console.log('action>>>>', action); + // ** Get index to add or remove bookmark from array + const bookmarkIndex = state.bookmarks.findIndex(x => x.id === action.id); + + if (bookmarkIndex === -1) { + state.bookmarks.push(objectToUpdate); + } else { + state.bookmarks.splice(bookmarkIndex, 1); + } + + return { ...state }; + default: + return state; + } +}; + +export default navbarReducer; diff --git a/src/redux/reducers/rootReducer.ts b/src/redux/reducers/rootReducer.ts new file mode 100644 index 0000000..a801d00 --- /dev/null +++ b/src/redux/reducers/rootReducer.ts @@ -0,0 +1,67 @@ +// ** Redux Imports +import { combineReducers } from 'redux'; +import { all, fork } from 'redux-saga/effects'; +import { authReducer } from '../../modules/account/login/reducers/authReducer'; +import { authSaga } from '../../modules/account/login/sagas/authSaga'; +import { accountReducer } from '../../modules/account/register/reducers/accountReducer'; +import { accountSaga } from '../../modules/account/register/sagas/accountSaga'; +import { analysisHistoryReducer } from '../../modules/analysis/history/reducers/analysisHitoryReducer'; +import { analysisHistorySaga } from '../../modules/analysis/history/sagas/analysisHistorySaga'; +import { analysisSimulatorReducer } from '../../modules/analysis/simulation/reducers/analysisSimulatorReducer'; +import { analysisSimulatorSaga } from '../../modules/analysis/simulation/sagas/analysisSimulatorSaga'; +import { dronReducer } from '../../modules/basis/dron/reducers/basisDronReducer'; +import { dronSaga } from '../../modules/basis/dron/sagas/basisDronSaga'; +import { groupReducer } from '../../modules/basis/group/reducers/basisGroupReducer'; +import { basGroupSaga } from '../../modules/basis/group/sagas/basisGroupSaga'; +import { messageReducer } from '../../modules/comn/message/reducers/comnMessageReducer'; +import { + controlGpDtlReducer, + controlGpHisReducer, + controlGpReducer, + controlGpSaga, + ControlGpState +} from '../../modules/control/gp'; +import controlMapReducer from '../../modules/control/map/reducers/controlMapReducer'; +import { mainDahReducer } from '../../modules/main/dash/reducers/mainDashReducer'; +import { mainDashSaga } from '../../modules/main/dash/sagas/mainDashSaga'; +import { menuReducer } from '../../modules/menu/reducers/menuReducer'; +// ** Reducers Imports +import auth from './auth'; +import layout from './layout'; +import navbar from './navbar'; + +export interface StoreState { + controlGpState: ControlGpState; +} + +export function* saga() { + yield all([fork(mainDashSaga)]); + yield all([fork(controlGpSaga)]); + yield all([fork(analysisHistorySaga)]); + yield all([fork(accountSaga)]); + yield all([fork(authSaga)]); + yield all([fork(basGroupSaga)]); + yield all([fork(dronSaga)]); + yield all([fork(analysisSimulatorSaga)]); +} + +const rootReducer = combineReducers({ + auth, + navbar, + layout, + controlMapReducer, + mainDashState: mainDahReducer, + messageState: messageReducer, + groupState: groupReducer, + dronState: dronReducer, + authState: authReducer, + accountState: accountReducer, + controlGpState: controlGpReducer, + controlGpHisState: controlGpHisReducer, + controlGpDtlState: controlGpDtlReducer, + menuState: menuReducer, + analysisHistoryState: analysisHistoryReducer, + analysisSimulatorState: analysisSimulatorReducer +}); + +export default rootReducer; diff --git a/src/redux/storeConfig/store.ts b/src/redux/storeConfig/store.ts new file mode 100644 index 0000000..7841811 --- /dev/null +++ b/src/redux/storeConfig/store.ts @@ -0,0 +1,35 @@ +// ** Redux, Thunk & Root Reducer Imports +import thunk from 'redux-thunk'; +import createDebounce from 'redux-debounced'; +import rootReducer, { saga } from '../reducers/rootReducer'; +import { createStore, applyMiddleware, compose } from 'redux'; +import createSagaMiddleware from 'redux-saga'; + +// ** init middleware + +export const sagaMiddleware = createSagaMiddleware(); +const middlewares = [sagaMiddleware, createDebounce() , thunk] + + + +// const middleware = [thunk, createDebounce()]; + +// ** Dev Tools +declare global { + interface Window { + __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose; + } +} + +const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; + + +// ** Create store +const store = createStore( + rootReducer, + {}, + composeEnhancers(applyMiddleware(...middlewares)) +); +sagaMiddleware.run(saga); + +export { store }; diff --git a/src/router/Router.js b/src/router/Router.js new file mode 100644 index 0000000..f485cc2 --- /dev/null +++ b/src/router/Router.js @@ -0,0 +1,179 @@ +import { useLayout } from '@hooks/useLayout'; +import { useRouterTransition } from '@hooks/useRouterTransition'; +import BlankLayout from '@layouts/BlankLayout'; +import LayoutWrapper from '@layouts/components/layout-wrapper'; +import HeaderLayout from '@layouts/HeaderLayout'; +import HorizontalLayout from '@src/layouts/HorizontalLayout'; +import VerticalLayout from '@src/layouts/VerticalLayout'; +import { lazy, Suspense, useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { + BrowserRouter as AppRouter, + Redirect, + Route, + Switch +} from 'react-router-dom'; +import * as Actions from '../modules/account/login/actions/authAction'; +import { Routes } from './routes'; + +const Router = () => { + const [layout, setLayout] = useLayout(); + const [transition, setTransition] = useRouterTransition(); + const { isLogin } = useSelector(state => state.authState); + // const isLogin = true; + const dispatch = useDispatch(); + + useEffect(() => { + console.log('isLogin>>>>>>>>', isLogin); + if (!isLogin) { + dispatch(Actions.check.request()); + } + }, [isLogin]); + + const DefaultLayout = + layout === 'horizontal' ? 'HorizontalLayout' : 'VerticalLayout'; + + const Layouts = { + BlankLayout, + VerticalLayout, + HorizontalLayout, + HeaderLayout + }; + + const currentActiveItem = null; + + const LayoutRoutesAndPaths = layout => { + const LayoutRoutes = []; + const LayoutPaths = []; + + if (Routes) { + Routes.filter(route => { + if ( + route.layout === layout || + (route.layout === undefined && DefaultLayout === layout) + ) { + LayoutRoutes.push(route); + LayoutPaths.push(route.path); + } + }); + } + + return { LayoutRoutes, LayoutPaths }; + }; + + const NotAuthorized = lazy(() => import('@src/views/NotAuthorized')); + + const Error = lazy(() => import('@src/views/Error')); + + const FinalRoute = props => { + const route = props.route; + let action, resource; + + if (route.meta) { + action = route.meta.action ? route.meta.action : null; + resource = route.meta.resource ? route.meta.resource : null; + } + + if (isLogin === false && !route.meta?.authRoute) { + return ; + } else { + return ; + } + }; + + const ResolveRoutes = () => { + return Object.keys(Layouts).map((layout, index) => { + const LayoutTag = Layouts[layout]; + + const { LayoutRoutes, LayoutPaths } = LayoutRoutesAndPaths(layout); + const routerProps = {}; + + return ( + + + + {LayoutRoutes.map(route => { + return ( + { + Object.assign(routerProps, { + ...props, + meta: route.meta + }); + + return ( + + + + + + ); + }} + /> + ); + })} + + + + ); + }); + }; + + return ( + + + { + return ; + }} + /> + + ( + + + + )} + /> + {ResolveRoutes()} + + + + + ); +}; + +export default Router; diff --git a/src/router/routes/RouteAccount.js b/src/router/routes/RouteAccount.js new file mode 100644 index 0000000..bc2cc1d --- /dev/null +++ b/src/router/routes/RouteAccount.js @@ -0,0 +1,22 @@ +import { lazy } from 'react'; + +const RouteAccount = [ + { + path: '/account/login', + component: lazy(() => import('../../views/account/AccountLoginView')), + layout: 'BlankLayout', + meta: { + authRoute: true + } + }, + { + path: '/account/register', + component: lazy(() => import('../../views/account/AccountRegisterView')), + layout: 'BlankLayout', + meta: { + authRoute: true + } + } +]; + +export default RouteAccount; diff --git a/src/router/routes/RouteAnalysis.js b/src/router/routes/RouteAnalysis.js new file mode 100644 index 0000000..66f7f2b --- /dev/null +++ b/src/router/routes/RouteAnalysis.js @@ -0,0 +1,32 @@ +import { lazy } from 'react'; + +const RouteAnalysis = [ + { + path: '/analysis/history/list', + component: lazy(() => + import('../../views/analysis/history/AnalysisHistory') + ) + }, + { + path: '/analysis/history/detail/:id', + component: lazy(() => + import('../../views/analysis/history/AnalysisHistoryDetail') + ) + // ,meta: { + // naveLink: '/analysis/history/detail' + // } + }, + { + path: '/analysis/simulation/index', + component: lazy(() => + import('../../views/analysis/simulation/AnalysisSimulation') + ), + layout: 'BlankLayout' + // meta: { + // open: '/analysis/history/list' + // // naveLink: '/analysis/history/detail' + // } + } +]; + +export default RouteAnalysis; diff --git a/src/router/routes/RouteBasis.js b/src/router/routes/RouteBasis.js new file mode 100644 index 0000000..3f19534 --- /dev/null +++ b/src/router/routes/RouteBasis.js @@ -0,0 +1,44 @@ +import { lazy } from 'react'; + +const RouteBasis = [ + { + path: '/basis/group/index', + component: lazy(() => import('../../views/basis/group/BasisGroup')) + }, + { + path: '/basis/group/detail/:id', + component: lazy(() => import('../../views/basis/group/BasisGroupDetail')) + }, + { + path: '/basis/group/create', + component: lazy(() => import('../../views/basis/group/BasisGroupDetail')) + }, + { + path: '/basis/group/join/index', + component: lazy(() => + import('../../views/basis/group/BasisGroupDetailJoin') + ) + }, + { + path: '/basis/group/approval/index', + component: lazy(() => import('../../views/basis/group/BasisGroupAproval')) + }, + { + path: '/basis/group/users/index', + component: lazy(() => import('../../views/basis/group/BasisGroupUsers')) + }, + { + path: '/basis/dron/index', + component: lazy(() => import('../../views/basis/dron/BasisDron')) + }, + { + path: '/basis/dron/detail/:id', + component: lazy(() => import('../../views/basis/dron/BasisDronDetail')) + }, + { + path: '/basis/dron/create', + component: lazy(() => import('../../views/basis/dron/BasisDronDetail')) + } +]; + +export default RouteBasis; diff --git a/src/router/routes/RouteDashboard.js b/src/router/routes/RouteDashboard.js new file mode 100644 index 0000000..8e6674b --- /dev/null +++ b/src/router/routes/RouteDashboard.js @@ -0,0 +1,11 @@ +import { lazy } from 'react'; + +const RouteDashboard = [ + { + exact: true, + path: '/main/dashboard', + component: lazy(() => import('../../views/main/MainDashboard')) + } +]; + +export default RouteDashboard; diff --git a/src/router/routes/RouteSystem.js b/src/router/routes/RouteSystem.js new file mode 100644 index 0000000..9bbb444 --- /dev/null +++ b/src/router/routes/RouteSystem.js @@ -0,0 +1,70 @@ +import { lazy } from 'react'; + +const RouteSystem = [ + { + path: '/system/code/index', + component: lazy(() => import('../../views/system/code/SystemCode')) + }, + { + path: '/system/code/create', + component: lazy(() => import('../../views/system/code/SystemCodeDetail')) + }, + { + path: '/system/code/detail/:id', + component: lazy(() => import('../../views/system/code/SystemCodeDetail')) + }, + { + path: '/system/code/multi/create/:id', + component: lazy(() => + import('../../views/system/code/SystemCodeDetailMulti') + ) + }, + { + path: '/system/code/multi/detail/:id', + component: lazy(() => + import('../../views/system/code/SystemCodeDetailMulti') + ) + }, + { + path: '/system/code/group/detail/:id', + component: lazy(() => + import('../../views/system/code/SystemCodeGroupDetail') + ) + }, + { + path: '/system/code/group/create', + component: lazy(() => + import('../../views/system/code/SystemCodeGroupDetail') + ) + }, + { + path: '/system/menu/index', + component: lazy(() => import('../../views/system/menu/SystemMenu')) + }, + { + path: '/system/menu/detail/:id', + component: lazy(() => import('../../views/system/menu/SystemMenuDetail')) + }, + { + path: '/system/auth/index', + component: lazy(() => import('../../views/system/auth/SystemAuth')) + }, + { + path: '/system/auth/detail/:id', + component: lazy(() => import('../../views/system/auth/SystemAuthDetail')) + }, + { + path: '/system/auth/menu/index', + component: lazy(() => import('../../views/system/auth/SystemAuthMenu')) + }, + { + path: '/system/user/index', + component: lazy(() => import('../../views/system/user/SystemUser')) + }, + { + path: '/system/user/detail/:id', + component: lazy(() => import('../../views/system/user/SystemUserDetail')) + } +]; + +export default RouteSystem; diff --git a/src/router/routes/index.js b/src/router/routes/index.js new file mode 100644 index 0000000..0096a8a --- /dev/null +++ b/src/router/routes/index.js @@ -0,0 +1,199 @@ +import { lazy } from 'react'; +import RouteAccount from './RouteAccount'; +import RouteAnalysis from './RouteAnalysis'; +import RouteBasis from './RouteBasis'; +import RouteDashboard from './RouteDashboard'; +import RouteSystem from './RouteSystem'; + +// ** Document title +const TemplateTitle = '%s - Dron Control System'; + +// ** Default Route +const DefaultRoute = '/main/dashboard'; + +// ** Merge Routes +const Routes = [ + ...RouteAccount, + ...RouteDashboard, + ...RouteAnalysis, + ...RouteBasis, + ...RouteSystem, + { + path: '/home', + component: lazy(() => import('../../views/Home')) + }, + { + path: '/second-page', + component: lazy(() => import('../../views/SecondPage')) + }, + { + path: '/login', + component: lazy(() => import('../../views/Login')), + layout: 'BlankLayout', + meta: { + authRoute: true + } + }, + { + path: '/error', + component: lazy(() => import('../../views/Error')), + layout: 'BlankLayout' + }, + { + path: '/design', + component: lazy(() => import('../../views/design/DesignMain')), + layout: 'BlankLayout' + }, + { + path: '/designLogin', + component: lazy(() => import('../../views/design/DesignLogin')), + layout: 'BlankLayout' + }, + { + path: '/designMenu', + component: lazy(() => import('../../views/design/DesignMenu')) + }, + { + path: '/designSample', + component: lazy(() => import('../../views/design/DesignSample')), + layout: 'BlankLayout' + }, + { + path: '/designRegister', + component: lazy(() => import('../../views/design/DesignRegister')), + layout: 'BlankLayout' + }, + { + path: '/designRegister2', + component: lazy(() => import('../../views/design/DesignRegister2')), + layout: 'BlankLayout' + }, + { + path: '/designRegister3', + component: lazy(() => import('../../views/design/DesignRegister3')), + layout: 'BlankLayout' + }, + { + path: '/control', + component: lazy(() => import('../../views/control')), + layout: 'BlankLayout' + }, + { + path: '/history/record/sample1', + component: lazy(() => + import('../../views/design/history/record/DesignHistory1') + ) + }, + { + path: '/history/record/sample2', + component: lazy(() => + import('../../views/design/history/record/DesignHistory2') + ) + }, + { + path: '/history/record/sample3', + component: lazy(() => + import('../../views/design/history/record/DesignHistory3') + ) + }, + { + path: '/mypage/group/sample1', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup1') + ) + }, + { + path: '/mypage/group/sample2', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup2') + ) + }, + { + path: '/mypage/group/sample3', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup3') + ) + }, + { + path: '/mypage/group/sample4', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup4') + ) + }, + { + path: '/mypage/group/sample5', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup5') + ) + }, + { + path: '/mypage/group/sample6', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup6') + ) + }, + { + path: '/mypage/group/sample7', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup7') + ) + }, + { + path: '/mypage/group/sample8', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup8') + ) + }, + { + path: '/mypage/group/sample9', + component: lazy(() => + import('../../views/design/mypage/group/DesignGroup9') + ) + }, + { + path: '/mypage/myinfo/sample1', + component: lazy(() => + import('../../views/design/mypage/myinfo/DesignMyinfo1') + ) + }, + { + path: '/mypage/airframe/sample1', + component: lazy(() => + import('../../views/design/mypage/airframe/DesignAir1') + ) + }, + { + path: '/sys/code/sample1', + component: lazy(() => import('../../views/design/sys/code/DesignCode1')) + }, + { + path: '/sys/code/sample2', + component: lazy(() => import('../../views/design/sys/code/DesignCode2')) + }, + { + path: '/sys/code/sample3', + component: lazy(() => import('../../views/design/sys/code/DesignCode3')) + }, + { + path: '/sys/code/sample4', + component: lazy(() => import('../../views/design/sys/code/DesignCode4')) + }, + { + path: '/sys/code/sample5', + component: lazy(() => import('../../views/design/sys/code/DesignCode5')) + }, + { + path: '/sys/menu/sample1', + component: lazy(() => import('../../views/design/sys/menu/DesignMenu1')) + }, + { + path: '/sys/menu/sample2', + component: lazy(() => import('../../views/design/sys/menu/DesignMenu2')) + }, + { + path: '/sys/menu/sample3', + component: lazy(() => import('../../views/design/sys/menu/DesignMenu3')) + } +]; + +export { DefaultRoute, TemplateTitle, Routes }; diff --git a/src/serviceWorker.js b/src/serviceWorker.js new file mode 100644 index 0000000..9a7f3d0 --- /dev/null +++ b/src/serviceWorker.js @@ -0,0 +1,129 @@ +/*eslint-disable */ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.1/8 is considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/) +) + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href) + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets see https://github.com/facebook/create-react-app/issues/2374 + return + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js` + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config) + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ) + }) + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config) + } + }) + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing + if (installingWorker === null) { + return + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ) + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration) + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.') + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration) + } + } + } + } + } + }) + .catch(error => { + console.error('Error during service worker registration:', error) + }) +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type') + if (response.status === 404 || (contentType !== null && contentType.indexOf('javascript') === -1)) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload() + }) + }) + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config) + } + }) + .catch(() => { + console.log('No internet connection found. App is running in offline mode.') + }) +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister() + }) + } +} diff --git a/src/utility/CondeUtil.js b/src/utility/CondeUtil.js new file mode 100644 index 0000000..a714f3a --- /dev/null +++ b/src/utility/CondeUtil.js @@ -0,0 +1,21 @@ +import { ARCTFT_TYPE_CD, WGHT_TYPE_CD } from '../configs/constants'; + +export const GET_ARCTFT_TYPE_CD = code => { + let data = ARCTFT_TYPE_CD.filter(item => item.code === code); + let codeNm = '-'; + if (data.length > 0) { + codeNm = data[0].codeNm; + } + + return codeNm; +}; + +export const GET_WGHT_TYPE_CD = code => { + let data = WGHT_TYPE_CD.filter(item => item.code === code); + let codeNm = '-'; + if (data.length > 0) { + codeNm = data[0].codeNm; + } + + return codeNm; +}; diff --git a/src/utility/Utils.js b/src/utility/Utils.js new file mode 100644 index 0000000..ffc4e75 --- /dev/null +++ b/src/utility/Utils.js @@ -0,0 +1,79 @@ +// ** Checks if an object is empty (returns boolean) +export const isObjEmpty = obj => Object.keys(obj).length === 0 + +// ** Returns K format from a number +export const kFormatter = num => (num > 999 ? `${(num / 1000).toFixed(1)}k` : num) + +// ** Converts HTML to string +export const htmlToString = html => html.replace(/<\/?[^>]+(>|$)/g, '') + +// ** Checks if the passed date is today +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 */ + ) +} + +/** + ** Format and return date in Humanize format + ** Intl docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format + ** Intl Constructor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat + * @param {String} value date to format + * @param {Object} formatting Intl object to format with + */ +export const formatDate = (value, formatting = { month: 'short', day: 'numeric', year: 'numeric' }) => { + if (!value) return value + return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value)) +} + +// ** Returns short month of passed date +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('en-US', formatting).format(new Date(value)) +} + +/** + ** Return if user is logged in + ** This is completely up to you and how you want to store the token in your frontend application + * ? e.g. If you are using cookies to store the application please update this function + */ +export const isUserLoggedIn = () => localStorage.getItem('userData') +export const getUserData = () => JSON.parse(localStorage.getItem('userData')) + +/** + ** This function is used for demo purpose route navigation + ** In real app you won't need this function because your app will navigate to same route for each users regardless of ability + ** Please note role field is just for showing purpose it's not used by anything in frontend + ** We are checking role just for ease + * ? NOTE: If you have different pages to navigate based on user ability then this function can be useful. However, you need to update it. + * @param {String} userRole Role of user + */ +export const getHomeRouteForLoggedInUser = userRole => { + if (userRole === 'admin') return '/' + if (userRole === 'client') return '/access-control' + return '/login' +} + +// ** React Select Theme Colors +export const selectThemeColors = theme => ({ + ...theme, + colors: { + ...theme.colors, + primary25: '#7367f01a', // for option hover bg-color + primary: '#7367f0', // for selected option bg-color + neutral10: '#7367f0', // for tags bg-color + neutral20: '#ededed', // for input border-color + neutral30: '#ededed' // for input hover border-color + } +}) diff --git a/src/utility/context/Can.js b/src/utility/context/Can.js new file mode 100644 index 0000000..03727ea --- /dev/null +++ b/src/utility/context/Can.js @@ -0,0 +1,11 @@ +// ** Imports createContext function +import { createContext } from 'react' + +// ** Imports createContextualCan function +import { createContextualCan } from '@casl/react' + +// ** Create Context +export const AbilityContext = createContext() + +// ** Init Can Context +export const Can = createContextualCan(AbilityContext.Consumer) diff --git a/src/utility/context/Internationalization.js b/src/utility/context/Internationalization.js new file mode 100644 index 0000000..4235ea9 --- /dev/null +++ b/src/utility/context/Internationalization.js @@ -0,0 +1,50 @@ +// ** React Imports +import { useState, createContext } from 'react' + +// ** Intl Provider Import +import { IntlProvider } from 'react-intl' + +// ** Core Language Data +import messagesEn from '@assets/data/locales/en.json' +import messagesDe from '@assets/data/locales/de.json' +import messagesFr from '@assets/data/locales/fr.json' +import messagesPt from '@assets/data/locales/pt.json' + +// ** User Language Data +import userMessagesEn from '@src/assets/data/locales/en.json' +import userMessagesDe from '@src/assets/data/locales/de.json' +import userMessagesFr from '@src/assets/data/locales/fr.json' +import userMessagesPt from '@src/assets/data/locales/pt.json' + +// ** Menu msg obj +const menuMessages = { + en: { ...messagesEn, ...userMessagesEn }, + de: { ...messagesDe, ...userMessagesDe }, + fr: { ...messagesFr, ...userMessagesFr }, + pt: { ...messagesPt, ...userMessagesPt } +} + +// ** Create Context +const Context = createContext() + +const IntlProviderWrapper = ({ children }) => { + // ** States + const [locale, setLocale] = useState('en') + const [messages, setMessages] = useState(menuMessages['en']) + + // ** Switches Language + const switchLanguage = lang => { + setLocale(lang) + setMessages(menuMessages[lang]) + } + + return ( + + + {children} + + + ) +} + +export { IntlProviderWrapper, Context as IntlContext } diff --git a/src/utility/context/ThemeColors.js b/src/utility/context/ThemeColors.js new file mode 100644 index 0000000..cf0d25f --- /dev/null +++ b/src/utility/context/ThemeColors.js @@ -0,0 +1,56 @@ +// ** React Imports +import { useEffect, useState, createContext } from 'react' + +// ** Create Context +const ThemeColors = createContext() + +const ThemeContext = ({ children }) => { + // ** State + const [colors, setColors] = useState({}) + + //** ComponentDidMount + useEffect(() => { + if (window !== 'undefined') { + //** Get variable value + const getHex = color => window.getComputedStyle(document.body).getPropertyValue(color).trim() + + //** Colors obj + const obj = { + primary: { + light: getHex('--primary').concat('1a'), + main: getHex('--primary') + }, + secondary: { + light: getHex('--secondary').concat('1a'), + main: getHex('--secondary') + }, + success: { + light: getHex('--success').concat('1a'), + main: getHex('--success') + }, + danger: { + light: getHex('--danger').concat('1a'), + main: getHex('--danger') + }, + warning: { + light: getHex('--warning').concat('1a'), + main: getHex('--warning') + }, + info: { + light: getHex('--info').concat('1a'), + main: getHex('--info') + }, + dark: { + light: getHex('--dark').concat('1a'), + main: getHex('--dark') + } + } + + setColors({ ...obj }) + } + }, []) + + return {children} +} + +export { ThemeColors, ThemeContext } diff --git a/src/utility/hooks/useFooterType.js b/src/utility/hooks/useFooterType.js new file mode 100644 index 0000000..5663259 --- /dev/null +++ b/src/utility/hooks/useFooterType.js @@ -0,0 +1,34 @@ +// ** React Imports +import { useState } from 'react' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +export const useFooterType = () => { + // ** State + const [footerType, setFooterType] = useState(() => { + try { + return themeConfig.layout.footer.type + } catch (error) { + // ** If error also initialValue + console.log(error) + return themeConfig.layout.footer.type + } + }) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(footerType) : value + + // ** Set state + setFooterType(valueToStore) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + return [footerType, setValue] +} diff --git a/src/utility/hooks/useLayout.js b/src/utility/hooks/useLayout.js new file mode 100644 index 0000000..973eafa --- /dev/null +++ b/src/utility/hooks/useLayout.js @@ -0,0 +1,57 @@ +//** React Imports +import { useState, useEffect } from 'react' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +export const useLayout = () => { + // ** States + const [lastLayout, setLastLayout] = useState(null) + const [layout, setLayout] = useState(() => { + try { + return themeConfig.layout.type + } catch (error) { + // ** If error return initialValue + console.log(error) + return themeConfig.layout.type + } + }) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(layout) : value + + // ** Set state + setLayout(valueToStore) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + const handleLayout = () => { + // ** If layout is horizontal & screen size is equals to or below 1200 + if (layout === 'horizontal' && window.innerWidth <= 1200) { + setLayout('vertical') + setLastLayout('horizontal') + } + // ** If lastLayout is horizontal & screen size is equals to or above 1200 + if (lastLayout === 'horizontal' && window.innerWidth >= 1200) { + setLayout('horizontal') + } + } + + // ** ComponentDidMount + useEffect(() => { + handleLayout() + }, []) + + useEffect(() => { + // ** Window Resize Event + window.addEventListener('resize', handleLayout) + }, [layout, lastLayout]) + + return [layout, setValue] +} diff --git a/src/utility/hooks/useNavbarColor.js b/src/utility/hooks/useNavbarColor.js new file mode 100644 index 0000000..8074418 --- /dev/null +++ b/src/utility/hooks/useNavbarColor.js @@ -0,0 +1,34 @@ +//** React Imports +import { useState } from 'react' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +export const useNavbarColor = () => { + // ** State + const [navbarColor, setNavbarColor] = useState(() => { + try { + return themeConfig.layout.navbar.backgroundColor + } catch (error) { + // ** If error return initialValue + console.log(error) + return themeConfig.layout.navbar.backgroundColor + } + }) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(navbarColor) : value + + // ** Set state + setNavbarColor(valueToStore) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + return [navbarColor, setValue] +} diff --git a/src/utility/hooks/useNavbarType.js b/src/utility/hooks/useNavbarType.js new file mode 100644 index 0000000..4a6718a --- /dev/null +++ b/src/utility/hooks/useNavbarType.js @@ -0,0 +1,34 @@ +//** React Imports +import { useState } from 'react' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +export const useNavbarType = () => { + // ** State + const [navbarType, setNavbarType] = useState(() => { + try { + return themeConfig.layout.navbar.type + } catch (error) { + // ** If error return initialValue + console.log(error) + return themeConfig.layout.navbar.type + } + }) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(navbarType) : value + + // ** Set state + setNavbarType(valueToStore) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + return [navbarType, setValue] +} diff --git a/src/utility/hooks/useOnClickOutside.js b/src/utility/hooks/useOnClickOutside.js new file mode 100644 index 0000000..a4ef683 --- /dev/null +++ b/src/utility/hooks/useOnClickOutside.js @@ -0,0 +1,33 @@ +//** React Imports +import { useEffect } from 'react' + +export const useOnClickOutside = (ref, handler) => { + useEffect( + () => { + const listener = event => { + // ** Do nothing if clicking ref's element or descendent elements + if (!ref.current || ref.current.contains(event.target)) { + return + } + + // ** Call passed function on click outside + handler(event) + } + + document.addEventListener('mousedown', listener) + document.addEventListener('touchstart', listener) + + return () => { + document.removeEventListener('mousedown', listener) + document.removeEventListener('touchstart', listener) + } + }, + // ** Add ref and handler to effect dependencies + // ** It's worth noting that because passed in handler is a new ... + // ** ... function on every render that will cause this effect ... + // ** ... callback/cleanup to run every render. It's not a big deal ... + // ** ... but to optimize you can wrap handler in useCallback before ... + // ** ... passing it into this hook. + [ref, handler] + ) +} diff --git a/src/utility/hooks/useRTL.js b/src/utility/hooks/useRTL.js new file mode 100644 index 0000000..3e7842c --- /dev/null +++ b/src/utility/hooks/useRTL.js @@ -0,0 +1,38 @@ +//** React Imports +import { useEffect } from 'react' + +// ** Store & Actions +import { handleRTL } from '@store/actions/layout' +import { useDispatch, useSelector } from 'react-redux' + +export const useRTL = () => { + // ** Store Vars + const dispatch = useDispatch() + const isRtl = useSelector(state => state.layout.isRTL) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(isRtl) : value + dispatch(handleRTL(valueToStore)) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + useEffect(() => { + // ** Get HTML Tag + const element = document.getElementsByTagName('html')[0] + + // ** If isRTL then add attr dir='rtl' with HTML else attr dir='ltr' + if (isRtl) { + element.setAttribute('dir', 'rtl') + } else { + element.setAttribute('dir', 'ltr') + } + }, [isRtl]) + + return [isRtl, setValue] +} diff --git a/src/utility/hooks/useRouterTransition.js b/src/utility/hooks/useRouterTransition.js new file mode 100644 index 0000000..4a27358 --- /dev/null +++ b/src/utility/hooks/useRouterTransition.js @@ -0,0 +1,34 @@ +//** React Imports +import { useState } from 'react' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +export const useRouterTransition = () => { + // ** State + const [transition, setTransition] = useState(() => { + try { + return themeConfig.layout.routerTransition + } catch (error) { + // ** If error return initialValue + console.log(error) + return themeConfig.layout.routerTransition + } + }) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(transition) : value + + // ** Set state + setTransition(valueToStore) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + return [transition, setValue] +} diff --git a/src/utility/hooks/useSkin.js b/src/utility/hooks/useSkin.js new file mode 100644 index 0000000..2b18e16 --- /dev/null +++ b/src/utility/hooks/useSkin.js @@ -0,0 +1,58 @@ +//** React Imports +import { useState, useEffect } from 'react' + +// ** Configs +import themeConfig from '@configs/themeConfig' + +export const useSkin = () => { + // ** State + const [skin, setSkin] = useState(() => { + try { + // ** Get from local storage by key + const item = window.localStorage.getItem('skin') + // ** Parse stored json or if none return initialValue + return item ? JSON.parse(item) : themeConfig.layout.skin + } catch (error) { + // ** If error also return initialValue + console.log(error) + return themeConfig.layout.skin + } + }) + + // ** Return a wrapped version of useState's setter function + const setValue = value => { + try { + // ** Allow value to be a function so we have same API as useState + const valueToStore = value instanceof Function ? value(skin) : value + // ** Set state + setSkin(valueToStore) + // ** Save to local storage + window.localStorage.setItem('skin', JSON.stringify(valueToStore)) + } catch (error) { + // ** A more advanced implementation would handle the error case + console.log(error) + } + } + + useEffect(() => { + // ** Get Body Tag + const element = window.document.body + + // ** Define classnames for skins + const classNames = { + dark: 'dark-layout', + bordered: 'bordered-layout', + 'semi-dark': 'semi-dark-layout' + } + + // ** Remove all classes from Body on mount + element.classList.remove(...element.classList) + + // ** If skin is not light add skin class + if (skin !== 'light') { + element.classList.add(classNames[skin]) + } + }, [skin]) + + return [skin, setValue] +} diff --git a/src/views/Error.js b/src/views/Error.js new file mode 100644 index 0000000..bf143ac --- /dev/null +++ b/src/views/Error.js @@ -0,0 +1,28 @@ +import { Button } from 'reactstrap' +import { Link } from 'react-router-dom' +import errorImg from '@src/assets/images/pages/error.svg' + +import '@styles/base/pages/page-misc.scss' + +import logoImg from '@src/assets/images/pal_logo.png' +const Error = () => { + return ( +
    + + +

    Drone Control System

    +
    +
    +
    +

    Page Not Found 🕵🏻‍♀️

    +

    Oops! 😖 The requested URL was not found on this server.

    + + Back to home + + Not authorized page +
    +
    +
    + ) +} +export default Error diff --git a/src/views/Home.js b/src/views/Home.js new file mode 100644 index 0000000..44be32f --- /dev/null +++ b/src/views/Home.js @@ -0,0 +1,49 @@ +import { Card, CardHeader, CardBody, CardTitle, CardText, CardLink } from 'reactstrap' + +const Home = () => { + return ( +
    + + + Kick start your project 🚀 + + + All the best for your new project. + + Please make sure to read our{' '} + + Template Documentation + {' '} + to understand where to go from here and how to use our template. + + + + + + + Want to integrate JWT? 🔒 + + + + We carefully crafted JWT flow so you can implement JWT with ease and with minimum efforts. + + + Please read our{' '} + + JWT Documentation + {' '} + to get more out of JWT authentication. + + + +
    + ) +} + +export default Home diff --git a/src/views/Login.js b/src/views/Login.js new file mode 100644 index 0000000..3579503 --- /dev/null +++ b/src/views/Login.js @@ -0,0 +1,134 @@ +import { useSkin } from '@hooks/useSkin' +import { Link, Redirect } from 'react-router-dom' +import { Facebook, Twitter, Mail, GitHub } from 'react-feather' +import InputPasswordToggle from '@components/input-password-toggle' +import { Row, Col, CardTitle, CardText, Form, FormGroup, Label, Input, CustomInput, Button } from 'reactstrap' +import '@styles/base/pages/page-auth.scss' + +const Login = () => { + const [skin, setSkin] = useSkin() + + const illustration = skin === 'dark' ? 'login-v2-dark.svg' : 'login-v2.svg', + source = require(`@src/assets/images/pages/${illustration}`).default + + return ( +
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    Vuexy

    + + +
    + Login V2 +
    + + + + + Welcome to Vuexy! 👋 + + Please sign-in to your account and start the adventure +
    e.preventDefault()}> + + + + + +
    + + + Forgot Password? + +
    + +
    + + + + + Sign in + +
    +

    + New on our platform? + + Create an account + +

    +
    +
    or
    +
    +
    + + + + + + + + + + + + +
    + + +
    +
    + ) +} + +export default Login diff --git a/src/views/NotAuthorized.js b/src/views/NotAuthorized.js new file mode 100644 index 0000000..78c4f0c --- /dev/null +++ b/src/views/NotAuthorized.js @@ -0,0 +1,30 @@ +import { Button } from 'reactstrap' +import { Link } from 'react-router-dom' +import notAuthImg from '@src/assets/images/pages/not-authorized.svg' + +import '@styles/base/pages/page-misc.scss' + +const NotAuthorized = () => { + return ( +
    + + +

    Drone Control System

    +
    +
    +
    +

    You are not authorized! 🔐

    +

    + The Webtrends Marketing Lab website in IIS uses the default IUSR account credentials to access the web pages + it serves. +

    + + Back to login + + Not authorized page +
    +
    +
    + ) +} +export default NotAuthorized diff --git a/src/views/SecondPage.js b/src/views/SecondPage.js new file mode 100644 index 0000000..6637014 --- /dev/null +++ b/src/views/SecondPage.js @@ -0,0 +1,20 @@ +import { Card, CardHeader, CardBody, CardTitle, CardText, CardLink } from 'reactstrap' + +const SecondPage = () => { + return ( + + + Create Awesome 🙌 + + + This is your second page. + + Chocolate sesame snaps pie carrot cake pastry pie lollipop muffin. Carrot cake dragée chupa chups jujubes. + Macaroon liquorice cookie wafer tart marzipan bonbon. Gingerbread jelly-o dragée chocolate. + + + + ) +} + +export default SecondPage diff --git a/src/views/account/AccountLoginView.js b/src/views/account/AccountLoginView.js new file mode 100644 index 0000000..0710d91 --- /dev/null +++ b/src/views/account/AccountLoginView.js @@ -0,0 +1,6 @@ +import { AccountLogin } from '../../components/account/login/AccountLogin'; +const AccountLoginView = props => { + return ; +}; + +export default AccountLoginView; diff --git a/src/views/account/AccountRegisterView.js b/src/views/account/AccountRegisterView.js new file mode 100644 index 0000000..3ab74d9 --- /dev/null +++ b/src/views/account/AccountRegisterView.js @@ -0,0 +1,8 @@ +import { AccountRegister } from '../../components/account/register/AccountRegister'; + +const AccountResisterView = props => { + // console.log(props); + return ; +}; + +export default AccountResisterView; diff --git a/src/views/analysis/history/AnalysisHistory.js b/src/views/analysis/history/AnalysisHistory.js new file mode 100644 index 0000000..1107818 --- /dev/null +++ b/src/views/analysis/history/AnalysisHistory.js @@ -0,0 +1,17 @@ +// import { AnalysisHistoryList } from '../../../components/analysis/history/main/AnalysisHistoryList'; +// import { AnalysisHistorySearch } from '../../../components/analysis/history/main/AnalysisHistorySearch'; +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { AnalysisHistoryContainer } from '../../../containers/analysis/history/AnalysisHistoryContainer'; + +const AnalysisHistory = () => { + return ( +
    + +
    + ); +}; + +export default AnalysisHistory; diff --git a/src/views/analysis/history/AnalysisHistoryDetail.js b/src/views/analysis/history/AnalysisHistoryDetail.js new file mode 100644 index 0000000..c28fb52 --- /dev/null +++ b/src/views/analysis/history/AnalysisHistoryDetail.js @@ -0,0 +1,11 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { AnalysisHistoryDetailContainer } from '../../../containers/analysis/history/AnalysisHistoryDetailContainer'; + +const AnalysisHistory = () => { + return ; +}; + +export default AnalysisHistory; diff --git a/src/views/analysis/simulation/AnalysisSimulation.js b/src/views/analysis/simulation/AnalysisSimulation.js new file mode 100644 index 0000000..ca1541b --- /dev/null +++ b/src/views/analysis/simulation/AnalysisSimulation.js @@ -0,0 +1,13 @@ +// import { AnalysisHistoryList } from '../../../components/analysis/history/main/AnalysisHistoryList'; +// import { AnalysisHistorySearch } from '../../../components/analysis/history/main/AnalysisHistorySearch'; +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { AnalysisSimulationContainer } from '../../../containers/analysis/simulator/AnalysisSimulationContainer'; + +const AnalysisSimulation = () => { + return ; +}; + +export default AnalysisSimulation; diff --git a/src/views/basis/dron/BasisDron.js b/src/views/basis/dron/BasisDron.js new file mode 100644 index 0000000..a3f4298 --- /dev/null +++ b/src/views/basis/dron/BasisDron.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { BasisDronContainer } from '../../../containers/basis/dron/BasisDronContainer'; + +const BasisDron = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisDron; diff --git a/src/views/basis/dron/BasisDronDetail.js b/src/views/basis/dron/BasisDronDetail.js new file mode 100644 index 0000000..93a5470 --- /dev/null +++ b/src/views/basis/dron/BasisDronDetail.js @@ -0,0 +1,20 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { BasisDronDetailContainer } from '../../../containers/basis/dron/BasisDronDetailContainer'; +import { BasisDronTabContainer } from '../../../containers/basis/dron/BasisDronTabContainer'; + +const BasisGroupDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisGroupDetail; diff --git a/src/views/basis/group/BasisGroup.js b/src/views/basis/group/BasisGroup.js new file mode 100644 index 0000000..53f41d8 --- /dev/null +++ b/src/views/basis/group/BasisGroup.js @@ -0,0 +1,19 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { BasisGroupContainer } from '../../../containers/basis/group/BasisGroupContainer'; + +const BasisGroup = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisGroup; diff --git a/src/views/basis/group/BasisGroupAproval.js b/src/views/basis/group/BasisGroupAproval.js new file mode 100644 index 0000000..fdf140d --- /dev/null +++ b/src/views/basis/group/BasisGroupAproval.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { BasisGroupApprovalContainer } from '../../../containers/basis/group/BasisGroupApprovalContainer'; + +const BasisGroupAproval = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisGroupAproval; diff --git a/src/views/basis/group/BasisGroupDetail.js b/src/views/basis/group/BasisGroupDetail.js new file mode 100644 index 0000000..b86201b --- /dev/null +++ b/src/views/basis/group/BasisGroupDetail.js @@ -0,0 +1,20 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { BasisGroupContainer } from '../../../containers/basis/group/BasisGroupContainer'; +import { BasisGroupDetailContainer } from '../../../containers/basis/group/BasisGroupDetailContainer'; + +const BasisGroupDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisGroupDetail; diff --git a/src/views/basis/group/BasisGroupDetailJoin.js b/src/views/basis/group/BasisGroupDetailJoin.js new file mode 100644 index 0000000..a289911 --- /dev/null +++ b/src/views/basis/group/BasisGroupDetailJoin.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +import '../../../assets/css/custom.css'; + +import { BasisGroupDetailJoinContainer } from '../../../containers/basis/group/BasisGroupDetailJoinContainer'; + +const BasisGroupDetailJoin = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisGroupDetailJoin; diff --git a/src/views/basis/group/BasisGroupUsers.js b/src/views/basis/group/BasisGroupUsers.js new file mode 100644 index 0000000..65b7fd4 --- /dev/null +++ b/src/views/basis/group/BasisGroupUsers.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { BasisGroupUsersContainer } from '../../../containers/basis/group/BasisGroupUsersContainer'; + +const BasisGroupUsers = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default BasisGroupUsers; diff --git a/src/views/charts/apex/ApexAreaCharts.js b/src/views/charts/apex/ApexAreaCharts.js new file mode 100644 index 0000000..233d34c --- /dev/null +++ b/src/views/charts/apex/ApexAreaCharts.js @@ -0,0 +1,110 @@ +import Chart from 'react-apexcharts' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle } from 'reactstrap' + +const areaColors = { + series3: '#a4f8cd', + series2: '#60f2ca', + series1: '#2bdac7' +} + +const ApexAreaCharts = ({ direction }) => { + const options = { + chart: { + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + dataLabels: { + enabled: false + }, + stroke: { + show: false, + curve: 'straight' + }, + legend: { + position: 'top', + horizontalAlign: 'start' + }, + grid: { + xaxis: { + lines: { + show: true + } + } + }, + colors: [areaColors.series3, areaColors.series2, areaColors.series1], + xaxis: { + categories: [ + '7/12', + '8/12', + '9/12', + '10/12', + '11/12', + '12/12', + '13/12', + '14/12', + '15/12', + '16/12', + '17/12', + '18/12', + '19/12', + '20/12' + ] + }, + fill: { + opacity: 1, + type: 'solid' + }, + tooltip: { + shared: false + }, + yaxis: { + opposite: direction === 'rtl' + } + } + + const series = [ + { + name: 'Visits', + data: [100, 120, 90, 170, 130, 160, 140, 240, 220, 180, 270, 280, 375] + }, + { + name: 'Clicks', + data: [60, 80, 70, 110, 80, 100, 90, 180, 160, 140, 200, 220, 275] + }, + { + name: 'Sales', + data: [20, 40, 30, 70, 40, 60, 50, 140, 120, 100, 140, 180, 220] + } + ] + + return ( + + +
    + + Line Chart + + Commercial networks +
    +
    + + +
    +
    + + + +
    + ) +} +export default ApexAreaCharts diff --git a/src/views/charts/apex/ApexBarChart.js b/src/views/charts/apex/ApexBarChart.js new file mode 100644 index 0000000..621511c --- /dev/null +++ b/src/views/charts/apex/ApexBarChart.js @@ -0,0 +1,73 @@ +import Chart from 'react-apexcharts' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle } from 'reactstrap' + +const ApexBarChart = ({ info, direction }) => { + const options = { + chart: { + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + plotOptions: { + bar: { + horizontal: true, + barHeight: '30%', + endingShape: 'rounded' + } + }, + grid: { + xaxis: { + lines: { + show: false + } + } + }, + colors: info, + dataLabels: { + enabled: false + }, + xaxis: { + categories: ['MON, 11', 'THU, 14', 'FRI, 15', 'MON, 18', 'WED, 20', 'FRI, 21', 'MON, 23'] + }, + yaxis: { + opposite: direction === 'rtl' + } + } + + const series = [ + { + data: [700, 350, 480, 600, 210, 550, 150] + } + ] + + return ( + + +
    + Balance + + $74,382.72 + +
    +
    + + +
    +
    + + + +
    + ) +} + +export default ApexBarChart diff --git a/src/views/charts/apex/ApexCandlestickChart.js b/src/views/charts/apex/ApexCandlestickChart.js new file mode 100644 index 0000000..3064ded --- /dev/null +++ b/src/views/charts/apex/ApexCandlestickChart.js @@ -0,0 +1,133 @@ +import Chart from 'react-apexcharts' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle } from 'reactstrap' + +const ApexCandleStickChart = ({ danger, success, direction }) => { + const options = { + chart: { + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + xaxis: { + type: 'datetime' + }, + yaxis: { + tooltip: { + enabled: true + }, + opposite: direction === 'rtl' + }, + grid: { + xaxis: { + lines: { + show: true + } + } + }, + plotOptions: { + candlestick: { + colors: { + upward: success, + downward: danger + } + }, + bar: { + columnWidth: '40%' + } + } + } + + const series = [ + { + data: [ + { + x: new Date(1538778600000), + y: [150, 170, 50, 100] + }, + { + x: new Date(1538780400000), + y: [200, 400, 170, 330] + }, + { + x: new Date(1538782200000), + y: [330, 340, 250, 280] + }, + { + x: new Date(1538784000000), + y: [300, 330, 200, 320] + }, + { + x: new Date(1538785800000), + y: [320, 450, 280, 350] + }, + { + x: new Date(1538787600000), + y: [300, 350, 80, 250] + }, + { + x: new Date(1538789400000), + y: [200, 330, 170, 300] + }, + { + x: new Date(1538791200000), + y: [200, 220, 70, 130] + }, + { + x: new Date(1538793000000), + y: [220, 270, 180, 250] + }, + { + x: new Date(1538794800000), + y: [200, 250, 80, 100] + }, + { + x: new Date(1538796600000), + y: [150, 170, 50, 120] + }, + { + x: new Date(1538798400000), + y: [110, 450, 10, 420] + }, + { + x: new Date(1538800200000), + y: [400, 480, 300, 320] + }, + { + x: new Date(1538802000000), + y: [380, 480, 350, 450] + } + ] + } + ] + + return ( + + +
    + + $74,382.72 + +

    $50,863.98

    +
    +
    + + +
    +
    + + + +
    + ) +} + +export default ApexCandleStickChart diff --git a/src/views/charts/apex/ApexColumnCharts.js b/src/views/charts/apex/ApexColumnCharts.js new file mode 100644 index 0000000..cd79bf9 --- /dev/null +++ b/src/views/charts/apex/ApexColumnCharts.js @@ -0,0 +1,95 @@ +import Chart from 'react-apexcharts' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const ApexColumnCharts = ({ direction }) => { + const columnColors = { + series1: '#826af9', + series2: '#d2b0ff', + bg: '#f8d3ff' + } + + const options = { + chart: { + height: 400, + type: 'bar', + stacked: true, + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + plotOptions: { + bar: { + columnWidth: '15%', + colors: { + backgroundBarColors: [columnColors.bg, columnColors.bg, columnColors.bg, columnColors.bg, columnColors.bg], + backgroundBarRadius: 10 + } + } + }, + dataLabels: { + enabled: false + }, + legend: { + position: 'top', + horizontalAlign: 'start' + }, + colors: [columnColors.series1, columnColors.series2], + stroke: { + show: true, + colors: ['transparent'] + }, + grid: { + xaxis: { + lines: { + show: true + } + } + }, + xaxis: { + categories: ['7/12', '8/12', '9/12', '10/12', '11/12', '12/12', '13/12', '14/12', '15/12', '16/12'] + }, + fill: { + opacity: 1 + }, + yaxis: { + opposite: direction === 'rtl' + } + } + + const series = [ + { + name: 'Apple', + data: [90, 120, 55, 100, 80, 125, 175, 70, 88, 180] + }, + { + name: 'Samsung', + data: [85, 100, 30, 40, 95, 90, 30, 110, 62, 20] + } + ] + + return ( + + + Data Science +
    + + +
    +
    + + + +
    + ) +} + +export default ApexColumnCharts diff --git a/src/views/charts/apex/ApexDonutChart.js b/src/views/charts/apex/ApexDonutChart.js new file mode 100644 index 0000000..2d496d3 --- /dev/null +++ b/src/views/charts/apex/ApexDonutChart.js @@ -0,0 +1,114 @@ +import Chart from 'react-apexcharts' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle } from 'reactstrap' + +const ApexRadiarChart = () => { + const donutColors = { + series1: '#ffe700', + series2: '#00d4bd', + series3: '#826bf8', + series4: '#2b9bf4', + series5: '#FFA1A1' + } + const options = { + legend: { + show: true, + position: 'bottom' + }, + labels: ['Operational', 'Networking', 'Hiring', 'R&D'], + + colors: [donutColors.series1, donutColors.series5, donutColors.series3, donutColors.series2], + dataLabels: { + enabled: true, + formatter(val, opt) { + return `${parseInt(val)}%` + } + }, + plotOptions: { + pie: { + donut: { + labels: { + show: true, + name: { + fontSize: '2rem', + fontFamily: 'Montserrat' + }, + value: { + fontSize: '1rem', + fontFamily: 'Montserrat', + formatter(val) { + return `${parseInt(val)}%` + } + }, + total: { + show: true, + fontSize: '1.5rem', + label: 'Operational', + formatter(w) { + return '31%' + } + } + } + } + } + }, + responsive: [ + { + breakpoint: 992, + options: { + chart: { + height: 380 + }, + legend: { + position: 'bottom' + } + } + }, + { + breakpoint: 576, + options: { + chart: { + height: 320 + }, + plotOptions: { + pie: { + donut: { + labels: { + show: true, + name: { + fontSize: '1.5rem' + }, + value: { + fontSize: '1rem' + }, + total: { + fontSize: '1.5rem' + } + } + } + } + } + } + } + ] + } + + const series = [85, 16, 50, 50] + + return ( + + +
    + + Expense Ratio + + Spending on various categories +
    +
    + + + +
    + ) +} + +export default ApexRadiarChart diff --git a/src/views/charts/apex/ApexHeatmapChart.js b/src/views/charts/apex/ApexHeatmapChart.js new file mode 100644 index 0000000..225fe2b --- /dev/null +++ b/src/views/charts/apex/ApexHeatmapChart.js @@ -0,0 +1,164 @@ +import Chart from 'react-apexcharts' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +// heat chart data generator +function generateDataHeat(count, yrange) { + let i = 0 + const series = [] + while (i < count) { + const x = `w${(i + 1).toString()}` + const y = Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + + series.push({ + x, + y + }) + i++ + } + return series +} + +const ApexHeatmapChart = () => { + const options = { + chart: { + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + plotOptions: { + heatmap: { + enableShades: false, + + colorScale: { + ranges: [ + { + from: 0, + to: 10, + name: '0-10', + color: '#b9b3f8' + }, + { + from: 11, + to: 20, + name: '10-20', + color: '#aba4f6' + }, + { + from: 21, + to: 30, + name: '20-30', + color: '#9d95f5' + }, + { + from: 31, + to: 40, + name: '30-40', + color: '#8f85f3' + }, + { + from: 41, + to: 50, + name: '40-50', + color: '#8176f2' + }, + { + from: 51, + to: 60, + name: '50-60', + color: '#7367f0' + } + ] + } + } + }, + dataLabels: { + enabled: false + }, + legend: { + position: 'bottom' + }, + grid: { + padding: { + top: -20 + } + }, + + xaxis: { + labels: { + show: false + }, + axisBorder: { + show: false + }, + axisTicks: { + show: false + } + } + } + + const series = [ + { + name: 'SUN', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + }, + { + name: 'MON', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + }, + { + name: 'TUE', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + }, + { + name: 'WED', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + }, + { + name: 'THU', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + }, + { + name: 'FRI', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + }, + { + name: 'SAT', + data: generateDataHeat(24, { + min: 0, + max: 60 + }) + } + ] + + return ( + + + Daily Sales States + + + + + + ) +} + +export default ApexHeatmapChart diff --git a/src/views/charts/apex/ApexLineChart.js b/src/views/charts/apex/ApexLineChart.js new file mode 100644 index 0000000..3adc080 --- /dev/null +++ b/src/views/charts/apex/ApexLineChart.js @@ -0,0 +1,98 @@ +import Chart from 'react-apexcharts' +import { ArrowDown } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle, Badge } from 'reactstrap' + +const ApexLineChart = ({ direction, warning }) => { + const options = { + chart: { + zoom: { + enabled: false + }, + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + + markers: { + strokeWidth: 7, + strokeOpacity: 1, + strokeColors: ['#fff'], + colors: [warning] + }, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'straight' + }, + colors: [warning], + grid: { + xaxis: { + lines: { + show: true + } + } + }, + tooltip: { + custom(data) { + return `
    + ${data.series[data.seriesIndex][data.dataPointIndex]}% +
    ` + } + }, + xaxis: { + categories: [ + '7/12', + '8/12', + '9/12', + '10/12', + '11/12', + '12/12', + '13/12', + '14/12', + '15/12', + '16/12', + '17/12', + '18/12', + '19/12', + '20/12', + '21/12' + ] + }, + yaxis: { + opposite: direction === 'rtl' + } + } + + const series = [ + { + data: [280, 200, 220, 180, 270, 250, 70, 90, 200, 150, 160, 100, 150, 100, 50] + } + ] + + return ( + + +
    + + Balance + + Commercial networks & enterprises +
    +
    +
    $ 100,000
    + + + 20% + +
    +
    + + + +
    + ) +} + +export default ApexLineChart diff --git a/src/views/charts/apex/ApexRadarChart.js b/src/views/charts/apex/ApexRadarChart.js new file mode 100644 index 0000000..82bbd2d --- /dev/null +++ b/src/views/charts/apex/ApexRadarChart.js @@ -0,0 +1,76 @@ +import Chart from 'react-apexcharts' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const ApexRadiarChart = () => { + const donutColors = { + series1: '#ffe700', + series3: '#826bf8' + } + const options = { + chart: { + toolbar: { + show: false + }, + parentHeightOffset: 0, + dropShadow: { + enabled: false, + blur: 8, + left: 1, + top: 1, + opacity: 0.2 + } + }, + legend: { + show: true, + position: 'bottom' + }, + yaxis: { + show: false + }, + colors: [donutColors.series1, donutColors.series3], + xaxis: { + categories: ['Battery', 'Brand', 'Camera', 'Memory', 'Storage', 'Display', 'OS', 'Price'] + }, + fill: { + opacity: [1, 0.8] + }, + stroke: { + show: false, + width: 0 + }, + markers: { + size: 0 + }, + grid: { + show: false, + padding: { + top: -20, + bottom: -20 + } + } + } + + const series = [ + { + name: 'iPhone 11', + data: [41, 64, 81, 60, 42, 42, 33, 23] + }, + { + name: 'Samsung s20', + data: [65, 46, 42, 25, 58, 63, 76, 43] + } + ] + + return ( + + + Mobile Comparison + + + + + + ) +} + +export default ApexRadiarChart diff --git a/src/views/charts/apex/ApexRadialbar.js b/src/views/charts/apex/ApexRadialbar.js new file mode 100644 index 0000000..dc8b6b7 --- /dev/null +++ b/src/views/charts/apex/ApexRadialbar.js @@ -0,0 +1,72 @@ +import Chart from 'react-apexcharts' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const ApexRadialbar = () => { + const donutColors = { + series1: '#ffe700', + series2: '#00d4bd', + series3: '#826bf8', + series4: '#2b9bf4', + series5: '#FFA1A1' + } + + const options = { + colors: [donutColors.series1, donutColors.series2, donutColors.series4], + plotOptions: { + radialBar: { + size: 185, + hollow: { + size: '25%' + }, + track: { + margin: 15 + }, + dataLabels: { + name: { + fontSize: '2rem', + fontFamily: 'Montserrat' + }, + value: { + fontSize: '1rem', + fontFamily: 'Montserrat' + }, + total: { + show: true, + fontSize: '1rem', + label: 'Comments', + formatter(w) { + return '80%' + } + } + } + } + }, + grid: { + padding: { + top: -35, + bottom: -30 + } + }, + legend: { + show: true, + position: 'bottom' + }, + stroke: { + lineCap: 'round' + }, + labels: ['Comments', 'Replies', 'Shares'] + } + + return ( + + + Statistics + + + + + + ) +} + +export default ApexRadialbar diff --git a/src/views/charts/apex/ApexScatterCharts.js b/src/views/charts/apex/ApexScatterCharts.js new file mode 100644 index 0000000..fb80c9d --- /dev/null +++ b/src/views/charts/apex/ApexScatterCharts.js @@ -0,0 +1,122 @@ +import { useState } from 'react' +import Chart from 'react-apexcharts' +import { Card, CardHeader, CardTitle, CardBody, ButtonGroup, Button } from 'reactstrap' + +const ApexScatterCharts = ({ direction, warning, primary, success }) => { + const [active, setActive] = useState('daily') + + const options = { + chart: { + zoom: { + enabled: true, + type: 'xy' + }, + parentHeightOffset: 0, + toolbar: { + show: false + } + }, + grid: { + xaxis: { + lines: { + show: true + } + } + }, + legend: { + position: 'top', + horizontalAlign: 'start' + }, + colors: [warning, primary, success], + + xaxis: { + tickAmount: 10, + labels: { + formatter(val) { + return parseFloat(val).toFixed(1) + } + } + }, + yaxis: { + opposite: direction === 'rtl' + } + } + + const series = [ + { + name: 'Angular', + data: [ + [5.4, 170], + [5.4, 100], + [6.3, 170], + [5.7, 140], + [5.9, 130], + [7.0, 150], + [8.0, 120], + [9.0, 170], + [10.0, 190], + [11.0, 220], + [12.0, 170], + [13.0, 230] + ] + }, + { + name: 'Vue', + data: [ + [14.0, 220], + [15.0, 280], + [16.0, 230], + [18.0, 320], + [17.5, 280], + [19.0, 250], + [20.0, 350], + [20.5, 320], + [20.0, 320], + [19.0, 280], + [17.0, 280], + [22.0, 300], + [18.0, 120] + ] + }, + { + name: 'React', + data: [ + [14.0, 290], + [13.0, 190], + [20.0, 220], + [21.0, 350], + [21.5, 290], + [22.0, 220], + [23.0, 140], + [19.0, 400], + [20.0, 200], + [22.0, 90], + [20.0, 120] + ] + } + ] + + return ( + + + New Technologies Data + + + + + + + + + + + ) +} + +export default ApexScatterCharts diff --git a/src/views/charts/apex/index.js b/src/views/charts/apex/index.js new file mode 100644 index 0000000..600ee78 --- /dev/null +++ b/src/views/charts/apex/index.js @@ -0,0 +1,95 @@ +// ** React Imports +import { Fragment, useContext } from 'react' + +// ** Third Party Components +import { Row, Col } from 'reactstrap' + +// ** Custom Hooks +import { useRTL } from '@hooks/useRTL' + +// ** Custom Components +import Breadcrumbs from '@components/breadcrumbs' + +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors' + +// ** Charts +import ApexBarChart from './ApexBarChart' +import ApexLineChart from './ApexLineChart' +import ApexAreaChart from './ApexAreaCharts' +import ApexRadarChart from './ApexRadarChart' +import ApexDonutChart from './ApexDonutChart' +import ApexRadialBarChart from './ApexRadialbar' +import ApexColumnChart from './ApexColumnCharts' +import ApexHeatmapChart from './ApexHeatmapChart' +import ApexScatterChart from './ApexScatterCharts' +import ApexCandlestickChart from './ApexCandlestickChart' + +// ** Styles +import '@styles/react/libs/charts/apex-charts.scss' +import '@styles/react/libs/flatpickr/flatpickr.scss' + +const ApexCharts = () => { + // ** Hooks + const [isRtl, setIsRtl] = useRTL() + + // ** Theme Colors + const { colors } = useContext(ThemeColors) + + return ( + + + + +

    + A React.js component for ApexCharts. Read full documnetation{' '} + + here + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + ) +} + +export default ApexCharts diff --git a/src/views/charts/chart-js/ChartjsAreaChart.js b/src/views/charts/chart-js/ChartjsAreaChart.js new file mode 100644 index 0000000..1eaf53c --- /dev/null +++ b/src/views/charts/chart-js/ChartjsAreaChart.js @@ -0,0 +1,171 @@ +import { Line } from 'react-chartjs-2' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const ChartjsAreaChart = ({ labelColor, tooltipShadow, gridLineColor, blueColor, blueLightColor, greyLightColor }) => { + const options = { + responsive: true, + maintainAspectRatio: false, + legend: { + position: 'top', + align: 'start', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 9 + } + }, + layout: { + padding: { + top: -20, + bottom: -20, + left: -20 + } + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + scales: { + xAxes: [ + { + display: true, + gridLines: { + color: 'transparent', + zeroLineColor: gridLineColor + }, + scaleLabel: { + display: true + }, + ticks: { + fontColor: labelColor + } + } + ], + yAxes: [ + { + display: true, + gridLines: { + color: 'transparent', + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 100, + min: 0, + max: 400, + fontColor: labelColor + }, + scaleLabel: { + display: true + } + } + ] + } + }, + data = { + labels: [ + '7/12', + '8/12', + '9/12', + '10/12', + '11/12', + '12/12', + '13/12', + '14/12', + '15/12', + '16/12', + '17/12', + '18/12', + '19/12', + '20/12', + '' + ], + datasets: [ + { + label: 'Africa', + data: [40, 55, 45, 75, 65, 55, 70, 60, 100, 98, 90, 120, 125, 140, 155], + lineTension: 0, + backgroundColor: blueColor, + pointStyle: 'circle', + borderColor: 'transparent', + pointRadius: 0.5, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBackgroundColor: blueColor, + pointHoverBorderColor: '#fff' + }, + { + label: 'Asia', + data: [70, 85, 75, 150, 100, 140, 110, 105, 160, 150, 125, 190, 200, 240, 275], + lineTension: 0, + backgroundColor: blueLightColor, + pointStyle: 'circle', + borderColor: 'transparent', + pointRadius: 0.5, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBackgroundColor: blueLightColor, + pointHoverBorderColor: '#fff' + }, + { + label: 'Europe', + data: [240, 195, 160, 215, 185, 215, 185, 200, 250, 210, 195, 250, 235, 300, 315], + lineTension: 0, + backgroundColor: greyLightColor, + pointStyle: 'circle', + borderColor: 'transparent', + pointRadius: 0.5, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBackgroundColor: greyLightColor, + pointHoverBorderColor: '#fff' + } + ] + } + + //** To add spacing between legends and chart + const plugins = [ + { + beforeInit(chart) { + chart.legend.afterFit = function () { + this.height += 20 + } + } + } + ] + + return ( + + + Data Science +
    + + +
    +
    + +
    + +
    +
    +
    + ) +} + +export default ChartjsAreaChart diff --git a/src/views/charts/chart-js/ChartjsBarChart.js b/src/views/charts/chart-js/ChartjsBarChart.js new file mode 100644 index 0000000..abb6d1a --- /dev/null +++ b/src/views/charts/chart-js/ChartjsBarChart.js @@ -0,0 +1,109 @@ +import React, { useState } from 'react' +import Flatpickr from 'react-flatpickr' +import DatePicker from "react-datepicker"; +import { Calendar } from 'react-feather' +import { Bar } from 'react-chartjs-2' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import { ko } from 'date-fns/esm/locale' +import "react-datepicker/dist/react-datepicker.css"; +const ChartjsBarChart = ({ tooltipShadow, gridLineColor, labelColor, successColorShade }) => { + const [startDate, setStartDate] = useState(new Date()); + const options = { + elements: { + rectangle: { + borderWidth: 2, + borderSkipped: 'bottom' + } + }, + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + legend: { + display: false + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + scales: { + xAxes: [ + { + display: true, + gridLines: { + display: true, + color: gridLineColor, + zeroLineColor: gridLineColor + }, + scaleLabel: { + display: false + }, + ticks: { + fontColor: labelColor + } + } + ], + yAxes: [ + { + display: true, + gridLines: { + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 100, + min: 0, + max: 400, + fontColor: labelColor + } + } + ] + } + }, + data = { + labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'], + datasets: [ + { + data: [275, 90, 190, 205, 125, 85, 55, 87, 127, 150, 230, 280, 190, 220, 100, 300, 250, 10, 20, 30, 40, 50, 60], + backgroundColor: successColorShade, + borderColor: 'transparent', + barThickness: 15 + } + ] + } + + return ( + + + 일 별 비행횟수 통계 +
    +
    + + setStartDate(date)} + dateFormat="yyy / MMMM" + showMonthYearPicker + showFullMonthYearPicker + showFourColumnMonthYearPicker + className='form-control bg-transparent border-0 shadow-none' + /> +
    +
    +
    + +
    + +
    +
    +
    + ) +} + +export default ChartjsBarChart diff --git a/src/views/charts/chart-js/ChartjsBubbleChart.js b/src/views/charts/chart-js/ChartjsBubbleChart.js new file mode 100644 index 0000000..b06b367 --- /dev/null +++ b/src/views/charts/chart-js/ChartjsBubbleChart.js @@ -0,0 +1,370 @@ +import { Bubble } from 'react-chartjs-2' +import { ArrowDown } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody, Badge } from 'reactstrap' + +const ChartjsRadarChart = ({ labelColor, primaryColorShade, warningColorShade, tooltipShadow, gridLineColor }) => { + const options = { + responsive: true, + maintainAspectRatio: false, + scales: { + xAxes: [ + { + display: true, + gridLines: { + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 10, + min: 0, + max: 140, + fontColor: labelColor + } + } + ], + yAxes: [ + { + display: true, + gridLines: { + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 100, + min: 0, + max: 400, + fontColor: labelColor + } + } + ] + }, + legend: { + display: false + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + } + }, + data = { + animation: { + duration: 10000 + }, + datasets: [ + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 20, + y: 74, + r: 10 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 30, + y: 72, + r: 5 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 10, + y: 110, + r: 5 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 40, + y: 110, + r: 7 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 20, + y: 135, + r: 6 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 10, + y: 160, + r: 12 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 30, + y: 165, + r: 7 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 40, + y: 200, + r: 20 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 90, + y: 185, + r: 7 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 50, + y: 240, + r: 7 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 60, + y: 275, + r: 10 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 70, + y: 305, + r: 5 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 80, + y: 325, + r: 4 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 50, + y: 285, + r: 5 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 60, + y: 235, + r: 5 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 70, + y: 275, + r: 7 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 80, + y: 290, + r: 4 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 90, + y: 250, + r: 10 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 100, + y: 220, + r: 7 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 120, + y: 230, + r: 4 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 110, + y: 320, + r: 15 + } + ] + }, + { + backgroundColor: warningColorShade, + borderColor: warningColorShade, + data: [ + { + x: 130, + y: 330, + r: 7 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 100, + y: 310, + r: 5 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 110, + y: 240, + r: 5 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 120, + y: 270, + r: 7 + } + ] + }, + { + backgroundColor: primaryColorShade, + borderColor: primaryColorShade, + data: [ + { + x: 130, + y: 300, + r: 6 + } + ] + } + ] + } + + return ( + + + Bubble Chart +
    +
    $ 100,000
    + + + 20% + +
    +
    + +
    + +
    +
    +
    + ) +} + +export default ChartjsRadarChart diff --git a/src/views/charts/chart-js/ChartjsDoughnutChart.js b/src/views/charts/chart-js/ChartjsDoughnutChart.js new file mode 100644 index 0000000..28b4a23 --- /dev/null +++ b/src/views/charts/chart-js/ChartjsDoughnutChart.js @@ -0,0 +1,111 @@ +import React, { useState } from 'react' +import { Doughnut } from 'react-chartjs-2' +import { Monitor, Tablet, ArrowDown, ArrowUp } from 'react-feather' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import DatePicker from "react-datepicker"; +import { ko } from 'date-fns/esm/locale' +import "react-datepicker/dist/react-datepicker.css"; +const ChartjsRadarChart = ({ tooltipShadow, successColorShade, warningLightColor, primary, yellowColor, blueColor }) => { + const [startDate, setStartDate] = useState(new Date()); + const options = { + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + cutoutPercentage: 60, + legend: { display: false }, + tooltips: { + callbacks: { + label(tooltipItem, data) { + const label = data.datasets[0].labels[tooltipItem.index] || '', + value = data.datasets[0].data[tooltipItem.index] + const output = ` ${label} : ${value} %` + return output + } + }, + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + } + }, + data = { + datasets: [ + { + labels: ['경기도', '인천광역시', '충청북도', '세종시', '제주도'], + data: [10, 10, 10, 20, 80], + backgroundColor: [successColorShade, warningLightColor, primary, yellowColor, blueColor], + borderWidth: 0, + pointStyle: 'rectRounded' + } + ] + } + + return ( + + + TOP5 지역 별 비행횟수 통계 + {/*
    + + +
    */} +
    +
    + + setStartDate(date)} + dateFormat="yyy / MMMM" + showMonthYearPicker + showFullMonthYearPicker + showFourColumnMonthYearPicker + className='form-control bg-transparent border-0 shadow-none' + /> +
    +
    +
    + +
    + +
    +
    +
    + + 경기도 +
    +
    + + 인천광역시 +
    +
    + + 충청북도 +
    +
    + + 세종시 +
    +
    + + 제주도 +
    +
    +
    +
    + ) +} + +export default ChartjsRadarChart diff --git a/src/views/charts/chart-js/ChartjsHorizontalBar.js b/src/views/charts/chart-js/ChartjsHorizontalBar.js new file mode 100644 index 0000000..0c40c2c --- /dev/null +++ b/src/views/charts/chart-js/ChartjsHorizontalBar.js @@ -0,0 +1,111 @@ +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' +import { HorizontalBar } from 'react-chartjs-2' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle } from 'reactstrap' + +const ChartjsHorizontalBarChart = ({ tooltipShadow, gridLineColor, labelColor, info }) => { + const options = { + elements: { + rectangle: { + borderWidth: 2, + borderSkipped: 'right', + borderSkipped: 'top' + } + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + legend: { + display: false + }, + layout: { + padding: { + bottom: -30, + left: -25 + } + }, + scales: { + xAxes: [ + { + display: true, + gridLines: { + zeroLineColor: gridLineColor, + borderColor: 'transparent', + color: gridLineColor, + drawTicks: false + }, + scaleLabel: { + display: true + }, + ticks: { + min: 0, + fontColor: labelColor + } + } + ], + yAxes: [ + { + display: true, + gridLines: { + display: false + }, + scaleLabel: { + display: true + }, + ticks: { + fontColor: labelColor + } + } + ] + } + }, + data = { + labels: ['MON', 'TUE', 'WED ', 'THU', 'FRI', 'SAT', 'SUN'], + datasets: [ + { + data: [710, 350, 470, 580, 230, 460, 120], + backgroundColor: info, + borderColor: 'transparent', + barThickness: 15 + } + ] + } + + return ( + + +
    + Balance + $74,123 +
    +
    + + +
    +
    + +
    + +
    +
    +
    + ) +} + +export default ChartjsHorizontalBarChart diff --git a/src/views/charts/chart-js/ChartjsLineChart.js b/src/views/charts/chart-js/ChartjsLineChart.js new file mode 100644 index 0000000..d3b36c9 --- /dev/null +++ b/src/views/charts/chart-js/ChartjsLineChart.js @@ -0,0 +1,186 @@ +import Flatpickr from 'react-flatpickr' +import { Calendar, Search } from 'react-feather' +import { Line } from 'react-chartjs-2' +import { Card, CardHeader, CardTitle, CardBody, CardSubtitle, Button } from 'reactstrap' + +const ChartjsLineChart = ({ + tooltipShadow, + gridLineColor, + labelColor, + warningColorShade, + lineChartDanger, + lineChartPrimary +}) => { + const options = { + responsive: true, + maintainAspectRatio: false, + backgroundColor: false, + legend: { + position: 'top', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 10 + } + }, + hover: { + mode: 'label' + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + layout: { + padding: { + top: -15, + bottom: -25, + left: -15 + } + }, + scales: { + xAxes: [ + { + display: true, + scaleLabel: { + display: true + }, + gridLines: { + display: true, + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + fontColor: labelColor + } + } + ], + yAxes: [ + { + display: true, + scaleLabel: { + display: true + }, + ticks: { + stepSize: 100, + min: 0, + max: 400, + fontColor: labelColor + }, + gridLines: { + display: true, + color: gridLineColor, + zeroLineColor: gridLineColor + } + } + ] + }, + legend: { + position: 'top', + align: 'start', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 9 + } + } + }, + data = { + labels: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140], + datasets: [ + { + data: [80, 150, 180, 270, 210, 160, 160, 202, 265, 210, 270, 255, 290, 360, 375], + label: 'Europe', + borderColor: lineChartDanger, + lineTension: 0.5, + pointStyle: 'circle', + backgroundColor: lineChartDanger, + fill: false, + pointRadius: 1, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBorderColor: '#fff', + pointHoverBackgroundColor: lineChartDanger, + pointShadowOffsetX: 1, + pointShadowOffsetY: 1, + pointShadowBlur: 5, + pointShadowColor: tooltipShadow + }, + { + data: [80, 125, 105, 130, 215, 195, 140, 160, 230, 300, 220, 170, 210, 200, 280], + label: 'Asia', + borderColor: lineChartPrimary, + lineTension: 0.5, + pointStyle: 'circle', + backgroundColor: lineChartPrimary, + fill: false, + pointRadius: 1, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBorderColor: '#fff', + pointHoverBackgroundColor: lineChartPrimary, + pointShadowOffsetX: 1, + pointShadowOffsetY: 1, + pointShadowBlur: 5, + pointShadowColor: tooltipShadow + }, + { + data: [80, 99, 82, 90, 115, 115, 74, 75, 130, 155, 125, 90, 140, 130, 180], + label: 'Africa', + borderColor: warningColorShade, + lineTension: 0.5, + pointStyle: 'circle', + backgroundColor: warningColorShade, + fill: false, + pointRadius: 1, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBorderColor: '#fff', + pointHoverBackgroundColor: warningColorShade, + pointShadowOffsetX: 1, + pointShadowOffsetY: 1, + pointShadowBlur: 5, + pointShadowColor: tooltipShadow + } + ] + } + + //** To add spacing between legends and chart + const plugins = [ + { + beforeInit(chart) { + chart.legend.afterFit = function () { + this.height += 20 + } + } + } + ] + + return ( + + {/* +
    +

    비행 현황 목록

    +
    +
    + 검색 +
    +
    */} + +
    + +
    +
    +
    + ) +} + +export default ChartjsLineChart diff --git a/src/views/charts/chart-js/ChartjsPolarAreaChart.js b/src/views/charts/chart-js/ChartjsPolarAreaChart.js new file mode 100644 index 0000000..095bbd6 --- /dev/null +++ b/src/views/charts/chart-js/ChartjsPolarAreaChart.js @@ -0,0 +1,112 @@ +import { Polar } from 'react-chartjs-2' +import { MoreVertical } from 'react-feather' +import { + Card, + CardHeader, + CardTitle, + CardBody, + UncontrolledDropdown, + DropdownToggle, + DropdownMenu, + DropdownItem +} from 'reactstrap' + +const ChartjsPolarAreaChart = ({ + primary, + labelColor, + primaryColorShade, + warningColorShade, + infoColorShade, + greyColor, + successColorShade, + tooltipShadow +}) => { + const options = { + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + legend: { + position: 'right', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 9, + fontColor: labelColor + } + }, + layout: { + padding: { + top: -5, + bottom: -45 + } + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + scale: { + scaleShowLine: true, + scaleLineWidth: 1, + ticks: { + display: false, + fontColor: labelColor + }, + reverse: false, + gridLines: { + display: false + } + }, + animation: { + animateRotate: false + } + }, + data = { + labels: ['Africa', 'Asia', 'Europe', 'America', 'Antarctica', 'Australia'], + datasets: [ + { + label: 'Population (millions)', + backgroundColor: [ + primaryColorShade, + warningColorShade, + primary, + infoColorShade, + greyColor, + successColorShade + ], + data: [19, 17.5, 15, 13.5, 11, 9], + borderWidth: 0 + } + ] + } + + return ( + + + Average Skills + + + + + + Last 28 days + Last Month + Last Year + + + + +
    + +
    +
    +
    + ) +} + +export default ChartjsPolarAreaChart diff --git a/src/views/charts/chart-js/ChartjsRadarChart.js b/src/views/charts/chart-js/ChartjsRadarChart.js new file mode 100644 index 0000000..d840cfd --- /dev/null +++ b/src/views/charts/chart-js/ChartjsRadarChart.js @@ -0,0 +1,112 @@ +import { Radar } from 'react-chartjs-2' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const ChartjsRadarChart = ({ gridLineColor, labelColor }) => { + const options = { + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 500, + legend: { + position: 'top', + labels: { + padding: 25, + fontColor: labelColor + } + }, + layout: { + padding: { + top: -20 + } + }, + tooltips: { + enabled: false, + custom(tooltip) { + const tooltipEl = document.getElementById('tooltip') + if (tooltip.body) { + tooltipEl.style.display = 'block' + if (tooltip.body[0].lines && tooltip.body[0].lines[0]) { + tooltipEl.innerHTML = tooltip.body[0].lines[0] + } + } else { + setTimeout(function () { + tooltipEl.style.display = 'none' + }, 500) + } + } + }, + gridLines: { + display: false + }, + scale: { + ticks: { + maxTicksLimit: 1, + display: false, + fontColor: labelColor + }, + gridLines: { + color: gridLineColor + }, + angleLines: { color: gridLineColor } + } + }, + data = canvas => { + // For radar gradient color + const gradientBlue = canvas.getContext('2d').createLinearGradient(0, 0, 0, 150) + gradientBlue.addColorStop(0, 'rgba(155,136,250, 0.9)') + gradientBlue.addColorStop(1, 'rgba(155,136,250, 0.8)') + + const gradientRed = canvas.getContext('2d').createLinearGradient(0, 0, 0, 150) + gradientRed.addColorStop(0, 'rgba(255,161,161, 0.9)') + gradientRed.addColorStop(1, 'rgba(255,161,161, 0.8)') + + return { + labels: ['STA', 'STR', 'AGI', 'VIT', 'CHA', 'INT'], + datasets: [ + { + label: 'Donté Panlin', + data: [25, 59, 90, 81, 60, 82], + fill: true, + backgroundColor: gradientRed, + borderColor: 'transparent', + pointBackgroundColor: 'transparent', + pointBorderColor: 'transparent' + }, + { + label: 'Mireska Sunbreeze', + data: [40, 100, 40, 90, 40, 90], + fill: true, + backgroundColor: gradientBlue, + borderColor: 'transparent', + pointBackgroundColor: 'transparent', + pointBorderColor: 'transparent' + } + ] + } + } + + //** To add spacing between legends and chart + const plugins = [ + { + beforeInit(chart) { + chart.legend.afterFit = function () { + this.height += 20 + } + } + } + ] + + return ( + + + Radar Chart + + +
    + +
    +
    +
    + ) +} + +export default ChartjsRadarChart diff --git a/src/views/charts/chart-js/ChartjsScatterChart.js b/src/views/charts/chart-js/ChartjsScatterChart.js new file mode 100644 index 0000000..822ac56 --- /dev/null +++ b/src/views/charts/chart-js/ChartjsScatterChart.js @@ -0,0 +1,319 @@ +import { useState } from 'react' +import { Scatter } from 'react-chartjs-2' +import { Card, CardHeader, CardTitle, CardBody, ButtonGroup, Button } from 'reactstrap' + +const ChartjsScatterChart = ({ labelColor, tooltipShadow, gridLineColor, primary, yellowColor, successColorShade }) => { + const [active, setActive] = useState('daily') + + const options = { + responsive: true, + maintainAspectRatio: false, + responsiveAnimationDuration: 800, + title: { + display: false + }, + tooltips: { + // Updated default tooltip UI + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowBlur: 8, + shadowColor: tooltipShadow, + backgroundColor: '#fff', + titleFontColor: '#000', + bodyFontColor: '#000' + }, + scales: { + xAxes: [ + { + gridLines: { + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 10, + min: 0, + max: 140, + fontColor: labelColor + } + } + ], + yAxes: [ + { + gridLines: { + color: gridLineColor, + zeroLineColor: gridLineColor + }, + ticks: { + stepSize: 100, + min: 0, + max: 400, + fontColor: labelColor + } + } + ] + }, + legend: { + position: 'top', + align: 'start', + labels: { + usePointStyle: true, + padding: 25, + boxWidth: 9 + } + }, + layout: { + padding: { + top: -20 + } + } + }, + data = { + datasets: [ + { + label: 'iPhone', + data: [ + { + x: 72, + y: 225 + }, + { + x: 81, + y: 270 + }, + { + x: 90, + y: 230 + }, + { + x: 103, + y: 305 + }, + { + x: 103, + y: 245 + }, + { + x: 108, + y: 275 + }, + { + x: 110, + y: 290 + }, + { + x: 111, + y: 315 + }, + { + x: 109, + y: 350 + }, + { + x: 116, + y: 340 + }, + { + x: 113, + y: 260 + }, + { + x: 117, + y: 275 + }, + { + x: 117, + y: 295 + }, + { + x: 126, + y: 280 + }, + { + x: 127, + y: 340 + }, + { + x: 133, + y: 330 + } + ], + backgroundColor: primary, + borderColor: 'transparent', + pointBorderWidth: 2, + pointHoverBorderWidth: 2, + pointRadius: 5 + }, + { + label: 'Samsung Note', + data: [ + { + x: 13, + y: 95 + }, + { + x: 22, + y: 105 + }, + { + x: 17, + y: 115 + }, + { + x: 19, + y: 130 + }, + { + x: 21, + y: 125 + }, + { + x: 35, + y: 125 + }, + { + x: 13, + y: 155 + }, + { + x: 21, + y: 165 + }, + { + x: 25, + y: 155 + }, + { + x: 18, + y: 190 + }, + { + x: 26, + y: 180 + }, + { + x: 43, + y: 180 + }, + { + x: 53, + y: 202 + }, + { + x: 61, + y: 165 + }, + { + x: 67, + y: 225 + } + ], + backgroundColor: yellowColor, + borderColor: 'transparent', + pointRadius: 5 + }, + { + label: 'OnePlus', + data: [ + { + x: 70, + y: 195 + }, + { + x: 72, + y: 270 + }, + { + x: 98, + y: 255 + }, + { + x: 100, + y: 215 + }, + { + x: 87, + y: 240 + }, + { + x: 94, + y: 280 + }, + { + x: 99, + y: 300 + }, + { + x: 102, + y: 290 + }, + { + x: 110, + y: 275 + }, + { + x: 111, + y: 250 + }, + { + x: 94, + y: 280 + }, + { + x: 92, + y: 340 + }, + { + x: 100, + y: 335 + }, + { + x: 108, + y: 330 + } + ], + backgroundColor: successColorShade, + borderColor: 'transparent', + pointBorderWidth: 2, + pointHoverBorderWidth: 2, + pointRadius: 5 + } + ] + } + + //** */ To add spacing between legends and chart + const plugins = [ + { + beforeInit(chart) { + chart.legend.afterFit = function () { + this.height += 20 + } + } + } + ] + + return ( + + + New Product Data + + + + + + + +
    + +
    +
    +
    + ) +} + +export default ChartjsScatterChart diff --git a/src/views/charts/chart-js/index.js b/src/views/charts/chart-js/index.js new file mode 100644 index 0000000..b500e35 --- /dev/null +++ b/src/views/charts/chart-js/index.js @@ -0,0 +1,269 @@ +// ** React Imports +import { Fragment, useContext, useEffect } from 'react' + +// ** Custom Components +import Breadcrumbs from '@components/breadcrumbs' + +// ** Third Party Components +import { Row, Col } from 'reactstrap' +import { Chart } from 'react-chartjs-2' + +// ** Charts +import BarChart from './ChartjsBarChart' +import LineChart from './ChartjsLineChart' +import AreaChart from './ChartjsAreaChart' +import RadarChart from './ChartjsRadarChart' +import BubbleChart from './ChartjsBubbleChart' +import ScatterChart from './ChartjsScatterChart' +import DoughnutChart from './ChartjsDoughnutChart' +import PolarAreaChart from './ChartjsPolarAreaChart' +import HorizontalBarChart from './ChartjsHorizontalBar' + +// ** Custom Hooks +import { useSkin } from '@hooks/useSkin' + +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' + +const ChartJS = () => { + // ** Context, Hooks & Vars + const { colors } = useContext(ThemeColors), + [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4' + + // ** To Set Border Radius On Mount + useEffect(() => { + /*eslint-disable */ + Chart.elements.Rectangle.prototype.draw = function () { + let ctx = this._chart.ctx + let viewVar = this._view + let left, right, top, bottom, signX, signY, borderSkipped, radius + let borderWidth = viewVar.borderWidth + let cornerRadius = 20 + if (!viewVar.horizontal) { + left = viewVar.x - viewVar.width / 2 + right = viewVar.x + viewVar.width / 2 + top = viewVar.y + bottom = viewVar.base + signX = 1 + signY = top > bottom ? 1 : -1 + borderSkipped = viewVar.borderSkipped || 'bottom' + } else { + left = viewVar.base + right = viewVar.x + top = viewVar.y - viewVar.height / 2 + bottom = viewVar.y + viewVar.height / 2 + signX = right > left ? 1 : -1 + signY = 1 + borderSkipped = viewVar.borderSkipped || 'left' + } + + if (borderWidth) { + let barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)) + borderWidth = borderWidth > barSize ? barSize : borderWidth + let halfStroke = borderWidth / 2 + let borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0) + let borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0) + let borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0) + let borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0) + if (borderLeft !== borderRight) { + top = borderTop + bottom = borderBottom + } + if (borderTop !== borderBottom) { + left = borderLeft + right = borderRight + } + } + + ctx.beginPath() + ctx.fillStyle = viewVar.backgroundColor + ctx.strokeStyle = viewVar.borderColor + ctx.lineWidth = borderWidth + let corners = [ + [left, bottom], + [left, top], + [right, top], + [right, bottom] + ] + + let borders = ['bottom', 'left', 'top', 'right'] + let startCorner = borders.indexOf(borderSkipped, 0) + if (startCorner === -1) { + startCorner = 0 + } + + function cornerAt(index) { + return corners[(startCorner + index) % 4] + } + + let corner = cornerAt(0) + ctx.moveTo(corner[0], corner[1]) + + for (let i = 1; i < 4; i++) { + corner = cornerAt(i) + let nextCornerId = i + 1 + if (nextCornerId == 4) { + nextCornerId = 0 + } + + let nextCorner = cornerAt(nextCornerId) + + let width = corners[2][0] - corners[1][0], + height = corners[0][1] - corners[1][1], + x = corners[1][0], + y = corners[1][1] + + let radius = cornerRadius + + if (radius > height / 2) { + radius = height / 2 + } + if (radius > width / 2) { + radius = width / 2 + } + + if (!viewVar.horizontal) { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x + radius, y) + } else { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x, y) + } + } + + ctx.fill() + if (borderWidth) { + ctx.stroke() + } + } + }, []) + + return ( + + + + +

    + React wrapper for Chart.js. Click{' '} + + here + {' '} + for github repo. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + ) +} + +export default ChartJS diff --git a/src/views/charts/recharts/AreaChart.js b/src/views/charts/recharts/AreaChart.js new file mode 100644 index 0000000..6652a49 --- /dev/null +++ b/src/views/charts/recharts/AreaChart.js @@ -0,0 +1,172 @@ +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import { Calendar } from 'react-feather' +import Flatpickr from 'react-flatpickr' +import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts' + +const data = [ + { + name: '7/12', + sales: 20, + clicks: 60, + visits: 100 + }, + { + name: '8/12', + sales: 40, + clicks: 80, + visits: 120 + }, + { + name: '9/12', + sales: 30, + clicks: 70, + visits: 90 + }, + { + name: '10/12', + sales: 70, + clicks: 110, + visits: 170 + }, + { + name: '11/12', + sales: 40, + clicks: 80, + visits: 130 + }, + { + name: '12/12', + sales: 60, + clicks: 80, + visits: 160 + }, + { + name: '13/12', + sales: 50, + clicks: 100, + visits: 140 + }, + { + name: '14/12', + sales: 140, + clicks: 90, + visits: 240 + }, + { + name: '15/12', + sales: 120, + clicks: 180, + visits: 220 + }, + { + name: '16/12', + sales: 100, + clicks: 160, + visits: 180 + }, + { + name: '17/12', + sales: 140, + clicks: 140, + visits: 270 + }, + { + name: '18/12', + sales: 180, + clicks: 200, + visits: 280 + }, + { + name: '19/12', + sales: 220, + clicks: 220, + visits: 375 + } +] + +const CustomTooltip = data => { + if (data.active && data.payload) { + return ( +
    +

    {data.label}

    +
    +
    + {data.payload.map(i => { + return ( +
    + + + {i.dataKey} : {i.payload[i.dataKey]} + +
    + ) + })} +
    +
    + ) + } + + return null +} + +const SimpleAreaChart = ({ primary }) => { + return ( + + + Website Data +
    + + +
    +
    + + +
    +
    + + Clicks +
    +
    + + Sales +
    +
    + + Visits +
    +
    +
    + + + + + + + + + + + +
    +
    +
    + ) +} +export default SimpleAreaChart diff --git a/src/views/charts/recharts/BarChart.js b/src/views/charts/recharts/BarChart.js new file mode 100644 index 0000000..523f74e --- /dev/null +++ b/src/views/charts/recharts/BarChart.js @@ -0,0 +1,163 @@ +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import { Calendar } from 'react-feather' +import Flatpickr from 'react-flatpickr' +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts' + +const data = [ + { + name: '7/12', + apple: 80, + samsung: 130, + oneplus: 150, + motorola: 210 + }, + { + name: '8/12', + apple: 100, + samsung: 150, + oneplus: 170, + motorola: 380 + }, + { + name: '9/12', + apple: 80, + samsung: 140, + oneplus: 160, + motorola: 220 + }, + { + name: '10/12', + apple: 100, + samsung: 150, + oneplus: 170, + motorola: 380 + }, + { + name: '11/12', + apple: 50, + samsung: 90, + oneplus: 110, + motorola: 150 + }, + { + name: '12/12', + apple: 125, + samsung: 90, + oneplus: 100, + motorola: 65 + }, + { + name: '13/12', + apple: 70, + samsung: 110, + oneplus: 130, + motorola: 210 + }, + { + name: '14/12', + apple: 100, + samsung: 150, + oneplus: 170, + motorola: 380 + }, + { + name: '15/12', + apple: 80, + samsung: 100, + oneplus: 120, + motorola: 180 + }, + { + name: '16/12', + apple: 30, + samsung: 60, + oneplus: 70, + motorola: 110 + } +] + +const CustomTooltip = data => { + if (data.active && data.payload) { + return ( +
    +

    {data.label}

    +
    +
    + {data.payload.map(i => { + return ( +
    + + + {i.dataKey} : {i.payload[i.dataKey]} + +
    + ) + })} +
    +
    + ) + } + + return null +} + +const SimpleBarChart = () => { + return ( + + + Brand Turnover +
    + + +
    +
    + + +
    +
    + + Apple +
    +
    + + Samsung +
    +
    + + Oneplus +
    +
    + + Motorola +
    +
    +
    + + + + + + + + + + + + +
    +
    +
    + ) +} +export default SimpleBarChart diff --git a/src/views/charts/recharts/LineChart.js b/src/views/charts/recharts/LineChart.js new file mode 100644 index 0000000..27aa0f7 --- /dev/null +++ b/src/views/charts/recharts/LineChart.js @@ -0,0 +1,113 @@ +import { Card, CardHeader, CardTitle, CardBody, Badge } from 'reactstrap' +import { ArrowDown } from 'react-feather' +import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts' + +const data = [ + { + name: '7/12', + pv: 280 + }, + { + name: '8/12', + pv: 200 + }, + { + name: '9/12', + pv: 220 + }, + { + name: '10/12', + pv: 180 + }, + { + name: '11/12', + pv: 270 + }, + { + name: '12/12', + pv: 250 + }, + { + name: '13/12', + pv: 70 + }, + { + name: '14/12', + pv: 90 + }, + { + name: '15/12', + pv: 200 + }, + { + name: '16/12', + pv: 150 + }, + { + name: '17/12', + pv: 160 + }, + { + name: '18/12', + pv: 100 + }, + { + name: '19/12', + pv: 150 + }, + { + name: '20/12', + pv: 100 + }, + { + name: '21/12', + pv: 50 + } +] + +const CustomTooltip = ({ active, payload }) => { + if (active && payload) { + return ( +
    + {`${payload[0].value}%`} +
    + ) + } + + return null +} + +const SimpleLineChart = ({ warning }) => { + return ( + + +
    + Balance + Commercial networks & enterprises +
    +
    +
    $ 100,000
    + + + 20% + +
    +
    + + +
    + + + + + + + + + +
    +
    +
    + ) +} +export default SimpleLineChart diff --git a/src/views/charts/recharts/PieChart.js b/src/views/charts/recharts/PieChart.js new file mode 100644 index 0000000..eb109fe --- /dev/null +++ b/src/views/charts/recharts/PieChart.js @@ -0,0 +1,75 @@ +import { Fragment } from 'react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import { PieChart, Pie, Cell, ResponsiveContainer, Label } from 'recharts' + +const SimplePieChart = props => { + const data = [ + { name: 'R&D', value: 50, color: props.series2 }, + { name: 'Operational', value: 85, color: props.series1 }, + { name: 'Networking', value: 16, color: props.series5 }, + { name: 'Hiring', value: 50, color: props.series3 } + ] + /*eslint-disable */ + const RADIAN = Math.PI / 180 + const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent, fill }) => { + const radius = innerRadius + (outerRadius - innerRadius) * 0.5 + const x = cx + radius * Math.cos(-midAngle * RADIAN) + const y = cy + radius * Math.sin(-midAngle * RADIAN) + /*eslint-enable */ + return ( + + {`${(percent * 100).toFixed(0)}%`} + + ) + } + + return ( + + +
    + Expense Ratio + Spending on various categories +
    +
    + + +
    + + + + {data.map((entry, index) => ( + + ))} + + + +
    +
    +
    + + Operational +
    +
    + + Networking +
    +
    + + Hiring +
    +
    + + R&D +
    +
    +
    +
    + ) +} +export default SimplePieChart diff --git a/src/views/charts/recharts/RadarChart.js b/src/views/charts/recharts/RadarChart.js new file mode 100644 index 0000000..2623061 --- /dev/null +++ b/src/views/charts/recharts/RadarChart.js @@ -0,0 +1,81 @@ +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import { Radar, RadarChart, PolarGrid, PolarAngleAxis, PolarRadiusAxis, ResponsiveContainer } from 'recharts' + +const data = [ + { + subject: 'Battery', + 'iPhone 11': 41, + 'Samsung s20': 65 + }, + { + subject: 'Brand', + 'iPhone 11': 64, + 'Samsung s20': 46 + }, + { + subject: 'Camera', + 'iPhone 11': 81, + 'Samsung s20': 42 + }, + { + subject: 'Memory', + 'iPhone 11': 60, + 'Samsung s20': 25 + }, + { + subject: 'Storage', + 'iPhone 11': 42, + 'Samsung s20': 58 + }, + { + subject: 'Display', + 'iPhone 11': 42, + 'Samsung s20': 63 + }, + { + subject: 'OS', + 'iPhone 11': 33, + 'Samsung s20': 76 + }, + { + subject: 'Price', + 'iPhone 11': 23, + 'Samsung s20': 43 + } +] + +const SimpleRadarChart = ({ series1, series3 }) => { + return ( + + + Mobile Comparison + + + +
    + + + + + + + + + + +
    +
    +
    + + Replies +
    +
    + + Shares +
    +
    +
    +
    + ) +} +export default SimpleRadarChart diff --git a/src/views/charts/recharts/ScatterChart.js b/src/views/charts/recharts/ScatterChart.js new file mode 100644 index 0000000..3e6fc52 --- /dev/null +++ b/src/views/charts/recharts/ScatterChart.js @@ -0,0 +1,102 @@ +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' +import { Calendar } from 'react-feather' +import Flatpickr from 'react-flatpickr' +import { ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, ResponsiveContainer } from 'recharts' + +const angularData = [ + { x: 5.4, y: 170 }, + { x: 5.4, y: 100 }, + { x: 5.7, y: 110 }, + { x: 5.9, y: 150 }, + { x: 6.0, y: 200 }, + { x: 6.3, y: 170 }, + { x: 5.7, y: 140 }, + { x: 5.9, y: 130 }, + { x: 7.0, y: 150 }, + { x: 8.0, y: 120 }, + { x: 9.0, y: 170 }, + { x: 10.0, y: 190 }, + { x: 11.0, y: 220 }, + { x: 12.0, y: 170 }, + { x: 13.0, y: 230 } +] + +const vueData = [ + { x: 14.0, y: 220 }, + { x: 15.0, y: 280 }, + { x: 16.0, y: 230 }, + { x: 18.0, y: 320 }, + { x: 17.5, y: 280 }, + { x: 19.0, y: 250 }, + { x: 20.0, y: 350 }, + { x: 20.5, y: 320 }, + { x: 20.0, y: 320 }, + { x: 19.0, y: 280 }, + { x: 17.0, y: 280 }, + { x: 22.0, y: 300 }, + { x: 18.0, y: 120 } +] + +const reactData = [ + { x: 14.0, y: 290 }, + { x: 13.0, y: 190 }, + { x: 20.0, y: 220 }, + { x: 21.0, y: 350 }, + { x: 21.5, y: 290 }, + { x: 22.0, y: 220 }, + { x: 23.0, y: 140 }, + { x: 19.0, y: 400 }, + { x: 20.0, y: 200 }, + { x: 22.0, y: 90 }, + { x: 20.0, y: 120 } +] + +const SimpleScatterChart = ({ primary, success, danger }) => { + return ( + + + Framework Usage +
    + + +
    +
    + + +
    +
    + + React +
    +
    + + Vue +
    +
    + + Angular +
    +
    +
    + + + + + + + + + + +
    +
    +
    + ) +} +export default SimpleScatterChart diff --git a/src/views/charts/recharts/index.js b/src/views/charts/recharts/index.js new file mode 100644 index 0000000..9201f1b --- /dev/null +++ b/src/views/charts/recharts/index.js @@ -0,0 +1,74 @@ +// ** React Imports +import { Fragment, useContext } from 'react' + +// ** Third Party Components +import { Row, Col } from 'reactstrap' + +// ** Custom Components +import Breadcrumbs from '@components/breadcrumbs' + +// ** Charts +import PieChart from './PieChart' +import BarChart from './BarChart' +import LineChart from './LineChart' +import AreaChart from './AreaChart' +import RadarChart from './RadarChart' +import ScatterChart from './ScatterChart' + +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '@styles/react/libs/charts/recharts.scss' + +const Recharts = () => { + // ** Context + const { colors } = useContext(ThemeColors) + + // ** Vars + const donut = { + series1: '#ffe700', + series2: '#00d4bd', + series3: '#826bf8', + series4: '#2b9bf4', + series5: '#FFA1A1' + } + + return ( + + + + +

    + React Chart component with bootstrap and material ui. Click{' '} + + here + {' '} + for github repo. +

    + + + + + + + + + + + + + + + + + + + +
    +
    + ) +} + +export default Recharts diff --git a/src/views/control/alarm/ControlAlarmList.js b/src/views/control/alarm/ControlAlarmList.js new file mode 100644 index 0000000..5657552 --- /dev/null +++ b/src/views/control/alarm/ControlAlarmList.js @@ -0,0 +1,66 @@ +import { X } from 'react-feather'; + +const ControlAlarmList = props => { + return ( +
    +
    +
    +

    알림 리스트

    + +
    +
    +
    +
    +
    +
    전체 2000건
    +
    오늘 120건
    +
    +
    +
    +
    +
    +
    +
    +

    알림 목록

    +
    +
    +
    +
    +
    +
    통신 장애 알림
    +
    6월 17일
    +
    +
    + 통신장애 통신장애 통신장애 통신장애 통신장애 통신장애 통신장애 + 통신장애 통신장애{' '} +
    +
    +
    +
    +
    +
    +
    +
    +
    비행 경로 이탈
    +
    6월 17일
    +
    +
    + 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 + 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 +
    +
    +
    +
    +
    +
    + ); +}; + +export default ControlAlarmList; diff --git a/src/views/control/alarm/ControlAlarmNotice.js b/src/views/control/alarm/ControlAlarmNotice.js new file mode 100644 index 0000000..deaadee --- /dev/null +++ b/src/views/control/alarm/ControlAlarmNotice.js @@ -0,0 +1,45 @@ +import { Bell, ChevronDown, ChevronUp } from "react-feather"; +import { ReactComponent as DroneMenuIcon } from '../../../assets/images/drone_menu_icon.svg'; + +const ControlAlarmNotice = () => { + {/* 알림 위아래 롤링은 구현해주셔야되는데 따른 컴포넌트있으면 그거사용해도됩니다...제가 만들어논거는 45px씩 움직여주면되거든요..저도자세히는모르겠습니다...제이쿼리로만써봐서... */} + return( + +
    + {/*
    +
    + +
    +
    +
    +
    + 2021-06-17 12:00:00AVSF123 장애물 + 지역에 접근하였습니다111. +
    +
    + 2021-06-30 13:00:00AVSF123 + 비행금지구역에 접근하였습니다. +
    +
    + 2021-08-20 14:00:00AVSF123 + 국립공원구역에 접근하였습니다. +
    +
    +
    +
    + + +
    +
    */} + +
    + + + ) +} + +export default ControlAlarmNotice; diff --git a/src/views/control/index.js b/src/views/control/index.js new file mode 100644 index 0000000..cd5cb89 --- /dev/null +++ b/src/views/control/index.js @@ -0,0 +1,18 @@ +import React, { useEffect, useState } from 'react'; +import { MapControl } from '../../components/map/MapControl'; +// import { WebsocketClient } from '../../components/websocket/WebsocketClient'; +import ControlMain from './main/ControlMain'; + +const ControlView = () => { + return ( +
    +
    + +
    + + +
    + ); +}; + +export default ControlView; diff --git a/src/views/control/main/ControlMain.js b/src/views/control/main/ControlMain.js new file mode 100644 index 0000000..c7ec670 --- /dev/null +++ b/src/views/control/main/ControlMain.js @@ -0,0 +1,155 @@ +import React, { useEffect, useState } from 'react'; + +import '../../../assets/css/custom.css'; +import logo from '../../../assets/images/pal_logo.png'; + +import { Sun, Map, Bell } from 'react-feather'; + +import { AiOutlinePoweroff } from 'react-icons/ai'; + +import { ReactComponent as DroneMenuIcon } from '../../../assets/images/drone_menu_icon.svg'; + +import ControlAlarmNotice from '../alarm/ControlAlarmNotice'; +import ControlReportList from '../report/ControlReportList'; +import ControlReportDetail from '../report/ControlReportDetail'; +import WeatherList from '../weather/WeatherList'; +import ControlAlarmList from '../alarm/ControlAlarmList'; +import ControlSetting from '../setting/ControlSetting'; +import WebsocketClient from '../../../components/websocket/WebsocketClient'; +import { useDispatch, useSelector } from 'react-redux'; + +import * as Actions from '../../../modules/account/login/actions/authAction'; + +const ControlMain = () => { + const dispatch = useDispatch(); + + const { isClickObject } = useSelector(state => state.controlMapReducer); + + const [oepnReportList, setOpenReportList] = useState(false); + const [openReportDetail, setOpenReportDetail] = useState(false); + const [openWeatherList, setOpenWeatherList] = useState(false); + + const [openAlarmList, setOpenAlarmList] = useState(false); + + const [openSetting, setOpenSetting] = useState(false); + + const openMenu = val => { + if (val === 'reportList') { + setOpenReportList(true); + setOpenReportDetail(false); + setOpenWeatherList(false); + setOpenAlarmList(false); + } else if (val === 'weatherList') { + setOpenReportList(false); + setOpenReportDetail(false); + setOpenWeatherList(true); + setOpenAlarmList(false); + } else if (val === 'alarmList') { + setOpenReportList(false); + setOpenReportDetail(false); + setOpenWeatherList(false); + setOpenAlarmList(true); + } + }; + + const openReportDetailParam = val => { + console.log(val); + setOpenReportDetail(true); + }; + + const handlerLogout = () => { + dispatch(Actions.logout.request()); + }; + + return ( + <> + + +
    +

    + + PAL +

    +
      +
    • + +
    • + {/*
    • + +
    • +
    • + +
    • */} +
    +
      +
    • + +
    • + + {/* socket_off = 클래스명 변경시 빨간색! 접속이 원할하지않을때 */} +
    +
    + + {oepnReportList ? ( + + ) : ( +
    + )} + {isClickObject ? ( + + ) : ( +
    + )} + {openWeatherList ? ( + + ) : ( +
    + )} + + {openAlarmList ? ( + + ) : ( +
    + )} + + {openSetting ? ( +
    + +
    + +
    +
    + ) : ( +
    + +
    +
    + )} + + ); +}; + +export default ControlMain; diff --git a/src/views/control/menu/ControlMenuLeft.js b/src/views/control/menu/ControlMenuLeft.js new file mode 100644 index 0000000..eceb123 --- /dev/null +++ b/src/views/control/menu/ControlMenuLeft.js @@ -0,0 +1,10 @@ + +import React, { useEffect, useState } from 'react'; + +const ControlMenuLeft = () => { + return( + <> + ) +} + +export default ControlMenuLeft(); \ No newline at end of file diff --git a/src/views/control/report/ControlReportDetail.js b/src/views/control/report/ControlReportDetail.js new file mode 100644 index 0000000..0417f08 --- /dev/null +++ b/src/views/control/report/ControlReportDetail.js @@ -0,0 +1,219 @@ +import moment from 'moment'; +import React from 'react'; +import { X } from 'react-feather'; +import { useDispatch, useSelector } from 'react-redux'; +import drone_img from '../../../assets/images/drone.jpg'; +import drone_yellow from '../../../assets/images/drone_yellow.png'; +import { IMG_PATH } from '../../../configs/constants'; +import { objectUnClickAction } from '../../../modules/control/map/actions/controlMapActions'; +import { + GET_ARCTFT_TYPE_CD, + GET_WGHT_TYPE_CD +} from '../../../utility/CondeUtil'; + +const ControlReportDetail = props => { + const dispatch = useDispatch(); + + const { controlGpDetail, controlDetail } = useSelector( + state => state.controlGpDtlState + ); + + // useEffect(() => { + // // console.log(controlGpDetail); + // }, [controlGpDetail]); + + const handlerClose = () => { + // console.log('================'); + dispatch(objectUnClickAction()); + }; + + const nullMessage = val => { + if (val) { + return val; + } else { + return '-'; + } + }; + + return ( +
    +
    +
    +

    드론 상세정보

    + +
    +
    +
    + + {controlDetail?.arcrftModelNm + ? controlDetail?.arcrftModelNm + : controlGpDetail?.objectId} +
    +
    + {controlDetail?.imageUrl ? ( + + ) : ( + + )} +
    +
    +
    +
    +
    제작번호
    +
    + {nullMessage(controlDetail?.prdctNum)} +
    +
    +
    +
    식별번호
    +
    + {controlGpDetail?.objectId} +
    +
    +
    +
    중량
    +
    + {GET_WGHT_TYPE_CD(controlDetail?.wghtTypeCd)} +
    +
    +
    +
    종류
    +
    + {GET_ARCTFT_TYPE_CD(controlDetail?.arcrftTypeCd)} +
    +
    +
    +
    배터리 잔량
    +
    + {controlGpDetail?.betteryLevel} % +
    +
    +
    +
    배터리 전압
    +
    + {controlGpDetail?.betteryVoltage} volt +
    +
    +
    +
    +
    +
    +
    +
    +

    비행정보

    +
    +
    +
    +
    +
    +
    시작위치
    +
    + {nullMessage(controlDetail?.stAreaNm)} +
    +
    +
    +
    시작시간
    +
    + {moment( + controlGpDetail?.controlStartDt, + 'YYYYMMDDHHmmss' + ).format('MM-DD HH:mm:ss')} +
    +
    + {/*
    +
    현재위치
    +
    + 인천광역시 부평구 안남로 272 +
    +
    */} +
    +
    속도
    +
    + {controlGpDetail?.speed} {controlGpDetail?.speedType} +
    +
    +
    +
    고도
    +
    + {controlGpDetail?.elev} {controlGpDetail?.elevType} +
    +
    +
    +
    좌표
    +
    + {controlGpDetail?.lat} , {controlGpDetail?.lng} +
    +
    +
    +
    비행거리
    +
    + {nullMessage(controlGpDetail?.moveDistance)}{' '} + {controlGpDetail?.moveDistanceType} +
    +
    +
    +
    헤딩 방위각
    +
    + {controlGpDetail?.heading} ° +
    +
    +
    +
    상태
    +
    + {nullMessage(controlGpDetail?.dronStatus)} +
    +
    +
    +
    위치정보 수신 시간
    +
    + {' '} + {moment( + controlGpDetail?.serverRcvDt, + 'YYYYMMDDHHmmss' + ).format('MM-DD HH:mm:ss')} +
    +
    +
    +
    +
    +
    +
    +
    +

    운영자 정보

    +
    +
    +
    +
    + {/*
    +
    소속기관
    +
    팔네트웍스
    +
    */} +
    +
    담당자 이름
    +
    + {' '} + {nullMessage(controlDetail?.ownerNm)} +
    +
    +
    +
    담당자 연락처
    +
    + {nullMessage(controlDetail?.hpno)} +
    +
    +
    +
    +
    +
    +
    + ); +}; + +export default ControlReportDetail; diff --git a/src/views/control/report/ControlReportList.js b/src/views/control/report/ControlReportList.js new file mode 100644 index 0000000..3845551 --- /dev/null +++ b/src/views/control/report/ControlReportList.js @@ -0,0 +1,115 @@ +import moment from 'moment'; +import React, { useEffect, useState } from 'react'; +import { Search, X } from 'react-feather'; +import { useDispatch, useSelector } from 'react-redux'; +import { Badge, Button, Input, InputGroup } from 'reactstrap'; +import { controlGpDtlAction } from '../../../modules/control/gp'; +import { objectClickAction } from '../../../modules/control/map/actions/controlMapActions'; + +const ControlReportList = props => { + const { controlGpList } = useSelector(state => state.controlGpState); + const [filterId, setFilterId] = useState(''); + + const dispatch = useDispatch(); + + useEffect(() => { + // console.log('>>>>', filterId); + controlGpList; + }, [controlGpList]); + + const handlerDetail = (objectId, cntrlId) => { + dispatch(objectClickAction(objectId)); + dispatch(controlGpDtlAction.request(cntrlId)); + }; + + // useEffect(() => {}, [filterId]); + + return ( +
    +
    +
    +

    드론 비행 현황 정보{filterId}

    + +
    +
    + + setFilterId(`${e.target.value}`)} + /> + + +
    +
    +
    +
    +

    드론 현황

    + + {controlGpList ? controlGpList.length : 0} 대 비행중 + +
    + + {controlGpList?.map(item => { + // console.log(item); + + if (item.objectId && item.objectId.indexOf(filterId) != -1) { + console.log(item); + return ( +
    handlerDetail(item.objectId, item.controlId)} + key={item.objectId} + > +
    +
    +
    식별번호
    +
    {item.objectId}
    +
    +
    +
    이륙 위치
    +
    -
    +
    +
    +
    이륙 시간
    +
    + {moment(item.controlStartDt, 'YYYYMMDDHHmmss').format( + 'MM-DD HH:mm:ss' + )} +
    +
    +
    +
    속도(고도)
    +
    + {item.speed ? item.speed : '-'}{' '} + {item.speed ? item.speedType : ''}  ( + {item.elev ? item.elev : '-'}{' '} + {item.elev ? item.elevType : ''}) +
    +
    +
    +
    상태
    +
    + {item.dronStatus ? item.dronStatus : '-'} +
    +
    +
    +
    + ); + } + })} +
    +
    + ); +}; + +export default ControlReportList; diff --git a/src/views/control/setting/ControlSetting.js b/src/views/control/setting/ControlSetting.js new file mode 100644 index 0000000..ae80e35 --- /dev/null +++ b/src/views/control/setting/ControlSetting.js @@ -0,0 +1,548 @@ +import React, { useEffect, useState } from 'react'; +import { Search } from 'react-feather'; +import { BiBuildings, BiGridAlt } from 'react-icons/bi'; +import { CgTrees } from 'react-icons/cg'; +import { VscRadioTower } from 'react-icons/vsc'; +import { useDispatch, useSelector } from 'react-redux'; +import { + Button, + InputGroup, + ButtonGroup, + InputGroupAddon, + Input, + CustomInput +} from 'reactstrap'; +import { + areaClickAction, environmentClickAction, + mapTypeChangeAction, sensorClickAction +} from '../../../modules/control/map/actions/controlMapActions'; + +const ControlSetting = props => { + const dispatch = useDispatch(); + + const mapControl = useSelector(state => state.controlMapReducer); + + // console.log('111111111111111'); + // useEffect(() => { + // console.log('111111111111111'); + // }, []); + useEffect(() => { + console.log('>>>>', mapControl); + }, [mapControl]); + + const handlerMapType = val => { + dispatch(mapTypeChangeAction(val)); + }; + + const handlerAreaClick = val => { + dispatch(areaClickAction(val)); + }; + + const handlerSensorClick = (val, isChecked) => { + if(isChecked){ + dispatch(sensorClickAction(val)); + } else { + dispatch(sensorClickAction('')); + } + }; + + return ( +
    +
    +
    +

    지도유형

    + {/* */} +
    +
    + + + + + +
    +
    + {/*
    +
    +

    지역검색

    +
    +
    + + + + +
    +
    +
    +
    +

    드론 중량

    +
    +
    +
    +
    +
    +
    전체
    +
    + console.log(1111)} + className='custom-control-primary' + type='switch' + id='test11' + name='test02' + inline + /> +
    +
    +
    +
    250g 이하
    +
    + +
    +
    +
    +
    250g 초과~2kg 이하
    +
    + +
    +
    +
    +
    2kg 초과~7kg 이하
    +
    + +
    +
    +
    +
    7kg 초과~25kg 이하
    +
    + +
    +
    +
    +
    25kg 초과~150kg 이하
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    드론 상태

    +
    +
    +
    +
    +
    +
    전체
    +
    + +
    +
    +
    +
    Arming
    +
    + +
    +
    +
    +
    Landing
    +
    + +
    +
    +
    +
    Take off
    +
    + +
    +
    +
    +
    Flight
    +
    + +
    +
    +
    +
    +
    +
    */} +
    +
    +

    공역 표출 정보

    +
    +
    +
    +
    +
    +
    + 비행금지구역 +
    +
    + handlerAreaClick('0001')} + className='custom-control-primary' + type='switch' + id='test01' + name='test01' + inline + defaultChecked={mapControl.area0001} + /> +
    +
    +
    +
    + 비행제한구역 +
    +
    + handlerAreaClick('0002')} + className='custom-control-primary' + type='switch' + id='test02' + name='test02' + inline + defaultChecked={mapControl.area0002} + /> +
    +
    +
    +
    + 관제권(공항) +
    +
    + handlerAreaClick('0003')} + className='custom-control-primary' + type='switch' + id='test03' + name='test03' + inline + defaultChecked={mapControl.area0003} + /> +
    +
    +
    +
    + 비행장(군사) +
    +
    + handlerAreaClick('0004')} + className='custom-control-primary' + type='switch' + id='test04' + name='test04' + inline + defaultChecked={mapControl.area0004} + /> +
    +
    +
    +
    + 이착륙장 +
    +
    + handlerAreaClick('0005')} + className='custom-control-primary' + type='switch' + id='test05' + name='test05' + inline + defaultChecked={mapControl.area0005} + /> +
    +
    +
    +
    + + 초경량비행장치공역 +
    +
    + handlerAreaClick('0006')} + className='custom-control-primary' + type='switch' + id='test06' + name='test06' + inline + defaultChecked={mapControl.area0006} + /> +
    +
    +
    +
    +
    +
    + {/*
    +
    +

    장애물 표출 정보

    +
    +
    +
    +
    +
    +
    + + 전체장애물 +
    +
    + +
    +
    +
    +
    + + 고층 건물 +
    +
    + +
    +
    +
    +
    + + 송전탑 +
    +
    + +
    +
    +
    +
    + + 국립공원 +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    NOTAM 정보

    +
    +
    +
    +
    +
    +
    NOTAM
    +
    + +
    +
    +
    +
    +
    +
    */} +
    +
    +

    환경지표

    +
    +
    +
    +
    +
    +
    + 미세먼지(DUST) +
    +
    + handlerSensorClick('dust', e.target.checked)} + className='custom-control-primary' + type='switch' + id='sensorDust' + name='sensorDust' + inline + checked={mapControl.sensor === 'dust'} + // defaultChecked={mapControl.sensor === 'dust'} + /> +
    +
    +
    +
    + 오존(O3) +
    +
    + handlerSensorClick('o3', e.target.checked)} + className='custom-control-primary' + type='switch' + id='sensorO3' + name='sensorO3' + inline + checked={mapControl.sensor === 'o3'} + // defaultChecked={mapControl.sensor === 'o3'} + /> +
    +
    +
    +
    + 이산화질소(No2) +
    +
    + handlerSensorClick('no2', e.target.checked)} + className='custom-control-primary' + type='switch' + id='sensorNo2' + name='sensorNo2' + inline + checked={mapControl.sensor === 'no2'} + // defaultChecked={mapControl.sensor === 'no2'} + /> +
    +
    +
    +
    + 일산화탄소(Co) +
    +
    + handlerSensorClick('co', e.target.checked)} + className='custom-control-primary' + type='switch' + id='sensorCo' + name='sensorCo' + inline + checked={mapControl.sensor === 'co'} + // defaultChecked={mapControl.sensor === 'co'} + /> +
    +
    +
    +
    + 아황산가스(So2) +
    +
    + handlerSensorClick('so2', e.target.checked)} + className='custom-control-primary' + type='switch' + id='sensorSo2' + name='sensorSo2' + inline + checked={mapControl.sensor === 'so2'} + // defaultChecked={mapControl.sensor === 'so2'} + /> +
    +
    +
    +
    +
    +
    +
    + ); +}; +export default ControlSetting; diff --git a/src/views/control/weather/WeatherList.js b/src/views/control/weather/WeatherList.js new file mode 100644 index 0000000..554558e --- /dev/null +++ b/src/views/control/weather/WeatherList.js @@ -0,0 +1,233 @@ +import React, { useEffect, useState } from 'react'; +import { + CloudDrizzle, + CloudLightning, + Navigation2, + X, + Search, + Compass, + Sun, + Cloud, + CloudRain, + CloudSnow +} from 'react-feather'; +import { Button, InputGroup, InputGroupAddon, Input, Table } from 'reactstrap'; + +const WeatherList = props => { + const [clickTab, setClickTab] = useState(true); + + return ( +
    +
    +
    +

    날씨 상세정보

    + +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    + 검색하신 지역의 날씨 정보입니다. + + 인천광역시 부평구 안남로 272 + +
    + {/* 탭메뉴or탭내용 활성화 active */} +
    +
      + {clickTab ? ( + <> +
    • 오늘
    • + +
    • setClickTab(false)}> + 주간 +
    • + + ) : ( + <> +
    • setClickTab(true)}> + 오늘 +
    • +
    • 주간
    • + + )} +
    +
    + {clickTab ? ( +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    시각날씨기온풍향풍속
    10시 + + 27℃ + + 2m/s
    12시 + + 30℃ + + 3m/s
    14시 + + 28℃ + + 4m/s
    16시 + + 27℃ + + 7m/s
    18시 + + 25℃ + + 2m/s
    20시 + + 26℃ + + 2m/s
    +
    + ) : ( +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    날짜날씨기온
    06.19.(토) 오전 + + 최저 27℃
    06.19.(토) 오후 + + 30℃
    06.20.(일) 오전 + + 30℃
    06.20.(일) 오후 + + 30℃
    06.21.(월) 오전 + + 30℃
    06.21.(월) 오후 + + 30℃
    06.22.(화) 오전 + + 30℃
    06.2.(화) 오후 + + 30℃
    +
    + )} +
    +
    +
    +
    +
    + ); +}; +export default WeatherList; diff --git a/src/views/design/DesignLogin.js b/src/views/design/DesignLogin.js new file mode 100644 index 0000000..4a7cb5c --- /dev/null +++ b/src/views/design/DesignLogin.js @@ -0,0 +1,85 @@ +import React, { useEffect, useState } from 'react'; + +import { + Button, + Card, + CardBody, + Row, + Col, + Form, + FormGroup, + Input, + Label,InputGroup, InputGroupAddon, InputGroupText, +} from 'reactstrap'; +import { Mail, Lock, Check, Facebook, Twitter, GitHub } from 'react-feather'; + +// import googleSvg from '../../assets/img/svg/google.svg'; + +import loginImg from '../../assets/images/login01.png'; + +import '../../assets/css/custom.css'; + +const DesignLogin = () => { + return ( + <> +
    +
    Drone Control System
    +
    + +
    +
    +
    +

    Welcome to Drone Control System

    +

    + control system is a web system that provides +
    + convenient control and monitoring of drones! +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    회원이 아니신가요?
    + +
    +
    +
    비밀번호를 잊으셨나요?
    + +
    +
    +
    +
    + + ); +}; + +export default DesignLogin; diff --git a/src/views/design/DesignMain.js b/src/views/design/DesignMain.js new file mode 100644 index 0000000..d62cb6f --- /dev/null +++ b/src/views/design/DesignMain.js @@ -0,0 +1,1202 @@ +import React, { useEffect, useState } from 'react'; +import { MapControl } from '../../components/map/MapControl'; +import '../../assets/css/custom.css'; +import drone_yellow from '../../assets/images/drone_yellow.png'; +import drone_black from '../../assets/images/drone_black.png'; +import drone_img from '../../assets/images/drone.jpg'; +import logo from '../../assets/images/pal_logo.png'; +import { + Button, + ButtonGroup, + InputGroupAddon, + InputGroup, + Input, + FormGroup, + Row, + Col, + InputGroupText, + CardText, + Badge, + Table, + CustomInput, + UncontrolledTooltip +} from 'reactstrap'; +import { + Search, + X, + ChevronDown, + Link, + Compass, + Sun, + CloudLightning, + Cloud, + CloudRain, + CloudDrizzle, + CloudSnow, + Navigation2, + Map, + Bell, + ChevronUp +} from 'react-feather'; +import { BiGridAlt, BiBuildings } from 'react-icons/bi'; +import { AiOutlinePoweroff } from 'react-icons/ai'; +import { VscRadioTower, VscCompareChanges, VscLoading } from 'react-icons/vsc'; +import { CgTrees } from 'react-icons/cg'; +import { ReactComponent as DroneMenuIcon } from '../../assets/images/drone_menu_icon.svg'; +import DroneIcon from '../../assets/images/drone-marker-icon.png'; +import DroneIconRed from '../../assets/images/drone-marker-icon-red.png'; +import DroneIconYellow from '../../assets/images/drone-marker-icon-yellow.png'; +import DroneIconSkyblue from '../../assets/images/drone-marker-icon-skyblue.png'; +import DroneIconPulple from '../../assets/images/drone-marker-icon-pulple.png'; +import AirplaneIconSkyblue from '../../assets/images/airplane-skyblue.png'; +//드론 현황 리스트 페이지=================================F================== +const DronFlightList = props => { + return ( +
    +
    +
    +

    드론 비행 현황 정보

    + +
    +
    + + + + + + +
    +
    +
    +
    +

    드론 현황

    + + 102대 비행중 + +
    +
    props.setOpenDronFlightDetail(true)} + > +
    +
    +
    식별번호
    +
    GJRY2454
    +
    +
    +
    이륙 위치
    +
    + 인천광역시 서구 로봇랜드로 155-11 +
    +
    +
    +
    이륙 시간
    +
    15:75
    +
    +
    +
    속도/고도
    +
    5.2m/s / 130.5m
    +
    +
    +
    +
    +
    +
    +
    식별번호
    +
    GJRY2454
    +
    +
    +
    이륙 위치
    +
    + 인천광역시 서구 로봇랜드로 155-11 +
    +
    +
    +
    이륙 시간
    +
    15:75
    +
    +
    +
    속도/고도
    +
    5.2m/s / 130.5m
    +
    +
    +
    +
    +
    +
    +
    식별번호
    +
    GJRY2454
    +
    +
    +
    이륙 위치
    +
    + 인천광역시 서구 로봇랜드로 155-11 +
    +
    +
    +
    이륙 시간
    +
    15:75
    +
    +
    +
    속도/고도
    +
    5.2m/s / 130.5m
    +
    +
    +
    +
    +
    +
    +
    식별번호
    +
    GJRY2454
    +
    +
    +
    이륙 위치
    +
    + 인천광역시 서구 로봇랜드로 155-11 +
    +
    +
    +
    이륙 시간
    +
    15:75
    +
    +
    +
    속도/고도
    +
    5.2m/s / 130.5m
    +
    +
    +
    +
    +
    +
    +
    식별번호
    +
    GJRY2454
    +
    +
    +
    이륙 위치
    +
    + 인천광역시 서구 로봇랜드로 155-11 +
    +
    +
    +
    이륙 시간
    +
    15:75
    +
    +
    +
    속도/고도
    +
    5.2m/s / 130.5m
    +
    +
    +
    +
    + {/* */} +
    + ); +}; + +//드론 상세 페이지 +//지은이 화면 구현! +const DronFlightDetail = props => { + return ( +
    +
    +
    +

    드론 상세정보

    + +
    +
    +
    + + MAVIC AIR +
    +
    + +
    +
    +
    +
    +
    기종
    +
    MAVIC AIR
    +
    +
    +
    식별번호
    +
    GRJVO453
    +
    +
    +
    중량
    +
    5KG
    +
    +
    +
    종류
    +
    쿼드콥터
    +
    +
    +
    배터리 잔량
    +
    50%
    +
    +
    +
    배터리 전압
    +
    50 volt
    +
    +
    +
    +
    +
    +
    +
    +

    비행정보

    +
    +
    +
    +
    +
    +
    이륙위치
    +
    + 인천광역시 서구 로봇랜드로 155-11 +
    +
    +
    +
    이륙시간
    +
    13:53:29
    +
    +
    +
    현재위치
    +
    + 인천광역시 부평구 안남로 272 +
    +
    +
    +
    속도
    +
    5.12m/s
    +
    +
    +
    고도
    +
    117.05m
    +
    +
    +
    좌표
    +
    35.232.600,127.650225
    +
    +
    +
    비행거리
    +
    67.05m
    +
    +
    +
    헤딩 방위각
    +
    270
    +
    +
    +
    상태
    +
    TAKEOFF(이륙)
    +
    +
    +
    위치정보 수신 시간
    +
    2021년6월30일 15:30:49
    +
    +
    +
    +
    +
    +
    +
    +

    운영자 정보

    +
    +
    +
    +
    +
    +
    소속기관
    +
    팔네트웍스
    +
    +
    +
    담당자 이름
    +
    홍길동
    +
    +
    +
    담당자 연락처
    +
    010-1234-1234
    +
    +
    +
    +
    +
    + {/*
    +
    +

    날씨 정보

    +
    +
    +
    +
    +
    + 현재위치의 날씨 정보입니다. + 인천광역시 부평구 안남로 272 +
    + + + + + + + + + + + + + + + + + + + +
    시각날씨기온풍향풍속
    15시27℃2m/s
    +
    +
    +
    +
    */} +
    + ); +}; + +//날씨 페이지 +const WeatherList = props => { + return ( +
    +
    +
    +

    날씨 상세정보

    + +
    +
    + + + + + + +
    +
    +
    +
    +
    +
    +
    + 검색하신 지역의 날씨 정보입니다. + + 인천광역시 부평구 안남로 272 + +
    + {/* 탭메뉴or탭내용 활성화 active */} +
    +
      +
    • 오늘
    • +
    • 주간
    • +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    시각날씨기온풍향풍속
    10시 + + 27℃ + + 2m/s
    12시 + + 30℃ + + 3m/s
    14시 + + 28℃ + + 4m/s
    16시 + + 27℃ + + 7m/s
    18시 + + 25℃ + + 2m/s
    20시 + + 26℃ + + 2m/s
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    날짜날씨기온
    06.19.(토) 오전 + + 최저 27℃
    06.19.(토) 오후 + + 30℃
    06.20.(일) 오전 + + 30℃
    06.20.(일) 오후 + + 30℃
    06.21.(월) 오전 + + 30℃
    06.21.(월) 오후 + + 30℃
    06.22.(화) 오전 + + 30℃
    06.2.(화) 오후 + + 30℃
    +
    +
    +
    +
    +
    +
    + ); +}; + +//알림 페이지 + +//날씨 페이지 +const NoticeList = props => { + return ( +
    +
    +
    +

    알림 상세정보

    + +
    +
    +
    +
    +
    +
    전체 2000건
    +
    오늘 120건
    +
    +
    +
    +
    +
    +
    +
    +

    알림 목록

    +
    +
    +
    +
    +
    +
    통신 장애 알림
    +
    6월 17일
    +
    +
    + 통신장애 통신장애 통신장애 통신장애 통신장애 통신장애 통신장애 + 통신장애 통신장애{' '} +
    +
    +
    +
    +
    +
    +
    +
    +
    비행 경로 이탈
    +
    6월 17일
    +
    +
    + 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 + 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 비행경로이탈 +
    +
    +
    +
    +
    +
    + ); +}; + +//지역 검색 및 지도 필터 처리 + +const RightLayer = props => { + return ( +
    +
    +
    +

    지도유형

    + {/* */} +
    +
    + + + + + +
    +
    +
    +
    +

    지역검색

    + {/* */} +
    +
    + + + + + + +
    +
    +
    +
    +

    드론 중량

    +
    +
    +
    +
    +
    +
    전체
    +
    + +
    +
    +
    +
    250g 이하
    +
    + +
    +
    +
    +
    250g 초과~2kg 이하
    +
    + +
    +
    +
    +
    2kg 초과~7kg 이하
    +
    + +
    +
    +
    +
    7kg 초과~25kg 이하
    +
    + +
    +
    +
    +
    25kg 초과~150kg 이하
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    드론 상태

    +
    +
    +
    +
    +
    +
    전체
    +
    + +
    +
    +
    +
    Arming
    +
    + +
    +
    +
    +
    Landing
    +
    + +
    +
    +
    +
    Take off
    +
    + +
    +
    +
    +
    Flight
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    공역 표출 정보

    +
    +
    +
    +
    +
    +
    + 비행금지구역 +
    +
    + +
    +
    +
    +
    + 비행제한구역 +
    +
    + +
    +
    +
    +
    + 관제권(공항) +
    +
    + +
    +
    +
    +
    + 비행장(군사) +
    +
    + +
    +
    +
    +
    + 이착륙장 +
    +
    + +
    +
    +
    +
    + 초경량비행장치공역 +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    장애물 표출 정보

    +
    +
    +
    +
    +
    +
    + + 전체장애물 +
    +
    + +
    +
    +
    +
    + + 고층 건물 +
    +
    + +
    +
    +
    +
    + + 송전탑 +
    +
    + +
    +
    +
    +
    + + 국립공원 +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    NOTAM 정보

    +
    +
    +
    +
    +
    +
    NOTAM
    +
    + +
    +
    +
    +
    +
    +
    +
    + ); +}; +//========================================= 지은이 화면 구현 ================================================================= +const DesignMain = () => { + const [openDronFlightList, setOpenDronFlightList] = useState(false); + const [openDronFlightDetail, setOpenDronFlightDetail] = useState(false); + const [openWeather, setOpenWeather] = useState(false); + const [openNoticeList, setOpenNoticeList] = useState(false); + + const [openRightLayer, setOpenRightLayer] = useState(false); + + return ( +
    +
    + + + + 1 + + + + 2 + + + + 3 + + + + 4 + + + + 5 + + + + + + + + + + + + +
    +
    +
    로봇타워로봇타워로봇타워로봇타워로봇타워로봇타워로봇타워
    +
    +
    + 고도 + 167.05m +
    +
    + 좌표정보 + 35.232600, 127.650225 +
    +
    + +
    +
    +
    + {/* 알림 위아래 롤링은 구현해주셔야되는데 따른 컴포넌트있으면 그거사용해도됩니다...제가 만들어논거는 45px씩 움직여주면되거든요..저도자세히는모르겠습니다...제이쿼리로만써봐서... */} +
    +
    + +
    +
    +
    +
    + 2021-06-17 12:00:00AVSF123 장애물 + 지역에 접근하였습니다. +
    +
    + 2021-06-30 13:00:00AVSF123 + 비행금지구역에 접근하였습니다. +
    +
    + 2021-08-20 14:00:00AVSF123 + 국립공원구역에 접근하였습니다. +
    +
    +
    +
    + + +
    +
    +
    +

    + + PAL +

    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
      +
    • + +
    • +
    • + + + +
    • + {/* socket_off = 클래스명 변경시 빨간색! 접속이 원할하지않을때 */} +
    +
    + + {openDronFlightList ? ( + + ) : ( +
    + )} + {openWeather ? :
    } + + {openNoticeList ? ( + + ) : ( +
    + )} + + {openDronFlightDetail ? ( + + ) : ( +
    + )} + + {openRightLayer ? ( +
    + +
    + +
    +
    + ) : ( +
    + +
    +
    + )} +
    + ); +}; + +export default DesignMain; diff --git a/src/views/design/DesignMenu.js b/src/views/design/DesignMenu.js new file mode 100644 index 0000000..c2122c6 --- /dev/null +++ b/src/views/design/DesignMenu.js @@ -0,0 +1,21 @@ +import React, { useEffect, useState } from 'react'; +import '../../assets/css/custom.css'; +import menu01 from "../../assets/images/menu01.png"; +import menu02 from "../../assets/images/menu02.png"; +import menu03 from "../../assets/images/menu03.png"; + + +const DesignMenu = () => { + return ( + <> + + + ); +}; + +export default DesignMenu; diff --git a/src/views/design/DesignRegister.js b/src/views/design/DesignRegister.js new file mode 100644 index 0000000..7e8d686 --- /dev/null +++ b/src/views/design/DesignRegister.js @@ -0,0 +1,38 @@ +import { useRef, useState, useEffect } from 'react' +import Wizard from '@components/wizard' +import Address from '../../views/forms/wizard/steps-with-validation/Address' +import SocialLinks from '../../views/forms/wizard/steps-with-validation/SocialLinks' +import PersonalInfo from '../../views/forms/wizard/steps-with-validation/PersonalInfo' +import AccountDetails from '../../views/forms/wizard/steps-with-validation/AccountDetails' +import { Card, CardBody, CardTitle, CardText, Form, FormGroup, Label, Input, CustomInput, Button } from 'reactstrap' +import '@styles/base/pages/page-auth.scss' +import { ArrowRight } from 'react-feather' +import '../../assets/css/custom.css' + +const DesignRegister = () => { + const [stepper, setStepper] = useState(null) + const ref = useRef(null) + + const steps = [ + { + id: 'account-details', + title: '약관동의', + subtitle: 'STEP01', + content: + } + ] + + return ( +
    +
    +
    +
    + setStepper(el)} ref={ref} steps={steps} /> +
    +
    +
    +
    + ) +} + +export default DesignRegister; diff --git a/src/views/design/DesignRegister2.js b/src/views/design/DesignRegister2.js new file mode 100644 index 0000000..d3a24bb --- /dev/null +++ b/src/views/design/DesignRegister2.js @@ -0,0 +1,153 @@ +import { useRef, useState, useEffect } from 'react' +import { Fragment } from 'react' +import Wizard from '@components/wizard' +import Address from '../forms/wizard/steps-with-validation/Address' +import SocialLinks from '../forms/wizard/steps-with-validation/SocialLinks' +import PersonalInfo from '../forms/wizard/steps-with-validation/PersonalInfo' +import AccountDetails from '../forms/wizard/steps-with-validation/AccountDetails' +import { Card, CardBody, CardTitle, CardText, Form, FormGroup, Label, + Input, CustomInput, Button, Row, Col, + Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap' +import '@styles/base/pages/page-auth.scss' +import { Check, X } from 'react-feather' +import '../../assets/css/custom.css' + +const DesignRegister2 = () => { + const [formModal, setFormModal] = useState(false); + return ( +
    +
    +
    +
    + + + +
    + + +
    +
    아이디 찾기
    +

    회원정보에 등록한 이름/휴대전화 번호와 입력한 이름/휴대전화 번호가 같아야, 인증번호를 받을 수 있습니다.

    +
    +
    + + +
    + +
    +
    + + +
    + + + + + + + + + +
    +
    + {/* 발송 버튼을 누르면 남은시간 d-none를 빼주세여~ 그럼나타나여~ */} + + 남은시간 : 3:00 + + + 인증번호 발송 + +
    +
    + + +
    + +
    +
    + + 인증하기 + +
    +
    +
    +
    + + 취소 + + setFormModal(!formModal)}> + 완료 + +
    +
    +
    +
    +
    +
    + setFormModal(!formModal)} + className='modal-dialog-centered' + > + setFormModal(!formModal)}> + 아이디 찾기 + + + {/* */} + + + + + + + +
    +
    +
    +
    +
    + ) +} + +export default DesignRegister2; diff --git a/src/views/design/DesignRegister3.js b/src/views/design/DesignRegister3.js new file mode 100644 index 0000000..ab024a4 --- /dev/null +++ b/src/views/design/DesignRegister3.js @@ -0,0 +1,181 @@ +import { useRef, useState, useEffect } from 'react' +import { Fragment } from 'react' +import Wizard from '@components/wizard' +import Address from '../forms/wizard/steps-with-validation/Address' +import SocialLinks from '../forms/wizard/steps-with-validation/SocialLinks' +import PersonalInfo from '../forms/wizard/steps-with-validation/PersonalInfo' +import AccountDetails from '../forms/wizard/steps-with-validation/AccountDetails' +import { Card, CardBody, CardTitle, CardText, Form, FormGroup, Label, + Input, CustomInput, Button, Row, Col, + Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap' +import '@styles/base/pages/page-auth.scss' +import { Check, X } from 'react-feather' +import '../../assets/css/custom.css' + +const DesignRegister3 = () => { + const [formModal, setFormModal] = useState(false); + return ( +
    +
    +
    +
    + + + +
    + + +
    +
    비밀번호 찾기
    +

    회원정보에 등록한 이름/휴대전화 번호와 입력한 이름/휴대전화 번호가 같아야, 인증번호를 받을 수 있습니다.

    +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + + + + + + + + + +
    +
    + {/* 발송 버튼을 누르면 남은시간 d-none를 빼주세여~ 그럼나타나여~ */} + + 남은시간 : 3:00 + + + 인증번호 발송 + +
    +
    + + +
    + +
    +
    + + 인증하기 + +
    +
    +
    +
    + + 취소 + + setFormModal(!formModal)}> + 완료 + +
    +
    +
    +
    +
    +
    + setFormModal(!formModal)} + className='modal-dialog-centered' + > + setFormModal(!formModal)}> + 비밀번호 찾기 + + + + + + + + + + + + + + {/* */} + + + {/* + */} + + + +
    +
    +
    +
    +
    + ) +} + +export default DesignRegister3; diff --git a/src/views/design/DesignSample.js b/src/views/design/DesignSample.js new file mode 100644 index 0000000..e8339da --- /dev/null +++ b/src/views/design/DesignSample.js @@ -0,0 +1,263 @@ +// ** React Imports +import { Fragment, useContext, useEffect } from 'react' + +// ** Custom Components +import Breadcrumbs from '@components/breadcrumbs' + +// ** Third Party Components +import { Row, Col } from 'reactstrap' +import { Chart } from 'react-chartjs-2' + +// ** Charts +import BarChart from '../../views/charts/chart-js/ChartjsBarChart' +import LineChart from '../../views/charts/chart-js/ChartjsLineChart' +import AreaChart from '../../views/charts/chart-js/ChartjsAreaChart' +import RadarChart from '../../views/charts/chart-js/ChartjsRadarChart' +import BubbleChart from '../../views/charts/chart-js/ChartjsBubbleChart' +import ScatterChart from '../../views/charts/chart-js/ChartjsScatterChart' +import DoughnutChart from '../../views/charts/chart-js/ChartjsDoughnutChart' +import PolarAreaChart from '../../views/charts/chart-js/ChartjsPolarAreaChart' +import HorizontalBarChart from '../../views/charts/chart-js/ChartjsHorizontalBar' + +// ** Custom Hooks +import { useSkin } from '@hooks/useSkin' + +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../assets/css/custom.css'; + +const DesignSample = () => { + // ** Context, Hooks & Vars + const { colors } = useContext(ThemeColors), + [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4' + + // ** To Set Border Radius On Mount + useEffect(() => { + /*eslint-disable */ + Chart.elements.Rectangle.prototype.draw = function () { + let ctx = this._chart.ctx + let viewVar = this._view + let left, right, top, bottom, signX, signY, borderSkipped, radius + let borderWidth = viewVar.borderWidth + let cornerRadius = 20 + if (!viewVar.horizontal) { + left = viewVar.x - viewVar.width / 2 + right = viewVar.x + viewVar.width / 2 + top = viewVar.y + bottom = viewVar.base + signX = 1 + signY = top > bottom ? 1 : -1 + borderSkipped = viewVar.borderSkipped || 'bottom' + } else { + left = viewVar.base + right = viewVar.x + top = viewVar.y - viewVar.height / 2 + bottom = viewVar.y + viewVar.height / 2 + signX = right > left ? 1 : -1 + signY = 1 + borderSkipped = viewVar.borderSkipped || 'left' + } + + if (borderWidth) { + let barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)) + borderWidth = borderWidth > barSize ? barSize : borderWidth + let halfStroke = borderWidth / 2 + let borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0) + let borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0) + let borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0) + let borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0) + if (borderLeft !== borderRight) { + top = borderTop + bottom = borderBottom + } + if (borderTop !== borderBottom) { + left = borderLeft + right = borderRight + } + } + + ctx.beginPath() + ctx.fillStyle = viewVar.backgroundColor + ctx.strokeStyle = viewVar.borderColor + ctx.lineWidth = borderWidth + let corners = [ + [left, bottom], + [left, top], + [right, top], + [right, bottom] + ] + + let borders = ['bottom', 'left', 'top', 'right'] + let startCorner = borders.indexOf(borderSkipped, 0) + if (startCorner === -1) { + startCorner = 0 + } + + function cornerAt(index) { + return corners[(startCorner + index) % 4] + } + + let corner = cornerAt(0) + ctx.moveTo(corner[0], corner[1]) + + for (let i = 1; i < 4; i++) { + corner = cornerAt(i) + let nextCornerId = i + 1 + if (nextCornerId == 4) { + nextCornerId = 0 + } + + let nextCorner = cornerAt(nextCornerId) + + let width = corners[2][0] - corners[1][0], + height = corners[0][1] - corners[1][1], + x = corners[1][0], + y = corners[1][1] + + let radius = cornerRadius + + if (radius > height / 2) { + radius = height / 2 + } + if (radius > width / 2) { + radius = width / 2 + } + + if (!viewVar.horizontal) { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x + radius, y) + } else { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x, y) + } + } + + ctx.fill() + if (borderWidth) { + ctx.stroke() + } + } + }, []) + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } + + export default DesignSample; + \ No newline at end of file diff --git a/src/views/design/history/record/DesignHistory1.js b/src/views/design/history/record/DesignHistory1.js new file mode 100644 index 0000000..4036b6c --- /dev/null +++ b/src/views/design/history/record/DesignHistory1.js @@ -0,0 +1,316 @@ +// ** React Imports +import { Fragment, useContext, useEffect } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Label } from 'reactstrap' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +import { Chart } from 'react-chartjs-2' +import LineChart from '../../../charts/chart-js/ChartjsLineChart' +// ** Custom Hooks +import { useSkin } from '@hooks/useSkin' +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors' +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + +// ** icon, img +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather' +import react from '@src/assets/images/icons/react.svg' +import vuejs from '@src/assets/images/icons/vuejs.svg' +import angular from '@src/assets/images/icons/angular.svg' +import bootstrap from '@src/assets/images/icons/bootstrap.svg' + +const DesignHistory1 = () => { + // ** Context, Hooks & Vars + const { colors } = useContext(ThemeColors), + [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4' + + // ** To Set Border Radius On Mount + useEffect(() => { + /*eslint-disable */ + Chart.elements.Rectangle.prototype.draw = function () { + let ctx = this._chart.ctx + let viewVar = this._view + let left, right, top, bottom, signX, signY, borderSkipped, radius + let borderWidth = viewVar.borderWidth + let cornerRadius = 20 + if (!viewVar.horizontal) { + left = viewVar.x - viewVar.width / 2 + right = viewVar.x + viewVar.width / 2 + top = viewVar.y + bottom = viewVar.base + signX = 1 + signY = top > bottom ? 1 : -1 + borderSkipped = viewVar.borderSkipped || 'bottom' + } else { + left = viewVar.base + right = viewVar.x + top = viewVar.y - viewVar.height / 2 + bottom = viewVar.y + viewVar.height / 2 + signX = right > left ? 1 : -1 + signY = 1 + borderSkipped = viewVar.borderSkipped || 'left' + } + + if (borderWidth) { + let barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)) + borderWidth = borderWidth > barSize ? barSize : borderWidth + let halfStroke = borderWidth / 2 + let borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0) + let borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0) + let borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0) + let borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0) + if (borderLeft !== borderRight) { + top = borderTop + bottom = borderBottom + } + if (borderTop !== borderBottom) { + left = borderLeft + right = borderRight + } + } + + ctx.beginPath() + ctx.fillStyle = viewVar.backgroundColor + ctx.strokeStyle = viewVar.borderColor + ctx.lineWidth = borderWidth + let corners = [ + [left, bottom], + [left, top], + [right, top], + [right, bottom] + ] + + let borders = ['bottom', 'left', 'top', 'right'] + let startCorner = borders.indexOf(borderSkipped, 0) + if (startCorner === -1) { + startCorner = 0 + } + + function cornerAt(index) { + return corners[(startCorner + index) % 4] + } + + let corner = cornerAt(0) + ctx.moveTo(corner[0], corner[1]) + + for (let i = 1; i < 4; i++) { + corner = cornerAt(i) + let nextCornerId = i + 1 + if (nextCornerId == 4) { + nextCornerId = 0 + } + + let nextCorner = cornerAt(nextCornerId) + + let width = corners[2][0] - corners[1][0], + height = corners[0][1] - corners[1][1], + x = corners[1][0], + y = corners[1][1] + + let radius = cornerRadius + + if (radius > height / 2) { + radius = height / 2 + } + if (radius > width / 2) { + radius = width / 2 + } + + if (!viewVar.horizontal) { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x + radius, y) + } else { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x, y) + } + } + + ctx.fill() + if (borderWidth) { + ctx.stroke() + } + } + }, []) + + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + 검색 +
    +
    + + +
    +
    +
    +
    +
    일자
    +
    + {/*
    + +
    */} +
    + + +
    + + +
    + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    중량
    +
    + {/*
    + +
    */} +
    + + + + + + +
    +
    +
    +
    +
    +
    +
    식별번호
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    비행 현황 목록

    + 검색결과 총 1028건 +
    +
    + 엑셀다운로드 +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    일자식별번호이륙 위치이륙 시간착륙 위치착륙 시간총 비행 거리총 비행 시간이력 보기
    2021년 7월 1일 (목요일)ANVJRJF56834인천광역시 서구 로봇랜드로 155-1115:23:45인천광역시 서구 로봇랜드로 155-1115:23:4553.4m25분14초상세보기
    + +
    +
    +
    +
    + ) + } + + export default DesignHistory1; + \ No newline at end of file diff --git a/src/views/design/history/record/DesignHistory2.js b/src/views/design/history/record/DesignHistory2.js new file mode 100644 index 0000000..6d573b7 --- /dev/null +++ b/src/views/design/history/record/DesignHistory2.js @@ -0,0 +1,339 @@ +// ** React Imports +import { Fragment, useContext, useEffect } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput +} from 'reactstrap'; +import Flatpickr from 'react-flatpickr'; +import { Calendar } from 'react-feather'; + +import { Chart } from 'react-chartjs-2'; +import LineChart from '../../../charts/chart-js/ChartjsLineChart'; +// ** Custom Hooks +import { useSkin } from '@hooks/useSkin'; +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors'; +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '../../../../assets/css/custom.css'; + +// ** icon, img +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather'; +import react from '@src/assets/images/icons/react.svg'; +import vuejs from '@src/assets/images/icons/vuejs.svg'; +import angular from '@src/assets/images/icons/angular.svg'; +import bootstrap from '@src/assets/images/icons/bootstrap.svg'; + +const DesignHistory1 = () => { + // ** Context, Hooks & Vars + const { colors } = useContext(ThemeColors), + [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4'; + + // ** To Set Border Radius On Mount + useEffect(() => { + /*eslint-disable */ + Chart.elements.Rectangle.prototype.draw = function () { + let ctx = this._chart.ctx; + let viewVar = this._view; + let left, right, top, bottom, signX, signY, borderSkipped, radius; + let borderWidth = viewVar.borderWidth; + let cornerRadius = 20; + if (!viewVar.horizontal) { + left = viewVar.x - viewVar.width / 2; + right = viewVar.x + viewVar.width / 2; + top = viewVar.y; + bottom = viewVar.base; + signX = 1; + signY = top > bottom ? 1 : -1; + borderSkipped = viewVar.borderSkipped || 'bottom'; + } else { + left = viewVar.base; + right = viewVar.x; + top = viewVar.y - viewVar.height / 2; + bottom = viewVar.y + viewVar.height / 2; + signX = right > left ? 1 : -1; + signY = 1; + borderSkipped = viewVar.borderSkipped || 'left'; + } + + if (borderWidth) { + let barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)); + borderWidth = borderWidth > barSize ? barSize : borderWidth; + let halfStroke = borderWidth / 2; + let borderLeft = + left + (borderSkipped !== 'left' ? halfStroke * signX : 0); + let borderRight = + right + (borderSkipped !== 'right' ? -halfStroke * signX : 0); + let borderTop = + top + (borderSkipped !== 'top' ? halfStroke * signY : 0); + let borderBottom = + bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0); + if (borderLeft !== borderRight) { + top = borderTop; + bottom = borderBottom; + } + if (borderTop !== borderBottom) { + left = borderLeft; + right = borderRight; + } + } + + ctx.beginPath(); + ctx.fillStyle = viewVar.backgroundColor; + ctx.strokeStyle = viewVar.borderColor; + ctx.lineWidth = borderWidth; + let corners = [ + [left, bottom], + [left, top], + [right, top], + [right, bottom] + ]; + + let borders = ['bottom', 'left', 'top', 'right']; + let startCorner = borders.indexOf(borderSkipped, 0); + if (startCorner === -1) { + startCorner = 0; + } + + function cornerAt(index) { + return corners[(startCorner + index) % 4]; + } + + let corner = cornerAt(0); + ctx.moveTo(corner[0], corner[1]); + + for (let i = 1; i < 4; i++) { + corner = cornerAt(i); + let nextCornerId = i + 1; + if (nextCornerId == 4) { + nextCornerId = 0; + } + + let nextCorner = cornerAt(nextCornerId); + + let width = corners[2][0] - corners[1][0], + height = corners[0][1] - corners[1][1], + x = corners[1][0], + y = corners[1][1]; + + let radius = cornerRadius; + + if (radius > height / 2) { + radius = height / 2; + } + if (radius > width / 2) { + radius = width / 2; + } + + if (!viewVar.horizontal) { + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + } else { + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo( + x + width, + y + height, + x + width - radius, + y + height + ); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x, y); + } + } + + ctx.fill(); + if (borderWidth) { + ctx.stroke(); + } + }; + }, []); + + return ( +
    + + +
    +
    +

    검색조건

    +
    +
    + + + 검색 + +
    +
    + + +
    +
    +
    +
    +
    시간
    +
    +
    + + +
    + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    비행상태
    +
    + {/*
    + +
    */} +
    + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    ANVJRJF56834 비행 이력 상세 정보

    +
    +
    + + + 엑셀다운로드 + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    시간위도경도헤딩 방위각고도속도배터리잔량상태
    목 09:30:1933.5130126.4572180142m24.4m/s80%Atming(이륙 전)
    + +
    +
    + ); +}; + +export default DesignHistory1; diff --git a/src/views/design/history/record/DesignHistory3.js b/src/views/design/history/record/DesignHistory3.js new file mode 100644 index 0000000..c7e4976 --- /dev/null +++ b/src/views/design/history/record/DesignHistory3.js @@ -0,0 +1,62 @@ +import { Fragment } from 'react' +import { Row, Col } from 'reactstrap' +import { useRTL } from '@hooks/useRTL' +import SliderColors from '@src/views/extensions/sliders/SliderColors' +import SliderValues from '@src/views/extensions/sliders/SliderValues' +import SliderVertical from '@src/views/extensions/sliders/SliderVertical' +import SliderBehaviour from '@src/views/extensions/sliders/SliderBehaviour' +import SliderScalePips from '@src/views/extensions/sliders/SliderScalePips' +import SliderWithInput from '@src/views/extensions/sliders/SliderWithInput' +import SliderBootstrap from '@src/views/extensions/sliders/SlidersBootstrap' +import SliderConnectUpper from '@src/views/extensions/sliders/SliderConnectUpper' +import SliderVerticalLimit from '@src/views/extensions/sliders/SliderVerticalLimit' +import SliderVerticalTooltip from '@src/views/extensions/sliders/SliderVerticalTooltips' + +import '@styles/react/libs/noui-slider/noui-slider.scss' + + +const Slider = () => { + const [isRtl, setIsRtl] = useRTL() + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export default Slider diff --git a/src/views/design/mypage/airframe/DesignAir1.js b/src/views/design/mypage/airframe/DesignAir1.js new file mode 100644 index 0000000..e6315e5 --- /dev/null +++ b/src/views/design/mypage/airframe/DesignAir1.js @@ -0,0 +1,167 @@ +import { useState } from 'react' +import Repeater from '@components/repeater' +import { Row, Col, Card, CardHeader, CardBody, Form, FormGroup, Label, Input, Button, CustomInput } from 'reactstrap' +import { X, Plus, ArrowLeftCircle, Folder, ChevronsRight, ChevronRight, List } from 'react-feather' +import '../../../../assets/css/custom.css' + +const DesignAir1 = () => { + + return ( +
    +
    +
    +

    기체 등록 관리

    +
    +
    + +
    +
    + + + + +
    +
    +
    +

    그룹 목록

    +
    +
    +
    + 최상단 메뉴 추가 + 메뉴 추가 + 삭제 +
    +
    +
      +
    • 기초 정보 관리
      +
        +
      • 그룹 관리
        +
          +
        • 그룹 목록
        • +
        • 승인 관리
        • +
        • 관리자 관리
        • +
        +
      • +
      • 기체 관리
        +
          +
        • 기체 목록
        • +
        +
      • +
      +
    • +
    • 시스템 관리
      +
        +
      • 코드 정보 관리
        +
          +
        • 코드 관리
        • +
        +
      • +
      • 메뉴/권한 관리
        +
          +
        • 메뉴 관리
        • +
        • 권한 관리
        • +
        • 권한 별 메뉴 관리
        • +
        +
      • +
      • 사용자 관리
        +
          +
        • 사용자 관리
        • +
        +
      • +
      +
    • +
    • 통계
      +
        +
      • 비행 통계
        +
          +
        • 비행 통계 차트
        • +
        +
      • +
      • 기체 통계
        +
          +
        • 기체 통계 차트
        • +
        +
      • +
      +
    • +
    +
    +
    +
    +
    + + + + +
    +
    +
    +

    기체 목록

    +
    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + 저장 + 삭제 +
    +
    +
    +
    + +
    +
    + ) +} + +export default DesignAir1 diff --git a/src/views/design/mypage/group/DesignGroup1.js b/src/views/design/mypage/group/DesignGroup1.js new file mode 100644 index 0000000..35835b9 --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup1.js @@ -0,0 +1,212 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label +} from 'reactstrap'; + +import Flatpickr from 'react-flatpickr'; +import { Calendar } from 'react-feather'; + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '../../../../assets/css/custom.css'; + +// ** icon, img +import { MoreVertical, Edit, Trash, Search, File, X } from 'react-feather'; + +const DesignGroup1 = () => { + const [formModal, setFormModal] = useState(false); + return ( +
    +
    +
    +

    그룹 코드 관리

    +
    + {/*
    + +
    */} +
    +
    + + +
    +
    +

    그룹목록 검색조건

    +
    +
    + + + 검색 + + {/* */} +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +

    그룹 목록

    +
    +
    + setFormModal(!formModal)} + > + 그룹생성 + + + 그룹가입 + +
    +
    +
    + setFormModal(!formModal)} + className='modal-dialog-centered' + > + setFormModal(!formModal)}> + 그룹 생성 + + + + + + + + + {' '} + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    그룹명그룹 코드운영자 명그룹 구분 코드승인 여부승인 일시가입 일시더보기
    팔네트웍스ANVJRJF56834홍길동단체승인2021-01-01 15:23:452021-01-01 15:23:45 + + 상세보기 + +
    팔네트웍스ANVJRJF56834홍길동단체승인2021-01-01 15:23:452021-01-01 15:23:45 + + 상세보기 + +
    팔네트웍스ANVJRJF56834홍길동단체승인2021-01-01 15:23:452021-01-01 15:23:45 + + 상세보기 + +
    + +
    +
    +
    + ); +}; +export default DesignGroup1; diff --git a/src/views/design/mypage/group/DesignGroup2.js b/src/views/design/mypage/group/DesignGroup2.js new file mode 100644 index 0000000..886429d --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup2.js @@ -0,0 +1,198 @@ +import React, { useState } from 'react'; +import { + Row, + Col, + Table, + Badge, + UncontrolledDropdown, + DropdownMenu, + DropdownItem, + DropdownToggle, + Card, + CardHeader, + CardBody, + CardTitle, + CardSubtitle, + ButtonGroup, + Button, + Input, + CustomInput, + FormGroup, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + Label, + Breadcrumb, + BreadcrumbItem +} from 'reactstrap'; + +import { Link } from 'react-router-dom'; +import Flatpickr from 'react-flatpickr'; +import { Calendar } from 'react-feather'; + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '../../../../assets/css/custom.css'; + +// ** icon, img +import { + MoreVertical, + Edit, + Trash, + Search, + File, + ArrowLeftCircle, + X +} from 'react-feather'; + +const DesignGroup2 = () => { + const [formModal, setFormModal] = useState(false); + return ( +
    +
    +
    +

    그룹 코드 관리

    +
    +
    + + + +
    +
    + +
    + + +
    +
    +

    그룹목록 검색조건

    +
    +
    + + + 검색 + + {/* */} +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    운영자 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +

    그룹 목록

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    그룹 명그룹 코드운영자 명가입
    팔네트웍스ANVJRJF56834홍길동 + 가입신청 +
    가나다마라바사아ANVJRJF56834홍길동 + 신청취소 +
    + +
    +
    +
    + ); +}; +export default DesignGroup2; diff --git a/src/views/design/mypage/group/DesignGroup3.js b/src/views/design/mypage/group/DesignGroup3.js new file mode 100644 index 0000000..1804bde --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup3.js @@ -0,0 +1,121 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeft, ArrowLeftCircle, X, XCircle } from 'react-feather' +const DesignGroup3 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    +
    +
    +

    그룹 코드 관리

    +
    +
    + +
    +
    + + + + +
    +
    +
    +

    그룹 코드 관리 상세정보

    +
    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    +
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + +
    +
    +
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + 저장 + 목록 + 탈퇴 +
    +
    +
    +
    + +
    +
    + ) +} +export default DesignGroup3 \ No newline at end of file diff --git a/src/views/design/mypage/group/DesignGroup4.js b/src/views/design/mypage/group/DesignGroup4.js new file mode 100644 index 0000000..344463a --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup4.js @@ -0,0 +1,132 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File } from 'react-feather' + +const DesignGroup4 = () => { + + return ( +
    + + +
    +
    +

    그룹승인 검색조건

    +
    +
    + 검색 +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    신청자 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    승인여부
    +
    + {/*
    + +
    */} +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    그룹 가입신청 목록

    + {/* 검색결과 총 1028건 */} +
    +
    + 가입승인 + 가입거절 +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    그룹명그룹 코드신청자 명신청자 ID승인 여부가입 일시더보기
    팔네트웍스ANVJRJF56834홍길동TEST01승인2021-01-01 15:23:45상세보기
    + +
    +
    + ) +} +export default DesignGroup4 \ No newline at end of file diff --git a/src/views/design/mypage/group/DesignGroup5.js b/src/views/design/mypage/group/DesignGroup5.js new file mode 100644 index 0000000..da71de8 --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup5.js @@ -0,0 +1,127 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeftCircle } from 'react-feather' + +const DesignGroup5 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    + + +
    +
    + +

    그룹 가입신청 상세정보

    +
    + {/*
    + 검색 +
    */} +
    + + +
    +
    +
    +
    +

    *필수 입력 항목

    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + 저장 + 목록 + {/* 탈퇴 */} +
    +
    +
    + +
    +
    + ) +} +export default DesignGroup5 \ No newline at end of file diff --git a/src/views/design/mypage/group/DesignGroup6.js b/src/views/design/mypage/group/DesignGroup6.js new file mode 100644 index 0000000..ccda1a2 --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup6.js @@ -0,0 +1,133 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File } from 'react-feather' + +const DesignGroup6 = () => { + + return ( +
    + + +
    +
    +

    그룹 관리자 권한 검색조건

    +
    +
    + 검색 +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    사용자 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    권한 명
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    그룹 관리자 권한 목록

    + {/* 검색결과 총 1028건 */} +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    그룹명그룹 코드사용자 명사용자 ID권한 명가입 일시더보기
    팔네트웍스ANVJRJF56834홍길동TEST01관리자2021-01-01 15:23:45상세보기
    + +
    +
    + ) +} +export default DesignGroup6 \ No newline at end of file diff --git a/src/views/design/mypage/group/DesignGroup7.js b/src/views/design/mypage/group/DesignGroup7.js new file mode 100644 index 0000000..9494b83 --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup7.js @@ -0,0 +1,126 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeftCircle } from 'react-feather' + +const DesignGroup7 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    + + +
    +
    + +

    그룹 관리자 권한 상세정보

    +
    + {/*
    + 검색 +
    */} +
    + + +
    +
    +
    +
    +

    *필수 입력 항목

    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + 저장 + 목록 +
    +
    +
    + +
    +
    + ) +} +export default DesignGroup7 \ No newline at end of file diff --git a/src/views/design/mypage/group/DesignGroup8.js b/src/views/design/mypage/group/DesignGroup8.js new file mode 100644 index 0000000..2d02842 --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup8.js @@ -0,0 +1,121 @@ +import { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import { selectThemeColors } from '@utils' +import Select, { components } from 'react-select' +import makeAnimated from 'react-select/animated' +import CreatableSelect from 'react-select/creatable' +import AsyncSelect from 'react-select/async' +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather' + +import '../../../../assets/css/custom.css'; + +const colorOptions = [ + { value: 'ocean', label: 'Ocean', color: '#00B8D9', isFixed: true }, + { value: 'blue', label: 'Blue', color: '#0052CC', isFixed: true }, + { value: 'purple', label: 'Purple', color: '#5243AA', isFixed: true }, + { value: 'red', label: 'Red', color: '#FF5630', isFixed: false }, + { value: 'orange', label: 'Orange', color: '#FF8B00', isFixed: false }, + { value: 'yellow', label: 'Yellow', color: '#FFC400', isFixed: false } +] + +const orderOptions = values => { + if (values.length > 0) return values.filter(v => v.isFixed).concat(values.filter(v => !v.isFixed)) +} + +const DesignGroup8 = () => { + return ( +
    + + +
    +
    +

    기체등록 그룹 검색

    +
    +
    + 검색 +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    기체 목록

    + {/* 검색결과 총 1028건 */} +
    +
    + 기체등록 + 기체삭제 +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    식별 번호종류모델 명제작 번호제작자자체중량중량구분 코드카메라 탑재여부보험가입 여부등록일자더보기
    FFJREH4343무인 멀티콥터CJR-331234124홍길동25kg최대이륙중량 250g이하탑재가입2021-11-11 13:00:00상세보기
    + +
    +
    + ) +} +export default DesignGroup8 diff --git a/src/views/design/mypage/group/DesignGroup9.js b/src/views/design/mypage/group/DesignGroup9.js new file mode 100644 index 0000000..eecf642 --- /dev/null +++ b/src/views/design/mypage/group/DesignGroup9.js @@ -0,0 +1,200 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeftCircle } from 'react-feather' + +const DesignGroup9 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    + + +
    +
    + +

    기체등록 상세정보

    +
    + {/*
    + 검색 +
    */} +
    + + +
    +
    +
    +
    +

    *필수 입력 항목

    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    추가 입력 항목

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + 저장 + 목록 +
    +
    +
    + +
    +
    + ) +} +export default DesignGroup9 \ No newline at end of file diff --git a/src/views/design/mypage/myinfo/DesignMyinfo1.js b/src/views/design/mypage/myinfo/DesignMyinfo1.js new file mode 100644 index 0000000..5436a94 --- /dev/null +++ b/src/views/design/mypage/myinfo/DesignMyinfo1.js @@ -0,0 +1,219 @@ +// ** React Imports +import { useState, useEffect } from 'react' +import { useParams, Link } from 'react-router-dom' + +import { useSelector, useDispatch } from 'react-redux' + +// ** Third Party Components +import { User, Info, CreditCard, Lock, Check, X } from 'react-feather' +import { Card, CardBody, Row, Col, Nav, NavItem, NavLink, TabContent, TabPane, Alert, FormGroup, Input, Label, Button, + Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap' + +// ** Styles +import '../../../../assets/css/custom.css'; +const UserEdit = () => { + // ** States & Vars + const [activeTab, setActiveTab] = useState('1'), + store = useSelector(state => state.users), + dispatch = useDispatch(), + { id } = useParams() + + // ** Function to toggle tabs + const toggle = tab => setActiveTab(tab) + const [formModal, setFormModal] = useState(false) + + return ( +
    +
    + +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + setFormModal(!formModal)}> + 변경 + +
    + +
    + setFormModal(!formModal)} + className='modal-dialog-centered' + > + setFormModal(!formModal)}> + 휴대폰번호 변경 + + + + + + + + + + + + + {/* 발송 버튼을 누르면 남은시간 d-none를 빼주세여~ 그럼나타나여~ */} + + 남은시간 : 3:00 + + + 인증번호 발송 + + + + + + + + + + + + + + + 인증하기 + + + + + + + + + + + +
    +
    + +
    +
    +
    + 저장 + 취소 +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    + 저장 + 취소 +
    +
    + + test3 + +
    +
    +
    + +
    +
    + ); +} +export default UserEdit diff --git a/src/views/design/sys/code/DesignCode1.js b/src/views/design/sys/code/DesignCode1.js new file mode 100644 index 0000000..a52f70a --- /dev/null +++ b/src/views/design/sys/code/DesignCode1.js @@ -0,0 +1,111 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label, Breadcrumb, BreadcrumbItem } from 'reactstrap' + +import { Link } from 'react-router-dom' +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeftCircle } from 'react-feather' + +const DesignCode1 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    + + +
    +
    +

    그룹코드 검색조건

    +
    +
    + 검색 +
    +
    + + +
    +
    +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    그룹코드 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    그룹코드 목록

    +
    +
    + 그룹코드 생성 + 삭제 +
    +
    + + + + + + + + + + + + + + + + + +
    그룹코드 명그룹 코드생성자더보기
    팔네트웍스ANVJRJF56834홍길동상세보기
    + +
    +
    + ) +} +export default DesignCode1 \ No newline at end of file diff --git a/src/views/design/sys/code/DesignCode2.js b/src/views/design/sys/code/DesignCode2.js new file mode 100644 index 0000000..1020995 --- /dev/null +++ b/src/views/design/sys/code/DesignCode2.js @@ -0,0 +1,103 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeft, ArrowLeftCircle, X, XCircle } from 'react-feather' +const DesignCode2 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    + + +
    +
    + +

    그룹코드 상세정보

    +
    + {/*
    + 검색 +
    */} +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + 저장 + 목록 +
    +
    +
    + +
    +
    + ) +} +export default DesignCode2 \ No newline at end of file diff --git a/src/views/design/sys/code/DesignCode3.js b/src/views/design/sys/code/DesignCode3.js new file mode 100644 index 0000000..e8b444f --- /dev/null +++ b/src/views/design/sys/code/DesignCode3.js @@ -0,0 +1,143 @@ +import { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import { selectThemeColors } from '@utils' +import Select, { components } from 'react-select' +import makeAnimated from 'react-select/animated' +import CreatableSelect from 'react-select/creatable' +import AsyncSelect from 'react-select/async' +import { MoreVertical, Edit, Trash, Search, File } from 'react-feather' + +import '../../../../assets/css/custom.css'; + +const colorOptions = [ + { value: 'ocean', label: 'Ocean', color: '#00B8D9', isFixed: true }, + { value: 'blue', label: 'Blue', color: '#0052CC', isFixed: true }, + { value: 'purple', label: 'Purple', color: '#5243AA', isFixed: true }, + { value: 'red', label: 'Red', color: '#FF5630', isFixed: false }, + { value: 'orange', label: 'Orange', color: '#FF8B00', isFixed: false }, + { value: 'yellow', label: 'Yellow', color: '#FFC400', isFixed: false } +] + +const orderOptions = values => { + if (values.length > 0) return values.filter(v => v.isFixed).concat(values.filter(v => !v.isFixed)) +} + +const DesignCode3 = () => { + return ( +
    + + +
    +
    +

    코드관리 검색조건

    +
    +
    + 검색 +
    +
    + + +
    +
    +
    +
    +
    그룹코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    코드
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    그룹코드 명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    코드관리 목록

    + {/* 검색결과 총 1028건 */} +
    +
    + 코드생성 + 삭제 +
    +
    + + + + + + + + + + + + + + + + + + + +
    코드 명코드그룹코드 명생성자더보기
    팔네트웍스ANVJRJF56834BAISDJF56834홍길동상세보기
    + +
    +
    + ) +} +export default DesignCode3 diff --git a/src/views/design/sys/code/DesignCode4.js b/src/views/design/sys/code/DesignCode4.js new file mode 100644 index 0000000..bcb842d --- /dev/null +++ b/src/views/design/sys/code/DesignCode4.js @@ -0,0 +1,116 @@ +import React, { useState } from 'react' +import { Row, Col, Table, Badge, UncontrolledDropdown, + DropdownMenu, DropdownItem, DropdownToggle, + Card, CardHeader, CardBody, CardTitle, CardSubtitle, + ButtonGroup, Button, Input, CustomInput, FormGroup, Modal, ModalHeader, ModalBody, ModalFooter, + Label } from 'reactstrap' + +import Flatpickr from 'react-flatpickr' +import { Calendar } from 'react-feather' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' +import '../../../../assets/css/custom.css'; + + // ** icon, img + import { MoreVertical, Edit, Trash, Search, File, ArrowLeft, ArrowLeftCircle, X, XCircle } from 'react-feather' +const DesignCode4 = () => { + const [formModal, setFormModal] = useState(false) + return ( +
    + + +
    +
    + +

    코드관리 상세정보

    +
    + {/*
    + 검색 +
    */} +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + 저장 + 목록 + 탈퇴 +
    +
    +
    + +
    +
    + ) +} +export default DesignCode4 \ No newline at end of file diff --git a/src/views/design/sys/code/DesignCode5.js b/src/views/design/sys/code/DesignCode5.js new file mode 100644 index 0000000..4982151 --- /dev/null +++ b/src/views/design/sys/code/DesignCode5.js @@ -0,0 +1,111 @@ +import { useState } from 'react' +import Repeater from '@components/repeater' +import { Row, Col, Card, CardHeader, CardBody, Form, FormGroup, Label, Input, Button } from 'reactstrap' +import { X, Plus, ArrowLeftCircle } from 'react-feather' +import '../../../../assets/css/custom.css' + +const DesignCode5 = () => { + const [count, setCount] = useState(1) + + const increaseCount = () => { + setCount(count + 1) + } + + const deleteForm = e => { + e.preventDefault() + e.target.closest('form').remove() + } + + return ( +
    +
    +
    +

    코드 관리

    +
    +
    + +
    +
    + + + + +
    +
    +
    +

    코드 관리 상세정보

    +
    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    +
    +
    +

    *필수 입력 항목

    +
    +
    + + + + *코드 ID + + + *코드 명 + + + *비고 + + + + {i => ( +
    + + + + + + + + + + + + + + + + + + + + + + + + + + 삭제 + + + +
    + )} +
    +
    +
    +
    +
    +
    + + 추가 + 저장 + 목록 +
    +
    +
    +
    + +
    +
    + ) +} + +export default DesignCode5 diff --git a/src/views/design/sys/menu/DesignMenu1.js b/src/views/design/sys/menu/DesignMenu1.js new file mode 100644 index 0000000..93152c5 --- /dev/null +++ b/src/views/design/sys/menu/DesignMenu1.js @@ -0,0 +1,167 @@ +import { useState } from 'react' +import Repeater from '@components/repeater' +import { Row, Col, Card, CardHeader, CardBody, Form, FormGroup, Label, Input, Button, CustomInput } from 'reactstrap' +import { X, Plus, ArrowLeftCircle, Folder, ChevronsRight, ChevronRight, List } from 'react-feather' +import '../../../../assets/css/custom.css' + +const DesignMenu1 = () => { + + return ( +
    +
    +
    +

    메뉴 관리

    +
    +
    + +
    +
    + + + + +
    +
    +
    +

    메뉴 목록

    +
    +
    +
    + 최상단 메뉴 추가 + 메뉴 추가 + 삭제 +
    +
    +
      +
    • 기초 정보 관리
      +
        +
      • 그룹 관리
        +
          +
        • 그룹 목록
        • +
        • 승인 관리
        • +
        • 관리자 관리
        • +
        +
      • +
      • 기체 관리
        +
          +
        • 기체 목록
        • +
        +
      • +
      +
    • +
    • 시스템 관리
      +
        +
      • 코드 정보 관리
        +
          +
        • 코드 관리
        • +
        +
      • +
      • 메뉴/권한 관리
        +
          +
        • 메뉴 관리
        • +
        • 권한 관리
        • +
        • 권한 별 메뉴 관리
        • +
        +
      • +
      • 사용자 관리
        +
          +
        • 사용자 관리
        • +
        +
      • +
      +
    • +
    • 통계
      +
        +
      • 비행 통계
        +
          +
        • 비행 통계 차트
        • +
        +
      • +
      • 기체 통계
        +
          +
        • 기체 통계 차트
        • +
        +
      • +
      +
    • +
    +
    +
    +
    +
    + + + + +
    +
    +
    +

    메뉴 상세정보

    +
    +
    최종 수정자 : 홍길동최종 수정일자 : 2020-01-01
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + 저장 + 삭제 +
    +
    +
    +
    + +
    +
    + ) +} + +export default DesignMenu1 diff --git a/src/views/design/sys/menu/DesignMenu2.js b/src/views/design/sys/menu/DesignMenu2.js new file mode 100644 index 0000000..577337a --- /dev/null +++ b/src/views/design/sys/menu/DesignMenu2.js @@ -0,0 +1,102 @@ +import { useState } from 'react' +import Repeater from '@components/repeater' +import { Row, Col, Card, CardHeader, CardBody, Form, FormGroup, Label, Input, Button, CustomInput } from 'reactstrap' +import { X, Plus, ArrowLeftCircle, Folder, ChevronsRight, ChevronRight, List } from 'react-feather' +import '../../../../assets/css/custom.css' +import { SystemCodeGrid } from '../../../../components/system/code/SystemCodeGrid' + +const DesignMenu2 = () => { + + return ( +
    +
    +
    +

    권한 목록

    +
    +
    + {/* */} +
    +
    + + + + + + + +
    +
    +
    +

    메뉴 목록

    +
    +
    +
    + 저장 + {/* 메뉴 추가 + 삭제 */} +
    +
    +
      +
    • 기초 정보 관리
      +
        +
      • 그룹 관리
        +
          +
        • 그룹 목록
        • +
        • 승인 관리
        • +
        • 관리자 관리
        • +
        +
      • +
      • 기체 관리
        +
          +
        • 기체 목록
        • +
        +
      • +
      +
    • +
    • 시스템 관리
      +
        +
      • 코드 정보 관리
        +
          +
        • 코드 관리
        • +
        +
      • +
      • 메뉴/권한 관리
        +
          +
        • 메뉴 관리
        • +
        • 권한 관리
        • +
        • 권한 별 메뉴 관리
        • +
        +
      • +
      • 사용자 관리
        +
          +
        • 사용자 관리
        • +
        +
      • +
      +
    • +
    • 통계
      +
        +
      • 비행 통계
        +
          +
        • 비행 통계 차트
        • +
        +
      • +
      • 기체 통계
        +
          +
        • 기체 통계 차트
        • +
        +
      • +
      +
    • +
    +
    +
    +
    +
    + +
    +
    + ) +} + +export default DesignMenu2 diff --git a/src/views/design/sys/menu/DesignMenu3.js b/src/views/design/sys/menu/DesignMenu3.js new file mode 100644 index 0000000..dcf27e7 --- /dev/null +++ b/src/views/design/sys/menu/DesignMenu3.js @@ -0,0 +1,147 @@ +import { useState } from 'react' +import Repeater from '@components/repeater' +import { Row, Col, Card, CardHeader, CardBody, Form, FormGroup, Label, Input, Button, CustomInput } from 'reactstrap' +import { X, Plus, ArrowLeftCircle, Folder, ChevronsRight, ChevronRight, List } from 'react-feather' +import '../../../../assets/css/custom.css' + +const DesignMenu3 = () => { + + return ( +
    +
    +
    +

    권한 목록

    +
    +
    + +
    +
    +
    + + +
    +
    +

    권한 검색조건

    +
    +
    + + 검색 + + {/* */} +
    +
    + + +
    +
    +
    +
    +
    그룹명
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + + +
    +
    +
    +

    메뉴 목록

    +
    +
    + 저장 + {/* */} +
    +
    +
    +
      +
    • 기초 정보 관리 +
        +
      • 그룹 관리 +
          +
        • 그룹 목록
        • +
        • 승인 관리
        • +
        • 관리자 관리
        • +
        +
      • +
      • 기체 관리 +
          +
        • 기체 목록
        • +
        +
      • +
      +
    • +
    • 시스템 관리 +
        +
      • 코드 정보 관리 +
          +
        • 코드 관리
        • +
        +
      • +
      • 메뉴/권한 관리 +
          +
        • 메뉴 관리
        • +
        • 권한 관리
        • +
        • 권한 별 메뉴 관리
        • +
        +
      • +
      • 사용자 관리 +
          +
        • 사용자 관리
        • +
        +
      • +
      +
    • +
    • 통계 +
        +
      • 비행 통계 +
          +
        • 비행 통계 차트
        • +
        +
      • +
      • 기체 통계 +
          +
        • 기체 통계 차트
        • +
        +
      • +
      +
    • +
    +
    +
    +
    +
    + +
    +
    + +
    + ) +} + +export default DesignMenu3 diff --git a/src/views/extensions/sliders/SliderBehaviour.js b/src/views/extensions/sliders/SliderBehaviour.js new file mode 100644 index 0000000..e7932a9 --- /dev/null +++ b/src/views/extensions/sliders/SliderBehaviour.js @@ -0,0 +1,60 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderBehaviour = ({ direction }) => { + return ( + + + Slider Behaviour + + +
    Tap
    + +
    Drag
    + +
    Fixed dragging
    + +
    Combined options
    + +
    +
    + ) +} + +export default SliderBehaviour diff --git a/src/views/extensions/sliders/SliderColors.js b/src/views/extensions/sliders/SliderColors.js new file mode 100644 index 0000000..6817676 --- /dev/null +++ b/src/views/extensions/sliders/SliderColors.js @@ -0,0 +1,48 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderValues = ({ direction }) => { + const colorOptions = { + start: [40, 60], + connect: true, + behaviour: 'drag', + step: 1000, + tooltips: true, + range: { + min: 0, + max: 10000 + }, + pips: { + mode: 'steps', + stepped: true, + density: 10 + }, + direction + } + + return ( +
    + {/*
    Default / Primary Color Slider
    */} + {/* */} + +{/* +
    Secondary Color Slider
    + + +
    Success Color Slider
    + + +
    Danger Color Slider
    + + +
    warning Color Slider
    + + +
    info Color Slider
    + */} + +
    + ) +} + +export default SliderValues diff --git a/src/views/extensions/sliders/SliderConnectUpper.js b/src/views/extensions/sliders/SliderConnectUpper.js new file mode 100644 index 0000000..807272e --- /dev/null +++ b/src/views/extensions/sliders/SliderConnectUpper.js @@ -0,0 +1,29 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderConnectUpper = ({ direction }) => { + return ( + + + Connect to upper + + + + + + ) +} + +export default SliderConnectUpper diff --git a/src/views/extensions/sliders/SliderScalePips.js b/src/views/extensions/sliders/SliderScalePips.js new file mode 100644 index 0000000..6b656e4 --- /dev/null +++ b/src/views/extensions/sliders/SliderScalePips.js @@ -0,0 +1,32 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderScalePips = ({ direction }) => { + return ( + + + Slider Scales / Pips + + + + + + ) +} + +export default SliderScalePips diff --git a/src/views/extensions/sliders/SliderValues.js b/src/views/extensions/sliders/SliderValues.js new file mode 100644 index 0000000..20890a3 --- /dev/null +++ b/src/views/extensions/sliders/SliderValues.js @@ -0,0 +1,34 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderValues = ({ direction }) => { + return ( + + + Slider Values + + +
    Handles
    + +
    Snapping between steps
    + +
    +
    + ) +} + +export default SliderValues diff --git a/src/views/extensions/sliders/SliderVertical.js b/src/views/extensions/sliders/SliderVertical.js new file mode 100644 index 0000000..c66312b --- /dev/null +++ b/src/views/extensions/sliders/SliderVertical.js @@ -0,0 +1,28 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderVertical = ({ direction }) => { + return ( + + + Vertical Default + + + + + + ) +} + +export default SliderVertical diff --git a/src/views/extensions/sliders/SliderVerticalLimit.js b/src/views/extensions/sliders/SliderVerticalLimit.js new file mode 100644 index 0000000..f41865a --- /dev/null +++ b/src/views/extensions/sliders/SliderVerticalLimit.js @@ -0,0 +1,31 @@ +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderLimit = ({ direction }) => { + return ( + + + Limit + + + + + + ) +} + +export default SliderLimit diff --git a/src/views/extensions/sliders/SliderVerticalTooltips.js b/src/views/extensions/sliders/SliderVerticalTooltips.js new file mode 100644 index 0000000..df4e4b3 --- /dev/null +++ b/src/views/extensions/sliders/SliderVerticalTooltips.js @@ -0,0 +1,37 @@ +import Nouislider from 'nouislider-react' +import wNumb from 'wnumb' +import { Card, CardHeader, CardTitle, CardBody } from 'reactstrap' + +const SliderTooltips = ({ direction }) => { + return ( + + + Tooltips + + + + + + ) +} + +export default SliderTooltips diff --git a/src/views/extensions/sliders/SliderWithInput.js b/src/views/extensions/sliders/SliderWithInput.js new file mode 100644 index 0000000..c00a973 --- /dev/null +++ b/src/views/extensions/sliders/SliderWithInput.js @@ -0,0 +1,178 @@ +import { useState } from 'react' +import Nouislider from 'nouislider-react' +import { Card, CardHeader, CardTitle, CardBody, Input, Row, Col } from 'reactstrap' + +const SliderWithInput = ({ direction }) => { + const [upperConnect, setUpperConnect] = useState(10) + const [lowerConnect, setLowerConnect] = useState(30.0) + + return ( + + + Slider With Input + + + + + + setUpperConnect(e.target.value)} + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + setLowerConnect(e.target.value)} + /> + + + + + ) +} + +export default SliderWithInput diff --git a/src/views/extensions/sliders/SlidersBootstrap.js b/src/views/extensions/sliders/SlidersBootstrap.js new file mode 100644 index 0000000..5771823 --- /dev/null +++ b/src/views/extensions/sliders/SlidersBootstrap.js @@ -0,0 +1,23 @@ +import { Card, CardHeader, CardTitle, CardBody, FormGroup, Input, Label } from 'reactstrap' + +const SlidersBootstrap = () => { + return ( + + + Default Bootstrap 4 slider + + + + + + + + + + + + + ) +} + +export default SlidersBootstrap diff --git a/src/views/extensions/sliders/index.js b/src/views/extensions/sliders/index.js new file mode 100644 index 0000000..e2724e1 --- /dev/null +++ b/src/views/extensions/sliders/index.js @@ -0,0 +1,67 @@ +import { Fragment } from 'react' +import { Row, Col } from 'reactstrap' +import { useRTL } from '@hooks/useRTL' +import SliderColors from './SliderColors' +import SliderValues from './SliderValues' +import SliderVertical from './SliderVertical' +import SliderBehaviour from './SliderBehaviour' +import SliderScalePips from './SliderScalePips' +import SliderWithInput from './SliderWithInput' +import SliderBootstrap from './SlidersBootstrap' +import SliderConnectUpper from './SliderConnectUpper' +import SliderVerticalLimit from './SliderVerticalLimit' +import SliderVerticalTooltip from './SliderVerticalTooltips' +import ExtensionsHeader from '@components/extensions-header' + +import '@styles/react/libs/noui-slider/noui-slider.scss' + +const Slider = () => { + const [isRtl, setIsRtl] = useRTL() + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export default Slider diff --git a/src/views/forms/wizard/WizardHorizontal.js b/src/views/forms/wizard/WizardHorizontal.js new file mode 100644 index 0000000..26ff318 --- /dev/null +++ b/src/views/forms/wizard/WizardHorizontal.js @@ -0,0 +1,47 @@ +import { useRef, useState } from 'react' +import Wizard from '@components/wizard' +import { ArrowRight } from 'react-feather' +import Address from './steps-with-validation/Address' +import SocialLinks from './steps-with-validation/SocialLinks' +import PersonalInfo from './steps-with-validation/PersonalInfo' +import AccountDetails from './steps-with-validation/AccountDetails' + +const WizardHorizontal = () => { + const [stepper, setStepper] = useState(null) + const ref = useRef(null) + + const steps = [ + { + id: 'account-details', + title: 'Account Details', + subtitle: 'Enter Your Account Details.', + content: + }, + { + id: 'personal-info', + title: 'Personal Info', + subtitle: 'Add Personal Info', + content: + }, + { + id: 'step-address', + title: 'Address', + subtitle: 'Add Address', + content:
    + }, + { + id: 'social-links', + title: 'Social Links', + subtitle: 'Add Social Links', + content: + } + ] + + return ( +
    + setStepper(el)} ref={ref} steps={steps} /> +
    + ) +} + +export default WizardHorizontal diff --git a/src/views/forms/wizard/WizardModern.js b/src/views/forms/wizard/WizardModern.js new file mode 100644 index 0000000..32ee1fe --- /dev/null +++ b/src/views/forms/wizard/WizardModern.js @@ -0,0 +1,59 @@ +import { useRef, useState } from 'react' +import Wizard from '@components/wizard' +import Address from './steps/Address' +import SocialLinks from './steps/SocialLinks' +import PersonalInfo from './steps/PersonalInfo' +import AccountDetails from './steps/AccountDetails' +import { FileText, User, MapPin, Link } from 'react-feather' + +const WizardModern = () => { + const [stepper, setStepper] = useState(null) + const ref = useRef(null) + + const steps = [ + { + id: 'account-details', + title: 'Account Details', + subtitle: 'Enter Your Account Details.', + icon: , + content: + }, + { + id: 'personal-info', + title: 'Personal Info', + subtitle: 'Add Personal Info', + icon: , + content: + }, + { + id: 'step-address', + title: 'Address', + subtitle: 'Add Address', + icon: , + content:
    + }, + { + id: 'social-links', + title: 'Social Links', + subtitle: 'Add Social Links', + icon: , + content: + } + ] + + return ( +
    + setStepper(el)} + /> +
    + ) +} + +export default WizardModern diff --git a/src/views/forms/wizard/WizardModernVertical.js b/src/views/forms/wizard/WizardModernVertical.js new file mode 100644 index 0000000..faf2849 --- /dev/null +++ b/src/views/forms/wizard/WizardModernVertical.js @@ -0,0 +1,59 @@ +import { useRef, useState } from 'react' +import Wizard from '@components/wizard' +import Address from './steps/Address' +import SocialLinks from './steps/SocialLinks' +import PersonalInfo from './steps/PersonalInfo' +import AccountDetails from './steps/AccountDetails' +import { FileText, User, MapPin, Link } from 'react-feather' + +const WizardModernVertical = () => { + const [stepper, setStepper] = useState(null) + const ref = useRef(null) + + const steps = [ + { + id: 'account-details', + title: 'Account Details', + subtitle: 'Enter Your Account Details.', + icon: , + content: + }, + { + id: 'personal-info', + title: 'Personal Info', + subtitle: 'Add Personal Info', + icon: , + content: + }, + { + id: 'step-address', + title: 'Address', + subtitle: 'Add Address', + icon: , + content:
    + }, + { + id: 'social-links', + title: 'Social Links', + subtitle: 'Add Social Links', + icon: , + content: + } + ] + + return ( +
    + setStepper(el)} + /> +
    + ) +} + +export default WizardModernVertical diff --git a/src/views/forms/wizard/WizardVertical.js b/src/views/forms/wizard/WizardVertical.js new file mode 100644 index 0000000..2e8ee2d --- /dev/null +++ b/src/views/forms/wizard/WizardVertical.js @@ -0,0 +1,54 @@ +import { useRef, useState } from 'react' +import Wizard from '@components/wizard' +import Address from './steps/Address' +import SocialLinks from './steps/SocialLinks' +import PersonalInfo from './steps/PersonalInfo' +import AccountDetails from './steps/AccountDetails' + +const WizardVertical = () => { + const [stepper, setStepper] = useState(null) + const ref = useRef(null) + + const steps = [ + { + id: 'account-details', + title: 'Account Details', + subtitle: 'Enter Your Account Details.', + content: + }, + { + id: 'personal-info', + title: 'Personal Info', + subtitle: 'Add Personal Info', + content: + }, + { + id: 'step-address', + title: 'Address', + subtitle: 'Add Address', + content:
    + }, + { + id: 'social-links', + title: 'Social Links', + subtitle: 'Add Social Links', + content: + } + ] + + return ( +
    + setStepper(el)} + /> +
    + ) +} + +export default WizardVertical diff --git a/src/views/forms/wizard/_react-select.scss b/src/views/forms/wizard/_react-select.scss new file mode 100644 index 0000000..8986ae8 --- /dev/null +++ b/src/views/forms/wizard/_react-select.scss @@ -0,0 +1,161 @@ +@import '../../../base/bootstrap-extended/include'; +@import '../../../base/components/include'; + +// InValid Select +.react-select.is-invalid { + .select__control { + border-color: $danger; + } +} + +// Select Control(Input) +.select__control, +.react-select__control { + &.select__control--is-disabled { + border-color: $border-color; + .select__indicator-separator { + background-color: $border-color; + } + } + + &.select__control--is-focused, + &.react-select__control--is-focused { + box-shadow: none; + border-color: $primary; + } + + .select__indicator svg { + cursor: pointer; + } + + .select__indicator-separator { + display: none; + } + .select__single-value { + color: $body-color; + } + + .select__placeholder { + color: $body-color; + } +} + +// Select Menu +.select__menu, +.react-select__menu { + .select__menu-list, + .react-select__menu-list { + .select__option, + .react-select__option { + cursor: pointer; + + &.select__option--is-focused { + background-color: rgba($color: $primary, $alpha: 0.12); + color: $primary; + } + + &.select__option--is-selected { + background-color: $primary; + color: $white; + } + } + } + + .select__menu-list, + .react-select__menu-list { + .select__group { + .select__group-heading { + margin-bottom: 0.5rem; + color: $headings-color; + font-weight: bolder; + font-size: inherit; + } + } + } +} + +// Multi Select +.select__multi-value, +.react-select__multi-value { + color: $white; + border-radius: 3px; + margin: 0 0.7rem 0 0; + + .select__multi-value__label { + color: $white; + font-size: 0.85rem; + border-radius: $border-radius; + padding: 0.26rem 0.6rem; + } + + .select__multi-value__remove { + padding-left: 0; + padding-right: 0.5rem; + + &:hover { + background-color: inherit; + color: inherit; + } + + svg { + height: 0.85rem; + width: 0.85rem; + &:hover { + cursor: pointer; + } + } + } +} + +// Select Borderless +.select-borderless { + .select__control { + border: 0; + .select__indicators { + display: none; + } + } +} + +// Dark Layout +.dark-layout { + .select__control { + background-color: $theme-dark-input-bg; + border-color: $theme-dark-border-color; + + .select__indicator svg { + fill: $theme-dark-body-color; + } + + .select__indicator span, + .select__single-value { + color: $theme-dark-body-color; + } + + .select__multi-value { + background-color: rgba($color: $primary, $alpha: 0.12); + .select__multi-value__label { + color: $primary; + } + } + .select__multi-value__remove { + svg { + fill: $primary; + } + &:hover { + background-color: transparent !important; + } + } + + .select__placeholder { + color: $theme-dark-input-placeholder-color; + } + + &.select__control--is-disabled { + opacity: 0.5; + } + } + .select__menu { + background-color: $theme-dark-card-bg; + } +} diff --git a/src/views/forms/wizard/index.js b/src/views/forms/wizard/index.js new file mode 100644 index 0000000..bf4b2c4 --- /dev/null +++ b/src/views/forms/wizard/index.js @@ -0,0 +1,30 @@ +import { Fragment } from 'react' +import { Row, Col } from 'reactstrap' +import WizardModern from './WizardModern' +import WizardVertical from './WizardVertical' +import WizardHorizontal from './WizardHorizontal' +import WizardModernVertical from './WizardModernVertical' +import BreadCrumbs from '@components/breadcrumbs' + +const Wizard = () => { + return ( + + + + + + + + + + + + + + + + + + ) +} +export default Wizard diff --git a/src/views/forms/wizard/steps-with-validation/AccountDetails.js b/src/views/forms/wizard/steps-with-validation/AccountDetails.js new file mode 100644 index 0000000..f3e1441 --- /dev/null +++ b/src/views/forms/wizard/steps-with-validation/AccountDetails.js @@ -0,0 +1,324 @@ +import * as yup from 'yup' +import { Fragment } from 'react' +import classnames from 'classnames' +import { isObjEmpty } from '@utils' +import { useForm } from 'react-hook-form' +import { ArrowLeft, ArrowRight } from 'react-feather' +import { yupResolver } from '@hookform/resolvers/yup' +import { Form, Label, Input, FormGroup, Row, Col, Button, CustomInput, CardText } from 'reactstrap' +import AppCollapse from '@components/app-collapse' +import Select from 'react-select' +import { selectThemeColors } from '@utils' +import completeImg from '../../../../assets/images/complete_img.svg' + +const AccountDetails = ({ stepper, type }) => { + const SignupSchema = yup.object().shape({ + [`username-${type}`]: yup.string().required(), + [`userid-${type}`]: yup.string().required(), + [`userbirth-${type}`]: yup.string().required(), + [`usergender-${type}`]: yup.string().required(), + [`usercountry-${type}`]: yup.string().required(), + [`userphone-${type}`]: yup.string().required(), + [`userphonecheck-${type}`]: yup.string().required(), + [`email-${type}`]: yup.string().email().required(), + [`password-val-${type}`]: yup.string().required(), + 'confirm-password-val': yup + .string() + .required() + .oneOf([yup.ref(`password-val-${type}`), null], 'Passwords must match') + }) + + const { register, errors, handleSubmit, trigger } = useForm({ + resolver: yupResolver(SignupSchema) + }) + + const onSubmit = () => { + trigger() + if (isObjEmpty(errors)) { + stepper.next() + } + } + + return ( + + {/* 약관동의시작 */} + {/*
    + + +
    +
    약관동의
    + 회원가입을 위해 아래의 약관을 확인하시고 필수 항목에 모두 동의하셔야 합니다. +
    +
    + +
    +
    + +
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    +
    +
    +
    + +
    + 약관내용 +
    +
    +
    +
    +
    + + 취소 + + + 동의 + +
    +
    */} + {/* ---- 약관동의 끝 */} + + {/* 가입정보입력 시작 */} +
    + + +
    +
    가입정보입력
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + + + + +
    +
    + + +
    + + + + +
    +
    + + +
    + {/* 발송 버튼을 누르면 남은시간 d-none를 빼주세여~ 그럼나타나여~ */} + + 남은시간 : 3:00 + + + 인증번호 발송 + +
    +
    + + + + + + + + + +
    +
    + + +
    + + 인증하기 + +
    +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    +
    + + +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +
    +
    +
    + + 취소 + + + 완료 + +
    +
    + {/* ---- 가입정보입력 끝 */} + + {/* 가입인사 시작 */} + {/*
    + + 환영합니다. 홍길동 님 + 모든 회원가입절차가 완료되었습니다. 로그인 후 사용해주세요. + + 로그인 + +
    */} + {/* ---- 가입인사 끝 */} +
    + ) +} + +export default AccountDetails diff --git a/src/views/forms/wizard/steps-with-validation/Address.js b/src/views/forms/wizard/steps-with-validation/Address.js new file mode 100644 index 0000000..0a45741 --- /dev/null +++ b/src/views/forms/wizard/steps-with-validation/Address.js @@ -0,0 +1,96 @@ +import { Fragment } from 'react' +import classnames from 'classnames' +import { isObjEmpty } from '@utils' +import { useForm } from 'react-hook-form' +import { ArrowLeft, ArrowRight } from 'react-feather' +import { Label, FormGroup, Row, Col, Button, Form, Input } from 'reactstrap' + +const Address = ({ stepper, type }) => { + const { register, errors, handleSubmit, trigger } = useForm() + + const onSubmit = () => { + trigger() + if (isObjEmpty(errors)) { + stepper.next() + } + } + + return ( + +
    +
    Address
    + Enter Your Address. +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + Previous + + + Next + + +
    +
    +
    + ) +} + +export default Address diff --git a/src/views/forms/wizard/steps-with-validation/PersonalInfo.js b/src/views/forms/wizard/steps-with-validation/PersonalInfo.js new file mode 100644 index 0000000..71656de --- /dev/null +++ b/src/views/forms/wizard/steps-with-validation/PersonalInfo.js @@ -0,0 +1,118 @@ +import { Fragment } from 'react' +import Select from 'react-select' +import classnames from 'classnames' +import { useForm } from 'react-hook-form' +import { ArrowLeft, ArrowRight } from 'react-feather' +import { selectThemeColors, isObjEmpty } from '@utils' +import { Label, FormGroup, Row, Col, Button, Form, Input } from 'reactstrap' + +import '@styles/react/libs/react-select/_react-select.scss' + +const PersonalInfo = ({ stepper, type }) => { + const { register, errors, handleSubmit, trigger } = useForm() + + const onSubmit = () => { + trigger() + if (isObjEmpty(errors)) { + stepper.next() + } + } + + const countryOptions = [ + { value: 'UK', label: 'UK' }, + { value: 'USA', label: 'USA' }, + { value: 'Spain', label: 'Spain' }, + { value: 'France', label: 'France' }, + { value: 'Italy', label: 'Italy' }, + { value: 'Australia', label: 'Australia' } + ] + + const languageOptions = [ + { value: 'English', label: 'English' }, + { value: 'French', label: 'French' }, + { value: 'Spanish', label: 'Spanish' }, + { value: 'Italian', label: 'Italian' }, + { value: 'Japanese', label: 'Japanese' } + ] + + return ( + +
    +
    Personal Info
    + Enter Your Personal Info. +
    +
    + + + + + + + + + + + + + + + + +
    + stepper.previous()}> + + Previous + + + Next + + +
    +
    +
    + ) +} + +export default PersonalInfo diff --git a/src/views/forms/wizard/steps-with-validation/SocialLinks.js b/src/views/forms/wizard/steps-with-validation/SocialLinks.js new file mode 100644 index 0000000..b6c8b89 --- /dev/null +++ b/src/views/forms/wizard/steps-with-validation/SocialLinks.js @@ -0,0 +1,95 @@ +import { Fragment } from 'react' +import classnames from 'classnames' +import { isObjEmpty } from '@utils' +import { useForm } from 'react-hook-form' +import { ArrowLeft } from 'react-feather' +import { Label, FormGroup, Row, Col, Button, Form, Input } from 'reactstrap' + +const SocialLinks = ({ stepper, type }) => { + const { register, errors, handleSubmit, trigger } = useForm() + + const onSubmit = () => { + trigger() + if (isObjEmpty(errors)) { + alert('submitted') + } + } + + return ( + +
    +
    Social Links
    + Enter Your Social Links. +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + stepper.previous()}> + + Previous + + + Submit + +
    +
    +
    + ) +} + +export default SocialLinks diff --git a/src/views/forms/wizard/steps/AccountDetails.js b/src/views/forms/wizard/steps/AccountDetails.js new file mode 100644 index 0000000..49c272e --- /dev/null +++ b/src/views/forms/wizard/steps/AccountDetails.js @@ -0,0 +1,213 @@ +import { Fragment } from 'react' +import { ArrowLeft, ArrowRight } from 'react-feather' +import { Label, FormGroup, Row, Col, Input, Form, Button, CustomInput, CardText } from 'reactstrap' + +const AccountDetails = ({ stepper, type }) => { + return ( + +
    +
    약관동의
    + 회원가입을 위해 아래의 약관을 확인하시고 필수 항목에 모두 동의하셔야 합니다. +
    +
    e.preventDefault()}> + + +
    +
    약관동의
    + 회원가입을 위해 아래의 약관을 확인하시고 필수 항목에 모두 동의하셔야 합니다. +
    +
    + +
    +
    + +
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    + 약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    약관내용
    +
    +
    +
    + +
    + 약관내용 +
    +
    +
    +
    + e.preventDefault()}> + + +
    +
    가입정보입력
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + + + + +
    +
    + + +
    + + + + +
    +
    + + +
    + + + + + + {/* 발송 버튼을 누르면 남은시간 d-none를 빼주세여~ 그럼나타나여~ */} + 남은시간 03:00 + + 인증번호 발송 + +
    +
    + + +
    + +
    +
    + + +
    + + + ID 중복확인 + +
    +
    + + + + + + + + +
    + + +
    +
    + + +
    +
    +
    +
    + + 취소 + + + 완료 + +
    + +
    + ) +} + +export default AccountDetails diff --git a/src/views/forms/wizard/steps/Address.js b/src/views/forms/wizard/steps/Address.js new file mode 100644 index 0000000..8ed17b6 --- /dev/null +++ b/src/views/forms/wizard/steps/Address.js @@ -0,0 +1,61 @@ +import { Fragment } from 'react' +import { ArrowLeft, ArrowRight } from 'react-feather' +import { Label, FormGroup, Row, Col, Input, Form, Button } from 'reactstrap' + +const Address = ({ stepper, type }) => { + return ( + +
    +
    Address
    + Enter Your Address. +
    +
    e.preventDefault()}> + + + + + + + + + + + + + + + + + + + + +
    + stepper.previous()}> + + Previous + + stepper.next()}> + Next + + +
    +
    +
    + ) +} + +export default Address diff --git a/src/views/forms/wizard/steps/PersonalInfo.js b/src/views/forms/wizard/steps/PersonalInfo.js new file mode 100644 index 0000000..62c9fc6 --- /dev/null +++ b/src/views/forms/wizard/steps/PersonalInfo.js @@ -0,0 +1,93 @@ +import { Fragment } from 'react' +import Select from 'react-select' +import { ArrowLeft, ArrowRight } from 'react-feather' +import { selectThemeColors } from '@utils' +import { Label, FormGroup, Row, Col, Form, Input, Button } from 'reactstrap' + +import '@styles/react/libs/react-select/_react-select.scss' + +const PersonalInfo = ({ stepper, type }) => { + const countryOptions = [ + { value: 'UK', label: 'UK' }, + { value: 'USA', label: 'USA' }, + { value: 'Spain', label: 'Spain' }, + { value: 'France', label: 'France' }, + { value: 'Italy', label: 'Italy' }, + { value: 'Australia', label: 'Australia' } + ] + + const languageOptions = [ + { value: 'English', label: 'English' }, + { value: 'French', label: 'French' }, + { value: 'Spanish', label: 'Spanish' }, + { value: 'Italian', label: 'Italian' }, + { value: 'Japanese', label: 'Japanese' } + ] + + return ( + +
    +
    Personal Info
    + Enter Your Personal Info. +
    +
    e.preventDefault()}> + + + + + + + + + + + + + + + + +
    + stepper.previous()}> + + Previous + + stepper.next()}> + Next + + +
    +
    +
    + ) +} + +export default PersonalInfo diff --git a/src/views/forms/wizard/steps/SocialLinks.js b/src/views/forms/wizard/steps/SocialLinks.js new file mode 100644 index 0000000..e2ed237 --- /dev/null +++ b/src/views/forms/wizard/steps/SocialLinks.js @@ -0,0 +1,55 @@ +import { Fragment } from 'react' +import { ArrowLeft } from 'react-feather' +import { Label, FormGroup, Row, Col, Form, Input, Button } from 'reactstrap' + +const SocialLinks = ({ stepper, type }) => { + return ( + +
    +
    Social Links
    + Enter Your Social Links. +
    +
    e.preventDefault()}> + + + + + + + + + + + + + + + + + + + + +
    + stepper.previous()}> + + Previous + + alert('submitted')}> + Submit + +
    +
    +
    + ) +} + +export default SocialLinks diff --git a/src/views/main/MainDashboard copy.js b/src/views/main/MainDashboard copy.js new file mode 100644 index 0000000..5ba56e0 --- /dev/null +++ b/src/views/main/MainDashboard copy.js @@ -0,0 +1,329 @@ +import React, { useEffect, useState, useContext, Fragment } from 'react' +import { Row, Col, Card, CardHeader, CardTitle, CardBody, Table } from 'reactstrap' +import '../../assets/css/custom.css' +import menu01 from '../../assets/images/menu01.png' +import menu02 from '../../assets/images/menu02.png' +import menu03 from '../../assets/images/menu03.png' + +import { Chart } from 'react-chartjs-2' +import { AlignLeft, Plus } from 'react-feather' +// ** Charts +import BarChart from '../../views/charts/chart-js/ChartjsBarChart' +import LineChart from '../../views/charts/chart-js/ChartjsLineChart' +import AreaChart from '../../views/charts/chart-js/ChartjsAreaChart' +import RadarChart from '../../views/charts/chart-js/ChartjsRadarChart' +import BubbleChart from '../../views/charts/chart-js/ChartjsBubbleChart' +import ScatterChart from '../../views/charts/chart-js/ChartjsScatterChart' +import DoughnutChart from '../../views/charts/chart-js/ChartjsDoughnutChart' +import PolarAreaChart from '../../views/charts/chart-js/ChartjsPolarAreaChart' +import HorizontalBarChart from '../../views/charts/chart-js/ChartjsHorizontalBar' + +// ** Custom Hooks +import { useSkin } from '@hooks/useSkin' + +// ** Context +import { ThemeColors } from '@src/utility/context/ThemeColors' + +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss' + +const MainDashboard = props => { + const movePage = url => { + props.history.push(url); + }; + const { colors } = useContext(ThemeColors), + [skin, setSkin] = useSkin(), + labelColor = skin === 'dark' ? '#b4b7bd' : '#6e6b7b', + tooltipShadow = 'rgba(0, 0, 0, 0.25)', + gridLineColor = 'rgba(200, 200, 200, 0.2)', + lineChartPrimary = '#666ee8', + lineChartDanger = '#ff4961', + warningColorShade = '#ffe802', + warningLightColor = '#FDAC34', + successColorShade = '#28dac6', + primaryColorShade = '#836AF9', + infoColorShade = '#299AFF', + yellowColor = '#ffe800', + greyColor = '#4F5D70', + blueColor = '#2c9aff', + blueLightColor = '#84D0FF', + greyLightColor = '#EDF1F4' + +// ** To Set Border Radius On Mount +useEffect(() => { + /*eslint-disable */ + Chart.elements.Rectangle.prototype.draw = function () { + let ctx = this._chart.ctx + let viewVar = this._view + let left, right, top, bottom, signX, signY, borderSkipped, radius + let borderWidth = viewVar.borderWidth + let cornerRadius = 20 + if (!viewVar.horizontal) { + left = viewVar.x - viewVar.width / 2 + right = viewVar.x + viewVar.width / 2 + top = viewVar.y + bottom = viewVar.base + signX = 1 + signY = top > bottom ? 1 : -1 + borderSkipped = viewVar.borderSkipped || 'bottom' + } else { + left = viewVar.base + right = viewVar.x + top = viewVar.y - viewVar.height / 2 + bottom = viewVar.y + viewVar.height / 2 + signX = right > left ? 1 : -1 + signY = 1 + borderSkipped = viewVar.borderSkipped || 'left' + } + + if (borderWidth) { + let barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)) + borderWidth = borderWidth > barSize ? barSize : borderWidth + let halfStroke = borderWidth / 2 + let borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0) + let borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0) + let borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0) + let borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0) + if (borderLeft !== borderRight) { + top = borderTop + bottom = borderBottom + } + if (borderTop !== borderBottom) { + left = borderLeft + right = borderRight + } + } + + ctx.beginPath() + ctx.fillStyle = viewVar.backgroundColor + ctx.strokeStyle = viewVar.borderColor + ctx.lineWidth = borderWidth + let corners = [ + [left, bottom], + [left, top], + [right, top], + [right, bottom] + ] + + let borders = ['bottom', 'left', 'top', 'right'] + let startCorner = borders.indexOf(borderSkipped, 0) + if (startCorner === -1) { + startCorner = 0 + } + + function cornerAt(index) { + return corners[(startCorner + index) % 4] + } + + let corner = cornerAt(0) + ctx.moveTo(corner[0], corner[1]) + + for (let i = 1; i < 4; i++) { + corner = cornerAt(i) + let nextCornerId = i + 1 + if (nextCornerId == 4) { + nextCornerId = 0 + } + + let nextCorner = cornerAt(nextCornerId) + + let width = corners[2][0] - corners[1][0], + height = corners[0][1] - corners[1][1], + x = corners[1][0], + y = corners[1][1] + + let radius = cornerRadius + + if (radius > height / 2) { + radius = height / 2 + } + if (radius > width / 2) { + radius = width / 2 + } + + if (!viewVar.horizontal) { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x + radius, y) + } else { + ctx.moveTo(x + radius, y) + ctx.lineTo(x + width - radius, y) + ctx.quadraticCurveTo(x + width, y, x + width, y + radius) + ctx.lineTo(x + width, y + height - radius) + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height) + ctx.lineTo(x + radius, y + height) + ctx.quadraticCurveTo(x, y + height, x, y + height) + ctx.lineTo(x, y + radius) + ctx.quadraticCurveTo(x, y, x, y) + } + } + + ctx.fill() + if (borderWidth) { + ctx.stroke() + } + } +}, []) + return ( + <> +
    + + + + window.open('/control', '_blank')}> + 드론 관제 시스템 + + + + + + movePage('/analysis/history/list')}> + 비행 이력 현황 + + + + + + movePage('/basis/group/index')}> + 기초 정보 관리 + + + + + + window.open('/analysis/simulation/index', '_blank')}> + 비행 시뮬레이션 + + + + +
    + + + + + + + + +
    +
    + + + + + 내 그룹 정보 + + + + + + + + + + + + + + + + + + + + + + + + +
    그룹 명생성일시
    팔네트웍스2021-08-19 10:31:44
    팔네트웍스22021-08-19 10:31:44
    팔네트웍스32021-08-19 10:31:44
    +
    +
    + + + + + 내 기체 정보 + + + + + + + + + + + + + + + + + + + + + + + + +
    제작 번호그룹 명
    gregdfy3434팔네트웍스2
    gregdfy3434팔네트웍스2
    gregdfy3434팔네트웍스2
    +
    +
    + +
    +
    + {/*
    + + + + + + 기본정보 + + + + 내 그룹 정보 + + + + + 내 그룹 정보 + + + + + 내 그룹 정보 + + + + + + +
    */} +
    + + ); +}; + +export default MainDashboard; diff --git a/src/views/main/MainDashboard.js b/src/views/main/MainDashboard.js new file mode 100644 index 0000000..72cb963 --- /dev/null +++ b/src/views/main/MainDashboard.js @@ -0,0 +1,11 @@ +// ** Styles +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import React from 'react'; +import '../../assets/css/custom.css'; +import { MainDashContainer } from '../../containers/main/dash/MainDashContainer'; + +const MainDashboard = props => { + return ; +}; + +export default MainDashboard; diff --git a/src/views/system/auth/SystemAuth.js b/src/views/system/auth/SystemAuth.js new file mode 100644 index 0000000..5798b99 --- /dev/null +++ b/src/views/system/auth/SystemAuth.js @@ -0,0 +1,18 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { BasisDronContainer } from '../../../containers/basis/dron/BasisDronContainer'; +import { SystemAuthContainer } from '../../../containers/system/auth/SystemAuthContainer'; + +const SystemAuth = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemAuth; diff --git a/src/views/system/auth/SystemAuthDetail.js b/src/views/system/auth/SystemAuthDetail.js new file mode 100644 index 0000000..94922a6 --- /dev/null +++ b/src/views/system/auth/SystemAuthDetail.js @@ -0,0 +1,18 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { SystemAuthDetailContainer } from '../../../containers/system/auth/SystemAuthDetailContainer'; + +const SystemAuthDetail = () => { + return ( +
    + + + {/* */} + {/* */} +
    + ); +}; + +export default SystemAuthDetail; diff --git a/src/views/system/auth/SystemAuthMenu.js b/src/views/system/auth/SystemAuthMenu.js new file mode 100644 index 0000000..5769686 --- /dev/null +++ b/src/views/system/auth/SystemAuthMenu.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { BasisDronContainer } from '../../../containers/basis/dron/BasisDronContainer'; + +const SystemAuthMenu = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemAuthMenu; diff --git a/src/views/system/code/SystemCode.js b/src/views/system/code/SystemCode.js new file mode 100644 index 0000000..4f1b631 --- /dev/null +++ b/src/views/system/code/SystemCode.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { SystemCodeContainer } from '../../../containers/system/code/SystemCodeContainer'; + +const SystemCode = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemCode; diff --git a/src/views/system/code/SystemCodeDetail.js b/src/views/system/code/SystemCodeDetail.js new file mode 100644 index 0000000..1248773 --- /dev/null +++ b/src/views/system/code/SystemCodeDetail.js @@ -0,0 +1,19 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { SystemCodeDetailMultiContainer } from '../../../containers/system/code/SystemCodeDetailMultiContainer'; + +const SystemCodeDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemCodeDetail; diff --git a/src/views/system/code/SystemCodeDetailMulti.js b/src/views/system/code/SystemCodeDetailMulti.js new file mode 100644 index 0000000..1248773 --- /dev/null +++ b/src/views/system/code/SystemCodeDetailMulti.js @@ -0,0 +1,19 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { SystemCodeDetailMultiContainer } from '../../../containers/system/code/SystemCodeDetailMultiContainer'; + +const SystemCodeDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemCodeDetail; diff --git a/src/views/system/code/SystemCodeGroup.js b/src/views/system/code/SystemCodeGroup.js new file mode 100644 index 0000000..0fdd722 --- /dev/null +++ b/src/views/system/code/SystemCodeGroup.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { BasisDronContainer } from '../../../containers/basis/dron/BasisDronContainer'; + +const SystemCodeGroup = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemCodeGroup; diff --git a/src/views/system/code/SystemCodeGroupDetail.js b/src/views/system/code/SystemCodeGroupDetail.js new file mode 100644 index 0000000..00f26d8 --- /dev/null +++ b/src/views/system/code/SystemCodeGroupDetail.js @@ -0,0 +1,20 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { BasisGroupContainer } from '../../../containers/basis/group/BasisGroupContainer'; +import { BasisGroupDetailContainer } from '../../../containers/basis/group/BasisGroupDetailContainer'; + +const SystemCodeGroupDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemCodeGroupDetail; diff --git a/src/views/system/menu/SystemMenu.js b/src/views/system/menu/SystemMenu.js new file mode 100644 index 0000000..a241d0d --- /dev/null +++ b/src/views/system/menu/SystemMenu.js @@ -0,0 +1,18 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; + +import { SystemMenuContainer } from '../../../containers/system/menu/SystemMenuContainer'; + +const SystemMenu = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemMenu; diff --git a/src/views/system/menu/SystemMenuDetail.js b/src/views/system/menu/SystemMenuDetail.js new file mode 100644 index 0000000..351fe81 --- /dev/null +++ b/src/views/system/menu/SystemMenuDetail.js @@ -0,0 +1,20 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; +import { BasisGroupContainer } from '../../../containers/basis/group/BasisGroupContainer'; +import { BasisGroupDetailContainer } from '../../../containers/basis/group/BasisGroupDetailContainer'; + +const SystemCodeDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemCodeDetail; diff --git a/src/views/system/user/SystemUser.js b/src/views/system/user/SystemUser.js new file mode 100644 index 0000000..b4241da --- /dev/null +++ b/src/views/system/user/SystemUser.js @@ -0,0 +1,17 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; + +import '../../../assets/css/custom.css'; +import { SystemUserContainer } from '../../../containers/system/user/SystemUserContainer'; + +const SystemUser = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemUser; diff --git a/src/views/system/user/SystemUserDetail.js b/src/views/system/user/SystemUserDetail.js new file mode 100644 index 0000000..8300a4f --- /dev/null +++ b/src/views/system/user/SystemUserDetail.js @@ -0,0 +1,20 @@ +import '@styles/react/libs/flatpickr/flatpickr.scss'; +import '@styles/react/libs/tables/react-dataTable-component.scss'; +// import { GroupCategroySearch } from '@src/components/basis/group/category/main/GroupCategroySearch'; +// import { GroupCategroyList } from '@src/components/basis/group/main/GroupCategroyList'; + +import '../../../assets/css/custom.css'; + +import { SystemUserDetailContainer } from '../../../containers/system/user/SystemUserDetailContainer'; + +const SystemUserDetail = () => { + return ( +
    + + {/* */} + {/* */} +
    + ); +}; + +export default SystemUserDetail; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9b90e0d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "noImplicitAny": false, + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src" + ] +}